{"version":3,"sources":["Static/scripts/Web/Common/array.extensions.ts","Static/scripts/Web/spt_scripts_standard/spt.event.manager.js","Static/scripts/Web/Common/spt.common.ts","Static/scripts/Web/Common/ko.extensions.ts","Static/scripts/Web/Common/ajaxManager.interop.ts","Static/scripts/Web/Common/dialogManager.interop.ts","Static/scripts/Web/Common/loaderManager.interop.ts","Static/scripts/Web/Detector.ts","Static/scripts/Web/ClientMapEditor/clientMap.common.ts","Static/scripts/Web/Shared/spt.utils.ts","Static/scripts/Web/Shared/spt.canvas.drawer.ts","Static/scripts/Web/Shared/spt.ThreeJs.utils.ts","Static/scripts/Web/Shared/mapsUtils/spt.ThreeJs.mapsUtils.ts","Static/scripts/Web/Shared/spt.ThreeJs.OBJExporter.ts","Static/scripts/Web/Shared/spt.ThreeJs.sdfText.ts","Static/scripts/Web/Shared/spt.ThreeJs.JsonConverter.ts"],"names":[],"mappings":"AAQA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;IACtB,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,UAAwB,UAAuC;QACjF,OAAO,IAAI,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,EAAjB,CAAiB,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC,CAAA;CACJ;AAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;IACtB,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,UAAwB,UAAuC;QACjF,OAAO,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;IAC7C,CAAC,CAAA;CACJ;AAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;IACtB,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,UAAwB,UAAuC;QACjF,OAAO,IAAI,CAAC,GAAG,OAAR,IAAI,EAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;IAC7C,CAAC,CAAA;CACJ;AAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE;IAC1B,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG,UAAwB,KAAU;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC,CAAA;CACJ;AAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE;IAChC,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,UAAwB,UAAgD;QACpG,IAAI,SAAS,GAAQ,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YACzB,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,SAAS,CAAC,GAAG,CAAC,EAAd,CAAc,CAAC,CAAC;IAC7D,CAAC,CAAA;CACJ;;ACxCD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrbA,oEAAoE;AAEpE,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEpC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAC9B,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;AAErG,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,YAAY,GAAG,OAAO,CAAC;AAC3B,IAAI,SAAS,GAAG,SAAS,CAAC;AAC1B,IAAI,gBAAgB,GAAG,UAAU,CAAC;AAClC,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,IAAI,OAAO,GAAG,EAAE,CAAC;AAEjB,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAC9B,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAChC,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAI,cAAc,GAAG,WAAW,CAAC;AACjC,IAAI,aAAa,GAAG,IAAI,CAAC;AACzB,IAAI,kBAAkB,GAAG,IAAI,CAAC;AAE9B,qCAAqC;AACrC,IAAI,WAAW,GAAG,QAAQ,GAAG,2BAA2B,CAAC;AACzD,IAAI,cAAc,GAAG,QAAQ,GAAG,0BAA0B,CAAC;AAE3D,8BAA8B;AAC9B,oCAAoC;AACpC,CAAC,UAAC,MAAW;IACT,IAAI,CAAC,MAAM,CAAC,MAAM;QACd,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO;QACtB,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY;QACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACjF,CAAC,CAAC,CAAC,CAAQ,CAAC,CAAC;AAEb,8CAA8C;AAC9C,IAAI,oBAAoB,GAAG;IACvB,IAAI,EAAE,CAAC;IACP,kBAAkB,EAAE,CAAC;IACrB,gBAAgB,EAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,kBAAkB,EAAE,CAAC;IACrB,sBAAsB,EAAE,EAAE;IAC1B,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,EAAE;IACpB,gBAAgB,EAAE,GAAG;IACrB,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;IACjB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,eAAe,EAAE,IAAI;IACrB,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,KAAK;IACnB,GAAG,EAAE,KAAK;CACb,CAAC;AAEF,IAAI,UAAU,GAAG;IACb,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACV,CAAC;AAEF,IAAI,UAAU,GAAgB;IAC1B,GAAG,EAAE,cAAc,GAAG,qBAAqB;IAC3C,MAAM,EAAE,cAAc,GAAG,wBAAwB;IACjD,KAAK,EAAE,cAAc,GAAG,uBAAuB;IAC/C,IAAI,EAAE,cAAc,GAAG,sBAAsB;IAC7C,IAAI,EAAE,cAAc,GAAG,sBAAsB;IAC7C,KAAK,EAAE,cAAc,GAAG,uBAAuB;IAC/C,eAAe,EAAE,cAAc,GAAG,sBAAsB;IACxD,mBAAmB,EAAE,cAAc,GAAG,sBAAsB;IAC5D,oBAAoB,EAAE,cAAc,GAAG,2BAA2B;IAClE,iBAAiB,EAAE,cAAc,GAAG,oBAAoB;IACxD,qBAAqB,EAAE,cAAc,GAAG,oBAAoB;IAC5D,sBAAsB,EAAE,cAAc,GAAG,yBAAyB;IAClE,iBAAiB,EAAE,cAAc,GAAG,kBAAkB;IACtD,+BAA+B,EAAE,cAAc,GAAG,sCAAsC;IACxF,+BAA+B,EAAE,cAAc,GAAG,sCAAsC;IACxF,wBAAwB,EAAE,cAAc,GAAG,+BAA+B;IAC1E,oBAAoB,EAAE,cAAc,GAAG,2BAA2B;IAClE,sBAAsB,EAAE,QAAQ,GAAG,sDAAsD;IACzF,gBAAgB,EAAE,cAAc,GAAG,2BAA2B;IAC9D,WAAW,EAAE,cAAc,GAAG,sBAAsB;CACvD,CAAC;AAEF,IAAI,WAAW,GAAG;IACd,wBAAwB,EAAE,wIAAwI;IAClK,mBAAmB,EAAE,gDAAgD;IACrE,cAAc,EAAE,gCAAgC;IAChD,iBAAiB,EAAE,gDAAgD;IACnE,iBAAiB,EAAE,mDAAmD;IACtE,iBAAiB,EAAE,6CAA6C;IAChE,YAAY,EAAE,YAAY;IAC1B,MAAM,EAAE,OAAO;CAClB,CAAC;AAEF,IAAI,gBAAgB,GAAG;IACnB,UAAU,EAAE;QACR,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QACtE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACnE;CACJ,CAAC;AAEF,IAAI,qBAAqB,GAAG,oBAAoB,CAAC;AAEjD,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAE3B,IAAI,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,GAAG;IACnD,2BAA2B,EAAE,qDAAqD;IAClF,6BAA6B,EAAE,8CAA8C;IAC7E,qCAAqC,EAAE,sCAAsC;IAC7E,+BAA+B,EAAE,wDAAwD;IACzF,eAAe,EAAE,eAAe;CACnC,CAAC;AAEF,IAAI,SAAS,GAAG;IACZ,yBAAyB,EAAE,6FAA6F;CAC3H,CAAC;AAEF,IAAI,gBAAgB,GAAG;IACnB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE;IAC7B,EAAE,IAAI,EAAE,iCAAiC,EAAE,GAAG,EAAE,CAAC,EAAE;IACnD,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,EAAE;IAClC,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,EAAE,CAAC,EAAE;IACzC,EAAE,IAAI,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,EAAE;CAC7C,CAAC;AAEF,IAAI,YAAY,GAAG,MAAM,CAAC;AAC1B,IAAI,gBAAgB,GAAG,UAAU,CAAC;AAClC,IAAI,YAAY,GAAG,MAAM,CAAC;AAC1B,IAAI,gBAAgB,GAAG,UAAU,CAAC;AAClC,IAAI,gBAAgB,GAAG,UAAU,CAAC;AAClC,IAAI,mBAAmB,GAAG,cAAc,CAAC;AAEzC,IAAI,aAAa,GAAG,MAAM,CAAC;AAC3B,IAAI,iBAAiB,GAAG,SAAS,CAAC;AAClC,IAAI,aAAa,GAAG,MAAM,CAAC;AAC3B,IAAI,iBAAiB,GAAG,UAAU,CAAC;AACnC,IAAI,iBAAiB,GAAG,YAAY,CAAC;AACrC,IAAI,oBAAoB,GAAG,YAAY,CAAC;AACxC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,qCAAqC;AAEzD,IAAI,0BAAsC,CAAC;AAC3C,IAAI,iCAA6C,CAAC;AAElD,SAAS,2BAA2B,CAAC,KAAW,IAAI,CAAC;AACrD,SAAS,cAAc,CAAC,KAAW,IAAI,CAAC;AAExC,SAAS,OAAO,CAAC,KAAgB,EAAE,UAAkB,EAAE,WAAmB;AAE1E,CAAC;AAED,sCAAsC;AACtC,SAAS,iBAAiB,CAAC,GAAoB,EAAE,OAAuC;IAEpF,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,EAC3B,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC;IAC5B,IAAI,IAAI,KAAK,EAAE,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC;IAEhB,IAAI,CAAC,GAAG,UAAU,CAAC,GAAa,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,IAAI,EAAE;QACf,CAAC,IAAI,EAAE,CAAC;QACR,IAAI,GAAG,IAAI,CAAC;KACf;IACD,IAAI,IAAI,KAAK,GAAG,EAAE;QACd,CAAC,IAAI,IAAI,CAAC;QACV,IAAI,GAAG,IAAI,CAAC;KACf;IAED,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,QAAQ,EAAE,EAAE;QACR,KAAK,GAAG;YACJ,EAAE,GAAG,IAAI,CAAC;YACV,MAAM;QACV,KAAK,IAAI;YACL,EAAE,GAAG,IAAI,CAAC;YACV,MAAM;KACb;IAED,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAC5B,CAAC,IAAI,IAAI,CAAC;SACT,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QACjC,CAAC,IAAI,IAAI,CAAC;IAEd,QAAQ,MAAM,EAAE;QACZ,KAAK,GAAG;YACJ,CAAC,IAAI,IAAI,CAAC;YACV,MAAM;QACV,KAAK,IAAI;YACL,CAAC,IAAI,EAAE,CAAC;YACR,MAAM;KACb;IAED,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,GAAG;IACrB,IAAI,iBAAiB;QACjB,OAAO,GAAG,GAAG,IAAI,CAAC;IACtB,OAAO,GAAG,CAAC;AACf,CAAC;AAED,mDAAmD;AACnD,SAAS,YAAY,CAAC,GAAG;IACrB,IAAI,iBAAiB;QACjB,OAAO,GAAG,GAAG,IAAI,CAAC;IACtB,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,CAAM;IACpB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,sDAAsD;AACtD,SAAS,aAAa,CAAC,KAAa,EAAE,OAAe;IACjD,IAAI,KAAK,KAAK,GAAG;QACb,OAAO,IAAI,CAAC;IAEhB,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IAEjB,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IAEjB,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAsB,EAAE,MAAgB;IACnE,IAAI,CAAC,iBAAiB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzD,OAAO,KAAe,CAAC;IAC3B,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QAC1B,UAAU,GAAG,IAAI,CAAC;QAClB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC9B;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;IAC5F,IAAI,SAAS,CAAC;IACd,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACrB,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;QAEtD,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAE5C,IAAI,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EACvH,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACjC,SAAS,GAAG,IAAI,CAAC;IAErB,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAClF,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;;QAEnD,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAEzC,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAClH,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/B,QAAQ,GAAG,IAAI,CAAC;IAEpB,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;QACzB,IAAI,MAAM,EAAE;YACR,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAC1F,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC;gBACf,OAAO,GAAG,CAAC;SAClB;aAAM;YACH,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAC3F,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,KAAK,CAAC,SAAS,CAAC;gBAChB,OAAO,GAAG,CAAC;SAClB;KACJ;IAED,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,IAAI,QAAQ;QAC1C,SAAS,GAAG,GAAG,CAAC;IACpB,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,IAAI,QAAQ;QACxC,QAAQ,GAAG,GAAG,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,MAAM;QACN,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC;;QAEvD,KAAK,GAAG,CAAC,SAAS,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IACjD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACjC,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC;QAClC,OAAO,GAAG,CAAC;;QAEX,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,EAClB,GAAG,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,eAAe,CAAC,WAAoC,EAAE,IAAY;IACvE,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,OAAO;IACZ,IAAI,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC;IAE9B,IAAI,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,QAAQ,EAAE;QACxC,QAAQ;QACR,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAiB,CAAC,CAAC;QAC7C,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAkB,CAAC,CAAC;KAClD;SAAM,IAAI,QAAQ,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;QACpH,qCAAqC;QACrC,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,WAAkB,CAAC,CAAC;QAChE,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAmB,CAAC,CAAC;KACrE;SAAM,IAAI,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;QACnF,iBAAiB;QACjB,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAkB,CAAC,CAAC;QACrD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAmB,CAAC,CAAC;KAC1D;IACD,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,IAAI,YAAY,GAAG,IAAI,CAAC;AACxB,IAAI,sBAAsB,GAAG;IACzB,UAAU,EAAE,UAAC,GAAU,IAAO,CAAC;CAClC,CAAC;AACF,IAAI,2BAA2B,GAAG,cAAQ,CAAC,CAAC;AAE5C,SAAS,WAAW,KAAK,CAAC;AAE1B,IAAO,YAAY,CAGlB;AAHD,WAAO,YAAY;IACf,SAAgB,UAAU,CAAC,QAAiB,IAAI,CAAC;IAAjC,uBAAU,aAAuB,CAAA;IACtC,8BAAiB,GAAG,QAAQ,CAAC;AAC5C,CAAC,EAHM,YAAY,KAAZ,YAAY,QAGlB;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IACvD,OAAO,CAAC,GAAG,CAAI,QAAQ,UAAK,OAAS,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,qBAAqB,CAAC,WAAyC;AAExE,CAAC;AAED,SAAS,gBAAgB;AAEzB,CAAC;AAED,SAAS,gBAAgB;AAEzB,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC5B,OAAO,IAAI,OAAO,CAAC,UAAA,OAAO,IAAI,OAAA,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,EAAvB,CAAuB,CAAC,CAAC;AAC3D,CAAC;AAED,gFAAgF;AAChF,sDAAsD;AAEtD,iEAAiE;AACjE,iCAAiC;AAEjC,iBAAiB;AACjB,iBAAiB;AAEjB,yCAAyC;AACzC,gFAAgF;AAChF,cAAc;AACd,iDAAiD;AACjD,2CAA2C;AAC3C,8BAA8B;AAC9B,qCAAqC;AACrC,+CAA+C;AAC/C,yDAAyD;AACzD,OAAO;AAEP,oCAAoC;AAEpC,2BAA2B;AAC3B,6BAA6B;AAC7B,qBAAqB;AAErB,uBAAuB;AACvB,gDAAgD;AAChD,yCAAyC;AACzC,aAAa;AACb,QAAQ;AACR,GAAG;;AC5XH,EAAE,CAAC,SAAS,CAAC,SAAS,GAAG,UAAU,MAAM,EAAE,OAAO;IAC9C,8EAA8E;IAC9E,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;QACrB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,UAAU,QAAQ;YACrB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;YACvB,IAAI,QAAQ,IAAI,OAAO,QAAQ,IAAI,QAAQ;gBACvC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,IAAI,YAAY,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAe,CAAC,CAAC;YACvE,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;gBAClE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;aAC9B;YAED,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;gBAClE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;aAC9B;YAED,0BAA0B;YAC1B,IAAI,YAAY,KAAK,OAAO,EAAE;gBAC1B,MAAM,CAAC,YAAY,CAAC,CAAC;aACxB;iBAAM;gBACH,IAAI,QAAQ,KAAK,OAAO,EAAE;oBACtB,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;iBAC1C;aACJ;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjB,oCAAoC;IACpC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,MAAM,EAAE,OAAO;IAC/C,8EAA8E;IAC9E,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;QACrB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,UAAU,QAAQ;YACrB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;YACvB,IAAI,GAAG,GAAG,IAAI,CAAC;YACf,IAAI,GAAG,GAAG,IAAI,CAAC;YACf,IAAI,iBAAiB,EAAE;gBACnB,cAAc;gBACd,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC;gBACrC,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC;gBACrC,QAAQ,GAAG,qBAAqB,CAAC,QAAe,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;aAC9E;iBAAM;gBACH,IAAI,QAAQ,IAAI,OAAO,QAAQ,IAAI,QAAQ;oBACvC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAC1C,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;gBACtB,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;aACzB;YACD,IAAI,YAAY,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,CAAC,QAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAe,CAAC,CAAC,CAAC;YAC3H,IAAI,GAAG,KAAK,IAAI,IAAI,YAAY,GAAG,GAAG,EAAE;gBACpC,YAAY,GAAG,GAAG,CAAC;gBACnB,IAAI,iBAAiB;oBACjB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;aAC7D;YAED,IAAI,GAAG,KAAK,IAAI,IAAI,YAAY,GAAG,GAAG,EAAE;gBACpC,YAAY,GAAG,GAAG,CAAC;gBACnB,IAAI,iBAAiB;oBACjB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;aAC7D;YAED,0BAA0B;YAC1B,IAAI,YAAY,KAAK,OAAO,EAAE;gBAC1B,MAAM,CAAC,YAAY,CAAC,CAAC;aACxB;iBAAM;gBACH,IAAI,QAAQ,KAAK,OAAO,EAAE;oBACtB,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;iBAC1C;aACJ;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjB,oCAAoC;IACpC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,EAAE,CAAC,SAAS,CAAC,eAAe,GAAG,UAAU,MAAM,EAAE,OAAO;IACpD,IAAI,QAAQ,GAAG,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC,CAAC;QACA,OAAO,MAAM,EAAE,CAAC;IACpB,CAAC,CAAC;IAEF,IAAI,SAAS,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,QAAQ;QACpE,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;QACvB,IAAI,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7D,IAAI,YAAY,KAAK,OAAO,EAAE;YAC1B,MAAM,CAAC,YAAY,CAAC,CAAC;SACxB;aAAM;YACH,IAAI,QAAQ,KAAK,OAAO,EAAE;gBACtB,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;aAC1C;SACJ;IACL,CAAC,CAAC,CAAC,CAAC,UAAU,QAAQ;QAClB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;QACvB,IAAI,QAAQ,KAAK,OAAO,EAAE;YACtB,MAAM,CAAC,QAAQ,CAAC,CAAC;SACpB;IACL,CAAC,CAAC;IAEF,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;QACrB,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS;KACnB,CAAC,CAAC;IAEH,+BAA+B;IAC/B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjB,oCAAoC;IACpC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,EAAE,CAAC,SAAS,CAAC,eAAe,GAAG,UAAU,MAAM,EAAE,OAAO;IACpD,8EAA8E;IAC9E,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;QACrB,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7B,IAAU,CAAE,CAAC,MAAM,CAAC,OAAO;gBACvB,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAQ,CAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC,CAAC,MAAM;QACV,KAAK,EAAE,UAAU,QAAQ;YACrB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;YACvB,IAAI,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACzD,IAAI,GAAG,GAAG,IAAI,CAAC;YACf,IAAI,GAAG,GAAG,IAAI,CAAC;YACf,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,iBAAiB,EAAE;gBACnB,cAAc;gBACd,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC;gBACrC,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,YAAY,CAAC;gBACrC,QAAQ,GAAG,qBAAqB,CAAC,QAAe,EAAE,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;aAC9E;iBAAM;gBACH,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;gBACtB,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW;oBAClC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;aACzB;YACD,IAAI,aAAa,GAAG,KAAK,CAAC,QAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAe,CAAC,CAAC;YAC9E,IAAI,GAAG,KAAK,IAAI,IAAI,aAAa,GAAG,GAAG,EAAE;gBACrC,aAAa,GAAG,GAAG,CAAC;gBACpB,IAAI,iBAAiB;oBACjB,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;aAC/D;YAED,IAAI,GAAG,KAAK,IAAI,IAAI,aAAa,GAAG,GAAG,EAAE;gBACrC,aAAa,GAAG,GAAG,CAAC;gBACpB,IAAI,iBAAiB;oBACjB,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;aAC/D;YACD,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;YACvF,uDAAuD;YACvD,2DAA2D;YAC3D,0BAA0B;YAC1B,IAAI,YAAY,KAAK,OAAO,EAAE;gBAC1B,MAAM,CAAC,YAAY,CAAC,CAAC;aACxB;iBAAM;gBACH,iHAAiH;gBACjH,IAAI,QAAQ,KAAK,OAAO,EAAE;oBACtB,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;iBAC1C;aACJ;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjB,oCAAoC;IACpC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,EAAE,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,MAAM,EAAE,OAAO;IACnD,8EAA8E;IAC9E,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;QACrB,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC7B,IAAU,CAAE,CAAC,MAAM,CAAC,OAAO;gBACvB,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAQ,CAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACnF,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC,CAAC,MAAM;QACV,KAAK,EAAE,UAAU,QAAQ;YACrB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;YACvB,IAAI,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACzD,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,aAAa,GAAG,KAAK,CAAC,QAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAe,CAAC,CAAC;YAC9E,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;gBACnE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;aAC/B;YAED,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;gBACnE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC;aAC/B;YACD,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;YACvF,uDAAuD;YACvD,2DAA2D;YAE3D,0BAA0B;YAC1B,IAAI,YAAY,KAAK,OAAO,EAAE;gBAC1B,MAAM,CAAC,YAAY,CAAC,CAAC;aACxB;iBAAM;gBACH,iHAAiH;gBACjH,IAAI,QAAQ,KAAK,OAAO,EAAE;oBACtB,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;iBAC1C;aACJ;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjB,oCAAoC;IACpC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,MAAM;IACtC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;QACrB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,UAAU,QAAQ;YACrB,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;YACvB,IAAI,YAAY,GAAG,QAAe,CAAC;YACnC,IAAI,OAAO,QAAQ,IAAI,QAAQ;gBAC3B,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC1D,0BAA0B;YAC1B,IAAI,YAAY,KAAK,OAAO,EAAE;gBAC1B,MAAM,CAAC,YAAY,CAAC,CAAC;aACxB;iBAAM;gBACH,IAAI,QAAQ,KAAK,OAAO,EAAE;oBACtB,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;iBAC1C;aACJ;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAEjB,oCAAoC;IACpC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,EAAE,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAU,MAAM,EAAE,IAAI;IAC1C,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;QAC5B,MAAM,CAAC,SAAS,CAAC,UAAU,QAAQ;YAC/B,IAAI,CAAC,QAAe,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;KACN;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,WAAW,GAAG;IAC7B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;QAClC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;YAChC,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;gBAChB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,aAAa,GAAG;IAC/B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;QAClC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;YAChC,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE,EAAE;gBAClB,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;gBACjC,IAAI,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;oBAC7B,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;oBACtB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBACf,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;oBACtB,IAAI,EAAE,KAAK,EAAE;wBACT,UAAU,CAAC,EAAE,CAAC,CAAC;iBACtB;;oBACG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;aACtB;QACL,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,aAAa,GAAG;IAC/B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;QAClC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;YAChC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;gBACtB,EAAE,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,oBAAoB;IACvC;QACI,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;YAClC,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;QACP,CAAC;QACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa;YACpC,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,CAAC;KACJ,CAAC;AAEF,IAAI,4BAA4B,GAAG,EAAE,CAAC;AAEtC,IAAI,2BAA2B,GAAG,UAAU,CAAC,EAAE,MAAM;IACjD,IAAI,OAAO,GAAG,4BAA4B,CAAC,KAAK,EAAE,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QAC5C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;KACzB;AACL,CAAC,CAAC;AAEF,SAAS,qBAAqB,CAAC,GAAG;IAE9B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM;QACtC,OAAO,IAAI,CAAC;IAChB,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACxB,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B,OAAO,GAAG,CAAC;SACV,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;QAChC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACpE,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KACpK;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,EAAE,CAAC,eAAe,CAAC,aAAa,GAAG;IAC/B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,mBAAmB;QACvD,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC,kBAAkB,IAAI,EAAE,CAAC;QAC7D,IAAI,gBAAgB,GAAG,kKAAkK,CAAC;QAC1L,oBAAoB;QACpB,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;QACvD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;YACzC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK;YACL,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAExC,IAAI,cAAc,GAAG,UAAU,CAAC,EAAE,MAAM;YACpC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE;gBAChD,IAAI,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC/D,IAAI,GAAG,KAAK,IAAI,EAAE;oBACd,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;oBACjC,IAAI,GAAG,KAAK,UAAU,EAAE;wBACpB,UAAU,CAAC,GAAG,CAAC,CAAC;iBACvB;aACJ;QACL,CAAC,CAAC;QAEF,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAElD,gFAAgF;QAChF,cAAc;QACb,CAAC,CAAC,OAAO,CAAS,CAAC,WAAW,CAAC;YAC5B,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY;YAC1F,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;YAC3E,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI;YACvE,IAAI,EAAE,UAAU,GAAG,EAAE,MAAM;gBACvB,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC5C,4EAA4E;YAChF,CAAC;YACD,cAAc,EAAE,2BAA2B;SAC9C,CAAC,CAAC;QAEH,2BAA2B;QAC3B,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE;YAC7C,IAAI,GAAG,GAAG,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC/D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE;gBAC5B,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;gBACjC,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBACxB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;oBACrB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBACpB,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;gBACtC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;oBACtB,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;gBACtB,IAAI,GAAG,KAAK,IAAI,EAAE;oBACd,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;iBACxC;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,EAAE;YACjD,IAAI,KAAK,GAAG,4BAA4B,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACjE,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACZ,4BAA4B,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACjD;YACD,IAAI;gBACC,CAAC,CAAC,OAAO,CAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC3C,IAAI,OAAQ,CAAC,CAAC,OAAO,CAAS,CAAC,WAAW,CAAC,OAAO,KAAK,UAAU;oBAC5D,CAAC,CAAC,OAAO,CAAS,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;aACjD;YAAC,OAAO,CAAC,EAAE,GAAG;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;IACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa;QACpC,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC;QACvD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;YACzC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK;YACL,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE;YAC5B,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;SACvB;IACL,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,SAAS,GAAG;IAC3B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,mBAAmB;QACvD,kDAAkD;QAClD,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC;QACxD,CAAC,CAAC,OAAO,CAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAErC,2BAA2B;QAC3B,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAY,EAAE;YACjD,IAAI,UAAU,GAAG,aAAa,EAAE,CAAC;YACjC,UAAU,CAAE,CAAC,CAAC,OAAO,CAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,EAAE;YAChD,CAAC,CAAC,OAAO,CAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IAEP,CAAC;IACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa;QACpC,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,EAClD,OAAO,GAAI,CAAC,CAAC,OAAO,CAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,KAAK,KAAK,OAAO,EAAE;YAClB,CAAC,CAAC,OAAO,CAAS,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC/C;IACL,CAAC;CACJ,CAAC;AAEF,sCAAsC;AACtC,EAAE,CAAC,eAAe,CAAC,MAAM,GAAG;IACxB,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;QAClC,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAQ,CAAC;QAC1E,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACrD,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAClC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9B,UAAU,CAAC;gBACP,IAAI,OAAO,CAAC,IAAI,EAAE;oBACd,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;iBACrE;YACL,CAAC,EAAE,CAAC,CAAC,CAAC;SACT;aACI,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE;YAC5C,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACnC,UAAU,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;gBACpC,IAAI,OAAO,CAAC,IAAI,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACxB,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;iBACvE;YACL,CAAC,EAAE,CAAC,CAAC,CAAC;SACT;IACL,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,QAAQ,GAAG;IAC1B,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa;QACpC,IAAI,OAAO,GAAG,aAAa,EAAE,EACzB,KAAK,GAAG,CAAC,CAAC,OAAO,CAAQ,CAAC;QAC9B,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5D,IAAI,gBAAgB,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC;QACpF,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC5E,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5B,IAAI,UAAU,GAAG;gBACb,0EAA0E;gBAC1E,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE;oBACH,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,IAAI;oBACT,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE;oBAC5E,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE;oBAC/D,OAAO,EAAE,EAAE;iBACd;gBACD,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;gBAChC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;aAC7C,CAAC;YACT,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE;gBACnB,UAAU,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;gBACxC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;oBACrB,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;aACvD;YACD,IAAI,KAAK,CAAC,IAAI;gBACV,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC9B;aAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE;YAC1B,IAAI,KAAK,CAAC,IAAI,EAAE;gBACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC1C,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;oBACrB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;aACjD;SACJ;aAAM,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;YAC9B,IAAI,KAAK,CAAC,IAAI;gBACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;SACjD;IACL,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,UAAU,GAAG;IAC5B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,mBAAmB;QACvD,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC5B,wCAAwC;QACxC,IAAI,WAAW,GAAG,mBAAmB,EAAE,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,WAAW,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;QAC9G,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;YAC7B,KAAK,CAAC,KAAK,CAAC;gBACR,IAAI,KAAK,EAAE,IAAI,QAAQ,EAAE;oBACrB,KAAK,CAAC,QAAQ,CAAC,CAAC;iBACnB;YACL,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,mBAAmB;QACzD,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC5B,IAAI,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,WAAW,GAAG,mBAAmB,EAAE,CAAC;QACxC,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,QAAQ,GAAG,WAAW,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;QAC9G,IAAI,aAAa,GAAG,WAAW,CAAC,qBAAqB,IAAI,IAAI,CAAC;QAC9D,IAAI,eAAe,GAAG,WAAW,CAAC,sBAAsB,IAAI,IAAI,CAAC;QACjE,IAAI,aAAa,IAAI,aAAa,IAAI,eAAe,EAAE;YACnD,IAAI,QAAQ,KAAK,cAAc,EAAE;gBAC7B,IAAI,eAAe;oBACf,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;gBACvC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;aACjC;iBAAM;gBACH,IAAI,eAAe;oBACf,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;gBACpC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;aACpC;SACJ;IACL,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,aAAa,GAAG;IAC/B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;QAClC,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC5B,IAAI,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,cAAc,EAAE;YAChB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACrC;aAAM;YACH,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACtC;IACL,CAAC;IACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa;QACpC,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC5B,IAAI,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,cAAc,EAAE;YAChB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;SACrC;aAAM;YACH,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;SACtC;IACL,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,WAAW,GAAG;IAC7B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;QAClC,kFAAkF;QAClF,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC5B,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mFAAmF;IAC5H,CAAC;IACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa;QACpC,6EAA6E;QAC7E,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9E,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,YAAY,GAAG;IAC9B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa;QAClC,kFAAkF;QAClF,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAC5B,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mFAAmF;IAC5H,CAAC;IACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,WAAW;QACjD,gDAAgD;QAChD,IAAI,KAAK,GAAG,aAAa,EAAE,CAAC;QAE5B,wFAAwF;QACxF,IAAI,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtC,oDAAoD;QACpD,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,CAAC,wDAAwD;QAEhH,IAAI,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;QAE1D,UAAU,CAAC;YACP,IAAI,OAAO,EAAE;gBACT,IAAI,cAAc;oBACd,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,2BAA2B;;oBAE7G,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,6BAA6B;aACtH;QACL,CAAC,EAAE,CAAC,CAAC,CAAC;IAEV,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,aAAa,GAAG;IAC/B,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc;QAC1E,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAErC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;QAE3D,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;QAEvD,IAAU,CAAE,CAAC,MAAM,CAAC,OAAO;YACvB,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAQ,CAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7E,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpB,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAC7B,UAAU,CAAC;YACP,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE,EAAE,KAAK;gBACvB,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEP,IAAI,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;QAChE,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;YACjC,KAAK,CAAC,EAAE,CAAC,QAAQ,EACb;gBACI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;SACV;QAED,IAAI,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;QAC9D,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE;YAC/B,KAAK,CAAC,EAAE,CAAC,OAAO,EACZ;gBACI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;SACV;IACL,CAAC;IACD,MAAM,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,WAAW;QACjD,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAErC,IAAI,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC;QAE3D,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;QAEvD,IAAU,CAAE,CAAC,MAAM,CAAC,OAAO;YACvB,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAQ,CAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QAE7E,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,WAAW,GAAG;IAC7B,IAAI,EAAE;QACF,OAAO,EAAE,0BAA0B,EAAE,IAAI,EAAE,CAAC;IAChD,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,OAAO,GAAG;IACzB,qBAAqB,EAAE;QACnB,KAAK,EAAE;YACH,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,YAAY,CAAC,iBAAiB,EAAE;YACtG,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE;YAC/D,OAAO,EAAE,EAAE;SACd;QACD,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;QAChC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;QACjD,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE;KACtE;IACD,YAAY,EAAE,UAAU,QAAQ;QAC5B,IAAI,SAAS,GAAG,EAAS,CAAC;QAC1B,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAC5B,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC;aAC5B,IAAI,OAAO,QAAQ,KAAK,QAAQ;YACjC,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,EAAE,UAAU,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS;QAClE,IAAI,WAAW,GAAG,mBAAmB,EAAE,CAAC;QACxC,IAAI,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC;QAC1C,IAAI,SAAS,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QACzE,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,CAAQ,CAAC;QAC9B,IAAG,KAAK,CAAC,IAAI;YACT,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;CACJ,CAAC;AAEF,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC;AAEtD,IAAI,cAAc,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;AAEpD,2CAA2C;AAC3C,qDAAqD;AACrD,uCAAuC;AACvC,+CAA+C;AAC/C,CAAC,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7E,IAAI,EAAE,GAAG,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChE,EAAE,CAAC,EAAE,CAAC,GAAG;QACL,EAAE,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACrC,EAAE,CAAC,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC;QACzC,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;AACN,CAAC,CAAC,CAAC;;AC5tBH,IAAO,QAAQ,CAybd;AAzbD,WAAO,QAAQ;IAmBX,IAAI,kBAAkB,GAAiH,EAAE,CAAC;IAE1I,SAAgB,mBAAmB,CAAC,GAAW,EAAE,OAAiG;QAC9I,6EAA6E;QAC7E,kBAAkB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IACtC,CAAC;IAHe,4BAAmB,sBAGlC,CAAA;IAED,SAAS,cAAc,CAAC,GAAW;QAC/B,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,GAAG,CAAC,CAAC;QACvD,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,EAAS,CAAC;IACrB,CAAC;IAED,SAAgB,oBAAoB,CAAC,QAAuB;QAA5D,iBA6BC;QA5BG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;YAC7B,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,EACvB,EAAuB,EACvB,UAA+B,CAAC;YACpC,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE;gBAC5D,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;gBACpB,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;aACnC;;gBAEG,EAAE,GAAG,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,KAAI,EAAE,GAAG,CAAC,CAAC;YACnD,mBAAmB,CAAC,GAAG,EAAE,UAAC,KAAK,EAAE,QAAQ,EAAE,KAAK;gBAC5C,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;oBACjB,IAAI,UAAU;wBACV,GAAG,CAAC,IAAI,CAAC,UAAA,IAAI;4BACT,QAAQ,CAAC,IAAI,CAAC,CAAC;4BACf,UAAU,EAAE,CAAC;wBACjB,CAAC,CAAC,CAAC;;wBAEH,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAC1B;qBACI;oBACD,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,UAAU;wBACV,UAAU,EAAE,CAAC;iBACpB;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IA7Be,6BAAoB,uBA6BnC,CAAA;IAEU,wBAAe,GAAG,IAAI,CAAC;IAElC,SAAgB,YAAY;IAE5B,CAAC;IAFe,qBAAY,eAE3B,CAAA;IAED,SAAgB,cAAc,CAAC,GAAW,EAAE,QAAqC;QAC7E,gCAAgC;QAChC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAHe,uBAAc,iBAG7B,CAAA;IAED,wDAAwD;IACxD,SAAS,qBAAqB,CAAC,GAAW,EAAE,IAAS,EAAE,QAA+B,EAAE,SAAiC,EAAE,WAAqB;QAE5I,IAAI,WAAW,EAAE;YACb,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE;gBACzB,IAAI,CAAC,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;gBACtC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,UAAC,GAAG;oBAC9B,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAClC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC,EAAE,UAAC,GAAG;oBACH,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,SAAS;wBACT,SAAS,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;aACf;SACJ;aAAM;YACH,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE;gBACzB,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACnD,OAAO,IAAI,CAAC;aACf;SACJ;QAED,OAAO,CAAC,GAAG,CAAC,wCAAwC,GAAG,GAAG,CAAC,CAAC;QAE5D,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;QAEZ,eAAe;IACnB,CAAC;IAED,SAAgB,MAAM,CAAC,UAAkB,EAAE,WAAmB,EAAE,KAAkB,EAAE,QAA+B,EAAE,SAAiC,EAAE,IAAa,EAAE,WAAqB;QACxL,IAAI,GAAG,GAAG,eAAe,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,CAAC;QAC3D,IAAI,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,CAAC;YACnE,OAAO;QAEX,gBAAgB;QAChB,OAAO;IACX,CAAC;IAPe,eAAM,SAOrB,CAAA;IAED,SAAgB,IAAI,CAAC,UAAkB,EAAE,WAAmB,EAAE,KAAU,EAAE,QAA+B,EAAE,SAAiC;QAExI,IAAI,GAAG,GAAG,eAAe,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,CAAC;QAC3D,IAAI,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC;YACtD,OAAO;QAEX,gBAAgB;QAChB,OAAO;IACX,CAAC;IARe,aAAI,OAQnB,CAAA;IAED,SAAgB,eAAe,CAAC,UAAkB,EAAE,WAAmB,EAAE,KAAU,EAAE,QAA+B,EAAE,SAAiC;QACnJ,IAAI,GAAG,GAAG,eAAe,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,CAAC;QAC3D,IAAI,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;YAC5D,OAAO;QAEX,gBAAgB;QAChB,OAAO;IACX,CAAC;IAPe,wBAAe,kBAO9B,CAAA;IAED,SAAgB,UAAU,CAAC,WAAsC,EAAE,UAAkB,EAAE,MAAc,EAAE,OAAuG,EAAE,QAA+B,EAAE,SAAiC;QAE9Q,IAAI,CAAC,WAAW;YACZ,OAAO,QAAQ,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,CAAC;QAElF,IAAI,WAAW,GAAG,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO;QAE9F,IAAI,KAAuB,CAAC;QAE5B,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE;YACtE,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gBAClD,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAqB,CAAC;aACrD;;gBACG,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAqB,CAAC;SACxE;;YAEG,KAAK,GAAG,WAA+B,CAAC;QAE5C,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,YAAY,gBAAgB,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YACvE,OAAO,QAAQ,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,CAAC;QAElF,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/C,OAAO,QAAQ,CAAC,gBAAgB,CAAC,4CAA4C,CAAC,CAAC;QAEnF,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,IAAI,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAEhE,IAAI,CAAC,IAAI,CAAC,IAAI;YACV,OAAO,QAAQ,CAAC,gBAAgB,CAAC,0DAA0D,CAAC,CAAC;QAEjG,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW;YACvB,OAAO,QAAQ,CAAC,gBAAgB,CAAC,6CAA6C,CAAC,CAAC;QAEpF,IAAI,kBAAkB,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEjL,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM;YAC/C,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAjB,CAAiB,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAA7D,CAA6D,CAAC,CAAC;QAEnJ,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,KAAK,GAAG,EAAV,CAAU,CAAC,CAAC;YAC9G,OAAO,QAAQ,CAAC,gBAAgB,CAAC,kDAAkD,CAAC,CAAC;QAEzF,iCAAiC;QACjC,IAAI,KAAK,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC;QAE1F,IAAI,WAAW,GAAG,MAAI,UAAU,SAAI,MAAQ,CAAC;QAE7C,IAAI,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QACxB,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAEvB,IAAI,QAAQ,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QAEpG,0CAA0C;QAC1C,IAAI,CAAC,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;QAEtC,CAAC,CAAC,IAAI,CAAC;YACH,GAAG,EAAE,WAAW;YAChB,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,UAAC,MAAW,EAAE,UAAkB,EAAE,KAAgB;gBACvD,IAAI,QAAQ;oBACR,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,EAAE,UAAC,KAAgB,EAAE,UAAkB,EAAE,WAAW;gBACrD,gDAAgD;gBAChD,IAAI,SAAS;oBACT,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC1B,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBACrL,2DAA2D;oBAC1D,KAAa,CAAC,YAAY,GAAG,OAAO,CAAC;iBACzC;gBACD,IAAI,MAAM,CAAC,SAAS,CAAC;oBACjB,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC;YACjG,CAAC;YACD,QAAQ,EAAE,UAAC,KAAgB,EAAE,UAAkB;gBAC3C,2CAA2C;gBAC3C,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,GAAG,EAAE;gBACD,IAAI,GAAG,GAAS,CAAC,CAAC,YAAa,CAAC,GAAG,EAAE,CAAC;gBACtC,IAAI,GAAG,EAAE;oBACL,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAC,EAAE;wBACvC,kCAAkC;wBAClC,mEAAmE;wBACnE,uDAAuD;oBAC3D,CAAC,EAAE,KAAK,CAAC,CAAC;iBACb;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;SACJ,CAAC,CAAC;IAEP,CAAC;IA/Fe,mBAAU,aA+FzB,CAAA;IAED,qBAAqB;IAErB;QAAA;YAmFY,aAAQ,GAAG,IAAI,CAAC;YAChB,UAAK,GAAW,IAAI,CAAC;YACrB,UAAK,GAAW,IAAI,CAAC;YACrB,SAAI,GAAW,IAAI,CAAC;YACpB,aAAQ,GAAG,EAAE,CAAC;YACd,YAAO,GAAG,EAAE,CAAC;YACb,UAAK,GAAG,MAAM,CAAC;YACf,aAAQ,GAAQ,QAAQ,CAAC,IAAI,CAAC;YAC9B,UAAK,GAAQ,IAAI,CAAC;YAClB,iBAAY,GAAG,kBAAkB,CAAC;YAClC,cAAS,GAAG,MAAM,CAAC;QAiE/B,CAAC;QA5JU,iCAAW,GAAlB,UAAmB,OAAiB;YAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,0BAAI,GAAX,UAAY,IAAY;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,yBAAG,GAAV,UAAW,GAAW;YAClB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAChB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,0BAAI,GAAX,UAAY,IAAY;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,gCAAU,GAAjB,UAAkB,UAAkB;YAChC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,6BAAO,GAAd,UAAe,OAAe;YAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,4BAAM,GAAb,UAAc,MAAc;YACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,0BAAI,GAAX,UAAY,IAAY;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,6BAAO,GAAd,UAAe,OAAe;YAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,0BAAI,GAAX,UAAY,IAAS;YACjB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;gBAC3B,MAAM,uDAAuD,CAAC;YAClE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,iCAAW,GAAlB,UAAmB,WAAmB;YAClC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;YAChC,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,8BAAQ,GAAf,UAAgB,QAAgB;YAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,8BAAQ,GAAf,UAAgB,QAAiC,EAAE,QAAkB;YACjE,IAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,IAAI,CAAC;YAElC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS;gBAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBAC5B,IAAI,CAAC,QAAQ;gBACd,IAAI,CAAC,IAAI,EAAE,CAAC;YAEhB,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,6BAAO,GAAd,UAAe,SAAmE;YAC9E,IAAI,CAAC,QAAQ,GAAG,SAAS,IAAI,IAAI,CAAC;YAClC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;gBAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QAChB,CAAC;QAkBM,2BAAK,GAAZ;YACI,IAAI,IAAI,CAAC,MAAM;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC;YAEvB,IAAI,IAAI,CAAC,OAAO;gBACZ,OAAO,IAAI,CAAC,OAAO,CAAC;QAC5B,CAAC;QAED,+CAA+C;QACxC,0BAAI,GAAX;YAEI,IAAI,CAAC,KAAK,EAAE,CAAC;YAEb,QAAQ,CAAC,YAAY,EAAE,CAAC;YAExB,kEAAkE;YAElE,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAEtL,6GAA6G;YAE7G,IAAI,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;gBACpF,OAAO;YAEX,iCAAiC;YACjC,UAAU;YACV,uBAAuB;YACvB,eAAe;YACf,6BAA6B;YAC7B,kBAAkB;YAClB,qCAAqC;YACrC,+BAA+B;YAC/B,yBAAyB;YACzB,gEAAgE;YAChE,gCAAgC;YAChC,6BAA6B;YAC7B,qCAAqC;YACrC,mBAAmB;YACnB,mDAAmD;YACnD,QAAQ;YACR,kDAAkD;YAClD,mCAAmC;YACnC,4BAA4B;YAC5B,wCAAwC;YACxC,mBAAmB;YACnB,mDAAmD;YACnD,sMAAsM;YACtM,2EAA2E;YAC3E,6CAA6C;YAC7C,aAAa;YACb,6BAA6B;YAC7B,+FAA+F;YAC/F,OAAO;YACP,KAAK;YACL,GAAG;YACH,MAAM;YACN,+CAA+C;YAC/C,OAAO,IAAI,CAAC;QAChB,CAAC;QACL,kBAAC;IAAD,CA9JA,AA8JC,IAAA;IA9JY,oBAAW,cA8JvB,CAAA;IAED,SAAgB,WAAW,CAAC,OAAiB;QACzC,OAAO,IAAI,WAAW,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAFe,oBAAW,cAE1B,CAAA;IAED,SAAgB,IAAI,CAAC,IAAY;QAC7B,OAAO,IAAI,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAFe,aAAI,OAEnB,CAAA;IAED,SAAgB,GAAG,CAAC,GAAW;QAC3B,OAAO,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAFe,YAAG,MAElB,CAAA;IAED,SAAgB,UAAU,CAAC,UAAmB;QAC1C,OAAO,IAAI,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAFe,mBAAU,aAEzB,CAAA;IAED,SAAgB,IAAI,CAAC,IAAY;QAC7B,OAAO,IAAI,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAFe,aAAI,OAEnB,CAAA;IAED,SAAgB,OAAO,CAAC,OAAe;QACnC,OAAO,IAAI,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAFe,gBAAO,UAEtB,CAAA;IAED,SAAgB,MAAM,CAAC,MAAc;QACjC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IAFe,eAAM,SAErB,CAAA;IAED,SAAgB,IAAI,CAAC,IAAY;QAC7B,OAAO,IAAI,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAFe,aAAI,OAEnB,CAAA;IAED,SAAgB,OAAO,CAAC,OAAe;QACnC,OAAO,IAAI,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAFe,gBAAO,UAEtB,CAAA;IAED,SAAgB,IAAI,CAAC,IAAS;QAC1B,OAAO,IAAI,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAFe,aAAI,OAEnB,CAAA;IAED,SAAgB,WAAW,CAAC,WAAmB;QAC3C,OAAO,IAAI,WAAW,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IAFe,oBAAW,cAE1B,CAAA;IAED,SAAgB,QAAQ,CAAC,QAAgB;QACrC,OAAO,IAAI,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,YAAY;AAChB,CAAC,EAzbM,QAAQ,KAAR,QAAQ,QAybd;AAED,IAAO,YAAY,CA4BlB;AA5BD,WAAO,YAAY;IACJ,mBAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEpC;QAEI,oBAAY,EAAU;YAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,CAAC;QAMD,yBAAI,GAAJ,UAAK,MAAc;YACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,yBAAI,GAAJ,UAAK,IAAU;YACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,6BAAQ,GAAR,UAAS,QAAiC,EAAE,SAA6E,EAAE,cAAwB;YAC/I,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnI,OAAO,IAAI,CAAC;QAChB,CAAC;QACL,iBAAC;IAAD,CAxBA,AAwBC,IAAA;IAxBY,uBAAU,aAwBtB,CAAA;AACL,CAAC,EA5BM,YAAY,KAAZ,YAAY,QA4BlB;AAEA,YAAoB,CAAC,IAAI,GAAG,UAAC,EAAU;IACpC,OAAO,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;;AC3dF,IAAO,QAAQ,CAwJd;AAxJD,WAAO,QAAQ;IACX,SAAS,gBAAgB,CAAC,GAA8B;QACpD,6CAA6C;QAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACzB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;gBAChC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;SACvB;QAED,OAAO,CAAC,CAAC,GAAU,CAAwB,CAAC;IAChD,CAAC;IAED,SAAgB,IAAI,CAAC,GAA8B,EAAE,KAAsB,EAAE,MAAuB,EAAE,YAAmC,EAAE,aAAoC,EAAE,OAAa,EAAE,QAAqB;QACjN,oBAAoB;QACpB,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAJe,aAAI,OAInB,CAAA;IACD,SAAgB,OAAO,CAAC,GAA8B;QAClD,uBAAuB;QACvB,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAJe,gBAAO,UAItB,CAAA;IACD,SAAgB,IAAI,CAAC,GAA8B;QAC/C,oBAAoB;QACpB,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAJe,aAAI,OAInB,CAAA;IACD,qEAAqE;IACrE,SAAgB,IAAI,CAAC,GAA8B;QAC/C,oBAAoB;QACpB,IAAI,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAJe,aAAI,OAInB,CAAA;IACD,SAAgB,MAAM;QAClB,0BAA0B;IAC9B,CAAC;IAFe,eAAM,SAErB,CAAA;IACD,mFAAmF;IACnF,mGAAmG;IACnG,SAAgB,cAAc,CAAC,OAAe;QAC1C,uBAAuB;IAC3B,CAAC;IAFe,uBAAc,iBAE7B,CAAA;IACD,yCAAyC;IACzC,uDAAuD;IACvD,kEAAkE;IAClE,SAAgB,gBAAgB,CAAC,OAAe,EAAE,UAAoB;QAClE,oBAAoB;IACxB,CAAC;IAFe,yBAAgB,mBAE/B,CAAA;IACD,iDAAiD;IACjD,SAAgB,iBAAiB,CAAC,GAAW,EAAE,QAAgB,EAAE,KAAsB,EAAE,MAAuB,EAAE,QAAqB;QACnI,0BAA0B;IAC9B,CAAC;IAFe,0BAAiB,oBAEhC,CAAA;IACD,SAAgB,iBAAiB,CAAC,GAAW,EAAE,QAAgB,EAAE,KAAsB,EAAE,MAAuB,EAAE,QAA4D;QAC1K,0BAA0B;IAC9B,CAAC;IAFe,0BAAiB,oBAEhC,CAAA;IACD,0CAA0C;IAC1C,uCAAuC;IACvC,SAAgB,QAAQ,CAAC,IAAY;QACjC,eAAe;IACnB,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IACD,sOAAsO;IACtO,kEAAkE;IAClE,yCAAyC;IACzC,4CAA4C;IAG5C,IAAI,cAAc,GAAa,EAAE,CAAC;IAClC,IAAI,kBAAkB,GAAY,KAAK,CAAC;IACxC,IAAI,gBAAgB,GAAW,IAAI,CAAC;IAEpC,SAAS,mBAAmB;QACxB,IAAI,CAAC,kBAAkB,IAAI,cAAc,CAAC,MAAM,EAAE;YAC9C,kBAAkB,GAAG,IAAI,CAAC;YAC1B,IAAI,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACrC,gBAAgB,GAAG,UAAU,CAAC;gBAC1B,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACrC,gBAAgB,GAAG,IAAI,CAAC;gBACxB,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,mBAAmB,EAAE,CAAC;YAC1B,CAAC,EAAE,IAAI,CAAQ,CAAC;SACnB;IACL,CAAC;IAED,SAAgB,oBAAoB;QAChC,IAAI,kBAAkB,IAAI,cAAc,CAAC,MAAM,EAAE;YAC7C,IAAI,gBAAgB,KAAK,IAAI,EAAE;gBAC3B,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAC/B,gBAAgB,GAAG,IAAI,CAAC;aAC3B;YACD,IAAI,cAAc,CAAC,MAAM;gBACrB,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YACpD,IAAI,kBAAkB;gBAClB,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACzC,kBAAkB,GAAG,KAAK,CAAC;SAC9B;IACL,CAAC;IAZe,6BAAoB,uBAYnC,CAAA;IAED,SAAgB,aAAa,CAAC,OAAe,EAAE,KAAe;QAC1D,IAAI,KAAK;YACL,oBAAoB,EAAE,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7B,mBAAmB,EAAE,CAAC;IAC1B,CAAC;IALe,sBAAa,gBAK5B,CAAA;IAED,SAAgB,mBAAmB;QAC/B,IAAI,kBAAkB,IAAI,gBAAgB,KAAK,IAAI,EAAE;YACjD,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAC/B,gBAAgB,GAAG,IAAI,CAAC;YACxB,kBAAkB,GAAG,KAAK,CAAC;YAC3B,YAAY,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACrC,mBAAmB,EAAE,CAAC;SACzB;IACL,CAAC;IARe,4BAAmB,sBAQlC,CAAA;IAED,SAAgB,YAAY,CAAC,GAAwB;QACjD,OAAO,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAClE,CAAC;IAFe,qBAAY,eAE3B,CAAA;IAED,SAAgB,YAAY,CAAC,GAAwB;QACjD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACzE,CAAC;IAFe,qBAAY,eAE3B,CAAA;IAED,SAAgB,cAAc,CAAC,GAAwB,EAAE,MAAc,EAAE,OAAa,EAAE,QAA0B,EAAE,QAAmB;QACnI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAFe,uBAAc,iBAE7B,CAAA;IACD,SAAgB,cAAc,CAAC,GAAwB,EAAE,MAAc,EAAE,OAAa,EAAE,QAA0B,EAAE,QAAmB;QACnI,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAFe,uBAAc,iBAE7B,CAAA;IACD,SAAgB,aAAa,CAAC,GAAwB;QAClD,yBAAyB;QACzB,OAAO,GAAG,CAAC;IACf,CAAC;IAHe,sBAAa,gBAG5B,CAAA;IACD,SAAgB,gBAAgB,CAAC,KAA0B,EAAE,OAA4B;QACrF,wBAAwB;QACxB,qEAAqE;QACrE,OAAO,KAAK,CAAC;IACjB,CAAC;IAJe,yBAAgB,mBAI/B,CAAA;IACD,SAAgB,kBAAkB,CAAC,KAA0B;QACzD,gCAAgC;IACpC,CAAC;IAFe,2BAAkB,qBAEjC,CAAA;IACD,SAAgB,gBAAgB,CAAC,OAA4B,EAAE,eAAyB;QACpF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,uCAAuC;aACnE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,+EAA+E;aAC1G,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,kKAAkK;QAEnM,IAAI,eAAe,EAAE;YACjB,OAAO,CAAC,yDAAyD;iBAC5D,IAAI,CAAC,GAAG,CAAC;iBACT,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC;iBAC1B,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;SACnC;IACL,CAAC;IAXe,yBAAgB,mBAW/B,CAAA;AACL,CAAC,EAxJM,QAAQ,KAAR,QAAQ,QAwJd;AAED,IAAO,UAAU,CAIhB;AAJD,WAAO,UAAU;IACb,SAAgB,aAAa,CAAC,aAAqB,EAAE,SAAiB,EAAE,QAAgB,EAAE,QAAqB,EAAE,MAAgB,EAAE,QAAqB;QACpJ,2BAA2B;IAC/B,CAAC;IAFe,wBAAa,gBAE5B,CAAA;AACL,CAAC,EAJM,UAAU,KAAV,UAAU,QAIhB;;AC9JD;IACI,oBAAY,WAAoC,EAAE,WAAmB;QACjE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,0BAAK,GAAL;QACI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAQ,CAAC;SACzE;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,yBAAI,GAAJ;QACI,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;SACvB;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,iCAAY,GAAZ;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;SAC1B;IACL,CAAC;IAED,2BAAM,GAAN;QACI,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAML,iBAAC;AAAD,CAxCA,AAwCC,IAAA;AAED,IAAO,GAAG,CA+FT;AA/FD,WAAO,GAAG;IAAC,IAAA,aAAa,CA+FvB;IA/FU,WAAA,aAAa;QACpB,IAAI,aAAa,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACzC,IAAI,mBAAmB,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAErD;YAAA;gBACY,kBAAa,GAAiB,EAAE,CAAC;gBACjC,uBAAkB,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,WAAW;gBAC/C,oBAAe,GAAG,KAAK,CAAC;YAqFpC,CAAC;YAnFW,0CAAiB,GAAzB;gBACI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;oBACjC,IAAI,IAAI,CAAC,eAAe;wBACpB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;oBACtC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;oBAE7B,IAAI,CAAC,eAAe,EAAE,CAAC;iBAC1B;YACL,CAAC;YAEO,wCAAe,GAAvB,UAAwB,CAAa;gBACjC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBAClC,IAAI,CAAC,EAAE;oBACH,IAAI,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1C,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;wBACb,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;qBAC5B;yBAAM;wBACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;qBAC3B;iBACJ;YACL,CAAC;YAEO,wCAAe,GAAvB;gBACI,gCAAgC;gBAChC,IAAI,aAAa,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;gBAC9C,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC5B,aAAa,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;YACxD,CAAC;YAEO,wCAAe,GAAvB;gBACI,gCAAgC;gBAChC,IAAI,aAAa,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;gBAC9C,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC5B,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC1C,CAAC;YAED,kCAAS,GAAT;gBACI,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,CAAC;YAED,sCAAa,GAAb;gBAEI,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;oBAEjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;iBAE1B;gBACD,IAAI,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC/E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC5B,OAAO,EAAE,CAAC;YACd,CAAC;YAED,yCAAgB,GAAhB,UAAiB,CAAc;gBAE3B,IAAI,CAAC,CAAC,EAAE;oBACJ,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACD,CAAC,CAAC,IAAI,EAAE,CAAC;oBACb,IAAI,CAAC,iBAAiB,EAAE,CAAC;iBAC5B;qBACI;oBACD,CAAC,CAAC,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;iBAC3B;YACL,CAAC;YAED,gBAAgB;YAChB,+BAA+B;YAC/B,iFAAiF;YACjF,iCAAiC;YACjC,6CAAoB,GAApB;gBACI,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;YAC5C,CAAC;YAED,oCAAW,GAAX,UAAY,IAAY,EAAE,QAA6C,IAAkB,OAAO,IAAI,CAAC,CAAC,CAAC;YAEvG,oCAAW,GAAX,UAAY,IAAY,EAAE,QAA6C,IAAa,OAAO,KAAK,CAAC,CAAC,CAAC;YAEnG,uCAAc,GAAd,UAAe,IAAa,EAAE,QAA8C,IAAS,CAAC;YAEtF,sCAAa,GAAb,UAAc,KAAyB,IAAS,CAAC;YACrD,qBAAC;QAAD,CAxFA,AAwFC,IAAA;QAxFY,4BAAc,iBAwF1B,CAAA;QAED,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,EA/FU,aAAa,GAAb,iBAAa,KAAb,iBAAa,QA+FvB;AAAD,CAAC,EA/FM,GAAG,KAAH,GAAG,QA+FT;AAED,IAAI,aAAa,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;;AC3I3D,IAAO,QAAQ,CAqGd;AArGD,WAAO,QAAQ;IAEX,IAAI,WAAW,GAAG;QACd,YAAY,EAAE,EAAE;QAChB,sBAAsB,EAAE,EAAE;QAC1B,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,CAAC;QAChB,iBAAiB,EAAE,SAAS;QAC5B,uBAAuB,EAAE,KAAK;QAC9B,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,KAAK;QAChB,qBAAqB,EAAE,KAAK;QAC5B,iBAAiB,EAAE,KAAK;QACxB,YAAY,EAAE,KAAK;KACtB,CAAC;IAEF,SAAS,mBAAmB;QACxB,IAAI,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE;YACnC,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzC,KAAK,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,WAAW,CAAC,EACpD,MAAM,GAAW,IAAI,EACrB,EAAE,GAA0B,IAAI,CAAC;YAErC,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;gBACjB,IAAI;oBACA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAW,CAA0B,CAAC;oBACpE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC,YAAY,IAAI,UAAU,EAAE;wBAC5C,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBAClB,MAAM;qBACT;iBACJ;gBAAC,OAAO,CAAC,EAAE,GAAG;aAClB;YAED,IAAI,MAAM,IAAI,EAAE,EAAE;gBACd,IAAI;oBACA,WAAW,CAAC,YAAY,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;oBAC5D,WAAW,CAAC,sBAAsB,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC;oBACvF,WAAW,CAAC,WAAW,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;oBAC1D,WAAW,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;oBAE9D,IAAI,mBAAmB,GAAG,EAAE,CAAC,YAAY,CAAC,gCAAgC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,oCAAoC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,uCAAuC,CAAC,CAAC;oBAEjM,IAAI,mBAAmB,EAAE;wBACrB,WAAW,CAAC,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;wBAChG,IAAI,WAAW,CAAC,aAAa,KAAK,CAAC;4BAC/B,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;qBACrC;;wBACG,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;oBAElC,WAAW,CAAC,uBAAuB,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;oBAClF,WAAW,CAAC,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;oBAClE,IAAI,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,GAAG,CAAC;wBAC1J,WAAW,CAAC,iBAAiB,GAAG,OAAO,CAAC;yBACvC,IAAI,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,wBAAwB,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG,CAAC;wBACnK,WAAW,CAAC,iBAAiB,GAAG,SAAS,CAAC;;wBAE1C,WAAW,CAAC,iBAAiB,GAAG,MAAM,CAAC;oBAE3C,IAAI,sBAAsB,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC;oBAEvD,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC;oBAC3D,WAAW,CAAC,qBAAqB,GAAG,CAAC,CAAC,sBAAsB,CAAC,qBAAqB,CAAC;oBACnF,WAAW,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,+BAA+B,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,mCAAmC,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,sCAAsC,CAAC,CAAC,CAAC;oBACxM,WAAW,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;iBAEvE;gBAAC,OAAO,CAAC,EAAE,GAAG;gBACf,OAAO,MAAM,CAAC;aACjB;YAED,OAAO,IAAI,CAAC;SACf;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,SAAgB,cAAc;QAC1B,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,8DAA8D,CAAC,IAAI,EAAsB,CAAC;QAC1I,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;YACvB,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;YACvC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;SAClD;QACD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACnB,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC/B,IAAI,GAAG,IAAI,IAAI,EAAE;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;aAAE;SAClE;QACD,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,IAAI,EAAE;YAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAAE;QAC5E,OAAO;YACH,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACV,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;SAChB,CAAC;IACN,CAAC;IAhBe,uBAAc,iBAgB7B,CAAA;IACU,oBAAW,GAAG,cAAc,EAAE,CAAC;IAC/B,yBAAgB,GAAG,mBAAmB,EAAE,CAAC;IACzC,eAAM,GAAG,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC;IAC3C,cAAK,GAAG,CAAC,CAAC,SAAA,gBAAgB,CAAC;IAC3B,wBAAe,GAAG,WAAW,CAAC;IAC9B,gBAAO,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAC1B,sBAAa,GAAG,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACzC,gBAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;AAChG,CAAC,EArGM,QAAQ,KAAR,QAAQ,QAqGd;AAED,IAAI,4BAA4B,GAAG,CAAC;IAChC,IAAI,sBAAsB,GAAG;QACzB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,CAAC;KACd,CAAC;IAEF,OAAO;QACH,IAAI,OAAO,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QAExC,sBAAsB;QACtB,IAAI,OAAO,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW,IAAI,OAAO,CAAC,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvH,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC;AACN,CAAC,CAAC,EAAE,CAAC;;AC1HL,IAAO,UAAU,CAm2EhB;AAn2ED,WAAO,UAAU;IAkCb;QACI,iBAAY,CAAqB,EAAE,CAAU;YAEzC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,QAAQ,EAAE;gBAC3B,IAAI,CAAC,GAAa,CAAC,CAAC;gBACpB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACR,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACX;YAED,IAAI,CAAC,CAAC,GAAY,CAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAEM,uBAAe,GAAtB,UAAuB,QAAoB;YACvC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC7B,OAAO,IAAI,CAAC;YAChB,IAAI,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,UAAU,GAAG,GAAG,CAAC;YAErB,+BAA+B;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7C,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/B,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACd,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACd,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACd,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC1B,UAAU,IAAI,CAAC,CAAC;gBAChB,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC5B,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;aAC/B;YAED,UAAU,IAAI,GAAG,CAAC;YAClB,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;YACjC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC;YAEjC,OAAO,QAAQ,CAAC;QACpB,CAAC;QAEM,qBAAa,GAApB,UAAqB,QAAmC;YACpD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC7B,OAAO,IAAI,CAAC;YAEhB,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,IAAI,GAAW,CAAC;YAEhB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC5B,GAAG,GAAG,CAAC,CAAC;gBACM,QAAS,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC9B,EAAE,CAAC,OAAO,CAAC,UAAA,CAAC;wBACR,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAChB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,CAAC,CAAC,CAAC;oBACH,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACV,QAAS,CAAC,OAAO,CAAC,UAAA,CAAC;oBAC3B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC,CAAC,CAAC;aACN;YAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/B,CAAC;QAEM,mBAAW,GAAlB,UAAmB,QAAmE;YAClF,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC7B,OAAO,CAAC,CAAC;YAEb,IAAI,IAAI,GAAW,CAAC,CAAC;YAErB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;gBACb,QAAS,CAAC,OAAO,CAAC,UAAA,KAAK;oBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC/C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC5B,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAChC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACnC;gBACL,CAAC,CAAC,CAAC;aACN;iBAAM;gBACH,IAAI,KAAK,GAAG,QAAsB,CAAC;gBACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC5B,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACnC;aACJ;YAED,OAAO,IAAI,GAAG,CAAC,CAAC;QACpB,CAAC;QAEM,uBAAe,GAAtB,UAAuB,CAA2B,EAAE,GAA+B,EAAE,GAAkB;YAAlB,oBAAA,EAAA,UAAkB;YACnG,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5E,CAAC;QAEM,mBAAW,GAAlB,UAAmB,QAAmE;YAClF,OAAO,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QAEM,kBAAU,GAAjB,UAAkB,QAAmB;YACjC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAChC,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAjB,CAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAEtE,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEtC,IAAI,CAAC,CAAC,CAAC,OAAO;gBACV,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAZ,CAAY,CAAC,CAAC;YAE3C,OAAO,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAjB,CAAiB,CAAC,CAAC;QAChD,CAAC;QAKD,sBAAI,sBAAC;iBAAL;gBACI,OAAO,IAAI,CAAC,CAAC,CAAC;YAClB,CAAC;iBAED,UAAM,CAAS;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;;;WAJA;QAMD,sBAAI,sBAAC;iBAAL;gBACI,OAAO,IAAI,CAAC,CAAC,CAAC;YAClB,CAAC;iBAED,UAAM,CAAS;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;;;WAJA;QAUD,wBAAM,GAAN,UAAO,KAAuB;YAC1B,IAAI,CAAC,KAAK;gBACN,OAAO,KAAK,CAAC;YACjB,IAAI,KAAK,YAAY,OAAO;gBACxB,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YACpD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,qBAAG,GAAH,UAAI,KAAc;YACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,qBAAG,GAAH,UAAI,KAAc;YACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,qBAAG,GAAH,UAAI,CAAS;YACT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,0BAAQ,GAAR,UAAS,CAAU;YACf,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,uBAAK,GAAL;YACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,wBAAM,GAAN,UAAO,CAAS;YACZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,qBAAG,GAAH,UAAI,CAAS,EAAE,CAAS;YACpB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,GAAJ,UAAK,CAAS;YACV,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,GAAJ,UAAK,CAAS;YACV,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,qBAAG,GAAH;YACI,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QAEM,oBAAY,GAAnB,UAAoB,EAAW,EAAE,EAAW,EAAE,EAAW;YACrD,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YAEhB,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,4BAAU,GAAV,UAAW,KAAc;YACrB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QACvC,CAAC;QAED,mCAAiB,GAAjB,UAAkB,KAAc;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC9C,CAAC;QAED,uBAAK,GAAL;YACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,uBAAK,GAAL;YACI,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,wBAAM,GAAN;YACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,sBAAI,GAAJ,UAAK,CAAW;YACZ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,2BAAS,GAAT;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,kCAAgB,GAAhB;YACI,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,+BAAa,GAAb;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,yBAAO,GAAP,UAAQ,CAAU;YACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,2BAAS,GAAT,UAAU,CAAU;YAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QAED,yBAAO,GAAP,UAAQ,CAAU;YACd,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAEtF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,uBAAK,GAAL,UAAM,KAAc;YAChB,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED;;;;UAIE;QACK,wBAAgB,GAAvB,UAAwB,CAAU,EAAE,CAAU;YAC1C,gHAAgH;YAChH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QAC5D,CAAC;QAED,2BAAS,GAAT;YACI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAEM,WAAG,GAAV,UAAW,CAAW,EAAE,CAAW;YAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAEM,WAAG,GAAV,UAAW,CAAW,EAAE,CAAW;YAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,+BAAa,GAAb,UAAc,GAAW,EAAE,KAAc;YACrC,IAAI,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EACzB,CAAC,GAAW,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EACzB,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EACpB,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EACpB,IAAI,GAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAC5B,IAAI,GAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,wBAAM,GAAN,UAAO,GAAW;YACd,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAClB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,IAAI,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;QAEM,uBAAe,GAAtB,UAAuB,GAAW;YAC9B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,gCAAc,GAAd;YACI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAEM,mBAAW,GAAlB,UAAmB,CAAoB;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,qBAAG,GAAH,UAAI,CAAU;YACV,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,uBAAK,GAAL;YACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,sBAAI,GAAJ,UAAK,CAAa;YAAb,kBAAA,EAAA,KAAa;YACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,2BAAS,GAAT,UAAU,KAAc;YACpB,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,gCAAc,GAAd;YACI,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,iCAAe,GAAf;YACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,0BAAQ,GAAR;YACI,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QApMM,YAAI,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,aAAK,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,aAAK,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAmM9C,cAAC;KAzUD,AAyUC,IAAA;IAzUY,kBAAO,UAyUnB,CAAA;IAED;QAKI,iBAAY,CAAqB,EAAE,CAAU,EAAE,CAAU;YACrD,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,QAAQ,EAAE;gBAC3B,IAAI,CAAC,GAAa,CAAC,CAAC;gBACpB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACR,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACR,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACX;YAED,IAAI,CAAC,CAAC,GAAY,CAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAED,sBAAI,sBAAC;iBAAL;gBACI,OAAO,IAAI,CAAC,CAAC,CAAC;YAClB,CAAC;iBAED,UAAM,CAAS;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;;;WAJA;QAMD,sBAAI,sBAAC;iBAAL;gBACI,OAAO,IAAI,CAAC,CAAC,CAAC;YAClB,CAAC;iBAED,UAAM,CAAS;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;;;WAJA;QAMD,sBAAI,sBAAC;iBAAL;gBACI,OAAO,IAAI,CAAC,CAAC,CAAC;YAClB,CAAC;iBAED,UAAM,CAAS;gBACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;;;WAJA;QAMD,sBAAI,GAAJ,UAAK,CAAS;YACV,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,wBAAM,GAAN,UAAO,KAAuB;YAC1B,IAAI,CAAC,KAAK;gBACN,OAAO,KAAK,CAAC;YACjB,IAAI,KAAK,YAAY,OAAO;gBACxB,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACjB,CAAC;QAOM,2BAAmB,GAA1B,UAA2B,EAAW,EAAE,EAAW,EAAE,EAAW;YAC5D,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QAEM,kCAA0B,GAAjC,UAAkC,EAAW,EAAE,EAAW,EAAE,EAAW;YACnE,IAAI,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAEM,oBAAY,GAAnB,UAAoB,EAAW,EAAE,EAAW,EAAE,EAAW;YACrD,qBAAqB;YACrB,mCAAmC;YAEnC,iBAAiB;YACjB,kBAAkB;YAElB,sCAAsC;YAEtC,uEAAuE;YAEvE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YAEhB,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,+BAAa,GAAb;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,kCAAgB,GAAhB;YACI,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,2BAAS,GAAT;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,qBAAG,GAAH,UAAI,KAAc;YACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,qBAAG,GAAH,UAAI,KAAc;YACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,qBAAG,GAAH,UAAI,CAAS;YACT,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,wBAAM,GAAN,UAAO,CAAS;YACZ,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,qBAAG,GAAH,UAAI,CAAU;YACV,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,uBAAK,GAAL,UAAM,KAAc;YAChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtI,CAAC;QAED,qBAAG,GAAH;YACI,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;QAED,yBAAO,GAAP,UAAQ,CAAU;YAEd,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;YAEtF,sCAAsC;YAEtC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAEvD,CAAC;QAED,sBAAI,GAAJ,UAAK,CAAW;YACZ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,uBAAK,GAAL;YACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,gCAAc,GAAd;YACI,OAAO,SAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAG,CAAC;QAC9H,CAAC;QAED,gCAAc,GAAd;YACI,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,iCAAe,GAAf;YACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,2BAAS,GAAT,UAAU,KAAc;YACpB,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,4BAAU,GAAV,UAAW,KAAc;YACrB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QACvC,CAAC;QAED,mCAAiB,GAAjB,UAAkB,KAAc;YAC5B,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC9C,CAAC;QAEM,WAAG,GAAV,UAAW,CAAW,EAAE,CAAW;YAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QAEM,WAAG,GAAV,UAAW,CAAW,EAAE,CAAW;YAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QA/HM,YAAI,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,aAAK,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,aAAK,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,aAAK,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QA6HjD,cAAC;KAvLD,AAuLC,IAAA;IAvLY,kBAAO,UAuLnB,CAAA;IAED;QAEI,iBAAY,CAAW,EAAE,CAAW;YAChC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QAEM,kBAAU,GAAjB,UAAkB,MAAiB;YAC/B,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC;gBACL,OAAO,IAAI,CAAC;YAEhB,cAAc;YACd,sEAAsE;YAEtE,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;gBACZ,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAEhC,yDAAyD;YACzD,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;gBACZ,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACzB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACzB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EACzB,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAE5C,IAAI,OAAO,IAAI,CAAC;gBACZ,OAAO,IAAI,CAAC,CAAC,+BAA+B;YAEhD,oCAAoC;YACpC,IAAI,GAAY,CAAC;YAEjB,IAAI,OAAO,KAAK,KAAK;gBACjB,GAAG,GAAG,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;iBAC9D,IAAI,OAAO,KAAK,KAAK;gBACtB,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;;gBAE/D,GAAG,GAAG,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;YAEnE,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QACtD,CAAC;QAEM,uBAAe,GAAtB,UAAuB,EAAW,EAAE,EAAW,EAAE,EAAW;YACxD,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QACzE,CAAC;QAIL,cAAC;IAAD,CA7DA,AA6DC,IAAA;IA7DY,kBAAO,UA6DnB,CAAA;IAED;QACI,mBAAY,KAAe,EAAE,GAAa,EAAE,QAAkB;YAC1D,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;QAWD,sBAAI,4BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC;iBAED,UAAU,KAAK;gBACX,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC;;;WALA;QAOD,sBAAI,0BAAG;iBAAP;gBACI,OAAO,IAAI,CAAC,IAAI,CAAC;YACrB,CAAC;iBAED,UAAQ,KAAK;gBACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBAClB,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC;;;WALA;QAOD,+BAAW,GAAX,UAAY,KAAc,EAAE,GAAY;YACpC,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAErC,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,sBAAI,4BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC;;;WAAA;QAED,sBAAI,gCAAS;iBAAb;gBACI,OAAO,IAAI,CAAC,UAAU,CAAC;YAC3B,CAAC;;;WAAA;QAED,sBAAI,6BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC;YACxB,CAAC;;;WAAA;QAED,sBAAI,6BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,IAAI,CAAC;YACrB,CAAC;;;WAAA;QAEO,0BAAM,GAAd;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,KAAK,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;YACrC,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;aAC9B;iBAAM;gBACH,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBACd,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACtD;QACL,CAAC;QAED,wCAAoB,GAApB,UAAqB,KAAgB,EAAE,SAAiB;YACpD,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EACd,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QAC9G,CAAC;QAED,mCAAe,GAAf,UAAgB,CAAU;YACtB,IAAI,CAAC,CAAC;gBACF,OAAO,IAAI,CAAC;YAEhB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EACd,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACZ,GAAG,GAAG,IAAI,CAAC,SAAS,EACpB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACd,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE9C,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,mCAAe,GAAf,UAAgB,CAAU;YACtB,IAAI,CAAC,CAAC;gBACF,OAAO,MAAM,CAAC,iBAAiB,CAAC;YAEpC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YAEtB,IAAI,CAAC,GAAG;gBACJ,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EACd,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACZ,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAEpB,IAAI,IAAI,CAAC,QAAQ;gBACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,EACpB,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC;gBACN,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAI,CAAC,IAAI,GAAG;gBACR,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAElC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9B,CAAC;QAED,yCAAqB,GAArB,UAAsB,KAAgB;YAClC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEvC,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAElC,yBAAyB;YACzB,IAAI,KAAK,KAAK,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;YAErC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAExC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;YAErC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;gBACrF,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAE/B,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;aACnD;YACD,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,mCAAe,GAAf,UAAgB,KAAgB;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEvC,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAElC,yBAAyB;YACzB,IAAI,KAAK,KAAK,CAAC;gBACX,OAAO,IAAI,CAAC;YAEhB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAExC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;YAErC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;gBACrF,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC5B;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAEM,yBAAe,GAAtB,UAAuB,EAAY,EAAE,EAAY,EAAE,EAAY,EAAE,EAAY;YACzE,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAEvB,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAElC,yBAAyB;YACzB,IAAI,KAAK,KAAK,CAAC;gBACX,OAAO,IAAI,CAAC;YAEhB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAEvB,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;YAErC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE;gBAC9C,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;gBAEvB,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC5B;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,kCAAc,GAAd;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,6BAAS,GAAT;YACI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;QACL,gBAAC;IAAD,CAhNA,AAgNC,IAAA;IAhNY,oBAAS,YAgNrB,CAAA;IAED;QAII,0BAAY,QAAmB;YAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI;gBAExB,CAAC,EAAE,CAAC,EAAE,CAAC;gBACP,CAAC,EAAE,CAAC,EAAE,CAAC;gBACP,CAAC,EAAE,CAAC,EAAE,CAAC;aAEV,CAAC;QACN,CAAC;QAEM,yBAAQ,GAAf,UAAgB,GAAW,EAAE,KAAe;YACxC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,GAAG,GAAG,IAAI,gBAAgB,EAAE,CAAC,GAAG,CAEhC,CAAC,EAAE,CAAE,CAAC,EAAE,CAAC,EACT,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,EAAE,CAAC,CAEV,CAAC;YACF,IAAI,KAAK,EAAE;gBACP,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAChB,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC1G;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QAEM,4BAAW,GAAlB,UAAmB,CAAmB,EAAE,CAAU;YAE9C,IAAI,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE;gBAC3B,OAAO,IAAI,gBAAgB,EAAE,CAAC,GAAG,CAE7B,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EACT,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EACT,CAAC,EAAE,CAAC,EAAE,CAAC,CAEV,CAAC;aACL;YAED,OAAO,IAAI,gBAAgB,EAAE,CAAC,GAAG,CAE7B,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,EAAE,CAAC,CAEV,CAAC;QACN,CAAC;QAED,0CAAe,GAAf,UAAgB,GAA6B;YACzC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvB,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,6CAAkB,GAAlB,UAAmB,GAA6B;YAC5C,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvB,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAEM,sBAAK,GAAZ,UAAa,CAAS,EAAE,CAAS;YAC7B,OAAO,IAAI,gBAAgB,EAAE,CAAC,GAAG,CAE7B,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,EAAE,CAAC,CAEV,CAAC;QACN,CAAC;QAED,mCAAQ,GAAR,UAAS,CAAmB;YACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,2CAAgB,GAAhB,UAAiB,CAAmB,EAAE,CAAmB;YAErD,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;YACpB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvB,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAE1C,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAE1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAE1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAE1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAC1C,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YAE1C,OAAO,IAAI,CAAC;QAEhB,CAAC;QAED,oCAAS,GAAT,UAAU,CAAU;YAChB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EACP,CAAC,GAAG,CAAC,CAAC,CAAC,EACP,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEtB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,OAAO,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAID,8BAAG,GAAH,UAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;YAC3C,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvB,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACtC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACtC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAEtC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,mCAAQ,GAAR;YAEI,IAAI,CAAC,GAAG,CAEJ,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,EAAE,CAAC,EACP,CAAC,EAAE,CAAC,EAAE,CAAC,CAEV,CAAC;YAEF,OAAO,IAAI,CAAC;QAEhB,CAAC;QAED,gCAAK,GAAL;YACI,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,kCAAO,GAAP,UAAQ,GAA6B;YACjC,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvB,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,+BAAI,GAAJ,UAAK,CAAmB;YACpB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,yCAAc,GAAd,UAAe,CAAS;YAEpB,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACnC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEnC,OAAO,IAAI,CAAC;QAEhB,CAAC;QAxKM,yBAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAyK7C,uBAAC;KA3KD,AA2KC,IAAA;IA3KY,2BAAgB,mBA2K5B,CAAA;IAED;QACI,kBAAY,GAA0B,EAAE,GAAc;YAClD,IAAI,GAAG,IAAK,GAAiB,CAAC,GAAG,EAAE;gBAC/B,GAAG,GAAI,GAAiB,CAAC,GAAG,CAAC;gBAC7B,GAAG,GAAI,GAAiB,CAAC,GAAG,CAAC;aAChC;iBAAM;gBACH,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;aAC9B;YAED,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAe,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAe,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QAEM,4BAAmB,GAA1B,UAA2B,MAAe,EAAE,SAAkB;YAC1D,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAEM,uBAAc,GAArB,UAAsB,MAAe,EAAE,KAAa,EAAE,MAAc;YAChE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;YAC/C,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC;QAEM,mBAAU,GAAjB,UAAkB,MAAyD;YACvE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;gBACzB,OAAO,IAAI,QAAQ,EAAE,CAAC;YAE1B,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EACxB,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBACZ,MAAO,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC5B,EAAE,CAAC,OAAO,CAAC,UAAA,CAAC;wBACR,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACN;iBAAM;gBACS,MAAO,CAAC,OAAO,CAAC,UAAA,CAAC;oBACzB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;aACN;YAED,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS;gBACvB,OAAO,IAAI,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAE1E,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,sBAAI,4BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAED,UAAW,CAAU;gBACjB,IAAI,CAAC,EAAE;oBACH,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC9B;YACL,CAAC;;;WARA;QAUD,sBAAI,2BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;iBAED,UAAU,CAAU;gBAChB,IAAI,CAAC,EAAE;oBACH,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;oBACpB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACvB;YACL,CAAC;;;WATA;QAWD,sBAAI,iCAAW;iBAAf;gBACI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5E,CAAC;;;WAAA;QAED,sBAAI,6BAAO;iBAAX;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;;;WAAA;QAKD,2BAAQ,GAAR,UAAS,CAAqB;YAC1B,IAAI,CAAC,CAAC;gBACF,OAAO,KAAK,CAAC;YACjB,IAAI,CAAC,YAAY,OAAO;gBACpB,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBACvF,IAAI,CAAC,YAAY,QAAQ;gBAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,2BAAQ,GAAR,UAAS,KAAe;YACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,yBAAM,GAAN,UAAO,CAAU;YACb,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAED,mCAAgB,GAAhB,UAAiB,EAAY;YACzB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAEzC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,kCAAe,GAAf,UAAgB,CAAU;YACtB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAEpC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,iCAAc,GAAd,UAAe,CAAS;YACpB,IAAI,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAEvD,OAAO,IAAI,CAAC;QAChB,CAAC;QACL,eAAC;IAAD,CAvIA,AAuIC,IAAA;IAvIY,mBAAQ,WAuIpB,CAAA;IAED;QACI,kBAAY,GAA0B,EAAE,GAAc;YAClD,IAAI,GAAG,IAAK,GAAiB,CAAC,GAAG,EAAE;gBAC/B,GAAG,GAAI,GAAiB,CAAC,GAAG,CAAC;gBAC7B,GAAG,GAAI,GAAiB,CAAC,GAAG,CAAC;aAChC;iBAAM;gBACH,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;aAC9B;YAED,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAe,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAe,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QAEM,mBAAU,GAAjB,UAAkB,MAA+B;YAC7C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;gBACzB,OAAO,IAAI,QAAQ,EAAE,CAAC;YAE1B,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EACxB,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EACxB,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBACZ,MAAO,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC5B,EAAE,CAAC,OAAO,CAAC,UAAA,CAAC;wBACR,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;4BAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC/B,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACN;iBAAM;gBACS,MAAO,CAAC,OAAO,CAAC,UAAA,CAAC;oBACzB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI;wBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC,CAAC,CAAC;aACN;YAED,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS;gBACvB,OAAO,IAAI,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAEtF,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC1B,CAAC;QAED,sBAAI,4BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;iBAED,UAAW,CAAU;gBACjB,IAAI,CAAC,EAAE;oBACH,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC9B;YACL,CAAC;;;WARA;QAUD,sBAAI,2BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;iBAED,UAAU,CAAU;gBAChB,IAAI,CAAC,EAAE;oBACH,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;oBACpB,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACvB;YACL,CAAC;;;WATA;QAWD,sBAAI,iCAAW;iBAAf;gBACI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5E,CAAC;;;WAAA;QAED,sBAAI,6BAAO;iBAAX;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;;;WAAA;QAKD,2BAAQ,GAAR,UAAS,CAAqB;YAC1B,IAAI,CAAC,CAAC;gBACF,OAAO,KAAK,CAAC;YACjB,IAAI,CAAC,YAAY,OAAO;gBACpB,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBACjI,IAAI,CAAC,YAAY,QAAQ;gBAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,2BAAQ,GAAR,UAAS,KAAe;YACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;QAED,yBAAM,GAAN,UAAO,CAAU;YACb,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QACL,eAAC;IAAD,CAhHA,AAgHC,IAAA;IAhHY,mBAAQ,WAgHpB,CAAA;IAED;QACI,gBAAY,QAAiB,EAAE,SAAkB;YAC7C,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC;QACpC,CAAC;QA4BM,aAAM,GAAb;YAAc,iBAAoB;iBAApB,UAAoB,EAApB,qBAAoB,EAApB,IAAoB;gBAApB,4BAAoB;;YAC9B,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;YAE3B,IAAI,KAAK,IAAI,CAAC;gBACV,OAAO,MAAM,CAAC;YAElB,OAAO,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,oBAAG,GAAH,UAAI,QAAgB,EAAE,SAAiB;YACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAC;QACpC,CAAC;QAED,oBAAG,GAAH,UAAI,KAAa;YACb,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACxF,CAAC;QAED,oBAAG,GAAH,UAAI,KAAa;YACb,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACxF,CAAC;QAED,oBAAG,GAAH,UAAI,CAAS;YACT,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,uBAAM,GAAN,UAAO,CAAS;YACZ,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,uBAAM,GAAN,UAAO,KAAsB;YACzB,IAAI,CAAC,KAAK;gBACN,OAAO,KAAK,CAAC;YACjB,IAAI,KAAK,YAAY,MAAM;gBACvB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;YAC5H,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,+BAAc,GAAd,UAAe,MAAc;YACzB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,gCAAe,GAAf,UAAgB,MAAc;YAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5G,CAAC;QAED,uBAAM,GAAN,UAAO,SAAiB,EAAE,SAAkB;YACxC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QACpL,CAAC;QAED,6BAAY,GAAZ,UAAa,GAA6B;YACtC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QACpI,CAAC;QAED,sBAAK,GAAL;YACI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,qBAAI,GAAJ,UAAK,MAA+C;YAChD,IAAI,MAAM,EAAE;gBACR,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBAChC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;aACrC;YACD,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,iCAAiC;QACjC,0BAAS,GAAT;YACI,OAAO,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QAED,kCAAiB,GAAjB;YACI,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC7B,CAAC;QAED,wBAAO,GAAP;YACI,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;QAC7E,CAAC;QAED,oBAAoB;QACpB,2BAAU,GAAV,UAAW,KAAa;YACpB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC1B,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;YAC3B,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,gBAAgB;YAC1D,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK;gBACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC/B,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,gBAAgB;YAChD,OAAO,CAAC,CAAC;QACb,CAAC;QAED,gGAAgG;QAChG,4BAAW,GAAX,UAAY,KAAa;YACrB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC;YACzB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC1B,IAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;YAE3B,IAAI,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;YACjC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAEtE,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAE1E,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,wBAAO,GAAP,UAAQ,KAAa;YACjB,IAAI,EAAE,GAAG,MAAM,CAAC,kBAAkB,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAExE,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7F,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YAE/F,IAAI,EAAE,GAAG,MAAM,CAAC,sBAAsB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEnI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC;QAEM,UAAG,GAAV,UAAW,CAAU,EAAE,CAAU;YAC7B,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5F,CAAC;QAEM,UAAG,GAAV,UAAW,CAAU,EAAE,CAAU;YAC7B,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5F,CAAC;QAEa,eAAQ,GAAtB,UAAuB,IAAY;YAC/B,OAAO,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;QAClC,CAAC;QAEa,eAAQ,GAAtB,UAAuB,GAAW;YAC9B,OAAO,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,CAAC;QAED,iCAAiC;QACnB,sBAAe,GAA7B,UAA8B,GAAW,EAAE,GAAW;YAClD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC;YACnD,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/E,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,sBAAsB,CAAC;YACrF,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,CAAC;QAED,iCAAiC;QACnB,kBAAW,GAAzB,UAA0B,KAAc;YACpC,IAAI,CAAC,KAAK;gBACN,OAAO,IAAI,CAAC;YAChB,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,EACtB,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,EACtD,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,EAC7D,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;QAEa,wBAAiB,GAA/B,UAAgC,KAAc;YAC1C,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAC3D,IAAI,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC;YAClE,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7E,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;QAEa,wBAAiB,GAA/B,UAAgC,MAA0B;YACtD,OAAO,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QAEa,mBAAY,GAA1B,UAA2B,MAAsD;YAC7E,IAAI,CAAC,MAAM;gBACP,OAAO,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU;gBAChC,OAAO,IAAI,MAAM,CAAsB,MAAO,CAAC,GAAG,EAAE,EAAuB,MAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC9F,OAAO,IAAI,MAAM,CAA6B,MAAO,CAAC,GAAG,EAA8B,MAAO,CAAC,GAAG,CAAC,CAAC;QACxG,CAAC;QAEa,wBAAiB,GAA/B,UAAgC,OAAsG;YAClI,IAAI,MAAM,GAAa,EAAE,CAAC;YACH,OAAQ,CAAC,OAAO,CAAC,UAAC,EAAE;gBACvC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAEa,6BAAsB,GAApC,UAAqC,OAAsG;YACvI,IAAI,MAAM,GAAc,EAAE,CAAC;YACJ,OAAQ,CAAC,OAAO,CAAC,UAAC,EAAE;gBACvC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,2BAAU,GAAV;YACI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,CAAC;QAED,gCAAe,GAAf;YACI,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QACvD,CAAC;QA3OM,WAAI,GAAW,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEhC,aAAM,GAAW,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QAC/B,UAAG,GAAW,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1B,eAAQ,GAAW,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QACjC,eAAQ,GAAW,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QACjC,kBAAW,GAAW,OAAO,CAAC;QAC9B,oBAAa,GAAW,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QAC/C,yBAAkB,GAAW,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;QAC5D,kBAAW,GAAW,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACtD,UAAG,GAAW,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC;QACjD,2CAA2C;QAC3C,oCAAoC;QACpC,mDAAmD;QACnD,yCAAyC;QAClC,gBAAS,GAAW,GAAG,CAAC;QACxB,qBAAc,GAAW,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;QAChD,yBAAkB,GAAW,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC;QACpD,yBAAkB,GAAW,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9D,6BAAsB,GAAW,MAAM,CAAC,kBAAkB,GAAG,GAAG,CAAC;QACjE,qBAAc,GAAW,MAAM,CAAC,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC;QACtE,aAAM,GAAY,IAAI,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;QAuNvF,aAAC;KAlPD,AAkPC,IAAA;IAlPY,iBAAM,SAkPlB,CAAA;IAED;QACI,sBAAY,OAAiC,EAAE,OAAiB;YAC5D,IAAI,OAAO,IAAK,OAAyB,CAAC,GAAG,EAAE;gBAC3C,OAAO,GAAI,OAAyB,CAAC,GAAG,CAAC;gBACzC,OAAO,GAAI,OAAyB,CAAC,GAAG,CAAC;aAC5C;iBAAM;gBACH,OAAO,GAAG,OAAO,IAAI,IAAI,MAAM,EAAE,CAAC;gBAClC,OAAO,GAAG,OAAO,IAAI,IAAI,MAAM,EAAE,CAAC;aACrC;YAED,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAkB,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAkB,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAEM,uBAAU,GAAjB,UAAkB,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc;YAC5E,OAAO,IAAI,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,CAAC;QAEM,8BAAiB,GAAxB,UAAyB,MAAc,EAAE,YAAoB;YACzD,IAAI,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC;YACzB,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAEM,kCAAqB,GAA5B,UAA6B,MAAc,EAAE,aAAqB,EAAE,cAAsB;YACtF,IAAI,SAAS,GAAG,aAAa,GAAG,CAAC,CAAC;YAClC,IAAI,SAAS,GAAG,cAAc,GAAG,CAAC,CAAC;YAEnC,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAClD,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAEM,wBAAW,GAAlB,UAAmB,OAA8B;YAE7C,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,IAAI,YAAY,EAAE,CAAC;YAE9B,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;YAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;YAC9B,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YAC/B,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;YAE/B,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;gBACd,OAAQ,CAAC,OAAO,CAAC,UAAA,GAAG;oBAC7B,GAAG,CAAC,OAAO,CAAC,UAAA,MAAM;wBACd,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM;4BAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;wBACvD,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM;4BAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;wBACzD,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM;4BAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;wBACvD,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM;4BAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;oBAC7D,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;aACN;iBAAM;gBACQ,OAAQ,CAAC,OAAO,CAAC,UAAA,MAAM;oBAC9B,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM;wBAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACvD,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM;wBAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;oBACzD,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM;wBAAE,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;oBACvD,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM;wBAAE,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;gBAC7D,CAAC,CAAC,CAAC;aACN;YAED,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS;gBACzB,OAAO,IAAI,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAEpF,OAAO,IAAI,YAAY,EAAE,CAAC;QAC9B,CAAC;QAEM,0BAAa,GAApB,UAAqB,OAAkK;YACnL,IAAI,CAAC,OAAO;gBACR,OAAO,IAAI,YAAY,EAAE,CAAC;YAE9B,IAAI,YAAY,GAA+B,OAAQ,CAAC,QAAQ,CAAC,CAAC,CAA6B,OAAQ,CAAC,QAAQ,EAAW,CAAC,CAAC,CAAC,OAAgB,CAAC;YAE/I,IAAI,YAAY,CAAC,MAAM,EAAE;gBACrB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ;oBACxB,YAAY,GAAgD,YAAa,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,QAAQ,EAAE,EAAd,CAAc,CAAC,CAAC;gBAEzG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM;oBACtB,OAAO,YAAY,CAAC,WAAW,CAAE,YAAiD,CAAC,GAAG,CAAW,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,GAAG,CAAS,UAAA,EAAE,IAAI,OAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,EAA7C,CAA6C,CAAC,CAAC,CAAC;gBAE3J,OAAO,YAAY,CAAC,WAAW,CAAE,YAA0C,CAAC,GAAG,CAAS,UAAA,EAAE,IAAI,OAAA,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,EAAvB,CAAuB,CAAC,CAAC,CAAC;aAC3H;YAED,OAAO,IAAI,YAAY,EAAE,CAAC;QAC9B,CAAC;QAEM,8BAAiB,GAAxB,UAAyB,MAAc,EAAE,SAAiB,EAAE,OAAe,EAAE,QAAgB;YACzF,IAAI,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC;YACxB,IAAI,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;YAEzB,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAClC,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACpF,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAEpF,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAExC,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE3C,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QAEM,6BAAgB,GAAvB,UAAwB,MAAc,EAAE,MAAgB;YACpD,OAAO,YAAY,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtF,CAAC;QAEM,kCAAqB,GAA5B,UAA6B,MAAc,EAAE,MAAgB;YACzD,OAAO,YAAY,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpG,CAAC;QAED,6BAAM,GAAN,UAAO,MAA6B;YAChC,IAAI,CAAC,MAAM;gBACP,OAAO;YACX,IAAI,MAAM,YAAY,MAAM,EAAE;gBAC1B,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBACxC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;iBAC3C;qBAAM;oBACH,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC1B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;iBAC7B;aACJ;iBAAM,IAAI,MAAM,YAAY,YAAY,EAAE;gBACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC3B;QACL,CAAC;QAED,sCAAe,GAAf,UAAgB,OAAiB;YAAjC,iBAMC;YALG,IAAI,CAAC,OAAO;gBACR,OAAO;YACX,OAAO,CAAC,OAAO,CAAC,UAAA,EAAE;gBACd,KAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC;QAED,+BAAQ,GAAR,UAAS,MAA6B;YAClC,IAAI,CAAC,MAAM;gBACP,OAAO,KAAK,CAAC;YACjB,IAAI,MAAM,YAAY,MAAM;gBACxB,OAAO,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;iBACvK,IAAI,MAAM,YAAY,YAAY;gBACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,+BAAQ,GAAR,UAAS,KAAmB;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ;gBACzC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ;gBACtC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS;gBACxC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACjD,CAAC;QAED,mCAAY,GAAZ,UAAa,SAAiB,EAAE,SAAiB;YAC7C,OAAO,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjH,CAAC;QAED,qCAAc,GAAd,UAAe,MAAc;YACzB,OAAO,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAChG,CAAC;QAED,4BAAK,GAAL,UAAM,CAAS;YACX,OAAO,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5F,CAAC;QAED,6BAAM,GAAN,UAAO,MAAc;YACjB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,6BAAM,GAAN,UAAO,KAAyB;YAC5B,IAAI,CAAC,KAAK;gBACN,OAAO,KAAK,CAAC;YACjB,IAAI,KAAK,YAAY,YAAY;gBAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpE,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,0BAAG,GAAH,UAAI,CAAS;YACT,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,0BAAG,GAAH,UAAI,CAAS;YACT,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,0BAAG,GAAH,UAAI,CAAS;YACT,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,6BAAM,GAAN,UAAO,CAAS;YACZ,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,4BAAK,GAAL;YACI,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAED,sBAAI,gCAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;;;WAAA;QAED,sBAAI,+BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;;;WAAA;QAED,sBAAI,qCAAW;iBAAf;gBACI,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;;;WAAA;QAED,sBAAI,iCAAO;iBAAX;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;;;WAAA;QAED,8BAAO,GAAP;YACI,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACpD,CAAC;QAED,sBAAI,mCAAS;iBAAb;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC;YACpB,CAAC;;;WAAA;QAED,sBAAI,oCAAU;iBAAd;gBACI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7D,CAAC;;;WAAA;QAED,sBAAI,oCAAU;iBAAd;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC;YACpB,CAAC;;;WAAA;QAED,sBAAI,mCAAS;iBAAb;gBACI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7D,CAAC;;;WAAA;QAED,sBAAI,+BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,CAAC;;;WAAA;QAED,sBAAI,8BAAI;iBAAR;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9B,CAAC;;;WAAA;QAED,sBAAI,+BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC7B,CAAC;;;WAAA;QAED,sBAAI,8BAAI;iBAAR;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAC9B,CAAC;;;WAAA;QAED,sBAAI,iCAAO;iBAAX;gBACI,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9E,CAAC;;;WAAA;QAGD,sBAAI,+BAAK;YADT,wCAAwC;iBACxC;gBACI,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtD,CAAC;;;WAAA;QAGD,sBAAI,gCAAM;YADV,uCAAuC;iBACvC;gBACI,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACrD,CAAC;;;WAAA;QAGD,sBAAI,sCAAY;YADhB,gDAAgD;iBAChD;gBACI,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzC,CAAC;;;WAAA;QAGD,sBAAI,8BAAI;YADR,kFAAkF;iBAClF;gBACI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC;;;WAAA;QAKD,uCAAgB,GAAhB;YACI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,iCAAU,GAAV,UAAW,MAAkB;YAAlB,uBAAA,EAAA,UAAkB;YACzB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,CAAC;QAEM,+BAAkB,GAAzB,UAA0B,CAA2B;YACjD,IAAI,CAAC,CAAC,OAAO,EAAE;gBACX,OAAO,IAAI,YAAY,EAAE,CAAC;YAC9B,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1G,CAAC;QACL,mBAAC;IAAD,CAnSA,AAmSC,IAAA;IAnSY,uBAAY,eAmSxB,CAAA;IAED;QACI,eAAY,CAAU,EAAE,CAAU,EAAE,CAAU,EAAE,CAAU;YAkP1D,UAAU;YACV,MAAC,GAAW,CAAC,CAAC;YACd,UAAU;YACV,MAAC,GAAW,CAAC,CAAC;YACd,UAAU;YACV,MAAC,GAAW,CAAC,CAAC;YACd,QAAQ;YACR,MAAC,GAAW,CAAC,CAAC;YAxPV,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;QAED,wBAAQ,GAAR,UAAS,KAAa;YAClB,IAAI,CAAC,CAAC;YAEN,IAAI,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAEnD,YAAY;gBAEZ,IAAI,KAAK,CAAC;gBACV,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEtB,QAAQ,IAAI,EAAE;oBAEV,KAAK,KAAK,CAAC;oBACX,KAAK,MAAM;wBAEP,IAAI,KAAK,GAAG,+DAA+D,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;4BAE1F,iCAAiC;4BACjC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;4BACrD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;4BACrD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;4BACrD,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAElF,OAAO,IAAI,CAAC;yBAEf;wBAED,IAAI,KAAK,GAAG,qEAAqE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;4BAEhG,uCAAuC;4BACvC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;4BACrD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;4BACrD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;4BACrD,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAElF,OAAO,IAAI,CAAC;yBAEf;wBAED,MAAM;oBAEV,KAAK,KAAK,CAAC;oBACX,KAAK,MAAM;wBAEP,IAAI,KAAK,GAAG,+EAA+E,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;4BAE1G,yCAAyC;4BACzC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;4BACnC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;4BACrC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;4BACrC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BAEjF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBAElC;wBAED,MAAM;iBAEb;aAEJ;iBACI,IAAI,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAE3C,YAAY;gBAEZ,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACf,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;gBAEtB,IAAI,IAAI,KAAK,CAAC,EAAE;oBAEZ,OAAO;oBACP,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;oBAC3D,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;oBAC3D,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;oBAE3D,OAAO,IAAI,CAAC;iBAEf;qBAAM,IAAI,IAAI,KAAK,CAAC,EAAE;oBAEnB,UAAU;oBACV,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;oBAC3D,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;oBAC3D,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;oBAE3D,OAAO,IAAI,CAAC;iBAEf;aAEJ;YAED,gBAAgB;YAChB,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAAC;YAE9C,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,sBAAM,GAAN,UAAO,GAAW;YAEd,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEtB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAChC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAE3B,OAAO,IAAI,CAAC;QAEhB,CAAC;QAED,sBAAM,GAAN;YACI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC;QAED,4BAAY,GAAZ;YACI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAEO,uBAAO,GAAf,UAAgB,CAAS,EAAE,CAAS,EAAE,CAAS;YAE3C,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,CAAC;QAEb,CAAC;QAED,sBAAM,GAAN,UAAO,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAU;YAE9C,gCAAgC;YAChC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,+BAA+B;YACtD,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEhC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAET,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;aAEhC;iBAAM;gBAEH,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEpB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAE1C;YAED,IAAI,CAAC,KAAK,SAAS;gBACf,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAEf,OAAO,IAAI,CAAC;QAEhB,CAAC;QAED,sBAAM,GAAN;YAEI,gCAAgC;YAEhC,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAErC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAEvC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5B,IAAI,GAAG,EAAE,UAAU,CAAC;YACpB,IAAI,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAElC,IAAI,GAAG,KAAK,GAAG,EAAE;gBAEb,GAAG,GAAG,CAAC,CAAC;gBACR,UAAU,GAAG,CAAC,CAAC;aAElB;iBAAM;gBAEH,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;gBAEtB,UAAU,GAAG,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;gBAE9E,QAAQ,GAAG,EAAE;oBAET,KAAK,CAAC;wBAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAAC,MAAM;oBACvD,KAAK,CAAC;wBAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACzC,KAAK,CAAC;wBAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;wBAAC,MAAM;iBAE5C;gBAED,GAAG,IAAI,CAAC,CAAC;aAEZ;YAED,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACZ,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;YACnB,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;YAClB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAEf,OAAO,GAAG,CAAC;QAEf,CAAC;QAED,yBAAS,GAAT,UAAU,CAAK,EAAE,EAAM,EAAE,CAAK,EAAE,EAAM,EAAE,CAAK,EAAE,EAAM;YAA3C,kBAAA,EAAA,KAAK;YAAE,mBAAA,EAAA,MAAM;YAAE,kBAAA,EAAA,KAAK;YAAE,mBAAA,EAAA,MAAM;YAAE,kBAAA,EAAA,KAAK;YAAE,mBAAA,EAAA,MAAM;YACjD,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrJ,CAAC;QAED,gCAAgB,GAAhB,UAAiB,CAAU,EAAE,CAAK,EAAE,CAAK,EAAE,CAAK;YAAnB,kBAAA,EAAA,KAAK;YAAE,kBAAA,EAAA,KAAK;YAAE,kBAAA,EAAA,KAAK;YAC5C,IAAI,CAAC,KAAK,SAAS;gBACf,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACf,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACX,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,mBAAG,GAAH,UAAI,CAAS;YACT,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACZ,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,sBAAM,GAAN,UAAO,CAAS;YACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,4BAAY,GAAZ;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;QAWD,4BAAY,GAAZ,UAAa,CAAU;YACnB,IAAI,CAAC,KAAK,SAAS;gBACf,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACf,OAAO,UAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,SAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,SAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,SAAI,CAAC,MAAG,CAAC;QAC5G,CAAC;QAED,wBAAQ,GAAR;YACI,OAAO,MAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAG,CAAC;QACvI,CAAC;QACL,YAAC;IAAD,CArQA,AAqQC,IAAA;IArQY,gBAAK,QAqQjB,CAAA;IAED;QAuBI,kBAAY,MAAgB,EAAE,MAAkB;YAAlB,uBAAA,EAAA,UAAkB;YAC5C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;QAC1B,CAAC;QArBD,sBAAI,4BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC;YACxB,CAAC;iBAED,UAAW,KAAa;gBACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG,KAAK,CAAC;YACxC,CAAC;;;WALA;QAOD,sBAAI,mCAAa;iBAAjB;gBACI,OAAO,IAAI,CAAC,cAAc,CAAC;YAC/B,CAAC;iBAED,UAAkB,KAAa;gBAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;YAChC,CAAC;;;WALA;QAYD,2BAAQ,GAAR,UAAS,CAAU;YACf,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC;QAClE,CAAC;QACL,eAAC;IAAD,CA/BA,AA+BC,IAAA;IA/BY,mBAAQ,WA+BpB,CAAA;IAED,SAAS,UAAU,CAAC,CAAO,EAAE,CAAO;QAChC,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IACzB,CAAC;IAED;QAOI,cAAY,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,OAAqB;YAC9D,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB;YAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB;YAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;YACjC,IAAI,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,uCAAuC;YACnF,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,wCAAwC;QACrF,CAAC;QACL,WAAC;IAAD,CAdA,AAcC,IAAA;IAED,SAAS,kBAAkB,CAAC,CAAS,EAAE,CAAS,EAAE,OAAqB;QACnE,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,SAAS,GAAG,QAAQ,CAAC;QAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;gBAC5D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EACT,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EACT,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACpB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEzB,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;oBAClE,MAAM,GAAG,CAAC,MAAM,CAAC;gBAErB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC7D;SACJ;QAED,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,eAAe,CAAC,OAAqB;QAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;YAChE,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;SACjB;QACD,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACxE,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,SAAS,YAAY,CAAC,EAAU,EAAE,EAAU,EAAE,CAAW,EAAE,CAAW;QAElE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAElB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YAEtB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAE9D,IAAI,CAAC,GAAG,CAAC,EAAE;gBACP,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACT,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAEZ;iBAAM,IAAI,CAAC,GAAG,CAAC,EAAE;gBACd,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACZ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACf;SACJ;QAED,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACZ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAEZ,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,SAAgB,sBAAsB,CAAC,IAAe,EAAE,SAAkB,EAAE,KAAe;QAEvF,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC,CAAC;QAE1C,SAAS,GAAG,SAAS,IAAI,GAAG,CAAC;QAE7B,0CAA0C;QAC1C,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;gBAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACtC;QAED,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;QACxB,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;QACzB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;QAErB,oFAAoF;QACpF,IAAI,SAAS,GAAG,IAAI,WAAW,CAAC,SAAS,CAAO,IAAI,EAAE,UAAU,CAAC,CAAC;QAElE,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,IAAI,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAEpE,mCAAmC;QACnC,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,QAAQ,EAAE;YACxC,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,QAAQ,EAAE;gBACxC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;aACtD;SACJ;QAED,wCAAwC;QACxC,IAAI,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAExC,wCAAwC;QACxC,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,IAAI,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;YAAE,QAAQ,GAAG,QAAQ,CAAC;QAEjD,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;QAEjC,OAAO,SAAS,CAAC,MAAM,EAAE;YACrB,8CAA8C;YAC9C,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;YAE3B,gDAAgD;YAChD,IAAI,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE;gBACrB,QAAQ,GAAG,IAAI,CAAC;gBAChB,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,CAAC;aACtG;YAED,sEAAsE;YACtE,IAAI,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,IAAI,SAAS;gBAAE,SAAS;YAEjD,iCAAiC;YACjC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACf,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,SAAS,IAAI,CAAC,CAAC;SAClB;QAED,IAAI,KAAK,EAAE;YACP,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC/C;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAtEe,iCAAsB,yBAsErC,CAAA;IAED,SAAgB,4BAA4B,CAAC,IAAc,EAAE,SAAkB,EAAE,KAAe;QAC5F,SAAS,GAAG,SAAS,IAAI,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;QAC5D,IAAI,MAAM,GAAG,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAnC,CAAmC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAEnG,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC7G,CAAC;IALe,uCAA4B,+BAK3C,CAAA;IAED,SAAgB,aAAa,CAAC,QAAyD;QACnF,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,EACzB,MAAM,GAAG,MAAM,CAAC,SAAS,EACzB,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,EAC1B,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,EAC1B,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,MAAM,CAAC,SAAS,EACvB,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,EACxB,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QAE7B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzB,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC;gBACd,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,CAAC;oBACf,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;oBACpC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;oBACpC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;oBACpC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;oBACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;SACN;aAAM;YACH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,CAAC;gBACtB,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;SACN;QAED,OAAO,EAAE,YAAY,EAAE,IAAI,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAC9K,CAAC;IArCe,wBAAa,gBAqC5B,CAAA;IAED,SAAgB,uBAAuB,CAAC,MAA+B;QACnE,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM;YACzB,OAAO,CAAC,CAAC;QAEb,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,EACnB,MAAM,GAAG,CAAC,EACV,IAAI,GAAwF,IAAI,CAAC;QAErG,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;YACvC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EACd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EACd,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAChB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAChB,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EACvB,KAAK,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAEjC,IAAI,KAAK,GAAG,MAAM,EAAE;gBAChB,MAAM,GAAG,KAAK,CAAC;gBACf,IAAI,GAAG,EAAE,EAAE,IAAA,EAAE,EAAE,IAAA,EAAE,KAAK,OAAA,EAAE,CAAC,GAAA,EAAE,CAAC;aAC/B;YAED,CAAC,GAAG,CAAC,CAAC;SACT;QAED,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;YACxB,OAAO,CAAC,CAAC;QAEb,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAChD,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EACrD,GAAG,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EACrD,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,EACpB,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,EACpB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EACf,MAAM,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAEnC,IAAI,MAAM,IAAI,CAAC;YACX,OAAO,CAAC,CAAC;QAEb,IAAI,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAE9C,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC;IACzE,CAAC;IAzCe,kCAAuB,0BAyCtC,CAAA;IAED,SAAgB,oBAAoB,CAAC,cAAsB,EAAE,iBAA0C;QACnG,IAAI,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAC/C,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC,EACjD,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EAAjE,CAAiE,CAAC,CAAC,CAAC;QAC7H,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IALe,+BAAoB,uBAKnC,CAAA;IAED,SAAgB,0BAA0B,CAAC,MAAgC,EAAE,YAAoB,EAAE,oBAA4B,EAAE,QAAY,EAAE,MAAU,EAAE,QAAY;QAAtC,yBAAA,EAAA,YAAY;QAAE,uBAAA,EAAA,UAAU;QAAE,yBAAA,EAAA,YAAY;QACnK,IAAI,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,oBAAoB,CAAC,EACzD,SAAS,GAAG,SAAS,CAAC,cAAc,EAAE,EACtC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK;YACnB,IAAI,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EACpH,CAAC,GAA0B;gBACvB,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,CAAC,EAAE,MAAM;gBACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,QAAQ,EAAE,QAAQ;aACrB,CAAC;YACN,OAAO,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACP,CAAC;IAjBe,qCAA0B,6BAiBzC,CAAA;IAED;QASI,4BAAY,OAA6C,EAAE,iBAAsB,EAAE,WAAkB;YAA1C,kCAAA,EAAA,sBAAsB;YAAE,4BAAA,EAAA,kBAAkB;YAPrG,SAAI,GAAG,EAAE,CAAC;YAQN,IAAI,YAAY,GAAiB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACtG,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,SAAS,GAAG,iBAAiB,CAAC;YAElC,IAAI,kBAAkB,GAAG,YAAY,CAAC,MAAM,CAAC;YAE7C,IAAI,iBAAiB,GAAG,YAAY,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAEhH,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE;gBAC/D,EAAE,SAAS,CAAC;gBACZ,iBAAiB,GAAG,YAAY,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;aAC/G;YAED,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;YAC3C,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACvD,IAAI,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,6EAA6E;QAC7E,gDAAmB,GAAnB,UAAoB,KAAyB,EAAE,KAAS;YAApC,sBAAA,EAAA,yBAAyB;YAAE,sBAAA,EAAA,SAAS;YACpD,IAAI,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EACtC,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,OAAO,QAAM,KAAK,gBAAW,MAAM,CAAC,QAAQ,SAAI,MAAM,CAAC,SAAS,cAAS,IAAI,cAAS,WAAW,SAAI,WAAW,eAAU,KAAO,CAAC;QACtI,CAAC;QAED,yCAAY,GAAZ,UAAa,OAAiB;YAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EACd,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE;gBACjB,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;gBACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACP,CAAC;QACL,yBAAC;IAAD,CA/CA,AA+CC,IAAA;IA/CY,6BAAkB,qBA+C9B,CAAA;AACL,CAAC,EAn2EM,UAAU,KAAV,UAAU,QAm2EhB;;ACn2ED,IAAO,GAAG,CAowBT;AApwBD,WAAO,GAAG;IAAC,IAAA,KAAK,CAowBf;IApwBU,WAAA,KAAK;QAEZ,SAAgB,SAAS,CAAI,GAAiB;YAC1C,IAAI,KAAK,CAAC,IAAI;gBACV,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAJe,eAAS,YAIxB,CAAA;QAED,SAAgB,oBAAoB,CAAC,gBAAwB,EAAE,MAAW;YACtE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACrF,CAAC;QAFe,0BAAoB,uBAEnC,CAAA;QAED,SAAgB,cAAc,CAAC,gBAAwB,EAAE,WAAuB;YAC5E,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,OAAO;aACV;YAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAEzC,IAAI,cAAc,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;gBACvC,IAAI,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,cAAc,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QACrD,CAAC;QAbe,oBAAc,iBAa7B,CAAA;QAED,SAAgB,cAAc,CAAC,gBAAwB,EAAE,IAAU;YAC/D,uCAAuC;YACvC,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAChD,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EACtF,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAC3C,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5D,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;gBACrC,OAAO;aACV;YAED,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACZ,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACnC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;aAEvD;iBAAM;gBACH,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;gBAC/C,IAAI,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAQ,CAAC;gBACtD,YAAY,CAAC,QAAQ,GAAG,gBAAgB,CAAC;gBACzC,YAAY,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACrD,YAAY,CAAC,OAAO,GAAG,cAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAChD,YAAY,CAAC,KAAK,EAAE,CAAC;aACxB;QACL,CAAC;QA3Be,oBAAc,iBA2B7B,CAAA;QAED,SAAgB,uBAAuB,CAAC,SAAmD,EAAE,IAAa,EAAE,KAA2B;YACnI,IAAI,GAAG,GAA2C,EAAE,CAAC;YACrD,IAAI,OAAO,GAAa,EAAE,CAAC;YAC3B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,SAAS,CAAC,OAAO,CAAC,UAAA,QAAQ;gBACtB,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;gBACpC,GAAG,IAAI,CAAC,CAAC;YACb,CAAC,CAAC,CAAC;YAEH,OAAO,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;QAXe,6BAAuB,0BAWtC,CAAA;QAED,SAAgB,oBAAoB,CAAC,MAA8C,EAAE,OAAiB,EAAE,IAAa,EAAE,KAA2B;YAC9I,IAAI,GAAG,GAAG,KAAK,IAAI;gBACf,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;aACb,CAAC;YAEF,sBAAsB;YACtB,2CAA2C;YAE3C,4EAA4E;YAE5E,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;YAExB,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;YAEvE,sDAAsD;YAEtD,8BAA8B;YAE9B,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;gBAEZ,yCAAyC;gBAEzC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,CAAC,CAAC,CAAC;YAEH,uBAAuB;YACvB,iEAAiE;YACjE,KAAK;YAEL,uBAAuB;YACvB,4FAA4F;YAC5F,KAAK;YAEL,IAAI,SAAS,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;gBAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;aAC1H;YAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAErB,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;YACjC,sCAAsC;YACtC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;YAEjC,OAAO,GAAG,CAAC;QACf,CAAC;QAjDe,0BAAoB,uBAiDnC,CAAA;QAED,SAAgB,YAAY,CAAC,CAAS;YAClC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;QAFe,kBAAY,eAE3B,CAAA;QAED,SAAgB,UAAU,CAAC,IAAI;YAC3B,IAAI,GAAG,GAAG;gBACN,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,MAAM;gBACX,GAAG,EAAE,QAAQ;gBACb,GAAG,EAAE,QAAQ;aAChB,CAAC;YAEF,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAC,CAAC,IAAK,OAAA,GAAG,CAAC,CAAC,CAAC,EAAN,CAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,CAAC;QAVe,gBAAU,aAUzB,CAAA;QAED;YAMI;gBACI,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;gBACnB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;gBACjB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;YACjC,CAAC;YAED,yBAAK,GAAL;gBACI,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,wBAAI,GAAJ;gBACI,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7D,CAAC;YAED,2BAAO,GAAP;gBACI,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACvC,CAAC;YAED,uBAAG,GAAH,UAAI,IAAY;gBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YACL,gBAAC;QAAD,CAhCA,AAgCC,IAAA;QAhCY,eAAS,YAgCrB,CAAA;QAED,SAAgB,oBAAoB,CAAC,GAAW,EAAE,IAAY,EAAE,GAAW;YACvE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;gBACrB,OAAO,GAAG,CAAC;YAEf,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,aAAW,IAAI,eAAY,EAAE,GAAG,CAAC,EACnD,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEzB,IAAI,CAAC,KAAK,CAAC,CAAC;gBACR,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAK,IAAI,SAAI,GAAG,OAAI,CAAC,CAAC;YAEnD,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;QAC1E,CAAC;QAXe,0BAAoB,uBAWnC,CAAA;QAED,SAAgB,WAAW,CAAC,GAAW,EAAE,EAAU;YAC/C,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAFe,iBAAW,cAE1B,CAAA;QAED,SAAgB,SAAS,CAAC,GAAW,EAAE,EAAU;YAC7C,OAAO,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QAFe,eAAS,YAExB,CAAA;QAED,SAAgB,YAAY;YACxB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAA,CAAC;gBAC5D,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;gBACnE,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;QACP,CAAC;QALe,kBAAY,eAK3B,CAAA;QAED,SAAgB,SAAS;YACrB,OAAO,sCAAsC,CAAC;QAClD,CAAC;QAFe,eAAS,YAExB,CAAA;QAED,SAAgB,SAAS,CAAC,GAAW,EAAE,QAAyC;YAC5E,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;YAEtB,GAAG,CAAC,MAAM,GAAG;gBACT,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACd,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,CAAC,CAAC;YAEF,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YAEd,OAAO,GAAG,CAAC;QACf,CAAC;QAXe,eAAS,YAWxB,CAAA;QAED,SAAgB,eAAe,CAAC,KAAoC,EAAE,GAAW;YAC7E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;gBACrD,OAAO;YAEX,IAAI,MAAM,GAAW,CAAC,CAAC,KAAY,CAAC,CAAC;YAErC,IAAI,CAAC,MAAM,CAAC,MAAM;gBACd,OAAO;YAEX,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;gBACjC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iBACd,IAAU,CAAE,CAAC,MAAM,CAAC,OAAO;gBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAQ,CAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;gBAE/E,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QAC7B,CAAC;QAfe,qBAAe,kBAe9B,CAAA;QAcD,SAAgB,iBAAiB,CAAC,KAAoC,EAAE,OAAgC;YACpG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;gBACrD,OAAO,IAAI,CAAC;YAEhB,IAAI,MAAM,GAAW,CAAC,CAAC,KAAY,CAAC,CAAC;YAErC,IAAI,CAAC,MAAM,CAAC,MAAM;gBACd,OAAO,IAAI,CAAC;YAEhB,OAAO,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,GAAG,EAAS,EAAE,OAAO,CAAC,CAAC;QAC1E,CAAC;QAVe,uBAAiB,oBAUhC,CAAA;QAED,SAAgB,sBAAsB,CAAC,KAAa,EAAE,OAAgC;YAClF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;gBACrD,OAAO,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAErE,IAAI,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YAC1B,IAAI,KAAa,CAAC;YAClB,IAAI,OAAO,IAAI,OAAO,CAAC,eAAe,EAAE;gBACpC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;aACxF;iBAAM;gBACH,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;aAC7G;YAED,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAChC,OAAO,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAErE,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE;gBACrC,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE9C,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK;gBACxB,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAElC,IAAI,OAAO,IAAI,CAAC,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,EAAE;gBAC1H,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;aAC5D;YAED,OAAO,KAAK,CAAC;QACjB,CAAC;QA1Be,4BAAsB,yBA0BrC,CAAA;QAED,SAAgB,oBAAoB,CAAC,GAAoB,EAAE,MAAgB,EAAE,WAAqB;YAC9F,IAAI,OAAO,GAAG,KAAK,QAAQ;gBACvB,OAAO,GAAG,CAAC;YACf,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAC1E,OAAO,IAAI,CAAC;YAEhB,IAAI,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC5C,IAAI,iBAAiB,IAAI,CAAC,WAAW;gBACjC,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACzD,IAAI,EAAE,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC9E,IAAI,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;YACnC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;QACvD,CAAC;QAZe,0BAAoB,uBAYnC,CAAA;QAED,SAAgB,sBAAsB,CAAC,GAAW,EAAE,OAAY;YAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;gBAC1E,OAAO,GAAG,CAAC;YACf,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;gBAC/B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ;gBAC/B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE;gBACvC,kBAAkB;gBAClB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC1C,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;aACrC;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QAbe,4BAAsB,yBAarC,CAAA;QAED,SAAgB,qBAAqB,CAAC,GAAoB,EAAE,MAAgB,EAAE,WAAqB;YAC/F,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;gBAEzB,GAAG,GAAY,GAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAEzC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;oBAChC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;gBAEpB,qBAAqB;gBACrB,IAAI,KAAK,GAAY,GAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC/C,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEd,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;oBACrB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,EAAnD,CAAmD,CAAC,CAAC;gBAE9E,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,GAAG,CAAC,CAAC,EAAP,CAAO,CAAC,CAAC;aAE1C;iBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAC9B,MAAM,GAAG,GAAG,CAAC;YACjB,OAAO,MAAM,CAAC;QAClB,CAAC;QArBe,2BAAqB,wBAqBpC,CAAA;QAED,yCAAyC;QACzC,SAAgB,UAAU,CAAC,GAAW;YAClC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACzF,CAAC;QAFe,gBAAU,aAEzB,CAAA;QAED,SAAgB,gBAAgB,CAAC,GAAW;YACxC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAC9C,OAAO,GAAG,CAAC;YACf,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QALe,sBAAgB,mBAK/B,CAAA;QAED,SAAgB,qBAAqB,CAAC,GAAW;YAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;gBACvB,OAAO,IAAI,CAAC;YAEhB,IAAI,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvB,MAAM,GAAG,EAAE,CAAC;gBACZ,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAA,IAAI;oBACjC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC3B,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,CAAC,CAAC,CAAC;aACN;YAED,OAAO;gBACH,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,GAAG;aACX,CAAC;QACN,CAAC;QApBe,2BAAqB,wBAoBpC,CAAA;QAED,SAAgB,iBAAiB,CAAC,SAAc,EAAE,UAAyC;YACvF,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE;gBAClC,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE;oBACvB,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;iBACnC;aACJ;iBAAM;gBACH,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE;oBACvB,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;iBAC9B;aACJ;QACL,CAAC;QAVe,uBAAiB,oBAUhC,CAAA;QAED,SAAgB,kBAAkB,CAAC,IAAiB;YAChD,IAAI,KAAK,GAAkB,CAAC,IAAI,CAAC,CAAC;YAElC,IAAI,MAAM,GAAkB,EAAE,CAAC;YAE/B,OAAO,KAAK,CAAC,MAAM,EAAE;gBACjB,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,IAAI,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACnC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;oBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC3C,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,KAAK,IAAI,KAAK,YAAY,WAAW;4BACrC,KAAK,CAAC,IAAI,CAAC,KAAoB,CAAC,CAAC;qBACxC;iBACJ;aACJ;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QAnBe,wBAAkB,qBAmBjC,CAAA;QAED;YACI,yBAAY,aAAqB,EAAE,OAAY;gBAA/C,iBAiDC;gBAhDG,IAAI,KAAK,GAAG,aAAa,IAAI,CAAC,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAErB,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;oBACrB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC;wBAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;iBAChC;gBAED,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAE3L,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;oBAC7B,GAAG,EAAE;wBACD,OAAO,KAAI,CAAC,MAAM,CAAC;oBACvB,CAAC;oBACD,GAAG,EAAE,UAAC,CAAC;wBACH,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,KAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;wBACpE,IAAI,GAAG,EAAE;4BACL,KAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,GAAG,EAAE,KAAI,CAAC,CAAC;4BAC1D,KAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAI,CAAC,YAAY,EAAE,CAAC,CAAC;yBAChG;6BAAM;4BACH,qBAAqB;4BACrB,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,SAAS,CAAC;4BACrC,KAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAI,CAAC,SAAS,EAAE,KAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAI,CAAC,CAAC;yBACnM;oBACL,CAAC;iBACJ,CAAC,CAAC;gBAEH,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;oBACrC,GAAG,EAAE;wBACD,OAAO,KAAI,CAAC,cAAc,CAAC;oBAC/B,CAAC;oBACD,GAAG,EAAE,UAAC,CAAC;wBACH,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,KAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;wBACxE,IAAI,GAAG,EAAE;4BACL,KAAI,CAAC,cAAc,GAAG,GAAG,CAAC;4BAC1B,KAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAI,CAAC,CAAC;yBAChI;6BAAM;4BACH,qBAAqB;4BACrB,KAAI,CAAC,cAAc,GAAG,KAAI,CAAC,SAAS,CAAC;4BACrC,KAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,KAAI,CAAC,SAAS,EAAE,KAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,KAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAI,CAAC,CAAC;yBACnM;oBACL,CAAC;iBACJ,CAAC,CAAC;gBAEH,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YAC3B,CAAC;YASL,sBAAC;QAAD,CA3DA,AA2DC,IAAA;QA3DY,qBAAe,kBA2D3B,CAAA;QASD,SAAgB,mBAAmB,CAAC,WAAwB;YACxD,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAM,SAAS,GAAG,kEAAkE,CAAC;YAErF,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YACpC,IAAM,aAAa,GAAG,UAAU,GAAG,CAAC,CAAC;YACrC,IAAM,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;YAE9C,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YACN,IAAI,CAAC,CAAC;YACN,IAAI,KAAK,CAAC;YAEV,4CAA4C;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE;gBACpC,gDAAgD;gBAChD,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE9D,0DAA0D;gBAC1D,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,6BAA6B;gBAC3D,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,6BAA6B;gBACzD,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;gBACrD,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAQ,qBAAqB;gBAE5C,oEAAoE;gBACpE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;aACvE;YAED,4CAA4C;YAC5C,IAAI,aAAa,KAAK,CAAC,EAAE;gBACrB,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;gBAE1B,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB;gBAE/C,2CAA2C;gBAC3C,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB;gBAEtC,MAAM,IAAI,KAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,OAAI,CAAC;aAChD;iBAAM,IAAI,aAAa,KAAK,CAAC,EAAE;gBAC5B,KAAK,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAEzD,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,0BAA0B;gBACrD,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB;gBAElD,2CAA2C;gBAC3C,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;gBAEzC,MAAM,IAAI,KAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAG,CAAC;aAC9D;YAED,OAAO,MAAM,CAAC;QAClB,CAAC;QArDe,yBAAmB,sBAqDlC,CAAA;QAED,SAAgB,mBAAmB,CAAC,KAAa;YAE7C,IAAM,MAAM,GAAG,mEAAmE,CAAC;YAEnF,oCAAoC;YAEpC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG;gBAC1D,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBAC5C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG;gBAC/D,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEjD,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;YAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE9C,IAAI,WAAW,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;YAEzC,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;YAEzC,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,iDAAiD;YAEjD,OAAO,CAAC,GAAG,KAAK,EAAE;gBACd,oCAAoC;gBACpC,IAAI,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnE,IAAI,IAAI,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEnE,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;gBACrC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;gBAC5C,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;gBAEpC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,GAAG,KAAK;oBACT,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,GAAG,KAAK;oBACT,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;aAC1B;YAED,OAAO,WAAW,CAAC;QACvB,CAAC;QA1Ce,yBAAmB,sBA0ClC,CAAA;QAED,kCAAkC;QAElC,gEAAgE;QAChE,uCAAuC;QACvC,mFAAmF;QACnF,sBAAsB;QACtB,uBAAuB;QAEvB,mBAAmB;QACnB,gBAAgB;QAChB,kCAAkC;QAClC,0DAA0D;QAC1D,OAAO;QAEP,iDAAiD;QACjD,+DAA+D;QAC/D,4BAA4B;QAC5B,uCAAuC;QAEvC,iFAAiF;QAEjF,2DAA2D;QAC3D,iCAAiC;QACjC,8BAA8B;QAE9B,4FAA4F;QAE5F,iEAAiE;QACjE,+EAA+E;QAC/E,mCAAmC;QACnC,gDAAgD;QAEhD,+CAA+C;QAC/C,iCAAiC;QACjC,iBAAiB;QACjB,OAAO;QAEP,wCAAwC;QACxC,2CAA2C;QAC3C,qCAAqC;QACrC,qBAAqB;QACrB,WAAW;QACX,OAAO;QACP,GAAG;QAEH,IAAc,sBAAsB,CA8InC;QA9ID,WAAc,sBAAsB;YAEhC,SAAS,OAAO,CAAC,GAAW;gBACxB,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBAChB,OAAO,CAAC,CAAC;iBACZ;qBAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;oBACxB,OAAO,CAAC,CAAC;iBACZ;qBAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;oBACxB,OAAO,CAAC,CAAC;iBACZ;qBAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;oBACxB,OAAO,CAAC,CAAC;iBACZ;gBACD,OAAO,CAAC,CAAC;YACb,CAAC;YAED,wEAAwE;YACxE,SAAgB,4BAA4B,CAAC,KAAe;gBACxD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACrB,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxB,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC/B;gBACD,OAAO,MAAM,CAAC;YAClB,CAAC;YAPe,mDAA4B,+BAO3C,CAAA;YAED,gFAAgF;YAChF,SAAgB,QAAQ,CAAC,KAAe;gBACpC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;gBACrB,IAAI,GAAG,GAAG,IAAI,WAAW,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC/D,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxB,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;wBAChB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;qBACrB;yBAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;wBACxB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAClC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;qBAC3B;yBAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;wBACxB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAClC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC1C,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;qBAC5B;yBAAM,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;wBACxB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAClC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC1C,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC3C,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;qBAC5B;yBAAM;wBACH,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAClC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC1C,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC3C,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;wBAC3C,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC;qBAC5B;iBACJ;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;YA9Be,+BAAQ,WA8BvB,CAAA;YAED,0HAA0H;YAC1H,sEAAsE;YACtE,sCAAsC;YACtC,0BAA0B;YAC1B,oBAAoB;YACpB,kCAAkC;YAClC,kCAAkC;YAClC,OAAO;YACP,uBAAuB;YACvB,GAAG;YAEH,uEAAuE;YACvE,SAAgB,UAAU,CAAC,KAAkB;gBACzC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,IAAI,MAAM,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;gBACxB,IAAI,GAAG,GAAG,CAAC,CAAC;gBACZ,OAAO,GAAG,GAAG,GAAG,EAAE;oBACd,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBACtB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;oBACjB,IAAI,CAAC,IAAI,CAAC,EAAE;wBACR,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACd,SAAS;qBACZ;oBACD,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,EAAE;wBACR,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACd,SAAS;qBACZ;oBACD,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,EAAE;wBACR,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACd,SAAS;qBACZ;oBACD,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClB,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,EAAE;wBACR,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACd,SAAS;qBACZ;oBACD,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBAClB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACb,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;gBACD,OAAO,KAAK,CAAC;YACjB,CAAC;YAnCe,iCAAU,aAmCzB,CAAA;YAED,SAAgB,gBAAgB,CAAC,KAAe;gBAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;oBACvB,OAAO,IAAI,CAAC;gBAEhB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAEtC,IAAI,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,GAAG,EAAP,CAAO,CAAC,CAAC,CAAC,CAAC;gBAElE,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC;YATe,uCAAgB,mBAS/B,CAAA;YAED,iGAAiG;YACjG,SAAgB,uBAAuB,CAAC,KAAe,EAAE,SAAqB;gBAArB,0BAAA,EAAA,aAAqB;gBAC1E,IAAI,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,EAAzB,CAAyB,CAAC,CAAC,CAAC;gBAEzE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;gBAEzB,OAAO,MAAM,CAAC;YAClB,CAAC;YANe,8CAAuB,0BAMtC,CAAA;YAED,SAAgB,oBAAoB,CAAC,IAAY,EAAE,IAAgB,EAAE,KAAiB;gBAAnC,qBAAA,EAAA,QAAgB;gBAAE,sBAAA,EAAA,SAAiB;gBAClF,OAAO,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,EAAlB,CAAkB,CAAC,CAAC;YAC9E,CAAC;YAFe,2CAAoB,uBAEnC,CAAA;YAED;gBAKI,2BAAY,IAAa,EAAE,IAAa,EAAE,KAAc;oBACpD,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;oBACzB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;oBACtB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,CAAC;gBAC5B,CAAC;gBACL,wBAAC;YAAD,CAVA,AAUC,IAAA;YAVY,wCAAiB,oBAU7B,CAAA;QACL,CAAC,EA9Ia,sBAAsB,GAAtB,4BAAsB,KAAtB,4BAAsB,QA8InC;QAED,IAAI,YAAY,GAA8B,EAAE,CAAC;QAEjD,SAAgB,YAAY,CAAC,GAAW,EAAE,EAAc,EAAE,OAAe;YACrE,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE;gBACnB,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACzB;YAED,YAAY,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;gBAC3B,EAAE,EAAE,CAAC;gBACL,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC,EAAE,OAAO,CAAQ,CAAC;QACvB,CAAC;QAVe,kBAAY,eAU3B,CAAA;IACL,CAAC,EApwBU,KAAK,GAAL,SAAK,KAAL,SAAK,QAowBf;AAAD,CAAC,EApwBM,GAAG,KAAH,GAAG,QAowBT;AAED,IAAO,WAAW,CA2hBjB;AA3hBD,WAAO,WAAW;IAEd,SAAgB,cAAc,CAAI,GAAQ,EAAE,UAAe;QACvD,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,EAAS,CAAC,CAAQ,CAAC;IACzF,CAAC;IAFe,0BAAc,iBAE7B,CAAA;IAED,SAAgB,aAAa,CAAI,GAAQ;QACrC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAFe,yBAAa,gBAE5B,CAAA;IAED,SAAgB,GAAG,CAAC,GAAa;QAC7B,OAAO,GAAG,CAAC,MAAM,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,GAAG,EAAE,EAAP,CAAO,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAFe,eAAG,MAElB,CAAA;IAED,SAAgB,KAAK,CAAI,GAAQ,EAAE,EAAuB;QACtD,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,EACvB,GAAG,GAAM,IAAI,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EACb,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,GAAG,EAAE;gBACT,GAAG,GAAG,CAAC,CAAC;gBACR,GAAG,GAAG,IAAI,CAAC;aACd;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAZe,iBAAK,QAYpB,CAAA;IAED,SAAgB,KAAK,CAAI,GAAQ,EAAE,EAAuB;QACtD,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,EACtB,GAAG,GAAM,IAAI,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EACb,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,GAAG,EAAE;gBACT,GAAG,GAAG,CAAC,CAAC;gBACR,GAAG,GAAG,IAAI,CAAC;aACd;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAZe,iBAAK,QAYpB,CAAA;IAED,SAAgB,UAAU,CAAI,GAAQ,EAAE,EAAuB;QAC3D,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,EACvB,GAAG,GAAG,CAAC,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EACb,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,GAAG,EAAE;gBACT,GAAG,GAAG,CAAC,CAAC;gBACR,GAAG,GAAG,CAAC,CAAC;aACX;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAZe,sBAAU,aAYzB,CAAA;IAED,SAAgB,UAAU,CAAI,GAAQ,EAAE,EAAuB;QAC3D,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,EACtB,GAAG,GAAG,CAAC,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EACb,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC,GAAG,GAAG,EAAE;gBACT,GAAG,GAAG,CAAC,CAAC;gBACR,GAAG,GAAG,CAAC,CAAC;aACX;SACJ;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAZe,sBAAU,aAYzB,CAAA;IAED,SAAgB,GAAG,CAAI,GAAQ,EAAE,EAAuB;QACpD,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG;gBACP,GAAG,GAAG,CAAC,CAAC;SACf;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IARe,eAAG,MAQlB,CAAA;IAED,SAAgB,GAAG,CAAI,GAAQ,EAAE,EAAuB;QACpD,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,GAAG,GAAG;gBACP,GAAG,GAAG,CAAC,CAAC;SACf;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IARe,eAAG,MAQlB,CAAA;IAED,SAAgB,WAAW,CAAI,GAAQ,EAAE,EAAwB;QAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,CAAC,IAAI,CAAC;gBACR,OAAO,IAAI,CAAC;SACnB;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAPe,uBAAW,cAO1B,CAAA;IAED,SAAgB,KAAK,CAAI,GAAQ,EAAE,EAAwB;QACvD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,EAAE,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,CAAC;SACb;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IARe,iBAAK,QAQpB,CAAA;IAED,SAAgB,WAAW,CAAI,GAAQ,EAAE,EAAwB;QAC7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACV,OAAO,CAAC,CAAC;SAChB;QACD,OAAO,CAAC,CAAC,CAAC;IACd,CAAC;IANe,uBAAW,cAM1B,CAAA;IAED,SAAgB,QAAQ,CAAI,GAAQ,EAAE,EAAwB;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACV,OAAO,IAAI,CAAC;SACnB;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IANe,oBAAQ,WAMvB,CAAA;IAED,SAAgB,iBAAiB,CAAI,GAAQ,EAAE,EAAgC;QAC3E,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;QACnB,IAAI,CAAC,GAAG,CAAC;YACL,OAAO;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC1B;QACD,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IARe,6BAAiB,oBAQhC,CAAA;IAED,SAAgB,aAAa,CAAO,GAAQ,EAAE,EAA6B;QACvE,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EACd,MAAM,GAAQ,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC;YACL,OAAO,MAAM,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACvC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAClB,CAAC;IAVe,yBAAa,gBAU5B,CAAA;IAED,SAAgB,YAAY,CAAI,GAAQ,EAAE,EAAmC;QACzE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACrB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,IAAI,CAAC,GAAG,CAAC,EAAE;YACP,GAAG;gBACC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACnB,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE;SACrB;QACD,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO;QACpB,GAAG;YACC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACnB,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE;IACvB,CAAC;IAtBe,wBAAY,eAsB3B,CAAA;IAED,SAAgB,YAAY,CAAC,KAAa,EAAE,EAAuB;QAC/D,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,IAAI,CAAC,GAAG,CAAC,EAAE;YACP,GAAG;gBACC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE;SACrB;QACD,IAAI,EAAE,IAAI,CAAC;YAAE,OAAO;QACpB,GAAG;YACC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACR,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE;IACvB,CAAC;IArBe,wBAAY,eAqB3B,CAAA;IAED,SAAgB,WAAW,CAAI,CAAM,EAAE,CAAM;QACzC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;SACnC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IATe,uBAAW,cAS1B,CAAA;IAED,SAAgB,uBAAuB,CAAC,OAAiB;QACrD,IAAI,MAAM,GAAe,EAAE,CAAC;QAE5B,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,OAAO,MAAM,CAAC;QAElB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAErB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM;gBACnB,SAAS;YAEb,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBACf,SAAS;YAEb,IAAI,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;gBAC/C,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAlB,CAAkB,CAAC,EAAE;oBAE3D,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EACpE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEzE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;iBACrD;aACJ;iBAAM;gBACH,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;aACzB;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAjCe,mCAAuB,0BAiCtC,CAAA;IAED,SAAgB,SAAS,CAAI,KAAQ,EAAE,KAAa;QAChD,IAAU,KAAK,CAAC,SAAU,CAAC,IAAI;YAC3B,OAAa,IAAI,KAAK,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;YAC1B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,GAAG,CAAC;IACf,CAAC;IAPe,qBAAS,YAOxB,CAAA;IAED,SAAgB,UAAU,CAAI,GAAQ,EAAE,IAAO;QAC3C,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;YACV,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAJe,sBAAU,aAIzB,CAAA;IAED,SAAgB,WAAW,CAAI,GAAQ,EAAE,KAAU;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;gBACV,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC5B;IACL,CAAC;IAPe,uBAAW,cAO1B,CAAA;IAED,SAAgB,SAAS,CAAI,GAAQ,EAAE,EAAmB;QACtD,IAAI,EAAE;YACF,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;;YAEjC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IALe,qBAAS,YAKxB,CAAA;IAED,SAAgB,OAAO,CAAI,GAAQ,EAAE,EAA0B;QAC3D,IAAI,MAAM,GAAU,EAAE,EAClB,CAAC,GAAyB,EAAE,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;YAC3B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EACV,CAAC,GAAG,EAAE,CAAC,CAAC,CAAW,EACnB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACb,IAAI,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClB;;gBAEG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAjBe,mBAAO,UAiBtB,CAAA;IAED,SAAS,cAAc,CAAC,CAAM,EAAE,CAAM;QAClC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IAED;QAMI,mBAAY,IAAU,EAAE,OAAgC;YACpD,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,cAAc,CAAC;YAEzC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACnE;QACL,CAAC;QAED,wBAAI,GAAJ,UAAK,IAAO;YACR,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,uBAAG,GAAH;YACI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAExC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,EAAE,CAAC;YAEd,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACjB;YACD,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAEhB,OAAO,GAAG,CAAC;QACf,CAAC;QAED,wBAAI,GAAJ;YACI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QAEO,uBAAG,GAAX,UAAY,GAAW;YACnB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAErB,OAAO,GAAG,GAAG,CAAC,EAAE;gBACZ,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5B,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;oBAAE,MAAM;gBACvC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;gBACpB,GAAG,GAAG,MAAM,CAAC;aAChB;YAED,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACrB,CAAC;QAEO,yBAAK,GAAb,UAAc,GAAW;YACrB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAC3B,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;YAClC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAErB,OAAO,GAAG,GAAG,UAAU,EAAE;gBACrB,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1B,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC;gBACrB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEtB,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;oBACvD,IAAI,GAAG,KAAK,CAAC;oBACb,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;iBACtB;gBACD,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;oBAAE,MAAM;gBAEpC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACjB,GAAG,GAAG,IAAI,CAAC;aACd;YAED,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;QACrB,CAAC;QACL,gBAAC;IAAD,CAhFA,AAgFC,IAAA;IAhFY,qBAAS,YAgFrB,CAAA;IAED,yIAAyI;IACzI,SAAgB,qBAAqB,CAAC,aAAuB,EAAE,SAAa,EAAE,eAAqB;QAApC,0BAAA,EAAA,aAAa;QAAE,gCAAA,EAAA,qBAAqB;QAC/F,IAAI,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC;YACR,OAAO,EAAE,CAAC;QAEd,IAAI,EAAE,GAAG,SAAS,EACd,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAE9B,OAAO,KAAK,GAAG,eAAe,IAAI,EAAE,GAAG,CAAC,EAAE;YACtC,EAAE,EAAE,CAAC;YACL,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;SAC7B;QAED,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,CAAW,EAAX,CAAW,CAAC,CAAC;QACnD,IAAI,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;QAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAE5B,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3D,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAC9B,QAAQ,IAAI,GAAG,CAAC;aACnB;YAED,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE/B,IAAI,CAAC,EAAE;gBACH,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;iBAC3B;gBACD,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,CAAC,EAAP,CAAO,CAAC,CAAC;gBAE5C,IAAI,MAAM,GAAG,QAAQ;oBACjB,SAAS;gBACb,IAAI,MAAM,KAAK,QAAQ,EAAE;oBACrB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAApB,CAAoB,EAAE,CAAC,CAAC,EACtD,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,CAAC,IAAK,OAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAApB,CAAoB,EAAE,CAAC,CAAC,CAAC;oBAEzD,IAAI,GAAG,GAAG,GAAG;wBACT,SAAS;oBAEb,IAAI,GAAG,KAAK,GAAG,EAAE;wBACb,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;4BAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;gCACjB,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gCAC5B,MAAM;6BACT;yBACJ;qBACJ;;wBAEG,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;iBACnC;;oBAEG,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aACnC;SAEJ;QAED,IAAI,MAAM,GAAe,EAAE,EACvB,MAAM,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAE/C,YAAY,CAAC,OAAO,CAAC,UAAC,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,MAAM,EAAE;gBACZ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClB;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAf,CAAe,CAAC,CAAC;QAEvC,OAAO,MAAM,CAAC;IAClB,CAAC;IA1Ee,iCAAqB,wBA0EpC,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,SAAgB,YAAY,CAAI,EAAO,EAAE,EAAK,EAAE,UAAkC;QAC9E,IAAI,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtB,OAAO,CAAC,IAAI,CAAC,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAChB,GAAG,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,GAAG,GAAG,CAAC,EAAE;gBACT,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACb;iBAAM,IAAI,GAAG,GAAG,CAAC,EAAE;gBAChB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACb;iBAAM;gBACH,OAAO,CAAC,CAAC;aACZ;SACJ;QACD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAhBe,wBAAY,eAgB3B,CAAA;IAED,SAAgB,wBAAwB,CAAI,EAAO,EAAE,KAAa,EAAE,EAAiB;QACjF,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM;YACjB,OAAO,CAAC,CAAC,CAAC;QAEd,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,CAAC;QAEb,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9B,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE;YACpD,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC,GAAG,CAAC,CAAC;;gBAEN,CAAC,GAAG,CAAC,CAAC;SACb;QAED,OAAO,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IArBe,oCAAwB,2BAqBvC,CAAA;IAED,SAAgB,6BAA6B,CAAC,EAAY,EAAE,KAAa;QACrE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM;YACjB,OAAO,CAAC,CAAC,CAAC;QAEd,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YACjC,OAAO,CAAC,CAAC;QAEb,IAAI,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAEzB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAEtB,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE;YAC9D,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC;gBAClB,CAAC,GAAG,MAAM,CAAC;;gBAEX,CAAC,GAAG,MAAM,CAAC;SAClB;QAED,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IArBe,yCAA6B,gCAqB5C,CAAA;IAED,SAAgB,gBAAgB,CAAI,EAAO,EAAE,UAAkC;QAC3E,OAAO,EAAE,CAAC,MAAM,CAAC,UAAC,EAAE,EAAE,KAAK;YACvB,OAAO,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,KAAK,CAAC;QACtD,CAAC,CAAC,CAAC;IACP,CAAC;IAJe,4BAAgB,mBAI/B,CAAA;IAED,SAAgB,QAAQ,CAAI,EAAO,EAAE,UAAkC;QACnE,OAAO,gBAAgB,CAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAFe,oBAAQ,WAEvB,CAAA;AACL,CAAC,EA3hBM,WAAW,KAAX,WAAW,QA2hBjB;AAED,CAAC;IACG,IAAG,MAAM,CAAC,kBAAkB;QACxB,OAAO;IACX,IAAI;QACA,IAAI,UAAU,GAAG,CAAC,UAAC,aAAsB;YACrC,IAAI,QAAQ,GAAG,KAAK,EAChB,CAAC,GAAG,CAAC,EACL,QAAQ,GAAG,EAAE,EACb,CAAC,GAAG;gBACA,WAAW,EAAE,UAAC,GAAW;oBACrB,IAAI,CAAC,QAAQ,IAAI,GAAG,EAAE;wBAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnB,IAAI,CAAC,EAAE;4BACH,YAAY,CAAC,CAAC,CAAC,CAAC;4BAChB,CAAC,GAAG,CAAC,CAAC;yBACT;wBACD,CAAC,GAAG,UAAU,CAAC;4BACX,CAAC,GAAG,CAAC,CAAC;4BACN,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;gCAC7B,OAAO;4BACX,QAAQ,GAAG,IAAI,CAAC;4BAChB,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;4BACxE,QAAQ,GAAG,EAAE,CAAC;4BACd,CAAC,CAAC,IAAI,CAAC;gCACH,GAAG,EAAE,8BAA8B;gCACnC,IAAI,EAAE,MAAM;gCACZ,mBAAmB;gCACnB,OAAO,EAAE,QAAQ,CAAC,IAAI;gCACtB,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE;gCACtD,kCAAkC;gCAClC,OAAO,EAAE,UAAC,IAAI,IAAO,CAAC;gCACtB,KAAK,EAAE,UAAC,KAAK,EAAE,UAAU,EAAE,WAAW,IAAO,CAAC;6BACjD,CAAC,CAAC;4BACH,qCAAqC;4BACrC,0NAA0N;wBAC9N,CAAC,EAAE,KAAK,CAAQ,CAAC;qBACpB;gBACL,CAAC;aACJ,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,UAAC,CAAC;gBACjC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU;oBACxC,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;oBAE5C,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,CAAC,CAAC,OAAO,CAAC,GAAG,UAAU,OAAa;gBAAE,wBAAwB;qBAAxB,UAAwB,EAAxB,qBAAwB,EAAxB,IAAwB;oBAAxB,uCAAwB;;gBAC1D,CAAC,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAC5F,OAAO,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YAC/D,CAAC,CAAC;YAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAC,KAAiB;gBAC/C,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpM,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,CAAC;QACb,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QAEpC,IAAI,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE/B,0BAA0B;QAC1B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE;YACtE,0BAA0B;YACpB,MAAO,CAAC,OAAO,GAAG,UAAU,CAAC;SACtC;KACJ;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAClB;AACL,CAAC,CAAC,EAAE,CAAC;AAEL,UAAU;AACV,2DAA2D;AAC3D,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE;QAC3C,KAAK,EAAE,UAAU,SAAS;YACtB,sCAAsC;YACtC,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;aACxD;YAED,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAErB,gDAAgD;YAChD,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YAEzB,qEAAqE;YACrE,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;gBACjC,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;aACvD;YAED,yEAAyE;YACzE,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE3B,iBAAiB;YACjB,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,2BAA2B;YAC3B,OAAO,CAAC,GAAG,GAAG,EAAE;gBACZ,8BAA8B;gBAC9B,iCAAiC;gBACjC,0EAA0E;gBAC1E,2CAA2C;gBAC3C,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oBACvC,OAAO,MAAM,CAAC;iBACjB;gBACD,sBAAsB;gBACtB,CAAC,EAAE,CAAC;aACP;YAED,uBAAuB;YACvB,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;KACjB,CAAC,CAAC;CACN;AAED,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE;IAC5B,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE;QAChD,KAAK,EAAE,UAAU,SAAS;YACtB,sCAAsC;YACtC,IAAI,IAAI,IAAI,IAAI,EAAE;gBACd,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;aACxD;YAED,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YAErB,gDAAgD;YAChD,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;YAEzB,qEAAqE;YACrE,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE;gBACjC,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;aACvD;YAED,yEAAyE;YACzE,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAE3B,iBAAiB;YACjB,IAAI,CAAC,GAAG,CAAC,CAAC;YAEV,2BAA2B;YAC3B,OAAO,CAAC,GAAG,GAAG,EAAE;gBACZ,8BAA8B;gBAC9B,iCAAiC;gBACjC,0EAA0E;gBAC1E,sCAAsC;gBACtC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;oBACvC,OAAO,CAAC,CAAC;iBACZ;gBACD,sBAAsB;gBACtB,CAAC,EAAE,CAAC;aACP;YAED,gBAAgB;YAChB,OAAO,CAAC,CAAC,CAAC;QACd,CAAC;QACD,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;KACjB,CAAC,CAAC;CACN;AAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE;IAC9B,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,UAAU,YAAY,EAAE,QAAQ;QAC1D,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,QAAQ,CAAC;IAC7D,CAAC,CAAC;CACL;AAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC5B,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAS,MAAM,EAAE,QAAQ;QACjD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE;YAClD,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;SAC1B;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,MAAM,CAAC;IACzE,CAAC,CAAC;CACL;AAED,0CAA0C;AAC1C,CAAC;IACG,IAAI;QACA,IAAU,MAAO,CAAC,SAAS,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC1E;IAAC,OAAO,CAAC,EAAE;QACR,SAAS,iBAAiB;YACtB,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAU,EAAE,IAAI,CAAC;YAEnD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,MAAM,IAAI,SAAS,CAAC,qEAAmE,IAAI,CAAC,MAAM,cAAW,CAAC,CAAC;aAClH;YAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBAEpB,IAAI,CAAC,CAAC,IAAI,YAAY,iBAAiB,CAAC,EAAE;oBACtC,MAAM,IAAI,SAAS,CAAC,iFAAiF,CAAC,CAAC;iBAC1G;gBAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE;oBACvC,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;iBAC5H;aACJ;YAED,IAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EACjB,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAChB,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAC7B,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAEnD,IAAI,IAAI;gBACJ,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,SAAS,CAAC;QACrB,CAAC;QAAA,CAAC;QAEI,MAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC;KAC/C;AACL,CAAC,CAAC,EAAE,CAAC;;;;;;;;;;;;;;;ACz/CL,IAAO,aAAa,CAglBnB;AAhlBD,WAAO,aAAa;IAChB,IAAO,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAEzB,6BAAe,GAAY,CAAC;QACnC,IAAI;YACA,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC;SAC5E;QAAC,OAAO,CAAC,EAAE;SACX;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC;IAWL;QAUI,eAAY,SAAsE,EAC9E,WAAwE,EAAE,SAAqB,EAAE,QAAuB;YAA9C,0BAAA,EAAA,aAAqB;YAAE,yBAAA,EAAA,aAAuB;YACxH,0BAA0B;YAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC;YACnC,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC;QAED,qBAAK,GAAL,UAAM,GAA6B,EAAE,EAAY;YAC7C,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,aAAW,GAAG,EAAE,CAAC,WAAW,CAAC;gBACjC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,aAAW,CAAC;gBAC7C,IAAI,GAAG,CAAC,WAAW;oBACf,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,aAAW,EAAf,CAAe,CAAC,CAAC,CAAC;gBAC7D,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzD,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;gBACtB,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;aAC1B;YACD,IAAI,IAAI,CAAC,SAAS;gBACd,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QAED,8BAAc,GAAd,UAAe,GAA6B,EAAE,WAAmB;YAC7D,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;gBAC7C,IAAI,GAAG,CAAC,WAAW;oBACf,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,WAAW,EAAf,CAAe,CAAC,CAAC,CAAC;gBAC7D,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAC5D;YACD,IAAI,IAAI,CAAC,SAAS;gBACd,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,CAAC;QAEM,oBAAc,GAArB,UAAsB,KAAiE;YAEnF,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO,IAAI,CAAC;aACf;iBAAM,IAAI,KAAK,YAAY,UAAU,CAAC,KAAK,EAAE;gBAC1C,OAAO,KAAK,CAAC,YAAY,EAAE,CAAC;aAC/B;iBAAM;gBACH,OAAO,KAAK,CAAC;aAChB;QACL,CAAC;QAEM,wBAAkB,GAAzB,UAA0B,KAA4C,EAAE,KAAkB,EAAE,IAAiB,EAAE,MAAmB,EAAE,SAAqB;YAA/H,sBAAA,EAAA,iBAA4C;YAAE,sBAAA,EAAA,UAAkB;YAAE,qBAAA,EAAA,SAAiB;YAAE,uBAAA,EAAA,WAAmB;YAAE,0BAAA,EAAA,aAAqB;YAErJ,IAAI,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAsB,CAAC;YAE9D,IAAI,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC;YAEpB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;YACf,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;YAEhB,IAAI,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAE7B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,EAChC,IAAI,GAAG,GAAG,GAAG,GAAG,EAChB,GAAG,GAAG,EAAE,GAAG,IAAI,EACf,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;YAEpB,IAAI,KAAK,YAAY,UAAU,CAAC,KAAK;gBACjC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;;gBAEvC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;YAE5B,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtB,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;YAClC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAExB,GAAG,CAAC,SAAS,EAAE,CAAC;YAEhB,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,MAAM,EAAE;gBACrC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACtB;YAED,GAAG,CAAC,MAAM,EAAE,CAAC;YAEb,OAAO,CAAC,CAAC;QACb,CAAC;QACL,YAAC;IAAD,CA3FA,AA2FC,IAAA;IA3FY,mBAAK,QA2FjB,CAAA;IAkBD;QAAA;YAEI,UAAK,GAAW,IAAI,CAAC;YACb,cAAS,GAAa,EAAE,CAAC;YACjC,WAAM,GAAW,IAAI,CAAC;YACtB,YAAO,GAAG,IAAI,CAAC;YACP,YAAO,GAAwB,IAAI,CAAC;YAC5C,cAAS,GAAgC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QA2FlF,CAAC;QAzFG,sBAAI,6BAAI;iBAAR;gBACI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAClD,CAAC;;;WAAA;QAED,sBAAI,+BAAM;iBAAV;gBACI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;;;WAAA;QAED,sBAAI,+BAAM;iBAAV;gBACI,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;gBACvB,IAAI,GAAG,IAAI,IAAI;oBACX,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChD,OAAO,GAAG,CAAC;YACf,CAAC;iBAED,UAAW,CAAsB;gBAC7B,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACrB,CAAC;;;WAJA;QAMD,4BAAM,GAAN;YACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,qCAAe,GAAf;YACI,kBAAkB;YAClB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,sBAAI,iCAAQ;iBAAZ;gBACI,OAAO,IAAI,CAAC,SAAS,CAAC;YAC1B,CAAC;iBAED,UAAa,CAAW;gBACpB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;oBACb,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,CAAC;;;WANA;QAQO,+BAAS,GAAjB,UAAkB,EAAY;YAC1B,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QACpG,CAAC;QAED,oCAAc,GAAd,UAAe,GAA6B,EAAE,EAAY;YACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,0BAAI,GAAJ,UAAK,GAA6B,EAAE,EAAY;YAE5C,GAAG,CAAC,IAAI,EAAE,CAAC;YAEX,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAEpC,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAEjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAnB,CAAmB,CAAC,CAAC;YAEpD,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;QAED,yBAAG,GAAH,UAAI,KAAa;YACb,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,mCAAa,GAAb;YACI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM;gBACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAA,KAAK;oBACvD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBACxB,CAAC,CAAC,CAAC;QACX,CAAC;QAED,iCAAW,GAAX,UAAY,KAAa;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,KAAK,KAAK,EAAX,CAAW,CAAC,CAAC;QAC3D,CAAC;QAED,sCAAgB,GAAhB;YACI,IAAI,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,8BAAQ,GAAR,UAAS,EAA8B;YACnC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBACT,OAAO;YAEX,IAAI,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,KAAK,IAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QACL,kBAAC;IAAD,CAlGA,AAkGC,IAAA;IAlGY,yBAAW,cAkGvB,CAAA;IAED;QAAkC,gCAAW;QAMzC,sBAAY,GAAe,EAAE,KAAc,EAAE,MAAsB;YAAtB,uBAAA,EAAA,aAAsB;YAAnE,YACI,iBAAO,SAMV;YAXD,YAAM,GAAY,IAAI,CAAC;YACvB,YAAM,GAAc,EAAE,CAAC;YAKnB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM;gBACjB,KAAI,CAAC,MAAM,GAAG,GAAG,CAAC;YACtB,IAAI,KAAK;gBACL,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;QAC3B,CAAC;QAED,qCAAc,GAAd,UAAe,OAAiC,EAAE,EAAY;YAC1D,iBAAM,cAAc,YAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAElC,IAAI,GAAsC,CAAC;YAE3C,OAAO,CAAC,SAAS,EAAE,CAAC;YAEpB,IAAI,cAAA,eAAe,EAAE;gBACjB,IAAI,IAAI,CAAC,IAAI,EAAE;oBACX,IAAI,IAAI,CAAC,IAAI;wBACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAI,IAAI,CAAC,MAAM;wBACX,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC9B,OAAO;iBACV;;oBACG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;aACtC;iBAAM;gBACH,GAAG,GAAG,OAAO,CAAC;aACjB;YAED,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;YACtB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBAEvB,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEhB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACf,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxB;gBAED,IAAI,IAAI,CAAC,MAAM;oBACX,GAAG,CAAC,SAAS,EAAE,CAAC;aACvB;YAED,IAAI,IAAI,CAAC,IAAI;gBACT,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM;gBACX,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QAED,sCAAe,GAAf;YACI,OAAO,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;QAED,6BAAM,GAAN;YACI,iBAAM,MAAM,WAAE,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACrB,CAAC;QACL,mBAAC;IAAD,CAjEA,AAiEC,CAjEiC,WAAW,GAiE5C;IAjEY,0BAAY,eAiExB,CAAA;IAED;QAA+B,6BAAY;QACvC,iCAAiC;QACjC,+BAA+B;QAC/B,oBAAoB;QAEpB,mBAAY,KAAc,EAAE,GAAY,EAAE,KAAc,EAAE,KAAc;YAAxE,YACI,kBAAM,IAAI,EAAE,KAAK,CAAC,SASrB;YARG,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,IAAI,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;gBACjF,KAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,KAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;aAClG;iBAAM;gBACH,KAAI,CAAC,MAAM,GAAG,KAAK,CAAC;gBACpB,KAAI,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aAC9B;;QACL,CAAC;QACL,gBAAC;IAAD,CAhBA,AAgBC,CAhB8B,YAAY,GAgB1C;IAhBY,uBAAS,YAgBrB,CAAA;IAED;QAAiC,+BAAW;QAIxC,qBAAY,MAAe,EAAE,MAAc,EAAE,KAAc;YAA3D,YACI,iBAAO,SAKV;YATD,YAAM,GAAY,IAAI,OAAO,EAAE,CAAC;YAChC,YAAM,GAAW,CAAC,CAAC;YAIf,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,KAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC;YACtB,IAAI,KAAK;gBACL,KAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;QAC3B,CAAC;QAED,oCAAc,GAAd,UAAe,OAAiC,EAAE,EAAY;YAC1D,iBAAM,cAAc,YAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAElC,OAAO,CAAC,SAAS,EAAE,CAAC;YAEpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;YAEvE,IAAI,IAAI,CAAC,IAAI;gBACT,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,MAAM;gBACX,OAAO,CAAC,MAAM,EAAE,CAAC;QACzB,CAAC;QAED,qCAAe,GAAf;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,OAAO,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,4BAAM,GAAN;YACI,iBAAM,MAAM,WAAE,CAAC;QACnB,CAAC;QACL,kBAAC;IAAD,CAjCA,AAiCC,CAjCgC,WAAW,GAiC3C;IAjCY,yBAAW,cAiCvB,CAAA;IAED;QAKI,kBAAY,WAAmB,EAAE,YAAoB,EAAE,MAA4B;YAC/E,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7G,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACrD,CAAC;QAED,mCAAgB,GAAhB,UAAiB,WAAmB,EAAE,YAAoB;YACtD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACrC,CAAC;QAED,sBAAG,GAAH,UAAI,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;YACnD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACvF,CAAC;QAED,sBAAI,uBAAC;iBAAL;gBACI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,CAAC;iBAED,UAAM,CAAS;gBACX,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC;;;WAJA;QAMD,sBAAI,uBAAC;iBAAL;gBACI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAChC,CAAC;iBAED,UAAM,CAAS;gBACX,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,CAAC;;;WAJA;QAMD,sBAAI,2BAAK;iBAAT;gBACI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,CAAC;iBAED,UAAU,CAAS;gBACf,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,CAAC;;;WAJA;QAMD,sBAAI,4BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/B,CAAC;iBAED,UAAW,CAAS;gBAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5C,CAAC;;;WAJA;QAMD,4BAAS,GAAT,UAAU,CAAS,EAAE,CAAS;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,yBAAM,GAAN,UAAO,CAAU;YACb,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YACrB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAED,wBAAK,GAAL,UAAM,EAAU,EAAE,EAAU;YACxB,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAChB,CAAC,GAAG,EAAE,CAAC,MAAM,EACb,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAE/C,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,uBAAI,GAAJ,UAAK,CAAS;YACV,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAChB,CAAC,GAAG,EAAE,CAAC,MAAM,EACb,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,sBAAI,iCAAW;iBAAf;gBACI,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,YAAY,GAAG,IAAI,CAAC,YAAY,EAChC,EAAE,GAAG,IAAI,CAAC,MAAM,EAChB,KAAK,GAAG,EAAE,CAAC,KAAK,EAChB,CAAC,GAAG,KAAK,CAAC,CAAC,EACX,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;gBAEhB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;;;WAAA;QAED,+BAAY,GAAZ,UAAa,GAA6B;YAEtC,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,YAAY,GAAG,IAAI,CAAC,YAAY,EAChC,EAAE,GAAG,IAAI,CAAC,MAAM,EAChB,GAAG,GAAG,EAAE,CAAC,GAAG,EACZ,KAAK,GAAG,EAAE,CAAC,KAAK,EAChB,CAAC,GAAG,KAAK,CAAC,CAAC,EACX,CAAC,GAAG,KAAK,CAAC,CAAC,EACX,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,EACnD,IAAI,GAAG,CAAC,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,EACtC,IAAI,GAAG,CAAC,YAAY,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAE5C,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;YAE/C,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAExB,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QAEL,eAAC;IAAD,CA5GA,AA4GC,IAAA;IA5GY,sBAAQ,WA4GpB,CAAA;IAED;QAAgC,8BAAW;QAEvC,oBAAY,MAAe;YAA3B,YACI,iBAAO,SAEV;YAED,aAAO,GAAY,IAAI,CAAC;YAHpB,KAAI,CAAC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC;;QAClC,CAAC;QAMD,sBAAI,8BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC;YACxB,CAAC;iBAED,UAAW,KAAa;gBACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,KAAK;oBACL,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YAC3B,CAAC;;;WANA;QAQD,qCAAgB,GAAhB;YACI,IAAI,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACvB,CAAC;QACL,iBAAC;IAAD,CA1BA,AA0BC,CA1B+B,WAAW,GA0B1C;IA1BY,wBAAU,aA0BtB,CAAA;IAED;QAeI,gBAAY,MAAyB;YACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC;QAjBM,kBAAW,GAAlB,UAAmB,WAAmB,EAAE,YAAoB,EAAE,SAAkB,EAAE,EAAW;YAEzF,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAsB,CAAC;YAEnE,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC7D,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;YAC3B,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;YAC7B,IAAI,SAAS;gBACT,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;YAEjC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAUD,sBAAI,0BAAM;iBAAV;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC;YACxB,CAAC;iBAED,UAAW,KAAwB;gBAC/B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,IAAI,KAAK,EAAE;oBACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACtC,4CAA4C;iBAC/C;YACL,CAAC;;;WATA;QAeD,8BAAa,GAAb;YACI,IAAI,CAAC,IAAI,CAAC,MAAM;gBACZ,OAAO;YACX,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;QAED,wBAAO,GAAP,UAAQ,CAAS,EAAE,CAAS;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC;QAED,qBAAI,GAAJ,UAAK,KAAkB;YAEnB,IAAI,CAAC,KAAK;gBACN,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YAEvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;gBAC1D,OAAO;YAEX,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,CAAC,GAAG,MAAM,CAAC,KAAK,EAChB,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,GAAG,GAAG,IAAI,CAAC,OAAO,EAClB,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEvB,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEnC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1B,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAErB,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,CAAC;QAED,6BAAY,GAAZ;YACI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,CAAC,GAAG,MAAM,CAAC,KAAK,EAChB,CAAC,GAAG,MAAM,CAAC,MAAM,EACjB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,4BAAW,GAAX,UAAY,OAAkB;YAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;YACvB,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,CAAC;QAED,0BAAS,GAAT,UAAU,IAAkB;YAAlB,qBAAA,EAAA,kBAAkB;YACxB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,4BAAW,GAAX;YACI,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAqB,CAAC;YAE5D,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAE3B,OAAO,GAAG,CAAC;QACf,CAAC;QAED,yBAAQ,GAAR,UAAyB,MAAS;YAC9B,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACL,aAAC;IAAD,CAxGA,AAwGC,IAAA;IAxGY,oBAAM,SAwGlB,CAAA;AACL,CAAC,EAhlBM,aAAa,KAAb,aAAa,QAglBnB;;;;;;;;;;;;;;;ACrlBD,IAAO,GAAG,CAmwGT;AAnwGD,WAAO,GAAG;IAAC,IAAA,OAAO,CAmwGjB;IAnwGU,WAAA,OAAO;QAAC,IAAA,KAAK,CAmwGvB;QAnwGkB,WAAA,KAAK;YAEpB,IAAI,eAAe,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,eAAe,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1C,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzC,IAAI,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,UAAU,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,OAAO,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAsClC,SAAgB,oBAAoB,CAAC,GAAQ;gBACzC,IAAI,SAAS,GAAG,IAAI,QAAA,aAAa,EAAE,CAAC;gBACpC,IAAI,MAAM,GAAG,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBACjD,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,MAAM,CAAC;YAClB,CAAC;YALe,0BAAoB,uBAKnC,CAAA;YAEU,gCAA0B,GAAG,CAAC;gBACrC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAClC,GAAG,GAAG,QAAQ,CAAC;gBACnB,OAAO,UAAC,KAAkB,EAAE,GAAmB;oBAC3C,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;oBACvB,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE;wBACd,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC/B,OAAO;qBACV;oBAED,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAClD,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEM,yBAAmB,GAAG,CAAC;gBAC9B,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EACvB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE7B,OAAO,UAAC,SAAqB,EAAE,MAAgC;oBAC3D,IAAI,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;oBAC1D,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBACxB,IAAI,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAChD,QAAQ,GAAqB,EAAE,CAAC;oBACpC,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;wBACrC,IAAI,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,EAC/B,MAAM,GAAe,YAAY,CAAC,MAAM,EACxC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;wBACnF,oBAAoB;wBACpB,mDAAmD;wBACnD,IAAI,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;4BAC7B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBAC7B;oBACD,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAC,IAAI;wBACxB,IAAI,IAAI,YAAY,EAAE,CAAC,cAAc,CAAC,oBAAoB,IAAI,IAAI,CAAC,YAAY,CAAC,mBAAmB;4BAC/F,OAAO,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;wBAClD,OAAO,IAAI,CAAC;oBAChB,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,qBAAqB,CAAC,GAAe,EAAE,IAAgB;gBACnE,IAAI,cAAc,GAAG,KAAK,CAAC;gBAE3B,MAAA,qBAAqB,CAAC,IAAI,EAAE,UAAC,GAAG,EAAE,GAAG,EAAE,GAAG;oBACtC,IAAI,MAAA,yBAAyB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;wBAC/C,cAAc,GAAG,IAAI,CAAC;wBACtB,OAAO,KAAK,CAAC;qBAChB;oBACD,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,OAAO,cAAc,CAAC;YAC1B,CAAC;YAZe,2BAAqB,wBAYpC,CAAA;YAED;gBAGI,oBAAY,MAAwB,EAAE,OAAyB,EAAE,QAA0B,EAAE,SAA2B;oBA2XxH,gBAAW,GAAe,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC3C,mBAAc,GAAiB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC1C,QAAG,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzC,QAAG,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzC,QAAG,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzC,QAAG,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzC,QAAG,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzC,QAAG,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzC,SAAI,GAAe,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACpC,YAAO,GAAoB,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAnYxM,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;oBAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;oBAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,EAAE,CAAC;gBACrC,CAAC;gBAED,yBAAI,GAAJ,UAAK,KAAiB;oBAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAE,EAAT,CAAS,CAAC,CAAC;oBAC/C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAE,EAAT,CAAS,CAAC,CAAC;oBACjD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAE,EAAT,CAAS,CAAC,CAAC;oBACnD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAE,EAAT,CAAS,CAAC,CAAC;oBACrD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;oBACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;oBAE/C,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,8BAAS,GAAT,UAAU,SAA0B,EAAE,MAA0D,EAAE,MAAmB,EAAE,UAA4B;oBAC/I,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;wBACrB,OAAO,IAAI,CAAC;oBAEhB,IAAI,MAAM,EAAE;wBACR,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;wBAChD,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE;4BAC9B,IAAI,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BACpD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACxE,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;yBACnF;qBACJ;oBAED,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,EAClB,GAAG,GAAG,MAAM,CAAC,GAAG,EAChB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,UAAU,GAAoB,EAAE,EAChC,OAAO,GAAoB,EAAE,EAC7B,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACrD,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAExD,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBACrC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC3C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;oBAEjD,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC3D,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC3C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;oBAEjD,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBACrC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC3C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;oBAEjD,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAC3D,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC3C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;oBAEjD,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAC1C,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EACnD,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAExD,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAC1C,OAAO,IAAI,CAAC;oBAEhB,GAAG,CAAC,SAAS,EAAE,CAAC;oBAChB,GAAG,CAAC,SAAS,EAAE,CAAC;oBAEhB,IAAU,MAAO,CAAC,oBAAoB;wBAClC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;yBAC7D;wBACD,IAAI,CAAC,OAAO,GAAG;4BACX,MAAM;4BACN,MAAM;4BACN,qCAAqC;4BACrC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;4BACtD,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;4BACtD,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;4BACtD,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE;yBACzD,CAAC;wBAEF,iHAAiH;qBACpH;oBAGD,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG;wBACvB,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC1D,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACzD,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC1D,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACzD,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC1D,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBACzD,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC1D,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;qBAC5D,CAAC;oBAEF,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBAE9E,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACxC,CAAC;gBAED,iCAAY,GAAZ,UAAa,MAAgC;oBACzC,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,EAClB,OAAO,GAAS,EAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAyC,CAAC;oBAErF,eAAe;oBACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACtD,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;qBACrF;oBAED,OAAO,OAAO,CAAC;gBACnB,CAAC;gBAEO,qCAAgB,GAAxB,UAAyB,IAAkC,EAAE,OAA6C;oBACtG,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE;wBAC7C,iBAAiB;wBACjB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAEvC,iBAAiB;wBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BACtD,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;yBACrF;qBACJ;oBAED,OAAO,OAAO,CAAC;gBACnB,CAAC;gBAED,gCAAW,GAAX,UAAY,IAAsB;oBAC9B,IAAI,CAAC,IAAI;wBACL,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;oBACpH,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;oBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC5B,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;4BAC7C,IAAI,OAAO,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAxB,CAAwB,CAAC;gCAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACvB;qBACJ;oBACD,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,OAAO,CAAC,KAAK,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,EAA1B,CAA0B,CAAC,EAA/C,CAA+C,CAAC,CAAC;oBAClG,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,QAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAhC,CAAgC,CAAC,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,KAAK,CAAC,KAAK,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,EAA1B,CAA0B,CAAC,EAA7C,CAA6C,CAAC,EAAhH,CAAgH,CAAC,CAAoB,CAAC;oBAE7L,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,kCAAa,GAAb,UAAc,CAAgB;oBAC1B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9C,CAAC;gBAED,uDAAuD;gBACvD,oDAA+B,GAA/B,UAAgC,IAAkC;oBAC9D,OAAO,IAAI,CAAC,qBAAqB,CAAC,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjF,CAAC;gBAED,+CAA0B,GAA1B,UAA2B,KAAwB;oBAAnD,iBAIC;oBAHG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;wBACvB,OAAO,IAAI,CAAC;oBAChB,OAAO,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAjC,CAAiC,CAAC,CAAC;gBAC9D,CAAC;gBAED,8CAAyB,GAAzB,UAA0B,CAAkB;oBACxC,+BAA+B;oBAC/B,mCAAmC;oBAEnC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;wBAClB,OAAO,IAAI,CAAC;oBAEhB,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;oBAEzB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC;wBAC1B,OAAO,IAAI,CAAC;oBAEhB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EACxC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAClI,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EACpC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,OAAO,CAAC,KAAK,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,EAA1B,CAA0B,CAAC,EAA/C,CAA+C,CAAC,CAAC;oBAEtF,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;wBACxB,OAAO,IAAI,CAAC;oBAEhB,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,KAAK,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAhC,CAAgC,CAAC,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,KAAK,CAAC,KAAK,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,EAA1B,CAA0B,CAAC,EAA7C,CAA6C,CAAC,EAA7G,CAA6G,CAAC,CAAoB,CAAC;oBAErL,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;wBACxB,OAAO,IAAI,CAAC;gBACpB,CAAC;gBAED,uDAAuD;gBACvD,8CAAyB,GAAzB,UAA0B,IAAgB;oBACtC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAA,4BAA4B;oBAC/G,kBAAkB;oBAClB,gDAAgD;oBAChD,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC;gBAED,uDAAuD;gBACvD,0CAAqB,GAArB,UAAsB,IAAgB;oBAClC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC7E,IAAI,IAAI,CAAC,MAAM;wBACX,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBAC9C,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;gBAC1C,CAAC;gBAED,uDAAuD;gBACvD,6CAAwB,GAAxB,UAAyB,GAAe;oBACpC,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzE,CAAC;gBAED,uDAAuD;gBACvD,wDAAmC,GAAnC,UAAoC,GAAyB,EAAE,CAAiB;oBAC5E,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,EACtB,GAAG,GAAoB,EAAE,EACzB,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAE7C,IAAI,CAAC,CAAC;wBACF,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAE7C,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAE1B,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBAEnD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACf;oBAED,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;wBAC5B,OAAO,IAAI,CAAC;oBAEhB,IAAI,GAAG,CAAC,KAAK,EAAE;wBACX,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;wBAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;4BAElD,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAChG,OAAO,KAAK,CAAC;yBAEpB;qBACJ;yBAAM;wBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;4BAE7C,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gCACrE,OAAO,KAAK,CAAC;yBACpB;qBACJ;oBAED,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,kDAA6B,GAA7B,UAA8B,GAAoB;oBAC9C,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;oBAE3B,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;wBAC5B,OAAO,IAAI,CAAC;oBAEhB,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EACX,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EACX,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAEhB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;oBAExF,IAAI,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;oBAC7B,IAAI,SAAS,IAAI,CAAC;wBACd,OAAO,IAAI,CAAC;oBAEhB,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBAE3C,IAAI,QAAQ,GAAG,CAAC,CAAC;wBACb,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;wBACpC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;qBACvC,CAAC;oBAEF,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;wBAC7B,OAAO,IAAI,CAAC;oBAEhB,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAChC,GAAG,GAAG,UAAU,CAAC,GAAG,EACpB,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,QAAQ,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAhC,CAAgC,CAAC,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,KAAK,CAAC,KAAK,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,EAA1B,CAA0B,CAAC,EAA7C,CAA6C,CAAC,EAAhH,CAAgH,CAAC,CAAoB,CAAC;oBAE5L,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC1C,CAAC;gBAED,uDAAuD;gBACvD,yCAAoB,GAApB,UAAqB,GAAe;oBAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrE,CAAC;gBAED,uDAAuD;gBACvD,0CAAqB,GAArB,UAAsB,MAAuB;oBACzC,+BAA+B;oBAC/B,mCAAmC;oBAEnC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnI,CAAC;gBAED,uDAAuD;gBACvD,sCAAiB,GAAjB,UAAkB,MAAuB;oBACrC,+BAA+B;oBAC/B,mCAAmC;oBAEnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7H,CAAC;gBAEO,8BAAS,GAAjB,UAAkB,MAAuB,EAAE,IAAqB;oBAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACzC,IAAI,MAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;4BAC/C,OAAO,IAAI,CAAC;qBACnB;oBAED,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAEO,4BAAO,GAAf,UAAgB,MAAuB,EAAE,IAAqB;oBAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACzC,IAAI,MAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;4BAC/C,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;qBACtB;oBAED,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,qCAAgB,GAAhB;oBACI,OAAO,IAAI,CAAC,IAAI,CAAC;gBACrB,CAAC;gBAED,2CAAsB,GAAtB;oBACI,OAAO,IAAI,CAAC,OAAO,CAAC;gBACxB,CAAC;gBAED,wCAAmB,GAAnB;oBACI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,GAAG,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EACzC,CAAC,GAAG,CAAC,CAAC;oBACV,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;wBACZ,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACf,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBACf,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC,CAAC,CAAC;oBAEH,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBACrC,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBAChE,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC;wBACnD,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;wBACP,CAAC,EAAE,CAAC,EAAE,CAAC;qBACV,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAER,OAAO,GAAG,CAAC;gBACf,CAAC;gBAED,iCAAY,GAAZ,UAAa,CAAgB;oBACzB,IAAI,CAAC,CAAC;wBACF,OAAO,IAAI,CAAC;oBAEhB,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;oBAEhD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEjE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACnF,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAvXc,cAAG,GAAG,QAAQ,CAAC;gBAuYlC,iBAAC;aAxYD,AAwYC,IAAA;YAxYY,gBAAU,aAwYtB,CAAA;YAED,SAAgB,4BAA4B,CAAC,UAAsB,EAAE,MAAgC;gBACjG,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM;oBACtE,OAAO,EAAE,CAAC;gBAEd,8GAA8G;gBAC9G,sCAAsC;gBAEtC,IAAI,aAAa,GAAG,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAC/C,QAAQ,GAAqB,EAAE,CAAC;gBAEpC,IAAI,aAAa,CAAC,MAAM,EAAE;oBACtB,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;wBACrC,IAAI,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,EAC/B,MAAM,GAAe,YAAY,CAAC,MAAM,CAAC;wBAE7C,IAAI,CAAC,UAAU,CAAC,yBAAyB,CAAC,MAAM,CAAC;4BAC7C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBAC7B;iBACJ;gBAED,OAAO;gBACP,6DAA6D;gBAC7D,+DAA+D;gBAC/D,+FAA+F;gBAE/F,iEAAiE;gBACjE,uEAAuE;gBAEvE,sBAAsB;gBACtB,gCAAgC;gBAChC,sEAAsE;gBACtE,qEAAqE;gBACrE,sDAAsD;gBAEtD,oDAAoD;gBAEpD,0FAA0F;gBAE1F,sEAAsE;gBACtE,0BAA0B;gBAC1B,uDAAuD;gBACvD,8BAA8B;gBAC9B,mCAAmC;gBACnC,4BAA4B;gBAE5B,uBAAuB;gBACvB,SAAS;gBAET,GAAG;gBAEH,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAC,IAAI;oBACxB,+DAA+D;oBAC/D,0FAA0F;oBAC1F,oDAAoD;oBACpD,8QAA8Q;oBAC9Q,0BAA0B;oBAC1B,uBAAuB;oBACvB,OAAO;oBACP,GAAG;oBACH,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC,CAAC;YACP,CAAC;YA7De,kCAA4B,+BA6D3C,CAAA;YAED,SAAS,qBAAqB,CAAC,IAAkC,EAAE,MAAuB;gBACtF,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,KAAK,EAClB,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,GAAG,GAAG,IAAI,CAAC,GAAG,EACd,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBAEvB,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAChC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC/B,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBACpC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBACjC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAEhC,OAAO,MAAM,CAAC;YAClB,CAAC;YAED,SAAS,cAAc,CAAC,GAAe,EAAE,MAAuB;gBAC5D,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,EACb,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;gBAElB,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEnC,OAAO,MAAM,CAAC;YAClB,CAAC;YAEU,0BAAoB,GAAG,CAAC;gBAC/B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,OAAO,UAAC,SAAwB,EAAE,KAAoB,EAAE,KAAoB;oBACxE,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EACxB,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAE7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7I,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,mBAAmB,CAAC,MAAuB,EAAE,IAAmB,EAAE,MAAgB;gBAC9F,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,EACtB,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,EACvB,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAC5B,IAAI,CAAC,GAAG,GAAG,EAAE;wBAAE,GAAG,GAAG,CAAC,CAAC;qBAAE;oBACzB,IAAI,CAAC,GAAG,GAAG,EAAE;wBAAE,GAAG,GAAG,CAAC,CAAC;qBAAE;iBAC5B;gBACD,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACrC,CAAC;YAVe,yBAAmB,sBAUlC,CAAA;YAEU,uBAAiB,GAAG,CAAC;gBAC5B,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACf,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACf,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC5B,OAAO,UAAC,OAAwB,EAAE,OAAwB,EAAE,IAAmB,EAAE,SAAyB,EAAE,SAAyB;oBACjI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;wBACpB,OAAO,KAAK,CAAC;oBACjB,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;oBAC3C,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;oBAE3C,sEAAsE;oBACtE,IAAI,SAAS,IAAI,SAAS,EAAE;wBACxB,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAEjE,MAAM,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC;wBAC7B,MAAM,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC;qBAChC;oBAED,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC1D,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,qBAAqB,CAAC,OAAwB,EAAE,OAAwB,EAAE,KAAsB,EAAE,KAAuB,EAAE,SAA2B,EAAE,SAAyB,EAAE,SAAyB;gBAExN,+BAA+B;gBAC/B,mCAAmC;gBAEnC,IAAI,CAAS,EAAE,CAAS,CAAC;gBAEzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACtC,IAAI,MAAA,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC;wBACnE,OAAO,IAAI,CAAC;iBACnB;gBAED,IAAI,KAAK,EAAE;oBACP,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACtC,IAAI,MAAA,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC;4BACnE,OAAO,IAAI,CAAC;qBACnB;oBAED,IAAI,CAAC,SAAS;wBACV,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,KAAK,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAxB,CAAwB,CAAC,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAhC,CAAgC,CAAC,EAAxF,CAAwF,CAAC,CAAoB,CAAC;oBAElK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC1C,IAAI,MAAA,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC;4BACvE,OAAO,IAAI,CAAC;qBACnB;iBACJ;gBAED,OAAO,KAAK,CAAC;YACjB,CAAC;YA5Be,2BAAqB,wBA4BpC,CAAA;YAEU,2BAAqB,GAAG,CAAC;gBAChC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,OAAO,UAAC,KAAoB,EAAE,GAAkB,EAAE,KAAoB;oBAClE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACxB,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;oBACvB,IAAI,EAAE,KAAK,CAAC;wBACR,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC7I,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEM,2BAAqB,GAAG,CAAC;gBAChC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,OAAO,UAAC,KAAoB,EAAE,GAAkB,EAAE,KAAoB,EAAE,MAAqB;oBACzF,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC1B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;oBACvB,IAAI,EAAE,KAAK,CAAC;wBACR,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9B,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAChC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClH,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,mBAAmB,CAAC,MAAgB,EAAE,SAAmB,EAAE,EAAY,EAAE,EAAY;gBACjG,wCAAwC;gBACxC,IAAI,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;gBAC/B,IAAI,QAAQ,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;gBAC/B,wFAAwF;gBACxF,yBAAyB;gBACzB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;gBAEtC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBAElE,gFAAgF;gBAChF,IAAI,IAAI,GAAG,CAAC,EAAE;oBACV,WAAW;oBACX,OAAO,KAAK,CAAC;iBAChB;gBAED,6CAA6C;gBAC7C,IAAI,IAAI,GAAG,IAAI,EAAE;oBACb,WAAW;oBACX,OAAO,KAAK,CAAC;iBAChB;gBAED,WAAW;gBACX,OAAO,IAAI,CAAC;YAChB,CAAC;YA5Be,yBAAmB,sBA4BlC,CAAA;YAEU,2BAAqB,GAAG,CAAC;gBAEhC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACvB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE7B,OAAO,UAAC,MAAgB,EAAE,SAAmB,EAAE,YAAsB,EAAE,UAAoB;oBACvF,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;oBACjC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC7D,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACzD,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;wBACjC,OAAO,KAAK,CAAC;oBAEjB,CAAC,CAAC,IAAI,CAAgB,UAAU,CAAC,CAAC,GAAG,CAAgB,YAAY,CAAC,CAAC;oBAEnE,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,oBAAoB;wBAClC,OAAO,KAAK,CAAC;oBAEjB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;wBACjC,OAAO,KAAK,CAAC;oBAEjB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;wBACd,OAAO,KAAK,CAAC;oBAEjB,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEM,8BAAwB,GAAG,CAAC;gBAEnC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACvB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE7B,OAAO,UAAC,MAAgB,EAAE,SAAmB,EAAE,YAAsB,EAAE,UAAoB;oBACvF,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;oBACjC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC7D,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACzD,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;wBACjC,OAAO,IAAI,CAAC;oBAEhB,CAAC,CAAC,IAAI,CAAgB,UAAU,CAAC,CAAC,GAAG,CAAgB,YAAY,CAAC,CAAC;oBAEnE,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,oBAAoB;wBAClC,OAAO,IAAI,CAAC;oBAEhB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACtC,IAAI,CAAC,GAAG,CAAC;wBACL,OAAO,IAAI,CAAC;oBAEhB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACtD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;wBACd,OAAO,IAAI,CAAC;oBAEhB,OAAO,CAAC,CAAC,IAAI,CAAgB,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAgB,MAAM,CAAC,CAAC;gBACzF,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,gBAAgB,CAAC,CAAgB,EAAE,CAAgB,EAAE,CAAa;gBAE9E,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;oBACxC,OAAO,IAAI,CAAC;gBAEhB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEnB,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBAEtC,IAAI,GAAG,IAAI,CAAC;oBACR,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAE9B,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEvB,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACjB,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACjB,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBAEjB,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAChC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;gBAEhC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1F,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAE1F,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAClF,CAAC;YA/Be,sBAAgB,mBA+B/B,CAAA;YAED,SAAgB,qBAAqB,CAAC,CAAgB,EAAE,CAAgB,EAAE,CAAgB;gBACtF,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;YAFe,2BAAqB,wBAEpC,CAAA;YAED,SAAgB,0BAA0B,CAAC,KAAoB,EAAE,GAAkB,EAAE,KAAoB;gBACrG,OAAO,MAAA,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxE,CAAC;YAFe,gCAA0B,6BAEzC,CAAA;YAED,SAAgB,wBAAwB,CAAC,SAA0B,EAAE,MAAgC,EAAE,aAAsB;gBACzH,0BAA0B;gBAC1B,oFAAoF;gBAEpF,IAAI,aAAa,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAEpD,IAAI,CAAC,aAAa;oBACd,aAAa,GAAG,oBAAoB,CAAC,kBAAkB,CAAC;gBAE5D,OAAO,+BAA+B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAgD,EAAlD,CAAkD,CAAC,CAAC,MAAM,CAAC,UAAC,CAAyC;oBAC7K,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,GAAG,aAAa,CAAC;gBACtD,CAAC,CAA6C,CAAC;YACnD,CAAC;YAZe,8BAAwB,2BAYvC,CAAA;YAED,SAAgB,+BAA+B,CAAC,SAA0B,EAAE,OAA4B,EAAE,SAAmB;gBACzH,IAAI,CAAS,EAAE,EAAU,EACrB,UAAU,GAAwB,EAAE,EACpC,kBAAkB,GAAgD,EAAE,EACpE,MAAiD,EACjD,GAAe,EACf,QAAwB,EACxB,YAA+D,EAC/D,QAAuB,EACvB,WAA0B,EAC1B,WAAmD,EACnD,MAAM,GAAG,UAAU,EACnB,WAAW,GAAG,QAAQ,EACtB,MAAM,GAAG,cAAc,EACvB,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,EACrD,KAA2B,EAC3B,eAAwB,CAAC;gBAE7B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAE1C,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAEpB,IAAI,MAAM,CAAC,MAAM,YAAY,EAAE,CAAC,cAAc,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,WAAW,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;wBAC3J,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;wBAC5B,QAAQ,GAAG,WAAW,CAAC,QAA0B,CAAC;wBAElD,IAAI,CAAC,QAAQ,CAAC,cAAc;4BAAE,QAAQ,CAAC,qBAAqB,EAAE,CAAC;wBAE/D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;wBACrC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;wBAC7C,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC;wBAE/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC;4BAAE,SAAS;wBAEtD,IAAI,CAAC,QAAQ,CAAC,WAAW;4BAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC;wBAEzD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;wBAE7E,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;wBAE1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC;4BAAE,SAAS;wBAExD,eAAe,GAAG,IAAI,CAAC;wBAEvB,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;qBAChF;oBAED,IAAI,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,QAAQ,EAAE;wBACzC,YAAY,GAAG,MAAM,CAAC;wBACtB,GAAG,GAAG,YAAY,CAAC,MAAoB,CAAC;wBAExC,uEAAuE;wBACvE,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC;wBACjC,QAAQ,GAAG,GAAG,CAAC,QAA0B,CAAC;wBAC1C,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC;wBAE1B,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;4BACtB,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC;wBAEjC,YAAY;wBACZ,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;wBAElD,iCAAiC;wBACjC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;4BACtB,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC;qBACjC;yBACI;wBACD,KAAK,GAAG,SAAS,CAAC,eAAe,CAAC,MAAa,EAAE,SAAS,CAAC,CAAC;wBAE5D,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,MAAa,EAAE,SAAS,CAAC,CAAC,CAAC;qBAC1E;oBAED,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;wBACrB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;yBACvB,IAAI,eAAe;wBACpB,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAEvC;gBAED,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC;oBAC7B,kBAAkB,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAf,CAAe,CAAC,CAAC;gBAEvD,OAAO,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACjD,CAAC;YAnFe,qCAA+B,kCAmF9C,CAAA;YAED,SAAgB,YAAY,CAAC,MAAgC,EAAE,SAA0B;gBACrF,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,EACnB,QAAQ,GAAG,GAAG,CAAC,MAAM,EACrB,QAAQ,GAAG,SAAS,CAAC,GAAG,EACxB,gBAAgB,GAAY,IAAI,EAChC,SAAS,GAAG,GAAG,CAAC,SAAS,EACzB,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBAE1D,IAAI,CAAS,EAAE,CAAS,EACpB,IAAkC,EAClC,OAA6C,EAC7C,UAAqE,CAAA,sCAAsC,EAC3G,MAAsB,EACtB,OAA4B,EAC5B,UAAqE,CAAA,sCAAsC,EAC3G,qBAAuC,EACvC,iBAAyB,EACzB,YAA2B,CAAC;gBAEhC,mBAAmB;gBACnB,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAc,CAAC,CAAC;gBAEhD,qCAAqC;gBACrC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;oBACf,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;gBAEhC,mCAAmC;gBACnC,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;gBACxD,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAE9D,2BAA2B;gBAC3B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACzD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D,OAAO,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;iBACzG;gBAED,uCAAuC;gBACvC,IAAI,gBAAgB,EAAE;oBAElB,OAAO,GAAG,EAAE,CAAC;oBACb,qBAAqB,GAAG,EAAE,CAAC;oBAE3B,6BAA6B;oBAE7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAExC,UAAU,GAAG,OAAO,CAAC,CAAC,CAAQ,CAAC;wBAC/B,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;wBAE3B,iBAAiB,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAE1D,oCAAoC;wBAEpC,IAAI,iBAAiB,KAAK,CAAE,CAAC,EAAE;4BAE3B,UAAU,GAAG;gCACT,MAAM,EAAE,MAAM;gCACd,KAAK,EAAE,EAAE;gCACT,QAAQ,EAAE,EAAE;6BACR,CAAC;4BAET,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAEzB,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;yBAEtC;6BAAM;4BAEH,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAQ,CAAC;yBAElD;wBAED,iDAAiD;wBAEjD,IAAI,UAAU,CAAC,KAAK,EAAE;4BAElB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;yBAE3C;6BAAM,IAAI,UAAU,CAAC,QAAQ,EAAE;4BAE5B,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;yBAEjD;qBAEJ;iBAEJ;;oBAEG,OAAO,GAAG,OAAO,CAAC;gBAEtB,OAAO,OAAO,CAAC;YACnB,CAAC;YA1Fe,kBAAY,eA0F3B,CAAA;YAED,SAAgB,gBAAgB,CAAC,IAAkC,EAAE,QAAuB,EAAE,QAAgB,EAAE,OAA6C,EAAE,SAAwB,EAAE,YAA2B,EAAE,aAAqB;gBACvO,IAAI,CAAS,EAAE,CAAS,CAAC;gBAEzB,gCAAgC;gBAChC,IAAI,UAAU,GAAG,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;gBAE1G,gBAAgB;gBAChB,IAAI,UAAU,KAAK,IAAI,EAAE;oBACrB,iBAAiB;oBACjB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEvC,iBAAiB;oBACjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAElD,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpD,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;qBAC1G;iBACJ;gBAED,OAAO,OAAO,CAAC;YACnB,CAAC;YApBe,sBAAgB,mBAoB/B,CAAA;YAED,SAAgB,sBAAsB,CAAC,IAAkC,EAAE,MAAqB,EAAE,SAAwB,EAAE,QAAgB,EAAE,YAA2B,EAAE,aAAqB;gBAC5L,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAC5D,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAC7D,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAC9D,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAC3D,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAC5D,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAC7D,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAC/E,IAAY,CAAC;gBAEjB,oEAAoE;gBACpE,IAAI,IAAI,GAAG,CAAC;oBACR,OAAO,KAAK,CAAC;gBAEjB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBAEhF,oEAAoE;gBACpE,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,QAAQ,CAAC;YAC5C,CAAC;YAlBe,4BAAsB,yBAkBrC,CAAA;YAED,SAAgB,mBAAmB,CAAC,CAAgB,EAAE,cAA8B;gBAChF,IAAI,GAAG,GAAG,cAAc,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EACnB,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACf,CAAC;YATe,yBAAmB,sBASlC,CAAA;YAED,SAAgB,uBAAuB,CAAC,GAAkC,EAAE,CAAS,EAAE,CAAS;gBAC5F,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5G,CAAC;YAFe,6BAAuB,0BAEtC,CAAA;YAED,SAAgB,sBAAsB,CAAC,SAA0B,EAAE,MAA8C;gBAC7G,IAAI,QAAQ,GAAG,MAAM,CAAC,QAA0B,EAC5C,KAAK,GAAG,SAAS,EACjB,WAAW,GAAG,QAAQ,CAAC,SAAS,EAAE,EAClC,MAAM,GAAG,cAAc,EACvB,MAAM,GAAG,cAAc,EACvB,IAAI,GAAG,YAAY,EACnB,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACpC,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBAE1D,IAAI,CAAC,QAAQ,CAAC,WAAW;oBAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC;gBAEzD,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAExE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAE9B,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAE1B,KAAK,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAEpD,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAE5C,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBACpJ,oBAAoB;oBAEpB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAE/E,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE;wBACrB,MAAM;wBACN,IAAI,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE;4BAC/C,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;4BACxD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBACxB;;4BAAM,OAAO,IAAI,CAAC;qBACtB;yBAAM;wBACH,OAAO;wBACP,IAAI,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE;4BAC/C,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;4BACxD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBACvB;;4BAAM,OAAO,IAAI,CAAC;qBACtB;iBACJ;qBAAM;oBACH,qBAAqB;oBAErB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAE/E,IAAI,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE;wBACrB,OAAO;wBACP,IAAI,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE;4BAC/C,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;4BACxD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;yBACxB;;4BAAM,OAAO,IAAI,CAAC;qBACtB;yBAAM;wBACH,OAAO;wBACP,IAAI,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,EAAE;4BAC/C,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;4BACxD,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBACvB;;4BAAM,OAAO,IAAI,CAAC;qBACtB;iBACJ;gBAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAyB,CAAC;YACrJ,CAAC;YA7De,4BAAsB,yBA6DrC,CAAA;YAED,SAAgB,WAAW,CAAC,CAAgB,EAAE,cAA8B;gBACxE,IAAI,GAAG,GAAG,cAAc,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChD,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM;oBACb,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAChB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;oBACnB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACjB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBACb,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAChB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;oBACnB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAChB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBACb,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;qBAChB,oBAAoB;oBACrB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrB,OAAO,GAAG,CAAC;YACf,CAAC;YAfe,iBAAW,cAe1B,CAAA;YAED,0BAA0B;YACf,eAAS,GAAG,CAAC;gBAEpB,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAEvD,OAAO,UAAC,CAAgB,EAAE,CAAgB,EAAE,CAAgB,EAAE,MAAsB;oBAChF,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpB,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpB,OAAO,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAmB,CAAC;gBAC7F,CAAC,CAAA;YACL,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,4BAA4B,CAAC,GAAW,EAAE,aAA4B,EAAE,cAAsB;gBAC1G,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1I,CAAC;YAFe,kCAA4B,+BAE3C,CAAA;YAED,SAAgB,uBAAuB,CAAC,iBAA0C,EAAE,kBAA4C,EAAE,YAA0B,EAAE,mBAA2B;gBAErL,IAAI,MAAM,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,EACjE,MAAM,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAEvE,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpF,kBAAkB,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;gBACjG,kBAAkB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;gBAE3H,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAEnF,IAAI,MAAM,GAAG,CAAC,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;gBACzH,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAEvG,IAAI,KAAK,GAAG,iBAAiB,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,mBAAmB;gBACtE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC;gBAC5E,qHAAqH;gBACrH,kHAAkH;gBAElH,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;gBAC3C,iBAAiB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAE5C,oHAAoH;gBACpH,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAChF,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;gBAChG,iBAAiB,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;gBAEzH,iBAAiB,CAAC,MAAM,GAAG,MAAM,CAAC;gBAElC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACrF,CAAC;YA9Be,6BAAuB,0BA8BtC,CAAA;YAED,0DAA0D;YAC1D,SAAgB,kBAAkB,CAAC,KAAkB;gBACjD,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5F,CAAC;YAFe,wBAAkB,qBAEjC,CAAA;YAED,iIAAiI;YACjI,0BAA0B;YAC1B,qBAAqB;YACrB,wBAAwB;YACxB,yBAAyB;YACzB,oBAAoB;YACpB,QAAQ;YAER,qBAAqB;YAErB,2CAA2C;YAC3C,yEAAyE;YACzE,2CAA2C;YAC3C,2CAA2C;YAE3C,2CAA2C;YAC3C,uDAAuD;YAEvD,2DAA2D;YAC3D,4CAA4C;YAC5C,kBAAkB;YAClB,qGAAqG;YAErG,sGAAsG;YACtG,WAAW;YACX,SAAS;YAET,uDAAuD;YAEvD,iBAAiB;YACjB,GAAG;YAEH,6DAA6D;YAE7D,yCAAyC;YACzC,qBAAqB;YAErB,mCAAmC;YAEnC,kCAAkC;YAClC,kCAAkC;YAClC,iCAAiC;YACjC,qBAAqB;YACrB,8BAA8B;YAC9B,qBAAqB;YACrB,iBAAiB;YACjB,8BAA8B;YAC9B,uCAAuC;YACvC,OAAO;YACP,eAAe;YACf,GAAG;YAEH,sNAAsN;YACtN,oGAAoG;YACpG,sBAAsB;YACtB,OAAO;YAEP,kCAAkC;YAClC,wBAAwB;YAExB,iDAAiD;YACjD,4CAA4C;YAC5C,gDAAgD;YAChD,OAAO;YAEP,0BAA0B;YAC1B,qBAAqB;YACrB,wBAAwB;YACxB,yBAAyB;YACzB,oBAAoB;YACpB,QAAQ;YAER,gFAAgF;YAEhF,4CAA4C;YAE5C,sBAAsB;YAEtB,8EAA8E;YAE9E,qEAAqE;YAErE,uGAAuG;YAEvG,qDAAqD;YAErD,8DAA8D;YAE9D,kCAAkC;YAElC,4DAA4D;YAC5D,+BAA+B;YAC/B,mCAAmC;YACnC,mCAAmC;YAEnC,sDAAsD;YAEtD,uJAAuJ;YACvJ,OAAO;YAEP,mBAAmB;YACnB,+FAA+F;YAC/F,0DAA0D;YAC1D,6BAA6B;YAC7B,iCAAiC;YAEjC,6FAA6F;YAC7F,WAAW;YACX,OAAO;YAEP,mGAAmG;YACnG,0DAA0D;YAC1D,6BAA6B;YAC7B,iCAAiC;YACjC,iCAAiC;YAEjC,mEAAmE;YAEnE,gIAAgI;YAChI,OAAO;YAEP,2BAA2B;YAE3B,0CAA0C;YAC1C,wCAAwC;YAExC,qBAAqB;YACrB,wDAAwD;YACxD,8DAA8D;YAC9D,gDAAgD;YAChD,oDAAoD;YACpD,oDAAoD;YAEpD,yBAAyB;YACzB,6NAA6N;YAC7N,kBAAkB;YAClB,+GAA+G;YAC/G,WAAW;YACX,cAAc;YACd,oEAAoE;YACpE,uCAAuC;YACvC,2CAA2C;YAC3C,2CAA2C;YAE3C,yBAAyB;YACzB,kMAAkM;YAClM,kBAAkB;YAClB,+GAA+G;YAE/G,WAAW;YACX,OAAO;YAEP,8CAA8C;YAC9C,iBAAiB;YACjB,8CAA8C;YAC9C,4FAA4F;YAE5F,mEAAmE;YACnE,0DAA0D;YAC1D,wBAAwB;YAExB,yCAAyC;YAEzC,iBAAiB;YACjB,GAAG;YAEH,SAAgB,4BAA4B,CAAC,GAAkC;gBAC3E,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBAExC,yBAAyB;gBAEzB,KAAK,IAAI,IAAI,IAAI,GAAG,EAAE;oBAClB,IAAI,IAAI,GAAqB,GAAG,CAAC,IAAI,CAAC,CAAC;oBACvC,IAAI,UAAU,CAAC;oBACf,QAAQ,IAAI,CAAC,IAAI,EAAE;wBACf,KAAK,cAAc;4BACf,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAC1C,MAAM;wBACV,KAAK,aAAa;4BACd,UAAU,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACzC,MAAM;wBACV,KAAK,WAAW;4BACZ,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACvC,MAAM;wBACV,KAAK,YAAY;4BACb,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACxC,MAAM;wBACV,KAAK,mBAAmB;4BACpB,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAC/C,MAAM;wBACV,KAAK,YAAY;4BACb,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACxC,MAAM;wBACV,KAAK,YAAY;4BACb,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACxC,MAAM;wBACV,KAAK,aAAa;4BACd,UAAU,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACzC,MAAM;wBACV,KAAK,cAAc;4BACf,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAC1C,MAAM;wBACV;4BACI,UAAU,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACjD;oBAED,IAAI,IAAI,KAAK,OAAO;wBAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;;wBAE1D,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACtG,wBAAwB;oBACxB,wBAAwB;iBAC3B;gBACD,kBAAkB;gBAClB,oCAAoC;gBACpC,6BAA6B;gBAC7B,qCAAqC;gBAErC,OAAO,MAAM,CAAC;YAClB,CAAC;YArDe,kCAA4B,+BAqD3C,CAAA;YAED,SAAgB,yBAAyB,CAAC,QAA8B,EAAE,UAAsB;gBAC5F,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBAExC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM;oBAClF,OAAO,MAAM,CAAC;gBAElB,IAAI,QAAQ,CAAC,KAAK;oBACd,QAAQ,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAEvC,IAAI,SAAS,GAA2B,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAE,CAAC,KAAiB,CAAC;gBAC3F,IAAI,UAAU,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,IAAI,eAAe,GAAG,UAAU,CAAC,MAAM,CAAC;gBAExC,IAAI,UAAU,IAAI,CAAC;oBACf,OAAO,MAAM,CAAC;gBAElB,IAAI,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAEhD,IAAI,QAAQ,GAAG,IAAI,YAAY,CAAC,eAAe,GAAG,UAAU,GAAG,CAAC,CAAQ,CAAC;gBACzE,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,eAAe,GAAG,UAAU,GAAG,CAAC,CAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzF,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,eAAe,GAAG,UAAU,GAAG,CAAC,CAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC3F,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,eAAe,GAAG,UAAU,GAAG,CAAC,CAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAEnF,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAyB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAE,CAAC,KAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzG,IAAI,WAAW,GAAG,SAAS,CAAC,CAAC,CAAyB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAE,CAAC,KAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9G,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAyB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,KAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;gBAElG,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,eAAe,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE/B,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,IAAI,IAAI,GAAG,CAAC,CAAC;gBAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE;oBAEtC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wBACjD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;qBACpF;oBAED,IAAI,SAAS,EAAE;wBAEX,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;wBAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;4BACnD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;yBAC3F;qBACJ;oBAED,IAAI,QAAQ,EAAE;wBACV,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;qBAC9B;oBAED,IAAI,KAAK,EAAE;wBACP,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;wBACvB,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC;qBAC1B;oBAED,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC;iBAC1B;gBAED,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAI,QAAQ;oBACR,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvE,IAAI,SAAS;oBACT,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,KAAK;oBACL,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEjE,OAAO,MAAM,CAAC;YAClB,CAAC;YA1Ee,+BAAyB,4BA0ExC,CAAA;YAED,SAAgB,qBAAqB,CAAC,UAAkC,EAAE,UAAuB;gBAC7F,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBAExC,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM;oBACjC,OAAO,MAAM,CAAC;gBAElB,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,EAApC,CAAoC,CAAC,CAAC;gBAEzE,IAAI,KAAK,GAAY,KAAK,CAAC;gBAC3B,IAAI,QAAQ,GAAY,KAAK,CAAC;gBAC9B,IAAI,SAAS,GAAY,KAAK,CAAC;gBAC/B,IAAI,aAAa,GAAG,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,CAAC;gBAE5E,IAAI,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG;oBACzC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAQ;wBAAE,KAAK,GAAG,IAAI,CAAC;oBAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAQ;wBAAE,QAAQ,GAAG,IAAI,CAAC;oBACpD,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAQ;wBAAE,SAAS,GAAG,IAAI,CAAC;oBACtD,OAAO,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC9D,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEN,IAAI,UAAU,IAAI,CAAC;oBACf,OAAO,MAAM,CAAC;gBAElB,IAAI,QAAQ,GAAG,IAAI,YAAY,CAAC,UAAU,GAAG,CAAC,CAAQ,CAAC;gBACvD,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,GAAG,CAAC,CAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvE,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,GAAG,CAAC,CAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,UAAU,GAAG,CAAC,CAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;gBAEjE,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,eAAe,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE/B,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,IAAI,IAAI,GAAG,CAAC,CAAC;gBAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAE7B,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC3C,QAAQ,CAAC,oBAAoB,EAAE,CAAC;oBAEpC,IAAI,SAAS,GAA2B,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAE,CAAC,KAAiB,CAAC;oBAE3F,IAAI,aAAa,EAAE;wBAEf,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;wBAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;4BACjD,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;yBACpF;wBAED,IAAI,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;4BAE5C,IAAI,WAAW,GAA2B,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAE,CAAC,KAAiB,CAAC;4BAE3F,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;4BAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;gCACnD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;6BAC3F;yBACJ;qBAEJ;yBAAM;wBAEH,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;wBAE9B,IAAI,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;4BAC1C,OAAO,CAAC,GAAG,CAAyB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAE,CAAC,KAAiB,EAAE,IAAI,CAAC,CAAC;qBAEnG;oBAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;wBACxC,MAAM,CAAC,GAAG,CAAyB,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAE,CAAC,KAAiB,EAAE,IAAI,CAAC,CAAC;oBAE9F,IAAI,KAAK,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;wBAClC,GAAG,CAAC,GAAG,CAAyB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,KAAiB,EAAE,IAAI,CAAC,CAAC;oBAExF,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;oBAElC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC;oBACnB,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC;iBACtB;gBAED,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBACxE,IAAI,QAAQ;oBACR,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;gBACvE,IAAI,SAAS;oBACT,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,KAAK;oBACL,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEjE,OAAO,MAAM,CAAC;YAClB,CAAC;YA5Fe,2BAAqB,wBA4FpC,CAAA;YAED,SAAgB,eAAe,CAAC,GAA6B,EAAE,UAAoB,EAAE,SAAmB,EAAE,UAAoB;gBAC1H,IAAI,GAAG,EAAE;oBACL,IAAI,OAAO,GAAG,CAAC,OAAO,IAAI,UAAU,EAAE;wBAClC,GAAG,CAAC,OAAO,EAAE,CAAC;qBACjB;yBAAM;wBACH,IAAI,GAAG,CAAC,QAAQ,EAAE;4BACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gCAC1C,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;6BACvE;yBACJ;wBACD,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE;4BAC7B,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;4BACvB,OAAO,GAAG,CAAC,QAAQ,CAAC;yBACvB;wBACD,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE;4BAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gCAC7B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oCACtC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iCAC7B;6BACJ;iCAAM,IAAK,GAAG,CAAC,QAAgC,CAAC,SAAS,EAAE;gCACxD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAI,GAAG,CAAC,QAAgC,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oCACxE,GAAG,CAAC,QAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;iCAChE;6BACJ;iCACI;gCACD,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;6BAC1B;4BACD,OAAO,GAAG,CAAC,QAAQ,CAAC;yBACvB;wBACD,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE;4BAC3B,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;4BACtB,OAAO,GAAG,CAAC,OAAO,CAAC;yBACtB;qBACJ;iBACJ;YACL,CAAC;YAnCe,qBAAe,kBAmC9B,CAAA;YAED,SAAgB,aAAa,CAAC,GAAmB,EAAE,UAAoB,EAAE,SAAmB,EAAE,UAAoB;gBAC9G,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;oBACrC,IAAI,QAAQ,GAAqB,EAAE,CAAC;oBACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;qBAClC;oBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC7C,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACxB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAClB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;qBAC/E;iBACJ;YACL,CAAC;YAZe,mBAAa,gBAY5B,CAAA;YAED,SAAgB,eAAe,CAAC,MAAkB,EAAE,aAAyB,EAAE,UAAsB,EAAE,QAA8B;gBAArG,uBAAA,EAAA,UAAkB;gBAAE,8BAAA,EAAA,iBAAyB;gBAAE,2BAAA,EAAA,cAAsB;gBAAE,yBAAA,EAAA,WAAmB,IAAI,CAAC,EAAE,GAAG,CAAC;gBACjI,IAAI,UAAU,KAAK,QAAQ;oBACvB,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBAE5B,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAC3B,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,EACpE,CAAC,GAAG,CAAC,GAAG,WAAW,EACnB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAClF,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAC1B,SAAS,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,KAAK,EAC3C,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC;gBAEtD,IAAI,SAAS,GAAoB,EAAE,CAAC;gBAEpC,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE;oBAE9C,IAAI,EAAE,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,EAC/B,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEjE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACrB;gBAGD,OAAO,SAAS,CAAC;YACrB,CAAC;YAxBe,qBAAe,kBAwB9B,CAAA;YAED,SAAgB,uBAAuB,CAAC,KAAc,EAAE,UAAmB,EAAE,WAAoB;gBAC7F,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;gBAEhC,UAAU,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvD,WAAW,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;gBAEpE,IAAI,SAAS,GAAoB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEpG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;oBAE5B,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,KAAK,GAAG,WAAW,CAAC;oBAE7C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEvD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACrB;gBAED,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE7B,OAAO,SAAS,CAAC;YACrB,CAAC;YArBe,6BAAuB,0BAqBtC,CAAA;YAED;gBAA8C,4CAAoB;gBAC9D,kCAAY,MAAc,EAAE,QAAiB,EAAE,UAAmB,EAAE,WAAoB;oBAAxF,YACI,iBAAO,SA8BV;oBA7BG,KAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;oBAEvC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;oBACtB,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;oBAElG,UAAU,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvD,WAAW,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBAEpE,IAAI,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrD,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBAE1C,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC7C,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wBAE/D,IAAI,OAAO,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,GAAG,WAAW,CAAC;wBAEtD,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBAC1C,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBAE9C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBACjB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;qBACpB;oBAED,KAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;oBACvE,KAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;oBAEnD,KAAI,CAAC,cAAc,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;;gBACxE,CAAC;gBACL,+BAAC;YAAD,CAjCA,AAiCC,CAjC6C,KAAK,CAAC,cAAc,GAiCjE;YAjCY,8BAAwB,2BAiCpC,CAAA;YAED;gBAAwD,sDAAoB;gBACxE,4CAAY,UAAsB,EAAE,MAAc,EAAE,QAAiB;oBAArE,YACI,iBAAO,SAoEV;oBAnEG,KAAI,CAAC,IAAI,GAAG,oCAAoC,CAAC;oBAEjD,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;oBACtB,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;oBAElG,IAAI,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBAE9B,IAAI,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC;oBAE9B,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;oBACpD,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;oBAElD,IAAI,OAAO,GAAG,IAAI,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBAC7C,IAAI,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;oBAE3C,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAC/B,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EACrD,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAE,QAAQ,EAAE,CAAE,QAAQ,EAAE,CAAE,QAAQ,CAAC,EAC3D,CAAC,GAAG,CAAC,EACL,CAAC,GAAG,CAAC,CAAC;oBAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAG,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;wBAElE,IAAI,OAAO,GAAG,CAAC,GAAG,QAAQ,GAAG,WAAW,CAAC;wBAEzC,OAAO,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBACzC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBAE7C,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;wBACf,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;qBACvC;oBAED,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,UAAC,CAAC;wBAC9B,IAAI,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;wBACvB,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;wBAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;4BAElF,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;4BAEhE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BACZ,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BAEZ,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;4BACjB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;4BAErB,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;4BAC5B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;yBACvC;oBACL,CAAC,CAAC,CAAC;oBAEH,KAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;oBACpE,KAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;oBAEnD,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;oBAChB,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;oBAChB,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;oBAEhB,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;oBAChB,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;oBAChB,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC;oBAEhB,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAEnC,KAAI,CAAC,WAAW,GAAG,GAAG,CAAC;oBACvB,KAAI,CAAC,cAAc,GAAG,GAAG,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;;gBACpE,CAAC;gBACL,yCAAC;YAAD,CAvEA,AAuEC,CAvEuD,KAAK,CAAC,cAAc,GAuE3E;YAvEY,wCAAkC,qCAuE9C,CAAA;YAED,SAAgB,0BAA0B,CAAC,QAA6B,EAAE,aAAuB;gBAC7F,IAAI,QAAQ,IAAI,OAAO,KAAK,IAAI,WAAW,EAAE;oBACzC,IAAI,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;oBACrC,IAAI,UAAU,IAAI,OAAO,UAAU,CAAC,SAAS,IAAI,UAAU,EAAE;wBACzD,aAAa,CAAC,aAAa,EAAE,CAAC;wBAC9B,IAAI;4BACA,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,oBAAoB,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,UAAC,MAAM;gCAC5K,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;oCAC9C,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iCAC7F;qCAAM;oCACH,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iCAClE;gCACD,aAAa,CAAC,gBAAgB,EAAE,CAAC;4BACrC,CAAC,EAAE;gCACC,aAAa,CAAC,gBAAgB,EAAE,CAAC;gCACjC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;4BACnE,CAAC,CAAC,CAAC;yBACN;wBAAC,OAAO,CAAC,EAAE;4BACR,aAAa,CAAC,gBAAgB,EAAE,CAAC;4BACjC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;yBAClE;qBACJ;;wBACG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBACtE;;oBACG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACvE,CAAC;YAzBe,gCAA0B,6BAyBzC,CAAA;YAED,SAAgB,qBAAqB,CAAC,IAAqB,EAAE,MAAuB;gBAChF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;oBACrB,OAAO,IAAI,CAAC;gBAEhB,IAAI,GAAG,GAAG,MAAM,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAEzC,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAC3B,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAC1C,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,EACvC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAC5B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAtC,CAAsC,CAAC,CAAC;gBAEpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBACzC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACrD;gBAED,IAAI,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC3D,wEAAwE;gBAExE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAEtB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EACV,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EACV,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAEf,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE7F,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC3F;gBAED,OAAO,GAAG,CAAC;YACf,CAAC;YAjCe,2BAAqB,wBAiCpC,CAAA;YAED,0GAA0G;YAC1G,oCAAoC;YACpC,iBAAiB;YAEjB,yEAAyE;YACzE,+CAA+C;YAC/C,mDAAmD;YACnD,yCAAyC;YACzC,oBAAoB;YAEpB,qCAAqC;YACrC,iCAAiC;YACjC,wEAAwE;YACxE,2BAA2B;YAC3B,mEAAmE;YACnE,4KAA4K;YAC5K,qFAAqF;YACrF,gIAAgI;YAChI,wCAAwC;YACxC,qGAAqG;YACrG,wCAAwC;YACxC,iGAAiG;YACjG,iCAAiC;YACjC,mCAAmC;YACnC,yFAAyF;YACzF,uBAAuB;YACvB,mBAAmB;YACnB,+BAA+B;YAC/B,wDAAwD;YACxD,mBAAmB;YACnB,sBAAsB;YACtB,yCAAyC;YACzC,gDAAgD;YAChD,gFAAgF;YAChF,2BAA2B;YAC3B,kDAAkD;YAClD,gDAAgD;YAChD,gEAAgE;YAChE,6CAA6C;YAC7C,kFAAkF;YAElF,gFAAgF;YAChF,+FAA+F;YAC/F,kGAAkG;YAClG,yEAAyE;YACzE,yEAAyE;YACzE,uEAAuE;YAEvE,wEAAwE;YAExE,oEAAoE;YACpE,mCAAmC;YACnC,+BAA+B;YAC/B,yDAAyD;YACzD,+CAA+C;YAC/C,4BAA4B;YAC5B,wEAAwE;YACxE,mCAAmC;YACnC,2CAA2C;YAC3C,uBAAuB;YACvB,wBAAwB;YACxB,uCAAuC;YACvC,eAAe;YACf,WAAW;YAEX,2BAA2B;YAC3B,OAAO;YAEI,+BAAyB,GAAG,CAAC;gBAEpC,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAC5B,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAC7B,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAE9B,OAAO,UAAC,CAAgB,EAAE,CAAgB,EAAE,CAAgB,EAAE,IAAgB;oBAE1E,IAAI,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,CAAC;oBAElD,wFAAwF;oBACxF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACvB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;oBAErC,2DAA2D;oBAC3D,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBACzB,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBACzB,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;oBAEzB,oCAAoC;oBACpC,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtB,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACtB,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAEtB,kCAAkC;oBAClC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAExB,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gBAAgB;oBAChB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAE5D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE;wBAE3D,OAAO,KAAK,CAAC,CAAC,4BAA4B;qBAE7C;oBAED,gFAAgF;oBAChF,aAAa;oBACb,4FAA4F;oBAC5F,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE;wBAEnF,OAAO,KAAK,CAAC;qBAEhB;oBACD,4FAA4F;oBAC5F,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE;wBAEnF,OAAO,KAAK,CAAC;qBAEhB;oBACD,4FAA4F;oBAC5F,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE;wBAEnF,OAAO,KAAK,CAAC;qBAEhB;oBAED,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEtE,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,QAAQ,CAAqB,MAAS,EAAE,QAAgB,EAAE,MAAiB;gBACvF,IAAI,EAAE,GAAG,CAAC,EACN,EAAE,GAAG,CAAC,EACN,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EACxB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE7B,IAAI,MAAM,EAAE;oBACR,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;oBACd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;iBACjB;gBAED,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,EAClB,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,EAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;gBAEjC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;gBACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;gBAEb,OAAO,MAAM,CAAC;YAClB,CAAC;YApBe,cAAQ,WAoBvB,CAAA;YAED,SAAgB,0BAA0B,CAAqB,CAAI,EAAE,WAAe;gBAAf,4BAAA,EAAA,eAAe;gBAChF,IAAI,EAAU,EAAE,EAAU,CAAC;gBAE3B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC/B,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtB,EAAE,GAAG,CAAC,CAAC;iBACV;qBAAM;oBACH,EAAE,GAAG,CAAC,CAAC;oBACP,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACzB;gBAED,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAErD,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;gBACf,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;gBAEf,OAAO,CAAC,CAAC;YACb,CAAC;YAjBe,gCAA0B,6BAiBzC,CAAA;YAED,SAAgB,aAAa,CAAqB,CAAI;gBAClD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC/B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACX;qBAAM;oBACH,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACR,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1B;gBACD,OAAO,CAAC,CAAC;YACb,CAAC;YATe,mBAAa,gBAS5B,CAAA;YAED,SAAgB,SAAS,CAAC,CAAW,EAAE,CAAW;gBAC9C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;YAFe,eAAS,YAExB,CAAA;YAED,SAAgB,OAAO,CAAC,CAAW,EAAE,CAAW;gBAC5C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;YAFe,aAAO,UAEtB,CAAA;YAED,4EAA4E;YAC5E,SAAgB,aAAa,CAAC,CAAW,EAAE,CAAW;gBAClD,yBAAyB;gBACzB,yBAAyB;gBAEzB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEtD,CAAC;YANe,mBAAa,gBAM5B,CAAA;YAED,sCAAsC;YACtC,SAAgB,gBAAgB,CAAC,GAAW;gBACxC,OAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACnC,CAAC;YAFe,sBAAgB,mBAE/B,CAAA;YAED,yCAAyC;YACzC,SAAgB,WAAW,CAAC,GAAW;gBACnC,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACvC,CAAC;YAHe,iBAAW,cAG1B,CAAA;YAED,SAAgB,YAAY,CAAC,MAA8C,EAAE,SAAe;gBAAf,0BAAA,EAAA,eAAe;gBACxF,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBAEjC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;oBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC3C,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBAClB,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;qBACpI;iBACJ;gBAED,OAAO,IAAI,CAAC;YAChB,CAAC;YAXe,kBAAY,eAW3B,CAAA;YAED,SAAgB,aAAa,CAAC,MAAgD,EAAE,SAAe;gBAAf,0BAAA,EAAA,eAAe;gBAC3F,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBAEnC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;oBACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC3C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;qBAClD;iBACJ;gBAED,OAAO,KAAK,CAAC;YACjB,CAAC;YAVe,mBAAa,gBAU5B,CAAA;YAED,SAAgB,YAAY,CAAC,IAAqB,EAAE,SAAe;gBAAf,0BAAA,EAAA,eAAe;gBAC/D,IAAI,GAAG,GAAoB,EAAE,CAAC;gBAE9B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;oBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACzC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBAChB,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;qBAClF;iBACJ;gBAED,OAAO,GAAG,CAAC;YACf,CAAC;YAXe,kBAAY,eAW3B,CAAA;YAED,SAAgB,aAAa,CAAC,KAAuB,EAAE,SAAe;gBAAf,0BAAA,EAAA,eAAe;gBAClE,OAAO,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,EAA7B,CAA6B,CAAC,CAAC;YAC5D,CAAC;YAFe,mBAAa,gBAE5B,CAAA;YAED,SAAgB,eAAe,CAAC,IAAyB,EAAE,UAAgC;gBACvF,IAAI,CAAC,IAAI;oBACL,OAAO,EAAE,CAAC;gBAEd,IAAI,CAAC,UAAU;oBACX,UAAU,GAAG,EAAE,CAAC;gBAEpB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAE3B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;oBACpC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;wBACzB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;4BAC9B,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;yBAC1C;qBACJ;iBACJ;qBAAM;oBACH,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;oBAE7B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE;wBAE3C,IAAI,WAAW,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;wBAC3D,IAAI,WAAW;4BACX,OAAO,CAAC,OAAO,EAAE,CAAC;wBAEtB,IAAI,eAAe,GAAG,CAAC,OAAO,CAAC,CAAC;wBAEhC,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;4BACzB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;gCAC9B,IAAI,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,EACrB,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;gCACvC,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE;oCACpB,IAAI,gBAAgB,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;oCACrE,IAAI,CAAC,gBAAgB;wCACjB,YAAY,CAAC,OAAO,EAAE,CAAC;oCAE3B,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oCACnC,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;oCAErC,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE;wCACnC,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE;4CAChC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;qCACnD;iCACJ;;oCACG,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;6BAC9C;yBACJ;wBAED,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;qBACpC;iBACJ;gBAED,OAAO,UAAU,CAAC;YACtB,CAAC;YApDe,qBAAe,kBAoD9B,CAAA;YAED,SAAgB,6BAA6B,CAAC,IAAyB,EAAE,UAAgC;YAEzG,CAAC;YAFe,mCAA6B,gCAE5C,CAAA;YAED,SAAgB,aAAa,CAAC,WAA8B,EAAE,SAA4B,EAAE,MAAuB,EAAE,GAAY;gBAE7H,IAAI,KAAK,GAAoC,EAAE,CAAC;gBAEhD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE;oBACnC,WAAW,CAAC,OAAO,CAAC,UAAA,IAAI;wBACpB,KAAK,CAAC,IAAI,CAAC;4BACP,KAAK,EAAE,IAAI;4BACX,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,IAAI;4BACZ,MAAM,EAAE,CAAC;yBACZ,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;oBAC/B,SAAS,CAAC,OAAO,CAAC,UAAA,IAAI;wBAClB,KAAK,CAAC,IAAI,CAAC;4BACP,KAAK,EAAE,IAAI;4BACX,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,KAAK;4BACb,MAAM,EAAE,CAAC;yBACZ,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;iBACN;gBAED,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;oBACzB,IAAI,EAAE,GAAqC,EAAE,CAAC;oBAC9C,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;wBACZ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;4BACR,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBACjB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACnD,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;wBACrB,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;wBAChB,IAAI,MAAM,GAAG,CAAC,EAAE;4BACZ,KAAK,CAAC,IAAI,CAAC;gCACP,KAAK,EAAE,IAAI;gCACX,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC;gCACpB,MAAM,EAAE,KAAK;gCACb,MAAM,EAAE,MAAM;6BACjB,CAAC,CAAC;yBACN;oBACL,CAAC,CAAC,CAAC;iBACN;gBAED,YAAY,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,UAAA,CAAC;oBAC/G,IAAI,GAAG;wBACH,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,CAAC,CAAC,CAAC;YACP,CAAC;YApDe,mBAAa,gBAoD5B,CAAA;YAED,SAAgB,YAAY,CAAC,IAAgB;gBACzC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;oBACvB,OAAO,EAAE,CAAC;gBAEd,IAAI,QAAQ,GAAsB,EAAE,CAAC;gBAErC,MAAA,qBAAqB,CAAC,IAAI,EAAE,UAAC,EAAE,EAAE,EAAE,EAAE,EAAE;oBACnC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBACpD,OAAO,IAAI,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,OAAO,QAAQ,CAAC;gBAEhB,6BAA6B;gBAC7B,qCAAqC;gBAErC,+DAA+D;gBAC/D,yDAAyD;gBACzD,6FAA6F;gBAC7F,2CAA2C;gBAC3C,4DAA4D;gBAE5D,mDAAmD;gBACnD,qEAAqE;gBAErE,mCAAmC;gBAEnC,8BAA8B;gBAC9B,mDAAmD;gBACnD,oCAAoC;gBAEpC,sCAAsC;gBACtC,sCAAsC;gBAEtC,uEAAuE;gBAEvE,8CAA8C;gBAC9C,+EAA+E;gBAC/E,0BAA0B;gBAC1B,oDAAoD;gBACpD,mBAAmB;gBACnB,eAAe;gBACf,WAAW;gBACX,cAAc;gBACd,sCAAsC;gBACtC,2DAA2D;gBAC3D,2EAA2E;gBAC3E,eAAe;gBAEf,kBAAkB;gBAClB,iEAAiE;gBACjE,gDAAgD;gBAChD,eAAe;gBACf,WAAW;gBACX,OAAO;gBACP,UAAU;gBACV,8CAA8C;gBAC9C,8BAA8B;gBAC9B,yDAAyD;gBACzD,kCAAkC;gBAClC,+CAA+C;gBAC/C,OAAO;gBACP,GAAG;gBAEH,4BAA4B;gBAC5B,uEAAuE;gBACvE,KAAK;YACT,CAAC;YAnEe,kBAAY,eAmE3B,CAAA;YAED,SAAgB,0BAA0B,CAAC,SAA4B;gBACnE,IAAI,EAAE,GAA6E,EAAE,EACjF,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE5B,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;oBACjC,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAA,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;wBACT,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEnB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACtB,8DAA8D;oBAC9D,CAAC,GAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAI,CAAC;oBAE3F,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;wBACN,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;oBAE3E,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBAClC;gBAED,IAAI,MAAM,GAA2D,EAAE,CAAC;gBAExE,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE;oBACd,IAAI,aAAa,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,EACtC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAE1B,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;wBAC3B,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EACX,YAAY,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;wBACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BACvC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;4BACd,YAAY,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;yBACjG;wBACD,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;qBACpC;oBAED,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACjC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC/D,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAEtH,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;iBACzD;gBAED,OAAO,MAAM,CAAC;YAClB,CAAC;YA7Ce,gCAA0B,6BA6CzC,CAAA;YAED,SAAgB,wBAAwB,CAAC,OAAwB,EAAE,eAAuE,EAAE,YAAyB;gBACjK,IAAI,MAAM,GAAyD,EAAE,CAAC;gBAEtE,IAAI,CAAC,OAAO;oBACR,OAAO,MAAM,CAAC;gBAElB,IAAI,CAAC,YAAY;oBACb,YAAY,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAEpC,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACvC,OAAO,CAAC,OAAO,CAAC,UAAA,CAAC;oBACb,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChG,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE5B,KAAK,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;oBACvC,IAAI,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oBAEjC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAEzD,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;oBAExB,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;oBACjC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC3D,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBAC/D,IAAI,WAAW,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBACzC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAEnI,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,EAAE;wBACnC,WAAW,CAAC,OAAO,CAAC,UAAA,KAAK;4BACrB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;gCACtC,KAAK,CAAC,OAAO,EAAE,CAAC;4BACpB,MAAM,CAAC,IAAI,CAAC;gCACR,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE;gCAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,UAAA,EAAE;oCACnC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC7E,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;oCAC/B,OAAO,EAAE,CAAC;gCACd,CAAC,CAAC;6BACL,CAAC,CAAC;wBACP,CAAC,CAAC,CAAC;qBACN;iBACJ;gBAED,yBAAyB;gBACzB,kEAAkE;gBAClE,wGAAwG;gBACxG,4CAA4C;gBAC5C,sDAAsD;gBAEtD,OAAO,MAAM,CAAC;YAClB,CAAC;YAnDe,8BAAwB,2BAmDvC,CAAA;YAED,SAAgB,oBAAoB,CAAC,SAAoB;gBAErD,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EACzC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC/B,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;gBACjC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAElC,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;gBACxB,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBAE/B,mCAAmC;gBAEnC,IAAI,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;gBAClC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;gBAE3B,OAAO,OAAO,CAAC;YACnB,CAAC;YAlBe,0BAAoB,uBAkBnC,CAAA;YAED,SAAgB,gBAAgB,CAAC,MAAmB,EAAE,MAAe;gBACjE,IAAI,SAAS,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAC7E,KAAK,GAAG,IAAI,KAAK,EAAE,EACnB,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAEvC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;gBAC3C,KAAK,CAAC,MAAM,GAAG;oBACX,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC/B,CAAC,CAAC;gBAEF,mCAAmC;gBAEnC,oFAAoF;gBACpF,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;gBAE7D,OAAO,OAAO,CAAC;YACnB,CAAC;YAjBe,sBAAgB,mBAiB/B,CAAA;YAED,SAAgB,oBAAoB,CAAC,KAAiB,EAAE,KAAa,EAAE,MAAc;gBACjF,IAAI,OAAsB,CAAC;gBAE3B,IAAI,QAAQ,CAAC,eAAe,CAAC,iBAAiB,EAAE;oBAC5C,OAAO,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBACxC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;oBACnB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;oBAC5B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC9B,OAAO,CAAC,OAAO,GAAG;wBACd;4BACI,IAAI,EAAE,KAAY;4BAClB,KAAK,EAAE,KAAK;4BACZ,MAAM,EAAE,MAAM;yBACjB;qBACJ,CAAC;oBACF,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;oBAC3D,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;oBAChC,qDAAqD;oBACrD,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,qBAA4B,CAAC;oBACpD,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC9B;qBAAM;oBACH,IAAI,aAAa,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAChE,IAAI,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAe,CAAC;oBACxF,OAAO,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,EACpC,KAAK,EACL,MAAM,EACN,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,YAAY,EAClB,KAAK,CAAC,YAAY,CAAC,CAAC;oBACxB,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;oBAChC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC9B;gBAED,oGAAoG;gBACpG,kHAAkH;gBAClH,yHAAyH;gBACzH,8DAA8D;gBAC9D,6DAA6D;gBAC7D,kCAAkC;gBAClC,eAAe;gBAEf,OAAO,OAAO,CAAC;gBAEf,qDAAqD;gBACrD,yGAAyG;gBAEzG,iCAAiC;gBACjC,uDAAuD;gBAEvD,oDAAoD;gBACpD,uCAAuC;gBAEvC,2BAA2B;YAC/B,CAAC;YAzDe,0BAAoB,uBAyDnC,CAAA;YAEU,2BAAqB,GAAG,CAAC;gBAChC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE7B,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAEhC,OAAO,UAAC,IAAgB,EAAE,IAA0E;oBAChG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;wBAChC,OAAO;oBAEL,IAAA,QAAQ,GAA4B,IAAI,SAAhC,EAAE,QAAQ,GAAkB,IAAI,SAAtB,EAAE,WAAW,GAAK,IAAI,YAAT,EACjC,QAAQ,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC,eAAe;oBAEvD,IAAK,QAAiC,CAAC,gBAAgB,EAAE;wBACrD,IAAI,cAAc,GAAyB,QAAQ,CAAC;wBACpD,IAAI,CAAS,EAAE,CAAS,EAAE,CAAS,CAAC;wBACpC,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;wBACjC,IAAI,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,QAAiC,CAAC;wBAC3E,IAAI,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;wBACnC,IAAI,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC;wBACzC,IAAI,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,CAAC;wBACjD,IAAI,KAA+D,CAAC;wBACpE,IAAI,KAAa,EAAE,GAAW,CAAC;wBAE/B,IAAI,KAAK,KAAK,IAAI,EAAE;4BAChB,0BAA0B;4BAE1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE;gCAC1F,SAAS;gCAET,IAAI,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAA4B,CAAC;gCAElE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gCACrC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gCAEjE,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oCAEnC,IAAI,CAAC,GAAG,CAAC,EAAE;wCACP,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wCAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qCACzB;yCAAM;wCACH,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wCAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;qCACzB;oCAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;wCAC7B,SAAS;oCAEb,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oCAEzB,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;wCAC5C,SAAS;oCAEb,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;wCAClM,OAAO;iCAEd;6BACJ;iCACI,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gCAE9B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oCAEzC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oCAElB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;oCAC/C,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oCAEjF,IAAI,QAAQ,KAAK,KAAK,CAAC,qBAAqB,EAAE;wCAC1C,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4CAEnC,IAAI,CAAC,GAAG,CAAC,EAAE;gDACP,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gDAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gDACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;6CACzB;iDAAM;gDACH,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gDAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gDACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;6CACzB;4CAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gDAClM,OAAO;yCAEd;qCACJ;yCAAM;wCACH,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;4CAEtC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4CAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CAEtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gDAClM,OAAO;yCAEd;qCACJ;iCACJ;6BAEJ;iCACI;gCAED,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gCACrC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gCAEjE,IAAI,QAAQ,KAAK,KAAK,CAAC,qBAAqB,EAAE;oCAC1C,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wCACnC,IAAI,CAAC,GAAG,CAAC,EAAE;4CACP,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4CAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;yCACzB;6CAAM;4CACH,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4CAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;yCACzB;wCAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;4CAClM,OAAO;qCAEd;iCACJ;qCAAM;oCACH,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;wCAEtC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wCAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wCAEtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;4CAClM,OAAO;qCAEd;iCACJ;6BACJ;yBAEJ;6BACI,IAAI,QAAQ,KAAK,SAAS,EAAE;4BAE7B,8BAA8B;4BAE9B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gCAEzB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oCAEzC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oCAElB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;oCAC/C,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oCAEjF,IAAI,QAAQ,KAAK,KAAK,CAAC,qBAAqB,EAAE;wCAC1C,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4CAEnC,IAAI,CAAC,GAAG,CAAC,EAAE;gDACP,CAAC,GAAG,CAAC,CAAC;gDACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gDACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;6CACb;iDAAM;gDACH,CAAC,GAAG,CAAC,CAAC;gDACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gDACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;6CACb;4CAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gDAClM,OAAO;yCAEd;qCACJ;yCAAM;wCACH,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;4CAEtC,CAAC,GAAG,CAAC,CAAC;4CACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CAEV,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gDAClM,OAAO;yCAEd;qCACJ;iCACJ;6BAEJ;iCAAM;gCAEH,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gCACrC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gCAEpE,IAAI,QAAQ,KAAK,KAAK,CAAC,qBAAqB,EAAE;oCAC1C,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wCAEnC,IAAI,CAAC,GAAG,CAAC,EAAE;4CACP,CAAC,GAAG,CAAC,CAAC;4CACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;yCACb;6CAAM;4CACH,CAAC,GAAG,CAAC,CAAC;4CACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;yCACb;wCAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;4CAClM,OAAO;qCAEd;iCACJ;qCAAM;oCACH,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;wCAEtC,CAAC,GAAG,CAAC,CAAC;wCACN,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wCACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wCAEV,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;4CAClM,OAAO;qCAEd;iCACJ;6BACJ;yBACJ;qBACJ;yBACI,IAAK,QAA2B,CAAC,UAAU,EAAE;wBAC9C,IAAI,GAAG,GAAmB,QAAQ,CAAC;wBACnC,IAAI,GAAkB,EAAE,GAAkB,EAAE,GAAkB,CAAC;wBAC/D,IAAI,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;wBAE9C,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;wBAC5B,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;wBAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4BAE5C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BACpB,IAAI,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;4BAE7E,IAAI,YAAY,KAAK,SAAS;gCAAE,SAAS;4BAEzC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACvB,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACvB,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAEvB,IAAI,YAAY,CAAC,YAAY,KAAK,IAAI,EAAE;gCAEpC,IAAI,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;gCACpC,IAAI,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC;gCAEjD,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gCAChB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gCAChB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gCAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oCAEnD,IAAI,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;oCAEnC,IAAI,SAAS,KAAK,CAAC;wCAAE,SAAS;oCAE9B,IAAI,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oCAEvC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;oCACtE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;oCACtE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;iCAEzE;gCAED,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gCACZ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gCACZ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;6BACf;iCAAM;gCACH,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCACb,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCACb,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;6BAChB;4BAED,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gCAC/F,OAAO;yBACd;qBAEJ;gBAEL,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEM,wBAAkB,GAAG,CAAC;gBAC7B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAE7B,OAAO,UAAC,KAAkB,EAAE,cAA+B;oBACvD,IAAI,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAC7C,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAC7C,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAC7C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EACpB,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,EAClC,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAC3B,KAAa,CAAC;oBAElB,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,CAAC,CAAC;wBAC7D,OAAO,CAAC,cAAc,CAAC,CAAC;oBAE5B,IAAI,UAAU,GAAG,MAAM,KAAK,CAAC,CAAC;oBAE9B,IAAI,UAAU,EAAE;wBACZ,yBAAyB;wBACzB,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC/C;yBAAM;wBACH,0BAA0B;wBAC1B,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACrD;oBAED,qDAAqD;oBACrD,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;oBAC1B,IAAI,SAAS,KAAK,CAAC,CAAC;wBAAE,SAAS,GAAG,CAAC,CAAC;oBACpC,iDAAiD;oBACjD,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;oBAC1B,IAAI,SAAS,KAAK,CAAC;wBAAE,SAAS,GAAG,CAAC,CAAC;oBAEnC,IAAI,UAAU,EAAE;wBACZ;;;;;;;;;;;;2BAYG;wBAEH,+BAA+B;wBAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACvG,IAAI,QAAQ,EAAE;4BACV,OAAO;gCACH,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;gCAC5D,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;6BAC/D,CAAC;yBACL;qBACJ;yBAAM;wBACH;;;;;;;;;;;2BAWG;wBAEH,gCAAgC;wBAChC,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACvG,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAEvG,IAAI,YAAY,IAAI,YAAY,EAAE;4BAC9B,OAAO;gCACH,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC;gCACnD,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;gCACpE,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC;6BAC1D,CAAC;yBACL;qBACJ;oBAED,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC5B,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEM,iCAA2B,GAAG,CAAC;gBACtC,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAC7B,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAE7B,wGAAwG;gBACxG,8DAA8D;gBAC9D,8DAA8D;gBAC9D,8DAA8D;gBAC9D,8BAA8B;gBAC9B,IAAI;gBAEJ,IAAI,UAAU,GAAG,UAAC,EAAe,EAAE,EAAmB,EAAE,OAAe;oBACnE,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC9B,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC9B,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEnC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAExD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClG,CAAC,CAAC;gBACF,IAAI,cAAc,GAAG,UAAC,EAAe,EAAE,EAAmB,EAAE,OAAe;oBACvE,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC9B,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC9B,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEnC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAErB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClG,CAAC,CAAC;gBAEF,OAAO,UAAC,KAAkB,EAAE,cAA+B,EAAE,WAAmB,EAAE,IAAc;oBAC5F,IAAI,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAC7C,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAC7C,EAAE,GAAG,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAC7C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EACpB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EACpB,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,CAAC,EAClC,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,EAC3B,KAAa,EACb,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC;oBAE5D,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEvE,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,CAAC,CAAC;wBAC7D,OAAO,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAA,gIAAgI;oBAElM,IAAI,UAAU,GAAG,MAAM,KAAK,CAAC,CAAC;oBAE9B,IAAI,UAAU,EAAE;wBACZ,yBAAyB;wBACzB,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC/C;yBAAM;wBACH,0BAA0B;wBAC1B,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACrD;oBAED,qDAAqD;oBACrD,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;oBAC1B,IAAI,SAAS,KAAK,CAAC,CAAC;wBAAE,SAAS,GAAG,CAAC,CAAC;oBACpC,iDAAiD;oBACjD,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;oBAC1B,IAAI,SAAS,KAAK,CAAC;wBAAE,SAAS,GAAG,CAAC,CAAC;oBAEnC,IAAI,UAAU,EAAE;wBACZ;;;;;;;;;;;;2BAYG;wBAEH,+BAA+B;wBAC/B,IAAI,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACvG,IAAI,QAAQ,EAAE;4BACV,OAAO,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC;gCACvG,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;4BACzG,UAAU;4BACV,mEAAmE;4BACnE,kEAAkE;4BAClE,IAAI;yBACP;qBACJ;yBAAM;wBACH;;;;;;;;;;;2BAWG;wBAEH,gCAAgC;wBAChC,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBACvG,IAAI,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAEvG,IAAI,YAAY,IAAI,YAAY,EAAE;4BAC9B,OAAO,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC;gCAC9F,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC;gCAC5G,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC;4BACpG,UAAU;4BACV,0DAA0D;4BAC1D,2EAA2E;4BAC3E,6DAA6D;4BAC7D,IAAI;yBACP;qBACJ;oBAED,OAAO,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;gBAClE,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,0BAA0B;YACf,uCAAiC,GAAG,CAAC;gBAC5C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACvB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,EACtB,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAE/B,IAAI,SAAS,GAAG,UAAC,EAAe,EAAE,GAAsB,EAAE,OAAe;oBACrE,IAAI,KAAK,GAAG,CAAC,CAAC;oBACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE;wBACnD,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBACjF;oBACD,OAAO,KAAK,CAAC;gBACjB,CAAC,CAAC;gBAEF,OAAO,UAAC,QAA2B,EAAE,IAAa,EAAE,WAAkB;oBAAlB,4BAAA,EAAA,kBAAkB;oBAClE,EAAE,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;oBACzB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEhB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;wBACnB,OAAO,MAAM,CAAC;oBAElB,IAAI,SAAS,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,EAChD,UAAU,GAAG,GAAG,EAChB,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAC9B,CAAC,GAAG,CAAC,EACL,CAAS,EAAE,CAAS,EAAE,CAAS,CAAC;oBAEpC,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACf,aAAa;wBACb,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;4BAC3B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;gCAC/B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;oCAC/B,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oCACtH,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;wCACjB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;wCACnB,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;qCAC9B;oCACD,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;oCAC7C,IAAI,CAAC,GAAG,SAAS,EAAE;wCACf,SAAS,GAAG,CAAC,CAAC;wCACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qCACnB;iCACJ;6BACJ;yBACJ;qBACJ;yBAAM;wBACH,OAAO,CAAC,GAAG,UAAU,EAAE;4BAEnB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;4BACzC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;4BACzC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;4BAEzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;gCAC7B,SAAS;4BAEb,CAAC,EAAE,CAAC;4BAEJ,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACtH,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE;gCACjB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gCACnB,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC;6BAC9B;4BAED,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;4BAC7C,IAAI,CAAC,GAAG,SAAS,EAAE;gCACf,SAAS,GAAG,CAAC,CAAC;gCACd,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;6BACnB;yBACJ;qBACJ;oBAED,0CAA0C;oBAE1C,OAAO,MAAM,CAAC;gBAElB,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,SAAgB,gBAAgB,CAAC,KAAkB;gBAC/C,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAClF,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC5D,CAAC;YAHe,sBAAgB,mBAG/B,CAAA;YAED,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAE9B,SAAgB,wBAAwB,CAAC,KAAoB,EAAE,GAAkB,EAAE,CAAS,EAAE,IAAoB;gBAC9G,IAAI,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAC5B,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EACtC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,EACxD,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EACzE,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAChC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAChC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EACxB,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EACf,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAE1B,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;oBAClB,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;;oBAEzB,MAAM,GAAG,CAAC,CAAC;gBAEf,IAAI,MAAM,IAAI,CAAC,EAAE;oBACb,UAAU;oBACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5E;gBAED,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EACpB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAChD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;gBAEpC,IAAI,MAAM,GAAG,CAAC,EAAE;oBACZ,YAAY;oBACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3G;gBAED,WAAW;gBACX,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7G,CAAC;YAhCe,8BAAwB,2BAgCvC,CAAA;YAED,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAC1B,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAE7B,SAAgB,0BAA0B,CAAC,GAA0C,EAAE,SAAiB,EAAE,CAAM;gBAAN,kBAAA,EAAA,MAAM;gBAC5G,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EACpB,MAAM,GAAsB,EAAE,CAAC;gBAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;oBACvC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBAC7B,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;oBAE7B,IAAI,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC;wBAC7B,SAAS;oBAEb,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAE1C,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAzB,CAAyB,CAAC,EAC7K,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAzB,CAAyB,CAAC,CAAC;oBAElL,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAC,CAAC,IAAK,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAX,CAAW,CAAC,EACrD,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,UAAC,CAAC,IAAK,OAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAX,CAAW,CAAC,CAAC;oBAExD,IAAI,KAAK,GAAG,KAAK,EAAE;wBACf,uBAAuB;wBACvB,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,EACzB,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;wBAC7B,QAAQ,CAAC,OAAO,CAAC,UAAA,CAAC;4BACd,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACtB,IAAI,GAAG,GAAG,CAAC;gCACP,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBACrD,CAAC,CAAC,CAAC;wBAEH,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;4BACZ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BACtB,IAAI,GAAG,GAAG,CAAC;gCACP,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;wBACrD,CAAC,CAAC,CAAC;qBACN;oBAED,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAChC,UAAU,GAAoB,EAAE,EAChC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;oBAEtB,KAAK,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;wBACvC,sBAAsB;wBACtB,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;4BAC7C,SAAS;wBAEb,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;wBAE5B,EAAE,GAAG,EAAE,CAAC;qBACX;oBAED,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC3B;gBAED,OAAO,MAAM,CAAC;YAClB,CAAC;YAtDe,gCAA0B,6BAsDzC,CAAA;YAED,SAAgB,UAAU,CAAC,GAAmB,EAAE,CAAgB;gBAC5D,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBACrD,GAAG,CAAC,YAAY,EAAE,CAAC;YACvB,CAAC;YAHe,gBAAU,aAGzB,CAAA;QACL,CAAC,EAnwGkB,KAAK,GAAL,aAAK,KAAL,aAAK,QAmwGvB;IAAD,CAAC,EAnwGU,OAAO,GAAP,WAAO,KAAP,WAAO,QAmwGjB;AAAD,CAAC,EAnwGM,GAAG,KAAH,GAAG,QAmwGT;AAED,CAAC;IACG,KAAK,CAAC,wBAAwB,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC;IAC5E,KAAK,CAAC,kCAAkC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC;IAChG,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;IACjD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,GAAG;QAC9B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC,CAAC;IACF,IAAI,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC;IACzD,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG;QAClC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC,CAAC;AACN,CAAC,CAAC,EAAE,CAAC;AAEL,IAAI,KAAK,EAAE;IACP,mDAAmD;IACnD,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;QACrF,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE;YAClE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;SACzC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;QACjB,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG;YAEhC,IAAI,CAAC,EACD,CAAC,EACD,IAAI,EACJ,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,GAAG,EAAE,CAAC;YAEvB,gDAAgD;YAChD,6CAA6C;YAE7C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAEjD,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAEjC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;gBAEvB,gBAAgB;gBAEhB,UAAU,CAAC,MAAM,EAAE,CAAC;gBAEpB,oEAAoE;gBAEpE,IAAI,IAAI,YAAY,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAEtG,iDAAiD;oBAEjD,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC;oBAEzC,WAAW,GAAS,IAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBAErD,qCAAqC;oBAErC,IAAI,WAAW,KAAK,eAAe,EAAE;wBAEjC,qBAAqB;wBAErB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBAElC;iBAEJ;aAEJ;YAED,yBAAyB;YAEzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAE9C,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBAE9B,kCAAkC;gBAElC,6CAA6C;gBAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAExB,0BAA0B;gBAE1B,oCAAoC;gBACpC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;aAExB;QAEL,CAAC,CAAC;KACL;CACJ;AAED,gBAAgB;AAChB,0IAA0I;AAC1I,wKAAwK;AACxK,uDAAuD;AACvD,qDAAqD;AACrD,gCAAgC;AAChC,kCAAkC;AAClC,QAAQ;AACR,+DAA+D;AAC/D,yDAAyD;AACzD,oCAAoC;AACpC,kCAAkC;AAClC,QAAQ;AACR,GAAG;;;;;;;;;;;;;;;AC/2GH,IAAO,GAAG,CAyqBT;AAzqBD,WAAO,GAAG;IAAC,IAAA,OAAO,CAyqBjB;IAzqBU,WAAA,OAAO;QAAC,IAAA,KAAK,CAyqBvB;QAzqBkB,WAAA,KAAK;YAEpB,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG;gBAC9B,QAAQ,EAAE;oBACN,GAAG,EAAkB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;oBAC/C,8EAA8E;oBAC9E,QAAQ,EAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;oBACtE,IAAI,EAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;oBAChF,IAAI,EAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;iBACnF;gBACD,YAAY,EAAE;oBACV,0BAA0B;oBAE1B,iOAAiO;oBACjO,gCAAgC;oBAChC,8BAA8B;oBAC9B,6BAA6B;oBAC7B,4BAA4B;oBAC5B,wBAAwB;oBACxB,iCAAiC;oBAEjC,0BAA0B;oBAC1B,oBAAoB;oBACpB,wBAAwB;oBAExB,mBAAmB;oBACnB,uBAAuB;oBACvB,uBAAuB;oBAEvB,eAAe;oBAEf,2EAA2E;oBAE3E,cAAc;oBAEd,qDAAqD;oBACrD,uDAAuD;oBACvD,2CAA2C;oBAC3C,sBAAsB;oBACtB,+EAA+E;oBAC/E,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,cAAc,EAAE;oBACZ,0BAA0B;oBAE1B,wBAAwB;oBAExB,oBAAoB;oBACpB,oBAAoB;oBAEpB,mBAAmB;oBACnB,uBAAuB;oBACvB,uBAAuB;oBAEvB,8BAA8B;oBAC9B,gCAAgC;oBAChC,GAAG;oBAEH,eAAe;oBAEf,sCAAsC;oBACtC,8CAA8C;oBAE9C,8BAA8B;oBAC9B,UAAU;oBACV,GAAG;oBAEH,uCAAuC;oBACvC,oCAAoC;oBACpC,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;aACf,CAAC;YAEF,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG;gBACnC,QAAQ,EAAE;oBACN,kDAAkD;oBAClD,8EAA8E;oBAC9E,yEAAyE;oBACzE,IAAI,EAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;oBAChF,IAAI,EAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;iBACnF;gBACD,YAAY,EAAE;oBACV,wBAAwB;oBAExB,+BAA+B;oBAC/B,gCAAgC;oBAChC,2BAA2B;oBAC3B,6BAA6B;oBAE7B,0BAA0B;oBAE1B,uBAAuB;oBACvB,uBAAuB;oBAEvB,eAAe;oBACf,sBAAsB;oBACtB,sDAAsD;oBACtD,kBAAkB;oBAClB,+EAA+E;oBAC/E,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,cAAc,EAAE;oBACZ,wBAAwB;oBAExB,oBAAoB;oBACpB,oBAAoB;oBAEpB,uBAAuB;oBACvB,uBAAuB;oBAEvB,6EAA6E;oBAC7E,6EAA6E;oBAC7E,yCAAyC;oBAEzC,+CAA+C;oBAC/C,sDAAsD;oBACtD,uDAAuD;oBACvD,gCAAgC;oBAChC,MAAM;oBAEN,2CAA2C;oBAC3C,4BAA4B;oBAC5B,kCAAkC;oBAClC,6CAA6C;oBAC7C,8BAA8B;oBAC9B,EAAE;oBACF,GAAG;oBAEH,8BAA8B;oBAC9B,gCAAgC;oBAChC,GAAG;oBAEH,eAAe;oBACf,sCAAsC;oBACtC,8CAA8C;oBAE9C,8BAA8B;oBAC9B,UAAU;oBACV,GAAG;oBAEH,oDAAoD;oBACpD,+DAA+D;oBAC/D,GAAG;iBACN,CAAC,IAAI,CAAC,IAAI,CAAC;aACf,CAAC;YAEF;gBAAoC,kCAAuB;gBAIvD,wBAAY,GAAkB,EAAE,QAAiB,EAAE,gBAA8B,EAAE,gBAA0B,EAAE,KAAe;oBAA9H,YACI,iBAAO,SAiDV;oBA/CG,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,MAAM;wBAC7C,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAExD,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC;wBAC9B,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAE9B,IAAI,QAAQ,GAAG,KAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAE1J,QAAQ,CAAC,IAAI,CAAC,KAAuB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;oBAClE,QAAQ,CAAC,IAAI,CAAC,KAAuB,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;oBAEtE,IAAI,CAAC,KAAK,EAAE;wBACR,IAAI,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;wBAC7B,IAAI,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;wBAE7B,IAAI,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;wBAC7B,IAAI,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;wBAE7B,QAAQ,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;wBAEzB,IAAI,QAAQ,EAAE;4BACV,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CACvB,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EACd,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EACnB,CAAC,EAAE,CAAC,EAAE,CAAC,CACV,CAAC;yBACL;6BAAM;4BACH,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CACvB,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EACd,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EACd,CAAC,EAAE,CAAC,EAAE,CAAC,CACV,CAAC;yBACL;wBAED,KAAI,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC;wBACjE,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC;qBACxE;yBAAM;wBACH,KAAI,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,YAAY,CAAC;wBACtE,KAAI,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,cAAc,CAAC;qBAC7E;oBAED,KAAI,CAAC,WAAW,GAAG,KAAK,CAAC;oBACzB,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;oBAC5B,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,KAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBACvB,KAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,iBAAiB;oBAC5C,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;;gBAC7B,CAAC;gBACL,qBAAC;YAAD,CAvDA,AAuDC,CAvDmC,KAAK,CAAC,iBAAiB,GAuD1D;YAvDY,oBAAc,iBAuD1B,CAAA;YAED,SAAgB,4BAA4B,CAAC,QAAqB,EAAE,YAAsB;gBAEtF,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,gBAAgB,EAAE;oBAC3G,OAAO,QAAQ,CAAC,WAAW,CAAC,GAA2B,CAAC;iBAC3D;gBAED,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ;oBAC/B,OAAO,IAAI,CAAC;gBAEhB,IAAI,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAEjC,+BAA+B;gBAC/B,4BAA4B;gBAE5B,cAAc;gBAEd,gDAAgD;gBAChD,0BAA0B;gBAC1B,8BAA8B;gBAC9B,8BAA8B;gBAC9B,8BAA8B;gBAC9B,sBAAsB;gBACtB,2BAA2B;gBAE3B,yCAAyC;gBACzC,GAAG;gBAEH,uBAAuB;gBACvB,gDAAgD;gBAChD,kCAAkC;gBAClC,kCAAkC;gBAClC,kBAAkB;gBAElB,IAAI,WAAW,GAAG,QAAQ,CAAC,WAAW,EAClC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAElC,IAAI,WAAW,GAAG,QAAQ,CAAC,OAAO,EAC9B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,YAAY,CAAC,EACzD,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,GAAW,EAC5C,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBAE5C,4EAA4E;gBAE5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;oBAClC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEvB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;oBAEZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACrB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;iBACxB;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE;oBAClC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEvB,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;oBAEZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACjB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACrB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;iBACxB;gBAED,IAAI,CAAC,OAAO,CAAC,MAAM;oBACf,OAAO;gBAEX,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBAC1C,IAAI,iBAAiB,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAEjE,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBACxG,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,0BAA0B,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClG,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAEtF,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC/D,wGAAwG;gBAExG,iEAAiE;gBACjE,6CAA6C;gBAE7C,IAAI,QAAQ,CAAC,cAAc,KAAK,IAAI;oBAChC,QAAQ,CAAC,cAAc,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAEjD,IAAI,QAAQ,CAAC,WAAW,KAAK,IAAI;oBAC7B,QAAQ,CAAC,WAAW,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAE5C,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAE5C,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAEhE,IAAI,CAAC,QAAQ,CAAC,WAAW;oBACrB,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC;gBAE9B,QAAQ,CAAC,WAAW,CAAC,GAAG,GAAG,QAAQ,CAAC;gBAEpC,IAAI,CAAC,YAAY,EAAE;oBACf,OAAO,QAAQ,CAAC,OAAO,CAAC;oBACxB,OAAO,QAAQ,CAAC,WAAW,CAAC;oBAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC;oBACxB,OAAO,QAAQ,CAAC,YAAY,CAAC;oBAC7B,OAAO,QAAQ,CAAC,QAAQ,CAAC;oBAEzB,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE;wBACjC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;wBAC5B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;iBACN;gBAED,2DAA2D;gBAE3D,OAAO,QAAQ,CAAC;YACpB,CAAC;YAnHe,kCAA4B,+BAmH3C,CAAA;YAED,SAAgB,4BAA4B,CAAC,QAAqB,EAAE,gBAA2B,EAAE,YAAsB,EAAE,aAAuB;gBAC5I,+HAA+H;gBAC/H,kBAAkB;gBAElB,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY;oBACnC,OAAO,IAAI,CAAC;gBAEhB,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,EAAE;oBAC7C,IAAI,YAAY,GAAG,QAAQ,CAAC,YAAY,EACpC,cAAc,GAAG,KAAK,CAAC;oBAE3B,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;wBACpC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;4BAC3D,cAAc,GAAG,IAAI,CAAC;4BACtB,MAAM;yBACT;qBACJ;oBACD,IAAI,CAAC,cAAc;wBACf,OAAO,IAAI,CAAC;iBACnB;gBAED,IAAI,OAAO,GAAkB,IAAI,CAAC;gBAClC,IAAI,KAAK,GAAY,KAAK,CAAC;gBAE3B,IAAI,CAAC,aAAa,EAAE;oBAChB,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE;wBACpG,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAoB,CAAC;wBACpD,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;qBAC1C;yBAAM;wBAEH,IAAI,CAAC,QAAQ,CAAC,OAAO;4BACjB,OAAO,IAAI,CAAC;wBAEhB,KAAK,GAAG,KAAK,CAAC;wBAEd,QAAQ,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE;4BACpC,KAAK,CAAC,EAAE,MAAM;gCACV,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gCAC1H,MAAM;4BACV,SAAS,MAAM;gCACX,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gCAClF,MAAM;yBACb;wBAED,IAAI,CAAC,QAAQ,CAAC,WAAW;4BACrB,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC;wBAE9B,QAAQ,CAAC,WAAW,CAAC,GAAG,GAAG,OAAO,CAAC;wBACnC,QAAQ,CAAC,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;wBAErC,IAAI,CAAC,YAAY,EAAE;4BACf,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;4BAC9B,OAAO,QAAQ,CAAC,OAAO,CAAC;4BAExB,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE;gCAChC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;4BAChC,CAAC,CAAC,CAAC;yBACN;qBACJ;iBACJ;gBAED,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,CAAC,CAAC;YAC1G,CAAC;YA9De,kCAA4B,+BA8D3C,CAAA;YAWD,SAAgB,0BAA0B,CAAC,QAAqB,EAAE,SAA+B,EAAE,gBAA2B,EAAE,aAAuB;gBACnJ,IAAI,MAAM,GAAiB,EAAE,CAAC;gBAE9B,IAAI,CAAC,gBAAgB;oBACjB,gBAAgB,GAAG,EAAE,CAAC;gBAE1B,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC;oBAC5B,OAAO,MAAM,CAAC;gBAEd,IAAA,KAA+B,SAAS,CAAC,GAAG,EAA1C,KAAK,WAAA,EAAE,IAAI,UAAA,EAAE,KAAK,WAAA,EAAE,IAAI,UAAA,EAC1B,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAErC,IAAI,QAAQ,CAAC,mBAAmB;oBAC5B,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,mBAA0B,EAAE,CAAC,CAAC,CAAC;gBAEjE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,QAAQ;oBAE5B,IAAI,GAAG,GAAG,4BAA4B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;oBAEzF,IAAI,GAAG,EAAE;wBACL,IAAI,GAAG,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;wBAEjD,IAAI,GAAG,EAAE;4BAEL,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;4BAEpC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;4BAE9B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;4BAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;4BAC1B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC;4BAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;4BAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;4BACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;4BACtC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAElF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;yBAErB;qBACJ;gBACL,CAAC,CAAC,CAAC;gBAEH,OAAO,MAAM,CAAC;YAClB,CAAC;YA3Ce,gCAA0B,6BA2CzC,CAAA;YAEU,wBAAkB,GAAG,CAAC;gBAE7B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAC7E,EAAE,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAC7E,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAE5B,OAAO,UAAC,GAAW,EAAE,GAAW,EAAE,MAAwB;oBACtD,iBAAiB;oBAEjB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBAE3G,OAAO,MAAM,CAAC;oBACd,uQAAuQ;gBAC3Q,CAAC,CAAA;YACL,CAAC,CAAC,EAAE,CAAC;YAEM,2BAAqB,GAAG,CAAC;gBAChC,IAAM,EAAE,GAAG,OAAO,EAAC,+BAA+B;gBAC9C,EAAE,GAAG,OAAO,EAAC,2BAA2B;gBACxC,IAAI,GAAG,EAAE,GAAG,EAAE,EACd,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;gBAEnB,OAAO,UAAC,GAAW;oBACf,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EACjC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEtC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpH,CAAC,CAAA;YACL,CAAC,CAAC,EAAE,CAAC;YAEM,qBAAe,GAAG,CAAC;gBAC1B,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,EAC1B,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE5B,OAAO,UAAC,GAAW,EAAE,GAAW,EAAE,MAAqB;oBACnD,MAAM,CAAC,0BAA0B,CAAC,MAAA,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAA,+BAA+B,CAAC,CAAC,CAAC;oBAEnJ,OAAO,MAAM,CAAC;gBAClB,CAAC,CAAA;YACL,CAAC,CAAC,EAAE,CAAC;YAEM,mBAAa,GAAG,CAAC;gBACxB,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACxC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC1B,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAEhC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC7B,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE7B,kCAAkC;gBAClC,kCAAkC;gBAClC,kCAAkC;gBAElC,gCAAgC;gBAChC,gCAAgC;gBAChC,gCAAgC;gBAEhC,IAAI,iBAAiB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC5C,IAAI,sBAAsB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAEjD,SAAS,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK;oBAE1E,IAAI,SAAS,CAAC;oBAEd,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;wBAElC,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;qBAE9D;yBAAM;wBAEH,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,KAAK,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;qBAE5F;oBAED,IAAI,SAAS,KAAK,IAAI;wBAAE,OAAO,IAAI,CAAC;oBAEpC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnC,sBAAsB,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBAExD,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;oBAEvE,IAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,GAAG;wBAAE,OAAO,IAAI,CAAC;oBAEvE,OAAO;wBACH,QAAQ,EAAE,QAAQ;wBAClB,KAAK,EAAE,sBAAsB,CAAC,KAAK,EAAE;wBACrC,MAAM,EAAE,MAAM;qBACV,CAAC;gBAEb,CAAC;gBAED,SAAS,+BAA+B,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAA,CAAC,EAAE,CAAC,EAAE,CAAC;oBAEhG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACpC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACpC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAEpC,IAAI,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;oBAEtG,uBAAuB;oBAEvB,iBAAiB;oBAEjB,2CAA2C;oBAC3C,2CAA2C;oBAC3C,2CAA2C;oBAE3C,6HAA6H;oBAE7H,OAAO;oBAEP,4CAA4C;oBAC5C,0DAA0D;oBAE1D,+BAA+B;oBAE/B,GAAG;oBAEH,OAAO,YAAY,CAAC;gBAExB,CAAC;gBAED,OAAO,UAAC,SAA0B,EAAE,IAAgB,EAAE,UAAgC;oBAClF,IAAI,QAAQ,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAyB,EAC1D,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;oBAEnC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,WAAW;wBAC9D,OAAO;oBAEX,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;oBACrC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;oBAEjC,IAAI,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,KAAK;wBAChD,OAAO;oBAEX,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;oBACtC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAEpD,sCAAsC;oBAEtC,IAAI,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,KAAK;wBACjD,OAAO;oBAEX,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,EACtB,SAAS,GAAG,QAAQ,CAAC,SAAS,EAC9B,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ;oBACvC,8BAA8B;oBAC9B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,EACpC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAChE,CAAS,EACT,CAAS,EACT,CAAS,CAAC;oBAEd,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;wBAE1C,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAClB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACtB,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAEtB,IAAI,YAAY,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;4BACtB,CAAC,CAAC,+BAA+B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;4BAC5F,CAAC,CAAC,+BAA+B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAEjG,IAAI,YAAY,EAAE;4BACd,8FAA8F;4BAC9F,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;yBACjC;qBACJ;gBACL,CAAC,CAAC;YACN,CAAC,CAAC,EAAE,CAAC;YAEL,mEAAmE;YACnE,wEAAwE;YACxE,gEAAgE;YAChE,uCAAuC;YAEvC,kDAAkD;YAClD,kDAAkD;YAClD,4CAA4C;YAE5C,qEAAqE;YAErE,yCAAyC;YAEzC,oDAAoD;YACpD,6DAA6D;YAE7D,6EAA6E;YAC7E,0IAA0I;YAE1I,2FAA2F;YAE3F,uFAAuF;YAEvF,6DAA6D;YAE7D,uJAAuJ;YACvJ,kTAAkT;YAClT,oGAAoG;YACpG,yCAAyC;YACzC,0DAA0D;YAC1D,6EAA6E;YAC7E,8KAA8K;YAC9K,+BAA+B;YAC/B,sCAAsC;YAEtC,wKAAwK;YAExK,sCAAsC;YACtC,oCAAoC;YAEpC,+BAA+B;YAC/B,wCAAwC;YAExC,sEAAsE;YACtE,mCAAmC;YACnC,iCAAiC;YACjC,yBAAyB;YACzB,aAAa;YAEb,gDAAgD;YAEhD,gDAAgD;YAChD,gDAAgD;YAEhD,qEAAqE;YAErE,+CAA+C;YAE/C,6BAA6B;YAC7B,6CAA6C;YAC7C,mCAAmC;YAEnC,+BAA+B;YAE/B,gDAAgD;YAEhD,cAAc;YACd,sCAAsC;YACtC,OAAO;YACP,GAAG;QACP,CAAC,EAzqBkB,KAAK,GAAL,aAAK,KAAL,aAAK,QAyqBvB;IAAD,CAAC,EAzqBU,OAAO,GAAP,WAAO,KAAP,WAAO,QAyqBjB;AAAD,CAAC,EAzqBM,GAAG,KAAH,GAAG,QAyqBT;;ACzqBD,IAAO,GAAG,CA6aT;AA7aD,WAAO,GAAG;IAAC,IAAA,OAAO,CA6ajB;IA7aU,WAAA,OAAO;QAAC,IAAA,KAAK,CA6avB;QA7akB,WAAA,KAAK;YACpB;gBACI,qBAAY,cAAkB,EAAE,mBAA0B,EAAE,kBAA0B,EAAE,cAAsB,EAAE,WAAkB;oBAAtH,+BAAA,EAAA,kBAAkB;oBAAE,oCAAA,EAAA,0BAA0B;oBAAE,mCAAA,EAAA,0BAA0B;oBAAE,+BAAA,EAAA,sBAAsB;oBAAE,4BAAA,EAAA,kBAAkB;oBAclI,gBAAW,GAAa,EAAE,CAAC;oBAC3B,eAAU,GAAW,CAAC,CAAC;oBACvB,gBAAW,GAAW,CAAC,CAAC;oBACxB,gBAAW,GAAW,CAAC,CAAC;oBACxB,YAAO,GAAW,CAAC,CAAC;oBAEpB,WAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC7B,WAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC7B,OAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAEzB,sBAAiB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAvBpC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;oBACrC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;oBACrC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;oBAC/C,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;oBAC7C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;gBACnC,CAAC;gBAoBD,2BAAK,GAAL,UAAM,MAAsB;oBAA5B,iBAcC;oBAbG,MAAM,CAAC,QAAQ,CAAC,UAAC,KAAK;wBAClB,IAAK,KAAsB,CAAC,QAAQ,EAAE;4BAClC,QAAQ;yBACX;6BACI,IAAK,KAAoB,CAAC,MAAM,EAAE;4BACnC,KAAI,CAAC,SAAS,CAAC,KAAmB,CAAC,CAAC;yBACvC;6BACI,IAAK,KAAoB,CAAC,MAAM,EAAE;4BACnC,KAAI,CAAC,SAAS,CAAC,KAAmB,CAAC,CAAC;yBACvC;oBACL,CAAC,CAAC,CAAC;oBAEH,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAEO,+BAAS,GAAjB,UAAkB,IAAgB;oBAAlC,iBA6RC;oBA3RG,IAAI,QAAQ,GAAG,CAAC,EACZ,SAAS,GAAG,CAAC,EACb,WAAW,GAAG,CAAC,EACf,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,EAAE,GAAG,IAAI,CAAC,EAAE,EACZ,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,cAAc,GAAG,IAAI,CAAC,OAAO,EAC7B,YAAY,GAAG,IAAI,CAAC,WAAW,EAC/B,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,SAAS,GAAG,IAAI,CAAC,QAAQ,EACzB,QAAwB,EACxB,YAAoB,EACpB,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EACnG,QAAQ,GAAG,IAAI,CAAC,QAAgC,EAChD,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAC1C,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,QAAQ,GAAG,KAAK,CAAC,iBAAiB,EAAE,gBAAgB;oBACpD,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,UAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAG,EAC1D,cAAc,GAAG,IAAI,CAAC,cAAc,EACpC,YAAY,GAAG,UAAC,GAAW;wBACvB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBACxC,CAAC,CAAC;oBAEN,IAAW,QAA4B,CAAC,UAAU;wBAC9C,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAE9D,IAAI,QAAQ,CAAC,gBAAgB,EAAE;wBAE3B,YAAY;wBACZ,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EACxB,SAAS,GAAG,QAAQ,CAAC,SAAS,EAC9B,KAA+D,EAC/D,KAAa,EAAE,GAAW,EAC1B,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAA0B,EACrE,OAAO,GAAG,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAA0B,EAClE,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAA0B,EAC1D,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;wBAElC,0BAA0B;wBAC1B,IAAI,IAAI,CAAC,mBAAmB;4BACxB,WAAW,CAAC,IAAI,CAAC,SAAO,IAAI,OAAI,CAAC,CAAC;6BACjC,IAAI,IAAI,CAAC,kBAAkB;4BAC5B,WAAW,CAAC,IAAI,CAAC,SAAO,IAAI,OAAI,CAAC,CAAC;;4BAElC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAE3B,WAAW;wBAEX,IAAI,QAAQ,KAAK,SAAS,EAAE;4BAExB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAG,QAAQ,EAAE,EAAE;gCAErD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gCAExC,sCAAsC;gCACtC,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gCAEjC,wCAAwC;gCACxC,WAAW,CAAC,IAAI,CAAC,OAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAI,CAAC,CAAC;6BAEzG;yBAEJ;wBAED,MAAM;wBAEN,IAAI,GAAG,KAAK,SAAS,EAAE;4BAEnB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAG,WAAW,EAAE,EAAE;gCAEnD,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gCAE/B,oCAAoC;gCACpC,WAAW,CAAC,IAAI,CAAC,QAAM,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAI,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,OAAI,CAAC,CAAC;6BAExE;yBAEJ;wBAED,UAAU;wBAEV,IAAI,OAAO,KAAK,SAAS,EAAE;4BAEvB,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;4BAE/C,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAG,SAAS,EAAE,EAAE;gCAErD,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gCAEvC,sCAAsC;gCACtC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gCAEvC,wCAAwC;gCACxC,WAAW,CAAC,IAAI,CAAC,QAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAI,CAAC,CAAC;6BAE1G;yBAEJ;wBAED,QAAQ;wBAER,IAAI,eAAe,GAAG,UAAC,EAAU,EAAE,EAAU,EAAE,EAAU;4BACrD,WAAW,CAAC,IAAI,CAAC,IAAI;kCACf,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;kCACxI,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG;kCACxI,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;kCAClI,IAAI,CAAC,CAAC;wBAChB,CAAC,CAAC;wBAEF,IAAI,UAAU,GAAG,UAAC,IAAY,EAAE,EAAU;4BACtC,IAAI,OAAO,KAAK,IAAI,EAAE;gCAClB,QAAQ,QAAQ,EAAE;oCACd,KAAK,KAAK,CAAC,qBAAqB;wCAC5B,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4CACrC,IAAI,CAAC,GAAG,CAAC,EAAE;gDACP,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gDACxB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gDAC5B,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;6CAC/B;iDAAM;gDACH,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gDACxB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gDAC5B,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;6CAC/B;4CAED,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yCAE5B;wCACD,MAAM;oCACV,KAAK,KAAK,CAAC,mBAAmB;wCAC1B,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4CAErC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4CAC3B,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CAC5B,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CAE5B,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yCAE5B;wCACD,MAAM;oCACV;wCACI,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;4CAEpC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4CACxB,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CAC5B,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4CAE5B,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yCAE5B;wCACD,MAAM;iCACb;6BACJ;iCAAM;gCACH,QAAQ,QAAQ,EAAE;oCACd,KAAK,KAAK,CAAC,qBAAqB;wCAC5B,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4CACrC,IAAI,CAAC,GAAG,CAAC,EAAE;gDACP,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gDACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gDACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;6CACb;iDAAM;gDACH,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gDACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gDACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;6CACb;4CAED,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yCAE5B;wCACD,MAAM;oCACV,KAAK,KAAK,CAAC,mBAAmB;wCAC1B,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;4CAErC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;4CACb,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CAEV,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yCAE5B;wCACD,MAAM;oCACV;wCACI,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;4CAEpC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CACV,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4CAEV,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yCAE5B;wCACD,MAAM;iCACb;6BACJ;wBACL,CAAC,CAAC;wBAEF,IAAI,aAAa,GAAG,UAAC,GAAmB;4BACpC,IAAI,GAAG,EAAE;gCACL,4BAA4B;gCAC5B,YAAY,GAAG,GAAG,CAAC,IAAI,IAAI,cAAY,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAG,CAAC;gCAErE,IAAI,KAAI,CAAC,cAAc,EAAE;oCACrB,WAAW,CAAC,IAAI,CAAC,OAAK,IAAI,IAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAI,YAAY,OAAI,CAAC,CAAC;iCACxH;gCAED,WAAW,CAAC,IAAI,CAAC,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC,CAAC;6BAErD;wBACL,CAAC,CAAC;wBAEF,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE;4BAC9G,SAAS;4BAET,IAAI,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAA4B,CAAC;4BAElE,QAAQ,GAAG,SAA2B,CAAC;4BAEvC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;4BACrC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;4BAEnE,aAAa,CAAC,QAAQ,CAAC,CAAC;4BAExB,KAAK,CAAC,GAAG,KAAK,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;gCACvC,IAAI,CAAC,GAAG,CAAC,EAAE;oCACP,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oCACpB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCACxB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iCAC3B;qCAAM;oCACH,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oCACpB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCACxB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iCAC3B;gCAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;oCAC7B,SAAS;gCAEb,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAE,CAAC;gCAE3B,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;oCAC5C,SAAS;gCAEb,eAAe,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;6BAExC;yBAEJ;6BAAM;4BACH,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;gCAC1B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;oCACzC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oCAClB,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;oCAE1C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;oCAClD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oCAEpI,aAAa,CAAC,QAAQ,CAAC,CAAC;oCAExB,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;iCAC1B;6BACJ;iCACI;gCACD,QAAQ,GAAG,SAAS,CAAC;gCAErB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gCACrC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gCAEvG,aAAa,CAAC,QAAQ,CAAC,CAAC;gCAExB,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;6BAC1B;yBACJ;qBAEJ;yBAAM;wBAEH,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,QAAQ,CAAC,CAAC;qBAEtF;oBAED,eAAe;oBACf,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;oBAC7B,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC;oBAC5B,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC;oBAE9B,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAEO,+BAAS,GAAjB,UAAkB,IAAqC;oBACnD,IAAI,CAAC,IAAI,CAAC,WAAW;wBACjB,OAAO,IAAI,CAAC;oBAEhB,IAAI,QAAQ,GAAG,CAAC,EACZ,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACxB,IAAI,GAAG,IAAI,CAAC,IAAc,EAC1B,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EACrD,cAAc,GAAG,IAAI,CAAC,cAAc,EACpC,YAAY,GAAG,UAAC,GAAW;wBACvB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;oBACxC,CAAC,CAAC;oBAEN,IAAK,QAA2B,CAAC,UAAU;wBACvC,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAE9D,IAAK,QAAiC,CAAC,gBAAgB,EAAE;wBAErD,YAAY;wBACZ,IAAI,QAAQ,GAA0B,QAAS,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;wBAEzE,0BAA0B;wBAC1B,IAAI,IAAI,CAAC,mBAAmB;4BACxB,WAAW,CAAC,IAAI,CAAC,SAAO,IAAI,CAAC,IAAI,OAAI,CAAC,CAAC;6BACtC,IAAI,IAAI,CAAC,kBAAkB;4BAC5B,WAAW,CAAC,IAAI,CAAC,SAAO,IAAI,CAAC,IAAI,OAAI,CAAC,CAAC;;4BAEvC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAE3B,IAAI,QAAQ,KAAK,SAAS,EAAE;4BAExB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAG,QAAQ,EAAE,EAAE;gCAErD,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gCAC5B,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gCAC5B,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gCAE5B,sCAAsC;gCACtC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gCAEtC,wCAAwC;gCACxC,WAAW,CAAC,IAAI,CAAC,OAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAI,CAAC,CAAC;6BAEzG;yBAEJ;wBAED,IAAI,IAAI,KAAK,MAAM,EAAE;4BAEjB,CAAC,GAAG,IAAI,CAAC;4BAET,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gCAEzC,CAAC,IAAO,WAAW,GAAG,CAAC,MAAG,CAAC;6BAE9B;4BAED,WAAW,CAAC,IAAI,CAAI,CAAC,OAAI,CAAC,CAAC;yBAE9B;wBAED,IAAI,IAAI,KAAK,cAAc,EAAE;4BAEzB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gCAEjE,WAAW,CAAC,IAAI,CAAC,QAAK,WAAW,GAAG,CAAC,WAAI,WAAW,GAAG,CAAC,QAAI,CAAC,CAAC;6BAEjE;yBAEJ;qBAEJ;yBAAM;wBAEH,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,QAAQ,CAAC,CAAC;qBAEtF;oBAED,eAAe;oBACf,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;oBAE7B,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,+BAAS,GAAT;oBACI,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,CAAC;gBAED,6BAAO,GAAP;oBACI,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBAChE,CAAC;gBAED,8BAAQ,GAAR,UAAS,QAAsB;oBAAtB,yBAAA,EAAA,sBAAsB;oBAC3B,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;gBACvD,CAAC;gBACL,kBAAC;YAAD,CA3aA,AA2aC,IAAA;YA3aY,iBAAW,cA2avB,CAAA;QACL,CAAC,EA7akB,KAAK,GAAL,aAAK,KAAL,aAAK,QA6avB;IAAD,CAAC,EA7aU,OAAO,GAAP,WAAO,KAAP,WAAO,QA6ajB;AAAD,CAAC,EA7aM,GAAG,KAAH,GAAG,QA6aT;;;;;;;;;;;;;;;AC7aD,IAAO,GAAG,CA+8GT;AA/8GD,WAAO,GAAG;IAAC,IAAA,OAAO,CA+8GjB;IA/8GU,WAAA,OAAO;QAAC,IAAA,KAAK,CA+8GvB;QA/8GkB,WAAA,KAAK;YAqBpB;gBAAqC,mCAAuB;gBAkDxD,yBAAY,QAAgB,EAAE,SAAmB,EAAE,SAAmB,EAAE,UAAoB,EAAE,cAAwB;oBAAtH,YACI,iBAAO,SAiEV;oBA/DG,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC7B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;oBACzB,KAAI,CAAC,WAAW,GAAG,CAAC,cAAc,CAAC;oBACnC,KAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;oBAC7B,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC7B,KAAI,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;oBAE/B,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CACtC,eAAe,CAAC,SAAS,GAAG,QAAQ,GAAG,eAAe,CAAC,cAAc,EACrE;wBACI,aAAa,CAAC,oBAAoB,EAAE,CAAC;oBACzC,CAAC,CAAC,CAAC;oBACP,GAAG,CAAC,UAAU,GAAG,eAAe,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/F,GAAG,CAAC,eAAe,GAAG,KAAK,CAAC;oBAC5B,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC;oBAEnD,KAAI,CAAC,QAAQ,GAAG;wBACZ,GAAG,EAAkB,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;qBACjD,CAAC;oBAEF,KAAI,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;oBAE7C,KAAI,CAAC,YAAY,GAAG;wBAChB,YAAY,GAAG,eAAe,CAAC,SAAS,GAAG,SAAS;wBAEpD,+BAA+B;wBAC/B,gCAAgC;wBAEhC,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE;wBACxC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE;wBAC1C,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE;wBAEzC,0BAA0B;wBAC1B,oBAAoB;wBACpB,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,uBAAuB;wBAE9D,mBAAmB;wBACnB,sBAAsB;wBAEtB,eAAe;wBACf,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,WAAW;wBAC7D,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB;wBAClD,2DAA2D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,UAAU;wBAC7I,GAAG;qBACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAEb,KAAI,CAAC,cAAc,GAAG;wBAClB,YAAY,GAAG,eAAe,CAAC,SAAS,GAAG,SAAS;wBAEpD,wBAAwB;wBAExB,mBAAmB;wBACnB,sBAAsB;wBAEtB,mCAAmC;wBAEnC,eAAe;wBACf,yCAAyC;wBACzC,uEAAuE;wBACvE,+BAA+B;wBAC/B,uCAAuC;wBACvC,GAAG;qBACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBACjB,CAAC;gBAxGD,sBAAI,gCAAG;yBAAP;wBACI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAsB,CAAC;oBACvD,CAAC;yBAED,UAAQ,KAAoB;wBACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;oBACvC,CAAC;;;mBAJA;gBAMa,2BAAW,GAAzB,UAA0B,QAAgB,EAAE,EAAoC;oBAC5E,IAAI,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;wBACvD,IAAI,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;4BACtD,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BAChD,OAAO;yBACV;wBACD,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC9C,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;wBAC/D,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;wBAC7B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,EAAE,UAAC,IAAI;4BAC7D,IAAI,IAAI,EAAE;gCACN,oBAAoB;gCACpB,IAAI,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gCAC9D,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;gCAC/C,IAAI,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gCACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oCAC3C,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iCACnB;6BACJ;;gCACG,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;4BAEnD,IAAI,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,SAAS;gCACpD,OAAO,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;4BAElD,aAAa,CAAC,oBAAoB,EAAE,CAAC;wBACzC,CAAC,CAAC,CAAC;qBACN;;wBACG,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACpD,CAAC;gBAsEa,2BAAW,GAAzB,UAA0B,QAAgB,EAAE,SAAmB,EAAE,SAAmB,EAAE,UAAoB,EAAE,cAAwB;oBAChI,IAAI,CAAC,GAAG,KAAG,QAAQ,IAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;oBAC5H,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;wBAC/B,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;qBAClH;oBACD,OAAO,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC;gBA1Ha,yBAAS,GAAW,EAAE,CAAC;gBACvB,yBAAS,GAAW,SAAS,CAAC;gBAC9B,8BAAc,GAAW,MAAM,CAAC;gBAChC,iCAAiB,GAAW,CAAC,CAAC;gBAC9B,6BAAa,GAAqC,EAAE,CAAC;gBACpD,yBAAS,GAAwC,EAAE,CAAC;gBACpD,4BAAY,GAA6D,EAAE,CAAC;gBAqH/F,sBAAC;aA7HD,AA6HC,CA7HoC,KAAK,CAAC,iBAAiB,GA6H3D;YA7HY,qBAAe,kBA6H3B,CAAA;YAED;gBAAmC,iCAAc;gBAgF7C,uBAAY,GAAW,EAAE,IAAY,EAAE,KAAmB,EAAE,IAAa,EAAE,SAAmB,EAAE,cAA8B,EAAE,SAAmB,EAAE,UAAoB,EAAE,cAAwB;oBAAnM,YACI,iBAAO,SAWV;oBAnFO,qBAAe,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAKrD,iBAAW,GAAY,KAAK,CAAC;oBAC7B,eAAS,GAAY,KAAK,CAAC;oBAE3B,aAAO,GAAoC,IAAI,CAAC;oBAIxD,aAAO,GAAG,GAAG,CAAC;oBA6DV,KAAI,CAAC,IAAI,GAAG,eAAe,CAAC;oBAC5B,KAAI,CAAC,KAAK,GAAG,GAAG,CAAC;oBACjB,KAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;oBACtB,KAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACjD,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC7B,KAAI,CAAC,eAAe,GAAG,cAAc,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACnE,KAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC9B,KAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;oBAChC,KAAI,CAAC,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC;oBACxC,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;gBACvB,CAAC;gBApED,sBAAI,gCAAK;yBAAT;wBACI,OAAO,IAAI,CAAC,MAAM,CAAC;oBACvB,CAAC;yBAED,UAAU,KAAkB;wBACxB,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;4BACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BACxB,IAAI,CAAC,cAAc,EAAE,CAAC;yBACzB;oBACL,CAAC;;;mBAPA;gBASD,sCAAc,GAAd;oBACI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBACvB,IAAI,IAAI,CAAC,SAAS,EAAE;wBAChB,IAAI,CAAC,QAAQ,CAAC,UAAC,IAAI;4BACf,IAAI,IAAI,YAAY,KAAK,CAAC,IAAI,EAAE;gCAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gCAC7B,IAAI,QAAQ,YAAY,KAAK,CAAC,cAAc,EAAE;oCAC1C,IAAI,cAAc,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAA0B,CAAC;oCAC3E,IAAI,UAAU,GAAG,cAAc,CAAC,KAAsB,CAAC;oCACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;wCAClD,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;wCACxB,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;wCAC5B,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;qCAC/B;oCACD,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC;iCACrC;qCAAM,IAAI,QAAQ,YAAY,KAAK,CAAC,QAAQ,EAAE;oCAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wCACnD,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wCAC1B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wCAC1B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;wCAC1B,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;qCAC7B;oCACD,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;iCACpC;6BACJ;wBACL,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC;gBAED,sBAAI,+BAAI;yBAAR;wBACI,OAAO,IAAI,CAAC,KAAK,CAAC;oBACtB,CAAC;yBAED,UAAS,KAAa;wBAClB,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;4BACtB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;yBAC1B;oBACL,CAAC;;;mBANA;gBAQD,gCAAQ,GAAR;oBACI,IAAI,IAAI,CAAC,SAAS;wBACd,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;oBACxE,OAAO,CAAC,CAAC;gBACb,CAAC;gBAgBD,oCAAY,GAAZ,UAAa,GAAW,EAAE,IAAY,EAAE,KAAmB,EAAE,IAAa,EAAE,cAA8B;oBACtG,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;oBACjB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;oBACtB,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACjD,IAAI,cAAc;wBACd,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBAEO,4CAAoB,GAA5B;oBACI,IAAI,IAAI,CAAC,SAAS,EAAE;wBAChB,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;wBAChD,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,KAAK,EAC7D,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;wBACnE,IAAI,CAAC,QAAQ,CAAC,UAAC,GAAG;4BACd,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;4BAC5B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;wBACvC,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC;gBAED,oCAAY,GAAZ,UAAa,KAAoB;oBAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChC,CAAC;gBAED,oCAAY,GAAZ;oBACI,OAAO,IAAI,CAAC,eAAe,CAAC;gBAChC,CAAC;gBAED,+BAAO,GAAP,UAAQ,IAAY;oBAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;oBACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChC,CAAC;gBAED,+BAAO,GAAP,UAAQ,IAAa;oBACjB,IAAI,IAAI,CAAC,WAAW;wBAChB,OAAO;oBACX,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;oBACvB,eAAe,CAAC,WAAW,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBAED,mCAAW,GAAX,UAAY,QAAsB;oBAC9B,IAAI,IAAI,CAAC,WAAW;wBAChB,OAAO;oBACX,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAC1B,IAAI,QAAQ;wBACR,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1B,CAAC;gBAED,kCAAU,GAAV,UAAW,GAAY;oBACnB,IAAI,IAAI,CAAC,WAAW;wBAChB,OAAO;oBACX,IAAI,CAAC,GAAG;wBACJ,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;;wBAEjB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;oBAErB,IAAI,CAAC,IAAI,CAAC,SAAS;wBACf,OAAO;oBAEX,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;oBAEhD,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC9B,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;oBAExB,IAAI,IAAI,CAAC,SAAS,EAAE;wBAEhB,IAAI,cAAc,GAAG,UAAC,EAAU,EAAE,KAAkB,EAAE,QAAwB;4BAC1E,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC9B,IAAI,CAAC,IAAI;gCACL,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa;4BAE5C,iBAAiB;4BACjB,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;gCACf,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;gCAClC,OAAO;6BACV;4BAED,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,EACzB,GAAG,GAAG,cAAc,EACpB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAC3B,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;4BAE9C,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;4BAC3C,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;4BACxD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;4BACtE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;4BAEzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EACvB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EACxB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EACnB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;4BAE5C,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC1C,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC9C,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;4BAElD,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC1C,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;4BAClD,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;4BAE9C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;4BAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;4BAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;4BAE1C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;4BAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;4BAC1C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;4BAE1C,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;wBACtC,CAAC,CAAA;wBAED,IAAI,QAAwB,CAAC;wBAC7B,IAAI,IAAgB,CAAC;wBAErB,IAAI,CAAC,GAAG,CAAC,CAAC;wBAEV,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAEjC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gCAE1B,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAe,CAAC;gCACtC,QAAQ,GAAG,IAAI,CAAC,QAA0B,CAAC;gCAC3C,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gCACjI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;6BAEvB;iCAAM;gCAEH,QAAQ,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gCAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gCAC3G,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCACxE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gCAEjK,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gCAClJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;6BAClB;4BAED,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;4BAExD,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;4BACnC,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;4BACnC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;4BAC9B,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC;4BAEjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;yBACnC;wBAED,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC3C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;yBACpC;wBAED,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,KAAK,EAC7D,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;wBAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAClD,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAe,CAAC;4BAC3C,IAAI,CAAC,KAAK,CAAC,OAAO;gCACd,SAAS;4BACb,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;4BAC9B,KAAK,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;yBAC1C;qBAEJ;yBAAM;wBAEH,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBAElD,IAAI,QAAQ,GAAa,EAAE,CAAC;wBAC5B,IAAI,GAAG,GAAa,EAAE,CAAC;wBACvB,IAAI,OAAO,GAAa,EAAE,CAAC;wBAC3B,IAAI,MAAM,GAAa,EAAE,CAAC;wBAE1B,IAAI,OAAO,GAAG,UAAC,EAAU,EAAE,KAAkB;4BACzC,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BAC9B,IAAI,CAAC,IAAI;gCACL,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa;4BAE5C,iBAAiB;4BACjB,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;gCACf,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;gCAClC,OAAO;6BACV;4BAED,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,EACzB,GAAG,GAAG,cAAc,EACpB,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EACjC,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAC3B,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;4BAE9C,QAAQ,CAAC,IAAI,CACT,IAAI,EAAE,IAAI,EAAE,IAAI,EAChB,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAC7B,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,EAC3C,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CACjC,CAAC;4BAEF,OAAO,CAAC,IAAI,CACR,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAC7C,WAAW,EAAE,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,CAChD,CAAC;4BAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EACvB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EACxB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EACnB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;4BAE5C,GAAG,CAAC,IAAI,CACJ,CAAC,EAAE,CAAC,EACJ,CAAC,GAAG,CAAC,EAAE,CAAC,EACR,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EACZ,CAAC,EAAE,CAAC,GAAG,CAAC,CACX,CAAC;4BAEF,MAAM,CAAC,IAAI,CACP,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAC5B,CAAC;4BAEF,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;wBACtC,CAAC,CAAC;wBAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BACxC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;yBAC1C;wBAED,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBAE3C,SAAS,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC7F,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACxF,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAClF,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAE3E,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;wBAExJ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBAEjC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,KAAK,EAC7D,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;wBAEnE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;wBAE9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;qBACnB;oBAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAI,IAAI,CAAC,OAAO,EAAE;wBACd,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;wBACnC,IAAI,IAAI,GAAG,IAAI,CAAC;wBAChB,OAAO,CAAC,OAAO,CAAC,UAAC,EAAE,IAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;qBACvB;gBAEL,CAAC;gBAED,+BAAO,GAAP;oBACI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClD,OAAO,IAAI,CAAC,SAAS,CAAC;oBACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAED,8BAAM,GAAN,UAAO,EAA+B;oBAClC,IAAI,IAAI,CAAC,WAAW;wBAChB,OAAO;oBACX,IAAI,IAAI,CAAC,SAAS;wBACd,EAAE,CAAC,IAAI,CAAC,CAAC;yBACR;wBACD,IAAI,CAAC,IAAI,CAAC,OAAO;4BACb,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;wBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBACzB;gBACL,CAAC;gBACL,oBAAC;YAAD,CAhXA,AAgXC,CAhXkC,KAAK,CAAC,QAAQ,GAgXhD;YAhXY,mBAAa,gBAgXzB,CAAA;YAED;gBAA6C,2CAAc;gBAMvD,iCAAY,KAA8B,EAAE,QAAiB,EAAE,SAAmB,EAAE,UAAoB,EAAE,cAAwB;oBAAlI,YACI,iBAAO,SA2EV;oBAzEG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;qCAChB;oBAEX,KAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC9B,KAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;oBAChC,KAAI,CAAC,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC;oBAExC,IAAI,WAA4B,CAAC;oBAEjC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,aAAa,EAAE;wBACzE,WAAW,GAAqB,KAAM,CAAC,GAAG,CAAC,UAAA,MAAM;4BAC7C,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,aAAa,CACnC,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,EACZ,QAAQ,EACR,KAAK,EACL,MAAM,CAAC,YAAY,EAAE,EACrB,SAAS,EACT,UAAU,EACV,cAAc,CACjB,CAAC;4BACF,MAAM,CAAC,YAAY,EAAE,CAAC;4BACtB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;4BACrC,OAAO,SAAS,CAAC;wBACrB,CAAC,CAAC,CAAC;qBACN;yBAAM;wBACH,IAAI,IAAI,GAAG,KAAc,CAAC;wBAC1B,WAAW,GAAG,EAAE,CAAC;wBAEjB,IAAI,CAAC,GAAG,CAAC,CAAC;wBAEV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;4BACpB,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,aAAa,CAChC,IAAI,CAAC,CAAC,EAAE,CAAW,EACnB,IAAI,CAAC,CAAC,EAAE,CAAW,EACnB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAChD,QAAQ,EACR,KAAK,EACL,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EACvC,SAAS,EACT,UAAU,EACV,cAAc,CACjB,CAAC;4BAEF,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAa,CAAC,CAAC;4BAE/C,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;yBAC5B;qBACJ;oBAED,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM;qCAC5B;oBAEX,UAAU,CAAC;wBACP,eAAe,CAAC,WAAW,CAAC,QAAQ,IAAI,OAAO,EAAE,UAAC,QAAQ;4BAEtD,IAAI,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAa,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,QAAgC,EAAjE,CAAiE,CAAC,CAAC;4BAE7G,IAAI,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,UAAA,MAAM;gCACnC,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAe,CAAC;gCAC5C,IAAI,CAAC,YAAY,EAAE,CAAC;gCACpB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;4BACjE,CAAC,CAAC,CAAC;4BAEH,IAAI,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;4BAEjF,KAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAI,CAAC,UAAU,EAAE,KAAI,CAAC,WAAW,EAAE,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;4BAClJ,WAAW,CAAC,OAAO,CAAC,UAAA,MAAM;gCACtB,MAAM,CAAC,OAAO,EAAE,CAAC;4BACrB,CAAC,CAAC,CAAC;wBACP,CAAC,CAAC,CAAC;oBACP,CAAC,EAAE,CAAC,CAAC,CAAC;;gBACV,CAAC;gBACL,8BAAC;YAAD,CAnFA,AAmFC,CAnF4C,KAAK,CAAC,QAAQ,GAmF1D;YAnFY,6BAAuB,0BAmFnC,CAAA;YAED;gBAA4C,0CAAc;gBAiGtD,gCAAY,IAAY,EAAE,KAAmB,EAAE,IAAa,EAAE,cAA8B,EAAE,SAAmB,EAAE,UAAoB,EAAE,cAAwB;oBAAjK,YACI,iBAAO,SASV;oBAzGO,gBAAU,GAA6D,EAAE,CAAC;oBAO1E,aAAO,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAG3B,qBAAe,GAAkB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAGrD,iBAAW,GAAY,KAAK,CAAC;oBAC7B,kBAAY,GAAY,IAAI,CAAC;oBAC7B,iBAAW,GAAW,CAAC,CAAC;oBA6EhC,aAAO,GAAG,GAAG,CAAC;oBAKV,KAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;oBACrC,KAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;oBACtB,KAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACjD,KAAI,CAAC,eAAe,GAAG,cAAc,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACnE,KAAI,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC9B,KAAI,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;oBAChC,KAAI,CAAC,eAAe,GAAG,CAAC,CAAC,cAAc,CAAC;oBACxC,KAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;gBACvB,CAAC;gBAnFD,sBAAI,iDAAa;yBAAjB;wBACI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAClC,CAAC;;;mBAAA;gBAED,gDAAe,GAAf,UAAgB,KAAa;oBACzB,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM;wBACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;oBACvE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC7B,CAAC;gBAED,2CAAU,GAAV,UAAW,KAAa,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,GAAiB;oBACtF,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;oBAEhC,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE;wBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;wBACpC,OAAO;qBACV;oBAED,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAElC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;wBACzB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBAE3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEtB,IAAI,GAAG;wBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC7B,CAAC;gBAED,0CAAS,GAAT,UAAU,KAAa,EAAE,IAAa,EAAE,GAAmB,EAAE,GAAiB;oBAC1E,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;oBAEhC,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE;wBAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;wBAC/B,OAAO;qBACV;oBAED,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAElC,IAAI,IAAI;wBACJ,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBAE3B,IAAI,GAAG;wBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEvB,IAAI,GAAG;wBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC7B,CAAC;gBAED,0CAAS,GAAT,UAAU,IAAY,EAAE,GAAkB,EAAE,GAAiB;oBACzD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBACtI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,CAAC;gBAED,2CAAU,GAAV,UAAW,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,GAAiB;oBACvE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,CAAC;gBAED,uCAAM,GAAN;oBACI,IAAI,IAAI,CAAC,YAAY;wBACjB,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1B,CAAC;gBAiBD,6CAAY,GAAZ,UAAa,IAAY,EAAE,IAAa,EAAE,cAA8B;oBACpE,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;oBACtB,IAAI,cAAc;wBACd,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;oBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;gBAED,wCAAO,GAAP,UAAQ,IAAa;oBACjB,IAAI,IAAI,CAAC,WAAW;wBAChB,OAAO;oBACX,eAAe,CAAC,WAAW,CAAC,IAAI,IAAI,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC9E,CAAC;gBAED,4CAAW,GAAX,UAAY,QAAsB;oBAC9B,IAAI,IAAI,CAAC,WAAW;wBAChB,OAAO;oBACX,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAC1B,IAAI,QAAQ;wBACR,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1B,CAAC;gBAED,2CAAU,GAAV;oBACI,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS;wBACnC,OAAO;oBAEX,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,EAC3B,QAAQ,GAAG,IAAI,CAAC,SAAS,EACzB,iBAAiB,GAAG,SAAS,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAArD,CAAqD,CAAC,CAAC,MAAM,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAArB,CAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAApK,CAAoK,CAAC,CAAC,MAAM,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,GAAG,EAAE,EAAP,CAAO,EAAE,CAAC,CAAC,EAC9O,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,EACnB,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,EACrC,cAAc,GAAG,IAAI,CAAC,eAAe,EACrC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;oBAE1B,MAAM,CAAC,SAAS,EAAE,CAAC;oBAEnB,IAAI,iBAAiB,IAAI,CAAC,EAAE;wBACxB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;wBACrB,OAAO;qBACV;yBAAM,IAAI,CAAC,IAAI,CAAC,OAAO;wBACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBAExB,IAAI,IAAI,CAAC,WAAW,GAAG,iBAAiB,EAAE;wBACtC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;wBAEzD,IAAI,IAAI,CAAC,cAAc,IAAU,IAAI,CAAC,cAAe,CAAC,OAAO;4BACnD,IAAI,CAAC,cAAe,CAAC,OAAO,EAAE,CAAC;wBACzC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;wBAE3B,IAAI,IAAI,CAAC,gBAAgB,IAAU,IAAI,CAAC,gBAAiB,CAAC,OAAO;4BACvD,IAAI,CAAC,gBAAiB,CAAC,OAAO,EAAE,CAAC;wBAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAE7B,IAAI,IAAI,CAAC,eAAe,IAAU,IAAI,CAAC,eAAgB,CAAC,OAAO;4BACrD,IAAI,CAAC,eAAgB,CAAC,OAAO,EAAE,CAAC;wBAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;wBAE5B,IAAI,IAAI,CAAC,eAAe,IAAU,IAAI,CAAC,eAAgB,CAAC,OAAO;4BACrD,IAAI,CAAC,eAAgB,CAAC,OAAO,EAAE,CAAC;wBAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;wBAE5B,yDAAyD;wBACrD,IAAI,CAAC,cAAc,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC,IAAI,YAAY,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBAC/G,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC,IAAI,YAAY,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBACjH,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC,IAAI,YAAY,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBAChH,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC,IAAI,YAAY,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;wBAEhH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;wBACrD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;wBACvD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;wBACtD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;wBAC1D,UAAU;wBACV,gCAAgC;wBAChC,qGAAqG;wBACrG,uGAAuG;wBACvG,sGAAsG;wBACtG,sGAAsG;wBACtG,GAAG;wBAEH,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC;qBACxC;oBAED,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,EAC9B,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAClC,SAAS,GAAG,IAAI,CAAC,eAAe,EAChC,SAAS,GAAG,IAAI,CAAC,eAAe,EAChC,aAAa,GAAG,CAAC,CAAC;oBAEtB,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC5B,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC9B,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC7B,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;oBAE7B,SAAS,CAAC,OAAO,CAAC,UAAA,QAAQ;wBACtB,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EACnB,GAAG,GAAG,QAAQ,CAAC,GAAG,EAClB,KAAK,GAAG,QAAQ,CAAC,GAAG,EACpB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAArD,CAAqD,CAAC,EACrF,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,EAAV,CAAU,CAAC,CAAC,MAAM,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,GAAG,EAAE,EAAP,CAAO,EAAE,CAAC,CAAC,EACpE,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,QAAQ,GAAG,KAAK,EACzC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;wBAEvD,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;wBAC9E,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;wBAE7G,KAAK,CAAC,OAAO,CAAC,UAAA,IAAI;4BACd,iBAAiB;4BACjB,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;gCACf,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;gCAClC,OAAO;6BACV;4BAED,IAAI,IAAI,GAAG,QAAQ,CAAC,SAAS,EACzB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE,EAC7D,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,GAAG,EAAE,EAC3E,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EACvB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EACxB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EACnB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;4BAE5C,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;4BACvE,UAAU,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;4BAC3D,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC7C,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;4BAE3D,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;4BAClC,EAAE,aAAa,CAAC;wBACpB,CAAC,CAAC,CAAC;wBAEH,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7B,CAAC,CAAC,CAAC;oBAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;wBACvB,IAAI,aAAa,GAAoH,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAA,iCAAiC,CAAC;wBAE1M,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC5E,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC/I,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAEvH,yDAAyD;wBACpD,aAA+C,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;wBACvF,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,QAAe,CAAC,CAAC;wBACrD,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,UAAiB,CAAC,CAAC;wBACzD,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAgB,CAAC,CAAC;wBACvD,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAgB,CAAC,CAAC;wBAC3D,UAAU;wBACV,2CAA2C;wBAE3C,gFAAgF;wBAEhF,yBAAyB;wBACzB,uCAAuC;wBACvC,qDAAqD;wBACrD,wCAAwC;wBACxC,2CAA2C;wBAC3C,4DAA4D;wBAC5D,qEAAqE;wBAErE,yDAAyD;wBACzD,6CAA6C;wBAC7C,0CAA0C;wBAC1C,iDAAiD;wBACjD,wDAAwD;wBACxD,iBAAiB;wBACjB,aAAa;wBAEb,uCAAuC;wBACvC,SAAS;wBAET,4BAA4B;wBAC5B,6DAA6D;wBAC7D,6CAA6C;wBAC7C,mCAAmC;wBACnC,+EAA+E;wBAC/E,iCAAiC;wBACjC,qCAAqC;wBACrC,sDAAsD;wBACtD,6DAA6D;wBAC7D,oDAAoD;wBACpD,6CAA6C;wBAC7C,aAAa;wBACb,gCAAgC;wBAChC,OAAO;wBACP,wHAAwH;wBACxH,4HAA4H;wBAC5H,0HAA0H;wBAC1H,0HAA0H;wBAC1H,GAAG;wBAEH,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;qBAC5J;yBAAM;wBACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAC,KAAiB;4BACnC,KAAK,CAAC,QAA0C,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;wBAC5F,CAAC,CAAC,CAAC;qBACN;oBAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC9B,CAAC;gBAED,sCAAK,GAAL;oBACI,IAAI,IAAI,CAAC,WAAW;wBAChB,OAAO;oBACX,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;oBACrB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACtD,CAAC;gBAED,wCAAO,GAAP;oBACI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC,SAAS,CAAC;oBACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBACL,6BAAC;YAAD,CAhUA,AAgUC,CAhU2C,KAAK,CAAC,QAAQ,GAgUzD;YAhUY,4BAAsB,yBAgUlC,CAAA;YAED;gBAAsC,oCAAc;gBAuQhD,0BAAY,KAAqB,EAAE,GAAmB,EAAE,QAAwB,EAAE,KAAmB,EAAE,QAAiB,EAAE,QAAiB,EAAE,SAAmB,EAAE,YAAsB,EAAE,IAAa,EAAE,QAAkB,EAAE,QAAiB,EAAE,qBAA8B;oBAA9Q,YACI,iBAAO,SAoBV;oBA3RO,WAAK,GAAW,IAAI,CAAC;oBASrB,kBAAY,GAAW,GAAG,CAAC;oBAC3B,iBAAW,GAAW,CAAC,GAAG,CAAC,CAAC;oBAC5B,aAAO,GAAG,KAAK,CAAC;oBAChB,eAAS,GAAG,CAAC,CAAC,CAAC,gBAAgB;oBAC/B,4BAAsB,GAAG,CAAC,CAAC;oBAMnC,aAAO,GAAG,GAAG,CAAC;oBAEN,kBAAY,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAQzC,iBAAW,GAAG,KAAK,CAAC;oBA4OhB,KAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;oBAC/B,KAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC3C,KAAI,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACvC,KAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACnC,KAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACjC,KAAI,CAAC,kBAAkB,GAAG,QAAQ,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC1D,KAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACjD,KAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,GAAG,CAAC;oBACjC,KAAI,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC;oBAC1B,KAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,OAAO,CAAC;oBACrC,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;oBACxB,KAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;oBAC7B,KAAI,CAAC,YAAY,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC;oBAC/C,KAAI,CAAC,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC;oBAC1B,KAAI,CAAC,SAAS,GAAG,QAAQ,IAAI,CAAC,CAAC;oBAC/B,KAAI,CAAC,sBAAsB,GAAG,qBAAqB,IAAI,CAAC,CAAC;oBAEzD,KAAI,CAAC,OAAO,EAAE,CAAC;;gBACnB,CAAC;gBApQD,sBAAI,yCAAW;yBAAf;wBACI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS;4BACjC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;wBACxE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC9C,CAAC;;;mBAAA;gBAUD,8CAAmB,GAAnB;oBACI,6BAA6B;gBACjC,CAAC;gBAED,oCAAS,GAAT,UAAU,SAAuC;oBAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC3B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE;wBAChD,OAAO;qBACV;oBAED,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;oBAE7B,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;wBAC9B,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;wBACtB,IAAI,KAAK,YAAY,aAAa,EAAE;4BAChC,sBAAsB;yBACzB;6BAAM,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE;4BACpC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;yBAChD;6BAAM,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE;4BACpC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;yBACjD;qBACJ;gBACL,CAAC;gBAEM,2CAAgB,GAAvB,UAAwB,KAAkB;oBACtC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;wBACpB,IAAI,aAA6B,CAAC;wBAClC,IAAI,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;wBAEhD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;4BACjD,aAAa,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;gCACxC,KAAK,EAAE,KAAY;gCACnB,GAAG,EAAE,KAAK;gCACV,IAAI,EAAE,KAAK,CAAC,UAAU;6BACzB,CAAC,CAAC;4BACH,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC;yBAClE;6BAAM;4BACH,aAAa,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;yBAClE;wBAED,OAAO,aAAwC,CAAC;qBACnD;oBACD,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE;wBACjC,gBAAgB,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;4BACzD,YAAY,EAAE,IAAI;4BAClB,GAAG,EAAE,KAAK;4BACV,IAAI,EAAE,KAAK,CAAC,UAAU;yBACzB,CAAC,CAAC;qBACN;oBACD,OAAO,gBAAgB,CAAC,aAAwC,CAAC;gBACrE,CAAC;gBAEM,0CAAe,GAAtB,UAAuB,KAAkB;oBACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;wBACpB,IAAI,QAAwB,CAAC;wBAC7B,IAAI,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;wBAEhD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;4BACjD,QAAQ,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;gCACnC,KAAK,EAAE,KAAY;gCACnB,GAAG,EAAE,KAAK;6BACb,CAAC,CAAC;4BACH,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;yBAC7D;6BAAM;4BACH,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;yBAC7D;wBAED,OAAO,QAAmC,CAAC;qBAC9C;oBACD,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;wBAChC,gBAAgB,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;4BACxD,YAAY,EAAE,IAAI;4BAClB,GAAG,EAAE,KAAK;yBACb,CAAC,CAAC;qBACN;oBACD,OAAO,gBAAgB,CAAC,YAAuC,CAAC;gBACpE,CAAC;gBAED,yCAAc,GAAd;oBACI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACzB,IAAI,MAAM,IAAI,MAAM,YAAY,EAAE,CAAC,cAAc,CAAC,mBAAmB,EAAE;wBACnE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;qBACpC;gBACL,CAAC;gBAED,iCAAM,GAAN,UAAO,CAAgB;gBAEvB,CAAC;gBAED,8CAAmB,GAAnB,UAAoB,CAAS;oBACzB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;gBACnC,CAAC;gBAED,0CAAe,GAAf,UAAgB,CAAS;oBACrB,OAAO,CAAC,CAAC;gBACb,CAAC;gBAED,sBAAI,sCAAQ;yBAAZ;wBACI,OAAO,IAAI,CAAC,SAAS,CAAC;oBAC1B,CAAC;yBAED,UAAa,KAAa;wBACtB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;4BACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;4BACvB,IAAI,CAAC,OAAO,EAAE,CAAC;yBAClB;oBACL,CAAC;;;mBAPA;gBASD,sBAAI,sCAAQ;yBAAZ;wBACI,OAAO,IAAI,CAAC,SAAS,CAAC;oBAC1B,CAAC;yBAED,UAAa,KAAa;wBACtB,IAAI,KAAK,GAAG,CAAC,EAAE;4BACX,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;4BACvB,IAAI,CAAC,OAAO,EAAE,CAAC;yBAClB;oBACL,CAAC;;;mBAPA;gBASD,sBAAI,mCAAK;yBAAT;wBACI,OAAO,IAAI,CAAC,MAAM,CAAC;oBACvB,CAAC;yBAED,UAAU,KAAkB;wBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACxB,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrB,CAAC;;;mBALA;gBAOD,sBAAI,kCAAI;yBAAR;wBACI,OAAO,IAAI,CAAC,KAAK,CAAC;oBACtB,CAAC;yBAED,UAAS,KAAK;wBACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;wBACnB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,sCAAQ;yBAAZ;wBACI,OAAO,IAAI,CAAC,OAAO,CAAC;oBACxB,CAAC;yBAED,UAAa,KAAK;wBACd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;wBACrB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,4CAAc;yBAAlB;wBACI,OAAO,IAAI,CAAC,SAAS,CAAC;oBAC1B,CAAC;yBAED,UAAmB,KAAK;wBACpB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;wBACvB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,mCAAK;yBAAT;wBACI,OAAO,IAAI,CAAC,MAAM,CAAC;oBACvB,CAAC;yBAED,UAAU,KAAoB;wBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACxB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,iCAAG;yBAAP;wBACI,OAAO,IAAI,CAAC,IAAI,CAAC;oBACrB,CAAC;yBAED,UAAQ,KAAoB;wBACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,6CAAkB,GAAlB,UAAmB,GAAkB;oBACjC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC/C,EAAE,CAAC,SAAS,EAAE,CAAC;oBACf,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM;wBACpD,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAClF,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,sBAAI,+CAAiB;yBAArB;wBACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;oBACnC,CAAC;yBAED,UAAsB,KAAoB;wBACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,wCAAU;yBAAd;wBACI,OAAO,IAAI,CAAC,OAAO,CAAC;oBACxB,CAAC;;;mBAAA;gBAED,sBAAI,sCAAQ;yBAAZ;wBACI,OAAO,IAAI,CAAC,KAAK,CAAC;oBACtB,CAAC;;;mBAAA;gBAED,uCAAY,GAAZ,UAAa,CAAgB,EAAE,CAAgB,EAAE,CAAgB;oBAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAClB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,uCAAY,GAAZ,UAAa,MAAe,EAAE,MAAe,EAAE,MAAe,EAAE,IAAa,EAAE,IAAa,EAAE,IAAa,EAAE,SAAkB,EAAE,SAAkB,EAAE,SAAkB,EAAE,QAAiB,EAAE,QAAiB,EAAE,QAAiB,EAAE,IAAa;oBAC3O,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;wBACpE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBAC5C,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;wBAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpC,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;wBAC7E,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;oBACjE,IAAI,QAAQ,KAAK,SAAS;wBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACjC,IAAI,QAAQ,KAAK,SAAS;wBACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAC9B,IAAI,QAAQ,KAAK,SAAS;wBACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;oBAC9B,IAAI,IAAI,KAAK,SAAS;wBAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;oBACtB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAyBD,gCAAK,GAAL;oBACI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,kCAAO,GAAP;oBACI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAED,kCAAO,GAAP;oBAAA,iBAkXC;oBAjXG,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EACnB,GAAG,GAAG,IAAI,CAAC,IAAI,EACf,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAC3B,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAC3B,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EACzB,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EACvB,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,EAC1B,KAAK,GAAG,IAAI,CAAC,WAAW,EACxB,QAAQ,GAAG,IAAI,CAAC,SAAS,EACzB,QAAQ,GAAG,IAAI,CAAC,SAAS,EACzB,GAAG,GAAG,MAAM,EACZ,QAAQ,GAAG,IAAI,CAAC,OAAO,EACvB,QAAQ,GAAG,IAAI,CAAC,SAAS,EACzB,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC;oBAExD,IAAI,IAAI,CAAC,SAAS,EAAE;wBAChB,IAAI,UAAU,IAAI,GAAG,EAAE;4BACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;4BACrB,OAAO;yBACV;wBACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;qBACvB;yBAAM;wBACH,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;wBAElD,IAAI,UAAU,IAAI,GAAG;4BACjB,OAAO;qBACd;oBAED,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAChC,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAE9C,IAAI,kBAAiC,CAAC;oBACtC,IAAI,MAAqB,CAAC;oBAC1B,IAAI,IAAmB,CAAC;oBAExB,IAAI,QAAQ,EAAE;wBACV,kBAAkB,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAChD,IAAI,QAAQ,IAAI,CAAC;4BACb,kBAAkB,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAEjF,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACpC,IAAI,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;wBAC/C,IAAI,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK;4BAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC;4BACb,OAAO,CAAC,MAAM,EAAE,CAAC;wBACrB,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;4BAC1C,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;4BAClD,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;4BACrD,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;4BAC3C,KAAK,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;4BAC3C,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;yBACzD;wBAED,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAC7G,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACvG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAC7B,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;wBAC9B,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBACjC,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;qBACxC;yBAAM;wBACH,IAAI,eAAe,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;wBAEpG,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE;4BACnC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACzB,eAAe,CAAC,SAAS,EAAE,CAAC;4BAC5B,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,GAAG;gCACxE,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BACjC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;4BAC9E,kBAAkB,GAAG,eAAe,CAAC;4BACrC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;4BAClC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;yBAC/B;6BAAM;4BACH,kBAAkB,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;4BACzD,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;4BACvD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;yBACpD;qBACJ;oBAED,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC/B,IAAI,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,CAAC;oBAEzC,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;wBACtB,UAAU,CAAC,MAAM,EAAE,CAAC;qBACvB;oBACD,IAAI,UAAU,CAAC,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;wBACzC,UAAU,CAAC,MAAM,EAAE,CAAC;qBACvB;oBAED,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;wBACnB,OAAO,CAAC,MAAM,EAAE,CAAC;qBACpB;oBACD,IAAI,OAAO,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE;wBACnC,OAAO,CAAC,MAAM,EAAE,CAAC;qBACpB;oBAED,IAAI,QAAQ,GAAW,IAAI,CAAC,KAAK,CAAC;oBAElC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;wBAC/D,IAAI,iBAAiB,EAAE;4BACnB,IAAI,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;4BAEpE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;yBACxC;;4BAEG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,sBAAsB;qBACzE;oBAED,IAAI,IAAI,CAAC,SAAS,EAAE;wBAChB,IAAI,MAAqB,CAAC;wBAC1B,IAAI,KAAyB,CAAC;wBAC9B,IAAI,QAAwB,CAAC;wBAC7B,IAAI,MAAkB,CAAC;wBACvB,IAAI,SAAyB,CAAC;wBAC9B,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;wBAC3B,IAAI,MAAM,CAAC,MAAM,EAAE;4BACf,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;gCAC9B,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gCACtB,IAAI,KAAK,YAAY,aAAa,EAAE;oCAChC,MAAM,GAAG,KAAsB,CAAC;iCACnC;qCAAM,IAAI,KAAK,YAAY,KAAK,CAAC,YAAY,EAAE;oCAC5C,KAAK,GAAG,KAA2B,CAAC;oCACpC,QAAQ,GAAG,KAAK,CAAC,QAA0B,CAAC;oCAC5C,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;iCAChD;qCAAM,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE;oCACpC,MAAM,GAAG,KAAmB,CAAC;oCAC7B,SAAS,GAAG,MAAM,CAAC,QAA0B,CAAC;oCAC9C,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;iCAClD;6BACJ;4BACD,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;yBAC5D;6BAED;4BACI,QAAQ,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BAC/L,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;4BACtE,SAAS,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACjC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BACzE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;4BACtJ,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;4BACjE,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC;4BAC/H,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;4BACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;4BACjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;yBACnB;wBAED,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;wBAEtG,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;wBAC1J,MAAM,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;wBAEhD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAE3D,MAAM,CAAC,MAAM,CAAC,UAAC,KAAK;4BAChB,IAAI,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;4BAEjC,IAAI,SAAS,GAAG,CAAC,QAAQ,GAAG,CAAC,KAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE;gCAClD,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;gCACpE,IAAI,qBAAqB,GAAG,GAAG;oCAC3B,KAAK,CAAC,MAAM,EAAE,CAAC;gCACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gCAE1B,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gCAEtD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gCACpD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gCACvD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gCACvD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCAC3C,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gCAC3C,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gCACjD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gCACjD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;6BACjD;iCAAM;gCAEH,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gCACpC,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gCAC1D,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gCAEpE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gCACpD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gCACvD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gCACvD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gCACvD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gCACjD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gCACjD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;gCACjD,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;6BACjD;4BAED,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC;4BACnC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;4BAEjC,IAAI,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAI,CAAC,YAAY,GAAG,KAAI,CAAC,WAAW,CAAC,CAAC;4BAE1F,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAC/E,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAExC,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,KAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAAA,CAAC;4BAC/E,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAExC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;4BACxD,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BAC/C,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BAE/C,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;4BAClD,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BAC/C,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BAE/C,SAAS,CAAC,kBAAkB,GAAG,IAAI,CAAC;4BACpC,SAAS,CAAC,qBAAqB,EAAE,CAAC;wBACtC,CAAC,CAAC,CAAC;qBAEN;yBAAM;wBAEH,IAAI,UAAU,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC;wBAEvI,IAAI,YAAY,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;wBAErG,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;wBACvJ,UAAU,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;wBAEnD,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAE/D,UAAU,CAAC,MAAM,CAAC,UAAC,KAAK;4BACpB,KAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;4BAEhB,IAAI,SAAS,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACjC,IAAI,IAAI,GAAG,KAAI,CAAC,OAAO,CAAC;4BACxB,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;4BAE1C,IAAI,SAAS,GAAG,CAAC,QAAQ,GAAG,CAAC,KAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE;gCAClD,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;gCACpE,IAAI,qBAAqB,GAAG,GAAG;oCAC3B,KAAK,CAAC,MAAM,EAAE,CAAC;gCACnB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gCAC1B,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;oCACxC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;wCACzE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCACnC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;qCAChC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oCAER,IAAI,KAAI,CAAC,YAAY,EAAE;wCACnB,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;4CACtE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;yCAC5B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qCACX;iCACJ;qCAAM;oCACH,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;wCACzE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI;wCAChC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCAEnC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCACnC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;wCAE7B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;wCAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;qCAC7B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oCACR,IAAI,KAAI,CAAC,YAAY,EAAE;wCACnB,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;4CACtE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CAEzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CAEzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;yCAC5B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qCACX;iCACJ;6BACJ;iCAAM;gCAEH,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gCACpC,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gCAC1D,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gCAEpE,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;oCACxC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;wCACzE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCACnC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCAEnC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;wCAC7B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;qCAChC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oCACR,IAAI,KAAI,CAAC,YAAY,EAAE;wCACnB,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;4CACtE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CAEzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;yCAC5B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qCACX;iCACJ;qCAAM;oCACH,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;wCACzE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI;wCAChC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCAEnC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCACnC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;wCAEnC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;wCAC7B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;wCAE7B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;wCAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;qCAC7B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oCACR,IAAI,KAAI,CAAC,YAAY,EAAE;wCACnB,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;4CACtE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CAEzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CAEzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CAEzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;4CACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;yCAC5B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qCACX;iCACJ;6BACJ;4BAED,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;4BAEzE,KAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;4BAEf,QAAQ;4BAER,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;4BAE/C,IAAI,GAAG,GAAG,kBAAkB,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAI,CAAC,YAAY,GAAG,KAAI,CAAC,WAAW,CAAC,CAAC;4BAE1F,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,KAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAC/E,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAExC,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,KAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAAA,CAAC;4BAC/E,IAAI,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BAExC,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;gCAC9E,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI;gCACnC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;gCAC1B,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;gCAE1B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI;gCAC7B,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;gCAC1B,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;6BAC7B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BAER,IAAI,KAAI,CAAC,YAAY,EAAE;gCACnB,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC;oCAC3E,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oCACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oCACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oCAEzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oCACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;oCACzB,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;iCAC5B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;6BACX;4BAED,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,KAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;4BAE5E,KAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBACxB,CAAC,CAAC,CAAC;qBACN;gBACL,CAAC;gBAED,oCAAS,GAAT;gBAEA,CAAC;gBAED,wCAAa,GAAb,UAAc,KAAoB,EAAE,QAAgB,IAAI,CAAC;gBAEzD,mCAAQ,GAAR,cAA4B,OAAO,IAAI,CAAC,CAAC,CAAC;gBAppBnC,kCAAiB,GAAuC,EAAE,CAAC;gBACpD,6BAAY,GAAmB,IAAI,CAAC;gBACpC,8BAAa,GAAmB,IAAI,CAAC;gBAopBvD,uBAAC;aAtqBD,AAsqBC,CAtqBqC,KAAK,CAAC,QAAQ,GAsqBnD;YAtqBY,sBAAgB,mBAsqB5B,CAAA;YAED;gBAAgD,8CAAc;gBAC1D,oCAAY,KAAiC,EAAE,QAAiB;oBAAhE,YACI,iBAAO,SAyGV;oBAvGG,IAAI,CAAC,QAAQ;wBACT,QAAQ,GAAG,OAAO,CAAC;oBAEvB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;qCAChB;oBAEX,IAAI,UAA8B,CAAC;oBAEnC,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,gBAAgB,EAAE;wBAC5E,UAAU,GAAwB,KAAM,CAAC,GAAG,CAAC,UAAA,GAAG;4BAC5C,OAAA,IAAI,KAAK,CAAC,gBAAgB,CACtB,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,QAAQ,EACZ,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,cAAc,CAAC;wBAXvB,CAWuB,CAC1B,CAAC;qBACL;yBAAM;wBACH,IAAI,IAAI,GAAG,KAAc,CAAC;wBAC1B,UAAU,GAAG,EAAE,CAAC;wBAEhB,IAAI,CAAC,GAAG,CAAC,CAAC;wBACV,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE;4BACxE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;gCACpB,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,gBAAgB,CACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAChD,IAAI,CAAC,CAAC,EAAE,CAAC,EACT,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,CAAC,EAAE,CAAC,EACT,IAAI,CAAC,CAAC,EAAE,CAAC,EACT,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;6BACnB;yBACJ;6BACI,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE;4BAC7B,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;gCACpB,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,gBAAgB,CACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAClD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAChD,IAAI,CAAC,CAAC,EAAE,CAAC,EACT,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;6BACnB;yBACJ;qBACJ;oBAED,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,MAAM;qCAC1B;oBAEX,UAAU,CAAC;wBACP,eAAe,CAAC,WAAW,CAAC,QAAQ,EAAE,UAAC,QAAQ;4BAE3C,IAAI,WAAW,GAAoB,EAAE,CAAC;4BACtC,IAAI,KAAK,GAAiB,EAAE,CAAC;4BAC7B,IAAI,MAAM,GAAiB,EAAE,CAAC;4BAE9B,UAAU,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,OAAO,EAAX,CAAW,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG;gCAC7C,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;gCAE1B,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;oCAC9B,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oCACtB,IAAI,KAAK,YAAY,aAAa,EAAE;wCAChC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qCAC3B;yCAAM,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE;wCACpC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qCACrB;yCAAM,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE;wCACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qCACtB;iCACJ;4BACL,CAAC,CAAC,CAAC;4BAEH,IAAI,WAAW,CAAC,MAAM,EAAE;gCACpB,KAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;6BACtE;4BAED,IAAI,KAAK,CAAC,MAAM,EAAE;gCACd,IAAI,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAgC,EAArC,CAAqC,CAAC,CAAC,CAAC;gCACzH,KAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,YAAuC,CAAC,CAAC,CAAC;6BAChH;4BAED,IAAI,MAAM,CAAC,MAAM,EAAE;gCACf,IAAI,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,UAAA,IAAI,IAAI,OAAA,IAAI,CAAC,QAAgC,EAArC,CAAqC,CAAC,CAAC,CAAC;gCACzH,KAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC;6BAC7E;4BAED,UAAU,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,EAAE,EAAX,CAAW,CAAC,CAAC;wBAEzC,CAAC,CAAC,CAAC;oBACP,CAAC,EAAE,CAAC,CAAC,CAAC;;gBACV,CAAC;gBACL,iCAAC;YAAD,CA5GA,AA4GC,CA5G+C,KAAK,CAAC,QAAQ,GA4G7D;YA5GY,gCAA0B,6BA4GtC,CAAA;YAED;gBAA4C,0CAAc;gBAqDtD,gCAAY,cAAqD;oBAAjE,YACI,iBAAO,SAGV;oBAlDD,cAAQ,GAAW,IAAI,CAAC;oBAEhB,UAAI,GAAe,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACpC,mBAAa,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACpC,YAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC7B,UAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC3B,aAAO,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC9B,WAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC5B,wBAAkB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACzC,mBAAa,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACpC,sBAAgB,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACvC,gBAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACvC,gBAAU,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACvC,yBAAmB,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAChD,iBAAW,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACxC,sBAAgB,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACrC,sBAAgB,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACrC,+BAAyB,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC9C,uBAAiB,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBACtC,eAAS,GAAQ,EAAE,CAAC;oBAEpB,aAAO,GAAG,CAAC,CAAC;oBACZ,aAAO,GAAG,CAAC,CAAC;oBACZ,gBAAU,GAAqB,EAAE,CAAC;oBAClC,kBAAY,GAAmB,IAAI,CAAC;oBACpC,YAAM,GAAW,CAAC,CAAC;oBACnB,oBAAc,GAAa,CAAC,CAAC,CAAC,CAAC;oBAC/B,qBAAe,GAAa,CAAC,CAAC,CAAC,CAAC;oBAChC,gBAAU,GAAa,CAAC,CAAC,CAAC,CAAC;oBASnC,UAAI,GAAY,KAAK,CAAC;oBAEtB,iBAAW,GAAY,KAAK,CAAC;oBAE7B,eAAS,GAAY,KAAK,CAAC;oBACnB,iBAAW,GAAY,KAAK,CAAC;oBACrC,eAAS,GAAY,KAAK,CAAC;oBAC3B,eAAS,GAAY,IAAI,CAAC;oBAkL1B,uBAAiB,GAAoE;wBACjF,UAAU,EAAE;4BACR,GAAG,EAAE;gCACD,IAAI,KAAI,CAAC,SAAS,IAAI,KAAI,CAAC,SAAS,CAAC,MAAM;oCACvC,OAAO,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAb,CAAa,CAAC,CAAC;gCAClD,OAAO,CAAC,CAAC,CAAC,CAAC;4BACf,CAAC,EAAE,GAAG,EAAE,UAAC,IAAc;gCACnB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAI,CAAC,SAAS,EAAE,IAAI,CAAC;oCAC9C,KAAI,CAAC,SAAS,GAAG,IAAI,CAAC;4BAC9B,CAAC;yBACJ;wBACD,kBAAkB,EAAE;4BAChB,GAAG,EAAE;gCACD,IAAI,KAAI,CAAC,aAAa,IAAI,KAAI,CAAC,aAAa,CAAC,MAAM;oCAC/C,OAAO,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAxB,CAAwB,CAAC,CAAC;gCAClE,OAAO,CAAC,CAAC,CAAC,CAAC;4BACf,CAAC,EAAE,GAAG,EAAE,UAAC,KAAe;gCACpB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAI,CAAC,aAAa,EAAE,KAAK,CAAC;oCACnD,KAAI,CAAC,aAAa,GAAG,KAAK,CAAC;4BACnC,CAAC;yBACJ;wBACD,iBAAiB,EAAE;4BACf,GAAG,EAAE;gCACD,IAAI,KAAI,CAAC,cAAc,IAAI,KAAI,CAAC,cAAc,CAAC,MAAM,EAAE;oCACnD,OAAO,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAd,CAAc,CAAC,CAAC;iCACxD;gCACD,OAAO,CAAC,CAAC,CAAC,CAAC;4BACf,CAAC,EAAE,GAAG,EAAE,UAAC,IAAc;gCACnB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAI,CAAC,cAAc,EAAE,IAAI,CAAC;oCACnD,KAAI,CAAC,cAAc,GAAG,IAAI,CAAC;4BACnC,CAAC;yBACJ;wBACD,iBAAiB,EAAE;4BACf,GAAG,EAAE;gCACD,IAAI,KAAI,CAAC,aAAa,IAAI,KAAI,CAAC,aAAa,CAAC,MAAM;oCAC/C,OAAO,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAA,EAAE,IAAI,OAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAd,CAAc,CAAC,CAAC;gCACxD,OAAO,CAAC,CAAC,CAAC,CAAC;4BACf,CAAC,EAAE,GAAG,EAAE,UAAC,KAAe;gCACpB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAI,CAAC,aAAa,EAAE,KAAK,CAAC;oCACnD,KAAI,CAAC,aAAa,GAAG,KAAK,CAAC;4BACnC,CAAC;yBACJ;wBACD,kBAAkB,EAAE;4BAChB,GAAG,EAAE;gCACD,IAAI,KAAI,CAAC,4BAA4B,EAAE;oCACnC,KAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,CAAC,CAAC;oCAC7C,KAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;iCAC7C;gCACD,OAAO,KAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;4BACxC,CAAC,EAAE,GAAG,EAAE,UAAC,OAAiB;gCACtB,IAAI,CAAC,KAAI,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC;oCACpF,KAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;4BAC1C,CAAC;yBACJ;wBACD,wBAAwB,EAAE;4BACtB,GAAG,EAAE;gCACD,IAAI,KAAI,CAAC,gBAAgB,IAAI,KAAI,CAAC,gBAAgB,CAAC,MAAM;oCACrD,OAAO,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAG,KAAK,CAAC,CAAC,CAAC,WAAM,KAAK,CAAC,CAAC,CAAG,EAA3B,CAA2B,CAAC,CAAC;gCAC3E,OAAO,EAAE,CAAC;4BACd,CAAC,EAAE,GAAG,EAAE,UAAC,SAAmB;gCACxB,KAAI,CAAC,YAAY,CAAC,WAAW,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;4BAC7E,CAAC;yBACJ;wBACD,kBAAkB,EAAE;4BAChB,GAAG,EAAE;gCACD,IAAI,KAAI,CAAC,gBAAgB,IAAI,KAAI,CAAC,gBAAgB,CAAC,MAAM;oCACrD,OAAO,KAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAG,KAAK,CAAC,CAAC,CAAC,WAAM,KAAK,CAAC,CAAC,CAAG,EAA3B,CAA2B,CAAC,CAAC;gCAC3E,OAAO,EAAE,CAAC;4BACd,CAAC,EAAE,GAAG,EAAE,UAAC,SAAmB;gCACxB,KAAI,CAAC,YAAY,CAAC,WAAW,CAAC,uBAAuB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;4BAC5E,CAAC;yBACJ;qBACJ,CAAC;oBArPE,KAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;;gBAClC,CAAC;gBAED,4CAAW,GAAX,UAAY,IAAY,EAAE,EAAU,EAAE,OAAiB;oBACnD,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EACrB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EACnB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EACxB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAE3B,IAAI,OAAO,EAAE;wBACT,IAAI,CAAC,IAAI,CAAC,gBAAgB;4BACtB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;wBAE/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;qBAC5C;yBAAM;wBACH,IAAI,CAAC,IAAI,CAAC,gBAAgB;4BACtB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;wBAE/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;qBAC5C;gBACL,CAAC;gBAED,6CAAY,GAAZ,UAAa,MAAkB,EAAE,OAAiB;oBAC9C,IAAI,OAAO;wBACP,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,EAAE,CAAC;;wBAErC,IAAI,CAAC,gBAAgB,GAAG,MAAM,IAAI,EAAE,CAAC;oBAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,oDAAmB,GAAnB,UAAoB,OAAkB;oBAClC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM;wBACzB,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;;wBAEzC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBAClC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;oBAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,sDAAqB,GAArB,UAAsB,KAAa,EAAE,MAAgB;oBACjD,IAAI,CAAC,IAAI,CAAC,iBAAiB;wBACvB,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;oBAChC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,KAAK,EAAb,CAAa,CAAC,EAAE;wBACnD,IAAI,MAAM;4BACN,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,KAAK,EAAb,CAAa,CAAC,CAAC;qBACpF;;wBACG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvC,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;gBAC7C,CAAC;gBAED,+CAAc,GAAd,UAAe,KAAc;oBACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBAEjC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;oBAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,gDAAe,GAAf,UAAgB,KAAc;oBAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBAEpC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAEhC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,qDAAoB,GAApB;oBACI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;wBAE3C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBAE/C,IAAI,UAAU,GAAa,EAAE,CAAC;wBAC9B,IAAI,eAAe,GAAa,EAAE,CAAC;wBACnC,IAAI,cAAc,GAAa,EAAE,CAAC;wBAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BACpD,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gCACxB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gCACpC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gCAC9C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC/C;yBACJ;wBAED,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;4BAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gCACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;gCACtB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;gCAC3B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;6BAG7B;iCAAM;gCACH,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gCAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;gCACvC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;6BACxC;4BAED,IAAI,CAAC,OAAO,EAAE,CAAC;yBAClB;qBACJ;gBACL,CAAC;gBAED,0CAAS,GAAT,UAAU,EAAW,EAAE,MAAsB;oBACzC,IAAI,EAAE,GAAG,IAAI,EACT,CAAC,GAAG,EAAE,CAAC,KAAK,EACZ,CAAC,GAAG,EAAE,CAAC,GAAG,EACV,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;oBAElB,IAAI,MAAM,EAAE;wBACR,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAC1B,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAC1B,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;qBAC7B;oBAED,OAAO;wBACH,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ;wBAC3B,0DAA0D;wBAC1D,2DAA2D;wBAC3D,0DAA0D;wBAC1D,KAAK,EAAE,CAAC;wBACR,GAAG,EAAE,CAAC;wBACN,iBAAiB,EAAE,CAAC;wBACpB,SAAS,EAAE,KAAK;wBAChB,IAAI,EAAE,KAAK;wBACX,SAAS,EAAE,KAAK;wBAChB,QAAQ,EAAE,IAAI;qBACjB,CAAC;gBACN,CAAC;gBAED,yCAAQ,GAAR,UAAS,cAAqD;oBAA9D,iBAuCC;oBArCG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBAEzB,IAAI,cAAc;wBACd,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,CAAC,CAAC,KAAK,SAAS,EAArB,CAAqB,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;4BACpE,KAAI,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;wBAChC,CAAC,CAAC,CAAC;oBAEP,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;wBACjC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBAClI,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACvJ,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBAC1J;oBAED,IAAI,CAAC,IAAI,CAAC,QAAQ;wBACd,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;oBAE7C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;oBAE1B,IAAI,cAAc,CAAC,iBAAiB,EAAE;wBAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,cAAc,CAAC,iBAAiB,CAAmB,CAAC;wBACrG,IAAI,GAAG,EAAE;4BACL,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;4BACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACd,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;4BAC9B,GAAG,CAAC,QAAQ,CAAC,UAAC,CAAM;gCAChB,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;gCACnB,IAAI,CAAC,CAAC,QAAQ,EAAE;oCACZ,CAAC,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;oCAC9B,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;iCAChC;4BACL,CAAC,CAAC,CAAC;4BACH,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;yBAC3B;qBACJ;oBAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBA4ED,oDAAmB,GAAnB,UAAoB,CAAS,EAAE,GAAQ;oBACnC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;wBACzB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3C,CAAC;gBAED,oDAAmB,GAAnB,UAAoB,CAAS,EAAE,MAAY;oBACvC,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;wBAC3B,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;wBACxC,IAAI,MAAM;4BACN,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBAClB,OAAO,CAAC,CAAC;qBACZ;oBACD,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,sBAAI,yCAAK;yBAAT;wBACI,OAAO,IAAI,CAAC,MAAM,CAAC;oBACvB,CAAC;yBAED,UAAU,GAAW;wBACjB,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE;4BACpB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;4BAC5B,IAAI,GAAG,EAAE;gCACL,GAAG,CAAC,QAAQ,CAAC,UAAC,CAAM;oCAChB,IAAI,CAAC,CAAC,QAAQ;wCACV,CAAC,CAAC,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC;gCACjC,CAAC,CAAC,CAAC;6BACN;4BAED,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;yBACrB;oBACL,CAAC;;;mBAdA;gBAgBD,sBAAI,4CAAQ;yBAAZ;wBACI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;4BACxB,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;wBAChD,OAAO,IAAI,CAAC,SAAS,CAAC;oBAC1B,CAAC;yBAED,UAAa,KAAK;wBACd,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;4BACjB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;yBAC1B;6BAAM;4BACH,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;4BACpC,IAAI,UAAU;gCACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;4BAC7B,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;4BAC7B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gCACpC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAtB,CAAsB,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oCAC9D,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;gCACtB,CAAC,CAAC,CAAC;gCACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAA,CAAC;oCACxB,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gCAC1B,CAAC,CAAC,CAAC;6BACN;4BACD,KAAK,IAAI,CAAC,IAAI,OAAO,EAAE;gCACnB,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;6BAC3C;4BACD,IAAI,UAAU;gCACV,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;4BAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;yBAClB;oBACL,CAAC;;;mBAzBA;gBA2BD,sBAAI,6CAAS;yBAAb;wBACI,OAAO,IAAI,CAAC,UAAU,CAAC;oBAC3B,CAAC;yBAED,UAAc,MAAgB;wBAC1B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;4BACzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK;gCAC9B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gCACf,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;oCACpB,OAAO,CAAC,CAAC;gCACb,OAAO,CAAC,CAAC;4BACb,CAAC,CAAC,CAAC;yBACN;;4BACG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;wBAE1B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;4BACvB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;wBAE1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBAnBA;gBAqBD,uDAAsB,GAAtB,UAAuB,CAAgB;oBACnC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EACjC,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC3D,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EACxD,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,IAAI,GAAG,CAAC,EACR,WAAW,GAAG,CAAC,CAAC;oBAEpB,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM;wBAC/B,OAAO,CAAC,CAAC,CAAC;oBAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC9C,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;wBAE5B,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,EAChB,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAC9E,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC,EAChE,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAElE,IAAI,CAAC,GAAG,QAAQ,EAAE;4BACd,IAAI,IAAI,QAAQ,CAAC;4BACjB,WAAW,IAAI,YAAY,GAAG,YAAY,CAAC;4BAC3C,SAAS;yBACZ;wBAED,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAE7B,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBAEpD,OAAO,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;qBACrK;oBAED,OAAO,CAAC,CAAC,CAAC;oBAEV,0DAA0D;oBAC1D,2EAA2E;oBAC3E,4HAA4H;oBAE5H,+BAA+B;oBAE/B,2DAA2D;oBAC3D,6DAA6D;oBAE7D,8HAA8H;gBAClI,CAAC;gBAED,6CAAY,GAAZ,UAAa,IAAY,EAAE,QAAa,EAAE,QAAa;oBACnD,QAAQ,IAAI,EAAE;wBACV,KAAK,GAAG;4BACJ;gCACI,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gCAClC,IAAI,CAAC,IAAI,CAAC;oCACN,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCAC5C,OAAO;6BACV;wBACL,KAAK,GAAG;4BACJ;gCACI,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gCAClC,IAAI,CAAC,IAAI,CAAC;oCACN,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCAC5C,OAAO;6BACV;wBACL,KAAK,GAAG;4BACJ;gCACI,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gCAClC,IAAI,CAAC,IAAI,CAAC;oCACN,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gCAC5C,OAAO;6BACV;wBACL,KAAK,UAAU;4BACX;gCACI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gCAC3B,OAAO;6BACV;wBACL,KAAK,QAAQ;4BACT;gCACI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gCACzB,OAAO;6BACV;wBACL,KAAK,OAAO;4BACR;gCACI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gCACxB,OAAO;6BACV;qBACR;oBACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC7C,CAAC;gBAED,4CAAW,GAAX,UAAY,QAAgB;oBACxB,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC;gBAC3B,CAAC;gBAED,0CAAS,GAAT,UAAU,CAAS;oBACf,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACX,IAAI,CAAC,GAAG,CAAC;wBACL,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnH,CAAC;gBAED,yCAAQ,GAAR,UAAS,CAAS;oBACd,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACX,IAAI,CAAC,GAAG,CAAC;wBACL,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClG,CAAC;gBAED,6CAAY,GAAZ,UAAa,IAAY;oBACrB,QAAQ,IAAI,EAAE;wBACV,KAAK,GAAG;4BACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpC,KAAK,GAAG;4BACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpC,KAAK,GAAG;4BACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACpC,KAAK,OAAO;4BACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACnC,KAAK,QAAQ;4BACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACnC,KAAK,UAAU;4BACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;wBAC9C;4BACI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS;gCACxB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC7B;oBACD,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,0CAAS,GAAT;oBACI,IAAI,CAAC,IAAI,CAAC,IAAI;wBACV,OAAO;oBACX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAC/C,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;oBAClB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,wCAAO,GAAP,UAAQ,CAAgB,EAAE,WAAoB;oBAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBAEpC,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;wBAEnD,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC5D,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EACnF,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;4BAC5C,GAAG,CAAC,MAAM,EAAE,CAAC;4BACb,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BAExC,IAAI,SAAS,IAAI,EAAE,EAAE;gCACjB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;gCAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gCACvD,IAAI,CAAC,OAAO,EAAE,CAAC;6BAClB;yBACJ;6BAAM;4BACH,GAAG,CAAC,MAAM,EAAE,CAAC;4BACb,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAC9C,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BAExC,IAAI,SAAS,IAAI,EAAE,EAAE;gCACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gCAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;6BAClB;yBACJ;qBACJ;gBACL,CAAC;gBAED,yCAAQ,GAAR,UAAS,CAAgB,EAAE,WAAoB;oBAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBAEpC,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;wBAEnD,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC5D,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,GAAG,EAAE,EAAP,CAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BAChG,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EACpE,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACvC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;4BAExC,IAAI,SAAS,IAAI,EAAE,EAAE;gCACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;gCACtD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gCACrD,IAAI,CAAC,OAAO,EAAE,CAAC;6BAClB;yBACJ;6BAAM;4BACH,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAChD,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;4BAE5B,IAAI,SAAS,IAAI,EAAE,EAAE;gCACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;gCAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;6BAClB;yBACJ;qBACJ;gBACL,CAAC;gBAED,0CAAS,GAAT,UAAU,CAAgB;oBACtB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBACpC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACrD,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC;wBACzD,IAAI,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC3B,IAAI,SAAS,IAAI,EAAE,EAAE;4BACjB,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;4BAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;4BACnC,IAAI,CAAC,OAAO,EAAE,CAAC;yBAClB;qBACJ;gBACL,CAAC;gBAED,uCAAM,GAAN,UAAO,CAAgB;oBACnB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,6CAAY,GAAZ,UAAa,KAAqB,EAAE,GAAmB,EAAE,GAAmB;oBACxE,IAAI,KAAK;wBACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,IAAI,GAAG;wBACH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACxB,IAAI,GAAG;wBACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,sBAAI,8CAAU;yBAAd;wBACI,OAAO,IAAI,CAAC,WAAW,CAAC;oBAC5B,CAAC;yBAED,UAAe,KAAc;wBACzB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;wBAChB,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;4BACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;4BACrB,IAAI,CAAC;gCACD,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;gCAE3F,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;yBACpG;oBACL,CAAC;;;mBAXA;gBAeD,sBAAI,+CAAW;yBAAf;wBACI,OAAO,IAAI,CAAC,IAAI,CAAC;oBACrB,CAAC;;;mBAAA;gBAED,sBAAI,iDAAa;yBAAjB;wBACI,OAAO,IAAI,CAAC,cAAc,CAAC;oBAC/B,CAAC;yBAED,UAAkB,MAAgB;wBAC9B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;4BACzB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK;gCAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gCACf,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;oCACpB,OAAO,CAAC,CAAC;gCACb,OAAO,CAAC,CAAC;4BACb,CAAC,CAAC,CAAC;yBACN;;4BACG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;wBAE9B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;wBAEnD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBAhBA;gBAkBD,sBAAI,iDAAa;yBAAjB;wBAAA,iBASC;wBARG,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM;4BACvC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,GAAG,EAAE,CAAC;gCAC7B,IAAI,KAAK,GAAG,KAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gCACpC,IAAI,KAAK,GAAG,CAAC;oCACT,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;gCAC/C,OAAO,CAAC,CAAC;4BACb,CAAC,CAAC,CAAC;wBACP,OAAO,CAAC,CAAC,CAAC,CAAC;oBACf,CAAC;yBAED,UAAkB,MAAgB;wBAAlC,iBAWC;wBAVG,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;4BAC9F,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,CAAC;gCACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gCACf,IAAI,CAAC,GAAG,CAAC;oCACL,OAAO,IAAI,CAAC,KAAK,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;oCAEzC,OAAO,CAAC,CAAC;4BACjB,CAAC,CAAC,CAAC;yBACN;;4BACG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC;oBAClC,CAAC;;;mBAbA;gBAeD,sBAAI,kDAAc;yBAAlB;wBACI,OAAO,IAAI,CAAC,eAAe,CAAC;oBAChC,CAAC;yBAED,UAAmB,MAAgB;wBAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;4BACzB,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,UAAA,KAAK;gCACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gCACf,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;oCACpB,OAAO,CAAC,CAAC;gCACb,OAAO,CAAC,CAAC;4BACb,CAAC,CAAC,CAAC;yBACN;;4BACG,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;wBAE/B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM;4BAC5B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC;wBAE/B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBAnBA;gBAqBD,kDAAiB,GAAjB,UAAkB,KAAa;oBAC3B,IAAI,KAAK,IAAI,CAAC;wBACV,KAAK,GAAG,CAAC,CAAC;oBAEd,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,EAAE;wBAClC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAC1B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAC5B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC9B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAW,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;qBAClH;oBAED,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,KAAK,EAAE;wBACvC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAC/B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAC5B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAW,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC5H;oBAED,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,KAAK,EAAE;wBACtC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAC9B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAC5B,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC9B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,EAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAW,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC1H;gBACL,CAAC;gBAEa,sCAAe,GAA7B,UAA8B,KAAkB,EAAE,eAAyB;oBACvE,IAAI,CAAC,eAAe,EAAE;wBAClB,IAAI,QAAwB,CAAC;wBAC7B,IAAI,UAAU,GAAG,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;wBAEhD,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE;4BACjD,QAAQ,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;gCACnC,KAAK,EAAE,KAAY;gCACnB,GAAG,EAAE,KAAK;gCACV,UAAU,EAAE,KAAK;gCACjB,SAAS,EAAE,KAAK;6BACnB,CAAC,CAAC;4BACH,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;yBAC7D;6BAAM;4BACH,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;yBAC7D;wBAED,OAAO,QAAmC,CAAC;qBAC9C;oBACD,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;wBAChC,gBAAgB,CAAC,YAAY,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;4BACxD,YAAY,EAAE,IAAI;4BAClB,GAAG,EAAE,KAAK;yBACb,CAAC,CAAC;qBACN;oBACD,OAAO,gBAAgB,CAAC,YAAuC,CAAC;gBACpE,CAAC;gBAEa,sCAAe,GAA7B,UAA8B,KAAkB,EAAE,OAAe;oBAC7D,IAAI,QAAwB,CAAC;oBAC7B,IAAI,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC;oBAE1D,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;wBACnD,QAAQ,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;4BACnC,KAAK,EAAE,KAAY;4BACnB,GAAG,EAAE,KAAK;4BACV,WAAW,EAAE,OAAO,GAAG,CAAC;4BACxB,OAAO,EAAE,OAAO;4BAChB,SAAS,EAAE,KAAK;4BAChB,UAAU,EAAE,KAAK;4BACjB,IAAI,EAAE,KAAK,CAAC,UAAU;yBAEzB,CAAC,CAAC;wBACH,sBAAsB,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;qBAC/D;yBAAM;wBACH,QAAQ,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;qBAC/D;oBAED,OAAO,QAAmC,CAAC;gBAC/C,CAAC;gBAED,sBAAI,yCAAK;yBAAT;wBACI,OAAO,IAAI,CAAC,MAAM,CAAC;oBACvB,CAAC;yBAED,UAAU,KAAoB;wBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACxB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,wCAAI;yBAAR;wBACI,OAAO,IAAI,CAAC,KAAK,CAAC;oBACtB,CAAC;;;mBAAA;gBAED,sBAAI,0CAAM;yBAAV;wBACI,OAAO,IAAI,CAAC,OAAO,CAAC;oBACxB,CAAC;;;mBAAA;gBAED,sBAAI,uCAAG;yBAAP;wBACI,OAAO,IAAI,CAAC,IAAI,CAAC;oBACrB,CAAC;yBAED,UAAQ,KAAoB;wBACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACtB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,qDAAiB;yBAArB;wBACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;oBACnC,CAAC;yBAED,UAAsB,KAAoB;wBACtC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;;;mBALA;gBAOD,sBAAI,6CAAS;yBAAb;wBACI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC9C,CAAC;yBAED,UAAc,CAAgB;wBAC1B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;4BAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;yBACrD;oBACL,CAAC;;;mBANA;gBAQD,sBAAI,yCAAK;yBAAT;wBACI,2BAA2B;wBAC3B,kDAAkD;wBAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;oBAC3C,CAAC;yBAED,UAAU,SAAiB;wBACvB,2BAA2B;wBAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACjE,CAAC;;;mBALA;gBAOD,yCAAQ,GAAR,UAAS,QAAgB;oBACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAClD,CAAC;gBAED,8CAAa,GAAb,UAAc,KAAoB,EAAE,QAAgB;oBAChD,IAAI,QAAQ,IAAI,CAAC,EAAE;wBACf,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBAC1B,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBACxC,IAAI,CAAC,OAAO,EAAE,CAAC;qBAClB;gBACL,CAAC;gBAED,yCAAQ,GAAR;oBACI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChG,CAAC;gBAED,sBAAI,0CAAM;yBAAV;wBACI,IAAI,CAAC,IAAI,CAAC,OAAO;4BACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrD,OAAO,IAAI,CAAC,OAAO,CAAC;oBACxB,CAAC;;;mBAAA;gBAED,sBAAI,0CAAM;yBAAV;wBACI,OAAO,IAAI,CAAC,OAAO,CAAC;oBACxB,CAAC;;;mBAAA;gBAED,sBAAI,6CAAS;yBAAb;wBACI,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;oBAC5B,CAAC;;;mBAAA;gBAED,sBAAI,iDAAa;yBAAjB;wBACI,IAAI,EAAE,GAAG,GAAG,CAAC;wBAEb,IAAI,IAAI,CAAC,SAAS;4BACd,EAAE,IAAI,GAAG,CAAC;wBACd,IAAI,IAAI,CAAC,UAAU;4BACf,EAAE,IAAI,GAAG,CAAC;wBAEd,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;oBAC3B,CAAC;;;mBAAA;gBAED,sBAAI,oDAAgB;yBAApB;wBACI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC7C,IAAI,IAAI,CAAC,SAAS;4BACd,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC/C,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC/C,OAAO,IAAI,CAAC,iBAAiB,CAAC;oBAClC,CAAC;;;mBAAA;gBAED,sBAAI,mDAAe;yBAAnB;wBACI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC3C,IAAI,IAAI,CAAC,SAAS;4BACd,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC9C,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC;oBACjC,CAAC;;;mBAAA;gBAED,sBAAI,mDAAe;yBAAnB;wBACI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC3C,IAAI,IAAI,CAAC,SAAS;4BACd,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC9C,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC;oBACjC,CAAC;;;mBAAA;gBAED,sBAAI,4DAAwB;yBAA5B;wBACI,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;wBAC7D,IAAI,IAAI,CAAC,SAAS;4BACd,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBACvD,IAAI,IAAI,CAAC,UAAU;4BACf,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;wBACvD,OAAO,IAAI,CAAC,yBAAyB,CAAC;oBAC1C,CAAC;;;mBAAA;gBAED,sBAAI,8CAAU;yBAAd;wBACI,OAAO,IAAI,CAAC,WAAW,CAAC;oBAC5B,CAAC;yBAED,UAAe,KAAkB;wBAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrB,CAAC;;;mBALA;gBAOD,sBAAI,6CAAS;yBAAb;wBACI,OAAO,IAAI,CAAC,UAAU,CAAC;oBAC3B,CAAC;yBAED,UAAc,KAAkB;wBAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrB,CAAC;;;mBALA;gBAOD,sBAAI,6CAAS;yBAAb;wBACI,OAAO,IAAI,CAAC,UAAU,CAAC;oBAC3B,CAAC;yBAED,UAAc,KAAkB;wBAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrB,CAAC;;;mBALA;gBAOD,sBAAI,sDAAkB;yBAAtB;wBACI,OAAO,IAAI,CAAC,mBAAmB,CAAC;oBACpC,CAAC;yBAED,UAAuB,KAAkB;wBACrC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACrC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrB,CAAC;;;mBALA;gBAOD,sBAAI,yCAAK;yBAAT;wBACI,OAAO,IAAI,CAAC,MAAM,CAAC;oBACvB,CAAC;;;mBAAA;gBAED,sBAAI,gDAAY;yBAAhB;wBACI,OAAO,IAAI,CAAC,aAAa,CAAC;oBAC9B,CAAC;;;mBAAA;gBAED,sBAAI,mDAAe;yBAAnB;wBACI,OAAO,IAAI,CAAC,gBAAgB,CAAC;oBACjC,CAAC;;;mBAAA;gBAED,6CAAY,GAAZ,UAAa,CAAa;oBACtB,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CACxC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;wBAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAArC,CAAqC,CAAC;wBAC3D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAnD,CAAmD,CAAC,CAAC,CAAC;gBACpF,CAAC;gBAED,oDAAmB,GAAnB,UAAoB,UAAwC;oBACxD,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxH,CAAC;gBAED,oDAAmB,GAAnB;oBACI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBACvD,CAAC;gBAED,0CAAS,GAAT,UAAU,SAAuC;oBAC7C,IAAI,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC;oBACtD,IAAI,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE;wBACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;qBACrF;yBAAM;wBACH,kCAAkC;wBAClC,IAAI,SAAS,GAAG,IAAI,CAAC,eAAe,EAChC,SAAS,GAAG,IAAI,CAAC,eAAe,EAChC,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,EAClD,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAClC,OAAO,GAAG,IAAI,CAAC,aAAa,EAC5B,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;wBAE7B,IAAI,MAAM,CAAC,MAAM,EAAE;4BACf,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;gCAC9B,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gCACtB,IAAI,KAAK,YAAY,KAAK,CAAC,IAAI,EAAE;oCAC7B,QAAQ,KAAK,CAAC,IAAI,EAAE;wCAChB,KAAK,OAAO;4CACR,KAAK,CAAC,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;4CAC1E,MAAM;wCACV,KAAK,OAAO;4CACR,KAAK,CAAC,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC;4CACnF,MAAM;wCACV,KAAK,WAAW;4CACZ,KAAK,CAAC,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;4CAC3E,MAAM;wCACV,KAAK,WAAW;4CACZ,KAAK,CAAC,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;4CACrF,MAAM;wCACV,KAAK,MAAM;4CACP,KAAK,CAAC,QAAQ,GAAG,sBAAsB,CAAC,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;4CAC5E,MAAM;wCACV;4CACI,MAAM;qCACb;iCACJ;6BACJ;yBACJ;qBACJ;gBACL,CAAC;gBAED,6CAAY,GAAZ,UAAa,GAAmB;oBAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;gBAED,+CAAc,GAAd;oBACI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;wBACvB,OAAO;oBAEX,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG;wBACvC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;wBACjB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;qBACtD;oBAED,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACzB,CAAC;gBAED,iDAAgB,GAAhB;oBAEI,IAAI,CAAC,IAAI,CAAC,YAAY;wBAClB,OAAO;oBAEX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBAE/B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;oBAElE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBAC7B,CAAC;gBAED,kDAAiB,GAAjB,UAAkB,KAAa,EAAE,KAAe,EAAE,eAAyB;oBAA3E,iBAqDC;oBApDG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;wBAClD,OAAO,IAAI,CAAC;oBAEhB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EACzC,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,IAAI,GAAG,CAAC,EACR,QAAQ,GAAG,CAAC,CAAC;oBAEjB,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,eAAe,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,KAAK,KAAK,EAAb,CAAa,CAAC,CAAC;wBAC/H,OAAO,IAAI,CAAC;oBAEhB,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;wBAC/B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;4BACpD,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;4BAE3B,IAAI,KAAK,IAAI,CAAC,EAAE;gCACZ,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gCAC3B,SAAS;6BACZ;4BAED,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,KAAK,EAC5C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAC7C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,EACrC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;4BAEjC,IAAI,QAAQ,GAAG,UAAU,IAAI,KAAK,EAAE;gCAChC,QAAQ,IAAI,UAAU,CAAC;gCACvB,IAAI,IAAI,KAAK,CAAC;gCACd,SAAS;6BACZ;4BAED,IAAI,QAAQ,GAAG,MAAM,GAAG,MAAM,EAC1B,UAAU,GAAG,KAAK,GAAG,QAAQ,EAC7B,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,EACrC,MAAM,GAAG,UAAU,GAAG,MAAM,EAC5B,EAAE,GAAG,GAAG,GAAG,QAAQ,EACnB,EAAE,GAAG,EAAE,GAAG,QAAQ,EAClB,EAAE,GAAG,MAAM,GAAG,QAAQ,EACtB,EAAE,GAAG,EAAE,GAAG,QAAQ,EAClB,EAAE,GAAG;gCACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gCACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gCACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gCACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;6BACtC,CAAC;4BAEN,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,YAAY,CAAC,KAAI,CAAC,WAAW,CAAC,EAAhC,CAAgC,CAAC,CAAC;yBACrE;qBACJ;oBAED,OAAO,IAAI,CAAC;gBAChB,CAAC;gBAED,iDAAgB,GAAhB,UAAiB,eAAyB;oBAEtC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,KAAK,GAAG,CAAC,CAAC;oBAEd,IAAI,MAAM,IAAI,CAAC;wBACX,OAAO,CAAC,CAAC;oBAEb,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;wBAC/B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;4BACpD,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;4BAE3B,IAAI,KAAK,IAAI,CAAC;gCACV,SAAS;4BAEb,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,KAAK,EAC5C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAC7C,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;4BAE1C,KAAK,IAAI,MAAM,GAAG,MAAM,CAAC;yBAC5B;qBACJ;oBAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,eAAe;wBAC3E,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,KAAK,EAAT,CAAS,CAAC,CAAC,MAAM,CAAC;oBAElE,OAAO,KAAK,CAAC;gBACjB,CAAC;gBAED,+CAAc,GAAd,UAAe,eAAyB;oBAAxC,iBA8DC;oBA7DG,IAAI,MAAM,GAAwB,EAAE,EAChC,SAAS,GAAG,IAAI,CAAC,SAAS,EAC1B,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EACzC,MAAM,GAAG,IAAI,CAAC,MAAM,EACpB,WAAW,GAAG,CAAC,EACf,gBAAgB,GAAG,CAAC,EACpB,iBAAiB,GAAG,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/H,IAAI,GAAG,CAAC,CAAC;oBAEb,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE;wBAC/B,SAAS,CAAC,OAAO,CAAC,UAAC,KAAK,EAAE,GAAG;4BAEzB,IAAI,KAAK,GAAG,KAAK,EACb,aAAa,GAAG,KAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EACxC,YAAY,GAAG,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EACtC,GAAG,GAAsB,EAAE,CAAC;4BAEhC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAEjB,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;gCAC3B,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gCAC3B,OAAO;6BACV;4BAED,IAAI,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EACpD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,EAClC,QAAQ,GAAG,MAAM,GAAG,MAAM,EAC1B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;4BAElE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gCAC7B,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,EACjB,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;gCAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;oCAC7B,IAAI,WAAW,KAAK,iBAAiB,EAAE;wCACnC,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,EACjB,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;wCAEvB,GAAG,CAAC,IAAI,CAAC;4CACL,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;4CACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;4CACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;4CACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;yCACtC,CAAC,CAAC;qCAEN;yCAAM;wCACH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wCAEf,IAAI,gBAAgB,GAAG,gBAAgB,CAAC,MAAM;4CAC1C,iBAAiB,GAAG,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAC;qCAChE;oCAED,WAAW,EAAE,CAAC;iCACjB;6BACJ;4BAED,IAAI,IAAI,KAAK,CAAC;wBAClB,CAAC,CAAC,CAAC;qBACN;oBAED,OAAO,MAAM,CAAC;gBAClB,CAAC;gBAED,wCAAO,GAAP;oBAAA,iBA2fC;oBA1fG,IAAI,IAAI,CAAC,YAAY;wBACjB,OAAO;oBAEX,IAAI,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE;wBAClF,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;wBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACvB;oBAED,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EACnB,GAAG,GAAG,IAAI,CAAC,IAAI,EACf,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EACjC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAC3B,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EACvD,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAC3B,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EACzB,UAAU,GAAG,EAAE,CAAC,QAAQ,EAAE,EAC1B,SAAS,GAAG,IAAI,CAAC,eAAe,EAChC,SAAS,GAAG,IAAI,CAAC,eAAe,EAChC,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,EAClD,UAAU,GAAG,IAAI,CAAC,gBAAgB,EAClC,OAAO,GAAG,IAAI,CAAC,aAAa,EAC5B,WAAW,GAAG,CAAC,EACf,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,EACxB,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;oBAEhC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEhC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM;wBAC/B,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;oBAEtC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;oBACjB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;oBAEjB,IAAI,CAAC,cAAc,EAAE,CAAC;oBAEtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAE/B,IAAI,aAAa,GAAG,GAAG,CAAC;oBACxB,IAAI,cAAc,GAAG,GAAG,CAAC;oBAEzB,IAAI,WAAW,GAAoB;wBAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACpE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACpE,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;wBAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;wBAChF,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;qBAClF,CAAC;oBAEF,IAAI,UAAU,GAAG,CAAC,EAAE;wBAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;wBAEpB,KAAK,CAAC,IAAI,CACN,CAAC,KAAK,EAAE,GAAG,CAAC,EACZ,CAAC,GAAG,EAAE,IAAI,CAAC,EACX,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,MAAM,EAAE,KAAK,CAAC,CAClB,CAAC;wBAEF,OAAO;qBACV;oBAED,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAChC,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EACzC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAE3C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;wBACtB,IAAI,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,UAAC,EAAE,EAAE,EAAE,IAAK,OAAA,EAAE,GAAG,EAAE,EAAP,CAAO,CAAC,CAAC;wBAChD,IAAI,GAAG,KAAK,eAAe,EAAE;4BACzB,IAAI,SAAS,GAAG,EAAc,EAC1B,MAAM,GAAG,CAAC,CAAC;4BACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gCAC9C,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gCACzB,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,eAAe;oCAC/C,KAAK,GAAG,eAAe,GAAG,MAAM,CAAC;gCACrC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;gCACnC,MAAM,IAAI,KAAK,CAAC;6BACnB;4BACD,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;yBAC3C;qBACJ;;wBACG,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,eAAe,CAAC,CAAC;oBAEpD,IAAI,QAAQ,KAAK,eAAe,EAAE;wBAC9B,EAAE,CAAC,cAAc,CAAC,eAAe,GAAG,QAAQ,CAAC,CAAC;wBAC9C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACf,QAAQ,GAAG,eAAe,CAAC;wBAC3B,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;qBACpC;oBAED,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;oBAExB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBAE9D,IAAI,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAChH,uBAAuB,GAAG,eAAe,CAAC,QAAQ,EAAE,EACpD,qBAAqB,GAAG,CAAC,CAAC;oBAE9B,kDAAkD;oBAClD,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAChF,IAAI,UAAU,GAAsB,IAAI,CAAC;oBAEzC,IAAI,kBAAkB,GAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEhF,IAAI,uBAAuB,IAAI,CAAC,EAAE;wBAE9B,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;wBAC3D,IAAI,4BAA4B,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;wBAErE,IAAI,4BAA4B,KAAK,qBAAqB,EAAE;4BACxD,eAAe,CAAC,cAAc,CAAC,4BAA4B,GAAG,qBAAqB,CAAC,CAAC;4BACrF,qBAAqB,GAAG,4BAA4B,CAAC;yBACxD;wBAED,IAAI,kBAAkB,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE;4BAC7C,kBAAkB,CAAC,MAAM,EAAE,CAAC;4BAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACxB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAE7B,aAAa;4BACb,mBAAmB;4BACnB,sBAAsB;4BACtB,qBAAqB;4BACrB,iBAAiB;4BACjB,IAAI;yBACP;6BAAM;4BACH,aAAa;4BACb,mBAAmB;4BACnB,kBAAkB;4BAClB,qBAAqB;4BACrB,qBAAqB;4BACrB,IAAI;yBACP;wBAED,KAAK,CAAC,IAAI,CACN,CAAC,KAAK,EAAE,GAAG,CAAC,EACZ,CAAC,GAAG,EAAE,IAAI,CAAC,EACX,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,MAAM,EAAE,KAAK,CAAC,CAClB,CAAC;wBAEF,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;wBAExD,mFAAmF;wBAEnF,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;wBAC5B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;wBAE1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;wBAChC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;wBAE9B,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC;wBAErC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EACrC,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,EACnD,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;wBAE/D,2DAA2D;wBAC3D,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;wBAEvC,IAAI,IAAI,CAAC,4BAA4B,EAAE;4BACnC,IAAI,IAAI,CAAC,iBAAiB;gCACtB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,CAAC,CAAC;4BACjD,IAAI,CAAC,4BAA4B,GAAG,KAAK,CAAC;yBAC7C;wBAED,gDAAgD;wBAEhD,+CAA+C;wBAC/C,kDAAkD;wBAClD,qIAAqI;wBACrI,cAAc;wBACd,kHAAkH;wBAClH,IAAI,IAAI,GAAG,CAAC,CAAC;wBAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC9C,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;4BAE5B,IAAI,QAAQ,IAAI,CAAC;gCACb,SAAS;4BAEb,IAAI,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;4BACtC,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;4BACzC,IAAI,QAAQ,GAAG,qBAAqB,GAAG,YAAY,CAAC;4BAEpD,IAAI,CAAC,GAAG,CAAC;gCACL,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC;4BAEvG,kBAAkB;4BAClB,IAAI,QAAQ,GAAG,CAAC,EAAE;gCACd,KAAK,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,QAAQ,EAAE;oCACnD,IAAI,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;oCACnB,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC;iCAClG;6BACJ;4BAED,IAAI,YAAY,GAAG,CAAC,EAAE;gCAClB,KAAK,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG,qBAAqB,EAAE,EAAE,IAAI,QAAQ,EAAE;oCAChE,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;iCAC/F;6BACJ;4BAED,IAAI,IAAI,QAAQ,CAAC;yBACpB;wBACD,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,QAAQ,EAAE;4BAC7B,WAAW,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,CAAC;yBACtG;wBAED,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBAEtB,IAAI,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,UAAA,UAAU,IAAI,OAAA,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAnC,CAAmC,CAAC,CAAC;wBAEpG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAClD,IAAI,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,EAC1B,GAAG,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;4BAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gCAC5C,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gCACrB,IAAI,GAAG;oCACH,GAAG,CAAC,IAAI,CACJ,GAAG,CAAC,CAAC,CAAC,EACN,GAAG,CAAC,CAAC,CAAC,EACN,GAAG,CAAC,CAAC,CAAC,EACN,GAAG,CAAC,CAAC,CAAC,EACN,GAAG,CAAC,CAAC,CAAC,EACN,GAAG,CAAC,CAAC,CAAC,CACT,CAAC;6BACT;yBACJ;qBACJ;yBAAM;wBACH,KAAK,CAAC,IAAI,CACN,CAAC,KAAK,EAAE,GAAG,CAAC,EACZ,CAAC,GAAG,EAAE,IAAI,CAAC,EACX,CAAC,IAAI,EAAE,MAAM,CAAC,EACd,CAAC,MAAM,EAAE,KAAK,CAAC,CAClB,CAAC;qBACL;oBAED,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;oBAE1E,IAAI,IAAI,CAAC,SAAS,EAAE;wBAChB,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBAEpC,QAAQ,CAAC,QAAQ,GAAG,WAAW,CAAC;wBAChC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;wBACpG,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC;wBAClB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;qBACzB;yBAAM;wBACH,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBAChD,IAAI,UAAU,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAE1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAChD,IAAI,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;4BACxB,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;4BACf,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;4BAC1B,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;4BAC1B,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;yBAC7B;wBAED,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;wBAClF,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,sBAAsB,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC1G,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC;wBAClB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;qBACzB;oBAED,IAAI,UAAU,EAAE;wBACZ,UAAU,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;4BACtB,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;4BAE/C,IAAI,UAAU,GAAG,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;4BAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gCACxC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gCAChB,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gCAEhB,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gCAC3B,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gCAC3B,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;6BAC9B;4BAED,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;4BAEjF,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;4BAC1M,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;4BACvC,KAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;wBAC1B,CAAC,CAAC,CAAC;qBACN;oBAED,IAAI,eAAe,GAAG,IAAI,CAAC,gBAAgB,EACvC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBAE5C,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,IAAI,qBAAqB,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAExF,IAAI,YAAU,GAAG,IAAI,YAAY,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAC7D,YAAU,GAAG,IAAI,YAAY,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAC7D,KAAG,GAAG,CAAC,EACP,KAAG,GAAG,CAAC,CAAC;wBAEZ,eAAe,CAAC,OAAO,CAAC,UAAA,KAAK;4BACzB,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EACb,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;4BAElB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;wBAE1B,CAAC,CAAC,CAAC;wBAEH,oCAAoC;wBACpC,4FAA4F;wBAE5F,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBAEpC,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBAC/C,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,YAAU,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjF,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;wBAC3K,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;wBACzB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBAE1B,aAAa,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;wBAC3C,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,YAAU,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjF,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC7K,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;wBACrB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;qBACzB;oBAED,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,IAAI,qBAAqB,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE;wBAExF,IAAI,YAAU,GAAG,IAAI,YAAY,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAC7D,YAAU,GAAG,IAAI,YAAY,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAC7D,KAAG,GAAG,CAAC,EACP,KAAG,GAAG,CAAC,CAAC;wBAEZ,eAAe,CAAC,OAAO,CAAC,UAAA,KAAK;4BACzB,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAChC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;4BAErC,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BAEtB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,EAAE,CAAC;4BACvB,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC;4BAC1C,YAAU,CAAC,KAAG,EAAE,CAAC,GAAG,CAAC,CAAC;wBAE1B,CAAC,CAAC,CAAC;wBAEH,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACjD,GAAG,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;wBAEnF,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAA;wBAC9C,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,YAAU,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjF,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;wBAC3K,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;wBACzB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;wBAE1B,aAAa,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAA;wBAC1C,aAAa,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,YAAU,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjF,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,sBAAsB,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC7K,EAAE,CAAC,IAAI,GAAG,UAAU,CAAC;wBACrB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;qBACzB;oBAED,IAAI,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,kBAAkB,EAAE;wBACzD,4DAA4D;wBAC5D,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACvD,IAAI,OAAO,GAAG,WAAW,GAAG,GAAG,CAAC;wBAChC,IAAI,UAAU,GAAG,WAAW,GAAG,IAAI,CAAC;wBAEpC,uBAAuB;wBACvB,iCAAiC;wBACjC,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC1C,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBAEvC,IAAI,IAAI,CAAC,IAAI,EAAE;4BACX,gCAAgC;4BAChC,8BAA8B;4BAE9B,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;4BACrC,KAAK,CAAC,MAAM,EAAE,CAAC;yBAClB;wBAED,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACnE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACvD,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC3D,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAE3D,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC9D,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAClE,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAE/D,IAAI,IAAI,CAAC,SAAS,EAAE;4BAChB,IAAI,OAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BAE5C,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BACpC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,UAAA,GAAG,IAAI,OAAA,OAAK,CAAC,GAAG,CAAC,EAAV,CAAU,CAAC,CAAC;4BACpE,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;4BAChG,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;4BACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;4BAEzB,QAAQ,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;4BAChC,QAAQ,CAAC,QAAQ,GAAG,OAAK,CAAC;4BAC1B,QAAQ,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BAChG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;4BACjC,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;4BAC5G,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;4BACzB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;yBAChC;6BAAM;4BACH,IAAI,GAAG,GAAG;gCACN,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAChB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAChB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAChB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCAChB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gCACnB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gCACnB,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;6BACtB,CAAC;4BACF,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;4BAEhD,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC7F,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BACjG,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;4BACtG,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC;4BACzB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;4BAEzB,cAAc,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;4BAE5C,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BAC7F,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;4BACpG,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;4BAClH,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;4BACzB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;yBAChC;qBACJ;gBACL,CAAC;gBAED,uCAAM,GAAN,UAAO,CAAgB;oBACnB,IAAI,CAAC,CAAC;wBACF,OAAO;oBAEX,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,oDAAmB,GAAnB,UAAoB,CAAS;oBACzB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;gBACjC,CAAC;gBAED,gDAAe,GAAf,UAAgB,CAAS;oBACrB,OAAO,CAAC,CAAC;gBACb,CAAC;gBAED,+CAAc,GAAd;oBACI,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACzB,IAAI,MAAM,IAAI,MAAM,YAAY,EAAE,CAAC,cAAc,CAAC,kBAAkB,EAAE;wBAClE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;qBAC3B;gBACL,CAAC;gBAED,sCAAK,GAAL;oBACI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACnB,CAAC;gBAED,wCAAO,GAAP;oBACI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC5B,CAAC;gBAED,0CAAS,GAAT,UAAU,KAAc,EAAE,QAAiB,EAAE,SAAyB;oBAClE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACzB,IAAI,MAAM,IAAI,MAAM,YAAY,EAAE,CAAC,cAAc,CAAC,kBAAkB,EAAE;wBAClE,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;qBACzD;gBACL,CAAC;gBAntDM,iCAAU,GAAG,CAAC,CAAC;gBACf,gCAAS,GAAG,CAAC,CAAC;gBACd,8BAAO,GAAG,CAAC,CAAC;gBACZ,+BAAQ,GAAG,CAAC,CAAC;gBA+mBN,wCAAiB,GAAuC,EAAE,CAAC;gBAkmC7E,6BAAC;aAttDD,AAstDC,CAttD2C,KAAK,CAAC,QAAQ,GAstDzD;YAttDY,4BAAsB,yBAstDlC,CAAA;YAED;gBAAA;gBA2BA,CAAC;gBAxBU,kCAAe,GAAtB,UAAuB,IAAmC;oBACtD,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACvC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;oBACrB,IAAI,EAAE,EAAE;wBACJ,GAAG,CAAC,OAAO,GAAG;4BACV,WAAW,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;4BACtD,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;wBAC7B,CAAC,CAAC;qBACL;oBAED,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,IAAI,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE;wBACnH,IAAI,SAAS,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC;wBAC/D,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;qBAC3E;oBAED,OAAO,GAAG,CAAC;gBACf,CAAC;gBAEM,iCAAc,GAArB,UAAsB,cAAsB,EAAE,eAAuB;oBACjE,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,UAAA,GAAG;wBAChC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;oBACxD,CAAC,CAAC,CAAC;gBACP,CAAC;gBAzBc,wBAAK,GAAyB,EAAE,CAAC;gBA0BpD,yBAAC;aA3BD,AA2BC,IAAA;YA3BY,wBAAkB,qBA2B9B,CAAA;YAED;gBAA6C,2CAAc;gBACvD,iCAAY,OAAiB,EAAE,KAAa,EAAE,SAAiB,EAAE,MAAc,EAAE,SAAa,EAAE,QAAY,EAAE,OAAW,EAAE,SAAgB,EAAE,UAAiB,EAAE,WAAmB;oBAAlH,uBAAA,EAAA,cAAc;oBAAE,0BAAA,EAAA,aAAa;oBAAE,yBAAA,EAAA,YAAY;oBAAE,wBAAA,EAAA,WAAW;oBAAE,0BAAA,EAAA,gBAAgB;oBAAE,2BAAA,EAAA,iBAAiB;oBAAE,4BAAA,EAAA,mBAAmB;oBAAnL,YACI,iBAAO,SAmCV;oBAjCG,IAAI,YAAY,GAAG,kBAAkB,CAAC,eAAe,CAAC;wBAClD,KAAK,EAAE,KAAK;wBACZ,SAAS,EAAE,SAAS;wBACpB,YAAY,EAAE,KAAK;wBACnB,WAAW,EAAE,WAAW;wBACxB,mDAAmD;wBACnD,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,SAAS;wBACpB,QAAQ,EAAE,QAAQ;wBAClB,OAAO,EAAE,OAAO;wBAChB,SAAS,EAAE,SAAS;wBACpB,UAAU,EAAE,UAAU;qBACzB,CAAC,CAAC;oBAEH,IAAI,MAAM,EAAE;wBACR,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;wBAC3B,YAAY,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE,CAAC;qBACtC;oBAED,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;oBAEhC,kCAAkC;oBAClC,IAAI,KAAK,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtC,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;oBAC3C,IAAI,CAAC,GAAG,CAAC,cAAc;wBACnB,GAAG,CAAC,cAAc,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC5C,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAExB,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;oBAC9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAE5B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC;oBACxD,KAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;gBACnB,CAAC;gBACL,8BAAC;YAAD,CAtCA,AAsCC,CAtC4C,KAAK,CAAC,QAAQ,GAsC1D;YAtCY,6BAAuB,0BAsCnC,CAAA;QACL,CAAC,EA/8GkB,KAAK,GAAL,aAAK,KAAL,aAAK,QA+8GvB;IAAD,CAAC,EA/8GU,OAAO,GAAP,WAAO,KAAP,WAAO,QA+8GjB;AAAD,CAAC,EA/8GM,GAAG,KAAH,GAAG,QA+8GT;AAED,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;AACtD,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;AAC1E,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;AAC1D,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;AAC5D,KAAK,CAAC,0BAA0B,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC;AAChF,KAAK,CAAC,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC;AACxE,KAAK,CAAC,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;AAE1E,gBAAgB;AAChB,yGAAyG;AACzG,uIAAuI;AACvI,+GAA+G;AAC/G,kHAAkH;AAClH,gJAAgJ;AAChJ,oIAAoI;AACpI,GAAG;;AC59GH,IAAO,GAAG,CA8uBT;AA9uBD,WAAO,GAAG;IAAC,IAAA,OAAO,CA8uBjB;IA9uBU,WAAA,OAAO;QACd,IAAO,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;QAkBvC;YAaI,uBAAY,MAAqB,EAAE,SAAuB;gBAP1D,cAAS,GAAgB,IAAI,CAAC;gBAE9B,WAAM,GAAiB,IAAI,CAAC;gBAE5B,kBAAa,GAAwB,IAAI,CAAC;gBAC1C,sBAAiB,GAA4B,IAAI,CAAC;gBAsdlD,wBAAmB,GAAG;oBAClB,WAAW,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,SAAS,CAAC,KAAK,CAAC,EAApB,CAAoB;oBACvD,YAAY,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAArB,CAAqB;oBACzD,mBAAmB,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAA5B,CAA4B;oBACvE,YAAY,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAArB,CAAqB;oBACzD,aAAa,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAtB,CAAsB;oBAC3D,YAAY,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAArB,CAAqB;oBACzD,aAAa,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,WAAW,CAAC,KAAK,CAAC,EAAtB,CAAsB;oBAC3D,cAAc,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAvB,CAAuB;oBAC7D,cAAc,EAAE,UAAC,KAAgB,IAAK,OAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAvB,CAAuB;oBAC7D,gBAAgB,EAAE,UAAC,KAAgB,IAAK,OAAA,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAA9D,CAA8D;iBACzG,CAAC;gBA9dE,IAAI,SAAS;oBACT,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC/B,IAAI,MAAM;oBACN,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YAED,6BAAK,GAAL;gBACI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACpB,CAAC;YAED,+BAAO,GAAP;gBACI,OAAO,IAAI,CAAC,OAAO,CAAC;gBACpB,OAAO,IAAI,CAAC,KAAK,CAAC;YACtB,CAAC;YAED,oCAAY,GAAZ,UAAa,OAA0B;gBACnC,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;iBACrE;YACL,CAAC;YAED,4CAAoB,GAApB,UAAqB,GAAQ;gBACzB,IAAI,OAAO,GAAG,IAAI,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE;oBAC3C,OAAO,GAAG,CAAC;iBACd;qBAAM,IAAI,GAAG,YAAY,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBAC7D,IAAI,GAAG,GAAG,EAAE,CAAC;oBACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBACxC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAQ,CAAC;wBAC3B,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAU,MAAO,CAAC,WAAW,KAAK,kBAAkB,EAAE;4BACnG,IAAI,CAAC,YAAY,CAAC,MAAa,CAAC,CAAC;4BACjC,SAAS;yBACZ;wBACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC/C;oBACD,OAAO,GAAG,CAAC;iBACd;qBAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAChC,OAAO,GAAG,CAAC;iBACd;qBAAM,IAAI,GAAG,CAAC,WAAW,EAAE;oBACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;iBACxD;qBAAM,IAAI,GAAG,CAAC,kBAAkB,EAAE;oBAC/B,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;oBAChC,IAAI,GAAG,CAAC,oBAAoB;wBACxB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;oBAClG,IAAI,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,EACxG,UAAU,GAAG,UAAU,YAAY,KAAK,CAAC,QAAQ,CAAC;oBACtD,IAAI,GAAG,CAAC,UAAU,EAAE;wBAChB,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE;4BAC5B,IAAI,UAAU,EAAE;gCACZ,QAAQ,GAAG,EAAE;oCACT,KAAK,QAAQ;wCACT,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;wCACxE,MAAM;oCACV,KAAK,UAAU;wCACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4CACxD,IAAI,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;4CACnC,IAAI,KAAK,KAAK,IAAI;gDACd,SAAS;4CACb,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAU,KAAM,CAAC,WAAW,KAAK,kBAAkB,EAAE;gDAC9E,IAAI,CAAC,YAAY,CAAC,KAAY,CAAC,CAAC;gDAChC,SAAS;6CACZ;4CACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;yCACpD;wCACD,MAAM;oCACV;wCACI,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;wCACjE,MAAM;iCACb;6BACJ;;gCACG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;yBACxE;qBACJ;oBACD,OAAO,UAAU,CAAC;iBACrB;gBACD,OAAO,GAAG,CAAC;YACf,CAAC;YAED,0CAAkB,GAAlB,UAAmB,GAAQ,EAAE,IAAY;gBACrC,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;oBAChC,IAAI,eAAe,GAAuD,GAAG,CAAC,eAAe,CAAC;oBAC9F,IAAI,eAAe,IAAI,eAAe,CAAC,IAAI,EAAE;wBACzC,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;wBACtI,IAAI,GAAG,CAAC,UAAU,EAAE;4BAChB,IAAI,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAkB,EAC3E,GAAG,GAAG,CAAC,CAAC;4BACZ,MAAM,CAAC,OAAO,CAAC,UAAA,GAAG;gCACd,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,EAC3B,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAC1B,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gCAE1B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gCAClB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gCAClB,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACtB,CAAC,CAAC,CAAC;4BAEH,OAAO,MAAM,CAAC;yBACjB;wBAED,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;qBACjD;;wBAEG,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,GAAG,GAAG,CAAC,KAAK,EAAb,CAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;iBAChJ;gBACD,QAAQ,IAAI,EAAE;oBACV,KAAK,kBAAkB;wBACnB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;wBACvB,OAAO,IAAI,CAAC;oBAChB,KAAK,gBAAgB;wBACjB,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAChE,KAAK,SAAS;wBACV,yCAAyC;wBACzC,iJAAiJ;wBACjJ,IAAI,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACjD,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;4BACrB,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;gCACzF,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;6BACxD;yBACJ;wBACD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;4BAClD,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;6BAChC,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;4BACvD,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;wBACtC,IAAI,GAAG,CAAC,aAAa,EAAE;4BACb,OAAQ,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;4BAC3C,OAAQ,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;yBAC5D;wBACD,OAAO,OAAO,CAAC;oBACnB,KAAK,aAAa;wBACd,yCAAyC;wBACzC,IAAI,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;wBAC3C,IAAI,CAAC,aAAa;4BACd,aAAa,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;wBAC3E,6KAA6K;wBAC7K,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAQ,aAAa,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAsB,CAAC;wBACnH,KAAK,IAAI,GAAG,IAAI,OAAc,EAAE;4BAC5B,IAAI,GAAG,IAAI,OAAO,IAAI,GAAG,IAAI,QAAQ,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;gCACzF,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;6BACxD;yBACJ;wBACD,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;4BAClD,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;6BAChC,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI;4BACvD,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC;wBACtC,OAAO,OAAO,CAAC;oBACnB,KAAK,eAAe;wBAChB,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;wBACpE,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;4BACtB,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE;gCACpD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;6BACzD;yBACJ;wBACD,OAAO,QAAQ,CAAC;oBACpB,KAAK,gBAAgB,CAAC;oBACtB,KAAK,wBAAwB;wBACzB,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,EACrC,UAAU,GAAG,GAAG,CAAC,UAAU,EAC3B,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;wBAEzB,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;4BACzB,IAAI,IAAI,IAAI,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;gCAChF,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;6BAC5E;yBACJ;wBACD,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK;4BAC1B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAC3D,IAAI,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE;4BACrD,IAAI,UAAU,GAAG,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EACtD,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAC1B,IAAI,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,EACxB,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,oBAAoB,CAAiB,EAChF,QAAuB,CAAC;4BAE5B,IAAI,GAAG,CAAC,wBAAwB,EAAE;gCAC9B,IAAI,GAAG,CAAC,wBAAwB,YAAY,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;oCACtG,QAAQ,GAAG,GAAG,CAAC,wBAAwB,CAAC;;oCAExC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,wBAAwB,CAAkB,CAAC;6BAC3F;4BAED,IAAI,cAAc,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;4BAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gCACzD,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,EACb,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gCACjB,IAAI,CAAC,gCAAgC,CAAC,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAM,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;6BACtP;4BACD,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;yBAC5D;wBACD,IAAG,GAAG,CAAC,oBAAoB;4BACvB,QAAQ,CAAC,kBAAkB,EAAE,CAAC;wBAClC,IAAG,GAAG,CAAC,sBAAsB;4BACzB,QAAQ,CAAC,oBAAoB,EAAE,CAAC;wBACpC,IAAI,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,kBAAkB,EAAE;4BACrD,IAAI,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAkB,EACpH,cAAc,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,EAC3C,gBAAgB,GAAG,QAAQ,CAAC,UAAU,EACtC,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EAC1B,cAAc,GAAG,GAAG,CAAC,qBAAqB,EAC1C,iBAAiB,GAAG,CAAC,CAAC;4BAE1B,KAAK,IAAI,UAAU,IAAI,gBAAgB,EAAE;gCAErC,IAAI,eAAe,GAAG,gBAAgB,CAAC,UAAU,CAA0B,CAAC;gCAE5E,IAAI,eAAe,IAAI,eAAe,CAAC,KAAK;oCACxC,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,IAAU,eAAe,CAAC,KAAK,CAAC,WAAY,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;gCAEjO,IAAI,UAAU,KAAK,UAAU;oCACzB,iBAAiB,GAAG,eAAe,CAAC,KAAK,CAAC;6BACjD;4BAED,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;gCACxC,IAAI,QAAQ,GAAG,iBAAiB,GAAG,cAAc,CAAC;gCAClD,IAAI,QAAQ,IAAI,KAAK;oCACjB,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;;oCAEtK,cAAc,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;6BAC7K;4BAED,IAAI,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,UAAA,IAAI;gCAClE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,IAAI,CAA0B,EAAE,CAAC;4BAC/F,CAAC,CAAC,CAAC;4BAEH,IAAI,cAAc,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE;gCACpD,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,KAA8B,EAAE,CAAC,CAAC;6BACtG;4BAED,gBAAgB,CAAC,OAAO,CAAC,UAAA,IAAI;gCACzB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAChB,eAAe,GAAG,IAAI,CAAC,SAAS,EAChC,WAAW,GAAG,eAAe,CAAC,KAAiB;gCAC/C,sCAAsC;gCACtC,eAAe,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAA0B,EACrG,WAAW,GAAG,eAAe,CAAC,KAAiB,EAC/C,iBAAiB,GAAG,WAAW,CAAC,MAAM,EACtC,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC;gCAExC,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,EAAE;oCAC1C,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACxB,QAAQ,GAAG,IAAI,KAAK,QAAQ,CAAC;oCAEjC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE,IAAI,EAAE,EAAE;wCAE9C,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;wCAE7C,IAAI,QAAQ,EAAE;4CACV,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;4CAE1B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,EAAE,GAAG,EAAE,EAAE;gDAExC,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAC5B,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EACzB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA,eAAe;gDAEjE,eAAe,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;6CAEtE;yCACJ;6CAAM;4CACH,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,EAAE,GAAG,EAAE,EAAE;gDAExC,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EAC5B,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,EACzB,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gDAEjD,eAAe,CAAC,MAAM,CAAC,IAAI,GAAG,WAAW,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;6CAEtE;yCACJ;qCACJ;iCACJ;qCACI,IAAI,IAAI,KAAK,OAAO,EAAE;oCACvB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE,IAAI,EAAE,EAAE;wCAC9C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,iBAAiB,EAAE,IAAI,EAAE,EAAE;4CACjD,WAAW,CAAC,IAAI,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,iBAAiB,GAAG,IAAI,CAAC;yCAC/F;qCACJ;iCACJ;qCAAM;oCACH,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE,IAAI,EAAE,EAAE;wCAC9C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,iBAAiB,EAAE,IAAI,EAAE,EAAE;4CACjD,WAAW,CAAC,IAAI,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;yCACpE;qCACJ;iCACJ;gCAED,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC;4BACvC,CAAC,CAAC,CAAC;4BAEH,QAAQ,GAAG,cAAc,CAAC;yBAC7B;wBACD,KAAK,IAAI,GAAG,IAAI,QAAQ,EAAE;4BACtB,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;gCACjG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;6BACzD;yBACJ;wBACD,QAAQ,CAAC,qBAAqB,EAAE,CAAC;wBACjC,OAAO,QAAQ,CAAC;oBACpB,KAAK,iBAAiB;wBAClB,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACzF,KAAK,wBAAwB;wBACzB,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;oBAC1H,KAAK,gBAAgB;wBACjB,OAAO,IAAI,CAAC,mCAAmC,CAAC,GAAG,CAAC,CAAC;oBACzD,KAAK,UAAU,CAAC;oBAChB,KAAK,kBAAkB;wBACnB,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;wBACvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC,CAAC;wBAEhG,IAAG,GAAG,CAAC,oBAAoB;4BACvB,WAAW,CAAC,kBAAkB,EAAE,CAAC;wBACrC,IAAG,GAAG,CAAC,sBAAsB;4BACzB,WAAW,CAAC,oBAAoB,EAAE,CAAC;wBAEvC,IAAI,SAAS,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;wBAEpC,IAAI,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,kBAAkB,EAAE;4BACrD,IAAI,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAkB,EACpH,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,EACzB,cAAc,GAAG,GAAG,CAAC,qBAAqB,CAAC;4BAE/C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,cAAc,EAAE,IAAI,EAAE,EAAE;gCAC9C,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gCAC7C,IAAG,IAAI,KAAK,CAAC;oCACT,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;oCAE9B,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;6BAC5C;yBACJ;wBAED,OAAO,WAAW,CAAC;oBACvB,KAAK,eAAe;wBAChB,IAAI,aAAa,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,EAC9B,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAyB,CAAC;wBAC1E,IAAS,GAAsB,CAAC,UAAU;4BACtC,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,GAAU,CAAC,CAAC;6BACzD,IAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,KAAK,gBAAgB;4BACjD,GAAG,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAE/C,IAAI,aAAa,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;wBAEzG,IAAI,aAAa,IAAI,GAAG,CAAC,kBAAkB,EAAE;4BACzC,IAAI,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAkB,EACpH,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;4BAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,EAAE,CAAC,EAAE;gCACpC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;6BAC3E;yBACJ;wBACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;wBAC3H,OAAO,aAAa,CAAC;oBACzB,KAAK,KAAK;wBACN,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;wBAC1B,IAAI,GAAG,CAAC,MAAM,EAAE;4BACZ,IAAI,MAAM,GAAG,GAAG,CAAC,MAAsC,CAAC;4BACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gCACpC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;6BAC1E;yBACJ;wBACD,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAClD,OAAO,GAAG,CAAC;oBACf,SAAS,SAAS;wBACd,IAAI,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClD,IAAI,UAAU,GAAG,UAAU,YAAY,KAAK,CAAC,QAAQ,CAAC;wBACtD,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;wBACnD,OAAO,UAAU,CAAC;iBACzB;YACL,CAAC;YAED,wCAAgB,GAAhB,UAAiB,GAAQ,EAAE,UAAe,EAAE,UAAmB,EAAE,MAAiB;gBAC9E,IAAI,CAAC,MAAM;oBAAE,MAAM,GAAG,EAAE,CAAC;gBACzB,IAAI,cAAc,GAAG,KAAK,CAAC;gBAC3B,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;oBACjB,IAAI,GAAG,KAAK,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBACnD,SAAS;oBACb,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,WAAW,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;wBACtD,IAAI,UAAU,EAAE;4BACZ,QAAQ,GAAG,EAAE;gCACT,KAAK,QAAQ;oCACT,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oCAC9E,cAAc,GAAG,KAAK,CAAC;oCACvB,MAAM;gCACV,KAAK,UAAU,CAAC;gCAChB,KAAK,OAAO,CAAC;gCACb,KAAK,YAAY,CAAC;gCAClB,KAAK,UAAU;oCACX,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oCAC1D,cAAc,GAAG,IAAI,CAAC;oCACtB,MAAM;gCACV,KAAK,UAAU;oCACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wCAC7C,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wCACxB,IAAI,KAAK,KAAK,IAAI;4CACd,SAAS;wCACb,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAU,KAAM,CAAC,WAAW,KAAK,kBAAkB,EAAE;4CAC9E,IAAI,CAAC,YAAY,CAAC,KAAY,CAAC,CAAC;4CAChC,SAAS;yCACZ;wCACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;qCACpD;oCACD,MAAM;gCACV;oCACI,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oCACxD,MAAM;6BACb;yBACJ;;4BACG,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;qBAC/D;iBACJ;gBAED,IAAG,UAAU,IAAI,cAAc;oBAC3B,UAAU,CAAC,YAAY,EAAE,CAAC;gBAE9B,IAAI,UAAU,YAAY,KAAK,CAAC,MAAM;oBACjC,UAAkB,CAAC,sBAAsB,EAAE,CAAC;gBAEjD,IAAI,UAAU,IAAI,GAAG,CAAC,SAAS,IAAI,OAAO,GAAG,CAAC,SAAS,IAAI,QAAQ,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE;oBACzF,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;wBACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAA4B,CAAC,CAAC;;wBAE7D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAA4B,CAAC,CAAC;iBAClE;YACL,CAAC;YAED,6CAAqB,GAArB,UAAsB,UAAe,EAAE,GAAW,EAAE,KAAU;gBAE1D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAU,KAAM,CAAC,WAAW,KAAK,kBAAkB,EAAE;oBAChG,IAAI,CAAC,YAAY,CAAC,KAAY,CAAC,CAAC;oBAChC,OAAO;iBACV;gBACD,IAAI,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC9C,uFAAuF;gBACvF,iLAAiL;gBACjL,GAAG;gBACH,yBAAyB;gBACzB,6HAA6H;gBAC7H,GAAG;gBACH,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;oBAC3B,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;qBACxB,IAAI,UAAU,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,KAAK;oBAC3C,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;qBAC3B,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI;oBACtF,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;oBAE7B,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACjC,CAAC;YAED,0CAAkB,GAAlB,UAAmB,GAAW,EAAE,MAAoC,EAAE,OAAkC;gBACpG,OAAO,aAAa,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAChJ,CAAC;YAEM,sCAAwB,GAA/B,UAAgC,GAAW,EAAE,MAA4B,EAAE,MAAoC,EAAE,OAAkC;gBAC/I,IAAI,CAAC,MAAM;oBACP,MAAM,GAAG,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;gBAEvC,IAAI,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,UAAC,CAAiB;oBAC7C,IAAI,MAAM;wBACN,MAAM,CAAC,CAAC,CAAC,CAAC;oBACd,aAAa,CAAC,oBAAoB,EAAE,CAAC;gBACzC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBACvB,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,aAAa,IAAI,CAAC,CAAC;gBACjE,OAAO,OAAO,CAAC;YACnB,CAAC;YAeD,kDAA0B,GAA1B,UAA2B,QAA8B;gBACrD,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAE9D,IAAI,aAAa,GAAgC,EAAE,CAAC;gBAEpD,IAAI,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;gBAEhC,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;oBACzB,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAQ,CAAC;oBACxC,IAAI,KAAK,GAAG,SAAS,CAAC,KAAc,CAAC;oBACrC,IAAI,QAAQ,GAAU,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAEjD,aAAa,CAAC,IAAI,CAAC,GAAG;wBAClB,KAAK,EAAE,QAAQ;wBACf,QAAQ,EAAE,SAAS,CAAC,QAAQ;wBAC5B,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI;qBACzC,CAAC;iBACL;gBAED,OAAO,aAAa,CAAC;YACzB,CAAC;YAED,oDAA4B,GAA5B,UAA6B,UAAuC;gBAChE,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBAE1C,KAAK,IAAI,GAAG,IAAI,UAAU,EAAE;oBAExB,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAE3E,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;iBAEzF;gBAED,OAAO,QAAQ,CAAC;YACpB,CAAC;YAED,wDAAgC,GAAhC,UAAiC,UAAuC,EAAE,QAA+C,EAAE,SAAyB,EAAE,KAAmB;gBACrK,IAAI,CAAC,SAAS;oBACV,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAEpC,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;oBAC1D,OAAO;gBAEX,IAAI,MAA4B,CAAC;gBAEjC,IAAI,QAAQ,YAAY,KAAK,CAAC,QAAQ,EAAE;oBACpC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAC7D,IAAI,MAAM,CAAC,KAAK;wBACZ,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;iBACtC;qBAAM,IAAI,QAAQ,YAAY,KAAK,CAAC,cAAc,EAAE;oBACjD,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;iBACnG;;oBAEG,OAAO;gBAEX,IAAI,CAAC,MAAM,CAAC,UAAU;oBAClB,OAAO;gBAEX,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;oBAEzB,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;oBAE1E,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;wBAC3B,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;oBAC5E,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,KAAK;wBACnC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;oBAC3E,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;wBACvB,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;iBAE3E;gBAED,IAAI,CAAC,KAAK;oBACN,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAErC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;oBACpD,MAAM,CAAC,oBAAoB,EAAE,CAAC;gBAElC,IAAI,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;gBAEtC,IAAI,oBAAoB,GAAG,aAAa,CAAC,UAAU,CAAQ,CAAC;gBAC5D,IAAI,gBAAgB,GAAG,oBAAoB,CAAC,KAAiB,CAAC;gBAC9D,IAAI,cAAc,GAAG,oBAAoB,CAAC,QAAQ,CAAC;gBACnD,IAAI,UAAU,GAAG,gBAAgB,CAAC,MAAM,GAAG,cAAc,CAAC;gBAE1D,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,EAAE;oBACrE,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,EACvB,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,EAC3B,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oBAEhC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;oBAC1C,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBAC7B,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;oBACjC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;iBACpC;gBAED,IAAI,aAAa,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;oBAEjD,IAAI,eAAe,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;oBAEvE,IAAI,kBAAkB,GAAG,aAAa,CAAC,QAAQ,CAAQ,CAAC;oBACxD,IAAI,cAAc,GAAG,kBAAkB,CAAC,KAAiB,CAAC;oBAC1D,IAAI,iBAAiB,GAAG,kBAAkB,CAAC,QAAQ,CAAC;oBAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,iBAAiB,EAAE;wBACtE,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,EACrB,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EACzB,CAAC,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAE9B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;wBAEhD,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;wBAC3B,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;wBAC/B,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;qBAClC;iBACJ;gBAED,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;oBAEzB,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;oBACjC,IAAI,YAAY,GAAG,aAAa,CAAC,IAAI,CAAQ,CAAC;oBAE9C,IAAI,KAAK,GAAG,SAAS,CAAC,KAAiB,CAAC;oBAExC,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;oBAElC,IAAI,CAAC,YAAY,EAAE;wBACf,QAAQ,IAAI,EAAE;4BACV,KAAK,OAAO;gCACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oCACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iCACzC;gCACD,MAAM;4BACV,KAAK,IAAI;gCACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oCACjC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iCACpB;gCACD,MAAM;4BACV;gCACI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;oCACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;wCAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qCACjB;iCACJ;gCACD,MAAM;yBACb;qBACJ;yBAAM;wBACH,IAAI,QAAQ,GAAG,YAAY,CAAC,KAAiB,CAAC;wBAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC7C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC3B;qBACJ;iBACJ;YACL,CAAC;YAED,2DAAmC,GAAnC,UAAoC,cAAmB;gBACnD,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;gBACxC,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAEvC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,IAAI,cAAc,CAAC,qBAAqB;oBACpC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,iCAAiC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC9H,IAAI,CAAC,cAAc,CAAC,WAAW,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM;oBACjE,OAAO,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC/D,IAAI,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAEzC,IAAI,OAAO,GAAoB,EAAE,CAAC;oBAClC,IAAI,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAU,CAAC;oBAE3D,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;wBAC9C,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBAErB,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;qBAC3C;oBAED,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;oBAEjC,IAAI,CAAC,WAAW;wBACZ,SAAS;oBAEb,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAEpC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wBACvC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wBACnB,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;qBACvE;oBAED,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wBACvC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wBACnB,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;qBACnE;oBAED,IAAI,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC9D,2EAA2E;oBAE3E,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wBAC3C,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACtB,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;qBACvH;oBAED,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;wBACvC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;wBACf,IAAI,EAAE,IAAI,EAAE;4BACR,EAAE,GAAG,CAAC,CAAC;wBAEX,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;wBACpB,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;wBAErB,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjF,IAAI,SAAS,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;wBAC7B,IAAI,SAAS,IAAI,CAAC;4BACd,SAAS;wBACb,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;wBAEhF,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,KAAK,EAAE,EAAE,GAAG,WAAW,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;wBAC3G,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,GAAG,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;qBACvG;oBAED,KAAK,IAAI,WAAW,GAAG,CAAC,CAAC;iBAC5B;gBAED,IAAI,cAAc,CAAC,iBAAiB;oBAChC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,iBAAiB,CAAkB,CAAC,CAAC;gBAE3G,IAAI,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;gBAE5E,SAAS,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;gBAE1C,OAAO,cAAc,CAAC;YAC1B,CAAC;YACL,oBAAC;QAAD,CA1tBA,AA0tBC,IAAA;QA1tBY,qBAAa,gBA0tBzB,CAAA;IACL,CAAC,EA9uBU,OAAO,GAAP,WAAO,KAAP,WAAO,QA8uBjB;AAAD,CAAC,EA9uBM,GAAG,KAAH,GAAG,QA8uBT","file":"common.js","sourcesContent":["interface Array {\r\n sum(callbackfn: (currentValue: T) => number): number;\r\n max(callbackfn: (currentValue: T) => number): number;\r\n min(callbackfn: (currentValue: T) => number): number;\r\n pushAll(array: T[]): T[];\r\n distinctByKey(callbackfn: (currentValue: T) => number | string): T[];\r\n}\r\n\r\nif (!Array.prototype.sum) {\r\n Array.prototype.sum = function (this: T[], callbackfn: (currentValue: T) => number): number {\r\n return this.reduce((a, e) => a + callbackfn(e), 0);\r\n }\r\n}\r\n\r\nif (!Array.prototype.max) {\r\n Array.prototype.max = function (this: T[], callbackfn: (currentValue: T) => number): number {\r\n return Math.max(...this.map(callbackfn));\r\n }\r\n}\r\n\r\nif (!Array.prototype.min) {\r\n Array.prototype.min = function (this: T[], callbackfn: (currentValue: T) => number): number {\r\n return Math.min(...this.map(callbackfn));\r\n }\r\n}\r\n\r\nif (!Array.prototype.pushAll) {\r\n Array.prototype.pushAll = function (this: T[], array: T[]): T[] {\r\n this.push.apply(this, array);\r\n return this;\r\n }\r\n}\r\n\r\nif (!Array.prototype.distinctByKey) {\r\n Array.prototype.distinctByKey = function (this: T[], callbackfn: (currentValue: T) => number | string): T[] {\r\n var hashTable: any = {};\r\n for (var i = this.length; i--;)\r\n hashTable[callbackfn(this[i])] = this[i];\r\n return Object.keys(hashTable).map(key => hashTable[key]);\r\n }\r\n}\r\n\r\n","var EventManager;\r\nvar ListWithEvents;\r\nvar MapWithEvents;\r\n(function() {\r\n \"use strict\";\r\n\r\n if (Array.iterateMany === undefined) {\r\n\r\n //iterate big array efficent\r\n Array.iterateMany = function (arr, fn) {\r\n var len = arr.length;\r\n var it = Math.floor(len / 8);\r\n var l = len % 8;\r\n var i = 0;\r\n\r\n if (l > 0) {\r\n do {\r\n fn(arr[i++]);\r\n } while (--l > 0);\r\n }\r\n if (it <= 0) return;\r\n do {\r\n fn(arr[i++]);\r\n fn(arr[i++]);\r\n fn(arr[i++]);\r\n fn(arr[i++]);\r\n fn(arr[i++]);\r\n fn(arr[i++]);\r\n fn(arr[i++]);\r\n fn(arr[i++]);\r\n } while (--it > 0);\r\n };\r\n }\r\n\r\n if (Array.iterateHelper === undefined) {\r\n\r\n //call function multiple times\r\n Array.iterateHelper = function (times, fn) {\r\n var it = Math.floor(times / 8);\r\n var l = times % 8;\r\n var i = 0;\r\n\r\n if (l > 0) {\r\n do {\r\n fn(i++);\r\n } while (--l > 0);\r\n }\r\n if (it <= 0) return;\r\n do {\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n } while (--it > 0);\r\n };\r\n }\r\n\r\n if (Array.BinarySeach === undefined) {\r\n\r\n //returns index of element in ordered array. Negativ index indicating insert position if element was not found (eq. splice(idx >= 0 ? idx : -idx-1, 0, element))\r\n var defaultCompare = function(a, b) {\r\n return a - b;\r\n };\r\n\r\n Array.BinarySearchHelper = function(ar, el, compareFn) {\r\n var m = 0;\r\n var n = ar.length - 1;\r\n if (!compareFn) compareFn = defaultCompare;\r\n while (m <= n) {\r\n var k = (n + m) >> 1;\r\n var cmp = compareFn(el, ar[k]);\r\n if (cmp > 0) {\r\n m = k + 1;\r\n } else if (cmp < 0) {\r\n n = k - 1;\r\n } else {\r\n return k;\r\n }\r\n }\r\n return -m - 1;\r\n }\r\n }\r\n\r\n if (!window.FillArray) {\r\n window.FillArray = function (value, count) {\r\n if (Array.prototype.fill)\r\n return new Array(count).fill(value);\r\n var res = [];\r\n for (var i = 0; i < count; i++)\r\n res.push(value);\r\n return res;\r\n };\r\n }\r\n\r\n EventManager = function () { }\r\n\r\n EventManager.prototype = {\r\n\r\n constructor: EventManager,\r\n\r\n addListener: function (type, listener) {\r\n if (!type) {\r\n if (this._allListeners === undefined) Object.defineProperty(this, '_allListeners', { enumerable: false, configurable: true, writable: true, value: [] });\r\n var allListeners = this._allListeners;\r\n if (allListeners.indexOf(listener) === -1)\r\n allListeners.push(listener);\r\n return this;\r\n }\r\n\r\n if (this._listeners === undefined) Object.defineProperty(this, '_listeners', { enumerable: false, configurable: true, writable: true, value: {} });\r\n\r\n var listeners = this._listeners;\r\n\r\n if (listeners[type] === undefined)\r\n listeners[type] = [];\r\n\r\n if (listeners[type].indexOf(listener) === -1)\r\n listeners[type].push(listener);\r\n return this;\r\n },\r\n\r\n hasListener: function (type, listener) {\r\n\r\n if (!type) {\r\n if (this._allListeners === undefined) return false;\r\n return this._allListeners.indexOf(listener) !== -1;\r\n }\r\n\r\n if (this._listeners === undefined) return false;\r\n\r\n var listeners = this._listeners;\r\n\r\n if (listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1) {\r\n\r\n return true;\r\n\r\n }\r\n\r\n return false;\r\n\r\n },\r\n\r\n removeListener: function (type, listener) {\r\n if (!type && !listener) {\r\n if (this._allListeners !== undefined)\r\n delete this._allListeners;\r\n if (this._listeners !== undefined)\r\n delete this._listeners;\r\n return;\r\n }\r\n if (!type) {\r\n if (this._allListeners === undefined) return;\r\n var allListeners = this._allListeners;\r\n var idx = allListeners.indexOf(listener);\r\n if (idx !== -1)\r\n allListeners.splice(idx, 1);\r\n return;\r\n }\r\n \r\n if (this._listeners === undefined) return;\r\n\r\n var listeners = this._listeners;\r\n var listenerArray = listeners[type];\r\n\r\n if (listenerArray !== undefined) {\r\n\r\n if (!listener) {\r\n listeners[type] = [];\r\n } else {\r\n var index = listenerArray.indexOf(listener);\r\n\r\n if (index !== -1) {\r\n\r\n listenerArray.splice(index, 1);\r\n\r\n }\r\n }\r\n }\r\n },\r\n\r\n dispatchEvent: function (event) {\r\n /*if (typeof event === \"string\")\r\n event = { type: event };*/\r\n event.object = this;\r\n\r\n if (this._allListeners !== undefined) {\r\n var allListeners = this._allListeners;\r\n var arr = [];\r\n var len = allListeners.length;\r\n\r\n for (var i = 0; i < len; i++) {\r\n arr[i] = allListeners[i];\r\n }\r\n\r\n for (var i = 0; i < len; i++) {\r\n arr[i].call(this, event);\r\n }\r\n };\r\n\r\n if (this._listeners === undefined) return;\r\n\r\n var listeners = this._listeners;\r\n var listenerArray = listeners[event.type];\r\n\r\n if (listenerArray !== undefined) {\r\n\r\n \r\n\r\n var array = [];\r\n var length = listenerArray.length;\r\n\r\n for (var i = 0; i < length; i++) {\r\n\r\n array[i] = listenerArray[i];\r\n\r\n }\r\n\r\n for (var i = 0; i < length; i++) {\r\n\r\n array[i].call(this, event);\r\n\r\n }\r\n }\r\n }\r\n };\r\n\r\n EventManager.apply = function (object) {\r\n\r\n object.addListener = EventManager.prototype.addListener;\r\n object.hasListener = EventManager.prototype.hasListener;\r\n object.removeListener = EventManager.prototype.removeListener;\r\n object.dispatchEvent = EventManager.prototype.dispatchEvent;\r\n\r\n };\r\n\r\n // List with events for splice and update type of changes\r\n ListWithEvents = function (array) {\r\n if (array && array.length) {\r\n for (var i = 0, l = array.length; i < l; i++) {\r\n this.push(array[i]);\r\n }\r\n }\r\n Object.defineProperty(this, 'push', {\r\n enumerable: false, configurable: false, writable: false, value: function (v) {\r\n Array.prototype.push.call(this, v);\r\n this.dispatchEvent({type: 'splice', index: this.length - 1, removed: [], addedCount: 1 });\r\n }\r\n });\r\n Object.defineProperty(this, 'unshift', {\r\n enumerable: false, configurable: false, writable: false, value: function (v) {\r\n Array.prototype.unshift.call(this, v);\r\n this.dispatchEvent({ type: 'splice', index: 0, removed: [], addedCount: 1 });\r\n }\r\n });\r\n Object.defineProperty(this, 'pop', {\r\n enumerable: false, configurable: false, writable: false, value: function () {\r\n var rem = Array.prototype.pop.call(this);\r\n this.dispatchEvent({ type: 'splice', index: this.length, removed: [rem], addedCount: 0 });\r\n return rem;\r\n }\r\n });\r\n Object.defineProperty(this, 'shift', {\r\n enumerable: false, configurable: false, writable: false, value: function () {\r\n var rem = Array.prototype.shift.call(this);\r\n this.dispatchEvent({ type: 'splice', index: 0, removed: [rem], addedCount: 0 });\r\n return rem;\r\n }\r\n });\r\n Object.defineProperty(this, 'splice', {\r\n enumerable: false, configurable: false, writable: false, value: function (index, howmany, item) {\r\n var rem;\r\n if (typeof item === \"undefined\") {\r\n rem = Array.prototype.splice.call(this, index, howmany);\r\n this.dispatchEvent({ type: 'splice', index: index, removed: rem, addedCount: 0 });\r\n } else {\r\n rem = Array.prototype.splice.call(this, index, howmany, item);\r\n this.dispatchEvent({ type: 'splice', index: index, removed: rem, addedCount: 1 });\r\n }\r\n return rem;\r\n }\r\n });\r\n Object.defineProperty(this, 'sort', {\r\n enumerable: false, configurable: false, writable: false, value: function (fn) {\r\n var copy = [];\r\n for (var i = 0, l = this.length; i < l; i++) {\r\n copy.push(this[i]);\r\n }\r\n if (typeof fn === \"function\")\r\n Array.prototype.sort.call(this, fn);\r\n else\r\n Array.prototype.sort.call(this);\r\n for (var i = 0, l = this.length; i < l; i++) {\r\n if(copy[i] !== this[i])\r\n this.dispatchEvent({ type: 'update', name: i, oldValue: copy[i] });\r\n }\r\n }\r\n });\r\n };\r\n\r\n ListWithEvents.prototype = new Array();\r\n Object.defineProperty(ListWithEvents.prototype, 'constructor', { enumerable: false, configurable: false, writable: false, value: ListWithEvents });\r\n Object.defineProperty(ListWithEvents.prototype, 'toString', {\r\n enumerable: false, configurable: false, writable: false, value: function () {\r\n return \"[object Array]\";\r\n }\r\n });\r\n Object.defineProperty(ListWithEvents.prototype, 'toJSON', {\r\n enumerable: false, configurable: false, writable: false, value: function () {\r\n return this.toArray();\r\n }\r\n });\r\n Object.defineProperty(ListWithEvents.prototype, 'toArray', {\r\n enumerable: false, configurable: false, writable: false, value: function () {\r\n var arr = [];\r\n for (var i = 0, l = this.length; i < l; i++) {\r\n arr.push(this[i]);\r\n }\r\n return arr;\r\n }\r\n });\r\n Object.defineProperty(ListWithEvents.prototype, 'fromArray', {\r\n enumerable: false, configurable: false, writable: false, value: function (array) {\r\n this.splice(0, this.length);\r\n if (array && array.length) {\r\n for (var i = 0, l = array.length; i < l; i++) {\r\n this.push(array[i]);\r\n }\r\n }\r\n }\r\n });\r\n Object.defineProperty(ListWithEvents.prototype, 'clear', {\r\n enumerable: false, configurable: false, writable: false, value: function () {\r\n this.splice(0, this.length);\r\n }\r\n });\r\n Object.defineProperty(ListWithEvents.prototype, 'getAt', {\r\n enumerable: false, configurable: false, writable: false, value: function (idx) {\r\n return this[idx];\r\n }\r\n });\r\n Object.defineProperty(ListWithEvents.prototype, 'setAt', {\r\n enumerable: false, configurable: false, writable: false, value: function (idx, v) {\r\n var old = this[idx];\r\n this[idx] = v;\r\n this.dispatchEvent({ type: 'update', name: idx, oldValue: old });\r\n }\r\n });\r\n Object.defineProperty(ListWithEvents.prototype, 'addListener', { enumerable: false, configurable: false, writable: false, value: EventManager.prototype.addListener });\r\n Object.defineProperty(ListWithEvents.prototype, 'hasListener', { enumerable: false, configurable: false, writable: false, value: EventManager.prototype.hasListener });\r\n Object.defineProperty(ListWithEvents.prototype, 'removeListener', { enumerable: false, configurable: false, writable: false, value: EventManager.prototype.removeListener });\r\n Object.defineProperty(ListWithEvents.prototype, 'dispatchEvent', { enumerable: false, configurable: false, writable: false, value: EventManager.prototype.dispatchEvent });\r\n\r\n\r\n MapWithEvents = function (initialObject) {\r\n if (typeof initialObject === \"object\") {\r\n var keys = Object.keys(initialObject);\r\n for (var i = 0, j = keys.length; i < j; i++) {\r\n var key = keys[i];\r\n this[key] = initialObject[key];\r\n }\r\n }\r\n };\r\n\r\n MapWithEvents.prototype = {\r\n constructor: MapWithEvents,\r\n get: function(key) {\r\n return this[key];\r\n },\r\n set: function(key, v) {\r\n if (this.hasOwnProperty(key)) {\r\n var old = this[key];\r\n if (old !== v) {\r\n this[key] = v;\r\n this.dispatchEvent({ type: 'update', name: key, oldValue: old, newValue: v });\r\n }\r\n } else {\r\n this[key] = v;\r\n this.dispatchEvent({ type: 'add', name: key, newValue: v });\r\n }\r\n },\r\n copy: function(obj) {\r\n for (var key in obj) {\r\n if (obj.hasOwnProperty(key)) {\r\n this.set(key, obj[key]);\r\n }\r\n }\r\n },\r\n update: function(key, v) {\r\n var old = this[key];\r\n if (old !== v) {\r\n this[key] = v;\r\n this.dispatchEvent({ type: 'update', name: key, oldValue: old, newValue: v });\r\n }\r\n },\r\n has: function(key) {\r\n return this.hasOwnProperty(key);\r\n },\r\n remove: function (key) {\r\n if (this.has(key)) {\r\n var old = this[key];\r\n delete this[key];\r\n this.dispatchEvent({ type: 'remove', name: key, oldValue: old });\r\n }\r\n },\r\n get keys() {\r\n return Object.keys(this);\r\n },\r\n set keys(v) {\r\n var t = v; //assignment to temp var so minify optimization dosn't remove the parameter\r\n },\r\n empty: function() {\r\n var keys = this.keys;\r\n var old = [];\r\n for (var i = 0, j = keys.length; i < j; i++) {\r\n var key = keys[i];\r\n old.push({name: key, value: this[key]});\r\n delete this[key];\r\n }\r\n this.dispatchEvent({ type: 'empty', removed: old });\r\n },\r\n clone: function () {\r\n var result = {};\r\n for (var key in this) {\r\n if (this.hasOwnProperty(key)) {\r\n result[key] = this[key];\r\n }\r\n }\r\n return result;\r\n }\r\n };\r\n\r\n EventManager.apply(MapWithEvents.prototype);\r\n\r\n})();","//Functions for the intercompatibility of Solar.Pro.Tool and SPT.Eco\r\n\r\nvar hostPath = window.location.host;\r\n\r\nif (hostPath.indexOf(\"http\") !== 0)\r\n hostPath = (window.location.protocol.indexOf(\"https\") != -1 ? \"https://\" : \"http://\") + hostPath;\r\n\r\nvar culture = \"de-DE\";\r\nvar currentTheme = \"SPTv2\";\r\nvar currLogin = \"unknown\";\r\nvar currentLogicUnit = \"Levasoft\";\r\nvar isDebugMode = false;\r\nvar cdnPath = \"\";\r\n\r\nvar UseImperialSystem = false;\r\nvar isMultiRoofBuilding = false;\r\nvar usemeteronroof = false;\r\nvar isElevation = false;\r\nvar isClosed = false;\r\nvar EditorViewMode = \"Anordnung\";\r\nvar SkipAO3DSetup = true;\r\nvar keepDefaultConsole = true;\r\n\r\n//TODO correct texture and font paths\r\nvar SDFFontPath = hostPath + \"/content/images/SdfFonts/\";\r\nvar pathToTextures = hostPath + \"/content/images/Textures\";\r\n\r\n//set culture helper in jquery\r\n//$.global.culture.numberFormat[\".\"]\r\n((jquery: any) => {\r\n if (!jquery.global)\r\n jquery.global = {};\r\n if (!jquery.global.culture)\r\n jquery.global.culture = {};\r\n if (!jquery.global.culture.numberFormat)\r\n jquery.global.culture.numberFormat = [];\r\n if (!jquery.global.culture.numberFormat[\".\"])\r\n jquery.global.culture.numberFormat[\".\"] = culture == \"de-DE\" ? \",\" : \".\";\r\n})($ as any);\r\n\r\n//see SPTSettingInterface.Client3DObectOptions\r\nvar Client3DObectOptions = {\r\n None: 0,\n CanSelectInstances: 1,\n CanMoveInstances: 2,\n CanDeleteInstances: 4,\n CanInsertInstances: 8,\n CanDeactivateInstances: 16,\n CanRotate90: 32,\n StaticAppearance: 64,\n NoSimpleGeometry: 128,\n NoRectInsert: 256,\n ShowMetaData: 512,\n ScaleX: 1024,\n ScaleY: 2048,\n CanInsertScaled: 4096,\r\n CanBeScaledX: 8192,\r\n CanBeScaledY: 16384,\r\n All: 32767\r\n};\r\n\r\nvar ErrorLevel = {\r\n NoError: 0,\n Fail: 1,\n Severe: 2,\n Warning: 3,\n Info: 4\r\n};\r\n\r\nvar UI3DImages: IUI3DImages = {\r\n top: pathToTextures + \"/top_cube_ui_3d.gif\",\r\n bottom: pathToTextures + \"/bottom_cube_ui_3d.gif\",\r\n front: pathToTextures + \"/front_cube_ui_3d.gif\",\r\n back: pathToTextures + \"/back_cube_ui_3d.gif\",\r\n left: pathToTextures + \"/left_cube_ui_3d.gif\",\r\n right: pathToTextures + \"/right_cube_ui_3d.gif\",\r\n compassComposed: pathToTextures + \"/compassComp_rgb.png\",\r\n compassComposedNEWS: pathToTextures + \"/compassNEWS_rgb.png\",\r\n compassComposedHover: pathToTextures + \"/compassCompHover_rgb.png\",\r\n compassComposed_a: pathToTextures + \"/compassComp_a.png\",\r\n compassComposedNEWS_a: pathToTextures + \"/compassNEWS_a.png\",\r\n compassComposedHover_a: pathToTextures + \"/compassCompHover_a.png\",\r\n compassSidesHover: pathToTextures + \"/sides_hover.gif\",\r\n ModuleCellShape_Monocrystalline: pathToTextures + \"/ModuleCellShape_Monocrystalline.png\",\r\n ModuleCellShape_Polycrystalline: pathToTextures + \"/ModuleCellShape_Polycrystalline.png\",\r\n ModuleCellShape_Thinfilm: pathToTextures + \"/ModuleCellShape_Thinfilm.png\",\r\n ModuleCellShape_Flat: pathToTextures + \"/ModuleCellShape_Flat.png\",\r\n ModuleCellShape_Custom: hostPath + \"/handler/StaticImagesHandler.ashx?ID=ModuleCellShape\",\r\n ModuleReflection: pathToTextures + \"/ModuleCellShape_Flat.png\",\r\n InterCircle: pathToTextures + \"/circle_green_16.png\"\r\n};\r\n\r\nvar AO3DStrings = {\r\n BrowserWebGLErrorMessage: \"Warnung: Leider unterstützt ihr Browser ein nötiges WebGL Feature nicht. Dies kann zu Fehlern oder erheblichen Verlangsamungen führen.\",\r\n CouldntInsertObject: \"Das Objekt konnte hier nicht eingefügt werden.\",\r\n PleaseTryAgain: \"Bitte versuchen sie es erneut.\",\r\n ActionCausedError: \"Die Aktion hat leider einen Fehler verursacht.\",\r\n ActionNotExecuted: \"Die Aktion konnte leider nicht ausgeführt werden.\",\r\n CouldntMoveObject: \"Die Auswahl konnte nicht verschoben werden.\",\r\n Interference: \"Störfläche\",\r\n Dormer: \"Gaube\"\r\n};\r\n\r\nvar EditorViewLayers = {\r\n \"Electric\": [\r\n { Name: \"Stringing\", DisplayName: \"Verstringung\", IconX: 1, IconY: 8 },\r\n { Name: \"Grounding\", DisplayName: \"Erdung\", IconX: 2, IconY: 8 }\r\n ]\r\n};\r\n\r\nvar StrCustomDimensioning = \"CustomDimensioning\";\r\n\r\nvar initialStepsWidth = 0;\r\n\r\nvar initialStepsHeight = 0;\r\n\r\nvar electricTranslation = window.electricTranslation = {\r\n PolyDes_ElectricSelectInput: \"Bitte wählen Sie den zu verstringenden Eingang aus.\",\r\n PolyDes_ElectricSelectModules: \"Bitte wählen Sie Module zum Verstringen aus.\",\r\n PolyDes_ElectricInputAlreadyConnected: \"Dieser Eingang ist schon verstringt!\",\r\n PolyDes_ElectricInputModuleInfo: \"Sie müssen für diesen Eingang {0} Module verstringen!\",\r\n numberOfModules: \"Anzahl Module\"\r\n};\r\n\r\nvar MDStrings = {\r\n ApproxNotEnoughDepthError: \"Fehler: Keine Annäherung an Parameter möglich. Nicht genügend Tiefendaten für diese Region.\"\r\n};\r\n\r\nvar MdScaleEdgeModes = [\r\n { name: 'Skalieren', val: 0 },\r\n { name: 'Nur entlang der Kante skalieren', val: 1 },\r\n { name: 'Lokal strecken', val: 2 },\r\n { name: 'Nach links Verlängern', val: 3 },\r\n { name: 'Nach rechts Verlängern', val: 4 }\r\n];\r\n\r\nvar AreaTypeName = \"Area\";\r\nvar BuildingTypeName = \"Building\";\r\nvar RoofTypeName = \"Roof\";\r\nvar RoofAreaTypeName = \"RoofArea\";\r\nvar FreeAreaTypeName = \"FreeArea\";\r\nvar InterfernceTypeName = \"Interference\";\r\n\r\nvar AreaLayerName = \"Area\";\r\nvar BuildingLayerName = \"Gebäude\";\r\nvar RoofLayerName = \"Dach\";\r\nvar RoofAreaLayerName = \"RoofArea\";\r\nvar FreeAreaLayerName = \"Freifläche\";\r\nvar InterfernceLayerName = \"Störfläche\";\r\nvar editorMode = 0; //0 = Roof, 1 = Carport, 2 = FreeArea\r\n\r\nvar ConfirmDialogSaveOnlyClick: () => void;\r\nvar ConfirmDialogSaveAndReCreateClick: () => void;\r\n\r\nfunction SetWidthDialogTitleBarWidth(event?: any) { }\r\nfunction SetPaddingBack(event?: any) { }\r\n\r\nfunction OnError(jqXHR: JQueryXHR, textStatus: string, errorThrown: string) {\r\n\r\n}\r\n\r\n//possible length units: mm, m, ft, in\r\nfunction convertLengthUnit(val: number | string, options: { from?: string, to?: string }): number {\r\n\r\n var from = options.from || \"mm\",\r\n to = options.to || \"mm\";\r\n if (from === to || val === null || (typeof val !== \"number\" && typeof val !== \"string\"))\r\n return +val;\r\n\r\n var v = parseFloat(val as string);\r\n if (from === \"ft\") {\r\n v *= 12;\r\n from = \"in\";\r\n }\r\n if (from === \"m\") {\r\n v *= 1000;\r\n from = \"mm\";\r\n }\r\n\r\n var toReal = to;\r\n switch (to) {\r\n case \"m\":\r\n to = \"mm\";\r\n break;\r\n case \"ft\":\r\n to = \"in\";\r\n break;\r\n }\r\n\r\n if (from === \"mm\" && to === \"in\")\r\n v /= 25.4;\r\n else if (from === \"in\" && to === \"mm\")\r\n v *= 25.4;\r\n\r\n switch (toReal) {\r\n case \"m\":\r\n v /= 1000;\r\n break;\r\n case \"ft\":\r\n v /= 12;\r\n break;\r\n }\r\n\r\n return v;\r\n}\r\n\r\nfunction mmToImperial(val) {\r\n if (UseImperialSystem)\r\n return val / 25.4;\r\n return val;\r\n}\r\n\r\n//convert inches to mm if UseImperialSystem is true\r\nfunction ImperialTomm(val) {\r\n if (UseImperialSystem)\r\n return val * 25.4;\r\n return val;\r\n}\r\n\r\nfunction isNumber(n: any) {\r\n return !isNaN(parseFloat(n)) && isFinite(n);\r\n}\r\n\r\n//check if the number is correct for the given culture\r\nfunction CheckifNumber(value: string, culture: string) {\r\n if (value === '0')\r\n return true;\r\n\r\n if (culture.indexOf('de') != -1 && value.indexOf('.') != -1)\r\n return false;\r\n\r\n if (culture.indexOf('en') != -1 && value.indexOf(',') != -1)\r\n return false;\r\n\r\n return true;\r\n}\r\n\r\nfunction ImperialLengthToValue(input: number | string, isFeet?: boolean): string {\r\n if (!UseImperialSystem || !input || typeof input !== \"string\")\r\n return input as string;\r\n var isNegative = false;\r\n if (input.indexOf(\"-\") === 0) {\r\n isNegative = true;\r\n input = input.substring(1);\r\n }\r\n if (input.indexOf(\"+\") === 0)\r\n input = input.substring(1);\r\n var inches = input.match(/(\\d+(\\.|,)?\\d{0,9}|(\\.|,)\\d{1,9})\\s*(inches|in|''|”|\"|’’|‘‘|´´)/);\r\n var inchesStr;\r\n if (Array.isArray(inches))\r\n inchesStr = inches.length > 0 ? \"\" + inches[0] : null;\r\n else\r\n inchesStr = inches ? \"\" + inches : null;\r\n\r\n var inchesVal = inchesStr ? inchesStr.indexOf('.') != -1 || inchesStr.indexOf(',') != -1 ? parseFloat(inchesStr.replace(',',\n '.')) : parseInt(inchesStr) : null;\r\n if (inchesVal && !isNumber(inchesVal))\r\n inchesVal = null;\r\n\r\n var feets = input.match(/(\\d+(\\.|,)?\\d{0,9}|(\\.|,)\\d{1,9})\\s*(feet|ft|\\'|’|‘|´)/);\r\n var feetsStr = \"\";\r\n if (Array.isArray(feets))\r\n feetsStr = feets.length > 0 ? \"\" + feets[0] : null;\r\n else\r\n feetsStr = feets ? \"\" + feets : null;\r\n\r\n var feetsVal = feetsStr ? feetsStr.indexOf('.') != -1 || feetsStr.indexOf(',') != -1 ? parseFloat(feetsStr.replace(',',\n '.')) : parseInt(feetsStr) : null;\r\n if (feetsVal && !isNumber(feetsVal))\r\n feetsVal = null;\r\n\r\n if (!inchesVal && !feetsVal) {\r\n if (isFeet) {\r\n feetsVal = input.indexOf('.') != -1 || input.indexOf(',') != -1 ? parseFloat(input.replace(',',\n '.')) : parseInt(input);\r\n if (isNaN(feetsVal))\r\n return \"0\";\r\n } else {\r\n inchesVal = input.indexOf('.') != -1 || input.indexOf(',') != -1 ? parseFloat(input.replace(',',\n '.')) : parseInt(input);\r\n if (isNaN(inchesVal))\r\n return \"0\";\r\n }\r\n }\r\n\r\n if (!inchesVal || typeof inchesVal != \"number\")\r\n inchesVal = 0.0;\r\n if (!feetsVal || typeof feetsVal != \"number\")\r\n feetsVal = 0.0;\r\n var value = 0;\r\n if (isFeet)\r\n value = (feetsVal + (inchesVal * 0.0833333333)) * 1000;\r\n else\r\n value = (inchesVal + (feetsVal * 12)) * 1000;\r\n value = Math.round(value) / 1000;\r\n var val = \"\" + (isNegative ? (-value) : value);\r\n if (CheckifNumber(val, window.culture))\r\n return val;\r\n else\r\n return val.replace('.',\n ',');\r\n}\r\n\r\nfunction constructObject(constructor: (...args: any[]) => any, args?: any[]): any {\r\n return new (Function.prototype.bind.apply(constructor, [null].concat(args)));\r\n}\r\n\r\nfunction getSize() {\r\n var myWidth = 0, myHeight = 0;\r\n\r\n if (typeof (window.innerWidth) == 'number') {\r\n //Non-IE\r\n myWidth = parseInt(window.innerWidth as any);\r\n myHeight = parseInt(window.innerHeight as any);\r\n } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {\r\n //IE 6+ in 'standards compliant mode'\r\n myWidth = parseInt(document.documentElement.clientWidth as any);\r\n myHeight = parseInt(document.documentElement.clientHeight as any);\r\n } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {\r\n //IE 4 compatible\r\n myWidth = parseInt(document.body.clientWidth as any);\r\n myHeight = parseInt(document.body.clientHeight as any);\r\n }\r\n return [myWidth, myHeight];\r\n}\r\n\r\nvar articleModel = null;\r\nvar articleHolderViewModel = {\r\n showDialog: (ids: any[]) => { }\r\n};\r\nvar ArticleHolderInitalCallback = () => { };\r\n\r\nfunction CheckStatic() { }\r\n\r\nmodule ThemeManager {\r\n export function ResetTheme(navTitle?: string) { }\r\n export var sptThemeMainColor = \"fcb904\";\r\n}\r\n\r\nfunction WriteTraceSimple(message: string, category: string) {\r\n console.log(`${category}: ${message}`);\r\n}\r\n\r\nfunction OnProjectInfoCallBack(projectInfo: SolarProTool.ProjectInfoData) {\r\n\r\n}\r\n\r\nfunction ShowProgressView() {\r\n\r\n}\r\n\r\nfunction HideProgressView() {\r\n\r\n}\r\n\r\nfunction asyncTimeout(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\n//function setupButtonNextClickCallback(click: (callback: () => void) => void) {\r\n// console.log(\"setup button next click callback\");\r\n\r\n// var nxtbtn = $('.button-next').get(0) as HTMLButtonElement,\r\n// btn: HTMLButtonElement;\r\n\r\n// if(!nxtbtn)\r\n// return;\r\n \r\n// if ($('#new-next-button').length) {\r\n// btn = document.getElementById('new-next-button') as HTMLButtonElement;\r\n// } else {\r\n// btn = document.createElement('button');\r\n// btn.className = nxtbtn.className;\r\n// btn.type = \"button\";\r\n// btn.id = \"new-next-button\";\r\n// btn.textContent = nxtbtn.textContent;\r\n// nxtbtn.parentElement.insertBefore(btn, nxtbtn);\r\n// }\r\n\r\n// nxtbtn.style.display = \"none\";\r\n \r\n// btn.onclick = () => {\r\n// if(nxtbtn.disabled)\r\n// return;\r\n\r\n// click(() => {\r\n// console.log(\"trigger next click\");\r\n// $(nxtbtn).trigger(\"click\");\r\n// });\r\n// };\r\n//}","interface KnockoutExtenders {\r\n IntMinMax: (target: any, options: any) => any;\r\n UIntMinMax: (target: any, options: any) => any;\r\n ValueManipulate: (target: any, options: any) => any;\r\n UfloatPrecision: (target: any, options: any) => any;\r\n floatPrecision: (target: any, options: any) => any;\r\n trimString: (target: any) => any;\r\n onUpdate: (target: any, func: (val: any) => void) => any;\r\n}\r\n\r\nko.extenders.IntMinMax = function (target, options) {\r\n //create a writeable computed observable to intercept writes to our observable\r\n var result = ko.computed({\r\n read: target,\r\n write: function (newValue) {\r\n var current = target();\r\n if (newValue && typeof newValue == \"string\")\r\n newValue = newValue.replace(\",\", \".\");\r\n var valueToWrite = !isNumber(newValue) ? 0 : parseInt(newValue as any);\r\n if (typeof options.min !== \"undefined\" && valueToWrite < options.min) {\r\n valueToWrite = options.min;\r\n }\r\n\r\n if (typeof options.max !== \"undefined\" && valueToWrite > options.max) {\r\n valueToWrite = options.max;\r\n }\r\n\r\n //only write if it changed\r\n if (valueToWrite !== current) {\r\n target(valueToWrite);\r\n } else {\r\n if (newValue !== current) {\r\n target.notifySubscribers(valueToWrite);\r\n }\r\n }\r\n }\r\n });\r\n\r\n result(target());\r\n\r\n //return the new computed observable\r\n return result;\r\n};\r\n\r\nko.extenders.UIntMinMax = function (target, options) {\r\n //create a writeable computed observable to intercept writes to our observable\r\n var result = ko.computed({\r\n read: target, //always return the original observables value\r\n write: function (newValue) {\r\n var current = target();\r\n var min = null;\r\n var max = null;\r\n if (UseImperialSystem) {\r\n //mm to inches\r\n if (typeof options.min !== \"undefined\")\r\n min = options.min * 0.0393700787;\r\n if (typeof options.max !== \"undefined\")\r\n max = options.max * 0.0393700787;\r\n newValue = ImperialLengthToValue(newValue as any, options.isFeet === true);\r\n } else {\r\n if (newValue && typeof newValue == \"string\")\r\n newValue = newValue.replace(\",\", \".\");\r\n if (typeof options.min !== \"undefined\")\r\n min = options.min;\r\n if (typeof options.max !== \"undefined\")\r\n max = options.max;\r\n }\r\n var valueToWrite = !isNumber(newValue) ? 0 : (UseImperialSystem ? parseFloat(newValue as any) : parseInt(newValue as any));\r\n if (min !== null && valueToWrite < min) {\r\n valueToWrite = min;\r\n if (UseImperialSystem)\r\n valueToWrite = Math.round(valueToWrite * 1000) / 1000;\r\n }\r\n\r\n if (max !== null && valueToWrite > max) {\r\n valueToWrite = max;\r\n if (UseImperialSystem)\r\n valueToWrite = Math.round(valueToWrite * 1000) / 1000;\r\n }\r\n\r\n //only write if it changed\r\n if (valueToWrite !== current) {\r\n target(valueToWrite);\r\n } else {\r\n if (newValue !== current) {\r\n target.notifySubscribers(valueToWrite);\r\n }\r\n }\r\n }\r\n });\r\n\r\n result(target());\r\n\r\n //return the new computed observable\r\n return result;\r\n};\r\n\r\nko.extenders.ValueManipulate = function (target, options) {\r\n var readFunc = typeof options.read === \"function\" ? function () {\r\n return options.read(target(), options);\r\n } : function () {\r\n return target();\r\n };\r\n\r\n var writeFunc = typeof options.write === \"function\" ? function (newValue) {\r\n var current = target();\r\n var valueToWrite = options.write(newValue, current, options);\r\n if (valueToWrite !== current) {\r\n target(valueToWrite);\r\n } else {\r\n if (newValue !== current) {\r\n target.notifySubscribers(valueToWrite);\r\n }\r\n }\r\n } : function (newValue) {\r\n var current = target();\r\n if (newValue !== current) {\r\n target(newValue);\r\n }\r\n };\r\n\r\n var result = ko.computed({\r\n read: readFunc,\r\n write: writeFunc\r\n });\r\n\r\n //initialize with current value\r\n result(target());\r\n\r\n //return the new computed observable\r\n return result;\r\n};\r\n\r\nko.extenders.UfloatPrecision = function (target, options) {\r\n //create a writeable computed observable to intercept writes to our observable\r\n var result = ko.computed({\r\n read: options.replaceSeperator ? function () {\r\n if (($).global.culture)\r\n return ('' + target()).replace(\".\", ($).global.culture.numberFormat[\".\"]);\r\n return ('' + target());\r\n } : target,\r\n write: function (newValue) {\r\n var current = target();\r\n var roundingMultiplier = Math.pow(10, options.precision);\r\n var min = null;\r\n var max = null;\r\n newValue = ('' + newValue).replace(\",\", \".\");\r\n if (UseImperialSystem) {\r\n //mm to inches\r\n if (typeof options.min !== \"undefined\")\r\n min = options.min * 0.0393700787;\r\n if (typeof options.max !== \"undefined\")\r\n max = options.max * 0.0393700787;\r\n newValue = ImperialLengthToValue(newValue as any, options.isFeet === true);\r\n } else {\r\n if (typeof options.min !== \"undefined\")\r\n min = options.min;\r\n if (typeof options.max !== \"undefined\")\r\n max = options.max;\r\n }\r\n var newValueAsNum = isNaN(newValue as any) ? 0 : parseFloat(+newValue as any);\r\n if (min !== null && newValueAsNum < min) {\r\n newValueAsNum = min;\r\n if (UseImperialSystem)\r\n newValueAsNum = Math.round(newValueAsNum * 1000) / 1000;\r\n }\r\n\r\n if (max !== null && newValueAsNum > max) {\r\n newValueAsNum = max;\r\n if (UseImperialSystem)\r\n newValueAsNum = Math.round(newValueAsNum * 1000) / 1000;\r\n }\r\n var valueToWrite = Math.round(newValueAsNum * roundingMultiplier) / roundingMultiplier;\r\n //if (($).global.culture.numberFormat[\".\"] == ',')\r\n // valueToWrite = ('' + valueToWrite).replace(\".\", \",\");\r\n //only write if it changed\r\n if (valueToWrite !== current) {\r\n target(valueToWrite);\r\n } else {\r\n //if the rounded value is the same, but a different value was written, force a notification for the current field\r\n if (newValue !== current) {\r\n target.notifySubscribers(valueToWrite);\r\n }\r\n }\r\n }\r\n });\r\n\r\n //initialize with current value to make sure it is rounded appropriately\r\n result(target());\r\n\r\n //return the new computed observable\r\n return result;\r\n};\r\n\r\nko.extenders.floatPrecision = function (target, options) {\r\n //create a writeable computed observable to intercept writes to our observable\r\n var result = ko.computed({\r\n read: options.replaceSeperator ? function () {\r\n if (($).global.culture)\r\n return ('' + target()).replace(\".\", ($).global.culture.numberFormat[\".\"]);\r\n return ('' + target());\r\n } : target,\r\n write: function (newValue) {\r\n var current = target();\r\n var roundingMultiplier = Math.pow(10, options.precision);\r\n newValue = ('' + newValue).replace(\",\", \".\");\r\n var newValueAsNum = isNaN(newValue as any) ? 0 : parseFloat(+newValue as any);\r\n if (typeof options.min !== \"undefined\" && newValueAsNum < options.min) {\r\n newValueAsNum = options.min;\r\n }\r\n\r\n if (typeof options.max !== \"undefined\" && newValueAsNum > options.max) {\r\n newValueAsNum = options.max;\r\n }\r\n var valueToWrite = Math.round(newValueAsNum * roundingMultiplier) / roundingMultiplier;\r\n //if (($).global.culture.numberFormat[\".\"] == ',')\r\n // valueToWrite = ('' + valueToWrite).replace(\".\", \",\");\r\n\r\n //only write if it changed\r\n if (valueToWrite !== current) {\r\n target(valueToWrite);\r\n } else {\r\n //if the rounded value is the same, but a different value was written, force a notification for the current field\r\n if (newValue !== current) {\r\n target.notifySubscribers(valueToWrite);\r\n }\r\n }\r\n }\r\n });\r\n\r\n //initialize with current value to make sure it is rounded appropriately\r\n result(target());\r\n\r\n //return the new computed observable\r\n return result;\r\n};\r\n\r\nko.extenders.trimString = function (target) {\r\n var result = ko.computed({\r\n read: target, //always return the original observables value\r\n write: function (newValue) {\r\n var current = target();\r\n var valueToWrite = newValue as any;\r\n if (typeof newValue == \"string\")\r\n valueToWrite = valueToWrite.replace(/^\\s+|\\s+$/g, '');\r\n //only write if it changed\r\n if (valueToWrite !== current) {\r\n target(valueToWrite);\r\n } else {\r\n if (newValue !== current) {\r\n target.notifySubscribers(valueToWrite);\r\n }\r\n }\r\n }\r\n });\r\n\r\n //initialize with current value to make sure it is rounded appropriately\r\n result(target());\r\n\r\n //return the new computed observable\r\n return result;\r\n};\r\n\r\nko.extenders.onUpdate = function (target, func) {\r\n if (typeof func === 'function') {\r\n target.subscribe(function (newValue) {\r\n func(newValue as any);\r\n });\r\n }\r\n return target;\r\n};\r\n\r\nko.bindingHandlers.blurOnEnter = {\r\n init: function (element, valueAccessor) {\r\n $(element).bind('keyup', function (e) {\r\n if (e.keyCode === 13)\r\n $(this).blur();\r\n });\r\n }\r\n};\r\n\r\nko.bindingHandlers.NotifyOnEnter = {\r\n init: function (element, valueAccessor) {\r\n $(element).bind('keyup', function (e) {\r\n if (e.keyCode === 13) {\r\n var observable = valueAccessor();\r\n if (ko.isObservable(observable)) {\r\n var v1 = observable();\r\n $(this).blur();\r\n var v2 = observable();\r\n if (v1 === v2)\r\n observable(v1);\r\n } else\r\n $(this).blur();\r\n }\r\n });\r\n }\r\n};\r\n\r\nko.bindingHandlers.actionOnEnter = {\r\n init: function (element, valueAccessor) {\r\n var fn = ko.utils.unwrapObservable(valueAccessor());\r\n $(element).bind('keyup', function (e) {\r\n if (fn && e.keyCode === 13)\r\n fn(this);\r\n });\r\n }\r\n};\r\n\r\nko.bindingHandlers.checkBoxGetterSetter =\r\n{\r\n init: function (element, valueAccessor) {\r\n var options = ko.unwrap(valueAccessor());\r\n $(element).prop('checked', !!options.get()).change(function () {\r\n options.set(!!this.checked);\r\n });\r\n },\r\n update: function (element, valueAccessor) {\r\n var options = ko.unwrap(valueAccessor());\r\n $(element).prop('checked', !!options.get());\r\n }\r\n};\r\n\r\nvar jqColorPickerActionCallbacks = [];\r\n\r\nvar jqColorPickerActionCallback = function (e, action) {\r\n var actions = jqColorPickerActionCallbacks.slice();\r\n for (var i = 0, j = actions.length; i < j; i++) {\r\n actions[i](e, action);\r\n }\r\n};\r\n\r\nfunction jqColorPickerRgbToHex(rgb) {\r\n\r\n if (typeof rgb !== \"string\" || !rgb.length)\r\n return null;\r\n rgb = rgb.toLowerCase();\r\n if (/^#[0-9a-f]{6}$/i.test(rgb))\r\n return rgb;\r\n else if (rgb.indexOf(\"rgb\") !== -1) {\r\n rgb = rgb.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+))?\\)$/);\r\n return \"#\" + (\"0\" + parseInt(rgb[1]).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[2]).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[3]).toString(16)).slice(-2);\r\n }\r\n\r\n return null;\r\n}\r\n\r\nko.bindingHandlers.jqColorPicker = {\r\n init: function (element, valueAccessor, allBindingsAccessor) {\r\n var options = allBindingsAccessor().colorPickerOptions || {};\r\n var defaultMemColors = \"'rgba(0,0,0,1)','rgba(20,20,20,1)','rgba(64,64,64,1)','rgba(117,117,117,1)','rgba(156,156,156,1)','rgba(181,181,181,1)','rgba(229,229,229,1)','rgba(11,27,60,1)'\";\r\n // set default value\r\n var value = ko.utils.unwrapObservable(valueAccessor());\r\n if (value && value.length && value[0] === \"#\")\r\n value = value.substr(1);\r\n if (value)\r\n $(element).val(value.toLowerCase());\r\n\r\n var actionCallback = function (e, action) {\r\n if (element.style && element.style.backgroundColor) {\r\n var col = jqColorPickerRgbToHex(element.style.backgroundColor);\r\n if (col !== null) {\r\n var observable = valueAccessor();\r\n if (col !== observable())\r\n observable(col);\r\n }\r\n }\r\n };\r\n\r\n jqColorPickerActionCallbacks.push(actionCallback);\r\n\r\n //\"000000\", \"141414\", \"404040\", \"757575\", \"9C9C9C\", \"B5B5B5\", \"E5E5E5\", \"0B1B3C\"\r\n // colorpicker\r\n ($(element) as any).colorPicker({\r\n noAlpha: true,\r\n memoryColors: options.memoryColors === undefined ? defaultMemColors : options.memoryColors,//\"'rgba(0,0,0,1)','rgba(20,20,20,1)','rgba(64,64,64,1)','rgba(117,117,117,1)','rgba(156,156,156,1)','rgba(181,181,181,1)','rgba(229,229,229,1)','rgba(11,27,60,1)'\",\r\n appendTo: options.appendTo !== undefined ? options.appendTo : document.body,\r\n readOnly: true,\r\n noResize: true,\r\n size: options.size === undefined || options.size > 3 ? 2 : options.size, //2,\r\n init: function (elm, colors) {\r\n elm.style.backgroundColor = '#' + elm.value;\r\n //elm.style.color = colors.rgbaMixCustom.luminance > 0.22 ? '#222' : '#ddd';\r\n },\r\n actionCallback: jqColorPickerActionCallback\r\n });\r\n\r\n //handle the field changing\r\n ko.utils.registerEventHandler(element, \"change\", function () {\r\n var col = jqColorPickerRgbToHex(element.style.backgroundColor);\r\n if (col !== null && col.length) {\r\n var observable = valueAccessor();\r\n col = col.toLowerCase();\r\n if (col.charAt(0) !== '#')\r\n col = '#' + col;\r\n var col2 = observable().toLowerCase();\r\n if (col2.charAt(0) !== '#')\r\n col2 = '#' + col2;\r\n if (col !== col2) {\r\n element.style.backgroundColor = col2;\r\n }\r\n }\r\n });\r\n\r\n //handle disposal (if KO removes by the template binding)\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n var index = jqColorPickerActionCallbacks.indexOf(actionCallback);\r\n if (index > -1) {\r\n jqColorPickerActionCallbacks.splice(index, 1);\r\n }\r\n try {\r\n ($(element) as any).colorPicker(\"destroy\");\r\n if (typeof ($(element) as any).colorPicker.destroy === \"function\")\r\n ($(element) as any).colorPicker.destroy();\r\n } catch (e) { }\r\n });\r\n },\r\n update: function (element, valueAccessor) {\r\n var value = ko.utils.unwrapObservable(valueAccessor());\r\n if (value && value.length && value[0] === \"#\")\r\n value = value.substr(1);\r\n if (value)\r\n value = value.toLowerCase();\r\n if ($(element).val() !== value) {\r\n $(element).val(value);\r\n $(element).change();\r\n }\r\n }\r\n};\r\n\r\nko.bindingHandlers.jqSpinner = {\r\n init: function (element, valueAccessor, allBindingsAccessor) {\r\n //initialize datepicker with some optional options\r\n var options = allBindingsAccessor().spinnerOptions || {};\r\n ($(element) as any).spinner(options);\r\n\r\n //handle the field changing\r\n ko.utils.registerEventHandler(element, \"spinchange\", function () {\r\n var observable = valueAccessor();\r\n observable(($(element) as any).spinner(\"value\"));\r\n });\r\n\r\n //handle disposal (if KO removes by the template binding)\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n ($(element) as any).spinner(\"destroy\");\r\n });\r\n\r\n },\r\n update: function (element, valueAccessor) {\r\n var value = ko.utils.unwrapObservable(valueAccessor()),\r\n current = ($(element) as any).spinner(\"value\");\r\n\r\n if (value !== current) {\r\n ($(element) as any).spinner(\"value\", value);\r\n }\r\n }\r\n};\r\n\r\n//dynamic jquery ui tabs with knockout\r\nko.bindingHandlers.tabify = {\r\n init: function (element, valueAccessor) {\r\n var options = ko.unwrap(valueAccessor());\r\n var $target = (options.useThis ? $(element) : $(element).parent()) as any;\r\n var tabOptions = options.tabOptions || { active: 0 };\r\n if ($target.data('hasTabs') !== true) {\r\n $target.data('hasTabs', true);\r\n setTimeout(function () {\r\n if ($target.tabs) {\r\n var $uiTabs = $target.tabs(tabOptions);\r\n $uiTabs.find('.ui-widget-header').removeClass('ui-widget-header');\r\n }\r\n }, 0);\r\n }\r\n else if ($target.data('recreateTabs') !== true) {\r\n $target.data('recreateTabs', true);\r\n setTimeout(function () {\r\n $target.data('recreateTabs', false);\r\n if ($target.tabs) {\r\n $target.tabs('destroy');\r\n var $uiTabs = $target.tabs(tabOptions);\r\n $uiTabs.find('ul.ui-widget-header').removeClass('ui-widget-header');\r\n }\r\n }, 0);\r\n }\r\n }\r\n};\r\n\r\nko.bindingHandlers.qToolTip = {\r\n update: function (element, valueAccessor) {\r\n var options = valueAccessor(),\r\n $elem = $(element) as any;\r\n var txt = options.text ? ko.unwrap(options.text) : null;\r\n var title = options.title ? ko.unwrap(options.title) : null;\r\n\r\n var standardPosition = { corner: { target: 'rightMiddle', tooltip: 'bottomLeft' } };\r\n var corner = options.position != null ? options.position : standardPosition;\r\n if ($elem.data('hasQTip') !== true) {\r\n $elem.data('hasQTip', true);\r\n var qTipOption = {\r\n // position: { corner: { target: 'rightMiddle', tooltip: 'bottomLeft' } },\r\n position: corner,\r\n style: {\r\n name: 'light',\r\n tip: true,\r\n border: { width: 2, radius: 1, color: '#' + ThemeManager.sptThemeMainColor },\r\n classes: { tooltip: 'jqtip_tooltip', content: 'jqtip_content' },\r\n padding: 10,\r\n },\r\n show: { solo: true, delay: 500 },\r\n hide: { when: { event: 'mouseout' }, delay: 100 }\r\n } as any;\r\n if (txt && txt.length) {\r\n qTipOption.content = { text: \"\" + txt };\r\n if (title && title.length)\r\n qTipOption.content.title = { text: \"\" + title };\r\n }\r\n if ($elem.qtip)\r\n $elem.qtip(qTipOption);\r\n } else if (txt && txt.length) {\r\n if ($elem.qtip) {\r\n $elem.qtip('api').updateContent(\"\" + txt);\r\n if (title && title.length)\r\n $elem.qtip('api').updateTitle(\"\" + title);\r\n }\r\n } else if (title && title.length) {\r\n if ($elem.qtip)\r\n $elem.qtip('api').updateTitle(\"\" + title);\r\n }\r\n }\r\n};\r\n\r\nko.bindingHandlers.selectable = { //Bindings: selectable, selectableValue, selectableActiveClass, selectableDefaultClass\r\n init: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = valueAccessor();\r\n //var valueUnwrapped = ko.unwrap(value);\r\n var allBindings = allBindingsAccessor();\r\n var $elem = $(element);\r\n var ownValue = allBindings.selectableValue === 0 ? 0 : (allBindings.selectableValue || ($elem.val() || null));\r\n if (typeof value === 'function') {\r\n $elem.click(function () {\r\n if (value() != ownValue) {\r\n value(ownValue);\r\n }\r\n });\r\n }\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = valueAccessor();\r\n var valueUnwrapped = ko.unwrap(value);\r\n var allBindings = allBindingsAccessor();\r\n var $elem = $(element);\r\n var ownValue = allBindings.selectableValue === 0 ? 0 : (allBindings.selectableValue || ($elem.val() || null));\r\n var selectedClass = allBindings.selectableActiveClass || null;\r\n var unselectedClass = allBindings.selectableDefaultClass || null;\r\n if (selectedClass && selectedClass != unselectedClass) {\r\n if (ownValue === valueUnwrapped) {\r\n if (unselectedClass)\r\n $elem.removeClass(unselectedClass);\r\n $elem.addClass(selectedClass);\r\n } else {\r\n if (unselectedClass)\r\n $elem.addClass(unselectedClass);\r\n $elem.removeClass(selectedClass);\r\n }\r\n }\r\n }\r\n};\r\n\r\nko.bindingHandlers.inputReadonly = {\r\n init: function (element, valueAccessor) {\r\n var value = valueAccessor();\r\n var valueUnwrapped = ko.unwrap(value);\r\n if (valueUnwrapped) {\r\n $(element).prop('disabled', true);\r\n } else {\r\n $(element).prop('disabled', false);\r\n }\r\n },\r\n update: function (element, valueAccessor) {\r\n var value = valueAccessor();\r\n var valueUnwrapped = ko.unwrap(value);\r\n if (valueUnwrapped) {\r\n $(element).prop('disabled', true);\r\n } else {\r\n $(element).prop('disabled', false);\r\n }\r\n }\r\n};\r\n\r\nko.bindingHandlers.fadeVisible = {\r\n init: function (element, valueAccessor) {\r\n // Initially set the element to be instantly visible/hidden depending on the value\r\n var value = valueAccessor();\r\n $(element).toggle(ko.unwrap(value)); // Use \"unwrapObservable\" so we can handle values that may or may not be observable\r\n },\r\n update: function (element, valueAccessor) {\r\n // Whenever the value subsequently changes, slowly fade the element in or out\r\n var value = valueAccessor();\r\n ko.unwrap(value) ? $(element).fadeIn('fast') : $(element).fadeOut('fast');\r\n }\r\n};\r\n\r\nko.bindingHandlers.slideVisible = {\r\n init: function (element, valueAccessor) {\r\n // Initially set the element to be instantly visible/hidden depending on the value\r\n var value = valueAccessor();\r\n $(element).toggle(ko.unwrap(value)); // Use \"unwrapObservable\" so we can handle values that may or may not be observable\r\n },\r\n update: function (element, valueAccessor, allBindings) {\r\n // First get the latest data that we're bound to\r\n var value = valueAccessor();\r\n\r\n // Next, whether or not the supplied model property is observable, get its current value\r\n var valueUnwrapped = ko.unwrap(value);\r\n\r\n // Grab some more data from another binding property\r\n var duration = allBindings.get('slideDuration') || 200; // 200 ms is default duration unless otherwise specified\r\n\r\n var direction = allBindings.get('slideDirection') || 'up';\r\n\r\n setTimeout(function () {\r\n if (element) {\r\n if (valueUnwrapped)\r\n DManager.showWithEffect($(element), 'slide', { direction: direction }, duration); // Make the element visible\r\n else\r\n DManager.hideWithEffect($(element), 'slide', { direction: direction }, duration); // Make the element invisible\r\n }\r\n }, 0);\r\n\r\n }\r\n};\r\n\r\nko.bindingHandlers.valueAdjusted = {\r\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n var val = ko.unwrap(valueAccessor());\r\n\r\n var opts = allBindings.get('valueAdjustedOptions') || null;\r\n\r\n val = spt.Utils.GetFloatFromInputValue(\"\" + val, opts);\r\n\r\n if (($).global.culture)\r\n val = ('' + val).replace(\".\", ($).global.culture.numberFormat[\".\"]);\r\n\r\n $(element).val(val);\r\n\r\n var $elem = $(element).on('keyup',\r\n function (e) {\r\n if (e.keyCode === 13) //esc\r\n $(this).blur();\r\n });\r\n\r\n var onChanged = allBindings.get('valueAdjustedChanged') || null;\r\n if (typeof onChanged === \"function\") {\r\n $elem.on(\"change\",\r\n function () {\r\n onChanged($(element).val());\r\n });\r\n }\r\n\r\n var onInput = allBindings.get('valueAdjustedOnInput') || null;\r\n if (typeof onInput === \"function\") {\r\n $elem.on(\"input\",\r\n function () {\r\n onInput($(element).val());\r\n });\r\n }\r\n },\r\n update: function (element, valueAccessor, allBindings) {\r\n var val = ko.unwrap(valueAccessor());\r\n\r\n var opts = allBindings.get('valueAdjustedOptions') || null;\r\n\r\n val = spt.Utils.GetFloatFromInputValue(\"\" + val, opts);\r\n\r\n if (($).global.culture)\r\n val = ('' + val).replace(\".\", ($).global.culture.numberFormat[\".\"]);\r\n\r\n $(element).val(val);\r\n }\r\n};\r\n\r\nko.bindingHandlers.stopBinding = {\r\n init: function () {\r\n return { controlsDescendantBindings: true };\r\n }\r\n};\r\n\r\nko.bindingHandlers.tooltip = {\r\n defaultTooltipOptions: {\r\n style: {\r\n name: 'light', tip: true, border: { width: 2, radius: 1, color: '#' + ThemeManager.sptThemeMainColor },\r\n classes: { tooltip: 'jqtip_tooltip', content: 'jqtip_content' },\r\n padding: 10\r\n },\r\n show: { solo: true, delay: 500 },\r\n hide: { when: { event: 'mouseout' }, delay: 100 },\r\n position: { corner: { target: 'topMiddle', tooltip: 'topMiddle' } }\r\n },\r\n getBehaviour: function (bindings) {\r\n var behaviour = {} as any;\r\n if (typeof bindings === \"string\")\r\n behaviour.content = bindings;\r\n else if (typeof bindings === \"object\")\r\n behaviour = $.extend(behaviour, bindings);\r\n return $.extend({}, ko.bindingHandlers.tooltip.defaultTooltipOptions, behaviour);\r\n },\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n var allBindings = allBindingsAccessor();\r\n var tooltipBindings = allBindings.tooltip;\r\n var behaviour = ko.bindingHandlers.tooltip.getBehaviour(tooltipBindings);\r\n var $elem = $(element) as any;\r\n if($elem.qtip)\r\n $elem.qtip(behaviour);\r\n }\r\n};\r\n\r\nko.virtualElements.allowedBindings.stopBinding = true;\r\n\r\nvar koDeferUpdates = ko.options.deferUpdates = true;\r\n\r\n//ko.observable -> ko.notDefferedObservable\r\n//ko.observableArray -> ko.notDefferedObservableArray\r\n//ko.computed -> ko.notDefferedComputed\r\n//ko.pureComputed -> ko.notDefferedPureComputed\r\n['observable', 'observableArray', 'pureComputed', 'computed'].forEach(function (k) {\r\n var nk = 'notDeffered' + k.charAt(0).toUpperCase() + k.slice(1);\r\n ko[nk] = function () {\r\n ko.options.deferUpdates = false;\r\n var o = ko[k].apply(this, arguments);\r\n ko.options.deferUpdates = koDeferUpdates;\r\n return o;\r\n };\r\n});\r\n\r\n","module AManager {\r\n\r\n export interface IAjaxHandler {\r\n call: (param: any, callBack: (result: any) => void, errorfunc?: (msg: string) => void) => void\r\n }\r\n\r\n export interface IAjaxBindings {\r\n [url: string]: IAjaxBindingHandler | IAjaxBindingOptions;\r\n }\r\n\r\n export interface IAjaxBindingHandler {\r\n (data?: any): any;\r\n }\r\n\r\n export interface IAjaxBindingOptions {\r\n method: IAjaxBindingHandler;\r\n onFinished?: IAjaxBindingHandler;\r\n }\r\n\r\n var registeredHandlers: { [name: string]: (param: any, callBack: (result: any) => void, errorfunc?: (msg: string) => void) => void } = {};\r\n\r\n export function RegisterAjaxHandler(url: string, handler: (param: any, callBack: (result: any) => void, errorfunc?: (msg: string) => void) => void) {\r\n //var url = \"/WebServices/\" + handler.webservice + \"/\" + handler.urlToMethod;\r\n registeredHandlers[url] = handler;\r\n }\r\n\r\n function notImplemented(url: string) {\r\n console.log(\"Webservice call not implemented: \" + url);\r\n console.trace();\r\n return {} as any;\r\n }\r\n\r\n export function RegisterAjaxBindings(bindings: IAjaxBindings) {\r\n Object.keys(bindings).forEach(url => {\r\n var binding = bindings[url],\r\n fn: IAjaxBindingHandler,\r\n onFinished: IAjaxBindingHandler;\r\n if (binding && typeof (binding) === \"object\" && binding.method) {\r\n fn = binding.method;\r\n onFinished = binding.onFinished;\r\n }\r\n else\r\n fn = binding || notImplemented.bind(this, url);\r\n RegisterAjaxHandler(url, (param, callBack, errfn) => {\r\n var res = fn(param);\r\n if (res && res.then) {\r\n if (onFinished)\r\n res.then(data => {\r\n callBack(data);\r\n onFinished();\r\n });\r\n else\r\n res.then(callBack);\r\n }\r\n else {\r\n callBack(res);\r\n if (onFinished)\r\n onFinished();\r\n }\r\n });\r\n });\r\n }\r\n\r\n export var sessionIsOnline = true;\r\n\r\n export function CheckSession() {\r\n\r\n }\r\n\r\n export function GetTranslation(key: string, callBack: (tranlated: string) => void) {\r\n //TODO callback with translation\r\n callBack(key);\r\n }\r\n\r\n //returns true if a handler was registered with this url\r\n function callRegisteredHandler(url: string, data: any, callBack: (result: any) => void, errorfunc?: (msg: string) => void, withLoading?: boolean) {\r\n\r\n if (withLoading) {\r\n if (registeredHandlers[url]) {\r\n var j = LoaderManager.addLoadingJob();\r\n registeredHandlers[url](data, (res) => {\r\n LoaderManager.finishLoadingJob(j);\r\n callBack(res);\r\n }, (err) => {\r\n LoaderManager.finishLoadingJob(j);\r\n if (errorfunc)\r\n errorfunc(err);\r\n });\r\n return true;\r\n }\r\n } else {\r\n if (registeredHandlers[url]) {\r\n registeredHandlers[url](data, callBack, errorfunc);\r\n return true;\r\n }\r\n }\r\n\r\n console.log(\"No registered ajax handler found for: \" + url);\r\n\r\n callBack(null);\r\n return true;\r\n\r\n //return false;\r\n }\r\n\r\n export function AjaxEx(webservice: string, urlToMethod: string, param: string | {}, callBack: (result: any) => void, errorfunc?: (msg: string) => void, root?: string, withLoading?: boolean) {\r\n var url = \"/WebServices/\" + webservice + \"/\" + urlToMethod;\r\n if (callRegisteredHandler(url, param, callBack, errorfunc, withLoading))\r\n return;\r\n\r\n //TODO ajax call\r\n return;\r\n }\r\n\r\n export function Ajax(webservice: string, urlToMethod: string, param: any, callBack: (result: any) => void, errorfunc?: (msg: string) => void) {\r\n\r\n var url = \"/WebServices/\" + webservice + \"/\" + urlToMethod;\r\n if (callRegisteredHandler(url, param, callBack, errorfunc))\r\n return;\r\n\r\n //TODO ajax call\r\n return;\r\n }\r\n\r\n export function AjaxWithLoading(webservice: string, urlToMethod: string, param: any, callBack: (result: any) => void, errorfunc?: (msg: string) => void) {\r\n var url = \"/WebServices/\" + webservice + \"/\" + urlToMethod;\r\n if (callRegisteredHandler(url, param, callBack, errorfunc, true))\r\n return;\r\n\r\n //TODO ajax call\r\n return;\r\n }\r\n\r\n export function UploadFile(inputTarget: HTMLInputElement | string, controller: string, method: string, options: { paramName?: string, acceptedExtensions?: string[], maxFileSize?: number, dataType?: string }, callBack: (result: any) => void, errorfunc?: (msg: string) => void) {\r\n\r\n if (!inputTarget)\r\n return DManager.showErrorMessage(\"Fileupload Error: input target is invalid\");\r\n\r\n var maxFileSize = options && options.maxFileSize ? options.maxFileSize : 64 * 1048576; //64 mb\r\n\r\n var input: HTMLInputElement;\r\n\r\n if (inputTarget && typeof inputTarget === \"string\" && inputTarget.length) {\r\n if (inputTarget[0] === \"#\" || inputTarget[0] === \".\") {\r\n input = $(inputTarget).get(0) as HTMLInputElement;\r\n } else\r\n input = document.getElementById(inputTarget) as HTMLInputElement;\r\n }\r\n else\r\n input = inputTarget as HTMLInputElement;\r\n\r\n if (!input || !(input instanceof HTMLInputElement) || input.type !== 'file')\r\n return DManager.showErrorMessage(\"Fileupload Error: input target is invalid\");\r\n\r\n if (!input.value || !input.files || !input.files[0])\r\n return DManager.showErrorMessage(\"Fileupload Error: Uploaded file is invalid\");\r\n\r\n var file = input.files[0];\r\n var url = input.value;\r\n var ext = url.substring(url.lastIndexOf('.') + 1).toLowerCase();\r\n\r\n if (!file.size)\r\n return DManager.showErrorMessage(\"Fileupload Error: Uploaded file has an invalid file size\");\r\n\r\n if (file.size > maxFileSize)\r\n return DManager.showErrorMessage(\"Fileupload Error: Uploaded file is too big.\");\r\n\r\n var acceptedExtensions = (options && options.acceptedExtensions && options.acceptedExtensions.length) ? options.acceptedExtensions : input.accept ? input.accept.split(',') : [];\r\n\r\n if (acceptedExtensions && acceptedExtensions.length)\r\n acceptedExtensions = acceptedExtensions.filter(s => s && s.length > 1).map(s => s[0] === \".\" ? s.substring(1).toLowerCase() : s.toLowerCase());\r\n\r\n if (!ext.length || (acceptedExtensions && acceptedExtensions.length && acceptedExtensions.every(ae => ae !== ext)))\r\n return DManager.showErrorMessage(\"Fileupload Error: File has an invalid extension.\");\r\n\r\n //now begin file upload with ajax\r\n var param = options && options.paramName ? options.paramName : (input.name || \"filename\");\r\n\r\n var urlToMethod = `/${controller}/${method}`;\r\n\r\n var fd = new FormData();\r\n fd.append(param, file);\r\n\r\n var dataType = (options && options.dataType && options.dataType.length) ? options.dataType : \"json\";\r\n\r\n //LoaderManager.loadingAnimation(0, true);\r\n var j = LoaderManager.addLoadingJob();\r\n\r\n $.ajax({\r\n url: urlToMethod,\r\n data: fd,\r\n cache: false,\r\n contentType: false,\r\n processData: false,\r\n dataType: dataType,\r\n type: 'POST',\r\n success: (result: any, textStatus: string, jqXHR: JQueryXHR) => {\r\n if (callBack)\r\n callBack(result);\r\n },\r\n error: (jqXHR: JQueryXHR, textStatus: string, errorThrown) => {\r\n //DManager.showErrorMessage(jqXHR.responseText);\r\n if (errorfunc)\r\n errorfunc(textStatus);\r\n if (jqXHR.responseText && jqXHR.responseText.length > 3 && jqXHR.responseText.charCodeAt(0) == 31 && jqXHR.responseText.charCodeAt(1) == 65535 && jqXHR.responseText.charCodeAt(2) == 8) {\r\n //error message with invalid characters. (maybe compressed)\r\n (jqXHR as any).responseText = \"Error\";\r\n }\r\n if (window['OnError'])\r\n window.OnError(jqXHR, textStatus + \" on \" + urlToMethod + \" with \" + param, errorThrown);\r\n },\r\n complete: (jqXHR: JQueryXHR, textStatus: string) => {\r\n //LoaderManager.loadingAnimation(0, false);\r\n LoaderManager.finishLoadingJob(j);\r\n },\r\n xhr: () => {\r\n var req = ($.ajaxSettings).xhr();\r\n if (req) {\r\n req.upload.addEventListener('progress', (ev) => {\r\n //TODO Display progress Percentage\r\n //var progress = Math.min(1, Math.max(0, +(ev.loaded / ev.total)));\r\n //LoaderManager.loadingAnimation(progress, true, true);\r\n }, false);\r\n }\r\n return req;\r\n }\r\n });\r\n\r\n }\r\n\r\n //#region AjaxRequest\r\n\r\n export class AjaxRequest {\r\n\r\n public withLoading(loading?: boolean): AjaxRequest {\r\n this.mLoading = !!loading;\r\n return this;\r\n }\r\n\r\n public Root(root: string): AjaxRequest {\r\n this.mRoot = root;\r\n return this;\r\n }\r\n\r\n public Url(url: string): AjaxRequest {\r\n this.mUrl = url;\r\n return this;\r\n }\r\n\r\n public Area(area: string): AjaxRequest {\r\n this.mArea = area;\r\n return this;\r\n }\r\n\r\n public Controller(controller: string): AjaxRequest {\r\n this.mRoot = \"\";\r\n this.mService = controller;\r\n return this;\r\n }\r\n\r\n public Service(service: string): AjaxRequest {\r\n this.mService = service;\r\n return this;\r\n }\r\n\r\n public Method(method: string): AjaxRequest {\r\n this.mMethod = method;\r\n return this;\r\n }\r\n\r\n public Type(type: string): AjaxRequest {\r\n this.mType = type;\r\n return this;\r\n }\r\n\r\n public Context(context: string): AjaxRequest {\r\n this.mContext = context;\r\n return this;\r\n }\r\n\r\n public Data(data: any): AjaxRequest {\r\n if (this.mResult || this.mError)\r\n throw \"Ajax Error. Setting Data after request has been send.\";\r\n this.mData = data;\r\n return this;\r\n }\r\n\r\n public ContentType(contentType: string): AjaxRequest {\r\n this.mContentType = contentType;\r\n return this;\r\n }\r\n\r\n public DataType(dataType: string): AjaxRequest {\r\n this.mDataType = dataType;\r\n return this;\r\n }\r\n\r\n public CallBack(callBack?: (result?: any) => void, skipSend?: boolean): AjaxRequest {\r\n this.mCallBack = callBack || null;\r\n\r\n if (this.mResult && this.mCallBack)\r\n this.mCallBack(this.mResult);\r\n else if (!skipSend)\r\n this.send();\r\n\r\n return this;\r\n }\r\n\r\n public OnError(errorFunc: (textStatus?: string, ajaxRequest?: AjaxRequest) => void): AjaxRequest {\r\n this.mOnError = errorFunc || null;\r\n if (this.mError && this.mOnError)\r\n this.mOnError(this.mError);\r\n return this;\r\n }\r\n\r\n private mLoading = true;\r\n private mRoot: string = null;\r\n private mArea: string = null;\r\n private mUrl: string = null;\r\n private mService = \"\";\r\n private mMethod = \"\";\r\n private mType = \"POST\";\r\n private mContext: any = document.body;\r\n private mData: any = null;\r\n private mContentType = \"application/json\";\r\n private mDataType = \"json\";\r\n private mCallBack: (result?: any) => void;\r\n private mOnError: (textStatus?: string, ajaxRequest?: AjaxRequest) => void;\r\n private mResult: any;\r\n private mError: string;\r\n\r\n public clear() {\r\n if (this.mError)\r\n delete this.mError;\r\n\r\n if (this.mResult)\r\n delete this.mResult;\r\n }\r\n\r\n //called automatically with the CallBack method\r\n public send() {\r\n\r\n this.clear();\r\n\r\n AManager.CheckSession();\r\n\r\n //var load = this.mLoading ? LoaderManager.addLoadingJob() : null;\r\n\r\n var url = this.mUrl ? this.mUrl : ((this.mArea ? \"/Areas/\" + this.mArea : \"\") + (this.mRoot !== \"\" ? (this.mRoot || \"/WebServices\") : \"\") + \"/\" + this.mService + \"/\" + this.mMethod);\r\n\r\n //var param = this.mData ? (typeof this.mData !== \"string\" ? JSON.stringify(this.mData) : this.mData) : null;\r\n\r\n if (callRegisteredHandler(url, this.mData, this.mCallBack, this.mOnError, this.mLoading))\r\n return;\r\n\r\n //if (AManager.sessionIsOnline) {\r\n //$.ajax({\r\n // type: this.mType,\r\n // url: url,\r\n // context: this.mContext,\r\n // data: param,\r\n // contentType: this.mContentType,\r\n // dataType: this.mDataType,\r\n // success: (res) => {\r\n // var result = res && res.d !== undefined ? res.d : res;\r\n // this.mResult = result;\r\n // if (this.mCallBack)\r\n // this.mCallBack(result);\r\n // if (load)\r\n // LoaderManager.finishLoadingJob(load);\r\n // },\r\n // error: (jqXHR, textStatus, errorThrown) => {\r\n // this.mError = textStatus;\r\n // if (this.mOnError)\r\n // this.mOnError(textStatus);\r\n // if (load)\r\n // LoaderManager.finishLoadingJob(load);\r\n // //if (jqXHR.responseText && jqXHR.responseText.length > 3 && jqXHR.responseText.charCodeAt(0) == 31 && jqXHR.responseText.charCodeAt(1) == 65535 && jqXHR.responseText.charCodeAt(2) == 8) {\r\n // // //error message with invalid characters. (maybe compressed)\r\n // // jqXHR.responseText = \"Error\";\r\n // //}\r\n // if (window.OnError)\r\n // window.OnError(jqXHR, textStatus + \" on \" + url + \" with \" + param, errorThrown);\r\n // }\r\n //});\r\n //}\r\n //else\r\n // window.location.href = '/Account/LogOff';\r\n return this;\r\n }\r\n }\r\n\r\n export function withLoading(loading?: boolean): AjaxRequest {\r\n return new AjaxRequest().withLoading(loading);\r\n }\r\n\r\n export function Root(root: string): AjaxRequest {\r\n return new AjaxRequest().Root(root);\r\n }\r\n\r\n export function Url(url: string): AjaxRequest {\r\n return new AjaxRequest().Url(url);\r\n }\r\n\r\n export function Controller(controller?: string): AjaxRequest {\r\n return new AjaxRequest().Controller(controller);\r\n }\r\n\r\n export function Area(area: string): AjaxRequest {\r\n return new AjaxRequest().Area(area);\r\n }\r\n\r\n export function Service(service: string): AjaxRequest {\r\n return new AjaxRequest().Service(service);\r\n }\r\n\r\n export function Method(method: string): AjaxRequest {\r\n return new AjaxRequest().Method(method);\r\n }\r\n\r\n export function Type(type: string): AjaxRequest {\r\n return new AjaxRequest().Type(type);\r\n }\r\n\r\n export function Context(context: string): AjaxRequest {\r\n return new AjaxRequest().Context(context);\r\n }\r\n\r\n export function Data(data: any): AjaxRequest {\r\n return new AjaxRequest().Data(data);\r\n }\r\n\r\n export function ContentType(contentType: string): AjaxRequest {\r\n return new AjaxRequest().ContentType(contentType);\r\n }\r\n\r\n export function DataType(dataType: string): AjaxRequest {\r\n return new AjaxRequest().DataType(dataType);\r\n }\r\n\r\n //#endregion\r\n}\r\n\r\nmodule SolarProTool {\r\n export var AjaxEx = AManager.AjaxEx;\r\n\r\n export class AjaxObject {\r\n\r\n constructor(ws: string) {\r\n this.ws = ws;\r\n }\r\n\r\n ws: string;\r\n method: string;\r\n data: any;\r\n\r\n Call(method: string) {\r\n this.method = method;\r\n return this;\r\n }\r\n\r\n Data(data?: any) {\r\n this.data = data;\r\n return this;\r\n }\r\n\r\n CallBack(callBack?: (result?: any) => void, errorFunc?: (textStatus?: string, ajaxRequest?: AManager.AjaxRequest) => void, withoutLoading?: boolean) {\r\n AManager.Url(\"/\" + this.ws + \"/\" + this.method).Data(this.data).OnError(errorFunc).withLoading(!withoutLoading).CallBack(callBack);\r\n return this;\r\n }\r\n }\r\n}\r\n\r\n(SolarProTool as any).Ajax = (ws: string) => {\r\n return new SolarProTool.AjaxObject(ws);\r\n};\r\n","module DManager {\r\n function getJqueryElement(div: Element | JQuery | string) {\r\n //dynamically append # to div if its a string\r\n if (typeof div === \"string\") {\r\n if (div[0] !== \"#\" && div[0] !== \".\")\r\n div = \"#\" + div;\r\n }\r\n\r\n return $(div as any) as JQuery;\r\n }\r\n\r\n export function init(div: Element | JQuery | string, width: number | string, height: number | string, openfunction?: (event: any) => void, closefunction?: (event: any) => void, options?: any, callBack?: () => void) {\r\n //TODO init a dialog\r\n var $div = getJqueryElement(div);\r\n $div.hide();\r\n }\r\n export function destroy(div: Element | JQuery | string) {\r\n //TODO destroy a dialog\r\n var $div = getJqueryElement(div);\r\n $div.remove();\r\n }\r\n export function show(div: Element | JQuery | string) {\r\n //TODO show a dialog\r\n var $div = getJqueryElement(div);\r\n $div.show();\r\n }\r\n //export function isVisible(div: Element | JQuery | string): boolean;\r\n export function hide(div: Element | JQuery | string) {\r\n //TODO hide a dialog\r\n var $div = getJqueryElement(div);\r\n $div.hide();\r\n }\r\n export function reload() {\r\n //TODO reload current site\r\n }\r\n //export function showMultiRoofConfirm(callback?: (result: boolean) => void): void;\r\n //export function showInfoWindowYesNo(message: string, callback?: (result: boolean) => void): void;\r\n export function showInfoWindow(message: string) {\r\n //TODO show info window\r\n }\r\n //export function HideInfoWindow(): void;\r\n //export function showprogress(message?: string): void;\r\n //export function showprogressWithOverlay(message?: string): void;\r\n export function showErrorMessage(message: string, showReload?: boolean) {\r\n //TODO error message\r\n }\r\n //export function errorMessageIsShown(): boolean;\r\n export function showDialogDynamic(url: string, dialogId: string, width: number | string, height: number | string, callBack?: () => void) {\r\n //TODO show dialog dynamic\r\n }\r\n export function loadDynamicDialog(url: string, dialogId: string, width: number | string, height: number | string, callBack?: (diaId: string, dialogGenerated: boolean) => void) {\r\n //TODO load dialog dynamic\r\n }\r\n //export function HideErrorWindow(): void;\r\n //export function HideProgress(): void;\r\n export function Navigate(path: string) {\r\n //TODO navigate\r\n }\r\n //export function initNoModal(div: Element | JQuery | string, width: number | string, height: number | string, openfunction?: (event: any) => void, closefunction?: (event: any) => void, options?: any, callBack?: () => void): void;\r\n //export function SetWidthDialogTitleBarWidth(event: Event): void;\r\n //export function SetPaddingBack(): void;\r\n //export function SetWizardTitleBar(): void;\r\n\r\n\r\n var smallInfoQueue: string[] = [];\r\n var smallInfoIsVisible: boolean = false;\r\n var smallInfoTimerId: number = null;\r\n\r\n function checkSmallInfoQueue() {\r\n if (!smallInfoIsVisible && smallInfoQueue.length) {\r\n smallInfoIsVisible = true;\r\n var message = smallInfoQueue.shift();\r\n $('#InfoMessageSmallText').html(message);\r\n showWithFade($('#InfoMessageSmall'));\r\n smallInfoTimerId = setTimeout(() => {\r\n hideWithFade($('#InfoMessageSmall'));\r\n smallInfoTimerId = null;\r\n smallInfoIsVisible = false;\r\n checkSmallInfoQueue();\r\n }, 3000) as any;\r\n }\r\n }\r\n\r\n export function SmallInfoWindowClear() {\r\n if (smallInfoIsVisible || smallInfoQueue.length) {\r\n if (smallInfoTimerId !== null) {\r\n clearTimeout(smallInfoTimerId);\r\n smallInfoTimerId = null;\r\n }\r\n if (smallInfoQueue.length)\r\n smallInfoQueue.splice(0, smallInfoQueue.length);\r\n if (smallInfoIsVisible)\r\n hideWithFade($('#InfoMessageSmall'));\r\n smallInfoIsVisible = false;\r\n }\r\n }\r\n\r\n export function ShowSmallInfo(message: string, clear?: boolean) {\r\n if (clear)\r\n SmallInfoWindowClear();\r\n smallInfoQueue.push(message);\r\n checkSmallInfoQueue();\r\n }\r\n\r\n export function SmallInfoWindowNext() {\r\n if (smallInfoIsVisible && smallInfoTimerId !== null) {\r\n clearTimeout(smallInfoTimerId);\r\n smallInfoTimerId = null;\r\n smallInfoIsVisible = false;\r\n hideWithFade($('#InfoMessageSmall'));\r\n checkSmallInfoQueue();\r\n }\r\n }\r\n\r\n export function hideWithFade(div: JQuery) {\r\n return div.addClass('fadeIn_hide').removeClass('fadeIn_show');\r\n }\r\n\r\n export function showWithFade(div: JQuery) {\r\n return div.show().addClass('fadeIn_show').removeClass('fadeIn_hide');\r\n }\r\n\r\n export function hideWithEffect(div: JQuery, effect: string, options?: any, duration?: number | string, complete?: Function) {\r\n return hideWithFade(div);\r\n }\r\n export function showWithEffect(div: JQuery, effect: string, options?: any, duration?: number | string, complete?: Function) {\r\n return showWithFade(div);\r\n }\r\n export function makeDraggable(div: JQuery) {\r\n //return div.draggable();\r\n return div;\r\n }\r\n export function makeAutoComplete(input: JQuery, options: AutocompleteOptions) {\r\n //TODO make autocomplete\r\n //return input.autocomplete(options as JQueryUI.AutocompleteOptions);\r\n return input;\r\n }\r\n export function removeAutoComplete(input: JQuery) {\r\n //input.autocomplete(\"destroy\");\r\n }\r\n export function makeUnselectable($target: JQuery, applyToChildren?: boolean) {\r\n $target.addClass('unselectable') // All these attributes are inheritable\r\n .attr('unselectable', 'on') // For IE9 - This property is not inherited, needs to be placed onto everything\r\n .attr('draggable', 'false'); // For moz and webkit, although Firefox 16 ignores this when -moz-user-select: none; is set, it's like these properties are mutually exclusive, seems to be a bug.\r\n\r\n if (applyToChildren) {\r\n $target // Apply non-inheritable properties to the child elements\r\n .find('*')\r\n .attr('draggable', 'false')\r\n .attr('unselectable', 'on');\r\n }\r\n }\r\n}\r\n\r\nmodule DynToolTip {\r\n export function showHowToInfo(infoContainer: string, showForId: string, howToKey: string, openFunc?: () => void, always?: boolean, nextFunc?: () => void) {\r\n //TODO show dynamic tooltip\r\n }\r\n}","class LoadingJob {\r\n constructor(timeoutFunc: (j: LoadingJob) => void, timeoutTime: number) {\r\n this.TimeOutFunc = timeoutFunc;\r\n this.TimeoutTime = timeoutTime;\r\n this.TimeOut = null;\r\n this.waiting = false;\r\n }\r\n\r\n start() {\r\n if (!this.TimeOut) {\r\n this.TimeOut = setTimeout(this.TimeOutEvent, this.TimeoutTime) as any;\r\n }\r\n this.waiting = true;\r\n return this;\r\n }\r\n\r\n stop() {\r\n if (this.TimeOut) {\r\n window.clearTimeout(this.TimeOut);\r\n this.TimeOut = null;\r\n }\r\n this.waiting = false;\r\n return this;\r\n }\r\n\r\n TimeOutEvent() {\r\n this.TimeOut = null;\r\n if (this.TimeOutFunc) {\r\n this.TimeOutFunc(this);\r\n }\r\n }\r\n\r\n finish() {\r\n LoaderManager.finishLoadingJob(this);\r\n }\r\n\r\n TimeOutFunc: (j: LoadingJob) => void;\r\n TimeoutTime: number;\r\n TimeOut: number;\r\n waiting: boolean;\r\n}\r\n\r\nmodule spt.LoadingHelper {\r\n var finishedEvent = { type: 'finished' };\r\n var resourceLoadedEvent = { type: 'resourceLoaded' };\r\n\r\n export class LoadingManager implements IEventManager {\r\n private _loadingQueue: LoadingJob[] = [];\r\n private _maxLoadingTimeOut = 1000 * 60 * 2; //2 minutes\r\n private _loadingStarted = false;\r\n\r\n private checkLoadingQueue(): void {\r\n if (this._loadingQueue.length === 0) {\r\n if (this._loadingStarted)\r\n this.dispatchEvent(finishedEvent);\r\n this._loadingStarted = false;\r\n\r\n this.hideLoadingAnim();\r\n }\r\n }\r\n\r\n private removeFromQueue(j: LoadingJob): void {\r\n var l = this._loadingQueue.length;\r\n if (l) {\r\n var index = this._loadingQueue.indexOf(j);\r\n if (index != -1) {\r\n this._loadingQueue.splice(index, 1);\r\n this.checkLoadingQueue();\r\n } else {\r\n this.finishLoadingJob();\r\n }\r\n }\r\n }\r\n \r\n private showLoadingAnim() {\r\n //TODO lade animation hinzufügen\r\n let mapViewLoader = $('#clientMapViewLoader');\r\n mapViewLoader.removeClass();\r\n mapViewLoader.addClass('ui active inverted dimmer');\r\n }\r\n\r\n private hideLoadingAnim() {\r\n //TODO lade animation hinzufügen\r\n let mapViewLoader = $('#clientMapViewLoader');\r\n mapViewLoader.removeClass();\r\n mapViewLoader.addClass('ui disabled');\r\n }\r\n\r\n isLoading(): boolean {\r\n return this._loadingQueue.length > 0;\r\n }\r\n\r\n addLoadingJob(): LoadingJob {\r\n \r\n if (this._loadingQueue.length === 0) {\r\n \r\n this._loadingStarted = true;\r\n this.showLoadingAnim();\r\n \r\n }\r\n var lj = new LoadingJob(this.removeFromQueue, this._maxLoadingTimeOut).start();\r\n this._loadingQueue.push(lj);\r\n return lj;\r\n }\r\n\r\n finishLoadingJob(j?: LoadingJob): void {\r\n \r\n if (!j) {\r\n j = this._loadingQueue.pop();\r\n if (j)\r\n j.stop();\r\n this.checkLoadingQueue();\r\n }\r\n else {\r\n j.stop();\r\n this.removeFromQueue(j);\r\n }\r\n }\r\n\r\n //reset(): void;\r\n //testloadingAnimation(): void;\r\n //loadingAnimation(percent: number, display: boolean, showCount?: boolean): void;\r\n //hasLoadingAnimation(): boolean;\r\n notifyResourceLoaded() {\r\n this.dispatchEvent(resourceLoadedEvent);\r\n }\r\n\r\n addListener(type: string, listener: (event: IEventManagerEvent) => void): EventManager { return this; }\r\n\r\n hasListener(type: string, listener: (event: IEventManagerEvent) => void): boolean { return false; }\r\n\r\n removeListener(type?: string, listener?: (event: IEventManagerEvent) => void): void {}\r\n\r\n dispatchEvent(event: IEventManagerEvent): void {}\r\n }\r\n\r\n EventManager.apply(LoadingManager.prototype);\r\n}\r\n\r\nvar LoaderManager = new spt.LoadingHelper.LoadingManager();","module Detector {\r\n\r\n var webglParams = {\r\n webglVersion: \"\",\r\n shadingLanguageVersion: \"\",\r\n webglVendor: \"\",\r\n webglRenderer: \"\",\r\n maxAnisotropy: 1,\r\n maxFloatPrecision: \"mediump\",\r\n supportsInstancedArrays: false,\r\n maxTextureSize: 1024,\r\n antialias: false,\r\n preserveDrawingBuffer: false,\r\n compressedTexture: false,\r\n depthTexture: false\r\n };\r\n\r\n function getWebglContextName() {\r\n if (!!window[\"WebGLRenderingContext\"]) {\r\n var canvas = document.createElement(\"canvas\"),\r\n names = [\"webgl\", \"experimental-webgl\", \"moz-webgl\"],\r\n result: string = null,\r\n gl: WebGLRenderingContext = null;\r\n\r\n for (var i in names) {\r\n try {\r\n gl = canvas.getContext(names[i] as string) as WebGLRenderingContext;\r\n if (gl && typeof gl.getParameter == \"function\") {\r\n result = names[i];\r\n break;\r\n }\r\n } catch (e) { }\r\n }\r\n\r\n if (result && gl) {\r\n try {\r\n webglParams.webglVersion = \"\" + gl.getParameter(gl.VERSION);\r\n webglParams.shadingLanguageVersion = \"\" + gl.getParameter(gl.SHADING_LANGUAGE_VERSION);\r\n webglParams.webglVendor = \"\" + gl.getParameter(gl.VENDOR);\r\n webglParams.webglRenderer = \"\" + gl.getParameter(gl.RENDERER);\r\n\r\n var anisotropyExtension = gl.getExtension('EXT_texture_filter_anisotropic') || gl.getExtension('MOZ_EXT_texture_filter_anisotropic') || gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');\r\n\r\n if (anisotropyExtension) {\r\n webglParams.maxAnisotropy = gl.getParameter(anisotropyExtension.MAX_TEXTURE_MAX_ANISOTROPY_EXT);\r\n if (webglParams.maxAnisotropy === 0)\r\n webglParams.maxAnisotropy = 2;\r\n } else\r\n webglParams.maxAnisotropy = 0;\r\n \r\n webglParams.supportsInstancedArrays = !!gl.getExtension(\"ANGLE_instanced_arrays\");\r\n webglParams.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\r\n if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT).precision > 0)\r\n webglParams.maxFloatPrecision = 'highp'; \r\n else if (gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT).precision > 0 && gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT).precision > 0)\r\n webglParams.maxFloatPrecision = 'mediump';\r\n else\r\n webglParams.maxFloatPrecision = 'lowp';\r\n \r\n var webGLContextAttributes = gl.getContextAttributes();\r\n\r\n webglParams.antialias = !!webGLContextAttributes.antialias;\r\n webglParams.preserveDrawingBuffer = !!webGLContextAttributes.preserveDrawingBuffer;\r\n webglParams.compressedTexture = !!(gl.getExtension('WEBGL_compressed_texture_s3tc') || gl.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || gl.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc'));\r\n webglParams.depthTexture = !!gl.getExtension('WEBGL_depth_texture');\r\n\r\n } catch (e) { }\r\n return result;\r\n }\r\n\r\n return null;\r\n }\r\n \r\n return null;\r\n }\r\n\r\n export function getBrowserInfo() {\r\n var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [] as RegExpMatchArray;\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE', version: (tem[1] || '') };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR\\/(\\d+)/);\r\n if (tem != null) { return { name: 'Opera', version: tem[1] }; }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) { M.splice(1, 1, tem[1]); }\r\n return {\r\n name: M[0],\r\n version: M[1]\r\n };\r\n }\r\n export var browserInfo = getBrowserInfo();\r\n export var webglContextName = getWebglContextName();\r\n export var canvas = !!window.CanvasRenderingContext2D;\r\n export var webgl = !!webglContextName;\r\n export var webglParameters = webglParams;\r\n export var workers = !!window.Worker;\r\n export var sharedWorkers = !!window['SharedWorker'];\r\n export var fileapi = !!(window.File && window.FileReader && window.FileList && window.Blob);\r\n}\r\n\r\nvar sptBrowserCompatibilityCheck = (() => {\r\n var sptBrowserRequirements = {\r\n 'MSIE': 10,\r\n 'IE': 10,\r\n 'Chrome': 23,\r\n 'Firefox': 35,\r\n 'Opera': 15,\r\n 'Safari': 6\r\n };\r\n\r\n return () => {\r\n var browser = Detector.getBrowserInfo();\r\n\r\n //minimum requirements\r\n if (typeof sptBrowserRequirements[browser.name] !== \"undefined\" && browser.version < sptBrowserRequirements[browser.name]) {\r\n return true;\r\n }\r\n return false;\r\n };\r\n})();","module MapDrawing {\r\n\r\n export interface IPoint2D {\r\n x?: number;\r\n y?: number;\r\n X: number;\r\n Y: number;\r\n }\r\n\r\n export interface IPoint3D extends IPoint2D {\r\n z?: number;\r\n Z: number;\r\n }\r\n\r\n export interface ILatLng {\r\n Latitude: number;\r\n Longitude: number;\r\n }\r\n\r\n export interface IBoundsLatLng {\r\n Min: ILatLng;\r\n Max: ILatLng;\r\n }\r\n\r\n export interface IBounds2D {\r\n Min: IPoint2D;\r\n Max: IPoint2D;\r\n }\r\n\r\n export interface IBounds3D {\r\n Min: IPoint3D;\r\n Max: IPoint3D;\r\n }\r\n\r\n export class Point2D implements IPoint2D {\r\n constructor(x?: number | IPoint2D, y?: number) {\r\n\r\n if (x && typeof x == \"object\") {\r\n var o = x;\r\n y = o.Y;\r\n x = o.X;\r\n }\r\n\r\n this.x = (x) || 0;\r\n this.y = y || 0;\r\n }\r\n\r\n static computeCentroid(vertices: IPoint2D[]) {\r\n if (!vertices || !vertices.length)\r\n return null;\r\n var centroid = new Point2D(0, 0);\r\n var signedArea = 0.0;\r\n\r\n // For all vertices except last\r\n for (var i = 0, j = vertices.length; i < j; i++) {\r\n var v1 = vertices[i];\r\n var v2 = vertices[(i + 1) % j];\r\n var x0 = v1.x;\r\n var y0 = v1.y;\r\n var x1 = v2.x;\r\n var y1 = v2.y;\r\n var a = x0 * y1 - x1 * y0;\r\n signedArea += a;\r\n centroid.x += (x0 + x1) * a;\r\n centroid.y += (y0 + y1) * a;\r\n }\r\n\r\n signedArea *= 0.5;\r\n centroid.x /= (6.0 * signedArea);\r\n centroid.y /= (6.0 * signedArea);\r\n\r\n return centroid;\r\n }\r\n\r\n static computeCenter(vertices: IPoint2D[] | IPoint2D[][]) {\r\n if (!vertices || !vertices.length)\r\n return null;\r\n\r\n var center = new Point2D(0, 0);\r\n var len: number;\r\n\r\n if (Array.isArray(vertices[0])) {\r\n len = 0;\r\n (vertices).forEach(vs => {\r\n vs.forEach(v => {\r\n center.x += v.x;\r\n center.y += v.y;\r\n });\r\n len += vs.length;\r\n });\r\n } else {\r\n len = vertices.length;\r\n (vertices).forEach(v => {\r\n center.x += v.x;\r\n center.y += v.y;\r\n });\r\n }\r\n\r\n return center.mul(1 / len);\r\n }\r\n\r\n static computeArea(vertices: { x: number, y: number }[] | { x: number, y: number }[][]) {\r\n if (!vertices || !vertices.length)\r\n return 0;\r\n\r\n var area: number = 0;\r\n\r\n if (Array.isArray(vertices[0])) {\r\n (vertices).forEach(verts => {\r\n for (var i = 0, l = verts.length - 1; i <= l; i++) {\r\n var j = i === l ? 0 : i + 1;\r\n area += verts[i].x * verts[j].y;\r\n area -= verts[j].x * verts[i].y;\r\n }\r\n });\r\n } else {\r\n let verts = vertices as IPoint2D[];\r\n for (var i = 0, l = verts.length - 1; i <= l; i++) {\r\n var j = i === l ? 0 : i + 1;\r\n area += verts[i].x * verts[j].y;\r\n area -= verts[j].x * verts[i].y;\r\n }\r\n }\r\n\r\n return area / 2;\r\n }\r\n\r\n static isInsidePolygon(p: { x: number, y: number }, pts: { x: number, y: number }[], eps: number = 0.01): boolean {\r\n return pointToPolygonDist(p.x, p.y, [pts.map(p => [p.x, p.y])]) >= -eps;\r\n }\r\n\r\n static isClockwise(vertices: { x: number, y: number }[] | { x: number, y: number }[][]) {\r\n return Point2D.computeArea(vertices) < 0;\r\n }\r\n\r\n static moveToZero(vertices: Point2D[]): Point2D[] {\r\n if (!vertices || vertices.length < 2)\r\n return vertices ? vertices.map(v => new Point2D(0, 0)) : vertices;\r\n\r\n var b = Bounds2D.FromPoints(vertices);\r\n\r\n if (!b.IsEmpty)\r\n return vertices.map(v => v.sub(b.Min));\r\n\r\n return vertices.map(v => new Point2D(0, 0));\r\n }\r\n\r\n x: number;\r\n y: number;\r\n\r\n get X(): number {\r\n return this.x;\r\n }\r\n\r\n set X(v: number) {\r\n this.x = v;\r\n }\r\n\r\n get Y(): number {\r\n return this.y;\r\n }\r\n\r\n set Y(v: number) {\r\n this.y = v;\r\n }\r\n\r\n static Zero: Point2D = new Point2D(0, 0);\r\n static XAxis: Point2D = new Point2D(1, 0);\r\n static YAxis: Point2D = new Point2D(0, 1);\r\n\r\n Equals(other: Point2D | Object): boolean {\r\n if (!other)\r\n return false;\r\n if (other instanceof Point2D)\r\n return this.x === other.X && this.y === other.Y;\r\n return false;\r\n }\r\n\r\n add(other: Point2D): Point2D {\r\n return new Point2D(this.x + other.X, this.y + other.Y);\r\n }\r\n\r\n sub(other: Point2D): Point2D {\r\n return new Point2D(this.x - other.X, this.y - other.Y);\r\n }\r\n\r\n mul(s: number): Point2D {\r\n return new Point2D(this.x * s, this.y * s);\r\n }\r\n\r\n multiply(v: Point2D): Point2D {\r\n return new Point2D(this.x * v.x, this.y * v.y);\r\n }\r\n\r\n round(): Point2D {\r\n return new Point2D(Math.round(this.x), Math.round(this.y));\r\n }\r\n\r\n divide(s: number): Point2D {\r\n return new Point2D(this.x / s, this.y / s);\r\n }\r\n\r\n set(x: number, y: number): Point2D {\r\n this.x = x;\r\n this.y = y;\r\n return this;\r\n }\r\n\r\n setX(v: number): Point2D {\r\n this.x = v;\r\n return this;\r\n }\r\n\r\n setY(v: number): Point2D {\r\n this.y = v;\r\n return this;\r\n }\r\n\r\n neg(): Point2D {\r\n return new Point2D(-this.x, -this.y);\r\n }\r\n\r\n static pointsOnLine(p1: Point2D, p2: Point2D, p3: Point2D): boolean {\r\n if (p1.IsEqualTo(p2) || p1.IsEqualTo(p3))\r\n return true;\r\n\r\n return (p2.X - p1.X) * (p3.Y - p1.Y) === (p3.X - p1.X) * (p2.Y - p1.Y);\r\n }\r\n\r\n DistanceTo(other: Point2D) {\r\n return other.sub(this).GetLength();\r\n }\r\n\r\n DistanceSquaredTo(other: Point2D) {\r\n return other.sub(this).GetLengthSquared();\r\n }\r\n\r\n Clone(): Point2D {\r\n return new Point2D(this);\r\n }\r\n\r\n rot90(): Point2D {\r\n return new Point2D(-this.y, this.x);\r\n }\r\n\r\n rotr90(): Point2D {\r\n return new Point2D(this.y, -this.x);\r\n }\r\n\r\n Copy(p: IPoint2D): Point2D {\r\n this.x = p.X;\r\n this.y = p.Y;\r\n return this;\r\n }\r\n\r\n GetLength(): number {\r\n return Math.sqrt(this.GetLengthSquared());\r\n }\r\n\r\n GetLengthSquared(): number {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n\r\n GetNormalized(): Point2D {\r\n var lensq = this.GetLengthSquared();\r\n return lensq > 0 ? this.divide(Math.sqrt(lensq)) : new Point2D(0, 0);\r\n }\r\n\r\n Project(v: Point2D) {\r\n return new Point2D(this.x * v.X + this.y * v.Y, this.y * v.X - this.x * v.Y);\r\n }\r\n\r\n Unproject(v: Point2D) {\r\n return new Point2D(this.x * v.X - this.y * v.y, this.y * v.x + this.x * v.Y);\r\n }\r\n\r\n angleTo(v: Point2D): number {\r\n var theta = this.dot(v) / (Math.sqrt(this.GetLengthSquared() * v.GetLengthSquared()));\r\n\r\n return Math.acos(Math.max(-1, Math.min(1, theta)));\r\n }\r\n\r\n cross(point: Point2D) {\r\n return this.x * point.y - this.y * point.x;\r\n }\r\n\r\n /**\r\n * Returns the angle between two vectors. The angle is directional and\r\n * signed, giving information about the rotational direction.\r\n * @return {Number} the angle between the two vectors\r\n */\r\n static AngleFromVectors(u: Point2D, v: Point2D) {\r\n // see https://github.com/paperjs/paper.js/blob/3ef3ca66d5a615df53f001331081396ae701c276/src/basic/Point.js#L422\r\n return Math.atan2(u.cross(v), u.dot(v)) * 180 / Math.PI;\r\n }\r\n\r\n ToGMPoint(): google.maps.Point {\r\n return new google.maps.Point(this.x, this.y);\r\n }\r\n\r\n static Min(a: IPoint2D, b: IPoint2D): Point2D {\r\n return new Point2D(Math.min(a.X, b.X), Math.min(a.Y, b.Y));\r\n }\r\n\r\n static Max(a: IPoint2D, b: IPoint2D): Point2D {\r\n return new Point2D(Math.max(a.X, b.X), Math.max(a.Y, b.Y));\r\n }\r\n\r\n RotateByPivot(rad: number, pivot: Point2D): Point2D {\r\n var s: number = Math.sin(rad),\r\n c: number = Math.cos(rad),\r\n x = this.x - pivot.X,\r\n y = this.y - pivot.Y,\r\n xnew: number = x * c - y * s,\r\n ynew: number = x * s + y * c;\r\n return new Point2D(pivot.X + xnew, pivot.Y + ynew);\r\n }\r\n\r\n Rotate(rad: number): Point2D {\r\n var ca = Math.cos(rad),\r\n sa = Math.sin(rad);\r\n return new Point2D(ca * this.X - sa * this.Y, sa * this.X + ca * this.Y);\r\n }\r\n\r\n static FromOrientation(rad: number): Point2D {\r\n return new Point2D(Math.cos(rad), Math.sin(rad));\r\n }\r\n\r\n getOrientation(): number {\r\n return Math.atan2(this.y, this.x) || 0;\r\n }\r\n\r\n static FromGMPoint(p: google.maps.Point): Point2D {\r\n return new Point2D(p.x, p.y);\r\n }\r\n\r\n dot(v: Point2D): number {\r\n return this.x * v.X + this.y * v.Y;\r\n }\r\n\r\n flipY() {\r\n return new Point2D(this.x, -this.y);\r\n }\r\n\r\n to3D(z: number = 0): Point3D {\r\n return new Point3D(this.x, this.y, z);\r\n }\r\n\r\n IsEqualTo(other: Point2D) {\r\n return this.X === other.X && this.Y === other.Y;\r\n }\r\n\r\n LeftHandNormal(): Point2D {\r\n return new Point2D(-this.Y, this.X);\r\n }\r\n\r\n RightHandNormal(): Point2D {\r\n return new Point2D(this.Y, -this.X);\r\n }\r\n\r\n toString(): string {\r\n return ' ' + Math.round(this.x) + ' ' + Math.round(-this.y);\r\n }\r\n }\r\n\r\n export class Point3D implements IPoint3D {\r\n x: number;\r\n y: number;\r\n z: number;\r\n\r\n constructor(x?: number | IPoint3D, y?: number, z?: number) {\r\n if (x && typeof x == \"object\") {\r\n var o = x;\r\n y = o.Y;\r\n z = o.Z;\r\n x = o.X;\r\n }\r\n\r\n this.x = (x) || 0;\r\n this.y = y || 0;\r\n this.z = z || 0;\r\n }\r\n\r\n get X(): number {\r\n return this.x;\r\n }\r\n\r\n set X(v: number) {\r\n this.x = v;\r\n }\r\n\r\n get Y(): number {\r\n return this.y;\r\n }\r\n\r\n set Y(v: number) {\r\n this.y = v;\r\n }\r\n\r\n get Z(): number {\r\n return this.z;\r\n }\r\n\r\n set Z(v: number) {\r\n this.z = v;\r\n }\r\n\r\n setZ(v: number): Point3D {\r\n this.z = v;\r\n return this;\r\n }\r\n\r\n Equals(other: Point3D | Object): boolean {\r\n if (!other)\r\n return false;\r\n if (other instanceof Point3D)\r\n return this.x === other.X && this.y === other.Y && this.z === other.Z;\r\n return false;\r\n }\r\n\r\n static Zero: Point3D = new Point3D(0, 0, 0);\r\n static XAxis: Point3D = new Point3D(1, 0, 0);\r\n static YAxis: Point3D = new Point3D(0, 1, 0);\r\n static ZAxis: Point3D = new Point3D(0, 0, 1);\r\n\r\n static getNormalFromPoints(p1: Point3D, p2: Point3D, p3: Point3D): Point3D {\r\n var d = p2.sub(p1).cross(p3.sub(p1));\r\n var t = d.GetLengthSquared();\r\n return t > 0 ? d.mul(1 / Math.sqrt(t)) : new Point3D(0, 0, 1);\r\n }\r\n\r\n static getUpwardsNormalFromPoints(p1: Point3D, p2: Point3D, p3: Point3D): Point3D {\r\n var n = Point3D.getNormalFromPoints(p1, p2, p3);\r\n return n.z < 0 ? n.neg() : n;\r\n }\r\n\r\n static pointsOnLine(p1: Point3D, p2: Point3D, p3: Point3D): boolean {\r\n //var t = p2.sub(p1);\r\n //var lensq = t.GetLengthSquared();\r\n\r\n //if (lensq <= 0)\r\n // return true;\r\n\r\n //var d = t.mul(1 / Math.sqrt(lensq));\r\n\r\n //return (p1.add(d.mul(d.dot(p3.sub(p1))))).DistanceSquaredTo(p3) <= 0;\r\n\r\n if (p1.IsEqualTo(p2) || p1.IsEqualTo(p3))\r\n return true;\r\n\r\n return (p2.X - p1.X) * (p3.Y - p1.Y) === (p3.X - p1.X) * (p2.Y - p1.Y) &&\r\n (p2.X - p1.X) * (p3.Z - p1.Z) === (p3.X - p1.X) * (p2.Z - p1.Z) &&\r\n (p2.Y - p1.Y) * (p3.Z - p1.Z) === (p3.Y - p1.Y) * (p2.Z - p1.Z);\r\n }\r\n\r\n GetNormalized(): Point3D {\r\n var lensq = this.GetLengthSquared();\r\n return lensq > 0 ? this.divide(Math.sqrt(lensq)) : new Point3D(0, 0, 0);\r\n }\r\n\r\n GetLengthSquared(): number {\r\n return this.x * this.x + this.y * this.y + this.z * this.z;\r\n }\r\n\r\n GetLength(): number {\r\n return Math.sqrt(this.GetLengthSquared());\r\n }\r\n\r\n add(other: Point3D): Point3D {\r\n return new Point3D(this.x + other.X, this.y + other.Y, this.z + other.Z);\r\n }\r\n\r\n sub(other: Point3D): Point3D {\r\n return new Point3D(this.x - other.X, this.y - other.Y, this.z - other.Z);\r\n }\r\n\r\n mul(s: number): Point3D {\r\n return new Point3D(this.x * s, this.y * s, this.z * s);\r\n }\r\n\r\n divide(s: number): Point3D {\r\n return new Point3D(this.x / s, this.y / s, this.z / s);\r\n }\r\n\r\n dot(v: Point3D): number {\r\n return this.x * v.X + this.y * v.Y + this.z * v.Z;\r\n }\r\n\r\n cross(other: Point3D): Point3D {\r\n return new Point3D(this.Y * other.Z - this.Z * other.Y, this.Z * other.X - this.X * other.Z, this.X * other.Y - this.Y * other.X);\r\n }\r\n\r\n neg(): Point3D {\r\n return new Point3D(-this.x, -this.y, -this.z);\r\n }\r\n\r\n angleTo(v: Point3D): number {\r\n\r\n var theta = this.dot(v) / (Math.sqrt(this.GetLengthSquared() * v.GetLengthSquared()));\r\n\r\n // clamp, to handle numerical problems\r\n\r\n return Math.acos(Math.max(-1, Math.min(1, theta)));\r\n\r\n }\r\n\r\n Copy(p: IPoint3D): Point3D {\r\n this.x = p.X;\r\n this.y = p.Y;\r\n this.z = p.Z;\r\n return this;\r\n }\r\n\r\n getXY(): Point2D {\r\n return new Point2D(this.x, this.y);\r\n }\r\n\r\n getNormalColor(): string {\r\n return `rgb(${Math.round((this.x + 1) * 127.5)},${Math.round((this.y + 1) * 127.5)},${Math.round((this.z + 1) * 127.5)})`;\r\n }\r\n\r\n LeftHandNormal(): Point3D {\r\n return new Point3D(-this.Y, this.X, this.Z);\r\n }\r\n\r\n RightHandNormal(): Point3D {\r\n return new Point3D(this.Y, -this.X, this.Z);\r\n }\r\n\r\n IsEqualTo(other: Point3D) {\r\n return this.X === other.X && this.Y === other.Y && this.Z === other.Z;\r\n }\r\n\r\n DistanceTo(other: Point3D) {\r\n return other.sub(this).GetLength();\r\n }\r\n\r\n DistanceSquaredTo(other: Point3D) {\r\n return other.sub(this).GetLengthSquared();\r\n }\r\n\r\n static Min(a: IPoint3D, b: IPoint3D): Point3D {\r\n return new Point3D(Math.min(a.X, b.X), Math.min(a.Y, b.Y), Math.min(a.Z, b.Z));\r\n }\r\n\r\n static Max(a: IPoint3D, b: IPoint3D): Point3D {\r\n return new Point3D(Math.max(a.X, b.X), Math.max(a.Y, b.Y), Math.max(a.Z, b.Z));\r\n }\r\n }\r\n\r\n export class Plane3D {\r\n\r\n constructor(p?: Point3D, d?: Point3D) {\r\n this.pos = p || new Point3D(0, 0, 0);\r\n this.dir = d || new Point3D(0, 0, 1);\r\n }\r\n\r\n static fromPoints(points: Point3D[]): Plane3D {\r\n let n = points.length;\r\n if (n < 3)\r\n return null;\r\n\r\n //if (n === 3)\r\n // return Plane3D.fromThreePoints(points[0], points[1], points[2]);\r\n\r\n let sum = new Point3D(0, 0, 0);\r\n points.forEach(p => {\r\n sum = sum.add(p);\r\n });\r\n\r\n let centroid = sum.mul(1.0 / n);\r\n\r\n // Calc full 3x3 covariance matrix, excluding symmetries:\r\n let xx = 0, xy = 0, xz = 0, yy = 0, yz = 0, zz = 0;\r\n points.forEach(p => {\r\n let r = p.sub(centroid);\r\n xx += r.x * r.x;\r\n xy += r.x * r.y;\r\n xz += r.x * r.z;\r\n yy += r.y * r.y;\r\n yz += r.y * r.z;\r\n zz += r.z * r.z;\r\n });\r\n\r\n let det_x = yy * zz - yz * yz,\r\n det_y = xx * zz - xz * xz,\r\n det_z = xx * yy - xy * xy,\r\n det_max = Math.max(det_x, det_y, det_z);\r\n\r\n if (det_max <= 0)\r\n return null; //The points don't span a plane\r\n\r\n // Pick path with best conditioning:\r\n let dir: Point3D;\r\n\r\n if (det_max === det_x)\r\n dir = new Point3D(det_x, xz * yz - xy * zz, xy * yz - xz * yy);\r\n else if (det_max === det_y)\r\n dir = new Point3D(xz * yz - xy * zz, det_y, xy * xz - yz * xx);\r\n else\r\n dir = new Point3D(xy * yz - xz * yy, xy * xz - yz * xx, det_z);\r\n\r\n return new Plane3D(centroid, dir.GetNormalized());\r\n }\r\n\r\n static fromThreePoints(p1: Point3D, p2: Point3D, p3: Point3D): Plane3D {\r\n return new Plane3D(p1, p2.sub(p1).cross(p3.sub(p1)).GetNormalized());\r\n }\r\n\r\n pos: Point3D;\r\n dir: Point3D;\r\n }\r\n\r\n export class Segment2D {\r\n constructor(start?: Point2D, end?: Point2D, straight?: boolean) {\r\n this.straight = !!straight;\r\n this.setStartEnd(start, end);\r\n }\r\n\r\n private _Start: Point2D;\r\n private _End: Point2D;\r\n private _Delta: Point2D;\r\n private _Direction: Point2D;\r\n private _Normal: Point2D;\r\n private _len: number;\r\n\r\n straight: boolean;\r\n\r\n get Start() {\r\n return this._Start;\r\n }\r\n\r\n set Start(value) {\r\n this._Start = value;\r\n this.update();\r\n }\r\n\r\n get End() {\r\n return this._End;\r\n }\r\n\r\n set End(value) {\r\n this._End = value;\r\n this.update();\r\n }\r\n\r\n setStartEnd(start: Point2D, end: Point2D) {\r\n this._Start = start || new Point2D(0, 0);\r\n this._End = end || new Point2D(0, 0);\r\n\r\n this.update();\r\n }\r\n\r\n get Delta(): Point2D {\r\n return this._Delta;\r\n }\r\n\r\n get Direction(): Point2D {\r\n return this._Direction;\r\n }\r\n\r\n get Normal(): Point2D {\r\n return this._Normal;\r\n }\r\n\r\n get Length(): number {\r\n return this._len;\r\n }\r\n\r\n private update() {\r\n var delta = this._Delta = this._End.sub(this._Start);\r\n var lenSq = delta.GetLengthSquared();\r\n if (lenSq > 0) {\r\n var len = this._len = Math.sqrt(lenSq);\r\n var dir = this._Direction = delta.divide(len);\r\n this._Normal = dir.rot90();\r\n } else {\r\n this._len = 0;\r\n this._Normal = this._Direction = new Point2D(0, 0);\r\n }\r\n }\r\n\r\n isOnSameStraightLine(other: Segment2D, tolerance: number): boolean {\r\n var s = this.Start,\r\n n = this.Normal;\r\n return Math.abs(n.dot(other.Start.sub(s))) <= tolerance && Math.abs(n.dot(other.End.sub(s))) <= tolerance;\r\n }\r\n\r\n getClosestPoint(p: Point2D): Point2D {\r\n if (!p)\r\n return null;\r\n\r\n var s = this.Start,\r\n d = p.sub(s),\r\n dir = this.Direction,\r\n t = dir.dot(d);\r\n\r\n if (!this.straight)\r\n t = Math.min(this.Length, Math.max(0, t));\r\n\r\n return s.add(dir.mul(t));\r\n }\r\n\r\n distanceToPoint(p: Point2D): number {\r\n if (!p)\r\n return Number.POSITIVE_INFINITY;\r\n\r\n var len = this.Length;\r\n\r\n if (!len)\r\n return this.Start.DistanceTo(p);\r\n\r\n var s = this.Start,\r\n d = p.sub(s),\r\n n = this.Normal;\r\n\r\n if (this.straight)\r\n return Math.abs(n.dot(d));\r\n\r\n var dir = this.Direction,\r\n t = dir.dot(d);\r\n\r\n if (t <= 0)\r\n return this.Start.DistanceTo(p);\r\n\r\n if (t >= len)\r\n return this.End.DistanceTo(p);\r\n\r\n return Math.abs(n.dot(d));\r\n\r\n }\r\n\r\n getIntersectionParams(other: Segment2D): { t1: number; t2: number; p: Point2D } {\r\n var ax = (this.End.X - this.Start.X);\r\n var ay = (this.End.Y - this.Start.Y);\r\n var bx = (other.End.X - other.Start.X);\r\n var by = (other.End.Y - other.Start.Y);\r\n\r\n var denom = (ax * by) - (bx * ay);\r\n\r\n // AB & CD are parallel \r\n if (denom === 0)\r\n return { t1: 0, t2: 0, p: null };\r\n\r\n var cx = (this.Start.X - other.Start.X);\r\n var cy = (this.Start.Y - other.Start.Y);\r\n\r\n var r1 = (bx * cy - cx * by) / denom;\r\n var r2 = (ax * cy - cx * ay) / denom;\r\n\r\n if ((this.straight || (r1 >= 0 && r1 <= 1)) && (other.straight || (r2 >= 0 && r2 <= 1))) {\r\n var x = this.Start.X + r1 * ax;\r\n var y = this.Start.Y + r1 * ay;\r\n\r\n return { t1: r1, t2: r2, p: new Point2D(x, y) };\r\n }\r\n return { t1: 0, t2: 0, p: null };\r\n }\r\n\r\n getIntersection(other: Segment2D): Point2D {\r\n var ax = (this.End.X - this.Start.X);\r\n var ay = (this.End.Y - this.Start.Y);\r\n var bx = (other.End.X - other.Start.X);\r\n var by = (other.End.Y - other.Start.Y);\r\n\r\n var denom = (ax * by) - (bx * ay);\r\n\r\n // AB & CD are parallel \r\n if (denom === 0)\r\n return null;\r\n\r\n var cx = (this.Start.X - other.Start.X);\r\n var cy = (this.Start.Y - other.Start.Y);\r\n\r\n var r1 = (bx * cy - cx * by) / denom;\r\n var r2 = (ax * cy - cx * ay) / denom;\r\n\r\n if ((this.straight || (r1 >= 0 && r1 <= 1)) && (other.straight || (r2 >= 0 && r2 <= 1))) {\r\n var x = this.Start.X + r1 * ax;\r\n var y = this.Start.Y + r1 * ay;\r\n\r\n return new Point2D(x, y);\r\n }\r\n return null;\r\n }\r\n\r\n static GetIntersection(s1: IPoint2D, e1: IPoint2D, s2: IPoint2D, e2: IPoint2D): Point2D {\r\n var ax = (e1.X - s1.X);\r\n var ay = (e1.Y - s1.Y);\r\n var bx = (e2.X - s2.X);\r\n var by = (e2.Y - s2.Y);\r\n\r\n var denom = (ax * by) - (bx * ay);\r\n\r\n // AB & CD are parallel \r\n if (denom === 0)\r\n return null;\r\n\r\n var cx = (s1.X - s2.X);\r\n var cy = (s1.Y - s2.Y);\r\n\r\n var r1 = (bx * cy - cx * by) / denom;\r\n var r2 = (ax * cy - cx * ay) / denom;\r\n\r\n if ((r1 >= 0 && r1 <= 1) && (r2 >= 0 && r2 <= 1)) {\r\n var x = s1.X + r1 * ax;\r\n var y = s1.Y + r1 * ay;\r\n\r\n return new Point2D(x, y);\r\n }\r\n return null;\r\n }\r\n\r\n getOrientation(): number {\r\n var delta = this.Delta;\r\n return Math.atan2(delta.y, delta.x) || 0;\r\n }\r\n\r\n getCenter(): Point2D {\r\n return this.Start.add(this.End).mul(0.5);\r\n }\r\n }\r\n\r\n export class Transformation3D {\r\n\r\n static Identity = new Transformation3D();\r\n\r\n constructor(elements?: number[]) {\r\n this.elements = elements || [\r\n\r\n 1, 0, 0,\r\n 0, 1, 0,\r\n 0, 0, 1\r\n\r\n ];\r\n }\r\n\r\n static Rotation(rad: number, pivot?: Point2D): Transformation3D {\r\n var c = Math.cos(rad), s = Math.sin(rad);\r\n var rot = new Transformation3D().set(\r\n\r\n c, - s, 0,\r\n s, c, 0,\r\n 0, 0, 1\r\n\r\n );\r\n if (pivot) {\r\n var x = pivot.x;\r\n var y = pivot.y;\r\n return Transformation3D.Translation(-x, -y).multiply(rot).multiply(Transformation3D.Translation(x, y));\r\n }\r\n return rot;\r\n }\r\n\r\n static Translation(x: number | Point2D, y?: number): Transformation3D {\r\n\r\n if (x && x instanceof Point2D) {\r\n return new Transformation3D().set(\r\n\r\n 1, 0, x.x,\r\n 0, 1, x.y,\r\n 0, 0, 1\r\n\r\n );\r\n }\r\n\r\n return new Transformation3D().set(\r\n\r\n 1, 0, x,\r\n 0, 1, y,\r\n 0, 0, 1\r\n\r\n );\r\n }\r\n\r\n transformCanvas(ctx: CanvasRenderingContext2D) {\r\n var te = this.elements;\r\n\r\n ctx.transform(te[0], te[1], te[3], te[4], te[6], te[7]);\r\n }\r\n\r\n setCanvasTransform(ctx: CanvasRenderingContext2D) {\r\n var te = this.elements;\r\n\r\n ctx.setTransform(te[0], te[1], te[3], te[4], te[6], te[7]);\r\n }\r\n\r\n static Scale(x: number, y: number): Transformation3D {\r\n return new Transformation3D().set(\r\n\r\n x, 0, 0,\r\n 0, y, 0,\r\n 0, 0, 1\r\n\r\n );\r\n }\r\n\r\n multiply(m: Transformation3D) {\r\n return this.multiplyMatrices(m, this);\r\n }\r\n\r\n multiplyMatrices(a: Transformation3D, b: Transformation3D) {\r\n\r\n var ae = a.elements;\r\n var be = b.elements;\r\n var te = this.elements;\r\n\r\n var a11 = ae[0], a12 = ae[3], a13 = ae[6];\r\n var a21 = ae[1], a22 = ae[4], a23 = ae[7];\r\n var a31 = ae[2], a32 = ae[5], a33 = ae[8];\r\n\r\n var b11 = be[0], b12 = be[3], b13 = be[6];\r\n var b21 = be[1], b22 = be[4], b23 = be[7];\r\n var b31 = be[2], b32 = be[5], b33 = be[8];\r\n\r\n te[0] = a11 * b11 + a12 * b21 + a13 * b31;\r\n te[3] = a11 * b12 + a12 * b22 + a13 * b32;\r\n te[6] = a11 * b13 + a12 * b23 + a13 * b33;\r\n\r\n te[1] = a21 * b11 + a22 * b21 + a23 * b31;\r\n te[4] = a21 * b12 + a22 * b22 + a23 * b32;\r\n te[7] = a21 * b13 + a22 * b23 + a23 * b33;\r\n\r\n te[2] = a31 * b11 + a32 * b21 + a33 * b31;\r\n te[5] = a31 * b12 + a32 * b22 + a33 * b32;\r\n te[8] = a31 * b13 + a32 * b23 + a33 * b33;\r\n\r\n return this;\r\n\r\n }\r\n\r\n transform(p: Point2D): Point2D {\r\n var x = p.x,\r\n y = p.y,\r\n e = this.elements;\r\n\r\n var xn = e[0] * x + e[3] * y + e[6];\r\n var yn = e[1] * x + e[4] * y + e[7];\r\n\r\n return new Point2D(xn, yn);\r\n }\r\n\r\n elements: number[];\r\n\r\n set(n11, n12, n13, n21, n22, n23, n31, n32, n33) {\r\n var te = this.elements;\r\n\r\n te[0] = n11; te[1] = n21; te[2] = n31;\r\n te[3] = n12; te[4] = n22; te[5] = n32;\r\n te[6] = n13; te[7] = n23; te[8] = n33;\r\n\r\n return this;\r\n }\r\n\r\n identity() {\r\n\r\n this.set(\r\n\r\n 1, 0, 0,\r\n 0, 1, 0,\r\n 0, 0, 1\r\n\r\n );\r\n\r\n return this;\r\n\r\n }\r\n\r\n clone() {\r\n return new Transformation3D(this.elements.slice());\r\n }\r\n\r\n applyTo(ctx: CanvasRenderingContext2D) {\r\n var te = this.elements;\r\n\r\n ctx.transform(te[0], te[1], te[3], te[4], te[6], te[7]);\r\n }\r\n\r\n copy(m: Transformation3D) {\r\n this.elements = m.elements.slice();\r\n return this;\r\n }\r\n\r\n multiplyScalar(s: number) {\r\n\r\n var te = this.elements;\r\n\r\n te[0] *= s; te[3] *= s; te[6] *= s;\r\n te[1] *= s; te[4] *= s; te[7] *= s;\r\n te[2] *= s; te[5] *= s; te[8] *= s;\r\n\r\n return this;\r\n\r\n }\r\n }\r\n\r\n export class Bounds2D implements IBounds2D {\r\n constructor(min?: IPoint2D | IBounds2D, max?: IPoint2D) {\r\n if (min && (min as IBounds2D).Min) {\r\n max = (min as IBounds2D).Max;\r\n min = (min as IBounds2D).Min;\r\n } else {\r\n min = min || new Point2D();\r\n max = max || new Point2D();\r\n }\r\n\r\n this.Min = Point2D.Min(min as IPoint2D, max);\r\n this.Max = Point2D.Max(min as IPoint2D, max);\r\n }\r\n\r\n static FromCenterDimension(center: Point2D, dimension: Point2D): Bounds2D {\r\n let d = dimension.mul(0.5);\r\n return new Bounds2D(center.sub(d), center.add(d));\r\n }\r\n\r\n static FromCenterSize(center: Point2D, width: number, height: number): Bounds2D {\r\n let d = new Point2D(width * 0.5, height * 0.5);\r\n return new Bounds2D(center.sub(d), center.add(d));\r\n }\r\n\r\n static FromPoints(points: Point2D[] | Point2D[][] | Point3D[] | Point3D[][]): Bounds2D {\r\n if (!points || !points.length)\r\n return new Bounds2D();\r\n\r\n var minX = Number.MAX_VALUE,\r\n minY = Number.MAX_VALUE,\r\n maxX = -Number.MAX_VALUE,\r\n maxY = -Number.MAX_VALUE;\r\n\r\n if (Array.isArray(points[0])) {\r\n (points).forEach(ps => {\r\n ps.forEach(p => {\r\n if (p.X < minX) minX = p.X;\r\n if (p.Y < minY) minY = p.Y;\r\n if (p.X > maxX) maxX = p.X;\r\n if (p.Y > maxY) maxY = p.Y;\r\n });\r\n });\r\n } else {\r\n (points).forEach(p => {\r\n if (p.X < minX) minX = p.X;\r\n if (p.Y < minY) minY = p.Y;\r\n if (p.X > maxX) maxX = p.X;\r\n if (p.Y > maxY) maxY = p.Y;\r\n });\r\n }\r\n\r\n if (minX < Number.MAX_VALUE)\r\n return new Bounds2D(new Point2D(minX, minY), new Point2D(maxX, maxY));\r\n\r\n return new Bounds2D();\r\n }\r\n\r\n get Center(): Point2D {\r\n return this.Min.add(this.Max).divide(2);\r\n }\r\n\r\n set Center(v: Point2D) {\r\n if (v) {\r\n var t = v.sub(this.Min.add(this.Max).divide(2));\r\n this.Min = this.Min.add(t);\r\n this.Max = this.Max.add(t);\r\n }\r\n }\r\n\r\n get Delta(): Point2D {\r\n return this.Max.sub(this.Min);\r\n }\r\n\r\n set Delta(v: Point2D) {\r\n if (v) {\r\n var c = this.Center;\r\n var t = v.divide(2);\r\n this.Min = c.sub(t);\r\n this.Max = c.add(t);\r\n }\r\n }\r\n\r\n get Initialized() {\r\n return !this.Min.Equals(Point2D.Zero) || !this.Max.Equals(Point2D.Zero);\r\n }\r\n\r\n get IsEmpty() {\r\n return this.Min.Equals(this.Max);\r\n }\r\n\r\n Min: Point2D;\r\n Max: Point2D;\r\n\r\n IsInside(p: Point2D | Bounds2D): boolean {\r\n if (!p)\r\n return false;\r\n if (p instanceof Point2D)\r\n return p.X >= this.Min.X && p.X <= this.Max.X && p.Y >= this.Min.Y && p.Y <= this.Max.Y;\r\n else if (p instanceof Bounds2D)\r\n return this.IsInside(p.Min) && this.IsInside(p.Max);\r\n return false;\r\n }\r\n\r\n Overlaps(other: Bounds2D): boolean {\r\n return this.Min.X < other.Max.X &&\r\n this.Max.X > other.Min.X &&\r\n this.Min.Y < other.Max.Y &&\r\n this.Max.Y > other.Min.Y;\r\n }\r\n\r\n Offset(v: Point2D) {\r\n this.Min = this.Min.add(v);\r\n this.Max = this.Max.add(v);\r\n }\r\n\r\n updateFromBounds(bd: Bounds2D) {\r\n this.Min = Point2D.Min(this.Min, bd.Min);\r\n this.Max = Point2D.Max(this.Max, bd.Max);\r\n\r\n return this;\r\n }\r\n\r\n updateFromPoint(p: Point2D) {\r\n this.Min = Point2D.Min(this.Min, p);\r\n this.Max = Point2D.Max(this.Max, p);\r\n\r\n return this;\r\n }\r\n\r\n expandByScalar(v: number) {\r\n this.Min = new Point2D(this.Min.X - v, this.Min.Y - v);\r\n this.Max = new Point2D(this.Max.X + v, this.Max.Y + v);\r\n\r\n return this;\r\n }\r\n }\r\n\r\n export class Bounds3D implements IBounds3D {\r\n constructor(min?: IPoint3D | IBounds3D, max?: IPoint3D) {\r\n if (min && (min as IBounds3D).Min) {\r\n max = (min as IBounds3D).Max;\r\n min = (min as IBounds3D).Min;\r\n } else {\r\n min = min || new Point3D();\r\n max = max || new Point3D();\r\n }\r\n\r\n this.Min = Point3D.Min(min as IPoint3D, max);\r\n this.Max = Point3D.Max(min as IPoint3D, max);\r\n }\r\n\r\n static FromPoints(points: Point3D[] | Point3D[][]): Bounds3D {\r\n if (!points || !points.length)\r\n return new Bounds3D();\r\n\r\n var minX = Number.MAX_VALUE,\r\n minY = Number.MAX_VALUE,\r\n minZ = Number.MAX_VALUE,\r\n maxX = -Number.MAX_VALUE,\r\n maxY = -Number.MAX_VALUE,\r\n maxZ = -Number.MAX_VALUE;\r\n\r\n if (Array.isArray(points[0])) {\r\n (points).forEach(ps => {\r\n ps.forEach(p => {\r\n if (p.X < minX) minX = p.X;\r\n if (p.Y < minY) minY = p.Y;\r\n if (p.Z < minZ) minZ = p.Z;\r\n if (p.X > maxX) maxX = p.X;\r\n if (p.Y > maxY) maxY = p.Y;\r\n if (p.Z > maxZ) maxZ = p.Z;\r\n });\r\n });\r\n } else {\r\n (points).forEach(p => {\r\n if (p.X < minX) minX = p.X;\r\n if (p.Y < minY) minY = p.Y;\r\n if (p.Z < minZ) minZ = p.Z;\r\n if (p.X > maxX) maxX = p.X;\r\n if (p.Y > maxY) maxY = p.Y;\r\n if (p.Z > maxZ) maxZ = p.Z;\r\n });\r\n }\r\n\r\n if (minX < Number.MAX_VALUE)\r\n return new Bounds3D(new Point3D(minX, minY, minZ), new Point3D(maxX, maxY, maxZ));\r\n\r\n return new Bounds3D();\r\n }\r\n\r\n get Center(): Point3D {\r\n return this.Min.add(this.Max).divide(2);\r\n }\r\n\r\n set Center(v: Point3D) {\r\n if (v) {\r\n var t = v.sub(this.Min.add(this.Max).divide(2));\r\n this.Min = this.Min.add(t);\r\n this.Max = this.Max.add(t);\r\n }\r\n }\r\n\r\n get Delta(): Point3D {\r\n return this.Max.sub(this.Min);\r\n }\r\n\r\n set Delta(v: Point3D) {\r\n if (v) {\r\n var c = this.Center;\r\n var t = v.divide(2);\r\n this.Min = c.sub(t);\r\n this.Max = c.add(t);\r\n }\r\n }\r\n\r\n get Initialized() {\r\n return !this.Min.Equals(Point3D.Zero) || !this.Max.Equals(Point3D.Zero);\r\n }\r\n\r\n get IsEmpty() {\r\n return this.Min.Equals(this.Max);\r\n }\r\n\r\n Min: Point3D;\r\n Max: Point3D;\r\n\r\n IsInside(p: Point3D | Bounds3D): boolean {\r\n if (!p)\r\n return false;\r\n if (p instanceof Point3D)\r\n return p.X >= this.Min.X && p.X <= this.Max.X && p.Y >= this.Min.Y && p.Y <= this.Max.Y && p.Z >= this.Min.Z && p.Z <= this.Max.Z;\r\n else if (p instanceof Bounds3D)\r\n return this.IsInside(p.Min) && this.IsInside(p.Max);\r\n return false;\r\n }\r\n\r\n Overlaps(other: Bounds3D): boolean {\r\n return this.Min.X < other.Max.X &&\r\n this.Max.X > other.Min.X &&\r\n this.Min.Y < other.Max.Y &&\r\n this.Max.Y > other.Min.Y &&\r\n this.Min.Z < other.Max.Z &&\r\n this.Max.Z > other.Min.Z;\r\n }\r\n\r\n Offset(v: Point3D) {\r\n this.Min = this.Min.add(v);\r\n this.Max = this.Max.add(v);\r\n }\r\n }\r\n\r\n export class LatLng implements ILatLng {\r\n constructor(latitude?: number, longitude?: number) {\r\n this.Latitude = latitude || 0;\r\n this.Longitude = longitude || 0;\r\n }\r\n\r\n static Zero: LatLng = new LatLng(0, 0);\r\n\r\n static PiHalf: number = Math.PI * 0.5;\r\n static Pi2: number = Math.PI * 2;\r\n static D_Pi_180: number = Math.PI / 180;\r\n static D_180_Pi: number = 180 / Math.PI;\r\n static EarthRadius: number = 6378137;\r\n static EarthDiameter: number = LatLng.EarthRadius * 2;\r\n static EarthCircumference: number = LatLng.EarthDiameter * Math.PI;\r\n static LatPerMeter: number = 360 / LatLng.EarthCircumference;\r\n static EPS: number = LatLng.LatPerMeter * 0.0005;\r\n //static sm_a: number = LatLng.EarthRadius;\r\n //static sm_b: number = 6356752.314;\r\n //static sm_EccSquared: number = 6.69437999013e-03;\r\n //static UTMScaleFactor: number = 0.9996;\r\n static TILE_SIZE: number = 256;\r\n static TILE_SIZE_HALF: number = LatLng.TILE_SIZE * 0.5;\r\n static PixelsPerLonDegree: number = LatLng.TILE_SIZE / 360;\r\n static PixelsPerLonRadian: number = LatLng.TILE_SIZE / (2 * Math.PI);\r\n static PixelsPerLonRadianHalf: number = LatLng.PixelsPerLonRadian * 0.5;\r\n static MetersPerPixel: number = LatLng.EarthCircumference / LatLng.TILE_SIZE;\r\n static Origin: Point2D = new Point2D(LatLng.TILE_SIZE_HALF, LatLng.TILE_SIZE_HALF);\r\n\r\n Latitude: number;\r\n Longitude: number;\r\n\r\n static Center(...latLngs: LatLng[]): LatLng {\r\n var latLng = new LatLng(0, 0),\r\n count = latLngs.length;\r\n\r\n if (count <= 0)\r\n return latLng;\r\n\r\n latLngs.forEach(ll => { latLng.add(ll); });\r\n\r\n return latLng.divide(count);\r\n }\r\n\r\n set(latitude: number, longitude: number) {\r\n this.Latitude = latitude || 0;\r\n this.Longitude = longitude || 0;\r\n }\r\n\r\n add(other: LatLng): LatLng {\r\n return new LatLng(this.Latitude + other.Latitude, this.Longitude + other.Longitude);\r\n }\r\n\r\n sub(other: LatLng): LatLng {\r\n return new LatLng(this.Latitude - other.Latitude, this.Longitude - other.Longitude);\r\n }\r\n\r\n mul(s: number): LatLng {\r\n return new LatLng(this.Latitude * s, this.Longitude * s);\r\n }\r\n\r\n divide(s: number): LatLng {\r\n return new LatLng(this.Latitude / s, this.Longitude / s);\r\n }\r\n\r\n Equals(other: LatLng | Object): boolean {\r\n if (!other)\r\n return false;\r\n if (other instanceof LatLng)\r\n return Math.abs(this.Latitude - other.Latitude) < LatLng.EPS && Math.abs(this.Longitude - other.Longitude) < LatLng.EPS;\r\n return false;\r\n }\r\n\r\n OffsetLatitude(meters: number): LatLng {\r\n return this.add(new LatLng(meters * LatLng.LatPerMeter, 0));\r\n }\r\n\r\n OffsetLongitude(meters: number): LatLng {\r\n return this.add(new LatLng(0, meters / Math.cos(this.Latitude * LatLng.D_Pi_180) * LatLng.LatPerMeter));\r\n }\r\n\r\n Offset(latMeters: number, lonMeters?: number): LatLng {\r\n return this.add(new LatLng(latMeters * LatLng.LatPerMeter, (lonMeters === undefined ? latMeters : lonMeters) / Math.cos(this.Latitude * LatLng.D_Pi_180) * LatLng.LatPerMeter));\r\n }\r\n\r\n OffsetVector(off: { x: number, y: number }): LatLng {\r\n return this.add(new LatLng(off.y * LatLng.LatPerMeter, off.x / Math.cos(this.Latitude * LatLng.D_Pi_180) * LatLng.LatPerMeter));\r\n }\r\n\r\n Clone(): LatLng {\r\n return new LatLng(this.Latitude, this.Longitude);\r\n }\r\n\r\n Copy(latLng: { Latitude: number, Longitude: number }): this {\r\n if (latLng) {\r\n this.Latitude = latLng.Latitude;\r\n this.Longitude = latLng.Longitude;\r\n }\r\n return this;\r\n }\r\n\r\n //World point in range [0 .. 256]\r\n ToPoint2D(): Point2D {\r\n return LatLng.LatLngToPoint2D(this.Latitude, this.Longitude);\r\n }\r\n\r\n IsSouthHemisphere(): boolean {\r\n return this.Latitude < 0;\r\n }\r\n\r\n IsValid() {\r\n return Math.abs(this.Latitude) <= 180 && Math.abs(this.Longitude) <= 360;\r\n }\r\n\r\n //Distance in meters\r\n DistanceTo(other: LatLng): number {\r\n var lat1 = this.Latitude;\r\n var lon1 = this.Longitude;\r\n var lat2 = other.Latitude;\r\n var lon2 = other.Longitude;\r\n var dLat = LatLng.Grad2Rad(lat2 - lat1); // deg2rad below\r\n var dLon = LatLng.Grad2Rad(lon2 - lon1);\r\n var sdLat = Math.sin(dLat / 2);\r\n var sdLon = Math.sin(dLon / 2);\r\n var a = sdLat * sdLat +\r\n Math.cos(LatLng.Grad2Rad(lat1)) *\r\n Math.cos(LatLng.Grad2Rad(lat2)) *\r\n sdLon * sdLon;\r\n var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n var d = LatLng.EarthRadius * c; // Distance in m\r\n return d;\r\n }\r\n\r\n //Direction Vector in meters (x : meter in longitude direction, y : meter in latitude direction)\r\n DirectionTo(other: LatLng): Point2D {\r\n var lat1 = this.Latitude;\r\n var lat2 = other.Latitude;\r\n var lon1 = this.Longitude;\r\n var lon2 = other.Longitude;\r\n\r\n var latMid = (lat1 + lat2) * 0.5;\r\n var dLon = lon2 - lon1;\r\n var x = dLon / LatLng.LatPerMeter * Math.cos(LatLng.Grad2Rad(latMid));\r\n\r\n var dLat = LatLng.Grad2Rad(lat2 - lat1);\r\n var sdLat = Math.sin(dLat / 2);\r\n var a = sdLat * sdLat;\r\n var y = LatLng.EarthDiameter * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n\r\n return new Point2D(x, lat1 > lat2 ? -y : y);\r\n }\r\n\r\n AngleTo(other: LatLng): number {\r\n var tx = LatLng.PixelsPerLonDegree * (other.Longitude - this.Longitude);\r\n\r\n var thisSiny = Math.min(Math.max(Math.sin(LatLng.Grad2Rad(this.Latitude)), -0.9999), 0.9999);\r\n var otherSiny = Math.min(Math.max(Math.sin(LatLng.Grad2Rad(other.Latitude)), -0.9999), 0.9999);\r\n\r\n var ty = LatLng.PixelsPerLonRadianHalf * (Math.log((1 + otherSiny) / (1 - otherSiny)) - Math.log((1 + thisSiny) / (1 - thisSiny)));\r\n\r\n return Math.atan2(ty, tx);\r\n }\r\n\r\n static Min(a: ILatLng, b: ILatLng): LatLng {\r\n return new LatLng(Math.min(a.Latitude, b.Latitude), Math.min(a.Longitude, b.Longitude));\r\n }\r\n\r\n static Max(a: ILatLng, b: ILatLng): LatLng {\r\n return new LatLng(Math.max(a.Latitude, b.Latitude), Math.max(a.Longitude, b.Longitude));\r\n }\r\n\r\n public static Grad2Rad(grad: number): number {\r\n return grad * LatLng.D_Pi_180;\r\n }\r\n\r\n public static Rad2Grad(rad: number): number {\r\n return rad * LatLng.D_180_Pi;\r\n }\r\n\r\n //World point in range [0 .. 256]\r\n public static LatLngToPoint2D(lat: number, lng: number): Point2D {\r\n var origin = LatLng.Origin;\r\n var x = origin.X + lng * LatLng.PixelsPerLonDegree;\r\n var siny = Math.min(Math.max(Math.sin(LatLng.Grad2Rad(lat)), -0.9999), 0.9999);\r\n var y = origin.Y + Math.log((1 + siny) / (1 - siny)) * LatLng.PixelsPerLonRadianHalf;\r\n return new Point2D(x, y);\r\n }\r\n\r\n //World point in range [0 .. 256]\r\n public static FromPoint2D(point: Point2D): LatLng {\r\n if (!point)\r\n return null;\r\n let origin = LatLng.Origin,\r\n lng = (point.X - origin.X) / LatLng.PixelsPerLonDegree,\r\n latRadians = (point.Y - origin.Y) / LatLng.PixelsPerLonRadian,\r\n lat = LatLng.Rad2Grad(2 * Math.atan(Math.exp(latRadians)) - Math.PI / 2);\r\n return new LatLng(lat, lng);\r\n }\r\n\r\n public static Point2DToGMLatLng(point: Point2D): google.maps.LatLng {\r\n var origin = LatLng.Origin;\r\n var lng = (point.X - origin.X) / LatLng.PixelsPerLonDegree;\r\n var latRadians = (point.Y - origin.Y) / LatLng.PixelsPerLonRadian;\r\n var lat = LatLng.Rad2Grad(2 * Math.atan(Math.exp(latRadians)) - Math.PI / 2);\r\n return new google.maps.LatLng(lat, lng);\r\n }\r\n\r\n public static GMLatLngToPoint2D(latLng: google.maps.LatLng): Point2D {\r\n return LatLng.LatLngToPoint2D(latLng.lat(), latLng.lng());\r\n }\r\n\r\n public static FromGMLatLng(latLng: google.maps.LatLng | google.maps.LatLngLiteral): LatLng {\r\n if (!latLng)\r\n return new LatLng();\r\n if (typeof latLng.lat === \"function\")\r\n return new LatLng((latLng).lat(), (latLng).lng());\r\n return new LatLng((latLng).lat, (latLng).lng);\r\n }\r\n\r\n public static FromGMLatLngArray(latLngs: google.maps.LatLng[] | google.maps.LatLngLiteral[] | google.maps.MVCArray): LatLng[] {\r\n var result: LatLng[] = [];\r\n (latLngs).forEach((ll) => {\r\n result.push(LatLng.FromGMLatLng(ll));\r\n });\r\n return result;\r\n }\r\n\r\n public static GMLatLngArrayToPoint2D(latLngs: google.maps.LatLng[] | google.maps.LatLngLiteral[] | google.maps.MVCArray): Point2D[] {\r\n var result: Point2D[] = [];\r\n (latLngs).forEach((ll) => {\r\n result.push(LatLng.GMLatLngToPoint2D(ll));\r\n });\r\n return result;\r\n }\r\n\r\n ToGMLatLng(): google.maps.LatLng {\r\n return new google.maps.LatLng(this.Latitude, this.Longitude);\r\n }\r\n\r\n ToLatLngLiteral(): google.maps.LatLngLiteral {\r\n return { lat: this.Latitude, lng: this.Longitude };\r\n }\r\n }\r\n\r\n export class BoundsLatLng implements IBoundsLatLng {\r\n constructor(corner1?: ILatLng | IBoundsLatLng, corner2?: ILatLng) {\r\n if (corner1 && (corner1 as IBoundsLatLng).Min) {\r\n corner2 = (corner1 as IBoundsLatLng).Max;\r\n corner1 = (corner1 as IBoundsLatLng).Min;\r\n } else {\r\n corner1 = corner1 || new LatLng();\r\n corner2 = corner2 || new LatLng();\r\n }\r\n\r\n this.Min = LatLng.Min(corner1 as ILatLng, corner2);\r\n this.Max = LatLng.Max(corner1 as ILatLng, corner2);\r\n }\r\n\r\n static fromValues(minLat: number, minLng: number, maxLat: number, maxLng: number) {\r\n return new BoundsLatLng(new LatLng(minLat, minLng), new LatLng(maxLat, maxLng));\r\n }\r\n\r\n static FromCenterAndSize(center: LatLng, sizeInMeters: number) {\r\n var s = sizeInMeters / 2;\r\n var corner1 = center.Offset(-s);\r\n var corner2 = center.Offset(s);\r\n return new BoundsLatLng(corner1, corner2);\r\n }\r\n\r\n static FromCenterWidthHeight(center: LatLng, widthInMeters: number, heightInMeters: number) {\r\n var lngOffset = widthInMeters / 2;\r\n var latOffset = heightInMeters / 2;\r\n\r\n var corner1 = center.Offset(-latOffset, -lngOffset);\r\n var corner2 = center.Offset(latOffset, lngOffset);\r\n return new BoundsLatLng(corner1, corner2);\r\n }\r\n\r\n static FromLatLngs(latLngs: LatLng[] | LatLng[][]) {\r\n\r\n if (!latLngs || !latLngs.length)\r\n return new BoundsLatLng();\r\n\r\n var minLat = Number.MAX_VALUE;\r\n var minLng = Number.MAX_VALUE;\r\n var maxLat = -Number.MAX_VALUE;\r\n var maxLng = -Number.MAX_VALUE;\r\n\r\n if (Array.isArray(latLngs[0])) {\r\n (latLngs).forEach(lls => {\r\n lls.forEach(latLng => {\r\n if (latLng.Latitude < minLat) minLat = latLng.Latitude;\r\n if (latLng.Longitude < minLng) minLng = latLng.Longitude;\r\n if (latLng.Latitude > maxLat) maxLat = latLng.Latitude;\r\n if (latLng.Longitude > maxLng) maxLng = latLng.Longitude;\r\n });\r\n });\r\n } else {\r\n (latLngs).forEach(latLng => {\r\n if (latLng.Latitude < minLat) minLat = latLng.Latitude;\r\n if (latLng.Longitude < minLng) minLng = latLng.Longitude;\r\n if (latLng.Latitude > maxLat) maxLat = latLng.Latitude;\r\n if (latLng.Longitude > maxLng) maxLng = latLng.Longitude;\r\n });\r\n }\r\n\r\n if (minLat < Number.MAX_VALUE)\r\n return new BoundsLatLng(new LatLng(minLat, minLng), new LatLng(maxLat, maxLng));\r\n\r\n return new BoundsLatLng();\r\n }\r\n\r\n static FromGmLatLngs(latLngs: google.maps.MVCArray | google.maps.MVCArray> | google.maps.LatLng[] | google.maps.LatLng[][]) {\r\n if (!latLngs)\r\n return new BoundsLatLng();\r\n\r\n var latLngsArray = (>latLngs).getArray ? (>latLngs).getArray() as any[] : latLngs as any[];\r\n\r\n if (latLngsArray.length) {\r\n if (latLngsArray[0].getArray)\r\n latLngsArray = ([]>latLngsArray).map(lls => lls.getArray());\r\n\r\n if (latLngsArray[0].length)\r\n return BoundsLatLng.FromLatLngs((latLngsArray as Array>).map(ma => ma.map(ll => LatLng.FromGMLatLng(ll))));\r\n\r\n return BoundsLatLng.FromLatLngs((latLngsArray as Array).map(ll => LatLng.FromGMLatLng(ll)));\r\n }\r\n\r\n return new BoundsLatLng();\r\n }\r\n\r\n static FromCenterAndZoom(center: LatLng, zoomLevel: number, widthPx: number, heightPx: number) {\r\n var wHalf = widthPx / 2;\r\n var hHalf = heightPx / 2;\r\n\r\n var cp = center.ToPoint2D();\r\n var zoom = Math.pow(2, zoomLevel);\r\n var cpMin = new Point2D((cp.X * zoom - wHalf) / zoom, (cp.Y * zoom - hHalf) / zoom);\r\n var cpMax = new Point2D((cp.X * zoom + wHalf) / zoom, (cp.Y * zoom + hHalf) / zoom);\r\n\r\n var latlng1 = LatLng.FromPoint2D(cpMin);\r\n var latlng2 = LatLng.FromPoint2D(cpMax);\r\n\r\n var corner1 = LatLng.Min(latlng1, latlng2);\r\n var corner2 = LatLng.Max(latlng1, latlng2);\r\n\r\n return new BoundsLatLng(corner1, corner2);\r\n }\r\n\r\n static FromBoundsMeters(center: LatLng, bounds: Bounds2D): BoundsLatLng {\r\n return BoundsLatLng.FromCenterWidthHeight(center, bounds.Delta.X, bounds.Delta.Y);\r\n }\r\n\r\n static FromBoundsMillimeters(center: LatLng, bounds: Bounds2D): BoundsLatLng {\r\n return BoundsLatLng.FromCenterWidthHeight(center, bounds.Delta.X / 1000, bounds.Delta.Y / 1000);\r\n }\r\n\r\n Expand(latLng: LatLng | BoundsLatLng) {\r\n if (!latLng)\r\n return;\r\n if (latLng instanceof LatLng) {\r\n if (this.Initialized) {\r\n this.Min = LatLng.Min(this.Min, latLng);\r\n this.Max = LatLng.Max(this.Max, latLng);\r\n } else {\r\n this.Min = latLng.Clone();\r\n this.Max = latLng.Clone();\r\n }\r\n } else if (latLng instanceof BoundsLatLng) {\r\n this.Expand(latLng.Min);\r\n this.Expand(latLng.Max);\r\n }\r\n }\r\n\r\n ExpandByLatLngs(latLngs: LatLng[]) {\r\n if (!latLngs)\r\n return;\r\n latLngs.forEach(ll => {\r\n this.Expand(ll);\r\n });\r\n }\r\n\r\n IsInside(latLng: LatLng | BoundsLatLng): boolean {\r\n if (!latLng)\r\n return false;\r\n if (latLng instanceof LatLng)\r\n return latLng.Latitude >= this.Min.Latitude && latLng.Latitude <= this.Max.Latitude && latLng.Longitude >= this.Min.Longitude && latLng.Longitude <= this.Max.Longitude;\r\n else if (latLng instanceof BoundsLatLng)\r\n return this.IsInside(latLng.Min) && this.IsInside(latLng.Max);\r\n return false;\r\n }\r\n\r\n Overlaps(other: BoundsLatLng): boolean {\r\n return this.Min.Latitude < other.Max.Latitude &&\r\n this.Max.Latitude > other.Min.Latitude &&\r\n this.Min.Longitude < other.Max.Longitude &&\r\n this.Max.Longitude > other.Min.Longitude;\r\n }\r\n\r\n OffsetMeters(latMeters: number, lonMeters: number): BoundsLatLng {\r\n return BoundsLatLng.FromCenterWidthHeight(this.Center.Offset(latMeters, lonMeters), this.Width, this.Height);\r\n }\r\n\r\n OffsetKeepSize(offset: LatLng): BoundsLatLng {\r\n return BoundsLatLng.FromCenterWidthHeight(this.Center.add(offset), this.Width, this.Height);\r\n }\r\n\r\n Scale(s: number) {\r\n return BoundsLatLng.FromCenterWidthHeight(this.Center, this.Width * s, this.Height * s);\r\n }\r\n\r\n Extend(meters: number): BoundsLatLng {\r\n return new BoundsLatLng(this.Min.Offset(-meters), this.Max.Offset(meters));\r\n }\r\n\r\n Equals(other: BoundsLatLng | any): boolean {\r\n if (!other)\r\n return false;\r\n if (other instanceof BoundsLatLng)\r\n return this.Min.Equals(other.Min) && this.Max.Equals(other.Max);\r\n return false;\r\n }\r\n\r\n add(x: LatLng): BoundsLatLng {\r\n return new BoundsLatLng(this.Min.add(x), this.Max.add(x));\r\n }\r\n\r\n sub(x: LatLng): BoundsLatLng {\r\n return new BoundsLatLng(this.Min.sub(x), this.Max.sub(x));\r\n }\r\n\r\n mul(x: number): BoundsLatLng {\r\n return new BoundsLatLng(this.Min.mul(x), this.Max.mul(x));\r\n }\r\n\r\n divide(x: number): BoundsLatLng {\r\n return new BoundsLatLng(this.Min.divide(x), this.Max.divide(x));\r\n }\r\n\r\n Clone(): BoundsLatLng {\r\n return new BoundsLatLng(this.Min, this.Max);\r\n }\r\n\r\n get Center() {\r\n return this.Min.add(this.Max).divide(2);\r\n }\r\n\r\n get Delta() {\r\n return this.Max.sub(this.Min);\r\n }\r\n\r\n get Initialized() {\r\n return !this.IsEmpty || !this.Min.Equals(LatLng.Zero);\r\n }\r\n\r\n get IsEmpty() {\r\n return this.Min.Equals(this.Max);\r\n }\r\n\r\n isValid() {\r\n return this.Min.IsValid() && this.Max.IsValid();\r\n }\r\n\r\n get LowerLeft() {\r\n return this.Min;\r\n }\r\n\r\n get LowerRight() {\r\n return new LatLng(this.Min.Latitude, this.Max.Longitude);\r\n }\r\n\r\n get UpperRight() {\r\n return this.Max;\r\n }\r\n\r\n get UpperLeft() {\r\n return new LatLng(this.Max.Latitude, this.Min.Longitude);\r\n }\r\n\r\n get North() {\r\n return this.Max.Latitude;\r\n }\r\n\r\n get East() {\r\n return this.Max.Longitude;\r\n }\r\n\r\n get South() {\r\n return this.Min.Latitude;\r\n }\r\n\r\n get West() {\r\n return this.Min.Longitude;\r\n }\r\n\r\n get Corners() {\r\n return [this.LowerLeft, this.LowerRight, this.UpperRight, this.UpperLeft];\r\n }\r\n\r\n ///Size in longitude direction in meters\r\n get Width() {\r\n return this.LowerLeft.DistanceTo(this.LowerRight);\r\n }\r\n\r\n ///Size in latitude direction in meters\r\n get Height() {\r\n return this.LowerLeft.DistanceTo(this.UpperLeft);\r\n }\r\n\r\n ///Diagonal size in latitude direction in meters\r\n get DiagonalSize() {\r\n return this.Min.DistanceTo(this.Max);\r\n }\r\n\r\n ///Size vector X = longitude direction in meters, Y = latitude direction in meters\r\n get Size() {\r\n return new Point2D(this.Width, this.Height);\r\n }\r\n\r\n Min: LatLng;\r\n Max: LatLng;\r\n\r\n ToGMLatLngBounds(): google.maps.LatLngBounds {\r\n return new google.maps.LatLngBounds(this.Min.ToGMLatLng(), this.Max.ToGMLatLng());\r\n }\r\n\r\n ToBounds2D(factor: number = 1): Bounds2D {\r\n return new Bounds2D(this.Min.ToPoint2D().mul(factor), this.Max.ToPoint2D().mul(factor));\r\n }\r\n\r\n static FromGMLatLngBounds(b: google.maps.LatLngBounds) {\r\n if (b.isEmpty())\r\n return new BoundsLatLng();\r\n return new BoundsLatLng(LatLng.FromGMLatLng(b.getSouthWest()), LatLng.FromGMLatLng(b.getNorthEast()));\r\n }\r\n }\r\n\r\n export class Color {\r\n constructor(r?: number, g?: number, b?: number, a?: number) {\r\n this.r = r || 0;\r\n this.g = g || 0;\r\n this.b = b || 0;\r\n this.a = a !== undefined ? a : 1;\r\n }\r\n\r\n setStyle(style: string) {\r\n var m;\r\n\r\n if (m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec(style)) {\r\n\r\n // rgb / hsl\r\n\r\n var color;\r\n var name = m[1];\r\n var components = m[2];\r\n\r\n switch (name) {\r\n\r\n case 'rgb':\r\n case 'rgba':\r\n\r\n if (color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(components)) {\r\n\r\n // rgb(255,0,0) rgba(255,0,0,0.5)\r\n this.r = Math.min(255, parseInt(color[1], 10)) / 255;\r\n this.g = Math.min(255, parseInt(color[2], 10)) / 255;\r\n this.b = Math.min(255, parseInt(color[3], 10)) / 255;\r\n this.a = color[5] !== undefined ? Math.min(1, Math.max(parseFloat(color[5]))) : 1;\r\n\r\n return this;\r\n\r\n }\r\n\r\n if (color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(components)) {\r\n\r\n // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\r\n this.r = Math.min(100, parseInt(color[1], 10)) / 100;\r\n this.g = Math.min(100, parseInt(color[2], 10)) / 100;\r\n this.b = Math.min(100, parseInt(color[3], 10)) / 100;\r\n this.a = color[5] !== undefined ? Math.min(1, Math.max(parseFloat(color[5]))) : 1;\r\n\r\n return this;\r\n\r\n }\r\n\r\n break;\r\n\r\n case 'hsl':\r\n case 'hsla':\r\n\r\n if (color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec(components)) {\r\n\r\n // hsl(120,50%,50%) hsla(120,50%,50%,0.5)\r\n var h = parseFloat(color[1]) / 360;\r\n var s = parseInt(color[2], 10) / 100;\r\n var l = parseInt(color[3], 10) / 100;\r\n var a = color[5] !== undefined ? Math.min(1, Math.max(parseFloat(color[5]))) : 1;\r\n\r\n return this.setHSL(h, s, l, a);\r\n\r\n }\r\n\r\n break;\r\n\r\n }\r\n\r\n }\r\n else if (m = /^\\#([A-Fa-f0-9]+)$/.exec(style)) {\r\n\r\n // hex color\r\n\r\n var hex = m[1];\r\n var size = hex.length;\r\n\r\n if (size === 3) {\r\n\r\n // #ff0\r\n this.r = parseInt(hex.charAt(0) + hex.charAt(0), 16) / 255;\r\n this.g = parseInt(hex.charAt(1) + hex.charAt(1), 16) / 255;\r\n this.b = parseInt(hex.charAt(2) + hex.charAt(2), 16) / 255;\r\n\r\n return this;\r\n\r\n } else if (size === 6) {\r\n\r\n // #ff0000\r\n this.r = parseInt(hex.charAt(0) + hex.charAt(1), 16) / 255;\r\n this.g = parseInt(hex.charAt(2) + hex.charAt(3), 16) / 255;\r\n this.b = parseInt(hex.charAt(4) + hex.charAt(5), 16) / 255;\r\n\r\n return this;\r\n\r\n }\r\n\r\n }\r\n\r\n // unknown color\r\n console.warn('Color: Unknown color ' + style);\r\n\r\n return this;\r\n }\r\n\r\n setHex(hex: number) {\r\n\r\n hex = Math.floor(hex);\r\n\r\n this.r = (hex >> 16 & 255) / 255;\r\n this.g = (hex >> 8 & 255) / 255;\r\n this.b = (hex & 255) / 255;\r\n\r\n return this;\r\n\r\n }\r\n\r\n getHex() {\r\n return (this.r * 255) << 16 ^ (this.g * 255) << 8 ^ (this.b * 255) << 0;\r\n }\r\n\r\n getHexString() {\r\n return ('000000' + this.getHex().toString(16)).slice(-6);\r\n }\r\n\r\n private hue2rgb(p: number, q: number, t: number) {\r\n\r\n if (t < 0) t += 1;\r\n if (t > 1) t -= 1;\r\n if (t < 1 / 6) return p + (q - p) * 6 * t;\r\n if (t < 1 / 2) return q;\r\n if (t < 2 / 3) return p + (q - p) * 6 * (2 / 3 - t);\r\n return p;\r\n\r\n }\r\n\r\n setHSL(h: number, s: number, l: number, a?: number) {\r\n\r\n // h,s,l ranges are in 0.0 - 1.0\r\n h = ((h % 1) + 1) % 1; // _Math.euclideanModulo(h, 1);\r\n s = Math.max(0, Math.min(1, s));\r\n l = Math.max(0, Math.min(1, l));\r\n\r\n if (s === 0) {\r\n\r\n this.r = this.g = this.b = l;\r\n\r\n } else {\r\n\r\n var p = l <= 0.5 ? l * (1 + s) : l + s - (l * s);\r\n var q = (2 * l) - p;\r\n\r\n this.r = this.hue2rgb(q, p, h + 1 / 3);\r\n this.g = this.hue2rgb(q, p, h);\r\n this.b = this.hue2rgb(q, p, h - 1 / 3);\r\n\r\n }\r\n\r\n if (a !== undefined)\r\n this.a = a;\r\n\r\n return this;\r\n\r\n }\r\n\r\n getHSL(): { h: number, s: number, l: number, a: number } {\r\n\r\n // h,s,l ranges are in 0.0 - 1.0\r\n\r\n var hsl = { h: 0, s: 0, l: 0, a: 1 };\r\n\r\n var r = this.r, g = this.g, b = this.b;\r\n\r\n var max = Math.max(r, g, b);\r\n var min = Math.min(r, g, b);\r\n\r\n var hue, saturation;\r\n var lightness = (min + max) / 2.0;\r\n\r\n if (min === max) {\r\n\r\n hue = 0;\r\n saturation = 0;\r\n\r\n } else {\r\n\r\n var delta = max - min;\r\n\r\n saturation = lightness <= 0.5 ? delta / (max + min) : delta / (2 - max - min);\r\n\r\n switch (max) {\r\n\r\n case r: hue = (g - b) / delta + (g < b ? 6 : 0); break;\r\n case g: hue = (b - r) / delta + 2; break;\r\n case b: hue = (r - g) / delta + 4; break;\r\n\r\n }\r\n\r\n hue /= 6;\r\n\r\n }\r\n\r\n hsl.h = hue;\r\n hsl.s = saturation;\r\n hsl.l = lightness;\r\n hsl.a = this.a;\r\n\r\n return hsl;\r\n\r\n }\r\n\r\n adjustHSL(h = 0, hf = 1, s = 0, sf = 1, l = 0, lf = 1) {\r\n var hsl = this.getHSL();\r\n return this.setHSL(Math.min(1, Math.max(0, hsl.h * hf + h)), Math.min(1, Math.max(0, hsl.s * sf + s)), Math.min(1, Math.max(0, hsl.l * lf + l)));\r\n }\r\n\r\n premultiplyAlpha(a?: number, r = 1, g = 1, b = 1) {\r\n if (a === undefined)\r\n a = this.a;\r\n var ia = 1 - a;\r\n this.r = r * ia + this.r * a;\r\n this.g = g * ia + this.g * a;\r\n this.b = b * ia + this.b * a;\r\n this.a = 1;\r\n return this;\r\n }\r\n\r\n mul(v: number) {\r\n this.r *= v;\r\n this.g *= v;\r\n this.b *= v;\r\n return this;\r\n }\r\n\r\n divide(v: number) {\r\n return this.mul(1 / v);\r\n }\r\n\r\n getGrayscale() {\r\n var hsl = this.getHSL();\r\n return new Color().setHSL(hsl.h, 0, hsl.l);\r\n }\r\n\r\n //[0, 255]\r\n r: number = 0;\r\n //[0, 255]\r\n g: number = 0;\r\n //[0, 255]\r\n b: number = 0;\r\n //[0, 1]\r\n a: number = 1;\r\n\r\n toStringRgba(a?: number) {\r\n if (a === undefined)\r\n a = this.a;\r\n return `rgba(${Math.round(this.r * 255)},${Math.round(this.g * 255)},${Math.round(this.b * 255)},${a})`;\r\n }\r\n\r\n toString() {\r\n return `#${Math.round(this.r * 255).toString(16)}${Math.round(this.g * 255).toString(16)}${Math.round(this.b * 255).toString(16)}`;\r\n }\r\n }\r\n\r\n export class Circle2D {\r\n Center: Point2D;\r\n private _radius: number;\r\n private _radiusSquared: number;\r\n\r\n get Radius() {\r\n return this._radius;\r\n }\r\n\r\n set Radius(value: number) {\r\n this._radius = value;\r\n this._radiusSquared = value * value;\r\n }\r\n\r\n get RadiusSquared() {\r\n return this._radiusSquared;\r\n }\r\n\r\n set RadiusSquared(value: number) {\r\n this._radius = Math.sqrt(value);\r\n this._radiusSquared = value;\r\n }\r\n\r\n constructor(center?: Point2D, radius: number = 0) {\r\n this.Center = center || new Point2D(0, 0);\r\n this.Radius = +radius;\r\n }\r\n\r\n contains(p: Point2D) {\r\n return this.Center.DistanceSquaredTo(p) <= this.RadiusSquared;\r\n }\r\n }\r\n\r\n function compareMax(a: Cell, b: Cell): number {\r\n return b.max - a.max;\r\n }\r\n\r\n class Cell {\r\n x: number;\r\n y: number;\r\n h: number;\r\n d: number;\r\n max: number;\r\n\r\n constructor(x: number, y: number, h: number, polygon: number[][][]) {\r\n this.x = x; // cell center x\r\n this.y = y; // cell center y\r\n this.h = h; // half the cell size\r\n this.d = pointToPolygonDist(x, y, polygon); // distance from cell center to polygon\r\n this.max = this.d + this.h * Math.SQRT2; // max distance to polygon within a cell\r\n }\r\n }\r\n\r\n function pointToPolygonDist(x: number, y: number, polygon: number[][][]): number {\r\n var inside = false;\r\n var minDistSq = Infinity;\r\n\r\n for (var k = 0; k < polygon.length; k++) {\r\n var vs = polygon[k];\r\n\r\n for (var i = 0, len = vs.length, j = len - 1; i < len; j = i++) {\r\n var a = vs[i],\r\n b = vs[j],\r\n xi = a[0], yi = a[1],\r\n xj = b[0], yj = b[1];\r\n\r\n if ((yi > y !== yj > y) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi))\r\n inside = !inside;\r\n\r\n minDistSq = Math.min(minDistSq, getSegDistSq(x, y, a, b));\r\n }\r\n }\r\n\r\n return (inside ? 1 : -1) * Math.sqrt(minDistSq);\r\n }\r\n\r\n function getCentroidCell(polygon: number[][][]): Cell {\r\n var area = 0;\r\n var x = 0;\r\n var y = 0;\r\n var points = polygon[0];\r\n\r\n for (var i = 0, len = points.length, j = len - 1; i < len; j = i++) {\r\n var a = points[i];\r\n var b = points[j];\r\n var f = a[0] * b[1] - b[0] * a[1];\r\n x += (a[0] + b[0]) * f;\r\n y += (a[1] + b[1]) * f;\r\n area += f * 3;\r\n }\r\n if (area === 0) return new Cell(points[0][0], points[0][1], 0, polygon);\r\n return new Cell(x / area, y / area, 0, polygon);\r\n }\r\n\r\n function getSegDistSq(px: number, py: number, a: number[], b: number[]): number {\r\n\r\n var x = a[0];\r\n var y = a[1];\r\n var dx = b[0] - x;\r\n var dy = b[1] - y;\r\n\r\n if (dx !== 0 || dy !== 0) {\r\n\r\n var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\r\n\r\n if (t > 1) {\r\n x = b[0];\r\n y = b[1];\r\n\r\n } else if (t > 0) {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n\r\n dx = px - x;\r\n dy = py - y;\r\n\r\n return dx * dx + dy * dy;\r\n }\r\n\r\n export function biggestCircleInPolygon(poly: Point2D[], precision?: number, debug?: boolean): Circle2D {\r\n\r\n let polygon = [poly.map(p => [p.x, p.y])];\r\n\r\n precision = precision || 1.0;\r\n\r\n // find the bounding box of the outer ring\r\n var minX, minY, maxX, maxY;\r\n for (var i = 0; i < polygon[0].length; i++) {\r\n var p = polygon[0][i];\r\n if (!i || p[0] < minX) minX = p[0];\r\n if (!i || p[1] < minY) minY = p[1];\r\n if (!i || p[0] > maxX) maxX = p[0];\r\n if (!i || p[1] > maxY) maxY = p[1];\r\n }\r\n\r\n var width = maxX - minX;\r\n var height = maxY - minY;\r\n var cellSize = Math.min(width, height);\r\n var h = cellSize / 2;\r\n\r\n // a priority queue of cells in order of their \"potential\" (max distance to polygon)\r\n var cellQueue = new ArrayHelper.TinyQueue(null, compareMax);\r\n\r\n if (cellSize === 0) return new Circle2D(new Point2D(minX, minY), 0);\r\n\r\n // cover polygon with initial cells\r\n for (var x = minX; x < maxX; x += cellSize) {\r\n for (var y = minY; y < maxY; y += cellSize) {\r\n cellQueue.push(new Cell(x + h, y + h, h, polygon));\r\n }\r\n }\r\n\r\n // take centroid as the first best guess\r\n var bestCell = getCentroidCell(polygon);\r\n\r\n // special case for rectangular polygons\r\n var bboxCell = new Cell(minX + width / 2, minY + height / 2, 0, polygon);\r\n if (bboxCell.d > bestCell.d) bestCell = bboxCell;\r\n\r\n var numProbes = cellQueue.length;\r\n\r\n while (cellQueue.length) {\r\n // pick the most promising cell from the queue\r\n var cell = cellQueue.pop();\r\n\r\n // update the best cell if we found a better one\r\n if (cell.d > bestCell.d) {\r\n bestCell = cell;\r\n if (debug) console.log('found best %d after %d probes', Math.round(1e4 * cell.d) / 1e4, numProbes);\r\n }\r\n\r\n // do not drill down further if there's no chance of a better solution\r\n if (cell.max - bestCell.d <= precision) continue;\r\n\r\n // split the cell into four cells\r\n h = cell.h / 2;\r\n cellQueue.push(new Cell(cell.x - h, cell.y - h, h, polygon));\r\n cellQueue.push(new Cell(cell.x + h, cell.y - h, h, polygon));\r\n cellQueue.push(new Cell(cell.x - h, cell.y + h, h, polygon));\r\n cellQueue.push(new Cell(cell.x + h, cell.y + h, h, polygon));\r\n numProbes += 4;\r\n }\r\n\r\n if (debug) {\r\n console.log('num probes: ' + numProbes);\r\n console.log('best distance: ' + bestCell.d);\r\n }\r\n\r\n return new Circle2D(new Point2D(bestCell.x, bestCell.y), bestCell.d);\r\n }\r\n\r\n export function biggestCircleInLatLngPolygon(poly: LatLng[], refLatLng?: LatLng, debug?: boolean): Circle2D {\r\n refLatLng = refLatLng || BoundsLatLng.FromLatLngs(poly).Min;\r\n var result = biggestCircleInPolygon(poly.map(ll => refLatLng.DirectionTo(ll).mul(1000)), 1, debug);\r\n\r\n return new Circle2D(refLatLng.OffsetVector(result.Center.mul(0.001)).ToPoint2D(), result.Radius * 0.001);\r\n }\r\n\r\n export function extractBounds(mapShape: SolarProTool.MapShape | SolarProTool.MapShape[]) {\r\n var minLat = Number.MAX_VALUE,\r\n minLng = Number.MAX_VALUE,\r\n maxLat = -Number.MAX_VALUE,\r\n maxLng = -Number.MAX_VALUE,\r\n minx = Number.MAX_VALUE,\r\n miny = Number.MAX_VALUE,\r\n maxx = -Number.MAX_VALUE,\r\n maxy = -Number.MAX_VALUE;\r\n\r\n if (Array.isArray(mapShape)) {\r\n mapShape.forEach(s => {\r\n s.borders.forEach(b => {\r\n minLat = Math.min(minLat, b.minLat);\r\n minLng = Math.min(minLng, b.minLng);\r\n maxLat = Math.max(maxLat, b.maxLat);\r\n maxLng = Math.max(maxLng, b.maxLng);\r\n minx = Math.min(minx, b.minx);\r\n miny = Math.min(miny, b.miny);\r\n maxx = Math.max(maxx, b.maxx);\r\n maxy = Math.max(maxy, b.maxy);\r\n });\r\n });\r\n } else {\r\n mapShape.borders.forEach(b => {\r\n minLat = Math.min(minLat, b.minLat);\r\n minLng = Math.min(minLng, b.minLng);\r\n maxLat = Math.max(maxLat, b.maxLat);\r\n maxLng = Math.max(maxLng, b.maxLng);\r\n minx = Math.min(minx, b.minx);\r\n miny = Math.min(miny, b.miny);\r\n maxx = Math.max(maxx, b.maxx);\r\n maxy = Math.max(maxy, b.maxy);\r\n });\r\n }\r\n\r\n return { boundsLatLng: new BoundsLatLng(new LatLng(minLat, minLng), new LatLng(maxLat, maxLng)), bounds: new Bounds2D(new Point2D(minx, miny), new Point2D(maxx, maxy)) };\r\n }\r\n\r\n export function calculateOrientationRad(points: SolarProTool.MapCoord[]) {\r\n if (!points || !points.length)\r\n return 0;\r\n\r\n var len = points.length,\r\n maxLen = 0,\r\n pair: { c1: SolarProTool.MapCoord, c2: SolarProTool.MapCoord, lenSq: number, d: Point2D } = null;\r\n\r\n for (var i = len - 1, j = 0; j < len; ++j) {\r\n var c1 = points[i],\r\n c2 = points[j],\r\n dx = c2.x - c1.x,\r\n dy = c2.y - c1.y,\r\n d = new Point2D(dx, dy),\r\n lenSq = d.GetLengthSquared();\r\n\r\n if (lenSq > maxLen) {\r\n maxLen = lenSq;\r\n pair = { c1, c2, lenSq, d };\r\n }\r\n\r\n i = j;\r\n }\r\n\r\n if (!pair || pair.lenSq <= 0)\r\n return 0;\r\n\r\n var localDir = pair.d.mul(1 / Math.sqrt(pair.lenSq)),\r\n ll1 = new LatLng(pair.c1.latitude, pair.c1.longitude),\r\n ll2 = new LatLng(pair.c2.latitude, pair.c2.longitude),\r\n g1 = ll1.ToPoint2D(),\r\n g2 = ll2.ToPoint2D(),\r\n gd = g2.sub(g1),\r\n gLenSq = gd.GetLengthSquared();\r\n\r\n if (gLenSq <= 0)\r\n return 0;\r\n\r\n var globalDir = gd.mul(1 / Math.sqrt(gLenSq));\r\n\r\n return globalDir.Rotate(-localDir.getOrientation()).getOrientation();\r\n }\r\n\r\n export function calculateWorldOrigin(orientationRad: number, customCoordinates: SolarProTool.MapCoord[]) {\r\n var rot = Transformation3D.Rotation(orientationRad),\r\n rotn = Transformation3D.Rotation(-orientationRad),\r\n bds = Bounds2D.FromPoints(customCoordinates.map(c => rotn.transform((new LatLng(c.latitude, c.longitude)).ToPoint2D())));\r\n return LatLng.FromPoint2D(rot.transform(bds.Min));\r\n }\r\n\r\n export function calculateGlobalCoordinates(points: {x: number, y: number}[], globalOrigin: LatLng, globalOrientationRad: number, slopeRad = 0, height = 0, altitude = 0) {\r\n var worldDirX = Point2D.FromOrientation(globalOrientationRad),\r\n worldDirY = worldDirX.LeftHandNormal(),\r\n slopeFactor = Math.cos(slopeRad);\r\n\r\n return points.map(point => {\r\n var latLng = globalOrigin.OffsetVector(worldDirX.mul(point.x * 0.001).add(worldDirY.mul(slopeFactor * point.y * 0.001))),\r\n c: SolarProTool.MapCoord = {\r\n x: point.x,\r\n y: point.y,\r\n z: height,\r\n latitude: latLng.Latitude,\r\n longitude: latLng.Longitude,\r\n altitude: altitude\r\n };\r\n return c;\r\n });\r\n }\r\n\r\n export class TiledMapCalculator {\r\n textureSize: number;\r\n zoom = 19;\r\n outerLatLngBounds: BoundsLatLng;\r\n latLngBounds: BoundsLatLng;\r\n min: Point2D;\r\n max: Point2D;\r\n delta: Point2D;\r\n\r\n constructor(latLngs: BoundsLatLng | LatLng[] | LatLng[][], startingZoomLevel = 19, textureSize = 2048) {\r\n var latLngBounds: BoundsLatLng = Array.isArray(latLngs) ? BoundsLatLng.FromLatLngs(latLngs) : latLngs;\r\n this.latLngBounds = latLngBounds;\r\n this.textureSize = textureSize;\r\n var zoomLevel = startingZoomLevel;\r\n\r\n var targetCenterLatLng = latLngBounds.Center;\r\n\r\n var outerLatLngBounds = BoundsLatLng.FromCenterAndZoom(targetCenterLatLng, zoomLevel, textureSize, textureSize);\r\n\r\n while (!outerLatLngBounds.IsInside(latLngBounds) && zoomLevel > 1) {\r\n --zoomLevel;\r\n outerLatLngBounds = BoundsLatLng.FromCenterAndZoom(targetCenterLatLng, zoomLevel, textureSize, textureSize);\r\n }\r\n\r\n this.outerLatLngBounds = outerLatLngBounds;\r\n this.zoom = zoomLevel;\r\n var min = this.min = outerLatLngBounds.Min.ToPoint2D();\r\n var max = this.max = outerLatLngBounds.Max.ToPoint2D();\r\n this.delta = new Point2D(max.x - min.x, max.y - min.y);\r\n }\r\n\r\n //call like \"../../handler/StaticImagesHandler.ashx?\" + GetMapsUrlParameter()\r\n GetMapsUrlParameter(mapId = \"GoogleSatellite\", scale = 1) {\r\n var center = this.outerLatLngBounds.Center,\r\n textureSize = this.textureSize,\r\n zoom = this.zoom;\r\n return `ID=${mapId}¢er=${center.Latitude},${center.Longitude}&zoom=${zoom}&size=${textureSize}x${textureSize}&scale=${scale}`;\r\n }\r\n\r\n CalculateUvs(latLngs: LatLng[]) {\r\n var min = this.min,\r\n delta = this.delta;\r\n return latLngs.map(ll => {\r\n var p = ll.ToPoint2D();\r\n return new Point2D((p.X - min.X) / delta.X, (p.Y - min.Y) / delta.Y);\r\n });\r\n }\r\n }\r\n}\r\n","module spt.Utils {\r\n\r\n export function arrayFrom(arr: ArrayLike): T[] {\r\n if (Array.from)\r\n return Array.from(arr);\r\n return Array.prototype.slice.call(arr);\r\n }\r\n\r\n export function saveObjectAsJsonFile(fileNameToSaveAs: string, object: any) {\r\n spt.Utils.saveTextAsFile(fileNameToSaveAs, [JSON.stringify(object, null, \"\\t\")]);\r\n }\r\n\r\n export function saveTextAsFile(fileNameToSaveAs: string, textToWrite: BlobPart[]) {\r\n if (!textToWrite) {\r\n console.log(\"Nothing to download\");\r\n return;\r\n }\r\n\r\n console.log(\"Creating blob to download\");\r\n\r\n var textFileAsBlob = new Blob(textToWrite, {\r\n type: 'text/plain'\r\n });\r\n\r\n saveBlobAsFile(fileNameToSaveAs, textFileAsBlob);\r\n }\r\n\r\n export function saveBlobAsFile(fileNameToSaveAs: string, blob: Blob) {\r\n /* Saves a text string as a blob file*/\r\n var ie = navigator.userAgent.match(/MSIE\\s([\\d.]+)/),\r\n ie11 = navigator.userAgent.match(/Trident\\/7.0/) && navigator.userAgent.match(/rv:11/),\r\n ieEDGE = navigator.userAgent.match(/Edge/g),\r\n ieVer = (ie ? ie[1] : (ie11 ? 11 : (ieEDGE ? 12 : -1)));\r\n\r\n if (ie && ieVer < 10) {\r\n console.log(\"No blobs on IE ver<10\");\r\n return;\r\n }\r\n\r\n if (ieVer > -1) {\r\n console.log(\"Initiate msSaveBlob\");\r\n window.navigator.msSaveBlob(blob, fileNameToSaveAs);\r\n\r\n } else {\r\n console.log(\"create anchor html link element\");\r\n var downloadLink = document.createElement(\"a\") as any;\r\n downloadLink.download = fileNameToSaveAs;\r\n downloadLink.href = window.URL.createObjectURL(blob);\r\n downloadLink.onclick = () => { document.body.removeChild(downloadLink); };\r\n downloadLink.style.display = \"none\";\r\n document.body.appendChild(downloadLink);\r\n console.log(\"initiate click on anchor element\");\r\n downloadLink.click();\r\n }\r\n }\r\n\r\n export function SerializeTrianglesToObj(triangles: { x: number; y: number; z: number; }[][], name?: string, input?: ObjSerializedResult): ObjSerializedResult {\r\n var pts: { x: number; y: number; z: number; }[] = [];\r\n var indices: number[] = [];\r\n var idx = 0;\r\n triangles.forEach(triangle => {\r\n pts.push(triangle[0], triangle[1], triangle[2]);\r\n indices.push(idx, idx + 1, idx + 2);\r\n idx += 3;\r\n });\r\n\r\n return SerializePointsToObj(pts, indices, name, input);\r\n }\r\n\r\n export function SerializePointsToObj(points: { x: number; y: number; z: number; }[], indices: number[], name?: string, input?: ObjSerializedResult): ObjSerializedResult {\r\n var res = input || {\r\n output: [],\r\n indexCount: 0,\r\n vertexCount: 0,\r\n uvCount: 0\r\n };\r\n\r\n //if (!transformation)\r\n // transformation = new THREE.Matrix4();\r\n\r\n //var normalTransform = new THREE.Matrix3().getNormalMatrix(transformation);\r\n\r\n var output = res.output;\r\n\r\n output.push(\"o \" + (name || (\"Geometry \" + spt.Utils.GenerateGuid())));\r\n\r\n //var bounds = new THREE.Box3().setFromPoints(points);\r\n\r\n //var v = new THREE.Vector3();\r\n\r\n points.forEach(v => {\r\n\r\n //v.copy(p).applyMatrix4(transformation);\r\n\r\n output.push(\"v \" + v.x.toFixed(6) + \" \" + v.y.toFixed(6) + \" \" + v.z.toFixed(6));\r\n });\r\n\r\n //points.forEach(v => {\r\n // output += \"vt \" + x.toFixed(6) + \" \" + y.toFixed(6) + \"\\n\";\r\n //});\r\n\r\n //points.forEach(v => {\r\n // output += \"vn \" + v.x.toFixed(6) + \" \" + v.y.toFixed(6) + \" \" + v.z.toFixed(6) + \"\\n\";\r\n //});\r\n\r\n var idxOffset = res.vertexCount + 1;\r\n\r\n for (var i = 0, j = indices.length; i < j; i += 3) {\r\n output.push(\"f \" + (indices[i] + idxOffset) + \" \" + (indices[i + 1] + idxOffset) + \" \" + (indices[i + 2] + idxOffset));\r\n }\r\n\r\n output.push(\"s off\");\r\n\r\n res.vertexCount += points.length;\r\n //res.uvCount += positions.length / 3;\r\n res.indexCount += indices.length;\r\n\r\n return res;\r\n }\r\n\r\n export function isPowerOfTwo(n: number) {\r\n return (n !== 0) && ((n & (n - 1)) === 0);\r\n }\r\n\r\n export function escapeHtml(text) {\r\n var map = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n };\r\n\r\n return text && text.length ? text.replace(/[&<>\"']/g, (m) => map[m]) : \"\";\r\n }\r\n\r\n export class Stopwatch {\r\n\r\n startTime: number;\r\n endTime: number;\r\n elapsedMilliseconds: number;\r\n\r\n constructor() {\r\n this.startTime = 0;\r\n this.endTime = 0;\r\n this.elapsedMilliseconds = 0;\r\n }\r\n\r\n start() {\r\n this.startTime = performance.now();\r\n this.endTime = this.startTime;\r\n return this;\r\n }\r\n\r\n stop() {\r\n this.endTime = performance.now();\r\n this.elapsedMilliseconds = this.endTime - this.startTime;\r\n }\r\n\r\n restart() {\r\n this.startTime = performance.now();\r\n }\r\n\r\n log(name: string) {\r\n this.stop();\r\n console.log(name + \" \" + this.elapsedMilliseconds + \" ms\");\r\n this.restart();\r\n }\r\n }\r\n\r\n export function addGetParameterToUrl(url: string, name: string, val: string) {\r\n if (!url || !name || !val)\r\n return url;\r\n\r\n let rgex = new RegExp(`(\\\\?|&)(${name}=).*?(&|$)`, \"i\"),\r\n m = url.search(rgex);\r\n\r\n if (m !== -1)\r\n return url.replace(rgex, `$1${name}=${val}$3`);\r\n\r\n return url + (url.indexOf(\"?\") !== -1 ? \"&\" : \"?\") + name + \"=\" + val;\r\n }\r\n\r\n export function addSwitchId(url: string, id: string): string {\r\n return addGetParameterToUrl(url, \"_sw_id\", id);\r\n }\r\n\r\n export function addTempId(url: string, id: string): string {\r\n return addGetParameterToUrl(url, \"_tp_id\", id);\r\n }\r\n\r\n export function GenerateGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n export function GuidEmpty() {\r\n return \"00000000-0000-0000-0000-000000000000\";\r\n }\r\n\r\n export function LoadImage(src: string, callBack: (img: HTMLImageElement) => void): HTMLImageElement {\r\n var img = new Image();\r\n\r\n img.onload = () => {\r\n callBack(img);\r\n img.onload = null;\r\n };\r\n\r\n img.src = src;\r\n\r\n return img;\r\n }\r\n\r\n export function SetFloatInInput(input: string | HTMLElement | JQuery, val: number) {\r\n if (input === undefined || input === null || input === \"\")\r\n return;\r\n\r\n var $input: JQuery = $(input as any);\r\n\r\n if (!$input.length)\r\n return;\r\n\r\n if (val === undefined || val === null)\r\n $input.val(\"\");\r\n else if (($).global.culture)\r\n $input.val(('' + val).replace(\".\", ($).global.culture.numberFormat[\".\"]));\r\n else\r\n $input.val('' + val);\r\n }\r\n\r\n export interface IFloatFromInputOptions {\r\n min?: number;\r\n max?: number;\r\n precision?: number;\r\n notImperial?: boolean;\r\n isFeet?: boolean;\r\n applyArithmetic?: boolean;\r\n from?: string;\r\n to?: string;\r\n scale?: number;\r\n }\r\n\r\n export function GetFloatFromInput(input: string | HTMLElement | JQuery, options?: IFloatFromInputOptions) {\r\n if (input === undefined || input === null || input === \"\")\r\n return null;\r\n\r\n var $input: JQuery = $(input as any);\r\n\r\n if (!$input.length)\r\n return null;\r\n\r\n return spt.Utils.GetFloatFromInputValue($input.val() as any, options);\r\n }\r\n\r\n export function GetFloatFromInputValue(input: string, options?: IFloatFromInputOptions) {\r\n if (input === undefined || input === null || input === \"\")\r\n return options && options.min !== undefined ? options.min : null;\r\n\r\n var valStr = ('' + input);\r\n var value: number;\r\n if (options && options.applyArithmetic) {\r\n value = spt.Utils.ApplyNumberArithmetic(valStr, options.isFeet, options.notImperial);\r\n } else {\r\n value = spt.Utils.ConvertStringToValue(valStr, options && options.isFeet, options && options.notImperial);\r\n }\r\n\r\n if (isNaN(value) || !isFinite(value))\r\n return options && options.min !== undefined ? options.min : null;\r\n\r\n if (options && options.from && options.to)\r\n value = convertLengthUnit(value, options);\r\n\r\n if (options && options.scale)\r\n value = value * options.scale;\r\n\r\n if (options && (typeof options.min === \"number\" || typeof options.max === \"number\" || typeof options.precision === \"number\")) {\r\n value = spt.Utils.ApplyNumberconstraints(value, options);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n export function ConvertStringToValue(val: number | string, isFeet?: boolean, notImperial?: boolean) {\r\n if (typeof val === \"number\")\r\n return val;\r\n if (val === undefined || val === null || val === \"\" || typeof val !== \"string\")\r\n return null;\r\n\r\n var newValue = ('' + val).replace(\",\", \".\");\r\n if (UseImperialSystem && !notImperial)\r\n newValue = ImperialLengthToValue(newValue, !!isFeet);\r\n var nv = typeof newValue === \"string\" ? newValue.replace(\",\", \".\") : newValue;\r\n var newValueAsNum = parseFloat(nv);\r\n return isNaN(newValueAsNum) ? null : newValueAsNum;\r\n }\r\n\r\n export function ApplyNumberconstraints(val: number, options: any) {\r\n if (typeof val !== \"number\" || typeof options !== \"object\" || options === null)\r\n return val;\r\n if (typeof options.min === \"number\")\r\n val = Math.max(options.min, val);\r\n if (typeof options.max === \"number\")\r\n val = Math.min(options.max, val);\r\n if (typeof options.precision === \"number\") {\r\n //Nachkommastellen\r\n var fac = Math.pow(10, options.precision);\r\n val = Math.round(val * fac) / fac;\r\n }\r\n return val;\r\n }\r\n\r\n export function ApplyNumberArithmetic(val: number | string, isFeet?: boolean, notImperial?: boolean) {\r\n var result = 0;\r\n if (typeof val === \"string\") {\r\n\r\n val = (val).replace(/[\\s]/g, '');\r\n\r\n if (val[0] !== '+' && val[0] !== '-')\r\n val = '+' + val;\r\n\r\n //only plus and minus\r\n var match = (val).match(/[+-][^+-]+/g);\r\n var arr = [0];\r\n\r\n if (match && match.length)\r\n arr = match.map(v => (ConvertStringToValue(v, isFeet, notImperial) || 0));\r\n\r\n result = arr.reduce((p, c) => (p + c));\r\n\r\n } else if (typeof val === \"number\")\r\n result = val;\r\n return result;\r\n }\r\n\r\n //clamp angle between -180 and 180 degree\r\n export function ClampAngle(val: number) {\r\n return val < 0 ? (180 - ((Math.abs(val) + 180) % 360)) : (((val + 180) % 360) - 180);\r\n }\r\n\r\n export function ConvertCamelCase(txt: string) {\r\n if (!txt || !txt.length || typeof txt !== \"string\")\r\n return txt;\r\n var result = txt.replace(/([A-Z])/g, \" $1\");\r\n return result.charAt(0).toUpperCase() + result.slice(1);\r\n }\r\n\r\n export function SeperateUriParameters(url: string) {\r\n if (typeof url !== \"string\")\r\n return null;\r\n\r\n var components = url.split(\"?\");\r\n var target = components[0];\r\n var params = null;\r\n if (components.length > 1) {\r\n params = {};\r\n components[1].split(\"&\").forEach(part => {\r\n var item = part.split(\"=\");\r\n params[decodeURIComponent(item[0])] = decodeURIComponent(item[1]);\r\n });\r\n }\r\n\r\n return {\r\n target: target,\r\n params: params,\r\n uri: url\r\n };\r\n }\r\n\r\n export function ApplyParamsObject(paramsObj: any, iteratorFn?: (key: any, val: any) => void) {\r\n if (typeof iteratorFn === \"function\") {\r\n for (var key in paramsObj) {\r\n iteratorFn(key, paramsObj[key]);\r\n }\r\n } else {\r\n for (var key in paramsObj) {\r\n this[key] = paramsObj[key];\r\n }\r\n }\r\n }\r\n\r\n export function getAllHtmlChildren(elem: HTMLElement) {\r\n var elems: HTMLElement[] = [elem];\r\n\r\n var result: HTMLElement[] = [];\r\n\r\n while (elems.length) {\r\n var el = elems.pop();\r\n result.push(el);\r\n if (el.children && el.children.length) {\r\n var childs = el.children;\r\n for (var k = 0, l = childs.length; k < l; k++) {\r\n var child = childs[k];\r\n if (child && child instanceof HTMLElement)\r\n elems.push(child as HTMLElement);\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n export class ObservableValue {\r\n constructor(internalValue: number, options: any) {\r\n var value = internalValue || 0;\r\n this.internalUnit = \"mm\";\r\n this.viewUnit = \"mm\";\r\n\r\n for (var key in options) {\r\n if (options.hasOwnProperty(key))\r\n this[key] = options[key];\r\n }\r\n\r\n this._internalValue = value;\r\n this._value = spt.Utils.ApplyNumberconstraints(convertLengthUnit(spt.Utils.ConvertStringToValue(value, this.internalUnit === \"ft\"), { from: this.internalUnit, to: this.viewUnit }), this);\r\n\r\n ko.defineProperty(this, 'value', {\r\n get: () => {\r\n return this._value;\r\n },\r\n set: (v) => {\r\n var val = spt.Utils.ConvertStringToValue(v, this.viewUnit === \"ft\");\r\n if (val) {\r\n this._value = spt.Utils.ApplyNumberconstraints(val, this);\r\n this._internalValue = convertLengthUnit(val, { from: this.viewUnit, to: this.internalUnit });\r\n } else {\r\n //reset to init value\r\n this._internalValue = this.initValue;\r\n this._value = spt.Utils.ApplyNumberconstraints(convertLengthUnit(spt.Utils.ConvertStringToValue(this.initValue, this.viewUnit === \"ft\"), { from: this.internalUnit, to: this.viewUnit }), this);\r\n }\r\n }\r\n });\r\n\r\n ko.defineProperty(this, 'internalValue', {\r\n get: () => {\r\n return this._internalValue;\r\n },\r\n set: (v) => {\r\n var val = spt.Utils.ConvertStringToValue(v, this.internalUnit === \"ft\");\r\n if (val) {\r\n this._internalValue = val;\r\n this._value = spt.Utils.ApplyNumberconstraints(convertLengthUnit(val, { from: this.internalUnit, to: this.viewUnit }), this);\r\n } else {\r\n //reset to init value\r\n this._internalValue = this.initValue;\r\n this._value = spt.Utils.ApplyNumberconstraints(convertLengthUnit(spt.Utils.ConvertStringToValue(this.initValue, this.viewUnit === \"ft\"), { from: this.internalUnit, to: this.viewUnit }), this);\r\n }\r\n }\r\n });\r\n\r\n ko.track(this);\r\n this.initValue = value;\r\n }\r\n\r\n internalUnit: string;\r\n viewUnit: string;\r\n private _internalValue: number;\r\n private _value: number;\r\n value: number;\r\n internalValue: number;\r\n initValue: number;\r\n }\r\n\r\n export interface ObjSerializedResult {\r\n output: string[];\r\n indexCount: number;\r\n vertexCount: number;\r\n uvCount: number;\r\n }\r\n\r\n export function arrayBufferToBase64(arrayBuffer: ArrayBuffer): string {\r\n let base64 = '';\r\n const encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\r\n\r\n const bytes = new Uint8Array(arrayBuffer);\r\n const byteLength = bytes.byteLength;\r\n const byteRemainder = byteLength % 3;\r\n const mainLength = byteLength - byteRemainder;\r\n\r\n let a;\r\n let b;\r\n let c;\r\n let d;\r\n let chunk;\r\n\r\n // Main loop deals with bytes in chunks of 3\r\n for (let i = 0; i < mainLength; i += 3) {\r\n // Combine the three bytes into a single integer\r\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\r\n\r\n // Use bitmasks to extract 6-bit segments from the triplet\r\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\r\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\r\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\r\n d = chunk & 63; // 63 = 2^6 - 1\r\n\r\n // Convert the raw binary segments to the appropriate ASCII encoding\r\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\r\n }\r\n\r\n // Deal with the remaining bytes and padding\r\n if (byteRemainder === 1) {\r\n chunk = bytes[mainLength];\r\n\r\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\r\n\r\n // Set the 4 least significant bits to zero\r\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\r\n\r\n base64 += `${encodings[a]}${encodings[b]}==`;\r\n } else if (byteRemainder === 2) {\r\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\r\n\r\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\r\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\r\n\r\n // Set the 2 least significant bits to zero\r\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\r\n\r\n base64 += `${encodings[a]}${encodings[b]}${encodings[c]}=`;\r\n }\r\n\r\n return base64;\r\n }\r\n\r\n export function base64ToArrayBuffer(input: string): ArrayBuffer {\r\n\r\n const keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\n\r\n //get last chars to see if are valid\r\n\r\n if (input.length >= 2 && input.charAt(input.length - 2) == \"=\")\r\n input = input.substring(0, input.length - 2);\r\n else if (input.length >= 1 && input.charAt(input.length - 1) == \"=\")\r\n input = input.substring(0, input.length - 1);\r\n\r\n var inputLength = input.length;\r\n var bytes = Math.floor((inputLength / 4) * 3);\r\n\r\n var arrayBuffer = new ArrayBuffer(bytes);\r\n\r\n var uarray = new Uint8Array(arrayBuffer);\r\n\r\n var i = 0;\r\n var j = 0;\r\n\r\n //input = input.replace(/[^A-Za-z0-9\\+\\/]/g, \"\");\r\n\r\n while (i < bytes) {\r\n //get the 3 octects in 4 ascii chars\r\n var enc1 = j < inputLength ? keyStr.indexOf(input.charAt(j++)) : 0;\r\n var enc2 = j < inputLength ? keyStr.indexOf(input.charAt(j++)) : 0;\r\n var enc3 = j < inputLength ? keyStr.indexOf(input.charAt(j++)) : 0;\r\n var enc4 = j < inputLength ? keyStr.indexOf(input.charAt(j++)) : 0;\r\n\r\n var chr1 = (enc1 << 2) | (enc2 >> 4);\r\n var chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n var chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n uarray[i++] = chr1;\r\n if (i < bytes)\r\n uarray[i++] = chr2;\r\n if (i < bytes)\r\n uarray[i++] = chr3;\r\n }\r\n\r\n return arrayBuffer;\r\n }\r\n\r\n //export function TestCompress() {\r\n\r\n // var ba = new Int8Array([0, 2, 13, 16, 17, 32, 34]).buffer;\r\n // var tt = arrayBufferToBase64(ba);\r\n // var tt2 = Array.prototype.slice.call(new Int8Array(base64ToArrayBuffer(tt)));\r\n // console.log(tt);\r\n // console.log(tt2);\r\n\r\n // var arr = [],\r\n // i = 0;\r\n // for (i = 0; i < 1000; i++) {\r\n // arr.push(Math.floor((Math.random() * 1000000)));\r\n // }\r\n\r\n // console.log(\"array length: \" + arr.length);\r\n // console.log(\"array size: \" + JSON.stringify(arr).length);\r\n // console.log(\"array:\");\r\n // console.log(JSON.stringify(arr));\r\n\r\n // var compressed = arrayBufferToBase64(FastIntegerCompression.compress(arr));\r\n\r\n // console.log(\"compressed size: \" + compressed.length);\r\n // console.log(\"compressed:\");\r\n // console.log(compressed);\r\n\r\n // var uncompressed = FastIntegerCompression.uncompress(base64ToArrayBuffer(compressed));\r\n\r\n // console.log(\"uncompressed length: \" + uncompressed.length);\r\n // console.log(\"uncompressed size: \" + JSON.stringify(uncompressed).length);\r\n // console.log(\"uncompressed:\");\r\n // console.log(JSON.stringify(uncompressed));\r\n\r\n // if (arr.length !== uncompressed.length) {\r\n // console.log(\"failed!\");\r\n // return;\r\n // }\r\n\r\n // for (i = 0; i < arr.length; i++) {\r\n // if (arr[i] !== uncompressed[i]) {\r\n // console.log(\"failed!\");\r\n // return;\r\n // }\r\n // }\r\n //}\r\n\r\n export module FastIntegerCompression {\r\n\r\n function bytelog(val: number): number {\r\n if (val < (1 << 7)) {\r\n return 1;\r\n } else if (val < (1 << 14)) {\r\n return 2;\r\n } else if (val < (1 << 21)) {\r\n return 3;\r\n } else if (val < (1 << 28)) {\r\n return 4;\r\n }\r\n return 5;\r\n }\r\n\r\n // compute how many bytes an array of integers would use once compressed\r\n export function computeCompressedSizeInBytes(input: number[]): number {\r\n var c = input.length;\r\n var answer = 0;\r\n for (var i = 0; i < c; i++) {\r\n answer += bytelog(input[i]);\r\n }\r\n return answer;\r\n }\r\n\r\n // compress an array of integers, return a compressed buffer (as an ArrayBuffer)\r\n export function compress(input: number[]): ArrayBuffer {\r\n var c = input.length;\r\n var buf = new ArrayBuffer(computeCompressedSizeInBytes(input));\r\n var view = new Int8Array(buf);\r\n var pos = 0;\r\n for (var i = 0; i < c; i++) {\r\n var val = input[i];\r\n if (val < (1 << 7)) {\r\n view[pos++] = val;\r\n } else if (val < (1 << 14)) {\r\n view[pos++] = (val & 0x7F) | 0x80;\r\n view[pos++] = val >>> 7;\r\n } else if (val < (1 << 21)) {\r\n view[pos++] = (val & 0x7F) | 0x80;\r\n view[pos++] = ((val >>> 7) & 0x7F) | 0x80;\r\n view[pos++] = val >>> 14;\r\n } else if (val < (1 << 28)) {\r\n view[pos++] = (val & 0x7F) | 0x80;\r\n view[pos++] = ((val >>> 7) & 0x7F) | 0x80;\r\n view[pos++] = ((val >>> 14) & 0x7F) | 0x80;\r\n view[pos++] = val >>> 21;\r\n } else {\r\n view[pos++] = (val & 0x7F) | 0x80;\r\n view[pos++] = ((val >>> 7) & 0x7F) | 0x80;\r\n view[pos++] = ((val >>> 14) & 0x7F) | 0x80;\r\n view[pos++] = ((val >>> 21) & 0x7F) | 0x80;\r\n view[pos++] = val >>> 28;\r\n }\r\n }\r\n return buf;\r\n }\r\n\r\n // from a compressed array of integers stored ArrayBuffer, compute the number of compressed integers by scanning the input\r\n //export function computeHowManyIntegers(input: ArrayBuffer): number {\r\n // var view = new Int8Array(input);\r\n // var c = view.length;\r\n // var count = 0;\r\n // for(var i = 0; i < c; i++) {\r\n // count += (input[i]>>>7);\r\n // }\r\n // return c - count;\r\n //}\r\n\r\n // uncompress an array of integer from an ArrayBuffer, return the array\r\n export function uncompress(input: ArrayBuffer): number[] {\r\n var array = [];\r\n var inbyte = new Int8Array(input);\r\n var end = inbyte.length;\r\n var pos = 0;\r\n while (end > pos) {\r\n var c = inbyte[pos++];\r\n var v = c & 0x7F;\r\n if (c >= 0) {\r\n array.push(v);\r\n continue;\r\n }\r\n c = inbyte[pos++];\r\n v |= (c & 0x7F) << 7;\r\n if (c >= 0) {\r\n array.push(v);\r\n continue;\r\n }\r\n c = inbyte[pos++];\r\n v |= (c & 0x7F) << 14;\r\n if (c >= 0) {\r\n array.push(v);\r\n continue;\r\n }\r\n c = inbyte[pos++];\r\n v |= (c & 0x7F) << 21;\r\n if (c >= 0) {\r\n array.push(v);\r\n continue;\r\n }\r\n c = inbyte[pos++];\r\n v |= c << 28;\r\n array.push(v);\r\n }\r\n return array;\r\n }\r\n\r\n export function compressToBase64(input: number[]): CompressionResult {\r\n if (!input || !input.length)\r\n return null;\r\n\r\n var min = Math.min.apply(null, input);\r\n\r\n var data = arrayBufferToBase64(compress(input.map(v => v - min)));\r\n\r\n return new CompressionResult(data, min, 1);\r\n }\r\n\r\n //precision: numbers smaller than 1 (eg. 0.01) means higher precision. For units in [mm] 1 is ok.\r\n export function compressDoublesToBase64(input: number[], precision: number = 1): CompressionResult {\r\n var result = compressToBase64(input.map(v => Math.round(v / precision)));\r\n\r\n result.Scale = precision;\r\n\r\n return result;\r\n }\r\n\r\n export function uncompressFromBase64(data: string, bias: number = 0, scale: number = 1): number[] {\r\n return uncompress(base64ToArrayBuffer(data)).map(v => (v + bias) * scale);\r\n }\r\n\r\n export class CompressionResult {\r\n Data: string;\r\n Bias: number;\r\n Scale: number;\r\n\r\n constructor(data?: string, bias?: number, scale?: number) {\r\n this.Data = data || null;\r\n this.Bias = bias || 0;\r\n this.Scale = scale || 1;\r\n }\r\n }\r\n }\r\n\r\n var deferredList: { [key: string]: number } = {};\r\n\r\n export function DeferredCall(key: string, fn: () => void, timeout: number) {\r\n if (deferredList[key]) {\r\n clearTimeout(deferredList[key]);\r\n deferredList[key] = 0;\r\n }\r\n\r\n deferredList[key] = setTimeout(() => {\r\n fn();\r\n delete deferredList[key];\r\n }, timeout) as any;\r\n }\r\n}\r\n\r\nmodule ArrayHelper {\r\n\r\n export function replaceContent(arr: T[], newContent: T[]): T[] {\r\n return arr.splice.apply(arr, [0, arr.length].concat(newContent || [] as any)) as T[];\r\n }\r\n\r\n export function removeContent(arr: T[]): T[] {\r\n return arr.splice(0, arr.length);\r\n }\r\n\r\n export function Sum(arr: number[]): number {\r\n return arr.reduce((pv, cv) => pv + cv, 0);\r\n }\r\n\r\n export function byMax(arr: T[], fn: (item: T) => number): T {\r\n let val = -Number.MAX_VALUE,\r\n res: T = null;\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n let item = arr[i],\r\n v = fn(item);\r\n if (v > val) {\r\n val = v;\r\n res = item;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n export function byMin(arr: T[], fn: (item: T) => number): T {\r\n let val = Number.MAX_VALUE,\r\n res: T = null;\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n let item = arr[i],\r\n v = fn(item);\r\n if (v < val) {\r\n val = v;\r\n res = item;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n export function indexByMax(arr: T[], fn: (item: T) => number): number {\r\n let val = -Number.MAX_VALUE,\r\n idx = -1;\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n let item = arr[i],\r\n v = fn(item);\r\n if (v > val) {\r\n val = v;\r\n idx = i;\r\n }\r\n }\r\n return idx;\r\n }\r\n\r\n export function indexByMin(arr: T[], fn: (item: T) => number): number {\r\n let val = Number.MAX_VALUE,\r\n idx = -1;\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n let item = arr[i],\r\n v = fn(item);\r\n if (v < val) {\r\n val = v;\r\n idx = i;\r\n }\r\n }\r\n return idx;\r\n }\r\n\r\n export function Min(arr: T[], fn: (item: T) => number): number {\r\n var val = Number.MAX_VALUE;\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n var v = fn(arr[i]);\r\n if (v < val)\r\n val = v;\r\n }\r\n return val;\r\n }\r\n\r\n export function Max(arr: T[], fn: (item: T) => number): number {\r\n var val = -Number.MAX_VALUE;\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n var v = fn(arr[i]);\r\n if (v > val)\r\n val = v;\r\n }\r\n return val;\r\n }\r\n\r\n export function firstOrNull(arr: T[], fn: (item: T) => boolean): T {\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n let item = arr[i];\r\n if (fn(item))\r\n return item;\r\n }\r\n return null;\r\n }\r\n\r\n export function count(arr: T[], fn: (item: T) => boolean): number {\r\n var res = 0;\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n let item = arr[i];\r\n if (fn(item))\r\n res++;\r\n }\r\n return res;\r\n }\r\n\r\n export function searchIndex(arr: T[], fn: (item: T) => boolean): number {\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n if (fn(arr[i]))\r\n return i;\r\n }\r\n return -1;\r\n }\r\n\r\n export function contains(arr: T[], fn: (item: T) => boolean): boolean {\r\n for (var i = 0, j = arr.length; i < j; i++) {\r\n if (fn(arr[i]))\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n export function forEachPairClosed(arr: T[], fn: (item1: T, item2: T) => void): void {\r\n var l = arr.length;\r\n if (l < 2)\r\n return;\r\n for (var i = 1; i < l; i++) {\r\n fn(arr[i - 1], arr[i]);\r\n }\r\n fn(arr[arr.length - 1], arr[0]);\r\n }\r\n\r\n export function mapPairClosed(arr: T[], fn: (item1: T, item2: T) => K): K[] {\r\n var l = arr.length,\r\n result: K[] = [];\r\n if (l < 2)\r\n return result;\r\n for (var i = 1, l = arr.length; i < l; i++) {\r\n result.push(fn(arr[i - 1], arr[i]));\r\n }\r\n result.push(fn(arr[arr.length - 1], arr[0]));\r\n return result;\r\n }\r\n\r\n export function iterateArray(arr: T[], fn: (item: T, idx?: number) => void) {\r\n var len = arr.length;\r\n var it = Math.floor(len / 8);\r\n var l = len % 8;\r\n var i = 0;\r\n\r\n if (l > 0) {\r\n do {\r\n fn(arr[i], i++);\r\n } while (--l > 0);\r\n }\r\n if (it <= 0) return;\r\n do {\r\n fn(arr[i], i++);\r\n fn(arr[i], i++);\r\n fn(arr[i], i++);\r\n fn(arr[i], i++);\r\n fn(arr[i], i++);\r\n fn(arr[i], i++);\r\n fn(arr[i], i++);\r\n fn(arr[i], i++);\r\n } while (--it > 0);\r\n }\r\n\r\n export function iterateTimes(times: number, fn: (i: number) => void) {\r\n var it = Math.floor(times / 8);\r\n var l = times % 8;\r\n var i = 0;\r\n\r\n if (l > 0) {\r\n do {\r\n fn(i++);\r\n } while (--l > 0);\r\n }\r\n if (it <= 0) return;\r\n do {\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n fn(i++);\r\n } while (--it > 0);\r\n }\r\n\r\n export function arraysEqual(a: T[], b: T[]): boolean {\r\n if (a === b) return true;\r\n if (a == null || b == null) return false;\r\n if (a.length != b.length) return false;\r\n\r\n for (var i = 0; i < a.length; ++i) {\r\n if (a[i] !== b[i]) return false;\r\n }\r\n return true;\r\n }\r\n\r\n export function intervalsFromStringList(strings: string[]): number[][] {\r\n var result: number[][] = [];\r\n\r\n if (!strings || !strings.length)\r\n return result;\r\n\r\n for (var i = 0, j = strings.length; i < j; i++) {\r\n var str = strings[i];\r\n\r\n if (!str || !str.length)\r\n continue;\r\n\r\n var s = str.replace(/\\s/g, \"\");\r\n if (!s || !s.length)\r\n continue;\r\n\r\n var minusIndex = s.indexOf('-');\r\n if (minusIndex > 0 && minusIndex < (s.length - 1)) {\r\n var split = s.split('-');\r\n if (split.length == 2 && split.every(t => !(!t || !t.length))) {\r\n\r\n var v1 = Math.round(Math.max(0, parseFloat(split[0].replace(\",\", \".\")))),\r\n v2 = Math.round(Math.max(0, parseFloat(split[1].replace(\",\", \".\"))));\r\n\r\n result.push([Math.min(v1, v2), Math.max(v1, v2)]);\r\n }\r\n } else {\r\n var ii = Math.round(Math.max(0, parseFloat(s.replace(\",\", \".\"))));\r\n result.push([ii, ii]);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n export function fillArray(value: T, count: number): T[] {\r\n if ((Array.prototype).fill)\r\n return (new Array(count)).fill(value);\r\n var res: T[] = [];\r\n for (var i = 0; i < count; i++)\r\n res.push(value);\r\n return res;\r\n }\r\n\r\n export function removeItem(arr: T[], item: T) {\r\n var index = arr.indexOf(item);\r\n if (index > -1)\r\n arr.splice(index, 1);\r\n }\r\n\r\n export function removeItems(arr: T[], items: T[]) {\r\n for (var i = 0, j = items.length; i < j; i++) {\r\n var item = items[i];\r\n var index = arr.indexOf(item);\r\n if (index > -1)\r\n arr.splice(index, 1);\r\n }\r\n }\r\n\r\n export function removeAll(arr: T[], fn?: (T) => boolean) {\r\n if (fn)\r\n removeItems(arr, arr.filter(fn));\r\n else\r\n arr.splice(0, arr.length);\r\n }\r\n\r\n export function groupBy(arr: T[], fn: (T) => string | number): T[][] {\r\n var result: T[][] = [],\r\n g: { [k: string]: T[] } = {};\r\n\r\n for (var i = arr.length; i--;) {\r\n var o = arr[i],\r\n k = fn(o) as string,\r\n l = g[k];\r\n if (!l) {\r\n g[k] = l = [o];\r\n result.push(l);\r\n }\r\n else\r\n l.push(o);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function defaultCompare(a: any, b: any) {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n }\r\n\r\n export class TinyQueue {\r\n\r\n compare: (a: T, b: T) => number;\r\n length: number;\r\n data: T[];\r\n\r\n constructor(data?: T[], compare?: (a: T, b: T) => number) {\r\n this.data = data || [];\r\n this.length = this.data.length;\r\n this.compare = compare || defaultCompare;\r\n\r\n if (this.length > 0) {\r\n for (var i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\r\n }\r\n }\r\n\r\n push(item: T): void {\r\n this.data.push(item);\r\n this.length++;\r\n this._up(this.length - 1);\r\n }\r\n\r\n pop(): T {\r\n if (this.length === 0) return undefined;\r\n\r\n var top = this.data[0];\r\n this.length--;\r\n\r\n if (this.length > 0) {\r\n this.data[0] = this.data[this.length];\r\n this._down(0);\r\n }\r\n this.data.pop();\r\n\r\n return top;\r\n }\r\n\r\n peek(): T {\r\n return this.data[0];\r\n }\r\n\r\n private _up(pos: number): void {\r\n var data = this.data;\r\n var compare = this.compare;\r\n var item = data[pos];\r\n\r\n while (pos > 0) {\r\n var parent = (pos - 1) >> 1;\r\n var current = data[parent];\r\n if (compare(item, current) >= 0) break;\r\n data[pos] = current;\r\n pos = parent;\r\n }\r\n\r\n data[pos] = item;\r\n }\r\n\r\n private _down(pos: number): void {\r\n var data = this.data;\r\n var compare = this.compare;\r\n var halfLength = this.length >> 1;\r\n var item = data[pos];\r\n\r\n while (pos < halfLength) {\r\n var left = (pos << 1) + 1;\r\n var right = left + 1;\r\n var best = data[left];\r\n\r\n if (right < this.length && compare(data[right], best) < 0) {\r\n left = right;\r\n best = data[right];\r\n }\r\n if (compare(best, item) >= 0) break;\r\n\r\n data[pos] = best;\r\n pos = left;\r\n }\r\n\r\n data[pos] = item;\r\n }\r\n }\r\n\r\n //returns possible combinations with lineSteppings (v1 .. vi) in form: [n1, n2, ... ni, length] with n1*v1 + n2*v2 + ... + vi*vi = length\r\n export function calculateCombinations(lineSteppings: number[], maxNumber = 5, maxCombinations = 256): number[][] {\r\n var len = lineSteppings.length;\r\n if (len <= 0)\r\n return [];\r\n\r\n var mn = maxNumber,\r\n count = Math.pow(mn, len);\r\n\r\n while (count > maxCombinations && mn > 1) {\r\n mn--;\r\n count = Math.pow(mn, len);\r\n }\r\n\r\n var numbers = lineSteppings.map(ls => 0 as number);\r\n var combinations = new Map();\r\n\r\n for (var i = 1; i < count; i++) {\r\n\r\n var sum = 0;\r\n var comb = numbers.slice();\r\n var curCount = 0;\r\n\r\n for (var j = 0; j < len; j++) {\r\n var num = comb[j] = Math.floor((i / Math.pow(mn, j)) % mn);\r\n sum += lineSteppings[j] * num;\r\n curCount += num;\r\n }\r\n\r\n var pc = combinations.get(sum);\r\n\r\n if (!pc)\r\n combinations.set(sum, comb);\r\n else {\r\n var pCount = pc.reduce((acc, n) => acc + n);\r\n\r\n if (pCount < curCount)\r\n continue;\r\n if (pCount === curCount) {\r\n var ccs = comb.reduce((acc, n) => acc + Math.min(1, n), 0),\r\n pcs = pc.reduce((acc, n) => acc + Math.min(1, n), 0);\r\n\r\n if (pcs < ccs)\r\n continue;\r\n\r\n if (pcs === ccs) {\r\n for (var k = comb.length; k--;) {\r\n if (comb[k] > pc[k]) {\r\n combinations.set(sum, comb);\r\n break;\r\n }\r\n }\r\n }\r\n else\r\n combinations.set(sum, comb);\r\n }\r\n else\r\n combinations.set(sum, comb);\r\n }\r\n\r\n }\r\n\r\n var result: number[][] = [],\r\n maxLen = lineSteppings[len - 1] * (mn - 1);\r\n\r\n combinations.forEach((v, k) => {\r\n if (k < maxLen) {\r\n v.push(k);\r\n result.push(v);\r\n }\r\n });\r\n\r\n result.sort((a, b) => a[len] - b[len]);\r\n\r\n return result;\r\n }\r\n\r\n /*\r\n * Binary search.\r\n * Returns the index of of the element in a sorted array or (-n-1) where n is the insertion point for the new element.\r\n * Parameters:\r\n * ar - A sorted array\r\n * el - An element to search for\r\n * compare_fn - A comparator function. The function takes two arguments: (a, b) and returns:\r\n * a negative number if a is less than b;\r\n * 0 if a is equal to b;\r\n * a positive number of a is greater than b.\r\n * The array may contain duplicate elements. If there are more than one equal elements in the array, \r\n * the returned value can be the index of any one of the equal elements.\r\n */\r\n export function binarySearch(ar: T[], el: T, compare_fn: (a: T, b: T) => number) {\r\n var m = 0,\r\n n = ar.length - 1;\r\n\r\n while (m <= n) {\r\n var k = (n + m) >> 1,\r\n cmp = compare_fn(el, ar[k]);\r\n if (cmp > 0) {\r\n m = k + 1;\r\n } else if (cmp < 0) {\r\n n = k - 1;\r\n } else {\r\n return k;\r\n }\r\n }\r\n return -m - 1;\r\n }\r\n\r\n export function binarySearchClosestIndex(ar: T[], value: number, fn: (T) => number) {\r\n if (!ar || !ar.length)\r\n return -1;\r\n\r\n if (ar.length === 1 || value <= fn(ar[0]))\r\n return 0;\r\n\r\n if (value >= fn(ar[ar.length - 1]))\r\n return ar.length - 1;\r\n\r\n let m = 0,\r\n n = ar.length - 1;\r\n\r\n for (var k = (m + n) >> 1; m < n - 1; k = (m + n) >> 1) {\r\n if (value < fn(ar[k]))\r\n n = k;\r\n else\r\n m = k;\r\n }\r\n\r\n return value - fn(ar[m]) <= fn(ar[n]) - value ? m : n;\r\n }\r\n\r\n export function binarySearchClosestArrayIndex(ar: number[], value: number) {\r\n if (!ar || !ar.length)\r\n return -1;\r\n\r\n if (ar.length === 1 || value <= ar[0])\r\n return 0;\r\n\r\n if (value >= ar[ar.length - 1])\r\n return ar.length - 1;\r\n\r\n let m = 0;\r\n let n = ar.length - 1;\r\n\r\n for (var middle = (m + n) >> 1; m < n - 1; middle = (m + n) >> 1) {\r\n if (value < ar[middle])\r\n n = middle;\r\n else\r\n m = middle;\r\n }\r\n\r\n return value - ar[m] <= ar[n] - value ? m : n;\r\n }\r\n\r\n export function distinctOnSorted(ar: T[], compare_fn: (a: T, b: T) => number) {\r\n return ar.filter((el, index) => {\r\n return binarySearch(ar, el, compare_fn) === index;\r\n });\r\n }\r\n\r\n export function distinct(ar: T[], compare_fn: (a: T, b: T) => number) {\r\n return distinctOnSorted(ar.sort(compare_fn), compare_fn);\r\n }\r\n}\r\n\r\n(() => {\r\n if(window.keepDefaultConsole)\r\n return;\r\n try {\r\n var sptConsole = ((consoleHolder: Console) => {\r\n var disabled = false,\r\n t = 0,\r\n errQueue = [],\r\n c = {\r\n SPTErrorLog: (msg: string) => {\r\n if (!disabled && msg) {\r\n errQueue.push(msg);\r\n if (t) {\r\n clearTimeout(t);\r\n t = 0;\r\n }\r\n t = setTimeout(() => {\r\n t = 0;\r\n if (!errQueue || !errQueue.length)\r\n return;\r\n disabled = true;\r\n var errs = errQueue.join(\"\\n\").replace(/http:\\/\\/|https:\\/\\/|<|>/g, '');\r\n errQueue = [];\r\n $.ajax({\r\n url: \"/StaticImages/LogClientError\",\r\n type: \"POST\",\r\n //dataType: \"html\",\r\n context: document.body,\r\n data: { errs: errs, source: window.location.pathname },\r\n //contentType: \"application/json\",\r\n success: (html) => { },\r\n error: (jqXHR, textStatus, errorThrown) => { }\r\n });\r\n //if(!DManager.errorMessageIsShown())\r\n // DManager.showErrorMessage(GeneralErrorMessages['GeneralError'] + \"

ERROR SOURCE: CLIENT - \" + GeneralErrorMessages['TryCtrlF5'] + \"

\");\r\n }, 10000) as any;\r\n }\r\n }\r\n };\r\n Object.keys(consoleHolder).forEach((k) => {\r\n if (typeof (consoleHolder[k]) === \"function\")\r\n c[k] = consoleHolder[k].bind(consoleHolder);\r\n else\r\n c[k] = consoleHolder[k];\r\n });\r\n\r\n c['error'] = function (message?: any, ...optionalParams: any[]) {\r\n c.SPTErrorLog(message && typeof (message) !== \"string\" ? JSON.stringify(message) : message);\r\n return consoleHolder.error.apply(consoleHolder, arguments);\r\n };\r\n\r\n window.addEventListener('error', (event: ErrorEvent) => {\r\n c.SPTErrorLog(\"\" + (event && event.error && event.error.stack ? event.error.stack : (event && event.error && event.error.message ? event.error.message : (event.error ? event.error : event))));\r\n });\r\n\r\n return c;\r\n })(window.console);\r\n\r\n var ua = window.navigator.userAgent;\r\n\r\n var msie = ua.indexOf(\"MSIE \");\r\n\r\n //if not internet explorer\r\n if (!(msie > 0 || !!ua.match(/Trident.*rv\\:11\\./) || window.isDebugMode)) {\r\n //redefine the old console\r\n (window).console = sptConsole;\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n})();\r\n\r\n//polyfill\r\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\r\nif (!Array.prototype.find) {\r\n Object.defineProperty(Array.prototype, 'find', {\r\n value: function (predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n\r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n\r\n // 5. Let k be 0.\r\n var k = 0;\r\n\r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return kValue.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return kValue;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n\r\n // 7. Return undefined.\r\n return undefined;\r\n },\r\n configurable: true,\r\n writable: true\r\n });\r\n}\r\n\r\nif (!Array.prototype.findIndex) {\r\n Object.defineProperty(Array.prototype, 'findIndex', {\r\n value: function (predicate) {\r\n // 1. Let O be ? ToObject(this value).\r\n if (this == null) {\r\n throw new TypeError('\"this\" is null or not defined');\r\n }\r\n\r\n var o = Object(this);\r\n\r\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\r\n var len = o.length >>> 0;\r\n\r\n // 3. If IsCallable(predicate) is false, throw a TypeError exception.\r\n if (typeof predicate !== 'function') {\r\n throw new TypeError('predicate must be a function');\r\n }\r\n\r\n // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.\r\n var thisArg = arguments[1];\r\n\r\n // 5. Let k be 0.\r\n var k = 0;\r\n\r\n // 6. Repeat, while k < len\r\n while (k < len) {\r\n // a. Let Pk be ! ToString(k).\r\n // b. Let kValue be ? Get(O, Pk).\r\n // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).\r\n // d. If testResult is true, return k.\r\n var kValue = o[k];\r\n if (predicate.call(thisArg, kValue, k, o)) {\r\n return k;\r\n }\r\n // e. Increase k by 1.\r\n k++;\r\n }\r\n\r\n // 7. Return -1.\r\n return -1;\r\n },\r\n configurable: true,\r\n writable: true\r\n });\r\n}\r\n\r\nif (!String.prototype.startsWith) {\r\n String.prototype.startsWith = function (searchString, position) {\r\n position = position || 0;\r\n return this.indexOf(searchString, position) === position;\r\n };\r\n}\r\n\r\nif (!String.prototype.endsWith) {\r\n String.prototype.endsWith = function(search, this_len) {\r\n if (this_len === undefined || this_len > this.length) {\r\n this_len = this.length;\r\n }\r\n return this.substring(this_len - search.length, this_len) === search;\r\n };\r\n}\r\n\r\n//ImageData() constructor pollyfill for ie\r\n(() => {\r\n try {\r\n new (window).ImageData(new Uint8ClampedArray([0, 0, 0, 0]), 1, 1);\r\n } catch (e) {\r\n function ImageDataPolyfill() {\r\n let args = [].slice.call(arguments) as any[], data;\r\n\r\n if (args.length < 2) {\r\n throw new TypeError(`Failed to construct 'ImageData': 2 arguments required, but only ${args.length} present.`);\r\n }\r\n\r\n if (args.length > 2) {\r\n data = args.shift();\r\n\r\n if (!(data instanceof Uint8ClampedArray)) {\r\n throw new TypeError(`Failed to construct 'ImageData': parameter 1 is not of type 'Uint8ClampedArray'`);\r\n }\r\n\r\n if (data.length !== 4 * args[0] * args[1]) {\r\n throw new Error(`Failed to construct 'ImageData': The input data byte length is not a multiple of (4 * width * height)`);\r\n }\r\n }\r\n\r\n const width = args[0],\r\n height = args[1],\r\n canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d'),\r\n imageData = ctx.createImageData(width, height);\r\n\r\n if (data)\r\n imageData.data.set(data);\r\n return imageData;\r\n };\r\n\r\n (window).ImageData = ImageDataPolyfill;\r\n }\r\n})();","interface CanvasRenderingContext2D {\r\n fill(path: Path2D, fillRule?: CanvasFillRule): void;\r\n fill(path?: Path2D, fillRule?: CanvasFillRule): void;\r\n}\r\n\r\nmodule CanvasDrawing {\r\n import Point2D = MapDrawing.Point2D;\r\n\r\n export var path2DSupported: boolean = (() => {\r\n try {\r\n return !!window[\"Path2D\"] && typeof (new Path2D()).moveTo === \"function\";\r\n } catch (e) {\r\n }\r\n return false;\r\n })();\r\n\r\n export interface IStyle {\r\n fillStyle: string | CanvasGradient | CanvasPattern | MapDrawing.Color;\r\n strokeStyle: string | CanvasGradient | CanvasPattern | MapDrawing.Color;\r\n lineWidth: number;\r\n\r\n apply(ctx: CanvasRenderingContext2D, vp: Viewport);\r\n applyToContext(ctx: CanvasRenderingContext2D, scaleFactor: number);\r\n }\r\n\r\n export class Style implements IStyle {\r\n //private static uuid = 1;\r\n\r\n //uid: number;\r\n\r\n fillStyle: string | CanvasGradient | CanvasPattern | MapDrawing.Color;\r\n strokeStyle: string | CanvasGradient | CanvasPattern | MapDrawing.Color;\r\n lineWidth: number;\r\n lineDash: number[];\r\n\r\n constructor(fillStyle?: string | CanvasGradient | CanvasPattern | MapDrawing.Color,\r\n strokeStyle?: string | CanvasGradient | CanvasPattern | MapDrawing.Color, lineWidth: number = 1, lineDash: number[] = []) {\r\n //this.uid = Style.uuid++;\r\n this.fillStyle = fillStyle || null;\r\n this.strokeStyle = strokeStyle || null;\r\n this.lineWidth = lineWidth;\r\n this.lineDash = lineDash;\r\n }\r\n\r\n apply(ctx: CanvasRenderingContext2D, vp: Viewport) {\r\n if (this.strokeStyle) {\r\n let scaleFactor = vp.scaleFactor;\r\n ctx.lineWidth = this.lineWidth / scaleFactor;\r\n if (ctx.setLineDash)\r\n ctx.setLineDash(this.lineDash.map(v => v / scaleFactor));\r\n ctx.strokeStyle = Style.getCanvasStyle(this.strokeStyle);\r\n ctx.lineCap = \"round\";\r\n ctx.lineJoin = \"round\";\r\n }\r\n if (this.fillStyle)\r\n ctx.fillStyle = Style.getCanvasStyle(this.fillStyle);\r\n }\r\n\r\n applyToContext(ctx: CanvasRenderingContext2D, scaleFactor: number) {\r\n if (this.strokeStyle) {\r\n ctx.lineWidth = this.lineWidth / scaleFactor;\r\n if (ctx.setLineDash)\r\n ctx.setLineDash(this.lineDash.map(v => v / scaleFactor));\r\n ctx.strokeStyle = Style.getCanvasStyle(this.strokeStyle);\r\n }\r\n if (this.fillStyle)\r\n ctx.fillStyle = Style.getCanvasStyle(this.fillStyle);\r\n }\r\n\r\n static getCanvasStyle(style: string | CanvasGradient | CanvasPattern | MapDrawing.Color):\r\n string | CanvasGradient | CanvasPattern {\r\n if (!style) {\r\n return null;\r\n } else if (style instanceof MapDrawing.Color) {\r\n return style.toStringRgba();\r\n } else {\r\n return style;\r\n }\r\n }\r\n\r\n static createHatchPattern(color: string | MapDrawing.Color = \"#000000\", angle: number = 45, size: number = 32, offset: number = 16, lineWidth: number = 2) : HTMLCanvasElement {\r\n \r\n var p = document.createElement(\"canvas\") as HTMLCanvasElement;\r\n\r\n var s2 = size * 0.5;\r\n\r\n p.width = size;\r\n p.height = size;\r\n\r\n var ctx = p.getContext('2d');\r\n \r\n let len = Math.sqrt(size * size * 2),\r\n len2 = len * 0.5,\r\n min = s2 - len2,\r\n max = s2 + len2;\r\n\r\n if (color instanceof MapDrawing.Color)\r\n ctx.strokeStyle = color.toStringRgba();\r\n else\r\n ctx.strokeStyle = color;\r\n\r\n ctx.translate(s2, s2);\r\n ctx.rotate(angle * Math.PI / 180);\r\n ctx.translate(-s2, -s2);\r\n \r\n ctx.beginPath();\r\n\r\n for (let x = min; x <= max; x += offset) {\r\n ctx.moveTo(x, min);\r\n ctx.lineTo(x, max);\r\n }\r\n\r\n ctx.stroke();\r\n\r\n return p;\r\n }\r\n }\r\n\r\n export interface IShape {\r\n id?: string;\r\n style: IStyle;\r\n children: IShape[];\r\n parent: IShape;\r\n transform: MapDrawing.Transformation3D;\r\n visible: boolean;\r\n draw(ctx: CanvasRenderingContext2D, vp: Viewport);\r\n update();\r\n clearChildren();\r\n removeChild(child: IShape);\r\n removeFromParent();\r\n add(shape: IShape);\r\n traverse(fn: (shape: IShape) => boolean);\r\n }\r\n\r\n export class ShapeObject implements IShape {\r\n id: string;\r\n style: IStyle = null;\r\n private _children: IShape[] = [];\r\n parent: IShape = null;\r\n visible = true;\r\n private _bounds: MapDrawing.Bounds2D = null;\r\n transform: MapDrawing.Transformation3D = MapDrawing.Transformation3D.Identity;\r\n\r\n get fill() {\r\n return !!(this.style && this.style.fillStyle);\r\n }\r\n\r\n get stroke() {\r\n return !!(this.style && this.style.strokeStyle);\r\n }\r\n\r\n get bounds() {\r\n var bds = this._bounds;\r\n if (bds == null)\r\n bds = this._bounds = this.calculateBounds();\r\n return bds;\r\n }\r\n\r\n set bounds(v: MapDrawing.Bounds2D) {\r\n this._bounds = v;\r\n }\r\n\r\n update() {\r\n this._bounds = null;\r\n }\r\n\r\n calculateBounds(): MapDrawing.Bounds2D {\r\n //need to override\r\n return null;\r\n }\r\n\r\n get children() {\r\n return this._children;\r\n }\r\n\r\n set children(v: IShape[]) {\r\n this.clearChildren();\r\n if (v && v.length)\r\n v.forEach(this.add.bind(this));\r\n }\r\n\r\n private isVisible(vp: Viewport) {\r\n return this.visible && !!this.style && (this.bounds == null || this.bounds.Overlaps(vp.bounds));\r\n }\r\n\r\n prepareAndDraw(ctx: CanvasRenderingContext2D, vp: Viewport) {\r\n this.style.apply(ctx, vp);\r\n }\r\n\r\n draw(ctx: CanvasRenderingContext2D, vp: Viewport) {\r\n\r\n ctx.save();\r\n\r\n this.transform.transformCanvas(ctx);\r\n\r\n if (this.isVisible(vp))\r\n this.prepareAndDraw(ctx, vp);\r\n\r\n this.children.forEach(child => child.draw(ctx, vp));\r\n\r\n ctx.restore();\r\n }\r\n\r\n add(shape: IShape) {\r\n shape.parent = this;\r\n this.children.push(shape);\r\n }\r\n\r\n clearChildren(): void {\r\n if (this.children.length)\r\n this.children.splice(0, this.children.length).forEach(child => {\r\n child.parent = null;\r\n });\r\n }\r\n\r\n removeChild(child: IShape): void {\r\n this.children = this.children.filter(c => c !== child);\r\n }\r\n\r\n removeFromParent(): void {\r\n if (this.parent)\r\n this.parent.removeChild(this);\r\n this.parent = null;\r\n }\r\n\r\n traverse(fn: (shape: IShape) => boolean): void {\r\n if (!fn(this))\r\n return;\r\n\r\n if (this.children)\r\n this.children.forEach(child => { child.traverse(fn); });\r\n }\r\n }\r\n\r\n export class ShapePolygon extends ShapeObject {\r\n\r\n closed: boolean = true;\r\n points: Point2D[] = [];\r\n private path: Path2D;\r\n\r\n constructor(pts?: Point2D[], style?: IStyle, closed: boolean = true) {\r\n super();\r\n this.closed = closed;\r\n if (pts && pts.length)\r\n this.points = pts;\r\n if (style)\r\n this.style = style;\r\n }\r\n \r\n prepareAndDraw(context: CanvasRenderingContext2D, vp: Viewport) {\r\n super.prepareAndDraw(context, vp);\r\n\r\n let ctx: CanvasRenderingContext2D | Path2D;\r\n\r\n context.beginPath();\r\n\r\n if (path2DSupported) {\r\n if (this.path) {\r\n if (this.fill)\r\n context.fill(this.path);\r\n if (this.stroke)\r\n context.stroke(this.path);\r\n return;\r\n } else\r\n ctx = this.path = new Path2D();\r\n } else {\r\n ctx = context;\r\n }\r\n\r\n let pts = this.points;\r\n if (pts && pts.length > 1) {\r\n\r\n let p0 = pts[0];\r\n\r\n ctx.moveTo(p0.x, p0.y);\r\n\r\n for (var i = 1, j = pts.length; i < j; i++) {\r\n let p = pts[i];\r\n ctx.lineTo(p.x, p.y);\r\n }\r\n\r\n if (this.closed)\r\n ctx.closePath();\r\n }\r\n \r\n if (this.fill)\r\n context.fill(this.path);\r\n if (this.stroke)\r\n context.stroke(this.path);\r\n }\r\n\r\n calculateBounds(): MapDrawing.Bounds2D {\r\n return MapDrawing.Bounds2D.FromPoints(this.points);\r\n }\r\n\r\n update() {\r\n super.update();\r\n this.path = null;\r\n }\r\n }\r\n\r\n export class ShapeLine extends ShapePolygon {\r\n //start: Point2D = new Point2D();\r\n //end: Point2D = new Point2D();\r\n //width: number = 1;\r\n\r\n constructor(start: Point2D, end: Point2D, width?: number, style?: IStyle) {\r\n super(null, style);\r\n if (width > 0) {\r\n var dirRight = end.sub(start).GetNormalized().RightHandNormal().mul(width * 0.5);\r\n this.closed = true;\r\n this.points = [start.add(dirRight), end.add(dirRight), end.sub(dirRight), start.sub(dirRight)];\r\n } else {\r\n this.closed = false;\r\n this.points = [start, end];\r\n }\r\n }\r\n }\r\n \r\n export class ShapeCircle extends ShapeObject {\r\n origin: Point2D = new Point2D();\r\n radius: number = 1;\r\n\r\n constructor(origin: Point2D, radius: number, style?: IStyle) {\r\n super();\r\n this.origin = origin;\r\n this.radius = +radius;\r\n if (style)\r\n this.style = style;\r\n }\r\n\r\n prepareAndDraw(context: CanvasRenderingContext2D, vp: Viewport) {\r\n super.prepareAndDraw(context, vp);\r\n \r\n context.beginPath();\r\n\r\n context.arc(this.origin.x, this.origin.y, this.radius, 0, 2 * Math.PI);\r\n \r\n if (this.fill)\r\n context.fill();\r\n if (this.stroke)\r\n context.stroke();\r\n }\r\n\r\n calculateBounds(): MapDrawing.Bounds2D {\r\n var w = this.radius * 2;\r\n return MapDrawing.Bounds2D.FromCenterSize(this.origin, w, w);\r\n }\r\n\r\n update() {\r\n super.update();\r\n }\r\n }\r\n\r\n export class Viewport {\r\n bounds: MapDrawing.Bounds2D;\r\n canvasWidth: number;\r\n canvasHeight: number;\r\n\r\n constructor(canvasWidth: number, canvasHeight: number, bounds?: MapDrawing.Bounds2D) {\r\n this.bounds = bounds || new MapDrawing.Bounds2D(new Point2D(0, 0), new Point2D(+canvasWidth, +canvasHeight));\r\n this.updateCanvasSize(canvasWidth, canvasHeight);\r\n }\r\n\r\n updateCanvasSize(canvasWidth: number, canvasHeight: number) {\r\n this.canvasWidth = canvasWidth;\r\n this.canvasHeight = canvasHeight;\r\n }\r\n\r\n set(x: number, y: number, width: number, height: number) {\r\n this.bounds = MapDrawing.Bounds2D.FromCenterSize(new Point2D(x, y), width, height);\r\n }\r\n\r\n get x() {\r\n return this.bounds.Center.x;\r\n }\r\n\r\n set x(v: number) {\r\n this.translate(v - this.x, 0);\r\n }\r\n\r\n get y() {\r\n return this.bounds.Center.y;\r\n }\r\n\r\n set y(v: number) {\r\n this.translate(v - this.y, 0);\r\n }\r\n\r\n get width() {\r\n return this.bounds.Delta.x;\r\n }\r\n\r\n set width(v: number) {\r\n this.set(this.x, this.y, v, this.height);\r\n }\r\n\r\n get height() {\r\n return this.bounds.Delta.y;\r\n }\r\n\r\n set height(v: number) {\r\n this.set(this.x, this.y, this.width, v);\r\n }\r\n\r\n translate(x: number, y: number) {\r\n this.offset(new Point2D(x, y));\r\n }\r\n\r\n offset(v: Point2D) {\r\n let bd = this.bounds;\r\n bd.Min = bd.Min.add(v);\r\n bd.Max = bd.Max.add(v);\r\n }\r\n\r\n scale(sx: number, sy: number) {\r\n let bd = this.bounds,\r\n c = bd.Center,\r\n d = bd.Delta.multiply(new Point2D(sx, sy));\r\n\r\n this.bounds = MapDrawing.Bounds2D.FromCenterDimension(c, d);\r\n }\r\n\r\n zoom(z: number) {\r\n let bd = this.bounds,\r\n c = bd.Center,\r\n d = bd.Delta.mul(z);\r\n\r\n this.bounds = MapDrawing.Bounds2D.FromCenterDimension(c, d);\r\n }\r\n\r\n get scaleFactor(): number {\r\n let canvasWidth = this.canvasWidth,\r\n canvasHeight = this.canvasHeight,\r\n bd = this.bounds,\r\n delta = bd.Delta,\r\n w = delta.x,\r\n h = delta.y;\r\n\r\n return Math.min(canvasWidth / w, canvasHeight / h);\r\n }\r\n\r\n setTransform(ctx: CanvasRenderingContext2D) {\r\n\r\n let canvasWidth = this.canvasWidth,\r\n canvasHeight = this.canvasHeight,\r\n bd = this.bounds,\r\n min = bd.Min,\r\n delta = bd.Delta,\r\n w = delta.x,\r\n h = delta.y,\r\n scale = Math.min(canvasWidth / w, canvasHeight / h),\r\n offx = (canvasWidth / scale - w) * 0.5,\r\n offy = (canvasHeight / scale - h) * 0.5;\r\n \r\n ctx.setTransform(1, 0, 0, -1, 0, canvasHeight);\r\n\r\n ctx.scale(scale, scale);\r\n\r\n ctx.translate(offx - min.x, offy - min.y);\r\n }\r\n\r\n }\r\n\r\n export class ShapeModel extends ShapeObject {\r\n\r\n constructor(drawer?: Drawer) {\r\n super();\r\n this._drawer = drawer || null;\r\n }\r\n\r\n enabled: boolean = true;\r\n\r\n _drawer: Drawer;\r\n\r\n get drawer(): Drawer {\r\n return this._drawer;\r\n }\r\n\r\n set drawer(value: Drawer) {\r\n this._drawer = value;\r\n if (value)\r\n value.model = this;\r\n }\r\n\r\n removeFromParent(): void {\r\n if (this.drawer)\r\n this.drawer.model = null;\r\n this.drawer = null;\r\n }\r\n }\r\n\r\n export class Drawer {\r\n\r\n static GetInstance(canvasWidth: number, canvasHeight: number, className?: string, id?: string): Drawer {\r\n \r\n var canvas = document.createElement('canvas') as HTMLCanvasElement;\r\n\r\n canvas.id = id || \"DrawerCanvas_\" + spt.Utils.GenerateGuid();\r\n canvas.width = canvasWidth;\r\n canvas.height = canvasHeight;\r\n if (className)\r\n canvas.className = className;\r\n \r\n return new Drawer(canvas);\r\n }\r\n\r\n constructor(canvas: HTMLCanvasElement) {\r\n this.viewport = new Viewport(+canvas.width, +canvas.height);\r\n this.model = new ShapeModel(this);\r\n this.canvas = canvas;\r\n }\r\n \r\n private _canvas: HTMLCanvasElement;\r\n\r\n get canvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n\r\n set canvas(value: HTMLCanvasElement) {\r\n this._canvas = value;\r\n this.resetViewport();\r\n if (value) {\r\n this.context = value.getContext('2d');\r\n //this.context.imageSmoothingEnabled = true;\r\n }\r\n }\r\n\r\n viewport: Viewport;\r\n model: ShapeModel;\r\n context: CanvasRenderingContext2D;\r\n\r\n resetViewport() {\r\n if (!this.canvas)\r\n return;\r\n let canvas = this.canvas;\r\n this.viewport.updateCanvasSize(+canvas.width, +canvas.height);\r\n }\r\n\r\n setSize(w: number, h: number) {\r\n this.canvas.width = w;\r\n this.canvas.height = h;\r\n this.resetViewport();\r\n }\r\n\r\n draw(model?: ShapeModel) {\r\n\r\n if (!model)\r\n model = this.model;\r\n\r\n if (!this.canvas || !this.viewport || !model || !model.enabled)\r\n return;\r\n\r\n let canvas = this.canvas,\r\n w = canvas.width,\r\n h = canvas.height,\r\n ctx = this.context,\r\n vp = this.viewport;\r\n\r\n ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n\r\n ctx.clearRect(0, 0, w, h);\r\n\r\n vp.setTransform(ctx);\r\n\r\n model.draw(ctx, vp);\r\n }\r\n\r\n getImageData() {\r\n var canvas = this.canvas,\r\n w = canvas.width,\r\n h = canvas.height,\r\n ctx = this.context;\r\n return ctx.getImageData(0, 0, w, h);\r\n }\r\n\r\n puImageDate(imgData: ImageData) {\r\n var ctx = this.context;\r\n ctx.putImageData(imgData, 0, 0);\r\n }\r\n\r\n toDataURL(type = \"image/png\") {\r\n return this.canvas.toDataURL(type);\r\n }\r\n\r\n copyToImage() {\r\n var img = document.createElement(\"img\") as HTMLImageElement;\r\n\r\n img.src = this.toDataURL();\r\n\r\n return img;\r\n }\r\n\r\n appendTo(parent: T): void {\r\n parent.appendChild(this.canvas);\r\n }\r\n }\r\n}","module spt.ThreeJs.utils {\r\n\r\n var utilVec31Search = new THREE.Vector3();\r\n var utilVec32Search = new THREE.Vector3();\r\n var utilVec3Center = new THREE.Vector3();\r\n var utilVec3Target = new THREE.Vector3();\r\n var utilVec3Normal = new THREE.Vector3();\r\n var utilVec3Size = new THREE.Vector3();\r\n var utilMatrix4 = new THREE.Matrix4();\r\n var utilSphere = new THREE.Sphere();\r\n var utilBox3 = new THREE.Box3();\r\n var utilRay = new THREE.Ray();\r\n var utilPlane = new THREE.Plane();\r\n\r\n export interface IVertex2 {\r\n x: number;\r\n y: number;\r\n }\r\n\r\n export interface edgeIntersectResult {\r\n id: string;\r\n bounds: THREE.Box3;\r\n direction: THREE.Vector3;\r\n center: THREE.Vector3;\r\n size: THREE.Vector3;\r\n target: THREE.Vector3;\r\n }\r\n\r\n export interface IVertex2DataJson {\r\n array: number[];\r\n type: string;\r\n itemSize: number | string;\r\n }\r\n\r\n export interface IBufferGeometryAttributesJson {\r\n index?: IVertex2DataJson;\r\n position: IVertex2DataJson;\r\n normal?: IVertex2DataJson;\r\n uv?: IVertex2DataJson;\r\n color?: IVertex2DataJson;\r\n }\r\n\r\n export interface IDisposableThreeJsObject {\r\n geometry?: THREE.Geometry | THREE.BufferGeometry;\r\n children?: IDisposableThreeJsObject[];\r\n material?: THREE.Material | THREE.Material[] | THREE.MultiMaterial;\r\n texture?: THREE.Texture;\r\n dispose?: () => void;\r\n }\r\n\r\n export function ConvertThreeJsObject(obj: any): any {\r\n var converter = new JsonConverter();\r\n var result = converter.convertThreeJsObject(obj);\r\n converter.dispose();\r\n return result;\r\n }\r\n\r\n export var applyPlaneRotationToObject = (() => {\r\n var vFrom = new THREE.Vector3(0, 0, 1),\r\n EPS = 0.999999;\r\n return (plane: THREE.Plane, obj: THREE.Object3D) => {\r\n var vTo = plane.normal;\r\n if (vTo.z >= EPS) {\r\n obj.quaternion.set(0, 0, 0, 1);\r\n return;\r\n }\r\n\r\n obj.quaternion.setFromUnitVectors(vFrom, vTo);\r\n };\r\n })();\r\n\r\n export var getBoxIntersections = (() => {\r\n var box1 = new THREE.Box3(),\r\n v1 = new THREE.Vector3();\r\n\r\n return (searchBox: THREE.Box3, octree: spt.ThreeJs.utils.Octree) => {\r\n var radius = searchBox.getSize(v1).setZ(0).length() * 0.5;\r\n searchBox.getCenter(v1);\r\n var octreeObjects = octree.search(v1, radius, false),\r\n selected: THREE.Object3D[] = [];\r\n for (var i = octreeObjects.length; i--;) {\r\n var octreeObject = octreeObjects[i],\r\n object = octreeObject.object,\r\n tbox = box1.copy(object.geometry.boundingBox).applyMatrix4(object.matrixWorld);\r\n //if (object.parent)\r\n // tbox.applyMatrix4(object.parent.matrixWorld);\r\n if (searchBox.intersectsBox(tbox))\r\n selected.push(object);\r\n }\r\n return selected.filter((inst) => {\r\n if (inst instanceof LS.Client3DEditor.ClientObjectInstance && inst.clientObject.hasNoSimpleGeometry)\r\n return BoxisIntersectingMesh(searchBox, inst);\r\n return true;\r\n });\r\n };\r\n })();\r\n\r\n export function BoxisIntersectingMesh(box: THREE.Box3, mesh: THREE.Mesh) {\r\n var isIntersecting = false;\r\n\r\n traverseMeshTriangles(mesh, (pt1, pt2, pt3) => {\r\n if (BoxisIntersectingTriangle(pt1, pt2, pt3, box)) {\r\n isIntersecting = true;\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n return isIntersecting;\r\n }\r\n\r\n export class TestVolume {\r\n private static EPS = 0.999999;\r\n\r\n constructor(points?: THREE.Vector3[], normals?: THREE.Vector3[], testAxis?: THREE.Vector3[], crossAxis?: THREE.Vector3[]) {\r\n this.points = points || [];\r\n this.normals = normals || [];\r\n this.testAxis = testAxis || [];\r\n this.crossAxis = crossAxis || [];\r\n }\r\n\r\n copy(other: TestVolume): this {\r\n this.points = other.points.map(p => p.clone());\r\n this.normals = other.normals.map(p => p.clone());\r\n this.testAxis = other.testAxis.map(p => p.clone());\r\n this.crossAxis = other.crossAxis.map(p => p.clone());\r\n this.boundingBox.copy(other.boundingBox);\r\n this.boundingSphere.copy(other.boundingSphere);\r\n\r\n return this;\r\n }\r\n\r\n calculate(raycaster: THREE.Raycaster, camera: THREE.PerspectiveCamera | THREE.OrthographicCamera, view2D?: THREE.Box2, axisToTest?: THREE.Vector3[]): this {\r\n if (!raycaster || !camera)\r\n return this;\r\n\r\n if (view2D) {\r\n var vSize = view2D.getSize(new THREE.Vector2());\r\n if (vSize.x <= 0 || vSize.y <= 0) {\r\n var vCenter = view2D.getCenter(new THREE.Vector2());\r\n vSize.set(Math.max(0.0001, vSize.x / 2), Math.max(0.0001, vSize.y / 2));\r\n view2D = new THREE.Box2(vCenter.clone().sub(vSize), vCenter.clone().add(vSize));\r\n }\r\n }\r\n\r\n var near = camera.near,\r\n far = camera.far,\r\n v2D = new THREE.Vector2(),\r\n directions: THREE.Vector3[] = [],\r\n origins: THREE.Vector3[] = [],\r\n min = view2D ? view2D.min : new THREE.Vector2(-1, -1),\r\n max = view2D ? view2D.max : new THREE.Vector2(1, 1);\r\n\r\n raycaster.setFromCamera(min, camera);\r\n origins.push(raycaster.ray.origin.clone());\r\n directions.push(raycaster.ray.direction.clone());\r\n\r\n raycaster.setFromCamera(v2D.copy(min).setX(max.x), camera);\r\n origins.push(raycaster.ray.origin.clone());\r\n directions.push(raycaster.ray.direction.clone());\r\n\r\n raycaster.setFromCamera(max, camera);\r\n origins.push(raycaster.ray.origin.clone());\r\n directions.push(raycaster.ray.direction.clone());\r\n\r\n raycaster.setFromCamera(v2D.copy(min).setY(max.y), camera);\r\n origins.push(raycaster.ray.origin.clone());\r\n directions.push(raycaster.ray.direction.clone());\r\n\r\n var v0 = origins[0].clone().add(directions[0]),\r\n v01 = origins[1].clone().add(directions[1]).sub(v0),\r\n v03 = origins[3].clone().add(directions[3]).sub(v0);\r\n\r\n if (v01.lengthSq() <= 0 || v03.lengthSq() <= 0)\r\n return this;\r\n\r\n v01.normalize();\r\n v03.normalize();\r\n\r\n if ((camera).isOrthographicCamera)\r\n this.normals = [v01, v03, v01.clone().cross(v03).normalize()];\r\n else {\r\n this.normals = [\r\n //v01,\r\n //v03,\r\n //v01.clone().cross(v03).normalize(),\r\n directions[0].clone().cross(directions[1]).normalize(),\r\n directions[1].clone().cross(directions[2]).normalize(),\r\n directions[2].clone().cross(directions[3]).normalize(),\r\n directions[3].clone().cross(directions[0]).normalize()\r\n ];\r\n\r\n //this.normals = normals.concat(directions.filter(d => normals.every(n => Math.abs(d.dot(n)) < TestVolume.EPS)));\r\n }\r\n\r\n\r\n var points = this.points = [\r\n directions[0].clone().multiplyScalar(near).add(origins[0]),\r\n directions[0].clone().multiplyScalar(far).add(origins[0]),\r\n directions[1].clone().multiplyScalar(near).add(origins[1]),\r\n directions[1].clone().multiplyScalar(far).add(origins[1]),\r\n directions[2].clone().multiplyScalar(near).add(origins[2]),\r\n directions[2].clone().multiplyScalar(far).add(origins[2]),\r\n directions[3].clone().multiplyScalar(near).add(origins[3]),\r\n directions[3].clone().multiplyScalar(far).add(origins[3])\r\n ];\r\n\r\n this.boundingBox.setFromPoints(points).getBoundingSphere(this.boundingSphere);\r\n\r\n return this.setTestAxis(axisToTest);\r\n }\r\n\r\n searchOctree(octree: spt.ThreeJs.utils.Octree): spt.ThreeJs.utils.OctreeObjectData[] {\r\n var node = octree.root,\r\n objects = ([]).concat(node.objects) as spt.ThreeJs.utils.OctreeObjectData[];\r\n\r\n // search nodes\r\n for (var i = 0, l = node.nodesIndices.length; i < l; i++) {\r\n objects = this.searchOctreeNode(node.nodesByIndex[node.nodesIndices[i]], objects);\r\n }\r\n\r\n return objects;\r\n }\r\n\r\n private searchOctreeNode(node: spt.ThreeJs.utils.OctreeNode, objects: spt.ThreeJs.utils.OctreeObjectData[]): spt.ThreeJs.utils.OctreeObjectData[] {\r\n if (!this.testOctreeNodeForSeparationAxis(node)) {\r\n // gather objects\r\n objects = objects.concat(node.objects);\r\n\r\n // search subtree\r\n for (var i = 0, l = node.nodesIndices.length; i < l; i++) {\r\n objects = this.searchOctreeNode(node.nodesByIndex[node.nodesIndices[i]], objects);\r\n }\r\n }\r\n\r\n return objects;\r\n }\r\n\r\n setTestAxis(axis?: THREE.Vector3[]): this {\r\n if (!axis)\r\n axis = [new THREE.Vector3(1, 0, 0), new THREE.Vector3(0, 1, 0), new THREE.Vector3(0, 0, 1)]; //bounding box axes\r\n var normals = this.normals,\r\n eps = TestVolume.EPS;\r\n for (var i = 0, l = normals.length; i < l; i++) {\r\n for (var j = i + 1; j < l; j++) {\r\n var d = normals[i].clone().cross(normals[j]);\r\n if (normals.every(n => Math.abs(d.dot(n)) < eps))\r\n normals.push(d);\r\n }\r\n }\r\n var testAxis = this.testAxis = axis.filter(bx => normals.every(ax => Math.abs(ax.dot(bx)) < eps));\r\n var tAxis = testAxis.concat(normals);\r\n this.crossAxis = [].concat.apply([], normals.map(ax => testAxis.map(bx => ax.clone().cross(bx).normalize()).filter(bx => tAxis.every(cx => Math.abs(cx.dot(bx)) < eps)))) as THREE.Vector3[];\r\n\r\n return this;\r\n }\r\n\r\n pointIsInside(p: THREE.Vector3) {\r\n return !this.checkAxis([p], this.normals);\r\n }\r\n\r\n //returns true if there is a separation on a given axis\r\n testOctreeNodeForSeparationAxis(node: spt.ThreeJs.utils.OctreeNode): boolean {\r\n return this.testForSeparationAxis(setPointsByOctreeNode(node, this._boxPts));\r\n }\r\n\r\n testEdgesForSeparationAxis(edges: THREE.Vector3[][]) {\r\n if (!edges || !edges.length)\r\n return true;\r\n return edges.some(e => this.testEdgeForSeparationAxis(e));\r\n }\r\n\r\n testEdgeForSeparationAxis(e: THREE.Vector3[]) {\r\n //SAT - separating axis theorem\r\n //test if we find a separating axis\r\n\r\n if (!e || e.length < 2)\r\n return true;\r\n\r\n var normals = this.normals,\r\n eps = TestVolume.EPS;\r\n\r\n if (this.checkAxis(e, normals))\r\n return true;\r\n\r\n var dir = e[1].clone().sub(e[0]).normalize(),\r\n n = Math.abs(dir.z) < 0.99 ? new THREE.Vector3(0, 0, 1).cross(dir).normalize() : new THREE.Vector3(1, 0, 0).cross(dir).normalize(),\r\n t = dir.clone().cross(n).normalize(),\r\n tAxis = [dir, n, t].filter(bx => normals.every(ax => Math.abs(ax.dot(bx)) < eps));\r\n\r\n if (this.checkAxis(e, tAxis))\r\n return true;\r\n\r\n var cAxis = [].concat.apply([], normals.map(ax => tAxis.map(bx => ax.clone().cross(bx).normalize()).filter(bx => tAxis.every(cx => Math.abs(cx.dot(bx)) < eps)))) as THREE.Vector3[];\r\n\r\n if (this.checkAxis(e, cAxis))\r\n return true;\r\n }\r\n\r\n //returns true if there is a separation on a given axis\r\n testMeshForSeparationAxis(mesh: THREE.Mesh): boolean {\r\n var box = this._box.copy(mesh.geometry.boundingBox).applyMatrix4(mesh.matrixWorld);//.translate(mesh.position);\r\n //if (mesh.parent)\r\n // box.applyMatrix4(mesh.parent.matrixWorld);\r\n return this.testBoxForSeparationAxis(box);\r\n }\r\n\r\n //returns axis if there is a separation on a given axis\r\n getMeshSeparationAxis(mesh: THREE.Mesh): THREE.Vector3 {\r\n var box = this._box.copy(mesh.geometry.boundingBox).translate(mesh.position);\r\n if (mesh.parent)\r\n box.applyMatrix4(mesh.parent.matrixWorld);\r\n return this.getBoxSeparationAxis(box);\r\n }\r\n\r\n //returns true if there is a separation on a given axis\r\n testBoxForSeparationAxis(box: THREE.Box3): boolean {\r\n return this.testForSeparationAxis(setPointsByBox(box, this._boxPts));\r\n }\r\n\r\n //returns true if there is a separation on a given axis\r\n testBufferGeometryForSeparationAxis(geo: THREE.BufferGeometry, m?: THREE.Matrix4): boolean {\r\n var normals = this.normals,\r\n pts: THREE.Vector3[] = [],\r\n positions = geo.getAttribute('position');\r\n\r\n if (!m)\r\n m = new THREE.Matrix4();\r\n\r\n for (var i = 0, l = positions.count; i < l; i++) {\r\n\r\n var x = positions.getX(i);\r\n var y = positions.getY(i);\r\n var z = positions.getZ(i);\r\n\r\n var p = new THREE.Vector3(x, y, z).applyMatrix4(m);\r\n\r\n pts.push(p);\r\n }\r\n\r\n if (this.checkAxis(pts, normals))\r\n return true;\r\n\r\n if (geo.index) {\r\n var indices = geo.index.array;\r\n\r\n for (var i = 0, il = geo.index.count; i < il; i += 3) {\r\n\r\n if (!this.testTriangleForSeparationAxis([pts[indices[i]], pts[indices[i + 1]], pts[indices[i + 2]]]))\r\n return false;\r\n\r\n }\r\n } else {\r\n for (var i = 0, il = pts.length; i < il; i += 3) {\r\n\r\n if (!this.testTriangleForSeparationAxis([pts[i], pts[i + 1], pts[i + 2]]))\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n testTriangleForSeparationAxis(pts: THREE.Vector3[]): boolean {\r\n var normals = this.normals;\r\n\r\n if (this.checkAxis(pts, normals))\r\n return true;\r\n\r\n var pA = pts[0],\r\n pB = pts[1],\r\n pC = pts[2];\r\n\r\n var n = this._v0.crossVectors(this._v1.subVectors(pC, pB), this._v2.subVectors(pA, pB));\r\n\r\n var nLengthSq = n.lengthSq();\r\n if (nLengthSq <= 0)\r\n return true;\r\n\r\n n.multiplyScalar(1 / Math.sqrt(nLengthSq));\r\n\r\n var textAxis = [n,\r\n this._v1.subVectors(pB, pA).cross(n),\r\n this._v2.subVectors(pC, pB).cross(n),\r\n this._v3.subVectors(pA, pC).cross(n)\r\n ];\r\n\r\n if (this.checkAxis(pts, textAxis))\r\n return true;\r\n\r\n var tAxis = textAxis.concat(normals),\r\n eps = TestVolume.EPS,\r\n crossAxis = [].concat.apply([], normals.map(ax => textAxis.map(bx => ax.clone().cross(bx).normalize()).filter(bx => tAxis.every(cx => Math.abs(cx.dot(bx)) < eps)))) as THREE.Vector3[];\r\n\r\n return this.checkAxis(pts, crossAxis);\r\n }\r\n\r\n //returns axis if there is a separation on a given axis\r\n getBoxSeparationAxis(box: THREE.Box3): THREE.Vector3 {\r\n return this.getSeparationAxis(setPointsByBox(box, this._boxPts));\r\n }\r\n\r\n //returns true if there is a separation on a given axis\r\n testForSeparationAxis(points: THREE.Vector3[]): boolean {\r\n //SAT - separating axis theorem\r\n //test if we find a separating axis\r\n\r\n return this.checkAxis(points, this.normals) || this.checkAxis(points, this.testAxis) || this.checkAxis(points, this.crossAxis);\r\n }\r\n\r\n //returns axis if there is a separation on a given axis\r\n getSeparationAxis(points: THREE.Vector3[]): THREE.Vector3 {\r\n //SAT - separating axis theorem\r\n //test if we find a separating axis\r\n\r\n return this.getAxis(points, this.normals) || this.getAxis(points, this.testAxis) || this.getAxis(points, this.crossAxis);\r\n }\r\n\r\n private checkAxis(points: THREE.Vector3[], axis: THREE.Vector3[]) {\r\n for (var i = 0, l = axis.length; i < l; i++) {\r\n if (isSeparatedOnAxis(this.points, points, axis[i]))\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private getAxis(points: THREE.Vector3[], axis: THREE.Vector3[]): THREE.Vector3 {\r\n for (var i = 0, l = axis.length; i < l; i++) {\r\n if (isSeparatedOnAxis(this.points, points, axis[i]))\r\n return axis[i];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getLastTestedBox() {\r\n return this._box;\r\n }\r\n\r\n getLastTestedBoxPoints() {\r\n return this._boxPts;\r\n }\r\n\r\n getAsBuffergeometry(): THREE.BufferGeometry {\r\n var points = this.points,\r\n pts = new Float32Array(points.length * 3),\r\n i = 0;\r\n points.forEach(p => {\r\n pts[i++] = p.x;\r\n pts[i++] = p.y;\r\n pts[i++] = p.z;\r\n });\r\n\r\n var geo = new THREE.BufferGeometry();\r\n geo.setAttribute('position', new THREE.BufferAttribute(pts, 3));\r\n geo.setIndex(new THREE.BufferAttribute(new Uint16Array([\r\n 0, 2, 6,\r\n 6, 2, 4,\r\n 1, 0, 6,\r\n 1, 6, 7,\r\n 7, 6, 4,\r\n 7, 4, 5,\r\n 2, 3, 4,\r\n 3, 5, 4,\r\n 1, 7, 3,\r\n 7, 5, 3,\r\n 0, 1, 2,\r\n 2, 1, 3\r\n ]), 1));\r\n\r\n return geo;\r\n }\r\n\r\n applyMatrix4(m: THREE.Matrix4): this {\r\n if (!m)\r\n return this;\r\n\r\n var mn = new THREE.Matrix3().getNormalMatrix(m);\r\n\r\n this.points.forEach(p => { p.applyMatrix4(m); });\r\n this.normals.forEach(p => { p.applyMatrix3(mn).normalize(); });\r\n this.testAxis.forEach(p => { p.applyMatrix3(mn).normalize(); });\r\n this.crossAxis.forEach(p => { p.applyMatrix3(mn).normalize(); });\r\n\r\n this.boundingBox.setFromPoints(this.points).getBoundingSphere(this.boundingSphere);\r\n return this;\r\n }\r\n\r\n points: THREE.Vector3[];\r\n normals: THREE.Vector3[];\r\n testAxis: THREE.Vector3[];\r\n crossAxis: THREE.Vector3[];\r\n boundingBox: THREE.Box3 = new THREE.Box3();\r\n boundingSphere: THREE.Sphere = new THREE.Sphere();\r\n private _v0: THREE.Vector3 = new THREE.Vector3();\r\n private _v1: THREE.Vector3 = new THREE.Vector3();\r\n private _v2: THREE.Vector3 = new THREE.Vector3();\r\n private _v3: THREE.Vector3 = new THREE.Vector3();\r\n private _v4: THREE.Vector3 = new THREE.Vector3();\r\n private _v5: THREE.Vector3 = new THREE.Vector3();\r\n private _box: THREE.Box3 = new THREE.Box3();\r\n private _boxPts: THREE.Vector3[] = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()];\r\n }\r\n\r\n export function getIntersectionsByViewVolume(viewVolume: TestVolume, octree: spt.ThreeJs.utils.Octree): THREE.Object3D[] {\r\n if (!viewVolume || !viewVolume.points.length || !viewVolume.normals.length)\r\n return [];\r\n\r\n //var octreeObjects = octree.search(viewVolume.boundingSphere.center, viewVolume.boundingSphere.radius, true),\r\n // selected: THREE.Object3D[] = [];\r\n\r\n var octreeObjects = viewVolume.searchOctree(octree),\r\n selected: THREE.Object3D[] = [];\r\n\r\n if (octreeObjects.length) {\r\n for (var i = octreeObjects.length; i--;) {\r\n var octreeObject = octreeObjects[i],\r\n object = octreeObject.object;\r\n\r\n if (!viewVolume.testMeshForSeparationAxis(object))\r\n selected.push(object);\r\n }\r\n }\r\n\r\n //debug\r\n //if ((window).Controller.Current.viewModel.shiftDown) {\r\n // //var scene = LS.Client3DEditor.Controller.Current.scene;\r\n // var scene = (window).Controller.Current.viewModel.currentInstance.instanceContainer;\r\n\r\n // var mat = new THREE.MeshBasicMaterial({ color: 0xFF0000 });\r\n // var mesh = new THREE.Mesh(viewVolume.getAsBuffergeometry(), mat);\r\n\r\n // scene.add(mesh);\r\n // var bx = new THREE.Box3(),\r\n // matGreen = new THREE.MeshBasicMaterial({ color: 0x00FF00 }),\r\n // matBlue = new THREE.MeshBasicMaterial({ color: 0x0000FF }),\r\n // geo2 = new THREE.BoxBufferGeometry(1, 1, 1);\r\n\r\n // octree.objects.forEach((mesh: THREE.Mesh) => {\r\n\r\n // var m = new THREE.Mesh(geo2, selected.indexOf(mesh) != -1 ? matGreen : matBlue);\r\n\r\n // bx.copy(mesh.geometry.boundingBox).translate(mesh.position);\r\n // if (mesh.parent)\r\n // bx.applyMatrix4(mesh.parent.matrixWorld);\r\n // bx.getSize(m.scale);\r\n // bx.getCenter(m.position);\r\n // m.position.z += 5;\r\n\r\n // scene.add(m);\r\n // });\r\n\r\n //}\r\n\r\n return selected.filter((inst) => {\r\n //if (inst instanceof LS.Client3DEditor.ClientObjectInstance) {\r\n // if ((inst.clientObject.userOptions & Client3DObectOptions.NoSimpleGeometry) !== 0) {\r\n // var geo = inst.geometry as THREE.Geometry;\r\n // if (geo.faces.some(f => BoxisIntersectingTriangle(new THREE.Vector3().addVectors(geo.vertices[f.a], inst.position), new THREE.Vector3().addVectors(geo.vertices[f.b], inst.position), new THREE.Vector3().addVectors(geo.vertices[f.c], inst.position), searchBox)))\r\n // return true;\r\n // return false;\r\n // }\r\n //}\r\n return true;\r\n });\r\n }\r\n\r\n function setPointsByOctreeNode(node: spt.ThreeJs.utils.OctreeNode, target: THREE.Vector3[]): THREE.Vector3[] {\r\n var left = node.left,\r\n right = node.right,\r\n bottom = node.bottom,\r\n top = node.top,\r\n back = node.back,\r\n front = node.front;\r\n\r\n target[0].set(left, bottom, back);\r\n target[1].set(right, bottom, back);\r\n target[2].set(right, top, back);\r\n target[3].set(left, top, back);\r\n target[4].set(left, bottom, front);\r\n target[5].set(right, bottom, front);\r\n target[6].set(right, top, front);\r\n target[7].set(left, top, front);\r\n\r\n return target;\r\n }\r\n\r\n function setPointsByBox(box: THREE.Box3, target: THREE.Vector3[]): THREE.Vector3[] {\r\n var min = box.min,\r\n max = box.max;\r\n\r\n target[0].set(min.x, min.y, min.z);\r\n target[1].set(max.x, min.y, min.z);\r\n target[2].set(max.x, max.y, min.z);\r\n target[3].set(min.x, max.y, min.z);\r\n target[4].set(min.x, min.y, max.z);\r\n target[5].set(max.x, min.y, max.z);\r\n target[6].set(max.x, max.y, max.z);\r\n target[7].set(min.x, max.y, max.z);\r\n\r\n return target;\r\n }\r\n\r\n export var projectDirectionAxis = (() => {\r\n var vx = new THREE.Vector3(),\r\n vy = new THREE.Vector3();\r\n return (direction: THREE.Vector3, xAxis: THREE.Vector3, yAxis: THREE.Vector3) => {\r\n var x = xAxis.dot(direction),\r\n y = yAxis.dot(direction);\r\n\r\n return x > 0 || y > 0 ? vx.copy(xAxis).multiplyScalar(x).add(vy.copy(yAxis).multiplyScalar(y)).clone().normalize() : new THREE.Vector3();\r\n };\r\n })();\r\n\r\n export function projectPointsOnAxis(points: THREE.Vector3[], axis: THREE.Vector3, result: number[]) {\r\n let min = Number.MAX_VALUE,\r\n max = -Number.MAX_VALUE,\r\n len = points.length;\r\n for (let i = 0; i < len; i++) {\r\n var d = points[i].dot(axis);\r\n if (d < min) { min = d; }\r\n if (d > max) { max = d; }\r\n }\r\n result[0] = min; result[1] = max;\r\n }\r\n\r\n export var isSeparatedOnAxis = (() => {\r\n var rangeA = [0, 0],\r\n rangeB = [0, 0],\r\n v = new THREE.Vector3();\r\n return (pointsA: THREE.Vector3[], pointsB: THREE.Vector3[], axis: THREE.Vector3, positionA?: THREE.Vector3, positionB?: THREE.Vector3) => {\r\n if (axis.lengthSq() <= 0)\r\n return false;\r\n projectPointsOnAxis(pointsA, axis, rangeA);\r\n projectPointsOnAxis(pointsB, axis, rangeB);\r\n\r\n //if points are local geometry, we use the position to apply an offset\r\n if (positionA && positionB) {\r\n var projectedOffset = v.copy(positionB).sub(positionA).dot(axis);\r\n\r\n rangeB[0] += projectedOffset;\r\n rangeB[1] += projectedOffset;\r\n }\r\n\r\n return rangeA[0] > rangeB[1] || rangeB[0] > rangeA[1];\r\n };\r\n })();\r\n\r\n export function testForSeparatingAxis(pointsA: THREE.Vector3[], pointsB: THREE.Vector3[], axisA: THREE.Vector3[], axisB?: THREE.Vector3[], crossAxis?: THREE.Vector3[], positionA?: THREE.Vector3, positionB?: THREE.Vector3): boolean {\r\n\r\n //SAT - separating axis theorem\r\n //test if we find a separating axis\r\n\r\n var l: number, j: number;\r\n\r\n for (j = 0, l = axisA.length; j < l; j++) {\r\n if (isSeparatedOnAxis(pointsA, pointsB, axisA[j], positionA, positionB))\r\n return true;\r\n }\r\n\r\n if (axisB) {\r\n for (j = 0, l = axisB.length; j < l; j++) {\r\n if (isSeparatedOnAxis(pointsA, pointsB, axisB[j], positionA, positionB))\r\n return true;\r\n }\r\n\r\n if (!crossAxis)\r\n crossAxis = [].concat.apply([], axisA.map(ax => axisB.filter(bx => Math.abs(ax.dot(bx)) < 1).map(bx => ax.clone().cross(bx).normalize()))) as THREE.Vector3[];\r\n\r\n for (j = 0, l = crossAxis.length; j < l; j++) {\r\n if (isSeparatedOnAxis(pointsA, pointsB, crossAxis[j], positionA, positionB))\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n export var GetClosestPointToLine = (() => {\r\n var vw = new THREE.Vector3(),\r\n vp = new THREE.Vector3();\r\n return (start: THREE.Vector3, end: THREE.Vector3, point: THREE.Vector3) => {\r\n vw.copy(end).sub(start);\r\n var l2 = vw.lengthSq();\r\n if (l2 === 0)\r\n return { p: vp.copy(start), l: 0 };\r\n vp.copy(point).sub(start);\r\n var t = vp.dot(vw) / l2;\r\n return t < 0 ? { p: vp.copy(start), l: 0 } : (t > 1 ? { p: vp.copy(end), l: 1 } : { p: vp.copy(start).add(vw.multiplyScalar(t)), l: t });\r\n };\r\n })();\r\n\r\n export var GetClosestPointOnLine = (() => {\r\n var se = new THREE.Vector3();\r\n return (start: THREE.Vector3, end: THREE.Vector3, point: THREE.Vector3, target: THREE.Vector3) => {\r\n se.subVectors(end, start);\r\n var l2 = se.lengthSq();\r\n if (l2 === 0)\r\n return target.copy(start);\r\n target.subVectors(point, start);\r\n var t = target.dot(se) / l2;\r\n return t < 0 ? target.copy(start) : (t > 1 ? target.copy(end) : target.copy(start).add(se.multiplyScalar(t)));\r\n };\r\n })();\r\n\r\n export function ray2DintersecsBox2D(origin: IVertex2, direction: IVertex2, lb: IVertex2, rt: IVertex2) {\r\n // r.dir is unit direction vector of ray\r\n var dirfracx = 1 / direction.x;\r\n var dirfracy = 1 / direction.y;\r\n // lb is the corner of AABB with minimal coordinates - left bottom, rt is maximal corner\r\n // r.org is origin of ray\r\n var t1 = (lb.x - origin.x) * dirfracx;\r\n var t2 = (rt.x - origin.x) * dirfracx;\r\n var t3 = (lb.y - origin.y) * dirfracy;\r\n var t4 = (rt.y - origin.y) * dirfracy;\r\n\r\n var tmin = Math.max(Math.max(Math.min(t1, t2), Math.min(t3, t4)));\r\n var tmax = Math.min(Math.min(Math.max(t1, t2), Math.max(t3, t4)));\r\n\r\n // if tmax < 0, ray (line) is intersecting AABB, but the whole AABB is behind us\r\n if (tmax < 0) {\r\n //t = tmax;\r\n return false;\r\n }\r\n\r\n // if tmin > tmax, ray doesn't intersect AABB\r\n if (tmin > tmax) {\r\n //t = tmax;\r\n return false;\r\n }\r\n\r\n //t = tmin;\r\n return true;\r\n }\r\n\r\n export var ray2DintersecsSegment = (() => {\r\n\r\n var v = new THREE.Vector2(),\r\n os = new THREE.Vector2(),\r\n oe = new THREE.Vector2();\r\n\r\n return (origin: IVertex2, direction: IVertex2, segmentStart: IVertex2, segmentEnd: IVertex2) => {\r\n v.set(-direction.y, direction.x);\r\n os.set(segmentStart.x - origin.x, segmentStart.y - origin.y);\r\n oe.set(segmentEnd.x - origin.x, segmentEnd.y - origin.y);\r\n if (os.dot(v) >= 0 === oe.dot(v) >= 0)\r\n return false;\r\n\r\n v.copy(segmentEnd).sub(segmentStart);\r\n\r\n var a = direction.x * v.y - direction.y * v.x;\r\n if (Math.abs(a) < 8.88178419700125E-16)\r\n return false;\r\n\r\n var f = 1 / a;\r\n if ((os.x * v.y - os.y * v.x) * f < 0)\r\n return false;\r\n\r\n var b = (os.x * direction.y - os.y * direction.x) * f;\r\n if (b < 0 || b > 1)\r\n return false;\r\n\r\n return true;\r\n };\r\n })();\r\n\r\n export var ray2DSegmentIntersection = (() => {\r\n\r\n var v = new THREE.Vector2(),\r\n os = new THREE.Vector2(),\r\n oe = new THREE.Vector2();\r\n\r\n return (origin: IVertex2, direction: IVertex2, segmentStart: IVertex2, segmentEnd: IVertex2) => {\r\n v.set(-direction.y, direction.x);\r\n os.set(segmentStart.x - origin.x, segmentStart.y - origin.y);\r\n oe.set(segmentEnd.x - origin.x, segmentEnd.y - origin.y);\r\n if (os.dot(v) >= 0 === oe.dot(v) >= 0)\r\n return null;\r\n\r\n v.copy(segmentEnd).sub(segmentStart);\r\n\r\n var a = direction.x * v.y - direction.y * v.x;\r\n if (Math.abs(a) < 8.88178419700125E-16)\r\n return null;\r\n\r\n var f = 1 / a;\r\n var t = (os.x * v.y - os.y * v.x) * f;\r\n if (t < 0)\r\n return null;\r\n\r\n var b = (os.x * direction.y - os.y * direction.x) * f;\r\n if (b < 0 || b > 1)\r\n return null;\r\n\r\n return v.copy(direction).multiplyScalar(t).add(origin);\r\n };\r\n })();\r\n\r\n export function LineIntersecsBox(s: THREE.Vector3, e: THREE.Vector3, b: THREE.Box3) {\r\n\r\n if (b.containsPoint(s) && b.containsPoint(e))\r\n return true;\r\n\r\n var dx = e.x - s.x;\r\n var dy = e.y - s.y;\r\n var dz = e.z - s.z;\r\n\r\n var lsq = dx * dx + dy * dy + dz * dz;\r\n\r\n if (lsq <= 0)\r\n return b.containsPoint(s);\r\n\r\n var l = Math.sqrt(lsq);\r\n\r\n var rix = l / dx;\r\n var riy = l / dy;\r\n var riz = l / dz;\r\n\r\n var tx1 = (b.min.x - s.x) * rix;\r\n var tx2 = (b.max.x - s.x) * rix;\r\n var ty1 = (b.min.y - s.y) * riy;\r\n var ty2 = (b.max.y - s.y) * riy;\r\n var tz1 = (b.min.z - s.z) * riz;\r\n var tz2 = (b.max.z - s.z) * riz;\r\n\r\n var tmin = Math.max(Math.min(tx1, tx2), Math.max(Math.min(ty1, ty2), Math.min(tz1, tz2)));\r\n var tmax = Math.min(Math.max(tx1, tx2), Math.min(Math.max(ty1, ty2), Math.max(tz1, tz2)));\r\n\r\n return tmax >= tmin && ((tmax >= 0 && tmax <= l) || (tmin >= 0 && tmin <= l));\r\n }\r\n\r\n export function pointOnLeftSideOfLine(s: THREE.Vector3, e: THREE.Vector3, p: THREE.Vector3) {\r\n return (p.x - s.x) * (s.y - e.y) + (e.x - s.x) * (p.y - s.y);\r\n }\r\n\r\n export function LineClosestDistanceToPoint(start: THREE.Vector3, end: THREE.Vector3, point: THREE.Vector3) {\r\n return GetClosestPointToLine(start, end, point).p.distanceTo(point);\r\n }\r\n\r\n export function getInstanceIntersections(raycaster: THREE.Raycaster, octree: spt.ThreeJs.utils.Octree, filterOptions?: number): LS.Client3DEditor.ClientObjectInstance[] {\r\n //var ray = raycaster.ray;\r\n //var octreeObjects = octree.search(ray.origin, raycaster.far, true, ray.direction);\r\n\r\n var octreeObjects = searchOctree(octree, raycaster);\r\n\r\n if (!filterOptions)\r\n filterOptions = Client3DObectOptions.CanSelectInstances;\r\n\r\n return raycasterIntersectOctreeObjects(raycaster, octreeObjects).map((m) => m.object as LS.Client3DEditor.ClientObjectInstance).filter((o: LS.Client3DEditor.ClientObjectInstance) => {\r\n return o.clientObject.userOptions & filterOptions;\r\n }) as LS.Client3DEditor.ClientObjectInstance[];\r\n }\r\n\r\n export function raycasterIntersectOctreeObjects(raycaster: THREE.Raycaster, objects: IOctreeObjectData[], recursive?: boolean) {\r\n var i: number, il: number,\r\n intersects: IOctreeObjectData[] = [],\r\n extendedIntersects: { object: THREE.Object3D, dist?: number }[] = [],\r\n object: { object: THREE.Object3D, dist?: number },\r\n obj: THREE.Mesh,\r\n geometry: THREE.Geometry,\r\n octreeObject: { object: THREE.Object3D, faces?: THREE.Face3[] },\r\n facesAll: THREE.Face3[],\r\n facesSearch: THREE.Face3[],\r\n objInstance: LS.Client3DEditor.ClientObjectInstance,\r\n sphere = utilSphere,\r\n boundingBox = utilBox3,\r\n target = utilVec3Target,\r\n linePrecision = raycaster.params.Line.threshold * 0.5,\r\n inter: THREE.Intersection[],\r\n isExtendedInter: boolean;\r\n\r\n for (i = 0, il = objects.length; i < il; i++) {\r\n\r\n object = objects[i];\r\n\r\n if (object.object instanceof LS.Client3DEditor.ClientObjectInstance && (object.object.clientObject.userOptions & Client3DObectOptions.NoSimpleGeometry) === 0) {\r\n objInstance = object.object;\r\n geometry = objInstance.geometry as THREE.Geometry;\r\n\r\n if (!geometry.boundingSphere) geometry.computeBoundingSphere();\r\n\r\n sphere.copy(geometry.boundingSphere);\r\n sphere.applyMatrix4(objInstance.matrixWorld);\r\n sphere.radius += linePrecision;\r\n\r\n if (!raycaster.ray.intersectsSphere(sphere)) continue;\r\n\r\n if (!geometry.boundingBox) geometry.computeBoundingBox();\r\n\r\n boundingBox.copy(geometry.boundingBox).applyMatrix4(objInstance.matrixWorld);\r\n\r\n boundingBox.expandByScalar(linePrecision);\r\n\r\n if (!raycaster.ray.intersectsBox(boundingBox)) continue;\r\n\r\n isExtendedInter = true;\r\n\r\n object.dist = raycaster.ray.distanceSqToPoint(boundingBox.getCenter(target));\r\n }\r\n\r\n if (object.object instanceof THREE.Object3D) {\r\n octreeObject = object;\r\n obj = octreeObject.object as THREE.Mesh;\r\n\r\n // temporarily replace object geometry's faces with octree object faces\r\n facesSearch = octreeObject.faces;\r\n geometry = obj.geometry as THREE.Geometry;\r\n facesAll = geometry.faces;\r\n\r\n if (facesSearch.length > 0)\r\n geometry.faces = facesSearch;\r\n\r\n // intersect\r\n inter = raycaster.intersectObject(obj, recursive);\r\n\r\n // revert object geometry's faces\r\n if (facesSearch.length > 0)\r\n geometry.faces = facesAll;\r\n }\r\n else {\r\n inter = raycaster.intersectObject(object as any, recursive);\r\n\r\n intersects.concat(raycaster.intersectObject(object as any, recursive));\r\n }\r\n\r\n if (inter && inter.length)\r\n intersects.push(object);\r\n else if (isExtendedInter)\r\n extendedIntersects.push(object);\r\n\r\n }\r\n\r\n if (extendedIntersects.length > 1)\r\n extendedIntersects.sort((a, b) => a.dist - b.dist);\r\n\r\n return intersects.concat(extendedIntersects);\r\n }\r\n\r\n export function searchOctree(octree: spt.ThreeJs.utils.Octree, raycaster: THREE.Raycaster) {\r\n var ray = raycaster.ray,\r\n position = ray.origin,\r\n distance = raycaster.far,\r\n organizeByObject: boolean = true,\r\n direction = ray.direction,\r\n linePrecision = raycaster.params.Line.threshold * 0.5;\r\n\r\n var i: number, l: number,\r\n node: spt.ThreeJs.utils.OctreeNode,\r\n objects: spt.ThreeJs.utils.OctreeObjectData[],\r\n objectData: { object: THREE.Object3D, faces: any[], vertices: any[] }/*spt.ThreeJs.utils.OctreeObjectData*/,\r\n object: THREE.Object3D,\r\n results: IOctreeObjectData[],\r\n resultData: { object: THREE.Object3D, faces: any[], vertices: any[] }/*spt.ThreeJs.utils.OctreeObjectData*/,\r\n resultsObjectsIndices: THREE.Object3D[],\r\n resultObjectIndex: number,\r\n directionPct: THREE.Vector3;\r\n\r\n // add root objects\r\n objects = [].concat(octree.root.objects as any);\r\n\r\n // ensure distance of ray is a number\r\n if (!(distance > 0))\r\n distance = Number.MAX_VALUE;\r\n\r\n // normalize direction and find pct\r\n direction = utilVec31Search.copy(direction).normalize();\r\n directionPct = utilVec32Search.set(1, 1, 1).divide(direction);\r\n\r\n // search each node of root\r\n for (i = 0, l = octree.root.nodesIndices.length; i < l; i++) {\r\n node = octree.root.nodesByIndex[octree.root.nodesIndices[i]];\r\n objects = searchOctreeNode(node, position, distance, objects, direction, directionPct, linePrecision);\r\n }\r\n\r\n // if should organize results by object\r\n if (organizeByObject) {\r\n\r\n results = [];\r\n resultsObjectsIndices = [];\r\n\r\n // for each object data found\r\n\r\n for (i = 0, l = objects.length; i < l; i++) {\r\n\r\n objectData = objects[i] as any;\r\n object = objectData.object;\r\n\r\n resultObjectIndex = resultsObjectsIndices.indexOf(object);\r\n\r\n // if needed, create new result data\r\n\r\n if (resultObjectIndex === - 1) {\r\n\r\n resultData = {\r\n object: object,\r\n faces: [],\r\n vertices: []\r\n } as any;\r\n\r\n results.push(resultData);\r\n\r\n resultsObjectsIndices.push(object);\r\n\r\n } else {\r\n\r\n resultData = results[resultObjectIndex] as any;\r\n\r\n }\r\n\r\n // object data has faces or vertices, add to list\r\n\r\n if (objectData.faces) {\r\n\r\n resultData.faces.push(objectData.faces);\r\n\r\n } else if (objectData.vertices) {\r\n\r\n resultData.vertices.push(objectData.vertices);\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n else\r\n results = objects;\r\n\r\n return results;\r\n }\r\n\r\n export function searchOctreeNode(node: spt.ThreeJs.utils.OctreeNode, position: THREE.Vector3, distance: number, objects: spt.ThreeJs.utils.OctreeObjectData[], direction: THREE.Vector3, directionPct: THREE.Vector3, linePrecision: number): spt.ThreeJs.utils.OctreeObjectData[] {\r\n var i: number, l: number;\r\n\r\n // test intersects by parameters\r\n var intersects = OctreeNodeIntersectRay(node, position, direction, distance, directionPct, linePrecision);\r\n\r\n // if intersects\r\n if (intersects === true) {\r\n // gather objects\r\n objects = objects.concat(node.objects);\r\n\r\n // search subtree\r\n for (i = 0, l = node.nodesIndices.length; i < l; i++) {\r\n\r\n var child = node.nodesByIndex[node.nodesIndices[i]];\r\n objects = searchOctreeNode(child, position, distance, objects, direction, directionPct, linePrecision);\r\n }\r\n }\r\n\r\n return objects;\r\n }\r\n\r\n export function OctreeNodeIntersectRay(node: spt.ThreeJs.utils.OctreeNode, origin: THREE.Vector3, direction: THREE.Vector3, distance: number, directionPct: THREE.Vector3, linePrecision: number): boolean {\r\n var t1 = (node.left - linePrecision - origin.x) * directionPct.x,\r\n t2 = (node.right + linePrecision - origin.x) * directionPct.x,\r\n t3 = (node.bottom - linePrecision - origin.y) * directionPct.y,\r\n t4 = (node.top + linePrecision - origin.y) * directionPct.y,\r\n t5 = (node.back - linePrecision - origin.z) * directionPct.z,\r\n t6 = (node.front + linePrecision - origin.z) * directionPct.z,\r\n tmax = Math.min(Math.min(Math.max(t1, t2), Math.max(t3, t4)), Math.max(t5, t6)),\r\n tmin: number;\r\n\r\n // ray would intersect in reverse direction, i.e. this is behind ray\r\n if (tmax < 0)\r\n return false;\r\n\r\n tmin = Math.max(Math.max(Math.min(t1, t2), Math.min(t3, t4)), Math.min(t5, t6));\r\n\r\n // if tmin > tmax or tmin > ray distance, ray doesn't intersect AABB\r\n return tmin <= tmax && tmin <= distance;\r\n }\r\n\r\n export function toNearestAxisNormal(n: THREE.Vector3, optionalTarget?: THREE.Vector3) {\r\n var res = optionalTarget || new THREE.Vector3();\r\n res.set(0, 0, 0);\r\n var nax = Math.abs(n.x),\r\n nay = Math.abs(n.y),\r\n naz = Math.abs(n.z),\r\n idx = nax > nay && nax > naz ? 'x' : (nay > naz ? 'y' : 'z');\r\n res[idx] = n[idx] < 0 ? -1 : 1;\r\n return res;\r\n }\r\n\r\n export function GetBoxOffsetByDirection(dir: THREE.Vector3 | THREE.Vector2, w: number, h: number) {\r\n return new THREE.Vector3(dir.x < 0 ? -w : (dir.x > 0 ? w : 0), dir.y < 0 ? -h : (dir.y > 0 ? h : 0), 0);\r\n }\r\n\r\n export function raycasterIntersectEdge(raycaster: THREE.Raycaster, object: LS.Client3DEditor.ClientObjectInstance) {\r\n var geometry = object.geometry as THREE.Geometry,\r\n plane = utilPlane,\r\n boundingBox = utilBox3.makeEmpty(),\r\n target = utilVec3Target,\r\n center = utilVec3Center,\r\n size = utilVec3Size,\r\n normal = utilVec3Normal.set(0, 0, 1),\r\n linePrecision = raycaster.params.Line.threshold * 0.5;\r\n\r\n if (!geometry.boundingBox) geometry.computeBoundingBox();\r\n\r\n boundingBox.copy(geometry.boundingBox).applyMatrix4(object.matrixWorld);\r\n\r\n boundingBox.getCenter(center);\r\n\r\n boundingBox.getSize(size);\r\n\r\n plane.setFromNormalAndCoplanarPoint(normal, center);\r\n\r\n raycaster.ray.intersectPlane(plane, target);\r\n\r\n if (Math.abs(target.x - center.x) / Math.abs(target.y - center.y) >= (boundingBox.max.x - boundingBox.min.x) / (boundingBox.max.y - boundingBox.min.y)) {\r\n //left or right edge\r\n\r\n linePrecision = Math.min(linePrecision, boundingBox.max.x - boundingBox.min.x);\r\n\r\n if (target.x < center.x) {\r\n //left\r\n if (target.x <= boundingBox.min.x + linePrecision) {\r\n boundingBox.max.setX(boundingBox.min.x + linePrecision);\r\n normal.set(-1, 0, 0);\r\n } else return null;\r\n } else {\r\n //right\r\n if (target.x >= boundingBox.max.x - linePrecision) {\r\n boundingBox.min.setX(boundingBox.max.x - linePrecision);\r\n normal.set(1, 0, 0);\r\n } else return null;\r\n }\r\n } else {\r\n //upper or lower edge\r\n\r\n linePrecision = Math.min(linePrecision, boundingBox.max.y - boundingBox.min.y);\r\n\r\n if (target.y < center.y) {\r\n //lower\r\n if (target.y <= boundingBox.min.y + linePrecision) {\r\n boundingBox.max.setY(boundingBox.min.y + linePrecision);\r\n normal.set(0, -1, 0);\r\n } else return null;\r\n } else {\r\n //upper\r\n if (target.y >= boundingBox.max.y - linePrecision) {\r\n boundingBox.min.setY(boundingBox.max.y - linePrecision);\r\n normal.set(0, 1, 0);\r\n } else return null;\r\n }\r\n }\r\n\r\n return { bounds: boundingBox, direction: normal, center: center, id: object.instanceData.Id, size: size, target: target } as edgeIntersectResult;\r\n }\r\n\r\n export function getUpNormal(n: THREE.Vector3, optionalTarget?: THREE.Vector3) {\r\n var res = optionalTarget || new THREE.Vector3();\r\n if (n.z >= 0.9999)\r\n res.set(0, 1, 0);\r\n else if (n.z <= -0.9999)\r\n res.set(0, -1, 0);\r\n else if (n.x >= 1)\r\n res.set(0, 0, 1);\r\n else if (n.x <= -0.9999)\r\n res.set(0, 0, 1);\r\n else if (n.y >= 1)\r\n res.set(0, 0, 1);\r\n else //if (n.y <= 0.9999)\r\n res.set(0, 0, 1);\r\n return res;\r\n }\r\n\r\n //get normal from triangle\r\n export var getNormal = (() => {\r\n\r\n var ab = new THREE.Vector3(), ac = new THREE.Vector3();\r\n\r\n return (a: THREE.Vector3, b: THREE.Vector3, c: THREE.Vector3, target?: THREE.Vector3) => {\r\n ab.subVectors(b, a);\r\n ac.subVectors(c, a);\r\n return (target || new THREE.Vector3()).crossVectors(ab, ac).normalize() as THREE.Vector3;\r\n }\r\n })();\r\n\r\n export function CalculateViewPositionFromFOV(fov: number, viewDirection: THREE.Vector3, centerDiameter: number): THREE.Vector3 {\r\n return new THREE.Vector3().copy(viewDirection).normalize().multiplyScalar((centerDiameter / 2) / Math.tan((fov / 2) / 180 * Math.PI));\r\n }\r\n\r\n export function ComputeProjectionUpdate(perspectiveCamera: THREE.PerspectiveCamera, orthographicCamera: THREE.OrthographicCamera, globalSphere: THREE.Sphere, orthoCameraDistance: number) {\r\n\r\n var campos = orthographicCamera.getWorldPosition(new THREE.Vector3()),\r\n camdir = orthographicCamera.getWorldDirection(new THREE.Vector3());\r\n\r\n var distance = Math.abs(camdir.dot(campos.subVectors(globalSphere.center, campos)));\r\n orthographicCamera.near = Math.max(100, Math.min(9999900, distance - globalSphere.radius - 100));\r\n orthographicCamera.far = Math.max(orthographicCamera.near + 100, Math.min(10000000, distance + globalSphere.radius + 100));\r\n\r\n THREE.OrthographicCamera.prototype.updateProjectionMatrix.call(orthographicCamera);\r\n\r\n var aspect = (orthographicCamera.right - orthographicCamera.left) / (orthographicCamera.top - orthographicCamera.bottom);\r\n var dx = (orthographicCamera.right - orthographicCamera.left) / (2 * aspect * orthographicCamera.zoom);\r\n\r\n var angle = perspectiveCamera.fov * Math.PI / 360; //half angle radian\r\n perspectiveCamera.position.z = (dx / Math.tan(angle)) - orthoCameraDistance;\r\n //perspectiveCamera.near = Math.max(orthographicCamera.near, orthographicCamera.near + perspectiveCamera.position.z);\r\n //perspectiveCamera.far = Math.max(orthographicCamera.far, orthographicCamera.far + perspectiveCamera.position.z);\r\n\r\n perspectiveCamera.getWorldPosition(campos);\r\n perspectiveCamera.getWorldDirection(camdir);\r\n\r\n //var perspectiveDistance = globalSphere.center.distanceTo(perspectiveCamera.getWorldPosition(new THREE.Vector3()));\r\n distance = Math.abs(camdir.dot(campos.subVectors(globalSphere.center, campos)));\r\n perspectiveCamera.near = Math.max(100, Math.min(9999900, distance - globalSphere.radius - 100));\r\n perspectiveCamera.far = Math.max(perspectiveCamera.near + 100, Math.min(10000000, distance + globalSphere.radius + 100));\r\n\r\n perspectiveCamera.aspect = aspect;\r\n\r\n THREE.PerspectiveCamera.prototype.updateProjectionMatrix.call(perspectiveCamera);\r\n }\r\n\r\n //spt.ThreeJs.utils.DownloadSceneAsObj(Scene3DModel.Scene)\r\n export function DownloadSceneAsObj(scene: THREE.Scene) {\r\n new spt.ThreeJs.utils.OBJExporter(4, true, false, false, false).parse(scene).download();\r\n }\r\n\r\n //export function SerializeSceneToObj(scene: THREE.Scene, input?: Utils.ObjSerializedResult): string[]Utils.ObjSerializedResult {\r\n // var res = input || {\r\n // output: [],\r\n // indexCount: 0,\r\n // vertexCount: 0,\r\n // uvCount: 0\r\n // };\r\n\r\n // var objIdx = 0;\r\n\r\n // scene.traverse((obj: THREE.Mesh) => {\r\n // if (obj.isMesh && !(obj).isPoints && !(obj).isLine) {\r\n // var mesh = obj as THREE.Mesh;\r\n // mesh.updateMatrixWorld(true);\r\n\r\n // var geometry = mesh.geometry;\r\n // var bufferGeometry: THREE.BufferGeometry;\r\n\r\n // if (geometry instanceof THREE.BufferGeometry)\r\n // bufferGeometry = geometry;\r\n // else\r\n // bufferGeometry = new THREE.BufferGeometry().fromGeometry(geometry);\r\n\r\n // SerializeBufferGeometryToObj(bufferGeometry, mesh.matrixWorld, \"geo\" + (objIdx++), res);\r\n // }\r\n // });\r\n\r\n // console.log(\"Finished serializing scene to obj\");\r\n\r\n // return res;\r\n //}\r\n\r\n //function formatNumberForObj(v: number, precision: number) {\r\n\r\n // if (isNaN(v) || !isFinite(v) || !v)\r\n // return \"0\";\r\n\r\n // let s = v.toFixed(precision);\r\n\r\n // if (s.indexOf(\".\") !== -1) {\r\n // let lIdx = s.length - 1;\r\n // while (s[lIdx] === '0')\r\n // lIdx--;\r\n // if (s[lIdx] === '.')\r\n // lIdx--;\r\n // lIdx++;\r\n // if (lIdx < s.length)\r\n // s = s.substring(0, lIdx);\r\n // }\r\n // return s;\r\n //}\r\n\r\n //export function SerializeBufferGeometryToObj(bufferGeometry: THREE.BufferGeometry, transformation: THREE.Matrix4, name?: string, input?: Utils.ObjSerializedResult, precision?: number): Utils.ObjSerializedResult {\r\n // if (!bufferGeometry || !bufferGeometry.attributes || !bufferGeometry.attributes['position']) {\r\n // return null;\r\n // }\r\n\r\n // if (precision === undefined)\r\n // precision = 4;\r\n\r\n // if (!bufferGeometry.attributes['normal']) {\r\n // console.log(\"Computing Normals.\");\r\n // bufferGeometry.computeVertexNormals();\r\n // }\r\n\r\n // var res = input || {\r\n // output: [],\r\n // indexCount: 0,\r\n // vertexCount: 0,\r\n // uvCount: 0\r\n // };\r\n\r\n // var normalTransform = new THREE.Matrix3().getNormalMatrix(transformation);\r\n\r\n // var hasIndex = !!bufferGeometry.index;\r\n\r\n // var output = [];\r\n\r\n // output.push(\"\\no \" + (name || (\"BufferGeometry \" + bufferGeometry.id)));\r\n\r\n // console.log(\"Serializing BufferGeometry \" + bufferGeometry.id);\r\n\r\n // var positions = (bufferGeometry.attributes['position']).array as number[];\r\n\r\n // var hasUvs = !!bufferGeometry.attributes['uv'];\r\n\r\n // console.log(\"Vertex length: \" + (positions.length / 3));\r\n\r\n // var v = new THREE.Vector3();\r\n\r\n // for (var i = 0, j = positions.length; i < j; i += 3) {\r\n // var x = positions[i],\r\n // y = positions[i + 1],\r\n // z = positions[i + 2];\r\n\r\n // v.set(x, y, z).applyMatrix4(transformation);\r\n\r\n // output.push(\"v \" + formatNumberForObj(v.x, precision) + \" \" + formatNumberForObj(v.y, precision) + \" \" + formatNumberForObj(v.z, precision));\r\n // }\r\n\r\n // if (hasUvs) {\r\n // var uvs = (bufferGeometry.attributes['uv']).array as number[];\r\n // for (var i = 0, j = uvs.length; i < j; i += 2) {\r\n // var x = uvs[i],\r\n // y = uvs[i + 1];\r\n\r\n // output.push(\"vt \" + formatNumberForObj(x, 4) + \" \" + formatNumberForObj(y, 4));\r\n // }\r\n // }\r\n\r\n // var normals = (bufferGeometry.attributes['normal']).array as number[];\r\n // for (var i = 0, j = normals.length; i < j; i += 3) {\r\n // var x = normals[i],\r\n // y = normals[i + 1],\r\n // z = normals[i + 2];\r\n\r\n // v.set(x, y, z).applyMatrix3(normalTransform).normalize();\r\n\r\n // output.push(\"vn \" + formatNumberForObj(v.x, 4) + \" \" + formatNumberForObj(v.y, 4) + \" \" + formatNumberForObj(v.z, 4));\r\n // }\r\n\r\n // output.push(\"s off\");\r\n\r\n // var idxOffset = res.vertexCount + 1;\r\n // var uvIdxOffset = res.uvCount + 1;\r\n\r\n // if (hasIndex) {\r\n // var indices = bufferGeometry.getIndex().array;\r\n // for (var k = 0, l = indices.length; k < l; k += 3) {\r\n // var idx1 = idxOffset + indices[k],\r\n // idx2 = idxOffset + indices[k + 1],\r\n // idx3 = idxOffset + indices[k + 2];\r\n\r\n // if (hasUvs)\r\n // output.push(\"f \" + idx1 + \"/\" + (uvIdxOffset + indices[k]) + \"/\" + idx1 + \" \" + idx2 + \"/\" + (uvIdxOffset + indices[k + 1]) + \"/\" + idx2 + \" \" + idx3 + \"/\" + (uvIdxOffset + indices[k + 2]) + \"/\" + idx3);\r\n // else\r\n // output.push(\"f \" + idx1 + \"//\" + idx1 + \" \" + idx2 + \"//\" + idx2 + \" \" + idx3 + \"//\" + idx3);\r\n // }\r\n // } else {\r\n // for (var m = 0, n = positions.length / 3; m < n; m += 3) {\r\n // var idx1 = idxOffset + m,\r\n // idx2 = idxOffset + m + 1,\r\n // idx3 = idxOffset + m + 2;\r\n\r\n // if (hasUvs)\r\n // output.push(\"f \" + idx1 + \"/\" + (uvIdxOffset + m) + \"/\" + idx1 + \" \" + idx2 + \"/\" + (uvIdxOffset + m + 1) + \"/\" + idx2 + \" \" + idx3 + \"/\" + (uvIdxOffset + m + 2) + \"/\" + idx3);\r\n // else\r\n // output.push(\"f \" + idx1 + \"//\" + idx1 + \" \" + idx2 + \"//\" + idx2 + \" \" + idx3 + \"//\" + idx3);\r\n\r\n // }\r\n // }\r\n\r\n // res.vertexCount += positions.length / 3;\r\n // if (hasUvs)\r\n // res.uvCount += positions.length / 3;\r\n // res.indexCount += hasIndex ? bufferGeometry.getIndex().array.length : res.vertexCount;\r\n\r\n // console.log(\"Finished: BufferGeometry \" + bufferGeometry.id);\r\n // console.log(\"output lines count: \" + output.length);\r\n // console.log(\"\\n\");\r\n\r\n // res.output.push(output.join(\"\\n\"));\r\n\r\n // return res;\r\n //}\r\n\r\n export function BufferGeometryFromJsonObject(obj: IBufferGeometryAttributesJson): THREE.BufferGeometry {\r\n var result = new THREE.BufferGeometry();\r\n\r\n //var hasNormals = false;\r\n\r\n for (var name in obj) {\r\n var attr = obj[name];\r\n var typedArray;\r\n switch (attr.type) {\r\n case \"Float32Array\":\r\n typedArray = new Float32Array(attr.array);\r\n break;\r\n case \"Uint16Array\":\r\n typedArray = new Uint16Array(attr.array);\r\n break;\r\n case \"Int8Array\":\r\n typedArray = new Int8Array(attr.array);\r\n break;\r\n case \"Uint8Array\":\r\n typedArray = new Uint8Array(attr.array);\r\n break;\r\n case \"Uint8ClampedArray\":\r\n typedArray = new Uint8ClampedArray(attr.array);\r\n break;\r\n case \"Int16Array\":\r\n typedArray = new Int16Array(attr.array);\r\n break;\r\n case \"Int32Array\":\r\n typedArray = new Int32Array(attr.array);\r\n break;\r\n case \"Uint32Array\":\r\n typedArray = new Uint32Array(attr.array);\r\n break;\r\n case \"Float64Array\":\r\n typedArray = new Float64Array(attr.array);\r\n break;\r\n default:\r\n typedArray = new Float32Array(attr.array);\r\n }\r\n\r\n if (name === \"index\")\r\n result.setIndex(new THREE.BufferAttribute(typedArray, 1));\r\n else\r\n result.setAttribute(name, new THREE.BufferAttribute(typedArray, parseInt(attr.itemSize)));\r\n //if (name === \"normal\")\r\n // hasNormals = true;\r\n }\r\n //if (!hasNormals)\r\n // result.computeVertexNormals();\r\n //if (!result.boundingSphere)\r\n // result.computeBoundingSphere();\r\n\r\n return result;\r\n }\r\n\r\n export function DuplicateBufferGeometries(geometry: THREE.BufferGeometry, transforms: number[][]) {\r\n var result = new THREE.BufferGeometry();\r\n\r\n if (!geometry || !geometry.attributes[\"position\"] || !transforms || !transforms.length)\r\n return result;\r\n\r\n if (geometry.index)\r\n geometry = geometry.toNonIndexed();\r\n\r\n var vertArray = (geometry.attributes[\"position\"]).array as number[];\r\n var pointCount = vertArray.length / 3;\r\n var geometriesCount = transforms.length;\r\n\r\n if (pointCount <= 0)\r\n return result;\r\n\r\n var hasUv = !!geometry.attributes[\"uv\"];\r\n var hasColor = !!geometry.attributes[\"color\"];\r\n var hasNormal = !!geometry.attributes[\"normal\"];\r\n\r\n var vertices = new Float32Array(geometriesCount * pointCount * 3) as any;\r\n var colors = hasColor ? new Float32Array(geometriesCount * pointCount * 3) as any : null;\r\n var normals = hasNormal ? new Float32Array(geometriesCount * pointCount * 3) as any : null;\r\n var uvs = hasUv ? new Float32Array(geometriesCount * pointCount * 2) as any : null;\r\n\r\n var colArray = hasColor ? (geometry.attributes[\"color\"]).array as number[] : null;\r\n var normalArray = hasNormal ? (geometry.attributes[\"normal\"]).array as number[] : null;\r\n var uvArray = hasUv ? (geometry.attributes[\"uv\"]).array as number[] : null;\r\n\r\n var transform = new THREE.Matrix4();\r\n var normalTransform = new THREE.Matrix3();\r\n var vec3 = new THREE.Vector3();\r\n\r\n var off3 = 0;\r\n var off2 = 0;\r\n\r\n for (var i = 0; i < geometriesCount; i++) {\r\n\r\n transform.fromArray(transforms[i]);\r\n\r\n for (var k = 0, l = vertArray.length; k < l; k += 3) {\r\n vec3.fromArray(vertArray, k).applyMatrix4(transform).toArray(vertices, k + off3);\r\n }\r\n\r\n if (hasNormal) {\r\n\r\n normalTransform.getNormalMatrix(transform);\r\n\r\n for (var m = 0, n = normalArray.length; m < n; m += 3) {\r\n vec3.fromArray(normalArray, m).applyMatrix3(normalTransform).toArray(normals, m + off3);\r\n }\r\n }\r\n\r\n if (hasColor) {\r\n colors.set(colArray, off3);\r\n }\r\n\r\n if (hasUv) {\r\n uvs.set(uvArray, off2);\r\n off2 += pointCount * 2;\r\n }\r\n\r\n off3 += pointCount * 3;\r\n }\r\n\r\n result.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n if (hasColor)\r\n result.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n if (hasNormal)\r\n result.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n if (hasUv)\r\n result.setAttribute('uv', new THREE.BufferAttribute(uvs, 2));\r\n\r\n return result;\r\n }\r\n\r\n export function MergeBufferGeometries(geometries: THREE.BufferGeometry[], transforms?: number[][]) {\r\n var result = new THREE.BufferGeometry();\r\n\r\n if (!geometries || !geometries.length)\r\n return result;\r\n\r\n geometries = geometries.map(geo => geo.index ? geo.toNonIndexed() : geo);\r\n\r\n var hasUv: boolean = false;\r\n var hasColor: boolean = false;\r\n var hasNormal: boolean = false;\r\n var hasTransforms = !!transforms && transforms.length === geometries.length;\r\n\r\n var pointCount = geometries.reduce((prev, cur) => {\r\n if (cur.attributes[\"uv\"] as any) hasUv = true;\r\n if (cur.attributes[\"color\"] as any) hasColor = true;\r\n if (cur.attributes[\"normal\"] as any) hasNormal = true;\r\n return prev + cur.attributes[\"position\"].array.length / 3;\r\n }, 0);\r\n\r\n if (pointCount <= 0)\r\n return result;\r\n\r\n var vertices = new Float32Array(pointCount * 3) as any;\r\n var colors = hasColor ? new Float32Array(pointCount * 3) as any : null;\r\n var normals = hasNormal ? new Float32Array(pointCount * 3) as any : null;\r\n var uvs = hasUv ? new Float32Array(pointCount * 2) as any : null;\r\n\r\n var transform = new THREE.Matrix4();\r\n var normalTransform = new THREE.Matrix3();\r\n var vec3 = new THREE.Vector3();\r\n\r\n var off3 = 0;\r\n var off2 = 0;\r\n\r\n for (var i = 0, j = geometries.length; i < j; i++) {\r\n var geometry = geometries[i];\r\n\r\n if (hasNormal && !geometry.attributes[\"normal\"])\r\n geometry.computeVertexNormals();\r\n\r\n var vertArray = (geometry.attributes[\"position\"]).array as number[];\r\n\r\n if (hasTransforms) {\r\n\r\n transform.fromArray(transforms[i]);\r\n\r\n for (var k = 0, l = vertArray.length; k < l; k += 3) {\r\n vec3.fromArray(vertArray, k).applyMatrix4(transform).toArray(vertices, k + off3);\r\n }\r\n\r\n if (hasNormal && geometry.attributes[\"normal\"]) {\r\n\r\n var normalArray = (geometry.attributes[\"normal\"]).array as number[];\r\n\r\n normalTransform.getNormalMatrix(transform);\r\n\r\n for (var m = 0, n = normalArray.length; m < n; m += 3) {\r\n vec3.fromArray(normalArray, m).applyMatrix3(normalTransform).toArray(normals, m + off3);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n vertices.set(vertArray, off3);\r\n\r\n if (hasNormal && geometry.attributes[\"normal\"])\r\n normals.set((geometry.attributes[\"normal\"]).array as number[], off3);\r\n\r\n }\r\n\r\n if (hasColor && geometry.attributes[\"color\"])\r\n colors.set((geometry.attributes[\"color\"]).array as number[], off3);\r\n\r\n if (hasUv && geometry.attributes[\"uv\"])\r\n uvs.set((geometry.attributes[\"uv\"]).array as number[], off2);\r\n\r\n var pCount = vertArray.length / 3;\r\n\r\n off2 += pCount * 2;\r\n off3 += pCount * 3;\r\n }\r\n\r\n result.setAttribute('position', new THREE.BufferAttribute(vertices, 3));\r\n if (hasColor)\r\n result.setAttribute('color', new THREE.BufferAttribute(colors, 3));\r\n if (hasNormal)\r\n result.setAttribute('normal', new THREE.BufferAttribute(normals, 3));\r\n if (hasUv)\r\n result.setAttribute('uv', new THREE.BufferAttribute(uvs, 2));\r\n\r\n return result;\r\n }\r\n\r\n export function disposeObject3D(obj: IDisposableThreeJsObject, noMaterial?: boolean, noTexture?: boolean, noGeometry?: boolean) {\r\n if (obj) {\r\n if (typeof obj.dispose == \"function\") {\r\n obj.dispose();\r\n } else {\r\n if (obj.children) {\r\n for (var i = 0; i < obj.children.length; i++) {\r\n disposeObject3D(obj.children[i], noMaterial, noTexture, noGeometry);\r\n }\r\n }\r\n if (obj.geometry && !noGeometry) {\r\n obj.geometry.dispose();\r\n delete obj.geometry;\r\n }\r\n if (obj.material && !noMaterial) {\r\n if (Array.isArray(obj.material)) {\r\n for (i = 0; i < obj.material.length; i++) {\r\n obj.material[i].dispose();\r\n }\r\n } else if ((obj.material as THREE.MultiMaterial).materials) {\r\n for (i = 0; i < (obj.material as THREE.MultiMaterial).materials.length; i++) {\r\n (obj.material as THREE.MultiMaterial).materials[i].dispose();\r\n }\r\n }\r\n else {\r\n obj.material.dispose();\r\n }\r\n delete obj.material;\r\n }\r\n if (obj.texture && !noTexture) {\r\n obj.texture.dispose();\r\n delete obj.texture;\r\n }\r\n }\r\n }\r\n }\r\n\r\n export function emptyObject3D(obj: THREE.Object3D, noMaterial?: boolean, noTexture?: boolean, noGeometry?: boolean) {\r\n if (obj.children && obj.children.length) {\r\n var children: THREE.Object3D[] = [];\r\n for (var i = 0, j = obj.children.length; i < j; i++) {\r\n children.push(obj.children[i]);\r\n }\r\n for (var i = 0, j = children.length; i < j; i++) {\r\n var child = children[i];\r\n obj.remove(child);\r\n spt.ThreeJs.utils.disposeObject3D(child, noMaterial, noTexture, noGeometry);\r\n }\r\n }\r\n }\r\n\r\n export function GetCirclePoints(radius: number = 1, segmentLength: number = 1, thetaStart: number = 0, thetaEnd: number = Math.PI * 2) {\r\n if (thetaStart === thetaEnd)\r\n thetaEnd += Math.PI * 2;\r\n\r\n var r = radius > 0 ? radius : 1,\r\n thetaLength = Math.min(Math.PI * 2, Math.abs(thetaEnd - thetaStart)),\r\n u = r * thetaLength,\r\n sl = Math.min(u / 3, Math.max(u / 64, segmentLength > 0 ? segmentLength : u / 10)),\r\n count = Math.round(u / sl),\r\n thetaStep = (thetaEnd - thetaStart) / count,\r\n fullCircle = thetaLength / Math.PI * 180 > 359.99;\r\n\r\n var positions: THREE.Vector3[] = [];\r\n\r\n for (var i = fullCircle ? 1 : 0; i <= count; i++) {\r\n\r\n var rd = thetaStart + i * thetaStep,\r\n p = new THREE.Vector3(Math.cos(rd) * r, Math.sin(rd) * r, 0);\r\n\r\n positions.push(p);\r\n }\r\n\r\n\r\n return positions;\r\n }\r\n\r\n export function GetCirclePointsSegments(count?: number, thetaStart?: number, thetaLength?: number) {\r\n count = Math.max(3, count || 0);\r\n\r\n thetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\r\n\r\n var positions: THREE.Vector3[] = [new THREE.Vector3(Math.cos(thetaStart), Math.sin(thetaStart), 0)];\r\n\r\n for (var i = 1; i < count; i++) {\r\n\r\n var r = thetaStart + i / count * thetaLength;\r\n\r\n var p = new THREE.Vector3(Math.cos(r), Math.sin(r), 0);\r\n\r\n positions.push(p);\r\n positions.push(p);\r\n }\r\n\r\n positions.push(positions[0]);\r\n\r\n return positions;\r\n }\r\n\r\n export class CircleLineBufferGeometry extends THREE.BufferGeometry {\r\n constructor(radius: number, segments?: number, thetaStart?: number, thetaLength?: number) {\r\n super();\r\n this.type = 'CircleLineBufferGeometry';\r\n\r\n radius = radius || 50;\r\n segments = segments !== undefined ? Math.max(8, segments) : Math.max(8, Math.round(radius * 0.3));\r\n\r\n thetaStart = thetaStart !== undefined ? thetaStart : 0;\r\n thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\r\n\r\n var positions = new Float32Array((segments + 1) * 3);\r\n var index = new Uint16Array(segments * 2);\r\n\r\n positions[0] = radius * Math.cos(thetaStart);\r\n positions[1] = radius * Math.sin(thetaStart);\r\n\r\n for (var s = 1, i = 3, j = 0; s <= segments; s++ , i += 3, j += 2) {\r\n\r\n var segment = thetaStart + s / segments * thetaLength;\r\n\r\n positions[i] = radius * Math.cos(segment);\r\n positions[i + 1] = radius * Math.sin(segment);\r\n\r\n index[j] = s - 1;\r\n index[j + 1] = s;\r\n }\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(positions, 3));\r\n this.setIndex(new THREE.BufferAttribute(index, 1));\r\n\r\n this.boundingSphere = new THREE.Sphere(new THREE.Vector3(), radius);\r\n }\r\n }\r\n\r\n export class CircleLineBufferGeometryCollection extends THREE.BufferGeometry {\r\n constructor(transforms: number[][], radius: number, segments?: number) {\r\n super();\r\n this.type = 'CircleLineBufferGeometryCollection';\r\n\r\n radius = radius || 50;\r\n segments = segments !== undefined ? Math.max(8, segments) : Math.max(8, Math.round(radius * 0.3));\r\n\r\n var thetaLength = Math.PI * 2;\r\n\r\n var count = transforms.length;\r\n\r\n var vertex = new Float32Array(segments * 3 * count);\r\n var index = new Uint16Array(segments * 2 * count);\r\n\r\n var cvertex = new Float32Array(segments * 3);\r\n var cindex = new Uint16Array(segments * 2);\r\n\r\n var transform = new THREE.Matrix4(),\r\n vt = new THREE.Vector3(),\r\n min = new THREE.Vector3(Infinity, Infinity, Infinity),\r\n max = new THREE.Vector3(- Infinity, - Infinity, - Infinity),\r\n i = 0,\r\n j = 0;\r\n\r\n for (var s = 0, ci = 0, cj = 0; s < segments; s++ , ci += 3, cj += 2) {\r\n\r\n var segment = s / segments * thetaLength;\r\n\r\n cvertex[ci] = radius * Math.cos(segment);\r\n cvertex[ci + 1] = radius * Math.sin(segment);\r\n\r\n cindex[cj] = s;\r\n cindex[cj + 1] = (s + 1) % segments;\r\n }\r\n\r\n ArrayHelper.iterateTimes(count, (c) => {\r\n var off = segments * c;\r\n transform.fromArray(transforms[c]);\r\n\r\n for (var s = 0, ci = 0, cj = 0; s < segments; s++ , i += 3, j += 2, ci += 3, cj += 2) {\r\n\r\n vt.set(cvertex[ci], cvertex[ci + 1], 0).applyMatrix4(transform);\r\n\r\n min.min(vt);\r\n max.max(vt);\r\n\r\n vertex[i] = vt.x;\r\n vertex[i + 1] = vt.y;\r\n\r\n index[j] = cindex[cj] + off;\r\n index[j + 1] = cindex[cj + 1] + off;\r\n }\r\n });\r\n\r\n this.setAttribute('position', new THREE.BufferAttribute(vertex, 3));\r\n this.setIndex(new THREE.BufferAttribute(index, 1));\r\n\r\n min.x -= radius;\r\n min.y -= radius;\r\n min.z -= radius;\r\n\r\n max.x += radius;\r\n max.y += radius;\r\n max.z += radius;\r\n\r\n var box = new THREE.Box3(min, max);\r\n\r\n this.boundingBox = box;\r\n this.boundingSphere = box.getBoundingSphere(new THREE.Sphere());\r\n }\r\n }\r\n\r\n export function SaveScreenshotFromRenderer(renderer: THREE.WebGLRenderer, isOverallView?: boolean) {\r\n if (renderer && typeof THREE != \"undefined\") {\r\n var domElement = renderer.domElement;\r\n if (domElement && typeof domElement.toDataURL == \"function\") {\r\n LoaderManager.addLoadingJob();\r\n try {\r\n AManager.Ajax('AppServices.asmx', 'SaveScreenshot', \"{\\\"src\\\":\\\"\" + domElement.toDataURL(\"image/png\") + \"\\\", \\\"isOverall\\\":\" + (isOverallView ? \"true\" : \"false\") + \"}\", (result) => {\r\n if (result && result.Data && result.Data.success) {\r\n DManager.showInfoWindow($('#scene3DScreenshotSaved').html() + \" \" + result.Data.fileName);\r\n } else {\r\n DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n }\r\n LoaderManager.finishLoadingJob();\r\n }, () => {\r\n LoaderManager.finishLoadingJob();\r\n DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n });\r\n } catch (e) {\r\n LoaderManager.finishLoadingJob();\r\n DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n }\r\n } else\r\n DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n } else\r\n DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n }\r\n\r\n export function triangulateToGeometry(poly: THREE.Vector2[], target?: THREE.Geometry): THREE.Geometry {\r\n if (!poly || !poly.length)\r\n return null;\r\n\r\n var geo = target || new THREE.Geometry();\r\n\r\n var index = geo.vertices.length,\r\n box = new THREE.Box2().setFromPoints(poly),\r\n size = box.getSize(new THREE.Vector2()),\r\n s = Math.max(size.x, size.y),\r\n tempUVs = poly.map(p => p.clone().sub(box.min).divideScalar(s));\r\n\r\n for (var i = 0, l = poly.length; i < l; i++) {\r\n var v = poly[i];\r\n geo.vertices.push(new THREE.Vector3(v.x, v.y, 0));\r\n }\r\n\r\n var vIndizes = THREE.ShapeUtils.triangulateShape(poly, []);\r\n //var vIndizes = THREE.ShapeUtils.triangulate(poly, true) as number[][];\r\n\r\n for (var m = 0, l2 = vIndizes.length; m < l2; m++) {\r\n var ind = vIndizes[m];\r\n\r\n var a = ind[0],\r\n b = ind[1],\r\n c = ind[2];\r\n\r\n geo.faces.push(new THREE.Face3(a + index, b + index, c + index, new THREE.Vector3(0, 0, 1)));\r\n\r\n geo.faceVertexUvs[0].push([tempUVs[a].clone(), tempUVs[b].clone(), tempUVs[c].clone()]);\r\n }\r\n\r\n return geo;\r\n }\r\n\r\n //export function SaveScreenshotFromRenderers(renderers: THREE.WebGLRenderer[], isOverallView?: boolean) {\r\n // if (LoaderManager.isLoading())\r\n // return;\r\n\r\n // if (typeof THREE != \"undefined\" && renderers && renderers.length) {\r\n // var canvas: HTMLCanvasElement = null,\r\n // ctx: CanvasRenderingContext2D = null,\r\n // counter = renderers.length,\r\n // i = 0;\r\n\r\n // function renderToCanvas() {\r\n // if (i >= counter) {\r\n // if (canvas && typeof canvas.toDataURL == \"function\") {\r\n // try {\r\n // var data = canvas.toDataURL(\"image/png\");\r\n // AManager.AjaxWithLoading('AppServices.asmx', 'SaveScreenshot', `{\"src\":\"${data}\", \"isOverall\":${isOverallView ? \"true\" : \"false\"}}`, (result) => {\r\n // if (result && result.Data && result.Data.success) {\r\n // DManager.showInfoWindow($('#scene3DScreenshotSaved').html() + \" \" + result.Data.fileName);\r\n // } else\r\n // DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n // }, () => {\r\n // DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n // });\r\n // } catch (e) {\r\n // DManager.showErrorMessage($('#scene3DScreenshotError').html());\r\n // }\r\n // }\r\n // if (canvas) {\r\n // document.body.removeChild(canvas);\r\n // }\r\n // } else {\r\n // var r = renderers[i++],\r\n // domElement = r.domElement;\r\n // if (domElement && typeof domElement.toDataURL == \"function\") {\r\n // try {\r\n // var image = new Image();\r\n // image.onload = () => {\r\n // if (image.width && image.height) {\r\n // if (!ctx) {\r\n // var cr = domElement.getBoundingClientRect();\r\n\r\n // canvas = document.createElement(\"canvas\");\r\n // canvas.style.width = (canvas.width = image.width) + \"px\";\r\n // canvas.style.height = (canvas.height = image.height) + \"px\";\r\n // canvas.style.position = \"absolute\";\r\n // canvas.style.left = cr.left + \"px\";\r\n // canvas.style.top = cr.top + \"px\";\r\n\r\n // document.body.appendChild(canvas);\r\n\r\n // ctx = canvas.getContext(\"2d\");\r\n // }\r\n // }\r\n // ctx.drawImage(image, 0, 0);\r\n // renderToCanvas();\r\n // };\r\n // image.src = domElement.toDataURL(\"image/png\");\r\n // } catch (e) {\r\n // renderToCanvas();\r\n // }\r\n // } else\r\n // renderToCanvas();\r\n // }\r\n // }\r\n\r\n // renderToCanvas();\r\n // }\r\n\r\n export var BoxisIntersectingTriangle = (() => {\r\n\r\n var center = new THREE.Vector3(),\r\n extents = new THREE.Vector3(),\r\n v0 = new THREE.Vector3(),\r\n v1 = new THREE.Vector3(),\r\n v2 = new THREE.Vector3(),\r\n f0 = new THREE.Vector3(),\r\n f1 = new THREE.Vector3(),\r\n f2 = new THREE.Vector3(),\r\n a00 = new THREE.Vector3(),\r\n a01 = new THREE.Vector3(),\r\n a02 = new THREE.Vector3(),\r\n a10 = new THREE.Vector3(),\r\n a11 = new THREE.Vector3(),\r\n a12 = new THREE.Vector3(),\r\n a20 = new THREE.Vector3(),\r\n a21 = new THREE.Vector3(),\r\n a22 = new THREE.Vector3(),\r\n plane = new THREE.Plane();\r\n\r\n return (a: THREE.Vector3, b: THREE.Vector3, c: THREE.Vector3, aabb: THREE.Box3) => {\r\n\r\n var p0: number, p1: number, p2: number, r: number;\r\n\r\n // Compute box center and extents of AABoundingBox (if not already given in that format)\r\n aabb.getCenter(center);\r\n extents.subVectors(aabb.max, center);\r\n\r\n // Translate triangle as conceptually moving AABB to origin\r\n v0.subVectors(a, center);\r\n v1.subVectors(b, center);\r\n v2.subVectors(c, center);\r\n\r\n // Compute edge vectors for triangle\r\n f0.subVectors(v1, v0);\r\n f1.subVectors(v2, v1);\r\n f2.subVectors(v0, v2);\r\n\r\n // Test axes a00..a22 (category 3)\r\n a00.set(0, -f0.z, f0.y);\r\n a01.set(0, -f1.z, f1.y);\r\n a02.set(0, -f2.z, f2.y);\r\n a10.set(f0.z, 0, -f0.x);\r\n a11.set(f1.z, 0, -f1.x);\r\n a12.set(f2.z, 0, -f2.x);\r\n a20.set(-f0.y, f0.x, 0);\r\n a21.set(-f1.y, f1.x, 0);\r\n a22.set(-f2.y, f2.x, 0);\r\n\r\n // Test axis a00\r\n p0 = v0.dot(a00);\r\n p1 = v1.dot(a00);\r\n p2 = v2.dot(a00);\r\n r = extents.y * Math.abs(f0.z) + extents.z * Math.abs(f0.y);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a01\r\n p0 = v0.dot(a01);\r\n p1 = v1.dot(a01);\r\n p2 = v2.dot(a01);\r\n r = extents.y * Math.abs(f1.z) + extents.z * Math.abs(f1.y);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a02\r\n p0 = v0.dot(a02);\r\n p1 = v1.dot(a02);\r\n p2 = v2.dot(a02);\r\n r = extents.y * Math.abs(f2.z) + extents.z * Math.abs(f2.y);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a10\r\n p0 = v0.dot(a10);\r\n p1 = v1.dot(a10);\r\n p2 = v2.dot(a10);\r\n r = extents.x * Math.abs(f0.z) + extents.z * Math.abs(f0.x);\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a11\r\n p0 = v0.dot(a11);\r\n p1 = v1.dot(a11);\r\n p2 = v2.dot(a11);\r\n r = extents.x * Math.abs(f1.z) + extents.z * Math.abs(f1.x);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a12\r\n p0 = v0.dot(a12);\r\n p1 = v1.dot(a12);\r\n p2 = v2.dot(a12);\r\n r = extents.x * Math.abs(f2.z) + extents.z * Math.abs(f2.x);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a20\r\n p0 = v0.dot(a20);\r\n p1 = v1.dot(a20);\r\n p2 = v2.dot(a20);\r\n r = extents.x * Math.abs(f0.y) + extents.y * Math.abs(f0.x);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a21\r\n p0 = v0.dot(a21);\r\n p1 = v1.dot(a21);\r\n p2 = v2.dot(a21);\r\n r = extents.x * Math.abs(f1.y) + extents.y * Math.abs(f1.x);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test axis a22\r\n p0 = v0.dot(a22);\r\n p1 = v1.dot(a22);\r\n p2 = v2.dot(a22);\r\n r = extents.x * Math.abs(f2.y) + extents.y * Math.abs(f2.x);\r\n\r\n if (Math.max(-Math.max(p0, p1, p2), Math.min(p0, p1, p2)) > r) {\r\n\r\n return false; // Axis is a separating axis\r\n\r\n }\r\n\r\n // Test the three axes corresponding to the face normals of AABB b (category 1).\r\n // Exit if...\r\n // ... [-extents.x, extents.x] and [min(v0.x,v1.x,v2.x), max(v0.x,v1.x,v2.x)] do not overlap\r\n if (Math.max(v0.x, v1.x, v2.x) < -extents.x || Math.min(v0.x, v1.x, v2.x) > extents.x) {\r\n\r\n return false;\r\n\r\n }\r\n // ... [-extents.y, extents.y] and [min(v0.y,v1.y,v2.y), max(v0.y,v1.y,v2.y)] do not overlap\r\n if (Math.max(v0.y, v1.y, v2.y) < -extents.y || Math.min(v0.y, v1.y, v2.y) > extents.y) {\r\n\r\n return false;\r\n\r\n }\r\n // ... [-extents.z, extents.z] and [min(v0.z,v1.z,v2.z), max(v0.z,v1.z,v2.z)] do not overlap\r\n if (Math.max(v0.z, v1.z, v2.z) < -extents.z || Math.min(v0.z, v1.z, v2.z) > extents.z) {\r\n\r\n return false;\r\n\r\n }\r\n\r\n return aabb.intersectsPlane(plane.setFromCoplanarPoints(a, b, c));\r\n\r\n };\r\n })();\r\n\r\n export function RotateCC(target: k, angleRad: number, origin?: IVertex2) {\r\n var ox = 0,\r\n oy = 0,\r\n cos = Math.cos(angleRad),\r\n sin = Math.sin(angleRad);\r\n\r\n if (origin) {\r\n ox = origin.x;\r\n oy = origin.y;\r\n }\r\n\r\n var dx = target.x - ox,\r\n dy = target.y - oy,\r\n x = ox + dx * cos - dy * sin,\r\n y = oy + dx * sin + dy * cos;\r\n\r\n target.x = x;\r\n target.y = y;\r\n\r\n return target;\r\n }\r\n\r\n export function ProjectVectorToClosestAxis(v: k, minDistance = 0) {\r\n var dx: number, dy: number;\r\n\r\n if (Math.abs(v.x) > Math.abs(v.y)) {\r\n dx = v.x > 0 ? 1 : -1;\r\n dy = 0;\r\n } else {\r\n dx = 0;\r\n dy = v.y > 0 ? 1 : -1;\r\n }\r\n\r\n var dot = Math.max(minDistance, v.x * dx + v.y * dy);\r\n\r\n v.x = dx * dot;\r\n v.y = dy * dot;\r\n\r\n return v;\r\n }\r\n\r\n export function ToClosestAxis(v: k) {\r\n if (Math.abs(v.x) > Math.abs(v.y)) {\r\n v.x = v.x > 0 ? 1 : -1;\r\n v.y = 0;\r\n } else {\r\n v.x = 0;\r\n v.y = v.y > 0 ? 1 : -1;\r\n }\r\n return v;\r\n }\r\n\r\n export function CrossProd(a: IVertex2, b: IVertex2) {\r\n return a.x * b.y - a.y * b.x;\r\n }\r\n\r\n export function DotProd(a: IVertex2, b: IVertex2) {\r\n return a.x * b.x + a.y * b.y;\r\n }\r\n\r\n //Angle in radians from v1 to v2 in counter clockwise direction [-pi .. +pi]\r\n export function GetCCAngleRad(a: IVertex2, b: IVertex2) {\r\n // |A·B| = |A| |B| COS(θ)\r\n // |A×B| = |A| |B| SIN(θ)\r\n\r\n return Math.atan2(CrossProd(a, b), DotProd(a, b));\r\n\r\n }\r\n\r\n //converts degree angle to [0 .. +360]\r\n export function DegreeToPositive(deg: number) {\r\n return (deg % 360 + 360) % 360;\r\n }\r\n\r\n //converts degree angle to [-180 .. +180]\r\n export function ClampDegree(deg: number) {\r\n deg = DegreeToPositive(deg);\r\n return deg > 180 ? deg - 360 : deg;\r\n }\r\n\r\n export function PointsToPath(points: { x: number, y: number, z?: number }[], precision = 100) {\r\n var path = new ClipperLib.Path();\r\n\r\n if (points && points.length) {\r\n for (var i = 0, l = points.length; i < l; i++) {\r\n var p = points[i];\r\n path.push(new ClipperLib.IntPoint(Math.round(p.x * precision), Math.round(p.y * precision), Math.round((p.z || 0) * precision)));\r\n }\r\n }\r\n\r\n return path;\r\n }\r\n\r\n export function PointsToPaths(points: { x: number, y: number, z?: number }[][], precision = 100) {\r\n var paths = new ClipperLib.Paths();\r\n\r\n if (points && points.length) {\r\n for (var i = 0, l = points.length; i < l; i++) {\r\n paths.push(PointsToPath(points[i], precision));\r\n }\r\n }\r\n\r\n return paths;\r\n }\r\n\r\n export function PathToPoints(path: ClipperLib.Path, precision = 100) {\r\n var pts: THREE.Vector3[] = [];\r\n\r\n if (path && path.length) {\r\n for (var i = 0, l = path.length; i < l; i++) {\r\n var p = path[i];\r\n pts.push(new THREE.Vector3(p.X / precision, p.Y / precision, p.Z / precision));\r\n }\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n export function PathsToPoints(paths: ClipperLib.Paths, precision = 100) {\r\n return paths.map(path => PathToPoints(path, precision));\r\n }\r\n\r\n export function extractPolygons(node: ClipperLib.PolyNode, collection?: ClipperLib.Path[][]) {\r\n if (!node)\r\n return [];\r\n\r\n if (!collection)\r\n collection = [];\r\n\r\n var childs = node.Childs();\r\n\r\n if (node.IsHole || node.Parent == null) {\r\n if (childs && childs.length) {\r\n for (var i = childs.length; i--;) {\r\n extractPolygons(childs[i], collection);\r\n }\r\n }\r\n } else {\r\n var contour = node.Contour();\r\n\r\n if (!node.IsOpen && contour && contour.length) {\r\n\r\n var isClockwise = !ClipperLib.Clipper.Orientation(contour);\r\n if (isClockwise)\r\n contour.reverse();\r\n\r\n var currentPolygons = [contour];\r\n\r\n if (childs && childs.length) {\r\n for (var i = childs.length; i--;) {\r\n var nodeChild = childs[i],\r\n childContour = nodeChild.Contour();\r\n if (nodeChild.IsHole()) {\r\n var childIsClockwise = !ClipperLib.Clipper.Orientation(childContour);\r\n if (!childIsClockwise)\r\n childContour.reverse();\r\n\r\n currentPolygons.push(childContour);\r\n var childChilds = nodeChild.Childs();\r\n\r\n if (childChilds && childChilds.length) {\r\n for (var j = childChilds.length; j--;)\r\n extractPolygons(childChilds[j], collection);\r\n }\r\n } else\r\n extractPolygons(nodeChild, collection);\r\n }\r\n }\r\n\r\n collection.push(currentPolygons);\r\n }\r\n }\r\n\r\n return collection;\r\n }\r\n\r\n export function calculateTriangulatedPolygons(node: ClipperLib.PolyNode, collection?: ClipperLib.Path[][]) {\r\n\r\n }\r\n\r\n export function DebugPolygons(closedPolys: THREE.Vector3[][], openPolys: THREE.Vector3[][], points: THREE.Vector4[], key?: string) {\r\n\r\n var datas: SolarProTool.DebugPolygonData[] = [];\r\n\r\n if (closedPolys && closedPolys.length) {\r\n closedPolys.forEach(poly => {\r\n datas.push({\r\n Color: null,\r\n Vertices: poly,\r\n Closed: true,\r\n Radius: 0\r\n });\r\n });\r\n }\r\n\r\n if (openPolys && openPolys.length) {\r\n openPolys.forEach(poly => {\r\n datas.push({\r\n Color: null,\r\n Vertices: poly,\r\n Closed: false,\r\n Radius: 0\r\n });\r\n });\r\n }\r\n\r\n if (points && points.length) {\r\n var rd: { [r: number]: THREE.Vector3[] } = {};\r\n points.forEach(p => {\r\n if (!rd[p.w])\r\n rd[p.w] = [];\r\n rd[p.w].push(new THREE.Vector3(p.x, p.y, p.z));\r\n });\r\n\r\n Object.keys(rd).forEach(r => {\r\n var radius = +r;\r\n if (radius > 0) {\r\n datas.push({\r\n Color: null,\r\n Vertices: rd[radius],\r\n Closed: false,\r\n Radius: radius\r\n });\r\n }\r\n });\r\n }\r\n\r\n SolarProTool.Ajax(\"WebServices/Anordnung3DService.asmx\").Call(\"SaveDebugPolygon\").Data({ datas: datas }).CallBack(s => {\r\n if (key)\r\n console.log(key);\r\n console.log(s);\r\n });\r\n }\r\n\r\n export function GetTriangles(mesh: THREE.Mesh): THREE.Vector3[][] {\r\n if (!mesh || !mesh.geometry)\r\n return [];\r\n\r\n var vertices: THREE.Vector3[][] = [];\r\n\r\n traverseMeshTriangles(mesh, (p1, p2, p3) => {\r\n vertices.push([p1.clone(), p2.clone(), p3.clone()]);\r\n return true;\r\n });\r\n\r\n return vertices;\r\n\r\n //var faces: number[][] = [],\r\n // vertices: THREE.Vector3[] = [];\r\n\r\n //if ((mesh.geometry).isBufferGeometry) {\r\n // var geometry = mesh.geometry;\r\n // var indices = (geometry.index !== null ? geometry.index.array : undefined) as number[];\r\n // var attributes = geometry.attributes;\r\n // var positions = attributes.position.array as number[];\r\n\r\n // for (var i = 0; i < positions.length; i += 3)\r\n // vertices.push(new THREE.Vector3().fromArray(positions, i));\r\n\r\n // var groups = geometry.groups;\r\n\r\n // if (groups.length > 0) {\r\n // for (var i = 0; i < groups.length; i++) {\r\n // var group = groups[i];\r\n\r\n // var start = group.start;\r\n // var count = group.count;\r\n\r\n // for (var j = start, jl = start + count; j < jl; j += 3) {\r\n\r\n // if (indices !== undefined) {\r\n // faces.push([indices[j], indices[j + 1], indices[j + 2]]);\r\n // } else {\r\n // faces.push([j, j + 1, j + 2]);\r\n // }\r\n // }\r\n // }\r\n // } else {\r\n // if (indices !== undefined) {\r\n // for (var i = 0; i < indices.length; i += 3) {\r\n // faces.push([indices[i], indices[i + 1], indices[i + 2]]);\r\n // }\r\n\r\n // } else {\r\n // for (var i = 0; i < positions.length / 3; i += 3) {\r\n // faces.push([i, i + 1, i + 2]);\r\n // }\r\n // }\r\n // }\r\n //} else {\r\n // var geo = mesh.geometry;\r\n // vertices = geo.vertices;\r\n // for (var i = 0, l = geo.faces.length; i < l; i++) {\r\n // var face = geo.faces[i];\r\n // faces.push([face.a, face.b, face.c]);\r\n // }\r\n //}\r\n\r\n //return faces.map(face => {\r\n // return [vertices[face[0]], vertices[face[1]], vertices[face[2]]];\r\n //});\r\n }\r\n\r\n export function TrianglesToSurfacePolygons(triangles: THREE.Vector3[][]) {\r\n var pk: { [k: string]: { normal: THREE.Vector4, triangles: THREE.Vector3[][] } } = {},\r\n n = new THREE.Vector3();\r\n\r\n for (var i = triangles.length; i--;) {\r\n var triangle = triangles[i];\r\n getNormal(triangle[0], triangle[1], triangle[2], n);\r\n if (n.z === 0)\r\n n.set(0, 0, 1);\r\n\r\n var d = n.dot(triangle[0]),\r\n //k = `${n.x.toFixed(1)}x${n.y.toFixed(1)}x${n.z.toFixed(1)}`;\r\n k = `${n.x.toFixed(2)}x${n.y.toFixed(2)}x${n.z.toFixed(2)}x${Math.round(d / 10) * 10}`;\r\n\r\n if (!pk[k])\r\n pk[k] = { normal: new THREE.Vector4(n.x, n.y, n.z, d), triangles: [] };\r\n\r\n pk[k].triangles.push(triangle);\r\n }\r\n\r\n var result: { plane: THREE.Vector4, polygons: ClipperLib.Paths }[] = [];\r\n\r\n for (var k in pk) {\r\n var trianglePaths = new ClipperLib.Paths(),\r\n trs = pk[k].triangles;\r\n\r\n for (var i = trs.length; i--;) {\r\n var tr = trs[i],\r\n trianglePath = new ClipperLib.Path();\r\n for (var j = 0, l = tr.length; j < l; j++) {\r\n var p = tr[j];\r\n trianglePath.push(new ClipperLib.IntPoint(Math.round(p.x), Math.round(p.y), Math.round(p.z)));\r\n }\r\n trianglePaths.push(trianglePath);\r\n }\r\n\r\n var c = new ClipperLib.Clipper();\r\n c.AddPaths(trianglePaths, ClipperLib.PolyType.ptSubject, true);\r\n var union = new ClipperLib.Paths();\r\n c.Execute(ClipperLib.ClipType.ctUnion, union, ClipperLib.PolyFillType.pftNonZero, ClipperLib.PolyFillType.pftNonZero);\r\n\r\n result.push({ plane: pk[k].normal, polygons: union });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n export function ProjectPolygonsToSurface(polygon: THREE.Vector3[], surfacePolygons: { plane: THREE.Vector4, polygons: ClipperLib.Paths }[], targetBounds?: THREE.Box3) {\r\n var result: { normal: THREE.Vector3, points: THREE.Vector3[] }[] = [];\r\n\r\n if (!polygon)\r\n return result;\r\n\r\n if (!targetBounds)\r\n targetBounds = new THREE.Box3();\r\n\r\n var borderPath = new ClipperLib.Path();\r\n polygon.forEach(p => {\r\n borderPath.push(new ClipperLib.IntPoint(Math.round(p.x), Math.round(p.y), Math.round(p.z)));\r\n });\r\n\r\n var n = new THREE.Vector3();\r\n\r\n for (var i = surfacePolygons.length; i--;) {\r\n var surface = surfacePolygons[i];\r\n\r\n n.set(surface.plane.x, surface.plane.y, surface.plane.z);\r\n\r\n var d = surface.plane.w;\r\n\r\n var c = new ClipperLib.Clipper();\r\n c.AddPath(borderPath, ClipperLib.PolyType.ptSubject, true);\r\n c.AddPaths(surface.polygons, ClipperLib.PolyType.ptClip, true);\r\n var intersected = new ClipperLib.Paths();\r\n c.Execute(ClipperLib.ClipType.ctIntersection, intersected, ClipperLib.PolyFillType.pftNonZero, ClipperLib.PolyFillType.pftNonZero);\r\n\r\n if (intersected && intersected.length) {\r\n intersected.forEach(inter => {\r\n if (!ClipperLib.Clipper.Orientation(inter))\r\n inter.reverse();\r\n result.push({\r\n normal: n.clone(), points: inter.map(pt => {\r\n var rp = new THREE.Vector3(pt.X, pt.Y, (-n.x * pt.X - n.y * pt.Y + d) / n.z);\r\n targetBounds.expandByPoint(rp);\r\n return rp;\r\n })\r\n });\r\n });\r\n }\r\n }\r\n\r\n //var r = result.slice(),\r\n // sp = surfacePolygons.map(s => s.polygons.map(ply => ply.map(\r\n // p => new THREE.Vector3(p.X, p.Y, (-s.plane.x * p.X - s.plane.y * p.Y + s.plane.w) / s.plane.z))));\r\n //sp.forEach(spp => { r = r.concat(spp); });\r\n //DebugPolygons(r, null, null, \"GetPolygonsByBorder\");\r\n\r\n return result;\r\n }\r\n\r\n export function TextureFromImageData(imagedata: ImageData): THREE.Texture {\r\n\r\n var canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d');\r\n canvas.width = imagedata.width;\r\n canvas.height = imagedata.height;\r\n ctx.putImageData(imagedata, 0, 0);\r\n\r\n var image = new Image();\r\n image.src = canvas.toDataURL();\r\n\r\n //document.body.appendChild(image);\r\n\r\n var texture = new THREE.Texture(image);\r\n texture.format = THREE.RGBAFormat;\r\n texture.needsUpdate = true;\r\n\r\n return texture;\r\n }\r\n\r\n export function TextureFromBytes(buffer: ArrayBuffer, isJPEG: boolean): THREE.Texture {\r\n var imageBlob = new Blob([buffer], { type: isJPEG ? \"image/jpeg\" : \"image/png\" }),\r\n image = new Image(),\r\n texture = new THREE.Texture(image);\r\n\r\n image.src = URL.createObjectURL(imageBlob);\r\n image.onload = () => {\r\n image.onload = null;\r\n texture.needsUpdate = true;\r\n };\r\n\r\n //document.body.appendChild(image);\r\n\r\n // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\r\n texture.format = isJPEG ? THREE.RGBFormat : THREE.RGBAFormat;\r\n\r\n return texture;\r\n }\r\n\r\n export function Dxt1TextureFromBytes(bytes: Uint8Array, width: number, height: number): THREE.Texture {\r\n var texture: THREE.Texture;\r\n\r\n if (Detector.webglParameters.compressedTexture) {\r\n texture = new THREE.CompressedTexture();\r\n texture.image = [];\r\n texture.image.width = width;\r\n texture.image.height = height;\r\n texture.mipmaps = [\r\n {\r\n data: bytes as any,\r\n width: width,\r\n height: height\r\n }\r\n ];\r\n texture.magFilter = texture.minFilter = THREE.LinearFilter;\r\n texture.generateMipmaps = false;\r\n //texture.minFilter = THREE.LinearMipMapLinearFilter;\r\n texture.format = THREE.RGBA_S3TC_DXT1_Format as any;\r\n texture.needsUpdate = true;\r\n } else {\r\n var imageDataView = new DataView(bytes.buffer, 0, bytes.length);\r\n var rgbaData = GMapsUtils.decodeDXT(imageDataView, width, height, 'dxt1') as Uint8Array;\r\n texture = new THREE.DataTexture(rgbaData,\r\n width,\r\n height,\r\n THREE.RGBAFormat,\r\n THREE.UnsignedByteType,\r\n THREE.UVMapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.ClampToEdgeWrapping,\r\n THREE.LinearFilter,\r\n THREE.LinearFilter);\r\n texture.generateMipmaps = false;\r\n texture.needsUpdate = true;\r\n }\r\n\r\n //var imageDataView = new DataView(meshData.texture.bytes.buffer, 0, meshData.texture.bytes.length);\r\n //var rgbaData = dxtDecoder(imageDataView, meshData.texture.width, meshData.texture.height, 'dxt1') as Uint8Array;\r\n //var imageData = new ImageData(new Uint8ClampedArray(rgbaData.buffer), meshData.texture.width, meshData.texture.height);\r\n //texture = spt.ThreeJs.utils.TextureFromImageData(imageData);\r\n //texture.magFilter = texture.minFilter = THREE.LinearFilter;\r\n //texture.generateMipmaps = false;\r\n //flipY = true;\r\n\r\n return texture;\r\n\r\n //var texDatas = THREE.DDSLoader.parse(buffer, true),\r\n // compressedTexture = new THREE.CompressedTexture(texDatas.mipmaps, texDatas.width, texDatas.height);\r\n\r\n //if (texDatas.mipmapCount === 1)\r\n // compressedTexture.minFilter = THREE.LinearFilter;\r\n\r\n //compressedTexture.format = texDatas.format as any;\r\n //compressedTexture.needsUpdate = true;\r\n\r\n //return compressedTexture;\r\n }\r\n\r\n export var traverseMeshTriangles = (() => {\r\n var vA = new THREE.Vector3();\r\n var vB = new THREE.Vector3();\r\n var vC = new THREE.Vector3();\r\n\r\n var tempA = new THREE.Vector3();\r\n var tempB = new THREE.Vector3();\r\n var tempC = new THREE.Vector3();\r\n\r\n return (mesh: THREE.Mesh, trFn: (p1: THREE.Vector3, p2: THREE.Vector3, p3: THREE.Vector3) => boolean) => {\r\n if (!mesh || !trFn || !mesh.geometry)\r\n return;\r\n\r\n let { geometry, material, matrixWorld } = mesh,\r\n drawMode = THREE.TrianglesDrawMode; //mesh.drawMode\r\n\r\n if ((geometry as THREE.BufferGeometry).isBufferGeometry) {\r\n var bufferGeometry = geometry;\r\n var a: number, b: number, c: number;\r\n var index = bufferGeometry.index;\r\n var position = bufferGeometry.attributes.position as THREE.BufferAttribute;\r\n var groups = bufferGeometry.groups;\r\n var drawRange = bufferGeometry.drawRange;\r\n var i: number, j: number, il: number, jl: number;\r\n var group: { start: number, count: number, materialIndex?: number };\r\n var start: number, end: number;\r\n\r\n if (index !== null) {\r\n // indexed buffer geometry\r\n\r\n if (mesh.userData && mesh.userData.octantsToExclude && mesh.userData.octantsToExclude.length) {\r\n //GM Mesh\r\n\r\n var octantsToExclude = mesh.userData.octantsToExclude as number[];\r\n\r\n start = Math.max(0, drawRange.start);\r\n end = Math.min(index.count, (drawRange.start + drawRange.count));\r\n\r\n for (j = start, jl = end; j < jl; j++) {\r\n\r\n if (i & 1) {\r\n a = index.getX(j);\r\n b = index.getX(j + 2);\r\n c = index.getX(j + 1);\r\n } else {\r\n a = index.getX(j);\r\n b = index.getX(j + 1);\r\n c = index.getX(j + 2);\r\n }\r\n\r\n if (a === b || a === c || b === c)\r\n continue;\r\n\r\n var w = position.getW(a);\r\n\r\n if (isNaN(w) || octantsToExclude.indexOf(w) >= 0)\r\n continue;\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n }\r\n else if (Array.isArray(material)) {\r\n\r\n for (i = 0, il = groups.length; i < il; i++) {\r\n\r\n group = groups[i];\r\n\r\n start = Math.max(group.start, drawRange.start);\r\n end = Math.min((group.start + group.count), (drawRange.start + drawRange.count));\r\n\r\n if (drawMode === THREE.TriangleStripDrawMode) {\r\n for (j = start, jl = end; j < jl; j++) {\r\n\r\n if (i & 1) {\r\n a = index.getX(j);\r\n b = index.getX(j + 2);\r\n c = index.getX(j + 1);\r\n } else {\r\n a = index.getX(j);\r\n b = index.getX(j + 1);\r\n c = index.getX(j + 2);\r\n }\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n } else {\r\n for (j = start, jl = end; j < jl; j += 3) {\r\n\r\n a = index.getX(j);\r\n b = index.getX(j + 1);\r\n c = index.getX(j + 2);\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n }\r\n }\r\n\r\n }\r\n else {\r\n\r\n start = Math.max(0, drawRange.start);\r\n end = Math.min(index.count, (drawRange.start + drawRange.count));\r\n\r\n if (drawMode === THREE.TriangleStripDrawMode) {\r\n for (i = start, il = end; i < il; i++) {\r\n if (i & 1) {\r\n a = index.getX(i);\r\n b = index.getX(i + 2);\r\n c = index.getX(i + 1);\r\n } else {\r\n a = index.getX(i);\r\n b = index.getX(i + 1);\r\n c = index.getX(i + 2);\r\n }\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n } else {\r\n for (i = start, il = end; i < il; i += 3) {\r\n\r\n a = index.getX(i);\r\n b = index.getX(i + 1);\r\n c = index.getX(i + 2);\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n }\r\n }\r\n\r\n }\r\n else if (position !== undefined) {\r\n\r\n // non-indexed buffer geometry\r\n\r\n if (Array.isArray(material)) {\r\n\r\n for (i = 0, il = groups.length; i < il; i++) {\r\n\r\n group = groups[i];\r\n\r\n start = Math.max(group.start, drawRange.start);\r\n end = Math.min((group.start + group.count), (drawRange.start + drawRange.count));\r\n\r\n if (drawMode === THREE.TriangleStripDrawMode) {\r\n for (j = start, jl = end; j < jl; j++) {\r\n\r\n if (i & 1) {\r\n a = j;\r\n b = j + 2;\r\n c = j + 1;\r\n } else {\r\n a = j;\r\n b = j + 1;\r\n c = j + 2;\r\n }\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n } else {\r\n for (j = start, jl = end; j < jl; j += 3) {\r\n\r\n a = j;\r\n b = j + 1;\r\n c = j + 2;\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n }\r\n }\r\n\r\n } else {\r\n\r\n start = Math.max(0, drawRange.start);\r\n end = Math.min(position.count, (drawRange.start + drawRange.count));\r\n\r\n if (drawMode === THREE.TriangleStripDrawMode) {\r\n for (i = start, il = end; i < il; i++) {\r\n\r\n if (i & 1) {\r\n a = i;\r\n b = i + 2;\r\n c = i + 1;\r\n } else {\r\n a = i;\r\n b = i + 1;\r\n c = i + 2;\r\n }\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n } else {\r\n for (i = start, il = end; i < il; i += 3) {\r\n\r\n a = i;\r\n b = i + 1;\r\n c = i + 2;\r\n\r\n if (!trFn(vA.fromBufferAttribute(position, a).applyMatrix4(matrixWorld), vB.fromBufferAttribute(position, b).applyMatrix4(matrixWorld), vC.fromBufferAttribute(position, c).applyMatrix4(matrixWorld)))\r\n return;\r\n\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if ((geometry as THREE.Geometry).isGeometry) {\r\n var geo = geometry;\r\n var fvA: THREE.Vector3, fvB: THREE.Vector3, fvC: THREE.Vector3;\r\n var isMultiMaterial = Array.isArray(material);\r\n\r\n var vertices = geo.vertices;\r\n var faces = geo.faces;\r\n\r\n for (var f = 0, fl = faces.length; f < fl; f++) {\r\n\r\n var face = faces[f];\r\n var faceMaterial = isMultiMaterial ? material[face.materialIndex] : material;\r\n\r\n if (faceMaterial === undefined) continue;\r\n\r\n fvA = vertices[face.a];\r\n fvB = vertices[face.b];\r\n fvC = vertices[face.c];\r\n\r\n if (faceMaterial.morphTargets === true) {\r\n\r\n var morphTargets = geo.morphTargets;\r\n var morphInfluences = mesh.morphTargetInfluences;\r\n\r\n vA.set(0, 0, 0);\r\n vB.set(0, 0, 0);\r\n vC.set(0, 0, 0);\r\n\r\n for (var t = 0, tl = morphTargets.length; t < tl; t++) {\r\n\r\n var influence = morphInfluences[t];\r\n\r\n if (influence === 0) continue;\r\n\r\n var targets = morphTargets[t].vertices;\r\n\r\n vA.addScaledVector(tempA.subVectors(targets[face.a], fvA), influence);\r\n vB.addScaledVector(tempB.subVectors(targets[face.b], fvB), influence);\r\n vC.addScaledVector(tempC.subVectors(targets[face.c], fvC), influence);\r\n\r\n }\r\n\r\n vA.add(fvA);\r\n vB.add(fvB);\r\n vC.add(fvC);\r\n } else {\r\n vA.copy(fvA);\r\n vB.copy(fvB);\r\n vC.copy(fvC);\r\n }\r\n\r\n if (!trFn(vA.applyMatrix4(matrixWorld), vB.applyMatrix4(matrixWorld), vC.applyMatrix4(matrixWorld)))\r\n return;\r\n }\r\n\r\n }\r\n\r\n };\r\n })();\r\n\r\n export var cutTriangleByPlane = (() => {\r\n var i1 = new THREE.Vector3(),\r\n i2 = new THREE.Vector3(),\r\n line = new THREE.Line3();\r\n\r\n return (plane: THREE.Plane, trianglePoints: THREE.Vector3[]) => {\r\n var da = plane.distanceToPoint(trianglePoints[0]),\r\n db = plane.distanceToPoint(trianglePoints[1]),\r\n dc = plane.distanceToPoint(trianglePoints[2]),\r\n pos0 = Math.sign(da),\r\n pos1 = Math.sign(db),\r\n pos2 = Math.sign(dc),\r\n hasZero = pos0 * pos1 * pos2 === 0,\r\n sumPos = pos0 + pos1 + pos2,\r\n lpIdx: number;\r\n\r\n if ((pos0 === pos1 && pos1 === pos2) || (hasZero && sumPos !== 0))\r\n return [trianglePoints];\r\n\r\n var cutThrough = sumPos === 0;\r\n\r\n if (cutThrough) {\r\n //cut through point index\r\n lpIdx = pos0 === 0 ? 0 : pos1 === 0 ? 1 : 2;\r\n } else {\r\n // Find lonely point index\r\n lpIdx = pos0 === pos1 ? 2 : pos0 === pos2 ? 1 : 0;\r\n }\r\n\r\n // Set previous point in relation to front face order\r\n var prevPoint = lpIdx - 1;\r\n if (prevPoint === -1) prevPoint = 2;\r\n // Set next point in relation to front face order\r\n var nextPoint = lpIdx + 1;\r\n if (nextPoint === 3) nextPoint = 0;\r\n\r\n if (cutThrough) {\r\n /* |\r\n * |P0\r\n * | /|\\\r\n * | / | \\ \r\n * | / | \\ \r\n * | / | \\\r\n * | / | \\\r\n * y| / | \\\r\n * | P2/__ ___|_____ \\P1\r\n * | |I1\r\n * | |\r\n * |___________________\r\n */\r\n\r\n // Get the 1 intersection point\r\n var newPoint = plane.intersectLine(line.set(trianglePoints[prevPoint], trianglePoints[nextPoint]), i1);\r\n if (newPoint) {\r\n return [\r\n [trianglePoints[lpIdx], trianglePoints[nextPoint], newPoint],\r\n [trianglePoints[lpIdx], newPoint, trianglePoints[prevPoint]]\r\n ];\r\n }\r\n } else {\r\n /*\r\n * | | /|\r\n * | | / |P1 \r\n * | |/ | \r\n * | I1| |\r\n * | /| |\r\n * y| / | |\r\n * | P0/__|___|P2\r\n * | |I2\r\n * | |\r\n * |___________________\r\n */\r\n\r\n // Get the 2 intersection points\r\n var newPointPrev = plane.intersectLine(line.set(trianglePoints[lpIdx], trianglePoints[prevPoint]), i1);\r\n var newPointNext = plane.intersectLine(line.set(trianglePoints[lpIdx], trianglePoints[nextPoint]), i2);\r\n\r\n if (newPointPrev && newPointNext) {\r\n return [\r\n [trianglePoints[lpIdx], newPointNext, newPointPrev],\r\n [trianglePoints[prevPoint], newPointPrev, trianglePoints[nextPoint]],\r\n [trianglePoints[nextPoint], newPointPrev, newPointNext]\r\n ];\r\n }\r\n }\r\n\r\n return [trianglePoints];\r\n };\r\n })();\r\n\r\n export var projectedVolumeFromTriangle = (() => {\r\n var projTr = new THREE.Triangle(),\r\n i1 = new THREE.Vector3(),\r\n i2 = new THREE.Vector3(),\r\n line = new THREE.Line3();\r\n\r\n //var getProjectedArea = (pl: THREE.Plane, tp: THREE.Vector3[], d0: number, d1: number, d2: number) => {\r\n // projTr.a.copy(pl.normal).multiplyScalar(-d0).add(tp[0]);\r\n // projTr.b.copy(pl.normal).multiplyScalar(-d1).add(tp[1]);\r\n // projTr.c.copy(pl.normal).multiplyScalar(-d2).add(tp[2]);\r\n // return projTr.getArea();\r\n //};\r\n\r\n var projVolume = (pl: THREE.Plane, tp: THREE.Vector3[], maxDist: number) => {\r\n var d0 = pl.distanceToPoint(tp[0]),\r\n d1 = pl.distanceToPoint(tp[1]),\r\n d2 = pl.distanceToPoint(tp[2]);\r\n\r\n projTr.a.copy(pl.normal).multiplyScalar(-d0).add(tp[0]);\r\n projTr.b.copy(pl.normal).multiplyScalar(-d1).add(tp[1]);\r\n projTr.c.copy(pl.normal).multiplyScalar(-d2).add(tp[2]);\r\n\r\n return Math.min(maxDist, (Math.abs(d0) + Math.abs(d1) + Math.abs(d2)) / 3) * projTr.getArea();\r\n };\r\n var projVolumeFlat = (pl: THREE.Plane, tp: THREE.Vector3[], maxDist: number) => {\r\n var d0 = pl.distanceToPoint(tp[0]),\r\n d1 = pl.distanceToPoint(tp[1]),\r\n d2 = pl.distanceToPoint(tp[2]);\r\n\r\n projTr.a.copy(tp[0]);\r\n projTr.b.copy(tp[1]);\r\n projTr.c.copy(tp[2]);\r\n\r\n return Math.min(maxDist, (Math.abs(d0) + Math.abs(d1) + Math.abs(d2)) / 3) * projTr.getArea();\r\n };\r\n\r\n return (plane: THREE.Plane, trianglePoints: THREE.Vector3[], maxDistance: number, flat?: boolean) => {\r\n var da = plane.distanceToPoint(trianglePoints[0]),\r\n db = plane.distanceToPoint(trianglePoints[1]),\r\n dc = plane.distanceToPoint(trianglePoints[2]),\r\n pos0 = Math.sign(da),\r\n pos1 = Math.sign(db),\r\n pos2 = Math.sign(dc),\r\n hasZero = pos0 * pos1 * pos2 === 0,\r\n sumPos = pos0 + pos1 + pos2,\r\n lpIdx: number,\r\n getProjectedVolume = flat ? projVolumeFlat : projVolume;\r\n\r\n projTr.a.copy(plane.normal).multiplyScalar(-da).add(trianglePoints[0]);\r\n projTr.b.copy(plane.normal).multiplyScalar(-db).add(trianglePoints[1]);\r\n projTr.c.copy(plane.normal).multiplyScalar(-dc).add(trianglePoints[2]);\r\n\r\n if ((pos0 === pos1 && pos1 === pos2) || (hasZero && sumPos !== 0))\r\n return getProjectedVolume(plane, trianglePoints, maxDistance);//Math.min(maxDistance, (Math.abs(da) + Math.abs(db) + Math.abs(dc)) / 3) * getProjectedArea(plane, trianglePoints, da, db, dc);\r\n\r\n var cutThrough = sumPos === 0;\r\n\r\n if (cutThrough) {\r\n //cut through point index\r\n lpIdx = pos0 === 0 ? 0 : pos1 === 0 ? 1 : 2;\r\n } else {\r\n // Find lonely point index\r\n lpIdx = pos0 === pos1 ? 2 : pos0 === pos2 ? 1 : 0;\r\n }\r\n\r\n // Set previous point in relation to front face order\r\n var prevPoint = lpIdx - 1;\r\n if (prevPoint === -1) prevPoint = 2;\r\n // Set next point in relation to front face order\r\n var nextPoint = lpIdx + 1;\r\n if (nextPoint === 3) nextPoint = 0;\r\n\r\n if (cutThrough) {\r\n /* |\r\n * |P0\r\n * | /|\\\r\n * | / | \\ \r\n * | / | \\ \r\n * | / | \\\r\n * | / | \\\r\n * y| / | \\\r\n * | P2/__ ___|_____ \\P1\r\n * | |I1\r\n * | |\r\n * |___________________\r\n */\r\n\r\n // Get the 1 intersection point\r\n var newPoint = plane.intersectLine(line.set(trianglePoints[prevPoint], trianglePoints[nextPoint]), i1);\r\n if (newPoint) {\r\n return getProjectedVolume(plane, [trianglePoints[lpIdx], trianglePoints[nextPoint], newPoint], maxDistance) +\r\n getProjectedVolume(plane, [trianglePoints[lpIdx], newPoint, trianglePoints[prevPoint]], maxDistance);\r\n //return [\r\n // [trianglePoints[lpIdx], trianglePoints[nextPoint], newPoint],\r\n // [trianglePoints[lpIdx], newPoint, trianglePoints[prevPoint]]\r\n //];\r\n }\r\n } else {\r\n /*\r\n * | | /|\r\n * | | / |P1 \r\n * | |/ | \r\n * | I1| |\r\n * | /| |\r\n * y| / | |\r\n * | P0/__|___|P2\r\n * | |I2\r\n * | |\r\n * |___________________\r\n */\r\n\r\n // Get the 2 intersection points\r\n var newPointPrev = plane.intersectLine(line.set(trianglePoints[lpIdx], trianglePoints[prevPoint]), i1);\r\n var newPointNext = plane.intersectLine(line.set(trianglePoints[lpIdx], trianglePoints[nextPoint]), i2);\r\n\r\n if (newPointPrev && newPointNext) {\r\n return getProjectedVolume(plane, [trianglePoints[lpIdx], newPointNext, newPointPrev], maxDistance) +\r\n getProjectedVolume(plane, [trianglePoints[prevPoint], newPointPrev, trianglePoints[nextPoint]], maxDistance) +\r\n getProjectedVolume(plane, [trianglePoints[nextPoint], newPointPrev, newPointNext], maxDistance);\r\n //return [\r\n // [trianglePoints[lpIdx], newPointNext, newPointPrev],\r\n // [trianglePoints[prevPoint], newPointPrev, trianglePoints[nextPoint]],\r\n // [trianglePoints[nextPoint], newPointPrev, newPointNext]\r\n //];\r\n }\r\n }\r\n\r\n return getProjectedVolume(plane, trianglePoints, maxDistance);\r\n };\r\n })();\r\n\r\n //approximate using RANSAC\r\n export var approximatePlaneFromPositionArray = (() => {\r\n var v = new THREE.Vector3(),\r\n vA = new THREE.Vector3(),\r\n vB = new THREE.Vector3(),\r\n vC = new THREE.Vector3(),\r\n pl = new THREE.Plane(),\r\n plbest = new THREE.Plane();\r\n\r\n var calcScore = (pl: THREE.Plane, pos: ArrayLike, maxDist: number) => {\r\n var score = 0;\r\n for (var j = 0, count = pos.length; j < count; j += 3) {\r\n score += Math.min(maxDist, Math.abs(pl.distanceToPoint(v.fromArray(pos, j))));\r\n }\r\n return score;\r\n };\r\n\r\n return (position: ArrayLike, minZ?: number, maxDistance = 0.25) => {\r\n pl.constant = -minZ || 0;\r\n pl.normal.set(0, 0, 1);\r\n plbest.copy(pl);\r\n\r\n if (position.length < 9)\r\n return plbest;\r\n\r\n var bestScore = calcScore(pl, position, maxDistance),\r\n iterations = 100,\r\n posCount = position.length / 3,\r\n i = 0,\r\n a: number, b: number, c: number;\r\n\r\n if (posCount <= 7) {\r\n //brute force\r\n for (a = 0; a < posCount; a++) {\r\n for (b = a + 1; b < posCount; b++) {\r\n for (c = b + 1; c < posCount; c++) {\r\n pl.setFromCoplanarPoints(vA.fromArray(position, a * 3), vB.fromArray(position, b * 3), vC.fromArray(position, c * 3));\r\n if (pl.normal.z < 0) {\r\n pl.normal.negate();\r\n pl.constant = -pl.constant;\r\n }\r\n let s = calcScore(pl, position, maxDistance);\r\n if (s < bestScore) {\r\n bestScore = s;\r\n plbest.copy(pl);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n while (i < iterations) {\r\n\r\n a = Math.floor(Math.random() * posCount);\r\n b = Math.floor(Math.random() * posCount);\r\n c = Math.floor(Math.random() * posCount);\r\n\r\n if (a === b || a === c || b === c)\r\n continue;\r\n\r\n i++;\r\n\r\n pl.setFromCoplanarPoints(vA.fromArray(position, a * 3), vB.fromArray(position, b * 3), vC.fromArray(position, c * 3));\r\n if (pl.normal.z < 0) {\r\n pl.normal.negate();\r\n pl.constant = -pl.constant;\r\n }\r\n\r\n let s = calcScore(pl, position, maxDistance);\r\n if (s < bestScore) {\r\n bestScore = s;\r\n plbest.copy(pl);\r\n }\r\n }\r\n }\r\n\r\n //console.log(`bestScore = ${bestScore}`);\r\n\r\n return plbest;\r\n\r\n };\r\n })();\r\n\r\n export function colorToGrayscale(color: THREE.Color) {\r\n var grayScale = Math.round((color.r * 0.3) + (color.g * 0.59) + (color.b * 0.11));\r\n return new THREE.Color(grayScale, grayScale, grayScale);\r\n }\r\n\r\n var _d1 = new THREE.Vector3(),\r\n _d2 = new THREE.Vector3(),\r\n _n1 = new THREE.Vector3(),\r\n _n2 = new THREE.Vector3(),\r\n _n3 = new THREE.Vector3(),\r\n _p1 = new THREE.Vector3(),\r\n _p2 = new THREE.Vector3(),\r\n _p3 = new THREE.Vector3();\r\n\r\n export function generateOffsetLinePoints(start: THREE.Vector3, end: THREE.Vector3, w: number, next?: THREE.Vector3) {\r\n var len1 = start.distanceTo(end),\r\n len2 = next ? end.distanceTo(next) : 0,\r\n dir1 = _d1.copy(end).sub(start).multiplyScalar(1 / len1),\r\n dir2 = len2 > 0 ? _d2.copy(next).sub(end).multiplyScalar(1 / len2) : dir1,\r\n n1 = _n1.set(-dir1.y, dir1.x, 0),\r\n n2 = _n2.set(-dir2.y, dir2.x, 0),\r\n n = _n3.copy(n1).add(n2),\r\n nl = n.length(),\r\n dirdot = dir1.dot(n2);\r\n\r\n if (len2 > 0 && nl > 0)\r\n n.multiplyScalar(1 / nl);\r\n else\r\n dirdot = 0;\r\n\r\n if (dirdot == 0) {\r\n //straight\r\n return [_p1.copy(n1).multiplyScalar(-w), _p2.copy(n1).multiplyScalar(w)];\r\n }\r\n\r\n var ang = n1.angleTo(n2),\r\n ta = Math.min(len1, len2, Math.tan(ang / 2) * w),\r\n tw = Math.sqrt(w * w + ta * ta);\r\n\r\n if (dirdot > 0) {\r\n //bend right\r\n return [_p1.copy(n).multiplyScalar(-tw), _p2.copy(n).multiplyScalar(w), _p3.copy(n1).multiplyScalar(w)];\r\n }\r\n\r\n //bend left\r\n return [_p1.copy(n1).multiplyScalar(-w), _p2.copy(n).multiplyScalar(-w), _p3.copy(n).multiplyScalar(tw)];\r\n }\r\n\r\n var _s = new THREE.Vector3(),\r\n _e = new THREE.Vector3(),\r\n _dir = new THREE.Vector3(),\r\n _n = new THREE.Vector3();\r\n\r\n export function generateOffsetLinePolygons(pts: { x: number, y: number, z: number }[], lineWidth: number, h = 50) {\r\n var len = pts.length - 1,\r\n result: THREE.Vector3[][] = [];\r\n\r\n for (var i = 0, j = 1; j <= len; ++i, ++j) {\r\n _s.set(pts[i].x, pts[i].y, 0)\r\n _e.set(pts[j].x, pts[j].y, 0)\r\n\r\n if (_s.distanceToSquared(_e) <= 0)\r\n continue;\r\n\r\n _dir.copy(_e).sub(_s).setZ(0).normalize();\r\n\r\n var ptsStart = spt.ThreeJs.utils.generateOffsetLinePoints(_e, _s, lineWidth, i > 0 ? _n.set(pts[i - 1].x, pts[i - 1].y, pts[i - 1].z) : null).map(p => _s.clone().add(p).setZ(h)),\r\n ptsEnd = spt.ThreeJs.utils.generateOffsetLinePoints(_s, _e, lineWidth, j < len ? _n.set(pts[j + 1].x, pts[j + 1].y, pts[j + 1].z) : null).map(p => _e.clone().add(p).setZ(h));\r\n\r\n var maxts = ArrayHelper.Max(ptsStart, (p) => _dir.dot(p)),\r\n minte = ArrayHelper.Min(ptsEnd, (p) => _dir.dot(p));\r\n\r\n if (maxts > minte) {\r\n //fix overlapping edges\r\n var t = (maxts + minte) * 0.5,\r\n dt = new THREE.Vector3();\r\n ptsStart.forEach(p => {\r\n var dot = _dir.dot(p);\r\n if (dot > t)\r\n p.add(dt.copy(_dir).multiplyScalar(t - dot));\r\n });\r\n\r\n ptsEnd.forEach(p => {\r\n var dot = _dir.dot(p);\r\n if (dot < t)\r\n p.add(dt.copy(_dir).multiplyScalar(t - dot));\r\n });\r\n }\r\n\r\n var resPts = ptsStart.concat(ptsEnd),\r\n resultPoly: THREE.Vector3[] = [],\r\n l = resPts.length;\r\n\r\n for (var i1 = l - 1, i2 = 0; i2 < l; ++i2) {\r\n //fix duplicate points\r\n if (resPts[i1].distanceToSquared(resPts[i2]) <= 0)\r\n continue;\r\n\r\n resultPoly.push(resPts[i2]);\r\n\r\n i1 = i2;\r\n }\r\n\r\n result.push(resultPoly);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n export function setMatrix4(obj: THREE.Object3D, m: THREE.Matrix4) {\r\n m.decompose(obj.position, obj.quaternion, obj.scale);\r\n obj.updateMatrix();\r\n }\r\n}\r\n\r\n(() => {\r\n THREE.CircleLineBufferGeometry = spt.ThreeJs.utils.CircleLineBufferGeometry;\r\n THREE.CircleLineBufferGeometryCollection = spt.ThreeJs.utils.CircleLineBufferGeometryCollection;\r\n var texDispose = THREE.Texture.prototype.dispose;\r\n THREE.Texture.prototype.dispose = function () {\r\n texDispose.call(this);\r\n this._isDisposed = true;\r\n };\r\n var cubetexDispose = THREE.CubeTexture.prototype.dispose;\r\n THREE.CubeTexture.prototype.dispose = function () {\r\n cubetexDispose.call(this);\r\n this._isDisposed = true;\r\n };\r\n})();\r\n\r\nif (THREE) {\r\n //check and correct crossorigin policies for safari\r\n [\"Loader\", \"ImageLoader\", \"TextureLoader\", \"CubeTextureLoader\", \"ObjectLoader\"].forEach(l => {\r\n if (THREE[l] && THREE[l].prototype && THREE[l].prototype.crossOrigin) {\r\n THREE[l].prototype.crossOrigin = null;\r\n }\r\n });\r\n\r\n if (THREE[\"Octree\"]) {\r\n THREE[\"Octree\"].prototype.rebuild = function () {\r\n\r\n var i,\r\n l,\r\n node,\r\n objectData,\r\n indexOctant,\r\n indexOctantLast,\r\n objectsUpdate = [];\r\n\r\n // check all object data for changes in position\r\n // assumes all object matrices are up to date\r\n\r\n for (i = 0, l = this.objectsData.length; i < l; i++) {\r\n\r\n objectData = this.objectsData[i];\r\n\r\n node = objectData.node;\r\n\r\n // update object\r\n\r\n objectData.update();\r\n\r\n // if position has changed since last organization of object in tree\r\n\r\n if (node instanceof spt.ThreeJs.utils.OctreeNode && !objectData.positionLast.equals(objectData.position)) {\r\n\r\n // get octant index of object within current node\r\n\r\n indexOctantLast = objectData.indexOctant;\r\n\r\n indexOctant = (node).getOctantIndex(objectData);\r\n\r\n // if object octant index has changed\r\n\r\n if (indexOctant !== indexOctantLast) {\r\n\r\n // add to update list\r\n\r\n objectsUpdate.push(objectData);\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n // update changed objects\r\n\r\n for (i = 0, l = objectsUpdate.length; i < l; i++) {\r\n\r\n objectData = objectsUpdate[i];\r\n\r\n // remove object from current node\r\n\r\n //objectData.node.removeObject( objectData );\r\n this.remove(objectData);\r\n\r\n // add object to tree root\r\n\r\n //this.root.addObject( objectData );\r\n this.add(objectData);\r\n\r\n }\r\n\r\n };\r\n }\r\n}\r\n\r\n//module THREE {\r\n// export var CircleLineBufferGeometry: typeof spt.ThreeJs.utils.CircleLineBufferGeometry = spt.ThreeJs.utils.CircleLineBufferGeometry;\r\n// export var CircleLineBufferGeometryCollection: typeof spt.ThreeJs.utils.CircleLineBufferGeometryCollection = spt.ThreeJs.utils.CircleLineBufferGeometryCollection;\r\n// var texDispose = THREE.Texture.prototype.dispose;\r\n// THREE.Texture.prototype.dispose = function () {\r\n// texDispose.call(this);\r\n// this._isDisposed = true;\r\n// };\r\n// var cubetexDispose = THREE.CubeTexture.prototype.dispose;\r\n// THREE.CubeTexture.prototype.dispose = function () {\r\n// cubetexDispose.call(this);\r\n// this._isDisposed = true;\r\n// };\r\n//}","module spt.ThreeJs.utils {\r\n\r\n THREE.ShaderLib['GmMeshShader'] = {\r\n uniforms: {\r\n map: { type: \"t\", value: null },\r\n //uvOffsetAndScale: { type: \"vec4\", value: uvOffsetAndScale },\r\n uvMatrix: { type: \"mat3\", value: new THREE.Matrix3() },\r\n exc1: { type: \"vec4\", value: new THREE.Vector4(-1, -1, -1, -1) },\r\n exc2: { type: \"vec4\", value: new THREE.Vector4(-1, -1, -1, -1) },\r\n },\r\n vertexShader: [\r\n \"precision mediump float;\",\r\n\r\n \"uniform mat4 modelViewMatrix; \",\r\n \"uniform mat4 projectionMatrix;\",\r\n //\"uniform mat4 modelMatrix;\",\r\n //\"uniform mat4 viewMatrix;\",\r\n \"uniform mat3 normalMatrix;\",\r\n \"uniform mat3 uvMatrix;\",\r\n //\"uniform vec3 cameraPosition;\",\r\n\r\n \"attribute vec4 position;\",\r\n \"attribute vec4 uv;\",\r\n \"attribute vec4 normal;\",\r\n\r\n \"varying vec2 vUv;\",\r\n \"varying vec3 vNormal;\",\r\n \"varying float vLayer;\",\r\n\r\n \"void main() {\",\r\n\r\n \"vec3 vt = uvMatrix * vec3(uv.y * 256.0 + uv.x, uv.w * 256.0 + uv.z, 1.0);\",\r\n\r\n \"vUv = vt.xy;\",\r\n\r\n \"vec3 objectNormal = vec3( normal.xyz * 2.0 - 1.0 );\",\r\n \"vec3 transformedNormal = normalMatrix * objectNormal;\",\r\n \"vNormal = normalize( transformedNormal );\",\r\n \"vLayer = position.w;\",\r\n \"gl_Position = projectionMatrix * modelViewMatrix * vec4( position.xyz, 1.0 );\",\r\n \"}\"\r\n ].join(\"\\n\"),\r\n fragmentShader: [\r\n \"precision mediump float;\",\r\n\r\n \"uniform sampler2D map;\",\r\n\r\n \"uniform vec4 exc1;\",\r\n \"uniform vec4 exc2;\",\r\n\r\n \"varying vec2 vUv;\",\r\n \"varying vec3 vNormal;\",\r\n \"varying float vLayer;\",\r\n\r\n \"vec4 is_eq(vec4 x, vec4 y) {\",\r\n \"return 1.0 - abs(sign(x - y));\",\r\n \"}\",\r\n\r\n \"void main() {\",\r\n\r\n \"vec4 vl = vec4(floor(vLayer + 0.5));\",\r\n \"vec4 ex = is_eq(vl, exc1) + is_eq(vl, exc2);\",\r\n\r\n \"if(dot(ex, vec4(1)) > 0.0) {\",\r\n \"discard;\",\r\n \"}\",\r\n\r\n \"vec3 color = texture2D(map, vUv).rgb;\",\r\n \"gl_FragColor = vec4( color, 1.0 );\",\r\n \"}\"\r\n ].join(\"\\n\")\r\n };\r\n\r\n THREE.ShaderLib['GmMeshDepthShader'] = {\r\n uniforms: {\r\n //map: { type: \"t\", value: null },\r\n //uvOffsetAndScale: { type: \"vec4\", value: uvOffsetAndScale },\r\n //uvMatrix: { type: \"mat3\", value: new THREE.Matrix3() },\r\n exc1: { type: \"vec4\", value: new THREE.Vector4(-1, -1, -1, -1) },\r\n exc2: { type: \"vec4\", value: new THREE.Vector4(-1, -1, -1, -1) },\r\n },\r\n vertexShader: [\r\n \"precision highp float;\",\r\n\r\n \"uniform mat4 modelViewMatrix;\",\r\n \"uniform mat4 projectionMatrix;\",\r\n \"uniform mat4 modelMatrix;\",\r\n //\"uniform mat4 viewMatrix;\",\r\n\r\n \"attribute vec4 position;\",\r\n\r\n \"varying float vLayer;\",\r\n \"varying float vDepth;\",\r\n\r\n \"void main() {\",\r\n \"vLayer = position.w;\",\r\n \"vec4 mPos = modelMatrix * vec4( position.xyz, 1.0 );\",\r\n \"vDepth = mPos.z;\",\r\n \"gl_Position = projectionMatrix * modelViewMatrix * vec4( position.xyz, 1.0 );\",\r\n \"}\"\r\n ].join(\"\\n\"),\r\n fragmentShader: [\r\n \"precision highp float;\",\r\n\r\n \"uniform vec4 exc1;\",\r\n \"uniform vec4 exc2;\",\r\n\r\n \"varying float vLayer;\",\r\n \"varying float vDepth;\",\r\n\r\n //\"const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\",\r\n //\"const float PackUpscale = 256. / 255.;\", // fraction -> 0..1 (including 1)\r\n //\"const float ShiftRight8 = 1. / 256.;\",\r\n\r\n //\"vec4 packDepthToRGBA( const in float v ) {\",\r\n // \"vec4 r = vec4( fract( v * PackFactors ), v );\",\r\n // \"r.yzw -= r.xyz * ShiftRight8;\", // tidy overflow\r\n // \"return r * PackUpscale;\",\r\n //\"}\",\r\n\r\n \"vec3 packDepthToRGB( const in float f ) {\",\r\n \"float b = floor(f / 256.);\",\r\n \"float g = floor((f - b * 256.));\",\r\n \"float r = floor((f - b * 256. - g) * 256.);\",\r\n \"return vec3(r, g, b) / 255.;\",\r\n \"\",\r\n \"}\",\r\n\r\n \"vec4 is_eq(vec4 x, vec4 y) {\",\r\n \"return 1.0 - abs(sign(x - y));\",\r\n \"}\",\r\n\r\n \"void main() {\",\r\n \"vec4 vl = vec4(floor(vLayer + 0.5));\",\r\n \"vec4 ex = is_eq(vl, exc1) + is_eq(vl, exc2);\",\r\n\r\n \"if(dot(ex, vec4(1)) > 0.0) {\",\r\n \"discard;\",\r\n \"}\",\r\n\r\n \"gl_FragColor = vec4(packDepthToRGB( vDepth ), 1.);\",\r\n //\"gl_FragColor = vec4(packDepthToRGB( gl_FragCoord.z ), 1.);\",\r\n \"}\"\r\n ].join(\"\\n\")\r\n };\r\n\r\n export class GmMeshMaterial extends THREE.RawShaderMaterial {\r\n\r\n texFlipY: boolean;\r\n\r\n constructor(map: THREE.Texture, texFlipY: boolean, uvOffsetAndScale: Float32Array, octantsToExclude: number[], depth?: boolean) {\r\n super();\r\n\r\n if (!octantsToExclude || !octantsToExclude.length)\r\n octantsToExclude = [-1, -1, -1, -1, -1, -1, -1, -1];\r\n\r\n while (octantsToExclude.length < 9)\r\n octantsToExclude.push(-1);\r\n\r\n var uniforms = this.uniforms = THREE.UniformsUtils.clone(depth ? THREE.ShaderLib['GmMeshDepthShader'].uniforms : THREE.ShaderLib['GmMeshShader'].uniforms);\r\n\r\n (uniforms.exc1.value as THREE.Vector4).fromArray(octantsToExclude);\r\n (uniforms.exc2.value as THREE.Vector4).fromArray(octantsToExclude, 4);\r\n\r\n if (!depth) {\r\n var sx = uvOffsetAndScale[2];\r\n var sy = uvOffsetAndScale[3];\r\n\r\n var tx = uvOffsetAndScale[0];\r\n var ty = uvOffsetAndScale[1];\r\n\r\n uniforms.map.value = map;\r\n\r\n if (texFlipY) {\r\n uniforms.uvMatrix.value.set(\r\n sx, 0, tx * sx,\r\n 0, -sy, 1 - ty * sy,\r\n 0, 0, 1\r\n );\r\n } else {\r\n uniforms.uvMatrix.value.set(\r\n sx, 0, tx * sx,\r\n 0, sy, ty * sy,\r\n 0, 0, 1\r\n );\r\n }\r\n\r\n this.vertexShader = THREE.ShaderLib['GmMeshShader'].vertexShader;\r\n this.fragmentShader = THREE.ShaderLib['GmMeshShader'].fragmentShader;\r\n } else {\r\n this.vertexShader = THREE.ShaderLib['GmMeshDepthShader'].vertexShader;\r\n this.fragmentShader = THREE.ShaderLib['GmMeshDepthShader'].fragmentShader;\r\n }\r\n\r\n this.transparent = false;\r\n this.side = THREE.FrontSide;\r\n this.depthTest = true;\r\n this.depthWrite = true;\r\n this.vertexColors = false; //THREE.NoColors;\r\n this.texFlipY = texFlipY;\r\n }\r\n }\r\n\r\n export function generateGeometryFromMeshData(meshData: IGMMeshData, keepNodeData?: boolean) {\r\n\r\n if (meshData && meshData._cachedData && meshData._cachedData.geo && meshData._cachedData.geo.isBufferGeometry) {\r\n return meshData._cachedData.geo as THREE.BufferGeometry;\r\n }\r\n\r\n if (!meshData || !meshData.vertices)\r\n return null;\r\n\r\n var vertices = meshData.vertices;\r\n\r\n //var _v = new THREE.Vector3(),\r\n // _b = new THREE.Box3();\r\n\r\n //var _w = [];\r\n\r\n //for (var j = 0; j < vertices.length; j += 8) {\r\n // var x = vertices[j];\r\n // var y = vertices[j + 1];\r\n // var z = vertices[j + 2];\r\n // var w = vertices[j + 3];\r\n // _v.set(x, y, z);\r\n // _b.expandByPoint(_v);\r\n\r\n // _w[w] = (_w[w] as number || 0) + 1;\r\n //}\r\n\r\n //console.log(\"dims:\");\r\n //console.log(JSON.stringify(octantsToExclude));\r\n //console.log(JSON.stringify(_b));\r\n //console.log(JSON.stringify(_w));\r\n //console.log(\"\");\r\n\r\n var layerBounds = meshData.layerBounds,\r\n drawMaxRange = layerBounds[3];\r\n\r\n var dataIndices = meshData.indices,\r\n indexLen = Math.min(dataIndices.length - 2, drawMaxRange),\r\n a: number, b: number, c: number, idx: number,\r\n indices = new Uint16Array(indexLen * 3);\r\n\r\n //convert from (OpenGL drawmode) Triangle Strip to Triangle List for threejs\r\n\r\n for (let i = 0; i < indexLen; i += 2) {\r\n a = dataIndices[i];\r\n b = dataIndices[i + 1];\r\n c = dataIndices[i + 2];\r\n\r\n idx = i * 3;\r\n\r\n indices[idx] = a;\r\n indices[idx + 1] = b;\r\n indices[idx + 2] = c;\r\n }\r\n\r\n for (let i = 1; i < indexLen; i += 2) {\r\n a = dataIndices[i];\r\n b = dataIndices[i + 1];\r\n c = dataIndices[i + 2];\r\n \r\n idx = i * 3;\r\n\r\n indices[idx] = a;\r\n indices[idx + 1] = c;\r\n indices[idx + 2] = b;\r\n }\r\n\r\n if (!indices.length)\r\n return;\r\n\r\n var geometry = new THREE.BufferGeometry();\r\n var interleavedBuffer = new THREE.InterleavedBuffer(vertices, 8);\r\n\r\n geometry.setAttribute('position', new THREE.InterleavedBufferAttribute(interleavedBuffer, 4, 0, false));\r\n geometry.setAttribute('uv', new THREE.InterleavedBufferAttribute(interleavedBuffer, 4, 4, false));\r\n geometry.setAttribute('normal', new THREE.BufferAttribute(meshData.normals, 4, true));\r\n\r\n geometry.setIndex(new THREE.Uint16BufferAttribute(indices, 1));\r\n //geometry.setIndex(new THREE.Uint16BufferAttribute(meshData.indices, 1)); //THREE.TriangleStripDrawMode\r\n\r\n //if (drawMaxRange > 0 && drawMaxRange < meshData.indices.length)\r\n // geometry.setDrawRange(0, drawMaxRange);\r\n\r\n if (geometry.boundingSphere === null)\r\n geometry.boundingSphere = new THREE.Sphere();\r\n\r\n if (geometry.boundingBox === null)\r\n geometry.boundingBox = new THREE.Box3();\r\n\r\n geometry.boundingBox.min.set(0, 0, 0);\r\n geometry.boundingBox.max.set(256, 256, 256);\r\n\r\n geometry.boundingBox.getBoundingSphere(geometry.boundingSphere);\r\n\r\n if (!meshData._cachedData)\r\n meshData._cachedData = {};\r\n\r\n meshData._cachedData.geo = geometry;\r\n\r\n if (!keepNodeData) {\r\n delete meshData.indices;\r\n delete meshData.layerBounds;\r\n delete meshData.normals;\r\n delete meshData.vertexAlphas;\r\n delete meshData.vertices;\r\n\r\n geometry.addEventListener(\"dispose\", () => {\r\n meshData._isDisposed = true;\r\n console.log(`geometry disposed.`);\r\n });\r\n }\r\n\r\n //console.log(`geometry build: ${drawMaxRange} vertices.`);\r\n\r\n return geometry;\r\n }\r\n\r\n export function generateMaterialFromMeshData(meshData: IGMMeshData, octantsToExclude?: number[], keepNodeData?: boolean, depthMaterial?: boolean) {\r\n //if (!meshData || !meshData.octantCounts.some((oc, i) => oc > 0 && (!octantsToExclude || octantsToExclude.indexOf(i) === -1)))\r\n // return null;\r\n\r\n if (!meshData || !meshData.octantCounts)\r\n return null;\r\n\r\n if (octantsToExclude && octantsToExclude.length) {\r\n var octantCounts = meshData.octantCounts,\r\n octantsVisible = false;\r\n\r\n for (var i = octantCounts.length; i--;) {\r\n if (octantCounts[i] > 0 && octantsToExclude.indexOf(i) === -1) {\r\n octantsVisible = true;\r\n break;\r\n }\r\n }\r\n if (!octantsVisible)\r\n return null;\r\n }\r\n\r\n var texture: THREE.Texture = null;\r\n var flipY: boolean = false;\r\n\r\n if (!depthMaterial) {\r\n if (meshData && meshData._cachedData && meshData._cachedData.tex && meshData._cachedData.tex.isTexture) {\r\n texture = meshData._cachedData.tex as THREE.Texture;\r\n flipY = !!meshData._cachedData.texFlip;\r\n } else {\r\n\r\n if (!meshData.texture)\r\n return null;\r\n\r\n flipY = false;\r\n\r\n switch (meshData.texture.textureFormat) {\r\n case 6: //dxt1\r\n texture = spt.ThreeJs.utils.Dxt1TextureFromBytes(meshData.texture.bytes, meshData.texture.width, meshData.texture.height);\r\n break;\r\n default: //jpeg\r\n texture = spt.ThreeJs.utils.TextureFromBytes(meshData.texture.bytes.buffer, true);\r\n break;\r\n }\r\n\r\n if (!meshData._cachedData)\r\n meshData._cachedData = {};\r\n\r\n meshData._cachedData.tex = texture;\r\n meshData._cachedData.texFlip = flipY;\r\n\r\n if (!keepNodeData) {\r\n delete meshData.texture.bytes;\r\n delete meshData.texture;\r\n\r\n texture.addEventListener(\"dispose\", () => {\r\n meshData._isDisposed = true;\r\n });\r\n }\r\n }\r\n }\r\n\r\n return new GmMeshMaterial(texture, flipY, meshData.uvOffsetAndScale, octantsToExclude, depthMaterial);\r\n }\r\n\r\n export interface IGmMeshUserData {\r\n north: number;\r\n east: number;\r\n south: number;\r\n west: number;\r\n path: string;\r\n octantsToExclude: number[];\r\n }\r\n\r\n export function generateMeshesFromNodeData(nodeData: IGMNodeData, octantBox: GMapsUtils.OctantBox, octantsToExclude?: number[], depthMaterial?: boolean): THREE.Mesh[] {\r\n var result: THREE.Mesh[] = [];\r\n\r\n if (!octantsToExclude)\r\n octantsToExclude = [];\r\n\r\n if (octantsToExclude.length >= 8)\r\n return result;\r\n\r\n let { North, East, South, West } = octantBox.box,\r\n meshMatrix = new THREE.Matrix4();\r\n\r\n if (nodeData.matrixGlobeFromMesh)\r\n meshMatrix.fromArray(nodeData.matrixGlobeFromMesh as any, 0);\r\n\r\n nodeData.meshes.forEach(meshData => {\r\n\r\n var mat = generateMaterialFromMeshData(meshData, octantsToExclude, false, depthMaterial);\r\n\r\n if (mat) {\r\n var geo = generateGeometryFromMeshData(meshData);\r\n\r\n if (geo) {\r\n\r\n var mesh = new THREE.Mesh(geo, mat);\r\n\r\n mesh.applyMatrix4(meshMatrix);\r\n\r\n mesh.userData.north = North;\r\n mesh.userData.east = East;\r\n mesh.userData.south = South;\r\n mesh.userData.west = West;\r\n mesh.userData.path = octantBox.path;\r\n mesh.userData.level = octantBox.level;\r\n mesh.userData.octantsToExclude = octantsToExclude ? octantsToExclude.slice() : [];\r\n\r\n result.push(mesh);\r\n\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n export var latLngToQuaternion = (() => {\r\n\r\n var rz = new THREE.Quaternion().setFromEuler(new THREE.Euler(0, 0, -Math.PI / 2)),\r\n ry = new THREE.Quaternion().setFromEuler(new THREE.Euler(0, -Math.PI / 2, 0)),\r\n rot = new THREE.Euler();\r\n\r\n return (lat: number, lng: number, target: THREE.Quaternion) => {\r\n //rz * (ry * rll)\r\n\r\n target.setFromEuler(rot.set(0, lat / 180 * Math.PI, -lng / 180 * Math.PI)).premultiply(ry).premultiply(rz);\r\n\r\n return target;\r\n //target.setFromEuler(new THREE.Euler(0, 0, Math.PI)).multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(0, -Math.PI / 2, 0)).multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(Math.PI / 2, lat / 180 * Math.PI, -lng / 180 * Math.PI, \"XYZ\"))));\r\n }\r\n })();\r\n\r\n export var earthRadiusByLatitude = (() => {\r\n const r1 = 6378137,//6376509, //radius at equator \r\n r2 = 6356752,//6382941, //radius at pole\r\n r1_2 = r1 * r1,\r\n r2_2 = r2 * r2;\r\n\r\n return (lat: number) => {\r\n var s = Math.sin(lat / 180 * Math.PI),\r\n c = Math.cos(lat / 180 * Math.PI);\r\n\r\n return Math.sqrt((Math.pow(r1_2 * c, 2) + Math.pow(r2_2 * s, 2)) / (Math.pow(r1 * c, 2) + Math.pow(r2 * s, 2)));\r\n }\r\n })();\r\n\r\n export var latLngToMatrix4 = (() => {\r\n var q = new THREE.Quaternion(),\r\n m = new THREE.Matrix4();\r\n\r\n return (lat: number, lng: number, target: THREE.Matrix4) => {\r\n target.makeRotationFromQuaternion(latLngToQuaternion(lat, lng, q)).premultiply(m.makeTranslation(0, 0, -6371008.8/*-earthRadiusByLatitude(lat)*/));\r\n\r\n return target;\r\n }\r\n })();\r\n\r\n export var raycastGmMesh = (() => {\r\n var inverseMatrix = new THREE.Matrix4();\r\n var ray = new THREE.Ray();\r\n var sphere = new THREE.Sphere();\r\n\r\n var vA = new THREE.Vector3();\r\n var vB = new THREE.Vector3();\r\n var vC = new THREE.Vector3();\r\n\r\n //var tempA = new THREE.Vector3();\r\n //var tempB = new THREE.Vector3();\r\n //var tempC = new THREE.Vector3();\r\n\r\n //var uvA = new THREE.Vector2();\r\n //var uvB = new THREE.Vector2();\r\n //var uvC = new THREE.Vector2();\r\n\r\n var intersectionPoint = new THREE.Vector3();\r\n var intersectionPointWorld = new THREE.Vector3();\r\n\r\n function checkIntersection(object, material, raycaster, ray, pA, pB, pC, point) {\r\n\r\n var intersect;\r\n\r\n if (material.side === THREE.BackSide) {\r\n\r\n intersect = ray.intersectTriangle(pC, pB, pA, true, point);\r\n\r\n } else {\r\n\r\n intersect = ray.intersectTriangle(pA, pB, pC, material.side !== THREE.DoubleSide, point);\r\n\r\n }\r\n\r\n if (intersect === null) return null;\r\n\r\n intersectionPointWorld.copy(point);\r\n intersectionPointWorld.applyMatrix4(object.matrixWorld);\r\n\r\n var distance = raycaster.ray.origin.distanceTo(intersectionPointWorld);\r\n\r\n if (distance < raycaster.near || distance > raycaster.far) return null;\r\n\r\n return {\r\n distance: distance,\r\n point: intersectionPointWorld.clone(),\r\n object: object\r\n } as any;\r\n\r\n }\r\n\r\n function checkBufferGeometryIntersection(object, material, raycaster, ray, position, /*uv, */a, b, c) {\r\n\r\n vA.fromBufferAttribute(position, a);\r\n vB.fromBufferAttribute(position, b);\r\n vC.fromBufferAttribute(position, c);\r\n\r\n var intersection = checkIntersection(object, material, raycaster, ray, vA, vB, vC, intersectionPoint);\r\n\r\n //if ( intersection ) {\r\n\r\n // if ( uv ) {\r\n\r\n // uvA.fromBufferAttribute( uv, a );\r\n // uvB.fromBufferAttribute( uv, b );\r\n // uvC.fromBufferAttribute( uv, c );\r\n\r\n // intersection.uv = (THREE.Triangle).getUV( intersectionPoint, vA, vB, vC, uvA, uvB, uvC, new THREE.Vector2() );\r\n\r\n // }\r\n\r\n // var face = new THREE.Face3( a, b, c );\r\n // THREE.Triangle.getNormal( vA, vB, vC, face.normal );\r\n\r\n // intersection.face = face;\r\n\r\n //}\r\n\r\n return intersection;\r\n\r\n }\r\n\r\n return (raycaster: THREE.Raycaster, mesh: THREE.Mesh, intersects: THREE.Intersection[]) => {\r\n let geometry = (mesh && mesh.geometry) as THREE.BufferGeometry,\r\n material = mesh.material,\r\n matrixWorld = mesh.matrixWorld;\r\n\r\n if (!geometry || !geometry.boundingSphere || !geometry.boundingBox)\r\n return;\r\n\r\n sphere.copy(geometry.boundingSphere);\r\n sphere.applyMatrix4(matrixWorld);\r\n\r\n if (raycaster.ray.intersectsSphere(sphere) === false)\r\n return;\r\n\r\n inverseMatrix.getInverse(matrixWorld);\r\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);\r\n\r\n // Check boundingBox before continuing\r\n\r\n if (ray.intersectsBox(geometry.boundingBox) === false)\r\n return;\r\n\r\n let index = geometry.index,\r\n drawRange = geometry.drawRange,\r\n position = geometry.attributes.position,\r\n //uv = geometry.attributes.uv,\r\n start = Math.max(0, drawRange.start),\r\n end = Math.min(index.count, (drawRange.start + drawRange.count)),\r\n a: number,\r\n b: number,\r\n c: number;\r\n\r\n for (var i = start, il = end; i < il; i += 1) {\r\n\r\n a = index.getX(i);\r\n b = index.getX(i + 1);\r\n c = index.getX(i + 2);\r\n\r\n var intersection = (i & 1)\r\n ? checkBufferGeometryIntersection(mesh, material, raycaster, ray, position, /*uv,*/ a, c, b)\r\n : checkBufferGeometryIntersection(mesh, material, raycaster, ray, position, /*uv,*/ a, b, c);\r\n\r\n if (intersection) {\r\n //intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\r\n intersects.push(intersection);\r\n }\r\n }\r\n };\r\n })();\r\n\r\n //export function TestAddMeshesToController(meshes: THREE.Mesh[]) {\r\n // if (meshes && meshes.length && window[\"currentProjectLocation\"]) {\r\n // var controller = LS.Client3DEditor.Controller.Current,\r\n // scene = controller.scene;\r\n\r\n // //var translation = new THREE.Vector3(),\r\n // // rotation = new THREE.Quaternion(),\r\n // // scale = new THREE.Vector3();\r\n\r\n // //meshes[0].matrix.decompose(translation, rotation, scale);\r\n\r\n // var obj = new THREE.Object3D();\r\n\r\n // var ll = window[\"currentProjectLocation\"];\r\n // //latLngToQuaternion(ll[0], ll[1], obj.quaternion);\r\n\r\n // //var q = latLngToQuaternion(ll[0], ll[1], new THREE.Quaternion());\r\n // var transform = latLngToMatrix4(ll[0], ll[1], new THREE.Matrix4());//.premultiply(new THREE.Matrix4().makeScale(100, 100, 100));\r\n\r\n // //var refp = new THREE.Vector3().applyMatrix4(meshes[0].matrix).applyMatrix4(tr);\r\n\r\n // //var tr = new THREE.Vector3(-translation.x, -translation.y, -translation.z);\r\n\r\n // //var latLng = new MapDrawing.LatLng(ll[0], ll[1]);\r\n\r\n // //var q = new THREE.Quaternion().setFromEuler(new THREE.Euler(0, latLng.Latitude / 180 * Math.PI, -latLng.Longitude / 180 * Math.PI, \"ZYX\"));\r\n // //obj.quaternion.setFromEuler(new THREE.Euler(0, 0, Math.PI)).multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(0, -Math.PI / 2, 0)).multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(Math.PI / 2, latLng.Latitude / 180 * Math.PI, -latLng.Longitude / 180 * Math.PI, \"XYZ\"))));\r\n // //obj.rotation.set(-latLng.Longitude / 180 * Math.PI, latLng.Latitude / 180 * Math.PI, 0);\r\n // //obj.scale.set(100, 100, 100);\r\n // //obj.position.set(0, 0, -refpt.z * 100 + 5000);\r\n // //obj.position.set(-translation.x, -translation.y, -translation.z);\r\n // //obj.matrix.multiplyMatrices(new THREE.Matrix4().makeScale(1000, 1000, 1000), new THREE.Matrix4().makeTranslation(-translation.x, -translation.y, -translation.z));\r\n // //obj.updateMatrix();\r\n // obj.applyMatrix4(transform);\r\n\r\n // //console.log(`${ll[0]},${ll[1]} -> RX = ${obj.rotation.x / Math.PI * 180}}, RY = ${obj.rotation.y / Math.PI * 180}, RZ = ${obj.rotation.z / Math.PI * 180}`);\r\n\r\n // var p = new THREE.Vector3(),\r\n // bd = new THREE.Box3();\r\n\r\n // meshes.forEach(m => {\r\n // m.applyMatrix4(transform);\r\n\r\n // bd.expandByPoint(p.set(0, 0, 0).applyMatrix4(m.matrix));\r\n // //m.position.add(tr);\r\n // //m.updateMatrix();\r\n // obj.add(m);\r\n // });\r\n\r\n // var raycaster = new THREE.Raycaster();\r\n\r\n // raycaster.ray.origin.set(0, 0, 10000);\r\n // raycaster.ray.direction.set(0, 0, -1);\r\n\r\n // //var interects = raycaster.intersectObjects(meshes, true);\r\n\r\n // var container = new THREE.Object3D();\r\n\r\n // container.add(obj);\r\n // container.position.setZ(-bd.min.z);\r\n // container.updateMatrix();\r\n\r\n // scene.add(container);\r\n\r\n // scene.add(new THREE.AxesHelper(1000));\r\n\r\n // } else {\r\n // console.log(\"no meshes...\");\r\n // }\r\n //}\r\n}","module spt.ThreeJs.utils {\r\n export class OBJExporter {\r\n constructor(numberOfDigits = 6, objectsAsObjObjects = true, objectsAsObjGroups = false, materialGroups = false, exportLines = true) {\r\n this.numberOfDigits = numberOfDigits;\r\n this.materialGroups = materialGroups;\r\n this.objectsAsObjObjects = objectsAsObjObjects;\r\n this.objectsAsObjGroups = objectsAsObjGroups;\r\n this.exportLines = exportLines;\r\n }\r\n\r\n numberOfDigits: number;\r\n materialGroups: boolean;\r\n objectsAsObjObjects: boolean;\r\n objectsAsObjGroups: boolean;\r\n exportLines: boolean;\r\n\r\n outputLines: string[] = [];\r\n indexCount: number = 0;\r\n vertexCount: number = 0;\r\n normalCount: number = 0;\r\n uvCount: number = 0;\r\n\r\n vertex = new THREE.Vector3();\r\n normal = new THREE.Vector3();\r\n uv = new THREE.Vector2();\r\n\r\n normalMatrixWorld = new THREE.Matrix3();\r\n\r\n parse(object: THREE.Object3D) {\r\n object.traverse((child) => {\r\n if ((child as THREE.Points).isPoints) {\r\n //ignore\r\n }\r\n else if ((child as THREE.Line).isLine) {\r\n this.parseLine(child as THREE.Line);\r\n }\r\n else if ((child as THREE.Mesh).isMesh) {\r\n this.parseMesh(child as THREE.Mesh);\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n private parseMesh(mesh: THREE.Mesh) {\r\n\r\n var nbVertex = 0,\r\n nbNormals = 0,\r\n nbVertexUvs = 0,\r\n vertex = this.vertex,\r\n normal = this.normal,\r\n uv = this.uv,\r\n indexVertex = this.vertexCount,\r\n indexVertexUvs = this.uvCount,\r\n indexNormals = this.normalCount,\r\n outputLines = this.outputLines,\r\n materials = mesh.material,\r\n material: THREE.Material,\r\n materialName: string,\r\n i: number, j: number, m: number, l: number, il: number, jl: number, a: number, b: number, c: number,\r\n geometry = mesh.geometry as THREE.BufferGeometry,\r\n normalMatrixWorld = this.normalMatrixWorld,\r\n matrixWorld = mesh.matrixWorld,\r\n drawMode = THREE.TrianglesDrawMode, //mesh.drawMode,\r\n name = mesh.name || `Mesh.${(\"0000\" + mesh.id).slice(-4)}`,\r\n numberOfDigits = this.numberOfDigits,\r\n formatNumber = (num: number) => {\r\n return +num.toFixed(numberOfDigits);\r\n };\r\n\r\n if (((geometry) as THREE.Geometry).isGeometry)\r\n geometry = new THREE.BufferGeometry().setFromObject(mesh);\r\n\r\n if (geometry.isBufferGeometry) {\r\n\r\n // shortcuts\r\n var groups = geometry.groups,\r\n drawRange = geometry.drawRange,\r\n group: { start: number, count: number, materialIndex?: number },\r\n start: number, end: number,\r\n vertices = geometry.getAttribute('position') as THREE.BufferAttribute,\r\n normals = geometry.getAttribute('normal') as THREE.BufferAttribute,\r\n uvs = geometry.getAttribute('uv') as THREE.BufferAttribute,\r\n indices = geometry.getIndex();\r\n\r\n // name of the mesh object\r\n if (this.objectsAsObjObjects)\r\n outputLines.push(`\\no ${name}\\n`);\r\n else if (this.objectsAsObjGroups)\r\n outputLines.push(`\\ng ${name}\\n`);\r\n else\r\n outputLines.push('\\n');\r\n\r\n // vertices\r\n\r\n if (vertices !== undefined) {\r\n\r\n for (i = 0, l = vertices.count; i < l; i++ , nbVertex++) {\r\n\r\n vertex.fromBufferAttribute(vertices, i);\r\n\r\n // transfrom the vertex to world space\r\n vertex.applyMatrix4(matrixWorld);\r\n\r\n // transform the vertex to export format\r\n outputLines.push(`v ${formatNumber(vertex.x)} ${formatNumber(vertex.y)} ${formatNumber(vertex.z)}\\n`);\r\n\r\n }\r\n\r\n }\r\n\r\n // uvs\r\n\r\n if (uvs !== undefined) {\r\n\r\n for (i = 0, l = uvs.count; i < l; i++ , nbVertexUvs++) {\r\n\r\n uv.fromBufferAttribute(uvs, i);\r\n\r\n // transform the uv to export format\r\n outputLines.push(`vt ${formatNumber(uv.x)} ${formatNumber(uv.y)}\\n`);\r\n\r\n }\r\n\r\n }\r\n\r\n // normals\r\n\r\n if (normals !== undefined) {\r\n\r\n normalMatrixWorld.getNormalMatrix(matrixWorld);\r\n\r\n for (i = 0, l = normals.count; i < l; i++ , nbNormals++) {\r\n\r\n normal.fromBufferAttribute(normals, i);\r\n\r\n // transfrom the normal to world space\r\n normal.applyMatrix3(normalMatrixWorld);\r\n\r\n // transform the normal to export format\r\n outputLines.push(`vn ${formatNumber(normal.x)} ${formatNumber(normal.y)} ${formatNumber(normal.z)}\\n`);\r\n\r\n }\r\n\r\n }\r\n\r\n // faces\r\n\r\n var writeSingleFace = (i1: number, i2: number, i3: number) => {\r\n outputLines.push('f '\r\n + (indexVertex + i1) + (normals || uvs ? '/' + (uvs ? (indexVertexUvs + i1) : '') + (normals ? '/' + (indexNormals + i1) : '') : '') + ' '\r\n + (indexVertex + i2) + (normals || uvs ? '/' + (uvs ? (indexVertexUvs + i2) : '') + (normals ? '/' + (indexNormals + i2) : '') : '') + ' '\r\n + (indexVertex + i3) + (normals || uvs ? '/' + (uvs ? (indexVertexUvs + i3) : '') + (normals ? '/' + (indexNormals + i3) : '') : '')\r\n + \"\\n\");\r\n };\r\n\r\n var writeFaces = (from: number, to: number) => {\r\n if (indices !== null) {\r\n switch (drawMode) {\r\n case THREE.TriangleStripDrawMode:\r\n for (j = from, jl = to - 2; j < jl; j++) {\r\n if (j & 1) {\r\n a = 1 + indices.getX(j);\r\n b = 1 + indices.getX(j + 2);\r\n c = 1 + indices.getX(j + 1);\r\n } else {\r\n a = 1 + indices.getX(j);\r\n b = 1 + indices.getX(j + 1);\r\n c = 1 + indices.getX(j + 2);\r\n }\r\n\r\n writeSingleFace(a, b, c);\r\n\r\n }\r\n break;\r\n case THREE.TriangleFanDrawMode:\r\n for (j = from, jl = to - 2; j < jl; j++) {\r\n\r\n a = 1 + indices.getX(from);\r\n b = 1 + indices.getX(j + 1);\r\n c = 1 + indices.getX(j + 2);\r\n\r\n writeSingleFace(a, b, c);\r\n\r\n }\r\n break;\r\n default:\r\n for (j = from, jl = to; j < jl; j += 3) {\r\n\r\n a = 1 + indices.getX(j);\r\n b = 1 + indices.getX(j + 1);\r\n c = 1 + indices.getX(j + 2);\r\n\r\n writeSingleFace(a, b, c);\r\n\r\n }\r\n break;\r\n }\r\n } else {\r\n switch (drawMode) {\r\n case THREE.TriangleStripDrawMode:\r\n for (j = from, jl = to - 2; j < jl; j++) {\r\n if (j & 1) {\r\n a = j + 1;\r\n b = j + 3;\r\n c = j + 2;\r\n } else {\r\n a = j + 1;\r\n b = j + 2;\r\n c = j + 3;\r\n }\r\n\r\n writeSingleFace(a, b, c);\r\n\r\n }\r\n break;\r\n case THREE.TriangleFanDrawMode:\r\n for (j = from, jl = to - 2; j < jl; j++) {\r\n\r\n a = from + 1;\r\n b = j + 2;\r\n c = j + 3;\r\n\r\n writeSingleFace(a, b, c);\r\n\r\n }\r\n break;\r\n default:\r\n for (j = from, jl = to; j < jl; j += 3) {\r\n\r\n a = j + 1;\r\n b = j + 2;\r\n c = j + 3;\r\n\r\n writeSingleFace(a, b, c);\r\n\r\n }\r\n break;\r\n }\r\n }\r\n };\r\n\r\n var writeMaterial = (mat: THREE.Material) => {\r\n if (mat) {\r\n // name of the mesh material\r\n materialName = mat.name || `Material.${(\"0000\" + mat.id).slice(-4)}`;\r\n\r\n if (this.materialGroups) {\r\n outputLines.push(`g ${name}${geometry.name ? '_' + geometry.name : ''}.${(\"0000\" + i).slice(-4)}_${materialName}\\n`);\r\n }\r\n\r\n outputLines.push('usemtl ' + materialName + '\\n');\r\n\r\n }\r\n };\r\n\r\n if (indices !== null && mesh.userData && mesh.userData.octantsToExclude && mesh.userData.octantsToExclude.length) {\r\n //GM Mesh\r\n\r\n var octantsToExclude = mesh.userData.octantsToExclude as number[];\r\n \r\n material = materials as THREE.Material;\r\n\r\n start = Math.max(0, drawRange.start);\r\n end = Math.min(indices.count, (drawRange.start + drawRange.count));\r\n\r\n writeMaterial(material);\r\n\r\n for (j = start, jl = end - 2; j < jl; j++) {\r\n if (j & 1) {\r\n a = indices.getX(j);\r\n b = indices.getX(j + 2);\r\n c = indices.getX(j + 1);\r\n } else {\r\n a = indices.getX(j);\r\n b = indices.getX(j + 1);\r\n c = indices.getX(j + 2);\r\n }\r\n\r\n if (a === b || a === c || b === c)\r\n continue;\r\n\r\n var w = vertices.getW( a );\r\n\r\n if (isNaN(w) || octantsToExclude.indexOf(w) >= 0)\r\n continue;\r\n\r\n writeSingleFace(1 + a, 1 + b, 1 + c);\r\n\r\n }\r\n\r\n } else {\r\n if (Array.isArray(materials)) {\r\n for (i = 0, il = groups.length; i < il; i++) {\r\n group = groups[i];\r\n material = materials[group.materialIndex];\r\n\r\n start = Math.max(0, group.start, drawRange.start);\r\n end = Math.min(indices !== null ? indices.count : vertices.count, (group.start + group.count), (drawRange.start + drawRange.count));\r\n\r\n writeMaterial(material);\r\n\r\n writeFaces(start, end);\r\n }\r\n }\r\n else {\r\n material = materials;\r\n\r\n start = Math.max(0, drawRange.start);\r\n end = Math.min(indices !== null ? indices.count : vertices.count, (drawRange.start + drawRange.count));\r\n\r\n writeMaterial(material);\r\n\r\n writeFaces(start, end);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n console.warn('THREE.OBJExporter.parseMesh(): geometry type unsupported', geometry);\r\n\r\n }\r\n\r\n // update index\r\n this.vertexCount += nbVertex;\r\n this.uvCount += nbVertexUvs;\r\n this.normalCount += nbNormals;\r\n\r\n return this;\r\n }\r\n\r\n private parseLine(line: THREE.Line | THREE.LineSegments) {\r\n if (!this.exportLines)\r\n return this;\r\n\r\n var nbVertex = 0,\r\n outputLines = this.outputLines,\r\n geometry = line.geometry,\r\n type = line.type as string,\r\n vertex = this.vertex,\r\n indexVertex = this.vertexCount,\r\n i: number, j: number, k: number, l: number, o: string,\r\n numberOfDigits = this.numberOfDigits,\r\n formatNumber = (num: number) => {\r\n return +num.toFixed(numberOfDigits);\r\n };\r\n\r\n if ((geometry as THREE.Geometry).isGeometry)\r\n geometry = new THREE.BufferGeometry().setFromObject(line);\r\n\r\n if ((geometry as THREE.BufferGeometry).isBufferGeometry) {\r\n\r\n // shortcuts\r\n var vertices = (geometry).getAttribute('position');\r\n\r\n // name of the line object\r\n if (this.objectsAsObjObjects)\r\n outputLines.push(`\\no ${line.name}\\n`);\r\n else if (this.objectsAsObjGroups)\r\n outputLines.push(`\\ng ${line.name}\\n`);\r\n else\r\n outputLines.push('\\n');\r\n\r\n if (vertices !== undefined) {\r\n\r\n for (i = 0, l = vertices.count; i < l; i++ , nbVertex++) {\r\n\r\n vertex.x = vertices.getX(i);\r\n vertex.y = vertices.getY(i);\r\n vertex.z = vertices.getZ(i);\r\n\r\n // transfrom the vertex to world space\r\n vertex.applyMatrix4(line.matrixWorld);\r\n\r\n // transform the vertex to export format\r\n outputLines.push(`v ${formatNumber(vertex.x)} ${formatNumber(vertex.y)} ${formatNumber(vertex.z)}\\n`);\r\n\r\n }\r\n\r\n }\r\n\r\n if (type === 'Line') {\r\n\r\n o = 'l ';\r\n\r\n for (j = 1, l = vertices.count; j <= l; j++) {\r\n\r\n o += `${indexVertex + j} `;\r\n\r\n }\r\n\r\n outputLines.push(`${o}\\n`);\r\n\r\n }\r\n\r\n if (type === 'LineSegments') {\r\n\r\n for (j = 1, k = j + 1, l = vertices.count; j < l; j += 2, k = j + 1) {\r\n\r\n outputLines.push(`l ${indexVertex + j} ${indexVertex + k}\\n`);\r\n\r\n }\r\n\r\n }\r\n\r\n } else {\r\n\r\n console.warn('THREE.OBJExporter.parseLine(): geometry type unsupported', geometry);\r\n\r\n }\r\n\r\n // update index\r\n this.vertexCount += nbVertex;\r\n\r\n return this;\r\n }\r\n\r\n getOutput() {\r\n return this.outputLines.join('');\r\n }\r\n\r\n getBlob() {\r\n return new Blob([this.getOutput()], { type: \"text/plain\" });\r\n }\r\n\r\n download(fileName = \"Scene.obj\") {\r\n spt.Utils.saveBlobAsFile(fileName, this.getBlob());\r\n }\r\n }\r\n}","module spt.ThreeJs.utils {\r\n export interface ICharDefinition {\r\n id: number;\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n xoffset: number;\r\n yoffset: number;\r\n xadvance: number;\r\n page: number;\r\n chnl: number;\r\n }\r\n\r\n export interface ISdfFontMeta {\r\n name: string;\r\n imageSize: number;\r\n fontSize: number;\r\n chars: { [id: number]: ICharDefinition }\r\n }\r\n\r\n export class SDFFontMaterial extends THREE.RawShaderMaterial {\r\n\r\n public static imagePath: string = \"\";\r\n public static precision: string = \"mediump\";\r\n public static imageExtension: string = \".png\";\r\n public static textureAnisotropy: number = 1;\r\n public static FontMetaDatas: { [name: string]: ISdfFontMeta } = {};\r\n private static instances: { [name: string]: SDFFontMaterial } = {};\r\n private static loadingQueue: { [name: string]: ((metaData: ISdfFontMeta) => void)[] } = {};\r\n public fontName: string;\r\n public instanced: boolean;\r\n\r\n get map() {\r\n return this.uniforms[\"map\"].value as THREE.Texture;\r\n }\r\n\r\n set map(value: THREE.Texture) {\r\n this.uniforms[\"map\"].value = value;\r\n }\r\n\r\n public static GetMetaData(fontName: string, fn: (metaData: ISdfFontMeta) => void) {\r\n if (SDFFontMaterial.FontMetaDatas[fontName] === undefined) {\r\n if (SDFFontMaterial.loadingQueue[fontName] !== undefined) {\r\n SDFFontMaterial.loadingQueue[fontName].push(fn);\r\n return;\r\n }\r\n SDFFontMaterial.loadingQueue[fontName] = [fn];\r\n var loader = new THREE.FileLoader(THREE.DefaultLoadingManager);\r\n loader.responseType = \"json\";\r\n loader.load(SDFFontMaterial.imagePath + fontName + \".json\", (data) => {\r\n if (data) {\r\n //console.log(data);\r\n var json = typeof data === \"string\" ? JSON.parse(data) : data;\r\n SDFFontMaterial.FontMetaDatas[fontName] = json;\r\n var lqueue = SDFFontMaterial.loadingQueue[fontName];\r\n for (var i = 0, j = lqueue.length; i < j; i++) {\r\n lqueue[i](json);\r\n }\r\n } else\r\n SDFFontMaterial.FontMetaDatas[fontName] = null;\r\n\r\n if (SDFFontMaterial.loadingQueue[fontName] !== undefined)\r\n delete SDFFontMaterial.loadingQueue[fontName];\r\n\r\n LoaderManager.notifyResourceLoaded();\r\n });\r\n } else\r\n fn(SDFFontMaterial.FontMetaDatas[fontName]);\r\n }\r\n\r\n constructor(fontName: string, instanced?: boolean, depthTest?: boolean, depthWrite?: boolean, notTransparent?: boolean) {\r\n super();\r\n\r\n this.instanced = !!instanced;\r\n this.fontName = fontName;\r\n this.transparent = !notTransparent;\r\n this.side = THREE.DoubleSide;\r\n this.depthTest = !!depthTest;\r\n this.depthWrite = !!depthWrite;\r\n\r\n var tex = (new THREE.TextureLoader()).load(\r\n SDFFontMaterial.imagePath + fontName + SDFFontMaterial.imageExtension,\r\n () => {\r\n LoaderManager.notifyResourceLoaded();\r\n });\r\n tex.anisotropy = SDFFontMaterial.textureAnisotropy > 0 ? SDFFontMaterial.textureAnisotropy : 1;\r\n tex.generateMipmaps = false;\r\n tex.minFilter = tex.magFilter = THREE.LinearFilter;\r\n\r\n this.uniforms = {\r\n map: { type: \"t\", value: tex }\r\n };\r\n\r\n this.vertexColors = instanced ? false : true;\r\n\r\n this.vertexShader = [\r\n \"precision \" + SDFFontMaterial.precision + \" float;\",\r\n\r\n \"uniform mat4 modelViewMatrix;\",\r\n \"uniform mat4 projectionMatrix;\",\r\n\r\n instanced ? \"attribute vec2 sizei;\" : \"\",\r\n instanced ? \"attribute vec3 offseti;\" : \"\",\r\n instanced ? \"attribute vec4 uvMati;\" : \"\", //x,y = offset; z,w = size\r\n\r\n \"attribute vec3 position;\",\r\n \"attribute vec2 uv;\",\r\n instanced ? \"attribute vec3 colori;\" : \"attribute vec3 color;\",\r\n\r\n \"varying vec2 vUv;\",\r\n \"varying vec3 vColor;\",\r\n\r\n \"void main() {\",\r\n instanced ? \"vUv = uv * uvMati.zw + uvMati.xy;\" : \"vUv = uv;\",\r\n instanced ? \"vColor = colori;\" : \"vColor = color;\",\r\n \"gl_Position = projectionMatrix * modelViewMatrix * vec4( \" + (instanced ? \"position * vec3(sizei, 1.0) + offseti\" : \"position\") + \", 1.0 );\",\r\n \"}\"\r\n ].join(\"\\n\");\r\n\r\n this.fragmentShader = [\r\n \"precision \" + SDFFontMaterial.precision + \" float;\",\r\n\r\n \"uniform sampler2D map;\",\r\n\r\n \"varying vec2 vUv;\",\r\n \"varying vec3 vColor;\",\r\n\r\n \"const float smoothing = 1.0/16.0;\",\r\n\r\n \"void main() {\",\r\n \"float distance = texture2D(map, vUv).a;\",\r\n \"float alpha = smoothstep(0.5 - smoothing, 0.5 + smoothing, distance);\",\r\n \"if(alpha <= 0.0) { discard; }\",\r\n \"gl_FragColor = vec4( vColor, alpha );\",\r\n \"}\"\r\n ].join(\"\\n\");\r\n }\r\n\r\n public static getInstance(fontName: string, instanced?: boolean, depthTest?: boolean, depthWrite?: boolean, notTransparent?: boolean) {\r\n var k = `${fontName}${instanced ? \"_i\" : \"\"}${depthTest ? \"_t\" : \"\"}${depthWrite ? \"_w\" : \"\"}${notTransparent ? \"_o\" : \"\"}`;\r\n if (!SDFFontMaterial.instances[k]) {\r\n SDFFontMaterial.instances[k] = new SDFFontMaterial(fontName, instanced, depthTest, depthWrite, notTransparent);\r\n }\r\n return SDFFontMaterial.instances[k];\r\n }\r\n }\r\n\r\n export class SDFTextObject extends THREE.Object3D {\r\n\r\n private _text: string;\r\n private _depthTest: boolean;\r\n private _depthWrite: boolean;\r\n private _notTransparent: boolean;\r\n\r\n private _fontMeta: ISdfFontMeta;\r\n\r\n private _insertPosition: THREE.Vector2 = new THREE.Vector2();\r\n\r\n private _alignmentPoint: THREE.Vector2;\r\n\r\n private _color: THREE.Color;\r\n private _isDisposed: boolean = false;\r\n private _isLoaded: boolean = false;\r\n\r\n private _onLoad: ((to: SDFTextObject) => void)[] = null;\r\n\r\n private isDynamic: boolean;\r\n\r\n zOffset = 0.2;\r\n size: number;\r\n\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n set color(value: THREE.Color) {\r\n if (value.getHex() !== this._color.getHex()) {\r\n this._color.copy(value);\r\n this.onColorChanged();\r\n }\r\n }\r\n\r\n onColorChanged() {\r\n var color = this.color;\r\n if (this._fontMeta) {\r\n this.traverse((mesh) => {\r\n if (mesh instanceof THREE.Mesh) {\r\n var geometry = mesh.geometry;\r\n if (geometry instanceof THREE.BufferGeometry) {\r\n var colorAttribute = geometry.attributes['color'] as THREE.BufferAttribute;\r\n var colorArray = colorAttribute.array as Array;\r\n for (var i = 0, j = colorArray.length; i < j; i += 3) {\r\n colorArray[i] = color.r;\r\n colorArray[i + 1] = color.g;\r\n colorArray[i + 2] = color.b;\r\n }\r\n colorAttribute.needsUpdate = true;\r\n } else if (geometry instanceof THREE.Geometry) {\r\n for (var k = 0, l = geometry.faces.length; k < l; k++) {\r\n var f = geometry.faces[k];\r\n f.vertexColors[0] = color;\r\n f.vertexColors[1] = color;\r\n f.vertexColors[2] = color;\r\n }\r\n geometry.colorsNeedUpdate = true;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n get text() {\r\n return this._text;\r\n }\r\n\r\n set text(value: string) {\r\n if (this._text !== value) {\r\n this.ReGenerate(value);\r\n }\r\n }\r\n\r\n getWidth() {\r\n if (this._fontMeta)\r\n return this._insertPosition.x * this.size / this._fontMeta.fontSize;\r\n return 0;\r\n }\r\n\r\n constructor(txt: string, size: number, color?: THREE.Color, font?: string, isDynamic?: boolean, alignmentPoint?: THREE.Vector2, depthTest?: boolean, depthWrite?: boolean, notTransparent?: boolean) {\r\n super();\r\n this.type = \"SDFTextObject\";\r\n this._text = txt;\r\n this.size = size || 1;\r\n this._color = color || new THREE.Color(0x000000);\r\n this.isDynamic = !!isDynamic;\r\n this._alignmentPoint = alignmentPoint || new THREE.Vector2(0.5, 0);\r\n this._depthTest = !!depthTest;\r\n this._depthWrite = !!depthWrite;\r\n this._notTransparent = !!notTransparent;\r\n this.SetFont(font);\r\n }\r\n\r\n setParameter(txt: string, size: number, color?: THREE.Color, font?: string, alignmentPoint?: THREE.Vector2) {\r\n this._text = txt;\r\n this.size = size || 1;\r\n this._color = color || new THREE.Color(0x000000);\r\n if (alignmentPoint)\r\n this._alignmentPoint = alignmentPoint;\r\n this.SetFont(font);\r\n }\r\n\r\n private updateAlignmentScale() {\r\n if (this._fontMeta) {\r\n var scale = this.size / this._fontMeta.fontSize;\r\n var ax = -this._alignmentPoint.x * this._insertPosition.x * scale,\r\n ay = -this._alignmentPoint.y * this._fontMeta.fontSize * scale;\r\n this.traverse((obj) => {\r\n obj.position.set(ax, ay, 0);\r\n obj.scale.set(scale, scale, scale);\r\n });\r\n }\r\n }\r\n\r\n SetAlignment(point: THREE.Vector2) {\r\n this._alignmentPoint.copy(point);\r\n this.updateAlignmentScale();\r\n }\r\n\r\n GetAlignment() {\r\n return this._alignmentPoint;\r\n }\r\n\r\n SetSize(size: number) {\r\n this.size = size;\r\n this.updateAlignmentScale();\r\n }\r\n\r\n SetFont(font?: string) {\r\n if (this._isDisposed)\r\n return;\r\n this._isLoaded = false;\r\n SDFFontMaterial.GetMetaData(font || \"Arial\", this.SetFontMeta.bind(this));\r\n }\r\n\r\n SetFontMeta(fontMeta: ISdfFontMeta) {\r\n if (this._isDisposed)\r\n return;\r\n this._fontMeta = fontMeta;\r\n if (fontMeta)\r\n this.ReGenerate();\r\n }\r\n\r\n ReGenerate(txt?: string) {\r\n if (this._isDisposed)\r\n return;\r\n if (!txt)\r\n txt = this._text;\r\n else\r\n this._text = txt;\r\n\r\n if (!this._fontMeta)\r\n return;\r\n\r\n var scale = this.size / this._fontMeta.fontSize;\r\n\r\n var insertPosition = this._insertPosition.set(0, 0);\r\n var fontMeta = this._fontMeta;\r\n var zOff = this.zOffset;\r\n\r\n if (this.isDynamic) {\r\n\r\n var addCharDynamic = (id: number, color: THREE.Color, geometry: THREE.Geometry) => {\r\n var char = fontMeta.chars[id];\r\n if (!char)\r\n char = fontMeta.chars[32]; //empty space\r\n\r\n //skip whitespace\r\n if (char.id == 32) {\r\n insertPosition.x += char.xadvance;\r\n return;\r\n }\r\n\r\n var size = fontMeta.imageSize,\r\n pos = insertPosition,\r\n xOff = pos.x + char.xoffset,\r\n yOff = pos.y - char.height + char.yoffset;\r\n\r\n geometry.vertices[0].set(xOff, yOff, zOff);\r\n geometry.vertices[1].set(xOff + char.width, yOff, zOff);\r\n geometry.vertices[2].set(xOff + char.width, yOff + char.height, zOff);\r\n geometry.vertices[3].set(xOff, yOff + char.height, zOff);\r\n\r\n var w = (char.width / size),\r\n h = (char.height / size),\r\n x = (char.x / size),\r\n y = 1 - ((char.y + char.height) / size);\r\n\r\n geometry.faceVertexUvs[0][0][0].set(x, y);\r\n geometry.faceVertexUvs[0][0][1].set(x + w, y);\r\n geometry.faceVertexUvs[0][0][2].set(x + w, y + h);\r\n\r\n geometry.faceVertexUvs[0][1][0].set(x, y);\r\n geometry.faceVertexUvs[0][1][1].set(x + w, y + h);\r\n geometry.faceVertexUvs[0][1][2].set(x, y + h);\r\n\r\n geometry.faces[0].vertexColors[0] = color;\r\n geometry.faces[0].vertexColors[1] = color;\r\n geometry.faces[0].vertexColors[2] = color;\r\n\r\n geometry.faces[1].vertexColors[0] = color;\r\n geometry.faces[1].vertexColors[1] = color;\r\n geometry.faces[1].vertexColors[2] = color;\r\n\r\n insertPosition.x += char.xadvance;\r\n }\r\n\r\n var geometry: THREE.Geometry;\r\n var mesh: THREE.Mesh;\r\n\r\n var k = 0;\r\n\r\n for (var l = txt.length; k < l; k++) {\r\n\r\n if (this.children.length > k) {\r\n\r\n mesh = this.children[k] as THREE.Mesh;\r\n geometry = mesh.geometry as THREE.Geometry;\r\n mesh.material = SDFFontMaterial.getInstance(this._fontMeta.name, false, this._depthTest, this._depthWrite, this._notTransparent);\r\n mesh.visible = true;\r\n\r\n } else {\r\n\r\n geometry = new THREE.Geometry();\r\n geometry.vertices.push(new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3());\r\n geometry.faces.push(new THREE.Face3(0, 1, 2), new THREE.Face3(0, 2, 3));\r\n geometry.faceVertexUvs[0].push([new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2()], [new THREE.Vector2(), new THREE.Vector2(), new THREE.Vector2()]);\r\n\r\n mesh = new THREE.Mesh(geometry, SDFFontMaterial.getInstance(this._fontMeta.name, false, this._depthTest, this._depthWrite, this._notTransparent));\r\n this.add(mesh);\r\n }\r\n\r\n addCharDynamic(txt.charCodeAt(k), this.color, geometry);\r\n\r\n geometry.verticesNeedUpdate = true;\r\n geometry.elementsNeedUpdate = true;\r\n geometry.uvsNeedUpdate = true;\r\n geometry.colorsNeedUpdate = true;\r\n\r\n mesh.scale.set(scale, scale, 1);\r\n }\r\n\r\n for (var l = this.children.length; k < l; k++) {\r\n this.children[k].visible = false;\r\n }\r\n\r\n var ax = -this._alignmentPoint.x * this._insertPosition.x * scale,\r\n ay = -this._alignmentPoint.y * this._fontMeta.fontSize * scale;\r\n\r\n for (var m = 0, n = this.children.length; m < n; m++) {\r\n var child = this.children[m] as THREE.Mesh;\r\n if (!child.visible)\r\n continue;\r\n child.position.set(ax, ay, 0);\r\n child.geometry.computeBoundingSphere();\r\n }\r\n\r\n } else {\r\n\r\n spt.ThreeJs.utils.emptyObject3D(this, true, true);\r\n\r\n var vertices: number[] = [];\r\n var uvs: number[] = [];\r\n var indices: number[] = [];\r\n var colors: number[] = [];\r\n\r\n var addChar = (id: number, color: THREE.Color) => {\r\n var char = fontMeta.chars[id];\r\n if (!char)\r\n char = fontMeta.chars[32]; //empty space\r\n\r\n //skip whitespace\r\n if (char.id == 32) {\r\n insertPosition.x += char.xadvance;\r\n return;\r\n }\r\n\r\n var size = fontMeta.imageSize,\r\n pos = insertPosition,\r\n indexOffset = vertices.length / 3,\r\n xOff = pos.x + char.xoffset,\r\n yOff = pos.y - char.height + char.yoffset;\r\n\r\n vertices.push(\r\n xOff, yOff, zOff,\r\n xOff + char.width, yOff, zOff,\r\n xOff + char.width, yOff + char.height, zOff,\r\n xOff, yOff + char.height, zOff\r\n );\r\n\r\n indices.push(\r\n indexOffset, indexOffset + 1, indexOffset + 2,\r\n indexOffset, indexOffset + 2, indexOffset + 3\r\n );\r\n\r\n var w = (char.width / size),\r\n h = (char.height / size),\r\n x = (char.x / size),\r\n y = 1 - ((char.y + char.height) / size);\r\n\r\n uvs.push(\r\n x, y,\r\n x + w, y,\r\n x + w, y + h,\r\n x, y + h\r\n );\r\n\r\n colors.push(\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b\r\n );\r\n\r\n insertPosition.x += char.xadvance;\r\n };\r\n\r\n for (var i = 0, j = txt.length; i < j; i++) {\r\n addChar(txt.charCodeAt(i), this.color);\r\n }\r\n\r\n var bgeometry = new THREE.BufferGeometry();\r\n\r\n bgeometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array(vertices), 3));\r\n bgeometry.setAttribute('color', new THREE.BufferAttribute(new Float32Array(colors), 3));\r\n bgeometry.setAttribute('uv', new THREE.BufferAttribute(new Float32Array(uvs), 2));\r\n bgeometry.setIndex(new THREE.BufferAttribute(new Uint16Array(indices), 1));\r\n\r\n var bmesh = new THREE.Mesh(bgeometry, SDFFontMaterial.getInstance(this._fontMeta.name, false, this._depthTest, this._depthWrite, this._notTransparent));\r\n\r\n bmesh.scale.set(scale, scale, 1);\r\n\r\n var ax = -this._alignmentPoint.x * this._insertPosition.x * scale,\r\n ay = -this._alignmentPoint.y * this._fontMeta.fontSize * scale;\r\n\r\n bmesh.position.set(ax, ay, 0);\r\n\r\n this.add(bmesh);\r\n }\r\n\r\n this._isLoaded = true;\r\n if (this._onLoad) {\r\n var onloads = this._onLoad.slice();\r\n var self = this;\r\n onloads.forEach((fn) => { fn(self); });\r\n this._onLoad = null;\r\n }\r\n\r\n }\r\n\r\n dispose() {\r\n spt.ThreeJs.utils.emptyObject3D(this, true, true);\r\n delete this._fontMeta;\r\n this._isDisposed = true;\r\n }\r\n\r\n onLoad(fn: (to: SDFTextObject) => void) {\r\n if (this._isDisposed)\r\n return;\r\n if (this._isLoaded)\r\n fn(this);\r\n else {\r\n if (!this._onLoad)\r\n this._onLoad = [];\r\n this._onLoad.push(fn);\r\n }\r\n }\r\n }\r\n\r\n export class SDFTextObjectCollection extends THREE.Object3D {\r\n\r\n private _depthTest: boolean;\r\n private _depthWrite: boolean;\r\n private _notTransparent: boolean;\r\n\r\n constructor(input: any[] | SDFTextObject[], fontName?: string, depthTest?: boolean, depthWrite?: boolean, notTransparent?: boolean) {\r\n super();\r\n\r\n if (!input || !input.length)\r\n return;\r\n\r\n this._depthTest = !!depthTest;\r\n this._depthWrite = !!depthWrite;\r\n this._notTransparent = !!notTransparent;\r\n\r\n var textObjects: SDFTextObject[];\r\n\r\n if (typeof input[0] === \"object\" && input[0] instanceof THREE.SDFTextObject) {\r\n textObjects = (input).map(txtObj => {\r\n var newTxtObj = new THREE.SDFTextObject(\r\n txtObj.text,\r\n txtObj.size,\r\n txtObj.color,\r\n fontName,\r\n false,\r\n txtObj.GetAlignment(),\r\n depthTest,\r\n depthWrite,\r\n notTransparent\r\n );\r\n txtObj.updateMatrix();\r\n newTxtObj.matrix.copy(txtObj.matrix);\r\n return newTxtObj;\r\n });\r\n } else {\r\n var data = input as any[];\r\n textObjects = [];\r\n\r\n var i = 0;\r\n\r\n while (i < data.length) {\r\n var txtObj = new THREE.SDFTextObject(\r\n data[i++] as string,\r\n data[i++] as number,\r\n new THREE.Color(data[i++], data[i++], data[i++]),\r\n fontName,\r\n false,\r\n new THREE.Vector2(data[i++], data[i++]),\r\n depthTest,\r\n depthWrite,\r\n notTransparent\r\n );\r\n \r\n txtObj.matrix.fromArray(data[i++] as number[]);\r\n\r\n textObjects.push(txtObj);\r\n }\r\n }\r\n\r\n if (!textObjects || !textObjects.length)\r\n return;\r\n\r\n setTimeout(() => {\r\n SDFFontMaterial.GetMetaData(fontName || \"Arial\", (metaData) => {\r\n\r\n var geomtries = textObjects.map(txtObj => (txtObj.children[0]).geometry as THREE.BufferGeometry);\r\n\r\n var transforms = textObjects.map(txtObj => {\r\n var mesh = txtObj.children[0] as THREE.Mesh;\r\n mesh.updateMatrix();\r\n return txtObj.matrix.clone().multiply(mesh.matrix).toArray();\r\n });\r\n\r\n var newGeometry = spt.ThreeJs.utils.MergeBufferGeometries(geomtries, transforms);\r\n\r\n this.add(new THREE.Mesh(newGeometry, SDFFontMaterial.getInstance(metaData.name, false, this._depthTest, this._depthWrite, this._notTransparent)));\r\n textObjects.forEach(txtObj => {\r\n txtObj.dispose();\r\n });\r\n });\r\n }, 0);\r\n }\r\n }\r\n\r\n export class SDFTextObjectInstances extends THREE.Object3D {\r\n\r\n private _instances: { pos: THREE.Vector3, text: string, col: THREE.Color }[] = [];\r\n \r\n private _depthTest: boolean;\r\n private _depthWrite: boolean;\r\n private _notTransparent: boolean;\r\n\r\n private _fontMeta: ISdfFontMeta;\r\n private _bounds = new THREE.Box3();\r\n\r\n private _alignmentPoint: THREE.Vector2;\r\n private _insertPosition: THREE.Vector2 = new THREE.Vector2();\r\n private _color: THREE.Color;\r\n\r\n private _isDisposed: boolean = false;\r\n private _needsUpdate: boolean = true;\r\n private _bufferSize: number = 0;\r\n\r\n private _sizeAttribute: THREE.InstancedBufferAttribute/* | LS.Client3DEditor.FakeInstancedBufferAttribute*/;\r\n private _offsetAttribute: THREE.InstancedBufferAttribute/* | LS.Client3DEditor.FakeInstancedBufferAttribute*/;\r\n private _uvMatAttribute: THREE.InstancedBufferAttribute/* | LS.Client3DEditor.FakeInstancedBufferAttribute*/;\r\n private _colorAttribute: THREE.InstancedBufferAttribute/* | LS.Client3DEditor.FakeInstancedBufferAttribute*/;\r\n\r\n get instanceCount() {\r\n return this._instances.length;\r\n }\r\n\r\n removeInstances(count: number) {\r\n if (count > 0 && this._instances.length)\r\n this._instances.splice(0, Math.min(count, this._instances.length));\r\n this._needsUpdate = true;\r\n }\r\n\r\n setTextXYZ(index: number, text: string, x: number, y: number, z: number, col?: THREE.Color): void {\r\n var instances = this._instances;\r\n\r\n if (index >= instances.length) {\r\n this.addTextXYZ(text, x, y, z, col);\r\n return;\r\n }\r\n\r\n var inst = this._instances[index];\r\n\r\n if (text && inst.text != text)\r\n inst.text = text || \"\";\r\n\r\n inst.pos.set(x, y, z);\r\n\r\n if (col)\r\n inst.col.copy(col);\r\n\r\n this._needsUpdate = true;\r\n }\r\n\r\n setTextAt(index: number, text?: string, pos?: THREE.Vector3, col?: THREE.Color): void {\r\n var instances = this._instances;\r\n\r\n if (index >= instances.length) {\r\n this.addTextAt(text, pos, col);\r\n return;\r\n }\r\n\r\n var inst = this._instances[index];\r\n\r\n if (text)\r\n inst.text = text || \"\";\r\n\r\n if (pos)\r\n inst.pos.copy(pos);\r\n\r\n if (col)\r\n inst.col.copy(col);\r\n\r\n this._needsUpdate = true;\r\n }\r\n\r\n addTextAt(text: string, pos: THREE.Vector3, col?: THREE.Color): number {\r\n this._instances.push({ pos: pos ? pos.clone() : new THREE.Vector3(0, 0, 0), text: text || \"\", col: col ? col.clone() : this._color });\r\n this._needsUpdate = true;\r\n return this._instances.length - 1;\r\n }\r\n\r\n addTextXYZ(text: string, x: number, y: number, z: number, col?: THREE.Color): number {\r\n this._instances.push({ pos: new THREE.Vector3(x, y, z), text: text || \"\", col: col ? col.clone() : this._color });\r\n this._needsUpdate = true;\r\n return this._instances.length - 1;\r\n }\r\n\r\n update(): void {\r\n if (this._needsUpdate)\r\n this.ReGenerate();\r\n }\r\n\r\n zOffset = 0.2;\r\n private size: number;\r\n\r\n constructor(size: number, color?: THREE.Color, font?: string, alignmentPoint?: THREE.Vector2, depthTest?: boolean, depthWrite?: boolean, notTransparent?: boolean) {\r\n super();\r\n this.type = \"SDFTextObjectInstances\";\r\n this.size = size || 1;\r\n this._color = color || new THREE.Color(0x000000);\r\n this._alignmentPoint = alignmentPoint || new THREE.Vector2(0.5, 0);\r\n this._depthTest = !!depthTest;\r\n this._depthWrite = !!depthWrite;\r\n this._notTransparent = !!notTransparent;\r\n this.SetFont(font);\r\n }\r\n\r\n setParameter(size: number, font?: string, alignmentPoint?: THREE.Vector2) {\r\n this.size = size || 1;\r\n if (alignmentPoint)\r\n this._alignmentPoint = alignmentPoint;\r\n this.SetFont(font);\r\n }\r\n\r\n SetFont(font?: string) {\r\n if (this._isDisposed)\r\n return;\r\n SDFFontMaterial.GetMetaData(font || \"Arial\", this.SetFontMeta.bind(this));\r\n }\r\n\r\n SetFontMeta(fontMeta: ISdfFontMeta) {\r\n if (this._isDisposed)\r\n return;\r\n this._fontMeta = fontMeta;\r\n if (fontMeta)\r\n this.ReGenerate();\r\n }\r\n\r\n ReGenerate() {\r\n if (this._isDisposed || !this._fontMeta)\r\n return;\r\n\r\n var instances = this._instances,\r\n fontMeta = this._fontMeta,\r\n maxInstancedCount = instances.map(inst => inst.text && inst.text.length ? inst.text.split(\"\").map(c => fontMeta.chars[c.charCodeAt(0)] || fontMeta.chars[32]).filter(char => char && char.id != 32).length : 0).reduce((pv, cv) => pv + cv, 0),\r\n insertPosition = this._insertPosition.set(0, 0),\r\n zOff = this.zOffset,\r\n scale = this.size / fontMeta.fontSize,\r\n alignmentPoint = this._alignmentPoint,\r\n bounds = this._bounds;\r\n\r\n bounds.makeEmpty();\r\n\r\n if (maxInstancedCount <= 0) {\r\n this.visible = false;\r\n return;\r\n } else if (!this.visible)\r\n this.visible = true;\r\n\r\n if (this._bufferSize < maxInstancedCount) {\r\n spt.ThreeJs.utils.emptyObject3D(this, true, true, false);\r\n\r\n if (this._sizeAttribute && (this._sizeAttribute).dispose)\r\n (this._sizeAttribute).dispose();\r\n this._sizeAttribute = null;\r\n\r\n if (this._offsetAttribute && (this._offsetAttribute).dispose)\r\n (this._offsetAttribute).dispose();\r\n this._offsetAttribute = null;\r\n\r\n if (this._uvMatAttribute && (this._uvMatAttribute).dispose)\r\n (this._uvMatAttribute).dispose();\r\n this._uvMatAttribute = null;\r\n\r\n if (this._colorAttribute && (this._colorAttribute).dispose)\r\n (this._colorAttribute).dispose();\r\n this._colorAttribute = null;\r\n\r\n //if (Detector.webglParameters.supportsInstancedArrays) {\r\n this._sizeAttribute = new THREE.InstancedBufferAttribute(new Float32Array(maxInstancedCount * 2), 2, false, 1);\r\n this._offsetAttribute = new THREE.InstancedBufferAttribute(new Float32Array(maxInstancedCount * 3), 3, false, 1);\r\n this._uvMatAttribute = new THREE.InstancedBufferAttribute(new Float32Array(maxInstancedCount * 4), 4, false, 1);\r\n this._colorAttribute = new THREE.InstancedBufferAttribute(new Float32Array(maxInstancedCount * 3), 3, false, 1);\r\n\r\n this._sizeAttribute.setUsage(THREE.DynamicDrawUsage);\r\n this._offsetAttribute.setUsage(THREE.DynamicDrawUsage);\r\n this._uvMatAttribute.setUsage(THREE.DynamicDrawUsage);\r\n this._colorAttribute.setUsage(THREE.DynamicDrawUsage);\r\n //} else {\r\n // //instancing not supported\r\n // this._sizeAttribute = new LS.Client3DEditor.FakeInstancedBufferAttribute(maxInstancedCount, 2);\r\n // this._offsetAttribute = new LS.Client3DEditor.FakeInstancedBufferAttribute(maxInstancedCount, 3);\r\n // this._uvMatAttribute = new LS.Client3DEditor.FakeInstancedBufferAttribute(maxInstancedCount, 4);\r\n // this._colorAttribute = new LS.Client3DEditor.FakeInstancedBufferAttribute(maxInstancedCount, 3);\r\n //}\r\n\r\n this._bufferSize = maxInstancedCount;\r\n }\r\n\r\n var sizeAttr = this._sizeAttribute,\r\n offsetAttr = this._offsetAttribute,\r\n uvMatAttr = this._uvMatAttribute,\r\n colorAttr = this._colorAttribute,\r\n instanceIndex = 0;\r\n\r\n sizeAttr.needsUpdate = true;\r\n offsetAttr.needsUpdate = true;\r\n uvMatAttr.needsUpdate = true;\r\n colorAttr.needsUpdate = true;\r\n\r\n instances.forEach(instance => {\r\n var txt = instance.text,\r\n pos = instance.pos,\r\n color = instance.col,\r\n chars = txt.split(\"\").map(c => fontMeta.chars[c.charCodeAt(0)] || fontMeta.chars[32]),\r\n txtWidth = chars.map(c => c.xadvance).reduce((pv, cv) => pv + cv, 0),\r\n ax = -alignmentPoint.x * txtWidth * scale,\r\n ay = -alignmentPoint.y * fontMeta.fontSize * scale;\r\n\r\n bounds.expandByPoint(new THREE.Vector3(pos.x + ax, pos.y + ay, pos.z - zOff));\r\n bounds.expandByPoint(new THREE.Vector3(pos.x + ax + txtWidth, pos.y + ay + fontMeta.fontSize, pos.z + zOff));\r\n\r\n chars.forEach(char => {\r\n //skip whitespace\r\n if (char.id == 32) {\r\n insertPosition.x += char.xadvance;\r\n return;\r\n }\r\n\r\n var size = fontMeta.imageSize,\r\n xOff = pos.x + (insertPosition.x + char.xoffset) * scale + ax,\r\n yOff = pos.y + (insertPosition.y - char.height + char.yoffset) * scale + ay,\r\n w = (char.width / size),\r\n h = (char.height / size),\r\n x = (char.x / size),\r\n y = 1 - ((char.y + char.height) / size);\r\n\r\n sizeAttr.setXY(instanceIndex, char.width * scale, char.height * scale);\r\n offsetAttr.setXYZ(instanceIndex, xOff, yOff, pos.z + zOff);\r\n uvMatAttr.setXYZW(instanceIndex, x, y, w, h);\r\n colorAttr.setXYZ(instanceIndex, color.r, color.g, color.b);\r\n\r\n insertPosition.x += char.xadvance;\r\n ++instanceIndex;\r\n });\r\n\r\n insertPosition.set(0, 0);\r\n });\r\n\r\n if (!this.children.length) {\r\n var buildGeometry: THREE.InstancedBufferGeometry/* | THREE.BufferGeometry*/ = /*Detector.webglParameters.supportsInstancedArrays ? */new THREE.InstancedBufferGeometry()/* : new THREE.BufferGeometry()*/;\r\n\r\n buildGeometry.boundingSphere = bounds.getBoundingSphere(new THREE.Sphere());\r\n buildGeometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array([0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0]), 3));\r\n buildGeometry.setAttribute('uv', new THREE.BufferAttribute(new Float32Array([0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1]), 2));\r\n\r\n //if (Detector.webglParameters.supportsInstancedArrays) {\r\n (buildGeometry as THREE.InstancedBufferGeometry).maxInstancedCount = maxInstancedCount;\r\n buildGeometry.setAttribute('sizei', sizeAttr as any);\r\n buildGeometry.setAttribute('offseti', offsetAttr as any);\r\n buildGeometry.setAttribute('uvMati', uvMatAttr as any);\r\n buildGeometry.setAttribute('colori', colorAttr as any);\r\n //} else {\r\n // //fallback method (slowdown expected)\r\n\r\n // var vLength = (buildGeometry.attributes as any).position.array.length / 3;\r\n\r\n // //duplicate indices\r\n // //if (buildGeometry.getIndex()) {\r\n // // var attribute = buildGeometry.getIndex(),\r\n // // array = attribute.array,\r\n // // arrayLength = array.length,\r\n // // newLength = arrayLength * maxInstancedCount,\r\n // // newArray = new (array as any).constructor(newLength);\r\n\r\n // // for (var iIdx = maxInstancedCount; iIdx--;) {\r\n // // var off = iIdx * arrayLength,\r\n // // iOff = iIdx * vLength;\r\n // // for (var i = arrayLength; i--;) {\r\n // // newArray[i + off] = array[i] + iOff;\r\n // // }\r\n // // }\r\n\r\n // // attribute.array = newArray;\r\n // //}\r\n\r\n // //duplicate attributes\r\n // var attributes = Object.keys(buildGeometry.attributes);\r\n // for (var k = attributes.length; k--;) {\r\n // var name = attributes[k],\r\n // attrib = buildGeometry.attributes[name] as THREE.BufferAttribute,\r\n // arr = attrib.array,\r\n // arrLength = arr.length,\r\n // nLength = arrLength * maxInstancedCount,\r\n // nArray = new (arr as any).constructor(nLength);\r\n // ArrayHelper.iterateTimes(nLength, (i) => {\r\n // nArray[i] = arr[i % arrLength];\r\n // });\r\n // attrib.array = nArray;\r\n // }\r\n // (sizeAttr as LS.Client3DEditor.FakeInstancedBufferAttribute).addToBufferGeometry(buildGeometry, 'sizei', vLength);\r\n // (offsetAttr as LS.Client3DEditor.FakeInstancedBufferAttribute).addToBufferGeometry(buildGeometry, 'offseti', vLength);\r\n // (uvMatAttr as LS.Client3DEditor.FakeInstancedBufferAttribute).addToBufferGeometry(buildGeometry, 'uvMati', vLength);\r\n // (colorAttr as LS.Client3DEditor.FakeInstancedBufferAttribute).addToBufferGeometry(buildGeometry, 'colori', vLength);\r\n //}\r\n\r\n this.add(new THREE.Mesh(buildGeometry, SDFFontMaterial.getInstance(this._fontMeta.name, true, this._depthTest, this._depthWrite, this._notTransparent)));\r\n } else {\r\n this.children.forEach((child: THREE.Mesh) => {\r\n (child.geometry as THREE.InstancedBufferGeometry).maxInstancedCount = maxInstancedCount;\r\n });\r\n }\r\n\r\n this._needsUpdate = false;\r\n }\r\n\r\n clear() {\r\n if (this._isDisposed)\r\n return;\r\n this._instances = [];\r\n spt.ThreeJs.utils.emptyObject3D(this, true, true);\r\n }\r\n\r\n dispose() {\r\n this.clear();\r\n delete this._fontMeta;\r\n this._isDisposed = true;\r\n }\r\n }\r\n\r\n export class DimensionAligned extends THREE.Object3D implements LS.Client3DEditor.ISelectableUi {\r\n private _text: string = null;\r\n private _start: THREE.Vector3;\r\n private _end: THREE.Vector3;\r\n private _start2: THREE.Vector3;\r\n private _end2: THREE.Vector3;\r\n private _dimensionPosition: THREE.Vector3;\r\n private _textSize: number;\r\n private _color: THREE.Color;\r\n private _fontName: string;\r\n private _arrowLength: number = 100;\r\n private _arrowSlope: number = 1 / 6;\r\n private _linear = false;\r\n private _rotation = 0; //Math.PI * 0.5;\r\n private _textVerticalAlignment = 0;\r\n\r\n static materialInstances: { [name: string]: THREE.Material } = {};\r\n public static lineMaterial: THREE.Material = null;\r\n public static arrowMaterial: THREE.Material = null;\r\n\r\n zOffset = 0.2;\r\n\r\n private _activeColor = new THREE.Color();\r\n\r\n get activeColor() {\r\n if (this.isSelected || this.isHovered)\r\n return this._activeColor.set(this.isSelected ? 0xD52CE8 : 0xffff00);\r\n return this._activeColor.copy(this.color);\r\n }\r\n\r\n _isDisposed = false;\r\n\r\n private isDynamic: boolean;\r\n private vertexColors: boolean;\r\n\r\n isSelected: boolean;\r\n isHovered: boolean;\r\n\r\n applyObjectPosition() {\r\n //this.position.set(0, 0, 0);\r\n }\r\n\r\n OnChanged(viewModel?: LS.Client3DEditor.ViewModel) {\r\n var childs = this.children;\r\n if (!childs || !childs.length || this.vertexColors) {\r\n return;\r\n }\r\n\r\n var color = this.activeColor;\r\n\r\n for (var i = childs.length; i--;) {\r\n var child = childs[i];\r\n if (child instanceof SDFTextObject) {\r\n //child.color = color;\r\n } else if (child instanceof THREE.Line) {\r\n child.material = this.getLineMaterial(color);\r\n } else if (child instanceof THREE.Mesh) {\r\n child.material = this.getArrowMaterial(color);\r\n }\r\n }\r\n }\r\n\r\n public getArrowMaterial(color: THREE.Color) {\r\n if (!this.vertexColors) {\r\n var arrowMaterial: THREE.Material;\r\n var meshMatKey = \"Mesh:\" + color.getHexString();\r\n\r\n if (!DimensionAligned.materialInstances[meshMatKey]) {\r\n arrowMaterial = new THREE.MeshBasicMaterial({\r\n color: color as any,\r\n fog: false,\r\n side: THREE.DoubleSide\r\n });\r\n DimensionAligned.materialInstances[meshMatKey] = arrowMaterial;\r\n } else {\r\n arrowMaterial = DimensionAligned.materialInstances[meshMatKey];\r\n }\r\n\r\n return arrowMaterial as THREE.MeshBasicMaterial;\r\n }\r\n if (!DimensionAligned.arrowMaterial) {\r\n DimensionAligned.arrowMaterial = new THREE.MeshBasicMaterial({\r\n vertexColors: true, //THREE.VertexColors,\r\n fog: false,\r\n side: THREE.DoubleSide\r\n });\r\n }\r\n return DimensionAligned.arrowMaterial as THREE.MeshBasicMaterial;\r\n }\r\n\r\n public getLineMaterial(color: THREE.Color) {\r\n if (!this.vertexColors) {\r\n var material: THREE.Material;\r\n var lineMatKey = \"Line:\" + color.getHexString();\r\n\r\n if (!DimensionAligned.materialInstances[lineMatKey]) {\r\n material = new THREE.LineBasicMaterial({\r\n color: color as any,\r\n fog: false\r\n });\r\n DimensionAligned.materialInstances[lineMatKey] = material;\r\n } else {\r\n material = DimensionAligned.materialInstances[lineMatKey];\r\n }\r\n\r\n return material as THREE.LineBasicMaterial;\r\n }\r\n if (!DimensionAligned.lineMaterial) {\r\n DimensionAligned.lineMaterial = new THREE.LineBasicMaterial({\r\n vertexColors: true, //THREE.VertexColors,\r\n fog: false\r\n });\r\n }\r\n return DimensionAligned.lineMaterial as THREE.LineBasicMaterial;\r\n }\r\n\r\n removeInstance() {\r\n var parent = this.parent;\r\n if (parent && parent instanceof LS.Client3DEditor.MeasureObjectHolder) {\r\n parent.removeDimensionLine(this);\r\n }\r\n }\r\n\r\n moveBy(v: THREE.Vector3) {\r\n\r\n }\r\n\r\n GetPositionProperty(k: string) {\r\n return this._start2[k] || null;\r\n }\r\n\r\n GetSizeProperty(k: string): number {\r\n return 0;\r\n }\r\n \r\n get fontName() {\r\n return this._fontName;\r\n }\r\n\r\n set fontName(value: string) {\r\n if (value && value.length) {\r\n this._fontName = value;\r\n this.rebuild();\r\n }\r\n }\r\n\r\n get textSize() {\r\n return this._textSize;\r\n }\r\n\r\n set textSize(value: number) {\r\n if (value > 0) {\r\n this._textSize = value;\r\n this.rebuild();\r\n }\r\n }\r\n\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n set color(value: THREE.Color) {\r\n this._color.copy(value);\r\n this.OnChanged();\r\n }\r\n\r\n get text() {\r\n return this._text;\r\n }\r\n\r\n set text(value) {\r\n this._text = value;\r\n this.rebuild();\r\n }\r\n\r\n get isLinear() {\r\n return this._linear;\r\n }\r\n\r\n set isLinear(value) {\r\n this._linear = value;\r\n this.rebuild();\r\n }\r\n\r\n get linearRotation() {\r\n return this._rotation;\r\n }\r\n\r\n set linearRotation(value) {\r\n this._rotation = value;\r\n this.rebuild();\r\n }\r\n\r\n get start() {\r\n return this._start;\r\n }\r\n\r\n set start(value: THREE.Vector3) {\r\n this._start.copy(value);\r\n this.rebuild();\r\n }\r\n\r\n get end() {\r\n return this._end;\r\n }\r\n\r\n set end(value: THREE.Vector3) {\r\n this._end.copy(value);\r\n this.rebuild();\r\n }\r\n\r\n setEndAutoPosition(end: THREE.Vector3) {\r\n this._end.copy(end);\r\n var se = this._end2.copy(end).sub(this._start);\r\n se.normalize();\r\n if (Math.abs(se.y) <= 0.0001 && Math.abs(se.x) <= 0.0001)\r\n se.set(0, 1, 0);\r\n this.dimensionPosition.set(se.y, -se.x, se.z).multiplyScalar(50).add(this._start);\r\n this.rebuild();\r\n }\r\n\r\n get dimensionPosition() {\r\n return this._dimensionPosition;\r\n }\r\n\r\n set dimensionPosition(value: THREE.Vector3) {\r\n this._dimensionPosition.copy(value);\r\n this.rebuild();\r\n }\r\n\r\n get mlineStart() {\r\n return this._start2;\r\n }\r\n\r\n get mlineEnd() {\r\n return this._end2;\r\n }\r\n\r\n setPositions(s: THREE.Vector3, e: THREE.Vector3, p: THREE.Vector3) {\r\n this._start.copy(s);\r\n this._end.copy(e);\r\n this._dimensionPosition.copy(p);\r\n this.rebuild();\r\n }\r\n\r\n setParameter(startx?: number, starty?: number, startz?: number, endx?: number, endy?: number, endz?: number, positionx?: number, positiony?: number, positionz?: number, colorHex?: number, textSize?: number, fontName?: string, text?: string) {\r\n if (startx !== undefined && starty !== undefined && startz !== undefined)\r\n this._start.set(startx, starty, startz);\r\n if (endx !== undefined && endy !== undefined && endz !== undefined)\r\n this._end.set(endx, endy, endz);\r\n if (positionx !== undefined && positiony !== undefined && positionz !== undefined)\r\n this._dimensionPosition.set(positionx, positiony, positionz);\r\n if (colorHex !== undefined)\r\n this._color.setHex(colorHex);\r\n if (textSize !== undefined)\r\n this._textSize = textSize;\r\n if (fontName !== undefined)\r\n this._fontName = fontName;\r\n if (text !== undefined)\r\n this._text = text;\r\n this.rebuild();\r\n }\r\n\r\n constructor(start?: THREE.Vector3, end?: THREE.Vector3, position?: THREE.Vector3, color?: THREE.Color, textSize?: number, fontName?: string, isDynamic?: boolean, vertexColors?: boolean, text?: string, isLinear?: boolean, rotation?: number, textVerticalAlignment?: number) {\r\n super();\r\n\r\n this.type = \"DimensionAligned\";\r\n this._start = start || new THREE.Vector3();\r\n this._end = end || new THREE.Vector3();\r\n this._start2 = new THREE.Vector3();\r\n this._end2 = new THREE.Vector3();\r\n this._dimensionPosition = position || new THREE.Vector3();\r\n this._color = color || new THREE.Color(0x888888);\r\n this._textSize = textSize || 100;\r\n this._text = text || null;\r\n this._fontName = fontName || \"Arial\";\r\n this.isSelected = false;\r\n this.isDynamic = !!isDynamic;\r\n this.vertexColors = !isDynamic && vertexColors;\r\n this._linear = !!isLinear;\r\n this._rotation = rotation || 0;\r\n this._textVerticalAlignment = textVerticalAlignment || 0;\r\n\r\n this.rebuild();\r\n }\r\n \r\n reset() {\r\n this.start.set(0, 0, 0);\r\n this.end.set(0, 0, 0);\r\n this.position.set(0, 0, 0);\r\n this.rebuild();\r\n }\r\n\r\n dispose() {\r\n spt.ThreeJs.utils.emptyObject3D(this, true, true);\r\n this._isDisposed = true;\r\n }\r\n\r\n rebuild() {\r\n var start = this._start,\r\n end = this._end,\r\n se = end.clone().sub(start),\r\n p = this._dimensionPosition,\r\n sp = p.clone().sub(start),\r\n ep = p.clone().sub(end),\r\n seLengthSq = se.lengthSq(),\r\n color = this.activeColor,\r\n textSize = this._textSize,\r\n fontName = this._fontName,\r\n EPS = 0.0001,\r\n isLinear = this._linear,\r\n rotation = this._rotation,\r\n textVerticalAlignment = this._textVerticalAlignment;\r\n \r\n if (this.isDynamic) {\r\n if (seLengthSq <= EPS) {\r\n this.visible = false;\r\n return;\r\n }\r\n this.visible = true;\r\n } else {\r\n spt.ThreeJs.utils.emptyObject3D(this, true, true);\r\n\r\n if (seLengthSq <= EPS)\r\n return;\r\n }\r\n\r\n var seLength = Math.sqrt(seLengthSq),\r\n seDir = se.clone().divideScalar(seLength);\r\n\r\n var dimensionOffsetDir: THREE.Vector3;\r\n var start2: THREE.Vector3;\r\n var end2: THREE.Vector3;\r\n\r\n if (isLinear) {\r\n dimensionOffsetDir = new THREE.Vector3(0, 1, 0);\r\n if (rotation != 0)\r\n dimensionOffsetDir.applyMatrix4(new THREE.Matrix4().makeRotationZ(rotation));\r\n\r\n var up = new THREE.Vector3(0, 0, 1);\r\n var localUp = sp.clone().cross(ep).normalize();\r\n if (localUp.lengthSq() <= 0.001)\r\n localUp.copy(up);\r\n if (localUp.z < 0)\r\n localUp.negate();\r\n if (localUp.z < 1 && up.angleTo(localUp) > 0) {\r\n var xAxis = up.clone().cross(localUp).normalize();\r\n var yAxis = xAxis.clone().cross(localUp).normalize();\r\n xAxis.multiplyScalar(dimensionOffsetDir.x);\r\n yAxis.multiplyScalar(dimensionOffsetDir.y);\r\n dimensionOffsetDir.copy(xAxis).add(yAxis).normalize();\r\n }\r\n\r\n start2 = this._start2.copy(start).add(dimensionOffsetDir.clone().multiplyScalar(dimensionOffsetDir.dot(sp)));\r\n end2 = this._end2.copy(end).add(dimensionOffsetDir.clone().multiplyScalar(dimensionOffsetDir.dot(ep)));\r\n seDir.copy(end2).sub(start2);\r\n seLengthSq = seDir.lengthSq();\r\n seLength = Math.sqrt(seLengthSq);\r\n seDir = seDir.divideScalar(seLength);\r\n } else {\r\n var dimensionOffset = se.clone().multiplyScalar(sp.dot(se) / seLengthSq).add(start).sub(p).negate();\r\n\r\n if (dimensionOffset.lengthSq() <= EPS) {\r\n dimensionOffset.copy(se);\r\n dimensionOffset.normalize();\r\n if (Math.abs(dimensionOffset.y) <= EPS && Math.abs(dimensionOffset.x) <= EPS)\r\n dimensionOffset.set(0, 1, 0);\r\n dimensionOffset.set(dimensionOffset.y, -dimensionOffset.x, dimensionOffset.z);\r\n dimensionOffsetDir = dimensionOffset;\r\n start2 = this._start2.copy(start);\r\n end2 = this._end2.copy(end);\r\n } else {\r\n dimensionOffsetDir = dimensionOffset.clone().normalize();\r\n start2 = this._start2.copy(start).add(dimensionOffset);\r\n end2 = this._end2.copy(end).add(dimensionOffset);\r\n }\r\n }\r\n\r\n var alignRight = seDir.clone();\r\n var alignUp = dimensionOffsetDir.clone();\r\n\r\n if (alignRight.x < -0.01) {\r\n alignRight.negate();\r\n }\r\n if (alignRight.x < 0.01 && alignRight.y < 0) {\r\n alignRight.negate();\r\n }\r\n\r\n if (alignUp.y < -0.01) {\r\n alignUp.negate();\r\n }\r\n if (alignUp.y < 0.01 && alignUp.x > 0) {\r\n alignUp.negate();\r\n }\r\n\r\n var textText: string = this._text;\r\n\r\n if (!textText || !textText.length || typeof textText !== \"string\") {\r\n if (UseImperialSystem) {\r\n let textVal = convertLengthUnit(seLength, { from: \"mm\", to: \"in\" });\r\n\r\n textText = textVal.toFixed(1) + \"\\\"\";\r\n }\r\n else\r\n textText = Math.round(seLength).toString(); //seLength.toFixed(2);\r\n }\r\n\r\n if (this.isDynamic) {\r\n var txtObj: SDFTextObject;\r\n var lines: THREE.LineSegments;\r\n var linesGeo: THREE.Geometry;\r\n var arrows: THREE.Mesh;\r\n var arrowsGeo: THREE.Geometry;\r\n var childs = this.children;\r\n if (childs.length) {\r\n for (var i = childs.length; i--;) {\r\n var child = childs[i];\r\n if (child instanceof SDFTextObject) {\r\n txtObj = child as SDFTextObject;\r\n } else if (child instanceof THREE.LineSegments) {\r\n lines = child as THREE.LineSegments;\r\n linesGeo = lines.geometry as THREE.Geometry;\r\n lines.material = this.getLineMaterial(color);\r\n } else if (child instanceof THREE.Mesh) {\r\n arrows = child as THREE.Mesh;\r\n arrowsGeo = arrows.geometry as THREE.Geometry;\r\n arrows.material = this.getArrowMaterial(color);\r\n }\r\n }\r\n txtObj.setParameter(textText, textSize, color, fontName);\r\n }\r\n else\r\n {\r\n linesGeo = new THREE.Geometry();\r\n linesGeo.vertices.push(new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3());\r\n lines = new THREE.LineSegments(linesGeo, this.getLineMaterial(color));\r\n arrowsGeo = new THREE.Geometry();\r\n arrowsGeo.faces.push(new THREE.Face3(0, 1, 2), new THREE.Face3(3, 4, 5));\r\n arrowsGeo.vertices.push(new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3());\r\n arrows = new THREE.Mesh(arrowsGeo, this.getArrowMaterial(color));\r\n txtObj = new SDFTextObject(textText, textSize, color, fontName, this.isDynamic, new THREE.Vector2(0.5, textVerticalAlignment));\r\n this.add(txtObj);\r\n this.add(arrows);\r\n this.add(lines);\r\n }\r\n\r\n var dtextRotation = new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(1, 0, 0), alignRight);\r\n\r\n dtextRotation.copy(new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0).applyQuaternion(dtextRotation), alignUp).multiply(dtextRotation));\r\n txtObj.setRotationFromQuaternion(dtextRotation);\r\n\r\n txtObj.position.copy(start2).add(end2).multiplyScalar(0.5);\r\n\r\n txtObj.onLoad((txObj) => {\r\n var textWidth = txObj.getWidth();\r\n\r\n if (textWidth > (seLength - (this._arrowLength * 3))) {\r\n var txOff = alignUp.clone().multiplyScalar(this._arrowLength * 0.5);\r\n if (textVerticalAlignment > 0.5)\r\n txOff.negate();\r\n txObj.position.add(txOff);\r\n\r\n var mp = start2.clone().add(end2).multiplyScalar(0.5);\r\n\r\n linesGeo.vertices[0].set(start.x, start.y, start.z);\r\n linesGeo.vertices[1].set(start2.x, start2.y, start2.z);\r\n linesGeo.vertices[2].set(start2.x, start2.y, start2.z);\r\n linesGeo.vertices[3].set(mp.x, mp.y, mp.z);\r\n linesGeo.vertices[4].set(mp.x, mp.y, mp.z);\r\n linesGeo.vertices[5].set(end2.x, end2.y, end2.z);\r\n linesGeo.vertices[6].set(end2.x, end2.y, end2.z);\r\n linesGeo.vertices[7].set(end.x, end.y, end.z);\r\n } else {\r\n\r\n var tl = (seLength - textWidth) / 2;\r\n var start3 = seDir.clone().multiplyScalar(tl).add(start2);\r\n var end3 = seDir.clone().multiplyScalar(tl + textWidth).add(start2);\r\n\r\n linesGeo.vertices[0].set(start.x, start.y, start.z);\r\n linesGeo.vertices[1].set(start2.x, start2.y, start2.z);\r\n linesGeo.vertices[2].set(start2.x, start2.y, start2.z);\r\n linesGeo.vertices[3].set(start3.x, start3.y, start3.z);\r\n linesGeo.vertices[4].set(end3.x, end3.y, end3.z);\r\n linesGeo.vertices[5].set(end2.x, end2.y, end2.z);\r\n linesGeo.vertices[6].set(end2.x, end2.y, end2.z);\r\n linesGeo.vertices[7].set(end.x, end.y, end.z);\r\n }\r\n\r\n linesGeo.verticesNeedUpdate = true;\r\n linesGeo.computeBoundingSphere();\r\n\r\n var aor = dimensionOffsetDir.clone().multiplyScalar(this._arrowLength * this._arrowSlope);\r\n\r\n var as2 = seDir.clone().multiplyScalar(this._arrowLength).add(start2).sub(aor);\r\n var as3 = as2.clone().add(aor).add(aor);\r\n\r\n var es2 = seDir.clone().multiplyScalar(-this._arrowLength).add(end2).add(aor);;\r\n var es3 = es2.clone().sub(aor).sub(aor);\r\n\r\n arrowsGeo.vertices[0].set(start2.x, start2.y, start2.z);\r\n arrowsGeo.vertices[1].set(as2.x, as2.y, as2.z);\r\n arrowsGeo.vertices[2].set(as3.x, as3.y, as3.z);\r\n\r\n arrowsGeo.vertices[3].set(end2.x, end2.y, end2.z);\r\n arrowsGeo.vertices[4].set(es2.x, es2.y, es2.z);\r\n arrowsGeo.vertices[5].set(es3.x, es3.y, es3.z);\r\n\r\n arrowsGeo.verticesNeedUpdate = true;\r\n arrowsGeo.computeBoundingSphere();\r\n });\r\n\r\n } else {\r\n\r\n var textObject = new SDFTextObject(textText, textSize, color, fontName, this.isDynamic, new THREE.Vector2(0.5, textVerticalAlignment));\r\n\r\n var textRotation = new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(1, 0, 0), alignRight);\r\n\r\n textRotation.copy(new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 1, 0).applyQuaternion(textRotation), alignUp).multiply(textRotation));\r\n textObject.setRotationFromQuaternion(textRotation);\r\n\r\n textObject.position.copy(start2).add(end2).multiplyScalar(0.5);\r\n\r\n textObject.onLoad((txObj) => {\r\n this.add(txObj);\r\n\r\n var textWidth = txObj.getWidth();\r\n var zOff = this.zOffset;\r\n var geometry = new THREE.BufferGeometry();\r\n\r\n if (textWidth > (seLength - (this._arrowLength * 3))) {\r\n var txOff = alignUp.clone().multiplyScalar(this._arrowLength * 0.5);\r\n if (textVerticalAlignment > 0.5)\r\n txOff.negate();\r\n txObj.position.add(txOff);\r\n if (start.distanceToSquared(start2) <= EPS) {\r\n geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array([\r\n start2.x, start2.y, start2.z + zOff,\r\n end2.x, end2.y, end2.z + zOff\r\n ]), 3));\r\n\r\n if (this.vertexColors) {\r\n geometry.setAttribute('color', new THREE.BufferAttribute(new Float32Array([\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b\r\n ]), 3));\r\n }\r\n } else {\r\n geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array([\r\n start.x, start.y, start.z + zOff,\r\n start2.x, start2.y, start2.z + zOff,\r\n\r\n start2.x, start2.y, start2.z + zOff,\r\n end2.x, end2.y, end2.z + zOff,\r\n\r\n end2.x, end2.y, end2.z + zOff,\r\n end.x, end.y, end.z + zOff\r\n ]), 3));\r\n if (this.vertexColors) {\r\n geometry.setAttribute('color', new THREE.BufferAttribute(new Float32Array([\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b\r\n ]), 3));\r\n }\r\n }\r\n } else {\r\n\r\n var tl = (seLength - textWidth) / 2;\r\n var start3 = seDir.clone().multiplyScalar(tl).add(start2);\r\n var end3 = seDir.clone().multiplyScalar(tl + textWidth).add(start2);\r\n\r\n if (start.distanceToSquared(start2) <= EPS) {\r\n geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array([\r\n start2.x, start2.y, start2.z + zOff,\r\n start3.x, start3.y, start3.z + zOff,\r\n\r\n end3.x, end3.y, end3.z + zOff,\r\n end2.x, end2.y, end2.z + zOff\r\n ]), 3));\r\n if (this.vertexColors) {\r\n geometry.setAttribute('color', new THREE.BufferAttribute(new Float32Array([\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b\r\n ]), 3));\r\n }\r\n } else {\r\n geometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array([\r\n start.x, start.y, start.z + zOff,\r\n start2.x, start2.y, start2.z + zOff,\r\n\r\n start2.x, start2.y, start2.z + zOff,\r\n start3.x, start3.y, start3.z + zOff,\r\n\r\n end3.x, end3.y, end3.z + zOff,\r\n end2.x, end2.y, end2.z + zOff,\r\n\r\n end2.x, end2.y, end2.z + zOff,\r\n end.x, end.y, end.z + zOff\r\n ]), 3));\r\n if (this.vertexColors) {\r\n geometry.setAttribute('color', new THREE.BufferAttribute(new Float32Array([\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b\r\n ]), 3));\r\n }\r\n }\r\n }\r\n\r\n var mesh = new THREE.LineSegments(geometry, this.getLineMaterial(color));\r\n\r\n this.add(mesh);\r\n\r\n //Arrows\r\n\r\n var arrowGeometry = new THREE.BufferGeometry();\r\n\r\n var aor = dimensionOffsetDir.clone().multiplyScalar(this._arrowLength * this._arrowSlope);\r\n\r\n var as2 = seDir.clone().multiplyScalar(this._arrowLength).add(start2).sub(aor);\r\n var as3 = as2.clone().add(aor).add(aor);\r\n\r\n var es2 = seDir.clone().multiplyScalar(-this._arrowLength).add(end2).add(aor);;\r\n var es3 = es2.clone().sub(aor).sub(aor);\r\n\r\n arrowGeometry.setAttribute('position', new THREE.BufferAttribute(new Float32Array([\r\n start2.x, start2.y, start2.z + zOff,\r\n as2.x, as2.y, as2.z + zOff,\r\n as3.x, as3.y, as3.z + zOff,\r\n\r\n end2.x, end2.y, end2.z + zOff,\r\n es2.x, es2.y, es2.z + zOff,\r\n es3.x, es3.y, es3.z + zOff\r\n ]), 3));\r\n\r\n if (this.vertexColors) {\r\n arrowGeometry.setAttribute('color', new THREE.BufferAttribute(new Float32Array([\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b,\r\n color.r, color.g, color.b\r\n ]), 3));\r\n }\r\n\r\n var arrowMesh = new THREE.Mesh(arrowGeometry, this.getArrowMaterial(color));\r\n\r\n this.add(arrowMesh);\r\n });\r\n }\r\n }\r\n\r\n duplicate() {\r\n\r\n }\r\n\r\n rotateByPivot(pivot: THREE.Vector3, angleRad: number) { }\r\n\r\n getPivot(): THREE.Vector3 { return null; }\r\n\r\n }\r\n\r\n export class DimensionAlignedCollection extends THREE.Object3D {\r\n constructor(input: any[] | DimensionAligned[], fontName?: string) {\r\n super();\r\n\r\n if (!fontName)\r\n fontName = \"Arial\";\r\n\r\n if (!input || !input.length)\r\n return;\r\n\r\n var dimensions: DimensionAligned[];\r\n\r\n if (typeof input[0] === \"object\" && input[0] instanceof THREE.DimensionAligned) {\r\n dimensions = (input).map(dim =>\r\n new THREE.DimensionAligned(\r\n dim.start,\r\n dim.end,\r\n dim.dimensionPosition,\r\n dim.color,\r\n dim.textSize,\r\n fontName,\r\n false,\r\n true,\r\n dim.text,\r\n dim.isLinear,\r\n dim.linearRotation)\r\n );\r\n } else {\r\n var data = input as any[];\r\n dimensions = [];\r\n\r\n var i = 0;\r\n if (data.length && data.length % 16 === 0 && typeof data[14] === \"boolean\") {\r\n while (i < data.length) {\r\n dimensions.push(new THREE.DimensionAligned(\r\n new THREE.Vector3(data[i++], data[i++], data[i++]),\r\n new THREE.Vector3(data[i++], data[i++], data[i++]),\r\n new THREE.Vector3(data[i++], data[i++], data[i++]),\r\n new THREE.Color(data[i++], data[i++], data[i++]),\r\n data[i++],\r\n fontName,\r\n false,\r\n true,\r\n data[i++],\r\n data[i++],\r\n data[i++]));\r\n }\r\n }\r\n else if (data.length % 14 === 0) {\r\n while (i < data.length) {\r\n dimensions.push(new THREE.DimensionAligned(\r\n new THREE.Vector3(data[i++], data[i++], data[i++]),\r\n new THREE.Vector3(data[i++], data[i++], data[i++]),\r\n new THREE.Vector3(data[i++], data[i++], data[i++]),\r\n new THREE.Color(data[i++], data[i++], data[i++]),\r\n data[i++],\r\n fontName,\r\n false,\r\n true,\r\n data[i++]));\r\n }\r\n }\r\n }\r\n\r\n if (!dimensions || !dimensions.length)\r\n return;\r\n\r\n setTimeout(() => {\r\n SDFFontMaterial.GetMetaData(fontName, (metaData) => {\r\n\r\n var textobjects: SDFTextObject[] = [];\r\n var lines: THREE.Line[] = [];\r\n var meshes: THREE.Mesh[] = [];\r\n\r\n dimensions.filter(dim => dim.visible).forEach(dim => {\r\n var childs = dim.children;\r\n\r\n for (var i = childs.length; i--;) {\r\n var child = childs[i];\r\n if (child instanceof SDFTextObject) {\r\n textobjects.push(child);\r\n } else if (child instanceof THREE.Line) {\r\n lines.push(child);\r\n } else if (child instanceof THREE.Mesh) {\r\n meshes.push(child);\r\n }\r\n }\r\n });\r\n\r\n if (textobjects.length) {\r\n this.add(new THREE.SDFTextObjectCollection(textobjects, fontName));\r\n }\r\n\r\n if (lines.length) {\r\n var newLinesGeometry = spt.ThreeJs.utils.MergeBufferGeometries(lines.map(line => line.geometry as THREE.BufferGeometry));\r\n this.add(new THREE.LineSegments(newLinesGeometry, DimensionAligned.lineMaterial as THREE.LineBasicMaterial));\r\n }\r\n\r\n if (meshes.length) {\r\n var newMeshGeometry = spt.ThreeJs.utils.MergeBufferGeometries(meshes.map(mesh => mesh.geometry as THREE.BufferGeometry));\r\n this.add(new THREE.Mesh(newMeshGeometry, DimensionAligned.arrowMaterial));\r\n }\r\n\r\n dimensions.forEach(d => d.dispose());\r\n\r\n });\r\n }, 0);\r\n }\r\n }\r\n\r\n export class DirectedAreaDefinition extends THREE.Object3D implements LS.Client3DEditor.ISelectableUi, SolarProTool.IDirectedAreaDefinition {\r\n\r\n static EdgeBottom = 0;\r\n static EdgeRight = 1;\r\n static EdgeTop = 2;\r\n static EdgeLeft = 3;\r\n\r\n IdString: string = null;\r\n\r\n private _box: THREE.Box3 = new THREE.Box3();\r\n private _origPosition = new THREE.Vector3();\r\n private _start = new THREE.Vector3();\r\n private _end = new THREE.Vector3();\r\n private _start2 = new THREE.Vector3();\r\n private _end2 = new THREE.Vector3();\r\n private _dimensionPosition = new THREE.Vector3();\r\n private _offsetVector = new THREE.Vector3();\r\n private _directionVector = new THREE.Vector3();\r\n private _lineColor = new THREE.Color(0xCC4700);\r\n private _areaColor = new THREE.Color(0xF77834);\r\n private _areaColorAlternate = new THREE.Color(0xD44A00);\r\n private _arrowColor = new THREE.Color(0xF7AB05);\r\n private _activeLineColor = new THREE.Color();\r\n private _activeAreaColor = new THREE.Color();\r\n private _activeAreaColorAlternate = new THREE.Color();\r\n private _activeArrowColor = new THREE.Color();\r\n private _userData: any = {};\r\n private _edges: THREE.Vector3[][];\r\n private _height = 0;\r\n private _length = 0;\r\n private _generated: THREE.Object3D[] = [];\r\n private _constructed: THREE.Object3D = null;\r\n private _alpha: number = 1;\r\n private _rasterYCounts: number[] = [1];\r\n private _rasterXLengths: number[] = [0];\r\n private _subRanges: number[] = [0];\r\n private _skipRebuild: boolean;\r\n\r\n private _disabledSubAreas: number[];\r\n private _disabledSubAreasNeedsUpdate;\r\n\r\n private _excludeInterval: number[][];\r\n private _includeInterval: number[][];\r\n\r\n flip: boolean = false;\r\n\r\n _isDisposed: boolean = false;\r\n\r\n isDynamic: boolean = false;\r\n private _isSelected: boolean = false;\r\n isHovered: boolean = false;\r\n withArrow: boolean = true;\r\n\r\n constructor(areaDefinition?: SolarProTool.IDirectedAreaDefinition) {\r\n super();\r\n\r\n this.copyFrom(areaDefinition);\r\n }\r\n\r\n addInterval(from: number, to: number, include?: boolean) {\r\n var v1 = Math.round(from),\r\n v2 = Math.round(to),\r\n start = Math.min(v1, v2),\r\n end = Math.max(v1, v2);\r\n\r\n if (include) {\r\n if (!this._includeInterval)\r\n this._includeInterval = [];\r\n\r\n this._includeInterval.push([start, end]);\r\n } else {\r\n if (!this._excludeInterval)\r\n this._excludeInterval = [];\r\n\r\n this._excludeInterval.push([start, end]);\r\n }\r\n }\r\n\r\n setIntervals(inters: number[][], include?: boolean) {\r\n if (include)\r\n this._includeInterval = inters || [];\r\n else\r\n this._excludeInterval = inters || [];\r\n\r\n this.rebuild();\r\n }\r\n\r\n setDisabledSubAreas(indices?: number[]) {\r\n if (indices && indices.length)\r\n this._disabledSubAreas = indices.slice();\r\n else\r\n this._disabledSubAreas = null;\r\n this._disabledSubAreasNeedsUpdate = true;\r\n\r\n this.rebuild();\r\n }\r\n\r\n addToDisabledSubAreas(index: number, toggle?: boolean) {\r\n if (!this._disabledSubAreas)\r\n this._disabledSubAreas = [];\r\n if (this._disabledSubAreas.some(idx => idx === index)) {\r\n if (toggle)\r\n this._disabledSubAreas = this._disabledSubAreas.filter(idx => idx !== index);\r\n } else\r\n this._disabledSubAreas.push(index);\r\n this._disabledSubAreasNeedsUpdate = true;\r\n }\r\n\r\n appendSubRange(range?: number) {\r\n this._subRanges.push(range || 0);\r\n\r\n this.setSubrangesCount(this._subRanges.length);\r\n\r\n this.rebuild();\r\n }\r\n\r\n prependSubRange(range?: number) {\r\n this._subRanges.unshift(range || 0);\r\n\r\n this._rasterXLengths.unshift(0);\r\n\r\n this._rasterYCounts.unshift(1);\r\n\r\n this.rebuild();\r\n }\r\n\r\n removeEmptySubranges() {\r\n if (this._subRanges && this._subRanges.length) {\r\n\r\n this.setSubrangesCount(this._subRanges.length);\r\n\r\n var nSubranges: number[] = [];\r\n var nRasterXLengths: number[] = [];\r\n var nRasterYCounts: number[] = [];\r\n\r\n for (var i = 0, j = this._subRanges.length; i < j; i++) {\r\n if (this._subRanges[i] > 0) {\r\n nSubranges.push(this._subRanges[i]);\r\n nRasterXLengths.push(this._rasterXLengths[i]);\r\n nRasterYCounts.push(this._rasterYCounts[i]);\r\n }\r\n }\r\n\r\n if (nSubranges.length !== this._subRanges.length) {\r\n if (!nSubranges.length) {\r\n this._subRanges = [0];\r\n this._rasterXLengths = [0];\r\n this._rasterYCounts = [1];\r\n\r\n\r\n } else {\r\n this._subRanges = nSubranges;\r\n this._rasterXLengths = nRasterXLengths;\r\n this._rasterYCounts = nRasterYCounts;\r\n }\r\n\r\n this.rebuild();\r\n }\r\n }\r\n }\r\n\r\n GetSimple(id?: string, offset?: THREE.Vector3): SolarProTool.IDirectedAreaDefinition {\r\n var da = this,\r\n s = da.start,\r\n e = da.end,\r\n p = da.start2;\r\n\r\n if (offset) {\r\n s = s.clone().add(offset);\r\n e = e.clone().add(offset);\r\n p = p.clone().add(offset);\r\n }\r\n\r\n return {\r\n IdString: id || da.IdString,\r\n //lineColor?: Color; // SolarCalcObjects.Gfx3D.THREE.Color\r\n //arrowColor?: Color; // SolarCalcObjects.Gfx3D.THREE.Color\r\n //areaColor?: Color; // SolarCalcObjects.Gfx3D.THREE.Color\r\n start: s,\r\n end: e,\r\n dimensionPosition: p,\r\n withArrow: false,\r\n flip: false,\r\n isDynamic: false,\r\n userData: null\r\n };\r\n }\r\n\r\n copyFrom(areaDefinition?: SolarProTool.IDirectedAreaDefinition) {\r\n\r\n this._skipRebuild = true;\r\n\r\n if (areaDefinition)\r\n Object.keys(areaDefinition).filter(k => this[k] !== undefined).forEach(k => {\r\n this[k] = areaDefinition[k];\r\n });\r\n\r\n if (!this._userData._myDirectedArea) {\r\n Object.defineProperty(this._userData, '_myDirectedArea', { enumerable: false, configurable: true, writable: false, value: this });\r\n Object.defineProperty(this._userData, 'setParameter', { enumerable: false, configurable: true, writable: false, value: this.setParameter.bind(this) });\r\n Object.defineProperty(this._userData, 'getParameter', { enumerable: false, configurable: true, writable: false, value: this.getParameter.bind(this) });\r\n }\r\n\r\n if (!this.IdString)\r\n this.IdString = spt.Utils.GenerateGuid();\r\n\r\n this._skipRebuild = false;\r\n\r\n if (areaDefinition.ConstructedObject) {\r\n this.clearConstructed();\r\n var obj = spt.ThreeJs.utils.ConvertThreeJsObject(areaDefinition.ConstructedObject) as THREE.Object3D;\r\n if (obj) {\r\n var opacity = this.alpha;\r\n this.add(obj);\r\n var ro = this.renderOrder + 1;\r\n obj.traverse((o: any) => {\r\n o.renderOrder = ro;\r\n if (o.material) {\r\n o.material.transparent = true;\r\n o.material.opacity = opacity;\r\n }\r\n });\r\n this._constructed = obj;\r\n }\r\n }\r\n\r\n this.rebuild();\r\n }\r\n\r\n genericUserParams: { [name: string]: { get: () => any, set: (val: any) => void } } = {\r\n \"SubAreas\": {\r\n get: () => {\r\n if (this.subRanges && this.subRanges.length)\r\n return this.subRanges.map(s => Math.round(s));\r\n return [0];\r\n }, set: (size: number[]) => {\r\n if (!ArrayHelper.arraysEqual(this.subRanges, size))\r\n this.subRanges = size;\r\n }\r\n },\r\n \"ParkingAreaCount\": {\r\n get: () => {\r\n if (this.rasterXCounts && this.rasterXCounts.length)\r\n return this.rasterXCounts.map(xc => Math.round(xc * 10) / 10);\r\n return [1];\r\n }, set: (count: number[]) => {\r\n if (!ArrayHelper.arraysEqual(this.rasterXCounts, count))\r\n this.rasterXCounts = count;\r\n }\r\n },\r\n \"ParkingAreaSize\": {\r\n get: () => {\r\n if (this.rasterXLengths && this.rasterXLengths.length) {\r\n return this.rasterXLengths.map(xl => Math.round(xl));\r\n }\r\n return [0];\r\n }, set: (size: number[]) => {\r\n if (!ArrayHelper.arraysEqual(this.rasterXLengths, size))\r\n this.rasterXLengths = size;\r\n }\r\n },\r\n \"ParkingAreaRows\": {\r\n get: () => {\r\n if (this.rasterYCounts && this.rasterYCounts.length)\r\n return this.rasterYCounts.map(yc => Math.round(yc));\r\n return [1];\r\n }, set: (count: number[]) => {\r\n if (!ArrayHelper.arraysEqual(this.rasterYCounts, count))\r\n this.rasterYCounts = count;\r\n }\r\n },\r\n \"DisabledSubAreas\": {\r\n get: () => {\r\n if (this._disabledSubAreasNeedsUpdate) {\r\n this._disabledSubAreas.sort((a, b) => a - b);\r\n this._disabledSubAreasNeedsUpdate = false;\r\n }\r\n return this._disabledSubAreas || [];\r\n }, set: (indices: number[]) => {\r\n if (!this._disabledSubAreas || !ArrayHelper.arraysEqual(this._disabledSubAreas, indices))\r\n this.setDisabledSubAreas(indices);\r\n }\r\n },\r\n \"BaseStandInterferences\": {\r\n get: () => {\r\n if (this._excludeInterval && this._excludeInterval.length)\r\n return this._excludeInterval.map(inter => `${inter[0]} - ${inter[1]}`);\r\n return [];\r\n }, set: (intervals: string[]) => {\r\n this.setIntervals(ArrayHelper.intervalsFromStringList(intervals), false);\r\n }\r\n },\r\n \"BaseStandTargets\": {\r\n get: () => {\r\n if (this._includeInterval && this._includeInterval.length)\r\n return this._includeInterval.map(inter => `${inter[0]} - ${inter[1]}`);\r\n return [];\r\n }, set: (intervals: string[]) => {\r\n this.setIntervals(ArrayHelper.intervalsFromStringList(intervals), true);\r\n }\r\n }\r\n };\r\n\r\n setGenericUserParam(k: string, val: any) {\r\n if (this.genericUserParams[k])\r\n this.genericUserParams[k].set(val);\r\n }\r\n\r\n getGenericUserParam(k: string, target?: any) {\r\n if (this.genericUserParams[k]) {\r\n var v = this.genericUserParams[k].get();\r\n if (target)\r\n target[k] = v;\r\n return v;\r\n }\r\n return null;\r\n }\r\n\r\n get alpha() {\r\n return this._alpha;\r\n }\r\n\r\n set alpha(val: number) {\r\n if (this._alpha != val) {\r\n var obj = this._constructed;\r\n if (obj) {\r\n obj.traverse((o: any) => {\r\n if (o.material)\r\n o.material.opacity = val;\r\n });\r\n }\r\n\r\n this._alpha = val;\r\n }\r\n }\r\n\r\n get userData() {\r\n for (let k in this._userData)\r\n this.getGenericUserParam(k, this._userData);\r\n return this._userData;\r\n }\r\n\r\n set userData(value) {\r\n if (!this._userData) {\r\n this._userData = value;\r\n } else {\r\n var revertSkip = !this._skipRebuild;\r\n if (revertSkip)\r\n this._skipRebuild = true;\r\n var usrData = this._userData;\r\n if (value && typeof value === \"object\") {\r\n Object.keys(usrData).filter(k => value[k] === undefined).forEach(k => {\r\n delete usrData[k];\r\n });\r\n Object.keys(value).forEach(k => {\r\n usrData[k] = value[k];\r\n });\r\n }\r\n for (let k in usrData) {\r\n this.setGenericUserParam(k, usrData[k]);\r\n }\r\n if (revertSkip)\r\n this._skipRebuild = false;\r\n this.rebuild();\r\n }\r\n }\r\n\r\n get subRanges() {\r\n return this._subRanges;\r\n }\r\n\r\n set subRanges(values: number[]) {\r\n if (values && values.length) {\r\n this._subRanges = values.map(value => {\r\n var l = +value;\r\n if (l > 0 && isFinite(l))\r\n return l;\r\n return 0;\r\n });\r\n } else\r\n this._subRanges = [0];\r\n\r\n if (!this._subRanges.length)\r\n this._subRanges = [0];\r\n\r\n this.setSubrangesCount(this._subRanges.length);\r\n\r\n this.rebuild();\r\n }\r\n\r\n getSubAreaIndexByPoint(p: THREE.Vector3): number {\r\n var tp = p.clone().sub(this.position),\r\n axis = new THREE.Vector3(1, 0, 0).applyEuler(this.rotation),\r\n xAxis = Math.max(0, Math.min(this.length, axis.dot(tp))),\r\n subRanges = this.subRanges,\r\n xOff = 0,\r\n indexOffset = 0;\r\n\r\n if (!subRanges || !subRanges.length)\r\n return -1;\r\n\r\n for (var i = 0, j = subRanges.length; i < j; i++) {\r\n var subRange = subRanges[i];\r\n\r\n var x = xAxis - xOff,\r\n rasterXLength = this.rasterXLengths[i] > 0 ? this.rasterXLengths[i] : subRange,\r\n rasterXCount = Math.floor(Math.max(1, subRange / rasterXLength)),\r\n rasterYCount = Math.floor(Math.max(1, this.rasterYCounts[i]));\r\n\r\n if (x > subRange) {\r\n xOff += subRange;\r\n indexOffset += rasterXCount * rasterYCount;\r\n continue;\r\n }\r\n\r\n axis.set(-axis.y, axis.x, 0);\r\n\r\n var height = this.height,\r\n y = Math.max(0, Math.min(height, axis.dot(tp)));\r\n\r\n return indexOffset + Math.min(Math.floor(y * rasterYCount / height), rasterYCount - 1) * rasterXCount + Math.min(Math.floor(x / rasterXLength), rasterXCount - 1);\r\n }\r\n\r\n return -1;\r\n\r\n //var xCount = Math.floor(Math.max(1, area.rasterXCount)),\r\n // lenStepX = area.rasterXLength > 0 ? area.rasterXLength : area.length,\r\n // x = Math.max(area.rasterXOffset, Math.min(xCount * lenStepX + area.rasterXOffset, axis.dot(tp))) - area.rasterXOffset;\r\n\r\n //axis.set(-axis.y, axis.x, 0);\r\n\r\n //var y = Math.max(0, Math.min(area.height, axis.dot(tp))),\r\n // yCount = area.rasterYCount > 1 ? area.rasterYCount : 1;\r\n\r\n //return Math.min(Math.floor(y * yCount / area.height), yCount - 1) * xCount + Math.min(Math.floor(x / lenStepX), xCount - 1);\r\n }\r\n\r\n setParameter(name: string, oldValue: any, newValue: any) {\r\n switch (name) {\r\n case \"X\":\r\n {\r\n let t = (+newValue) - (+oldValue);\r\n if (t != 0)\r\n this.moveBy(new THREE.Vector3(t, 0, 0));\r\n return;\r\n }\r\n case \"Y\":\r\n {\r\n let t = (+newValue) - (+oldValue);\r\n if (t != 0)\r\n this.moveBy(new THREE.Vector3(0, t, 0));\r\n return;\r\n }\r\n case \"Z\":\r\n {\r\n let t = (+newValue) - (+oldValue);\r\n if (t != 0)\r\n this.moveBy(new THREE.Vector3(0, 0, t));\r\n return;\r\n }\r\n case \"Rotation\":\r\n {\r\n this.setRotation(newValue);\r\n return;\r\n }\r\n case \"Height\":\r\n {\r\n this.setHeight(newValue);\r\n return;\r\n }\r\n case \"Width\":\r\n {\r\n this.setWidth(newValue);\r\n return;\r\n }\r\n }\r\n this.setGenericUserParam(name, newValue);\r\n }\r\n\r\n setRotation(newValue: number) {\r\n this.angle = +newValue;\r\n }\r\n\r\n setHeight(v: number) {\r\n var h = +v;\r\n if (h > 0)\r\n this.dimensionPosition = this.start2.clone().sub(this.start).normalize().multiplyScalar(h).add(this.start);\r\n }\r\n\r\n setWidth(v: number) {\r\n var w = +v;\r\n if (w > 0)\r\n this.end = this.end.clone().sub(this.start).normalize().multiplyScalar(w).add(this.start);\r\n }\r\n\r\n getParameter(name: string): any {\r\n switch (name) {\r\n case \"X\":\r\n return Math.round(this.start.x);\r\n case \"Y\":\r\n return Math.round(this.start.y);\r\n case \"Z\":\r\n return Math.round(this.start.z);\r\n case \"Width\":\r\n return Math.round(this.length);\r\n case \"Height\":\r\n return Math.round(this.height);\r\n case \"Rotation\":\r\n return Math.round(this.angle * 100) / 100;\r\n default:\r\n if (this[name] !== undefined)\r\n return this[name];\r\n }\r\n return null;\r\n }\r\n\r\n applyFlip() {\r\n if (!this.flip)\r\n return;\r\n this._start.add(this.offsetVector);\r\n this._end.add(this.offsetVector);\r\n this._dimensionPosition.sub(this.offsetVector);\r\n this.flip = false;\r\n this.rebuild();\r\n }\r\n\r\n setLeft(p: THREE.Vector3, setSubRange: boolean) {\r\n if (this.length > 0 && this.height > 0) {\r\n\r\n var dir = this.directionVector.clone().normalize();\r\n\r\n if (setSubRange && this.subRanges && this.subRanges.length > 1) {\r\n let e = new THREE.Vector3().copy(dir).multiplyScalar(this.subRanges[0]).add(this.start),\r\n ep = new THREE.Vector3().copy(p).sub(e);\r\n dir.negate();\r\n let newLength = Math.round(dir.dot(ep));\r\n\r\n if (newLength >= 10) {\r\n this.subRanges[0] = newLength;\r\n this._start.copy(e).add(dir.multiplyScalar(newLength));\r\n this.rebuild();\r\n }\r\n } else {\r\n dir.negate();\r\n let ep = new THREE.Vector3().copy(p).sub(this.end),\r\n newLength = Math.round(dir.dot(ep));\r\n\r\n if (newLength >= 10) {\r\n this._start.copy(this.end).add(dir.multiplyScalar(newLength));\r\n this.rebuild();\r\n }\r\n }\r\n }\r\n }\r\n\r\n setRight(p: THREE.Vector3, setSubRange: boolean) {\r\n if (this.length > 0 && this.height > 0) {\r\n\r\n var dir = this.directionVector.clone().normalize();\r\n\r\n if (setSubRange && this.subRanges && this.subRanges.length > 1) {\r\n let ls = this.subRanges.reduce((pv, cv) => pv + cv) - this.subRanges[this.subRanges.length - 1];\r\n let s = new THREE.Vector3().copy(dir).multiplyScalar(ls).add(this.start),\r\n sp = new THREE.Vector3().copy(p).sub(s),\r\n newLength = Math.round(dir.dot(sp));\r\n\r\n if (newLength >= 10) {\r\n this.subRanges[this.subRanges.length - 1] = newLength;\r\n this._end.copy(s).add(dir.multiplyScalar(newLength));\r\n this.rebuild();\r\n }\r\n } else {\r\n let sp = new THREE.Vector3().copy(p).sub(this.start),\r\n newLength = dir.dot(sp);\r\n\r\n if (newLength >= 10) {\r\n this._end.copy(this.start).add(dir.multiplyScalar(newLength));\r\n this.rebuild();\r\n }\r\n }\r\n }\r\n }\r\n\r\n setBottom(p: THREE.Vector3) {\r\n if (this.length > 0 && this.height > 0) {\r\n var d = new THREE.Vector3().copy(p).sub(this.start2);\r\n var dir = this.offsetVector.clone().negate().normalize();\r\n var newLength = dir.dot(d);\r\n if (newLength >= 10) {\r\n dir.multiplyScalar(newLength);\r\n this._start.copy(this.start2).add(dir);\r\n this._end.copy(this.end2).add(dir);\r\n this.rebuild();\r\n }\r\n }\r\n }\r\n\r\n setTop(p: THREE.Vector3) {\r\n this._dimensionPosition.copy(p);\r\n this.rebuild();\r\n }\r\n\r\n setPositions(start?: THREE.Vector3, end?: THREE.Vector3, pos?: THREE.Vector3) {\r\n if (start)\r\n this._start.copy(start);\r\n if (end)\r\n this._end.copy(end);\r\n if (pos)\r\n this._dimensionPosition.copy(pos);\r\n\r\n this.rebuild();\r\n }\r\n\r\n get isSelected(): boolean {\r\n return this._isSelected;\r\n }\r\n\r\n set isSelected(value: boolean) {\r\n var b = !!value;\r\n if (this._isSelected !== b) {\r\n this._isSelected = b;\r\n if (b)\r\n LS.Client3DEditor.Controller.Current.viewModel.genericParameters.bindObject(this.userData);\r\n else\r\n LS.Client3DEditor.Controller.Current.viewModel.genericParameters.unbindObject(this.userData);\r\n }\r\n }\r\n\r\n public static materialInstances: { [name: string]: THREE.Material } = {};\r\n\r\n get BoundingBox() {\r\n return this._box;\r\n }\r\n\r\n get rasterYCounts() {\r\n return this._rasterYCounts;\r\n }\r\n\r\n set rasterYCounts(values: number[]) {\r\n if (values && values.length) {\r\n this._rasterYCounts = values.map(value => {\r\n var l = +value;\r\n if (l > 1 && isFinite(l))\r\n return l;\r\n return 1;\r\n });\r\n } else\r\n this._rasterYCounts = [1];\r\n\r\n this.setSubrangesCount(this._rasterYCounts.length);\r\n\r\n this.rebuild();\r\n }\r\n\r\n get rasterXCounts() {\r\n if (this.subRanges && this.subRanges.length)\r\n return this.subRanges.map((len, i) => {\r\n var rxlen = this._rasterXLengths[i];\r\n if (rxlen > 0)\r\n return Math.round(100 * len / rxlen) / 100;\r\n return 0;\r\n });\r\n return [0];\r\n }\r\n\r\n set rasterXCounts(values: number[]) {\r\n if (this.subRanges && this.subRanges.length && values && values.length === this.subRanges.length) {\r\n this.rasterXLengths = values.map((value, i) => {\r\n var c = +value;\r\n if (c > 0)\r\n return Math.round(this.subRanges[i] / c);\r\n else\r\n return 0;\r\n });\r\n } else\r\n this.rasterXLengths = [0];\r\n }\r\n\r\n get rasterXLengths() {\r\n return this._rasterXLengths;\r\n }\r\n\r\n set rasterXLengths(values: number[]) {\r\n if (values && values.length) {\r\n this._rasterXLengths = values.map(value => {\r\n var l = +value;\r\n if (l > 0 && isFinite(l))\r\n return l;\r\n return 0;\r\n });\r\n } else\r\n this._rasterXLengths = [0];\r\n\r\n if (!this._rasterXLengths.length)\r\n this._rasterXLengths = [0];\r\n\r\n this.setSubrangesCount(this._rasterXLengths.length);\r\n\r\n this.rebuild();\r\n }\r\n\r\n setSubrangesCount(count: number) {\r\n if (count <= 0)\r\n count = 1;\r\n\r\n if (this._subRanges.length !== count) {\r\n let l = this._subRanges.length,\r\n del = Math.max(0, l - count),\r\n add = Math.max(count - l);\r\n this._subRanges.splice.apply(this._subRanges, ([l - del, del] as any[]).concat(ArrayHelper.fillArray(0, add)));\r\n }\r\n\r\n if (this._rasterXLengths.length !== count) {\r\n let l = this._rasterXLengths.length,\r\n del = Math.max(0, l - count),\r\n add = Math.max(count - l);\r\n this._rasterXLengths.splice.apply(this._rasterXLengths, ([l - del, del] as any[]).concat(ArrayHelper.fillArray(0, add)));\r\n }\r\n\r\n if (this._rasterYCounts.length !== count) {\r\n let l = this._rasterYCounts.length,\r\n del = Math.max(0, l - count),\r\n add = Math.max(count - l);\r\n this._rasterYCounts.splice.apply(this._rasterYCounts, ([l - del, del] as any[]).concat(ArrayHelper.fillArray(1, add)));\r\n }\r\n }\r\n\r\n public static getLineMaterial(color: THREE.Color, useVertexColors?: boolean) {\r\n if (!useVertexColors) {\r\n var material: THREE.Material;\r\n var lineMatKey = \"Line_\" + color.getHexString();\r\n\r\n if (!DimensionAligned.materialInstances[lineMatKey]) {\r\n material = new THREE.LineBasicMaterial({\r\n color: color as any,\r\n fog: false,\r\n depthWrite: false,\r\n depthTest: false\r\n });\r\n DimensionAligned.materialInstances[lineMatKey] = material;\r\n } else {\r\n material = DimensionAligned.materialInstances[lineMatKey];\r\n }\r\n\r\n return material as THREE.LineBasicMaterial;\r\n }\r\n if (!DimensionAligned.lineMaterial) {\r\n DimensionAligned.lineMaterial = new THREE.LineBasicMaterial({\r\n vertexColors: true, //THREE.VertexColors,\r\n fog: false\r\n });\r\n }\r\n return DimensionAligned.lineMaterial as THREE.LineBasicMaterial;\r\n }\r\n\r\n public static getMeshMaterial(color: THREE.Color, opacity: number) {\r\n var material: THREE.Material;\r\n var matKey = \"C_\" + color.getHexString() + \"_O\" + opacity;\r\n\r\n if (!DirectedAreaDefinition.materialInstances[matKey]) {\r\n material = new THREE.MeshBasicMaterial({\r\n color: color as any,\r\n fog: false,\r\n transparent: opacity < 1,\r\n opacity: opacity,\r\n depthTest: false,\r\n depthWrite: false,\r\n side: THREE.DoubleSide,\r\n\r\n });\r\n DirectedAreaDefinition.materialInstances[matKey] = material;\r\n } else {\r\n material = DirectedAreaDefinition.materialInstances[matKey];\r\n }\r\n\r\n return material as THREE.LineBasicMaterial;\r\n }\r\n\r\n get start() {\r\n return this._start;\r\n }\r\n\r\n set start(value: THREE.Vector3) {\r\n this._start.copy(value);\r\n this.rebuild();\r\n }\r\n\r\n get end2() {\r\n return this._end2;\r\n }\r\n\r\n get start2() {\r\n return this._start2;\r\n }\r\n\r\n get end() {\r\n return this._end;\r\n }\r\n\r\n set end(value: THREE.Vector3) {\r\n this._end.copy(value);\r\n this.rebuild();\r\n }\r\n\r\n get dimensionPosition() {\r\n return this._dimensionPosition;\r\n }\r\n\r\n set dimensionPosition(value: THREE.Vector3) {\r\n this._dimensionPosition.copy(value);\r\n this.rebuild();\r\n }\r\n\r\n get direction() {\r\n return this._end.clone().sub(this._start);\r\n }\r\n\r\n set direction(v: THREE.Vector3) {\r\n if (v && (v.x != 0 || v.y != 0)) {\r\n this.angle = Math.atan2(v.y, v.x) / Math.PI * 180;\r\n }\r\n }\r\n\r\n get angle() {\r\n //var dir = this.direction;\r\n //return Math.atan2(dir.y, dir.x) / Math.PI * 180;\r\n return this.rotation.z / Math.PI * 180;\r\n }\r\n\r\n set angle(angleGrad: number) {\r\n //var dir = this.direction;\r\n this.rotateBy((angleGrad / 180 * Math.PI) - this.rotation.z);\r\n }\r\n\r\n rotateBy(angleRad: number) {\r\n this.rotateByPivot(this.getPivot(), angleRad);\r\n }\r\n\r\n rotateByPivot(pivot: THREE.Vector3, angleRad: number) {\r\n if (angleRad != 0) {\r\n var m = new THREE.Matrix4().makeTranslation(pivot.x, pivot.y, pivot.z).multiply(new THREE.Matrix4().makeRotationZ(angleRad).multiply(new THREE.Matrix4().makeTranslation(-pivot.x, -pivot.y, -pivot.z)));\r\n this._start.applyMatrix4(m);\r\n this._end.applyMatrix4(m);\r\n this._dimensionPosition.applyMatrix4(m);\r\n this.rebuild();\r\n }\r\n }\r\n\r\n getPivot(): THREE.Vector3 {\r\n return this._start.clone().add(this._end).add(this._end2).add(this._start2).divideScalar(4);\r\n }\r\n\r\n get length() {\r\n if (!this._length)\r\n this._length = this._start.distanceTo(this._end);\r\n return this._length;\r\n }\r\n\r\n get height() {\r\n return this._height;\r\n }\r\n\r\n get hasHeight() {\r\n return this._height > 0;\r\n }\r\n\r\n get activeOpacity() {\r\n var op = 0.5;\r\n\r\n if (this.isHovered)\r\n op *= 1.2;\r\n if (this.isSelected)\r\n op *= 1.2;\r\n\r\n return Math.min(op, 1);\r\n }\r\n\r\n get activeArrowColor() {\r\n this._activeArrowColor.copy(this.arrowColor);\r\n if (this.isHovered)\r\n this._activeArrowColor.multiplyScalar(1.2);\r\n if (this.isSelected)\r\n this._activeArrowColor.multiplyScalar(1.4);\r\n return this._activeArrowColor;\r\n }\r\n\r\n get activeLineColor() {\r\n this._activeLineColor.copy(this.lineColor);\r\n if (this.isHovered)\r\n this._activeLineColor.multiplyScalar(1.2);\r\n if (this.isSelected)\r\n this._activeLineColor.multiplyScalar(1.4);\r\n return this._activeLineColor;\r\n }\r\n\r\n get activeAreaColor() {\r\n this._activeAreaColor.copy(this.areaColor);\r\n if (this.isHovered)\r\n this._activeAreaColor.multiplyScalar(1.2);\r\n if (this.isSelected)\r\n this._activeAreaColor.multiplyScalar(1.4);\r\n return this._activeAreaColor;\r\n }\r\n\r\n get activeAreaColorAlternate() {\r\n this._activeAreaColorAlternate.copy(this.areaColorAlternate);\r\n if (this.isHovered)\r\n this._activeAreaColorAlternate.multiplyScalar(1.2);\r\n if (this.isSelected)\r\n this._activeAreaColorAlternate.multiplyScalar(1.4);\r\n return this._activeAreaColorAlternate;\r\n }\r\n\r\n get arrowColor() {\r\n return this._arrowColor;\r\n }\r\n\r\n set arrowColor(value: THREE.Color) {\r\n this._arrowColor.copy(value);\r\n this.OnChanged();\r\n }\r\n\r\n get lineColor() {\r\n return this._lineColor;\r\n }\r\n\r\n set lineColor(value: THREE.Color) {\r\n this._lineColor.copy(value);\r\n this.OnChanged();\r\n }\r\n\r\n get areaColor() {\r\n return this._areaColor;\r\n }\r\n\r\n set areaColor(value: THREE.Color) {\r\n this._areaColor.copy(value);\r\n this.OnChanged();\r\n }\r\n\r\n get areaColorAlternate() {\r\n return this._areaColorAlternate;\r\n }\r\n\r\n set areaColorAlternate(value: THREE.Color) {\r\n this._areaColorAlternate.copy(value);\r\n this.OnChanged();\r\n }\r\n\r\n get edges() {\r\n return this._edges;\r\n }\r\n\r\n get offsetVector() {\r\n return this._offsetVector;\r\n }\r\n\r\n get directionVector() {\r\n return this._directionVector;\r\n }\r\n\r\n intersecsBox(b: THREE.Box3) {\r\n return this.BoundingBox.intersectsBox(b) && (\r\n b.containsBox(this.BoundingBox) ||\r\n this.edges.some(e => utils.LineIntersecsBox(e[0], e[1], b)) ||\r\n this.edges.every(e => utils.pointOnLeftSideOfLine(e[0], e[1], b.min) >= 0));\r\n }\r\n\r\n intersecsTestVolume(testVolume: spt.ThreeJs.utils.TestVolume) {\r\n return !testVolume.testBoxForSeparationAxis(this.BoundingBox) && !testVolume.testEdgesForSeparationAxis(this.edges);\r\n }\r\n\r\n applyObjectPosition() {\r\n this.moveBy(this.position.sub(this._origPosition));\r\n }\r\n\r\n OnChanged(viewModel?: LS.Client3DEditor.ViewModel) {\r\n var controller = LS.Client3DEditor.Controller.Current;\r\n if (controller.viewModel.isDragging) {\r\n this.position.copy(controller.viewModel.diffSnapPosition).add(this._origPosition);\r\n } else {\r\n //color changed. No rebuild needed\r\n var lineColor = this.activeLineColor,\r\n areaColor = this.activeAreaColor,\r\n areaColorAlternate = this.activeAreaColorAlternate,\r\n arrowColor = this.activeArrowColor,\r\n opacity = this.activeOpacity,\r\n childs = this._generated;\r\n\r\n if (childs.length) {\r\n for (var i = childs.length; i--;) {\r\n var child = childs[i];\r\n if (child instanceof THREE.Mesh) {\r\n switch (child.name) {\r\n case \"lines\":\r\n child.material = DirectedAreaDefinition.getLineMaterial(lineColor, false);\r\n break;\r\n case \"arrow\":\r\n child.material = DirectedAreaDefinition.getMeshMaterial(arrowColor, opacity * 0.7);\r\n break;\r\n case \"arrowLine\":\r\n child.material = DirectedAreaDefinition.getLineMaterial(arrowColor, false);\r\n break;\r\n case \"alternate\":\r\n child.material = DirectedAreaDefinition.getMeshMaterial(areaColorAlternate, opacity);\r\n break;\r\n case \"area\":\r\n child.material = DirectedAreaDefinition.getMeshMaterial(areaColor, opacity);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n addGenerated(obj: THREE.Object3D) {\r\n this._generated.push(obj);\r\n this.add(obj);\r\n }\r\n\r\n clearGenerated() {\r\n if (!this._generated.length)\r\n return;\r\n\r\n for (var k = this._generated.length; k--;) {\r\n var obj = this._generated[k];\r\n this.remove(obj);\r\n spt.ThreeJs.utils.disposeObject3D(obj, true, true);\r\n }\r\n\r\n this._generated = [];\r\n }\r\n\r\n clearConstructed() {\r\n\r\n if (!this._constructed)\r\n return;\r\n\r\n this.remove(this._constructed);\r\n\r\n spt.ThreeJs.utils.disposeObject3D(this._constructed, false, true);\r\n\r\n this._constructed = null;\r\n }\r\n\r\n getSubAreaByIndex(index: number, local?: boolean, includeDisabled?: boolean): THREE.Vector3[] {\r\n if (index === undefined || index === null || index < 0)\r\n return null;\r\n\r\n var subRanges = this.subRanges,\r\n disabledSubAreas = this._disabledSubAreas,\r\n height = this.height,\r\n xOff = 0,\r\n curIndex = 0;\r\n\r\n if (height <= 0 || (disabledSubAreas && disabledSubAreas.length && !includeDisabled && disabledSubAreas.some(idx => idx === index)))\r\n return null;\r\n\r\n if (subRanges && subRanges.length) {\r\n for (var idx = 0, k = subRanges.length; idx < k; idx++) {\r\n let width = subRanges[idx];\r\n\r\n if (width <= 0) {\r\n xOff += Math.max(0, width);\r\n continue;\r\n }\r\n\r\n let lenStepX = this.rasterXLengths[idx] || width,\r\n yCount = Math.max(1, this.rasterYCounts[idx]),\r\n xCount = Math.floor(width / lenStepX),\r\n localCount = xCount * yCount;\r\n\r\n if (curIndex + localCount <= index) {\r\n curIndex += localCount;\r\n xOff += width;\r\n continue;\r\n }\r\n\r\n let lenStepY = height / yCount,\r\n localIndex = index - curIndex,\r\n row = Math.floor(localIndex / xCount),\r\n column = localIndex % xCount,\r\n y1 = row * lenStepY,\r\n y2 = y1 + lenStepY,\r\n x1 = column * lenStepX,\r\n x2 = x1 + lenStepX,\r\n vs = [\r\n new THREE.Vector3(xOff + x1, y1, 0),\r\n new THREE.Vector3(xOff + x2, y1, 0),\r\n new THREE.Vector3(xOff + x2, y2, 0),\r\n new THREE.Vector3(xOff + x1, y2, 0)\r\n ];\r\n\r\n return local ? vs : vs.map(v => v.applyMatrix4(this.matrixWorld));\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n countAllSubareas(includeDisabled?: boolean): number {\r\n\r\n var subRanges = this.subRanges,\r\n height = this.height,\r\n count = 0;\r\n\r\n if (height <= 0)\r\n return 0;\r\n\r\n if (subRanges && subRanges.length) {\r\n for (var idx = 0, k = subRanges.length; idx < k; idx++) {\r\n let width = subRanges[idx];\r\n\r\n if (width <= 0)\r\n continue;\r\n\r\n let lenStepX = this.rasterXLengths[idx] || width,\r\n yCount = Math.max(1, this.rasterYCounts[idx]),\r\n xCount = Math.floor(width / lenStepX);\r\n\r\n count += xCount * yCount;\r\n }\r\n }\r\n\r\n if (this._disabledSubAreas && this._disabledSubAreas.length && !includeDisabled)\r\n count -= this._disabledSubAreas.filter(d => d < count).length;\r\n\r\n return count;\r\n }\r\n\r\n getAllSubareas(includeDisabled?: boolean): THREE.Vector3[][][] {\r\n var result: THREE.Vector3[][][] = [],\r\n subRanges = this.subRanges,\r\n disabledSubAreas = this._disabledSubAreas,\r\n height = this.height,\r\n curSubIndex = 0,\r\n curDisabledIndex = 0,\r\n nextDisabledIndex = disabledSubAreas && disabledSubAreas.length && !includeDisabled ? disabledSubAreas[curDisabledIndex++] : -1,\r\n xOff = 0;\r\n\r\n if (subRanges && subRanges.length) {\r\n subRanges.forEach((range, idx) => {\r\n\r\n var width = range,\r\n rasterXLength = this.rasterXLengths[idx],\r\n rasterYCount = this.rasterYCounts[idx],\r\n res: THREE.Vector3[][] = [];\r\n\r\n result.push(res);\r\n\r\n if (height <= 0 || width <= 0) {\r\n xOff += Math.max(0, width);\r\n return;\r\n }\r\n\r\n let lenStepX = rasterXLength > 0 ? rasterXLength : width,\r\n yCount = Math.max(1, rasterYCount),\r\n lenStepY = height / yCount,\r\n xCount = Math.floor(Math.round(100 * width / lenStepX) / 100);\r\n\r\n for (let i = 0; i < yCount; i++) {\r\n let y1 = i * lenStepY,\r\n y2 = y1 + lenStepY;\r\n\r\n for (var j = 0; j < xCount; j++) {\r\n if (curSubIndex !== nextDisabledIndex) {\r\n let x1 = j * lenStepX,\r\n x2 = x1 + lenStepX;\r\n\r\n res.push([\r\n new THREE.Vector3(xOff + x1, y1, 0),\r\n new THREE.Vector3(xOff + x2, y1, 0),\r\n new THREE.Vector3(xOff + x2, y2, 0),\r\n new THREE.Vector3(xOff + x1, y2, 0)\r\n ]);\r\n\r\n } else {\r\n res.push(null);\r\n\r\n if (curDisabledIndex < disabledSubAreas.length)\r\n nextDisabledIndex = disabledSubAreas[curDisabledIndex++];\r\n }\r\n\r\n curSubIndex++;\r\n }\r\n }\r\n\r\n xOff += width;\r\n });\r\n }\r\n\r\n return result;\r\n }\r\n\r\n rebuild() {\r\n if (this._skipRebuild)\r\n return;\r\n\r\n if (utils.pointOnLeftSideOfLine(this._start, this._end, this._dimensionPosition) < 0) {\r\n let tmp = this._start.clone();\r\n this._start.copy(this._end);\r\n this._end.copy(tmp);\r\n }\r\n\r\n var start = this._start,\r\n end = this._end,\r\n start2 = this._start2.copy(start),\r\n end2 = this._end2.copy(end),\r\n se = this._directionVector.copy(end).sub(start).setZ(0),\r\n p = this._dimensionPosition,\r\n sp = p.clone().sub(start),\r\n seLengthSq = se.lengthSq(),\r\n lineColor = this.activeLineColor,\r\n areaColor = this.activeAreaColor,\r\n areaColorAlternate = this.activeAreaColorAlternate,\r\n arrowColor = this.activeArrowColor,\r\n opacity = this.activeOpacity,\r\n arrowLength = 0,\r\n edges = this._edges = [],\r\n subRanges = this._subRanges;\r\n\r\n this._offsetVector.set(0, 0, 0);\r\n\r\n if (!subRanges || !subRanges.length)\r\n subRanges = this._subRanges = [0];\r\n\r\n this._height = 0;\r\n this._length = 0;\r\n\r\n this.clearGenerated();\r\n\r\n this.position.copy(start);\r\n this._origPosition.copy(start);\r\n\r\n var indicatorSize = 500;\r\n var indicatorSize2 = 700;\r\n\r\n var linesPoints: THREE.Vector3[] = [\r\n new THREE.Vector3(-indicatorSize2, 0, 0), new THREE.Vector3(0, 0, 0),\r\n new THREE.Vector3(0, -indicatorSize2, 0), new THREE.Vector3(0, 0, 0),\r\n new THREE.Vector3(indicatorSize, 0, 0), new THREE.Vector3(0, indicatorSize, 0),\r\n new THREE.Vector3(0, indicatorSize, 0), new THREE.Vector3(-indicatorSize, 0, 0),\r\n new THREE.Vector3(-indicatorSize, 0, 0), new THREE.Vector3(0, -indicatorSize, 0),\r\n new THREE.Vector3(0, -indicatorSize, 0), new THREE.Vector3(indicatorSize, 0, 0)\r\n ];\r\n\r\n if (seLengthSq < 1) {\r\n this.rotation.z = 0;\r\n\r\n edges.push(\r\n [start, end],\r\n [end, end2],\r\n [end2, start2],\r\n [start2, start]\r\n );\r\n\r\n return;\r\n }\r\n\r\n var seLength = Math.sqrt(seLengthSq),\r\n seDir = se.clone().divideScalar(seLength),\r\n seLengthRounded = Math.round(seLength);\r\n\r\n if (subRanges.length > 1) {\r\n var sum = subRanges.reduce((pv, cv) => pv + cv);\r\n if (sum !== seLengthRounded) {\r\n var newRanges = [] as number[],\r\n curLen = 0;\r\n for (var o = 0, q = subRanges.length; o < q; o++) {\r\n var range = subRanges[o];\r\n if (range > 0 && (curLen + range) > seLengthRounded)\r\n range = seLengthRounded - curLen;\r\n newRanges.push(Math.max(0, range));\r\n curLen += range;\r\n }\r\n subRanges = this._subRanges = newRanges;\r\n }\r\n } else\r\n subRanges = this._subRanges = [seLengthRounded];\r\n\r\n if (seLength !== seLengthRounded) {\r\n se.multiplyScalar(seLengthRounded / seLength);\r\n end.copy(start).add(se);\r\n end2.copy(end);\r\n seLength = seLengthRounded;\r\n seLengthSq = seLength * seLength;\r\n }\r\n\r\n this._length = seLength;\r\n\r\n this._box.makeEmpty().expandByPoint(start).expandByPoint(end);\r\n\r\n var dimensionOffset = this._offsetVector.copy(se).multiplyScalar(sp.dot(se) / seLengthSq).add(start).sub(p).negate(),\r\n dimensionOffsetLengthSq = dimensionOffset.lengthSq(),\r\n dimensionOffsetLength = 0;\r\n\r\n //var linesPoints: THREE.Vector3[] = [start, end];\r\n linesPoints.push(new THREE.Vector3(0, 0, 0), new THREE.Vector3(seLength, 0, 0));\r\n var meshPoints: THREE.Vector3[][] = null;\r\n\r\n var dimensionOffsetDir: THREE.Vector3 = new THREE.Vector3(-seDir.y, seDir.x, 0);\r\n\r\n if (dimensionOffsetLengthSq >= 1) {\r\n\r\n dimensionOffsetLength = Math.sqrt(dimensionOffsetLengthSq);\r\n var dimensionOffsetLengthRounded = Math.round(dimensionOffsetLength);\r\n\r\n if (dimensionOffsetLengthRounded !== dimensionOffsetLength) {\r\n dimensionOffset.multiplyScalar(dimensionOffsetLengthRounded / dimensionOffsetLength);\r\n dimensionOffsetLength = dimensionOffsetLengthRounded;\r\n }\r\n\r\n if (dimensionOffsetDir.dot(dimensionOffset) < 0) {\r\n dimensionOffsetDir.negate();\r\n this.position.copy(end);\r\n this._origPosition.copy(end);\r\n\r\n //edges.push(\r\n // [end, start],\r\n // [start, start2],\r\n // [start2, end2],\r\n // [end2, end]\r\n //);\r\n } else {\r\n //edges.push(\r\n // [start, end],\r\n // [end, end2],\r\n // [end2, start2],\r\n // [start2, start]\r\n //);\r\n }\r\n\r\n edges.push(\r\n [start, end],\r\n [end, end2],\r\n [end2, start2],\r\n [start2, start]\r\n );\r\n\r\n arrowLength = Math.min(dimensionOffsetLength, seLength);\r\n\r\n //dimensionOffsetDir = dimensionOffset.clone().divideScalar(dimensionOffsetLength);\r\n\r\n start2.add(dimensionOffset);\r\n end2.add(dimensionOffset);\r\n\r\n this._box.expandByPoint(start2);\r\n this._box.expandByPoint(end2);\r\n\r\n this._height = dimensionOffsetLength;\r\n\r\n var s = new THREE.Vector3(0, 0, 0),\r\n e = new THREE.Vector3(seLength, 0, 0),\r\n s2 = new THREE.Vector3(0, dimensionOffsetLength, 0),\r\n e2 = new THREE.Vector3(seLength, dimensionOffsetLength, 0);\r\n\r\n //linesPoints.push(end, end2, end2, start2, start2, start);\r\n linesPoints.push(e, e2, e2, s2, s2, s);\r\n\r\n if (this._disabledSubAreasNeedsUpdate) {\r\n if (this._disabledSubAreas)\r\n this._disabledSubAreas.sort((a, b) => a - b);\r\n this._disabledSubAreasNeedsUpdate = false;\r\n }\r\n\r\n //var disabledSubAreas = this._disabledSubAreas;\r\n\r\n //var lastSubRangeIndex = subRanges.length - 1;\r\n //var lastSubRange = subRanges[lastSubRangeIndex];\r\n //var lastLenStepX = this.rasterXLengths && this.rasterXLengths.length > lastSubRangeIndex && this.rasterXLengths[lastSubRangeIndex];\r\n //var tx1 = 0;\r\n //var tx2 = lastLenStepX > 0 ? lastSubRange + (Math.floor(lastSubRange / lastLenStepX) * lastLenStepX) : seLength;\r\n var xoff = 0;\r\n\r\n for (var i = 0, j = subRanges.length; i < j; i++) {\r\n var subRange = subRanges[i];\r\n\r\n if (subRange <= 0)\r\n continue;\r\n\r\n let lenStepX = this.rasterXLengths[i];\r\n let rasterYCount = this.rasterYCounts[i];\r\n let lenStepY = dimensionOffsetLength / rasterYCount;\r\n\r\n if (i > 0)\r\n linesPoints.push(new THREE.Vector3(xoff, 0, 0), new THREE.Vector3(xoff, dimensionOffsetLength, 0));\r\n\r\n //add raster lines\r\n if (lenStepX > 0) {\r\n for (var lx = lenStepX; lx < subRange; lx += lenStepX) {\r\n let tx = xoff + lx;\r\n linesPoints.push(new THREE.Vector3(tx, 0, 0), new THREE.Vector3(tx, dimensionOffsetLength, 0));\r\n }\r\n }\r\n\r\n if (rasterYCount > 1) {\r\n for (var ly = lenStepY; ly < dimensionOffsetLength; ly += lenStepY) {\r\n linesPoints.push(new THREE.Vector3(xoff, ly, 0), new THREE.Vector3(xoff + subRange, ly, 0));\r\n }\r\n }\r\n\r\n xoff += subRange;\r\n }\r\n if (xoff > 0 && xoff < seLength) {\r\n linesPoints.push(new THREE.Vector3(xoff, 0, 0), new THREE.Vector3(xoff, dimensionOffsetLength, 0));\r\n }\r\n\r\n meshPoints = [[], []];\r\n\r\n var subAreaPoints = this.getAllSubareas().filter(subAreaPts => subAreaPts && subAreaPts.length > 0);\r\n\r\n for (var r = 0, t = subAreaPoints.length; r < t; r++) {\r\n var subArea = subAreaPoints[r],\r\n mps = meshPoints[r % 2];\r\n\r\n for (var u = 0, v = subArea.length; u < v; u++) {\r\n var pts = subArea[u];\r\n if (pts)\r\n mps.push(\r\n pts[0],\r\n pts[1],\r\n pts[2],\r\n pts[0],\r\n pts[2],\r\n pts[3]\r\n );\r\n }\r\n }\r\n } else {\r\n edges.push(\r\n [start, end],\r\n [end, end2],\r\n [end2, start2],\r\n [start2, start]\r\n );\r\n }\r\n\r\n this.rotation.z = -Math.atan2(dimensionOffsetDir.x, dimensionOffsetDir.y);\r\n\r\n if (this.isDynamic) {\r\n var linesGeo = new THREE.Geometry();\r\n\r\n linesGeo.vertices = linesPoints;\r\n let ls = new THREE.LineSegments(linesGeo, DirectedAreaDefinition.getLineMaterial(lineColor, false));\r\n ls.name = \"lines\";\r\n this.addGenerated(ls);\r\n } else {\r\n var linesBufferGeo = new THREE.BufferGeometry();\r\n var lpositions = new Float32Array(linesPoints.length * 3);\r\n\r\n for (var k = 0, l = linesPoints.length; k < l; k++) {\r\n var pt = linesPoints[k];\r\n var li = k * 3;\r\n lpositions[li + 0] = pt.x;\r\n lpositions[li + 1] = pt.y;\r\n lpositions[li + 2] = pt.z;\r\n }\r\n\r\n linesBufferGeo.setAttribute('position', new THREE.BufferAttribute(lpositions, 3));\r\n let ls = new THREE.LineSegments(linesBufferGeo, DirectedAreaDefinition.getLineMaterial(lineColor, false));\r\n ls.name = \"lines\";\r\n this.addGenerated(ls);\r\n }\r\n\r\n if (meshPoints) {\r\n meshPoints.forEach((mps, i) => {\r\n let meshBufferGeo = new THREE.BufferGeometry();\r\n\r\n let mpositions = new Float32Array(mps.length * 3);\r\n\r\n for (let m = 0, n = mps.length; m < n; m++) {\r\n var mp = mps[m];\r\n var mpi = m * 3;\r\n\r\n mpositions[mpi + 0] = mp.x;\r\n mpositions[mpi + 1] = mp.y;\r\n mpositions[mpi + 2] = mp.z;\r\n }\r\n\r\n meshBufferGeo.setAttribute('position', new THREE.BufferAttribute(mpositions, 3));\r\n\r\n let ms = new THREE.Mesh(this.isDynamic ? new THREE.Geometry().fromBufferGeometry(meshBufferGeo) : meshBufferGeo, DirectedAreaDefinition.getMeshMaterial(i > 0 ? areaColorAlternate : areaColor, opacity));\r\n ms.name = i > 0 ? \"alternate\" : \"area\";\r\n this.addGenerated(ms);\r\n });\r\n }\r\n\r\n var excludeInterval = this._excludeInterval,\r\n includeInterval = this._includeInterval;\r\n\r\n if (excludeInterval && excludeInterval.length && dimensionOffsetLength > 0 && seLength > 0) {\r\n\r\n let mpositions = new Float32Array(excludeInterval.length * 6 * 3),\r\n lpositions = new Float32Array(excludeInterval.length * 4 * 3),\r\n mpi = 0,\r\n lpi = 0;\r\n\r\n excludeInterval.forEach(inter => {\r\n var sx = inter[0],\r\n ex = inter[1];\r\n\r\n lpositions[lpi++] = sx;\r\n lpositions[lpi++] = 0;\r\n lpositions[lpi++] = 0;\r\n\r\n lpositions[lpi++] = sx;\r\n lpositions[lpi++] = dimensionOffsetLength;\r\n lpositions[lpi++] = 0;\r\n\r\n lpositions[lpi++] = ex;\r\n lpositions[lpi++] = 0;\r\n lpositions[lpi++] = 0;\r\n\r\n lpositions[lpi++] = ex;\r\n lpositions[lpi++] = dimensionOffsetLength;\r\n lpositions[lpi++] = 0;\r\n\r\n mpositions[mpi++] = sx;\r\n mpositions[mpi++] = 0;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = ex;\r\n mpositions[mpi++] = 0;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = ex;\r\n mpositions[mpi++] = dimensionOffsetLength;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = sx;\r\n mpositions[mpi++] = 0;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = ex;\r\n mpositions[mpi++] = dimensionOffsetLength;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = sx;\r\n mpositions[mpi++] = dimensionOffsetLength;\r\n mpositions[mpi++] = 0;\r\n\r\n });\r\n\r\n //let hsl = this.areaColor.getHSL(),\r\n // col = new THREE.Color().setHSL(((hsl.h * 360 + 350) % 360) / 360, hsl.s * 0.5, hsl.l);\r\n\r\n let col = new THREE.Color(0x454545);\r\n\r\n let meshBufferGeo = new THREE.BufferGeometry();\r\n meshBufferGeo.setAttribute('position', new THREE.BufferAttribute(mpositions, 3));\r\n let msMesh = new THREE.Mesh(this.isDynamic ? new THREE.Geometry().fromBufferGeometry(meshBufferGeo) : meshBufferGeo, DirectedAreaDefinition.getMeshMaterial(col, opacity));\r\n msMesh.name = \"excluded\";\r\n this.addGenerated(msMesh);\r\n\r\n meshBufferGeo = new THREE.BufferGeometry();\r\n meshBufferGeo.setAttribute('position', new THREE.BufferAttribute(lpositions, 3));\r\n var ms = new THREE.LineSegments(this.isDynamic ? new THREE.Geometry().fromBufferGeometry(meshBufferGeo) : meshBufferGeo, DirectedAreaDefinition.getLineMaterial(col, false));\r\n ms.name = \"excluded\";\r\n this.addGenerated(ms);\r\n }\r\n\r\n if (includeInterval && includeInterval.length && dimensionOffsetLength > 0 && seLength > 0) {\r\n\r\n let mpositions = new Float32Array(includeInterval.length * 6 * 3),\r\n lpositions = new Float32Array(includeInterval.length * 4 * 3),\r\n mpi = 0,\r\n lpi = 0;\r\n\r\n includeInterval.forEach(inter => {\r\n var sx = Math.min.apply(null, inter),\r\n ex = Math.max.apply(null, inter);\r\n\r\n lpositions[lpi++] = sx;\r\n lpositions[lpi++] = 0;\r\n lpositions[lpi++] = 0;\r\n\r\n lpositions[lpi++] = sx;\r\n lpositions[lpi++] = dimensionOffsetLength;\r\n lpositions[lpi++] = 0;\r\n\r\n lpositions[lpi++] = ex;\r\n lpositions[lpi++] = 0;\r\n lpositions[lpi++] = 0;\r\n\r\n lpositions[lpi++] = ex;\r\n lpositions[lpi++] = dimensionOffsetLength;\r\n lpositions[lpi++] = 0;\r\n\r\n mpositions[mpi++] = sx;\r\n mpositions[mpi++] = 0;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = ex;\r\n mpositions[mpi++] = 0;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = ex;\r\n mpositions[mpi++] = dimensionOffsetLength;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = sx;\r\n mpositions[mpi++] = 0;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = ex;\r\n mpositions[mpi++] = dimensionOffsetLength;\r\n mpositions[mpi++] = 0;\r\n\r\n mpositions[mpi++] = sx;\r\n mpositions[mpi++] = dimensionOffsetLength;\r\n mpositions[mpi++] = 0;\r\n\r\n });\r\n\r\n let hsl = this.areaColor.getHSL({ h: 0, s: 0, l: 0 }),\r\n col = new THREE.Color().setHSL(((hsl.h * 360 + 10) % 360) / 360, hsl.s, hsl.l);\r\n\r\n let meshBufferGeo = new THREE.BufferGeometry()\r\n meshBufferGeo.setAttribute('position', new THREE.BufferAttribute(mpositions, 3));\r\n let msMesh = new THREE.Mesh(this.isDynamic ? new THREE.Geometry().fromBufferGeometry(meshBufferGeo) : meshBufferGeo, DirectedAreaDefinition.getMeshMaterial(col, opacity));\r\n msMesh.name = \"included\";\r\n this.addGenerated(msMesh);\r\n\r\n meshBufferGeo = new THREE.BufferGeometry()\r\n meshBufferGeo.setAttribute('position', new THREE.BufferAttribute(lpositions, 3));\r\n var ms = new THREE.LineSegments(this.isDynamic ? new THREE.Geometry().fromBufferGeometry(meshBufferGeo) : meshBufferGeo, DirectedAreaDefinition.getLineMaterial(col, false));\r\n ms.name = \"included\";\r\n this.addGenerated(ms);\r\n }\r\n\r\n if (arrowLength > 0 && this.withArrow && dimensionOffsetDir) {\r\n //var midPoint = start.clone().add(end).multiplyScalar(0.5);\r\n var midPoint = new THREE.Vector3(seLength * 0.5, 0, 0);\r\n var lenHalf = arrowLength * 0.5;\r\n var lenQuarter = arrowLength * 0.25;\r\n\r\n //var dirRight = seDir;\r\n //var dirUp = dimensionOffsetDir;\r\n var dirRight = new THREE.Vector3(1, 0, 0);\r\n var dirUp = new THREE.Vector3(0, 1, 0);\r\n\r\n if (this.flip) {\r\n //midPoint.add(dimensionOffset);\r\n //dimensionOffsetDir.negate();\r\n\r\n midPoint.setY(dimensionOffsetLength);\r\n dirUp.negate();\r\n }\r\n\r\n var p1 = dirRight.clone().multiplyScalar(lenQuarter).add(midPoint);\r\n var p2 = dirUp.clone().multiplyScalar(lenHalf).add(p1);\r\n var p3 = dirRight.clone().multiplyScalar(-lenHalf).add(p2);\r\n var p4 = dirRight.clone().multiplyScalar(-lenHalf).add(p1);\r\n\r\n var pt1 = dirRight.clone().multiplyScalar(lenQuarter).add(p2);\r\n var pt2 = dirUp.clone().multiplyScalar(arrowLength).add(midPoint);\r\n var pt3 = dirRight.clone().multiplyScalar(-lenQuarter).add(p3);\r\n\r\n if (this.isDynamic) {\r\n let verts = [p1, p2, p3, p4, pt1, pt2, pt3];\r\n\r\n let arrowGeo = new THREE.Geometry();\r\n arrowGeo.vertices = [0, 1, 4, 5, 6, 2, 3, 0].map(idx => verts[idx]);\r\n let arrow = new THREE.Line(arrowGeo, DirectedAreaDefinition.getLineMaterial(arrowColor, false));\r\n arrow.name = \"arrowLine\";\r\n this.addGenerated(arrow);\r\n\r\n arrowGeo = new THREE.Geometry();\r\n arrowGeo.vertices = verts;\r\n arrowGeo.faces = [new THREE.Face3(0, 1, 2), new THREE.Face3(0, 2, 3), new THREE.Face3(4, 5, 6)];\r\n arrowGeo.computeBoundingSphere();\r\n var arrowMesh = new THREE.Mesh(arrowGeo, DirectedAreaDefinition.getMeshMaterial(arrowColor, opacity * 0.7));\r\n arrowMesh.name = \"arrow\";\r\n this.addGenerated(arrowMesh);\r\n } else {\r\n let arr = [\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n p3.x, p3.y, p3.z,\r\n p4.x, p4.y, p4.z,\r\n pt1.x, pt1.y, pt1.z,\r\n pt2.x, pt2.y, pt2.z,\r\n pt3.x, pt3.y, pt3.z\r\n ];\r\n let arrowBufferGeo = new THREE.BufferGeometry();\r\n\r\n arrowBufferGeo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(arr), 3));\r\n arrowBufferGeo.setIndex(new THREE.BufferAttribute(new Uint16Array([0, 1, 4, 5, 6, 2, 3, 0]), 1));\r\n let arrow = new THREE.Line(arrowBufferGeo, DirectedAreaDefinition.getLineMaterial(arrowColor, false));\r\n arrow.name = \"arrowLine\";\r\n this.addGenerated(arrow);\r\n\r\n arrowBufferGeo = new THREE.BufferGeometry();\r\n\r\n arrowBufferGeo.setAttribute('position', new THREE.BufferAttribute(new Float32Array(arr), 3));\r\n arrowBufferGeo.setIndex(new THREE.BufferAttribute(new Uint16Array([0, 1, 2, 0, 2, 3, 4, 5, 6]), 1));\r\n var arrowMesh = new THREE.Mesh(arrowBufferGeo, DirectedAreaDefinition.getMeshMaterial(arrowColor, opacity * 0.7));\r\n arrowMesh.name = \"arrow\";\r\n this.addGenerated(arrowMesh);\r\n }\r\n }\r\n }\r\n\r\n moveBy(v: THREE.Vector3) {\r\n if (!v)\r\n return;\r\n\r\n this._start.add(v);\r\n this._end.add(v);\r\n this._dimensionPosition.add(v);\r\n\r\n this.rebuild();\r\n }\r\n\r\n GetPositionProperty(k: string) {\r\n return this.start[k] || null;\r\n }\r\n\r\n GetSizeProperty(k: string): number {\r\n return 0;\r\n }\r\n\r\n removeInstance() {\r\n var parent = this.parent;\r\n if (parent && parent instanceof LS.Client3DEditor.DirectedAreaHolder) {\r\n parent.removeArea(this);\r\n }\r\n }\r\n\r\n reset() {\r\n this.start.set(0, 0, 0);\r\n this.end.set(0, 0, 0);\r\n this.dimensionPosition.set(0, 0, 0);\r\n this.rebuild();\r\n }\r\n\r\n dispose() {\r\n spt.ThreeJs.utils.emptyObject3D(this, true, true);\r\n this._isDisposed = true;\r\n }\r\n\r\n duplicate(count?: number, distance?: number, direction?: THREE.Vector3) {\r\n var parent = this.parent;\r\n if (parent && parent instanceof LS.Client3DEditor.DirectedAreaHolder) {\r\n parent.addDuplicate(this, count, distance, direction);\r\n }\r\n }\r\n }\r\n\r\n export class LineMaterialHelper {\r\n private static _mats: THREE.LineMaterial[] = [];\r\n\r\n static GetLineMaterial(opts?: THREE.LineMaterialParameters): THREE.LineMaterial {\r\n var mat = new THREE.LineMaterial(opts);\r\n LineMaterialHelper._mats.push(mat);\r\n var dp = mat.dispose;\r\n if (dp) {\r\n mat.dispose = function () {\r\n ArrayHelper.removeItem(LineMaterialHelper._mats, mat);\r\n dp.apply(mat, arguments);\r\n };\r\n }\r\n\r\n if (LS && LS.Client3DEditor && LS.Client3DEditor.Controller.Current && LS.Client3DEditor.Controller.Current.viewModel) {\r\n var viewModel = LS.Client3DEditor.Controller.Current.viewModel;\r\n mat.resolution.set(viewModel.ContainerWidth, viewModel.ContainerHeight);\r\n }\r\n\r\n return mat;\r\n }\r\n\r\n static updateViewSize(containerWidth: number, containerHeight: number) {\r\n LineMaterialHelper._mats.forEach(mat => {\r\n mat.resolution.set(containerWidth, containerHeight);\r\n });\r\n }\r\n }\r\n\r\n export class Line2SegmentsCollection extends THREE.Object3D {\r\n constructor(geoData: number[], color: number, linewidth: number, dashed = false, dashScale = 1, dashSize = 1, gapSize = 1, depthTest = true, depthWrite = true, transparent = false) {\r\n super();\r\n \r\n var lineMaterial = LineMaterialHelper.GetLineMaterial({\r\n color: color,\r\n linewidth: linewidth, // in pixels\r\n vertexColors: false, //THREE.NoColors,\r\n transparent: transparent,\r\n //resolution: // to be set by renderer, eventually\r\n dashed: dashed,\r\n dashScale: dashScale,\r\n dashSize: dashSize,\r\n gapSize: gapSize,\r\n depthTest: depthTest,\r\n depthWrite: depthWrite\r\n });\r\n\r\n if (dashed) {\r\n lineMaterial.dashed = true;\r\n lineMaterial.defines.USE_DASH = \"\";\r\n }\r\n\r\n lineMaterial.needsUpdate = true;\r\n\r\n //[ x1, y1, z1, x2, y2, z2, ... ]\r\n var array = new Float32Array(geoData);\r\n var geo = new THREE.LineSegmentsGeometry();\r\n if (!geo.boundingSphere)\r\n geo.boundingSphere = new THREE.Sphere();\r\n geo.setPositions(array);\r\n\r\n var line = new THREE.Line2(geo, lineMaterial);\r\n line.computeLineDistances();\r\n\r\n line.renderOrder = LS.Client3DEditor.DefaultRenderOrder;\r\n this.add(line);\r\n }\r\n }\r\n}\r\n\r\nTHREE.SDFTextObject = spt.ThreeJs.utils.SDFTextObject;\r\nTHREE.SDFTextObjectCollection = spt.ThreeJs.utils.SDFTextObjectCollection;\r\nTHREE.SDFFontMaterial = spt.ThreeJs.utils.SDFFontMaterial;\r\nTHREE.DimensionAligned = spt.ThreeJs.utils.DimensionAligned;\r\nTHREE.DimensionAlignedCollection = spt.ThreeJs.utils.DimensionAlignedCollection;\r\nTHREE.DirectedAreaDefinition = spt.ThreeJs.utils.DirectedAreaDefinition;\r\nTHREE.Line2SegmentsCollection = spt.ThreeJs.utils.Line2SegmentsCollection;\r\n\r\n//module THREE {\r\n// export var SDFTextObject: typeof spt.ThreeJs.utils.SDFTextObject = spt.ThreeJs.utils.SDFTextObject;\r\n// export var SDFTextObjectCollection: typeof spt.ThreeJs.utils.SDFTextObjectCollection = spt.ThreeJs.utils.SDFTextObjectCollection;\r\n// export var SDFFontMaterial: typeof spt.ThreeJs.utils.SDFFontMaterial = spt.ThreeJs.utils.SDFFontMaterial;\r\n// export var DimensionAligned: typeof spt.ThreeJs.utils.DimensionAligned = spt.ThreeJs.utils.DimensionAligned;\r\n// export var DimensionAlignedCollection: typeof spt.ThreeJs.utils.DimensionAlignedCollection = spt.ThreeJs.utils.DimensionAlignedCollection;\r\n// export var DirectedAreaDefinition: typeof spt.ThreeJs.utils.DirectedAreaDefinition = spt.ThreeJs.utils.DirectedAreaDefinition;\r\n//}","interface ArrayConstructor {\r\n from(arg: ArrayLike): Array;\r\n}\r\n\r\nmodule spt.ThreeJs {\r\n import Stopwatch = spt.Utils.Stopwatch;\r\n\r\n export interface IExtendableBufferAttributes {\r\n [name: string]: {\r\n array: number[];\r\n itemSize: number;\r\n type: string;\r\n }\r\n }\r\n\r\n export interface ILibraryEntry {\r\n RefKeyName: string;\r\n }\r\n\r\n export interface IReferenceLibrary {\r\n Entries: ILibraryEntry[];\r\n }\r\n\r\n export class JsonConverter {\r\n\r\n Library: { [key: string]: any };\r\n\r\n Layer: { [key: string]: THREE.Object3D[] };\r\n\r\n Container: HTMLElement = null;\r\n\r\n Camera: THREE.Camera = null;\r\n\r\n TextureLoader: THREE.TextureLoader = null;\r\n CubeTextureLoader: THREE.CubeTextureLoader = null;\r\n\r\n constructor(camera?: THREE.Camera, container?: HTMLElement) {\r\n if (container)\r\n this.Container = container;\r\n if (camera)\r\n this.Camera = camera;\r\n this.reset();\r\n }\r\n\r\n reset() {\r\n this.Library = {};\r\n this.Layer = {};\r\n }\r\n\r\n dispose() {\r\n delete this.Library;\r\n delete this.Layer;\r\n }\r\n\r\n addToLibrary(library: IReferenceLibrary) {\r\n var entries = library.Entries;\r\n for (var i = 0, l = entries.length; i < l; i++) {\r\n var entry = entries[i];\r\n this.Library[entry.RefKeyName] = this.convertThreeJsObject(entry);\r\n }\r\n }\r\n\r\n convertThreeJsObject(obj: any) {\r\n if (typeof obj == \"undefined\" || obj === null) {\r\n return obj;\r\n } else if (obj instanceof Array !== false || Array.isArray(obj)) {\r\n var arr = [];\r\n for (var i = 0, l = obj.length; i < l; i++) {\r\n var object = obj[i] as any;\r\n if (object !== null && typeof object === \"object\" && (object).ThreeJSType === \"ReferenceLibrary\") {\r\n this.addToLibrary(object as any);\r\n continue;\r\n }\r\n arr.push(this.convertThreeJsObject(object));\r\n }\r\n return arr;\r\n } else if (typeof obj !== \"object\") {\r\n return obj;\r\n } else if (obj.ThreeJSType) {\r\n return this.convertThreeJsType(obj, obj.ThreeJSType);\r\n } else if (obj.ThreeJSConstructor) {\r\n var parameters = obj.Parameters;\r\n if (obj.ParametersCompressed)\r\n parameters = JSON.parse(LZString.decompressFromEncodedURIComponent(obj.ParametersCompressed));\r\n var genericObj = constructObject(THREE[obj.ThreeJSConstructor], this.convertThreeJsObject(parameters || [])),\r\n isObject3D = genericObj instanceof THREE.Object3D;\r\n if (obj.Attributes) {\r\n for (var key in obj.Attributes) {\r\n if (isObject3D) {\r\n switch (key) {\r\n case \"matrix\":\r\n genericObj.applyMatrix4(this.convertThreeJsObject(obj.Attributes[key]));\r\n break;\r\n case \"children\":\r\n for (var i = 0, l = obj.Attributes[key].length; i < l; i++) {\r\n var child = obj.Attributes[key][i];\r\n if (child === null)\r\n continue;\r\n if (typeof child === \"object\" && (child).ThreeJSType === \"ReferenceLibrary\") {\r\n this.addToLibrary(child as any);\r\n continue;\r\n }\r\n genericObj.add(this.convertThreeJsObject(child));\r\n }\r\n break;\r\n default:\r\n this.assignThreeJsProperty(genericObj, key, obj.Attributes[key]);\r\n break;\r\n }\r\n } else\r\n this.assignThreeJsProperty(genericObj, key, obj.Attributes[key]);\r\n }\r\n }\r\n return genericObj;\r\n }\r\n return obj;\r\n }\r\n\r\n convertThreeJsType(obj: any, type: string): any {\r\n if (this.TypedArrayGenerator[type]) {\r\n var compressedArray: spt.Utils.FastIntegerCompression.CompressionResult = obj.CompressedArray;\r\n if (compressedArray && compressedArray.Data) {\r\n var vArray = spt.Utils.FastIntegerCompression.uncompressFromBase64(compressedArray.Data, compressedArray.Bias, compressedArray.Scale);\r\n if (obj.IsRGBArray) {\r\n var cArray = this.TypedArrayGenerator[type](vArray.length * 3) as Array,\r\n idx = 0;\r\n vArray.forEach(hex => {\r\n var r = (hex >> 16 & 255) / 255,\r\n g = (hex >> 8 & 255) / 255,\r\n b = (hex & 255) / 255;\r\n\r\n cArray[idx++] = r;\r\n cArray[idx++] = g;\r\n cArray[idx++] = b;\r\n });\r\n\r\n return cArray;\r\n }\r\n\r\n return this.TypedArrayGenerator[type](vArray);\r\n }\r\n else\r\n return this.TypedArrayGenerator[type]((obj.Array && obj.Scale && obj.Scale > 0) ? obj.Array.map(v => v * obj.Scale) : (obj.Array || []));\r\n }\r\n switch (type) {\r\n case \"ReferenceLibrary\":\r\n this.addToLibrary(obj);\r\n return null;\r\n case \"ReferenceEntry\":\r\n return obj.RefKeyName ? this.Library[obj.RefKeyName] : null;\r\n case \"Texture\":\r\n //var lj = LoaderManager.addLoadingJob();\r\n //var texture = this.loadTextureFromUrl(obj.image, () => { LoaderManager.finishLoadingJob(lj); }, () => { LoaderManager.finishLoadingJob(lj); });\r\n var texture = this.loadTextureFromUrl(obj.image);\r\n for (var key in texture) {\r\n if (key != \"image\" && key != \"images\" && typeof obj[key] != \"undefined\" && obj[key] != null) {\r\n this.assignThreeJsProperty(texture, key, (obj[key]));\r\n }\r\n }\r\n if (texture.format === 1022 || texture.format === 1020)\r\n texture.format = THREE.RGBFormat;\r\n else if (texture.format === 1021 || texture.format === 1023)\r\n texture.format = THREE.RGBAFormat;\r\n if (obj.variationName) {\r\n (texture).variationName = obj.variationName;\r\n (texture).TextureVariations = obj.TextureVariations;\r\n }\r\n return texture;\r\n case \"CubeTexture\":\r\n //var lj = LoaderManager.addLoadingJob();\r\n var cubeTexLoader = this.CubeTextureLoader;\r\n if (!cubeTexLoader)\r\n cubeTexLoader = this.CubeTextureLoader = new THREE.CubeTextureLoader();\r\n //var cubeTex = cubeTexLoader.load(obj.images, () => { LoaderManager.finishLoadingJob(lj); }, undefined, () => { LoaderManager.finishLoadingJob(lj); }) as THREE.CubeTexture;\r\n var cubeTex = cubeTexLoader.load(obj.images, () => { LoaderManager.notifyResourceLoaded(); }) as THREE.CubeTexture;\r\n for (var key in cubeTex as any) {\r\n if (key != \"image\" && key != \"images\" && typeof obj[key] != \"undefined\" && obj[key] != null) {\r\n this.assignThreeJsProperty(cubeTex, key, (obj[key]));\r\n }\r\n }\r\n if (cubeTex.format === 1022 || cubeTex.format === 1020)\r\n cubeTex.format = THREE.RGBFormat;\r\n else if (cubeTex.format === 1021 || cubeTex.format === 1023)\r\n cubeTex.format = THREE.RGBAFormat;\r\n return cubeTex;\r\n case \"OrbitControls\":\r\n var controls = new THREE.OrbitControls(this.Camera, this.Container);\r\n for (var key in controls) {\r\n if (typeof obj[key] != \"undefined\" && obj[key] != null) {\r\n this.assignThreeJsProperty(controls, key, (obj[key]));\r\n }\r\n }\r\n return controls;\r\n case \"BufferGeometry\":\r\n case \"MultipleBufferGeometry\":\r\n var geometry = new THREE.BufferGeometry(),\r\n objAttribs = obj.attributes,\r\n objIndex = obj.index;\r\n\r\n for (var name in objAttribs) {\r\n if (name && objAttribs.hasOwnProperty(name) && objAttribs[name] && name[0] !== \"_\") {\r\n geometry.setAttribute(name, this.convertThreeJsObject(objAttribs[name]));\r\n }\r\n }\r\n if (objIndex && objIndex.array)\r\n geometry.setIndex(this.convertThreeJsObject(objIndex));\r\n if (obj.appendGeometries && obj.appendGeometries.length) {\r\n var extendable = this.BufferGeometryToExtendable(geometry),\r\n tMat = new THREE.Matrix4(),\r\n tCol = new THREE.Color(),\r\n colorArray = this.convertThreeJsObject(obj.appendGeometryColors) as Float32Array,\r\n trsArray: Array;\r\n\r\n if (obj.appendGeometryTransforms) {\r\n if (obj.appendGeometryTransforms instanceof Array !== false || Array.isArray(obj.appendGeometryTransforms))\r\n trsArray = obj.appendGeometryTransforms;\r\n else\r\n trsArray = this.convertThreeJsObject(obj.appendGeometryTransforms) as Array;\r\n }\r\n\r\n var transformArray = new Float32Array(trsArray);\r\n\r\n for (var j = 0, m = obj.appendGeometries.length; j < m; j++) {\r\n var tIdx = j * 16,\r\n cIdx = j * 3;\r\n this.AppendBufferGeometryToExtendable(extendable, this.convertThreeJsObject(obj.appendGeometries[j]), tMat.fromArray(transformArray.subarray(tIdx, tIdx + 16)), colorArray ? tCol.fromArray(colorArray.subarray(cIdx, cIdx + 3)) : null);\r\n }\r\n geometry = this.BufferGeometryFromExtendable(extendable);\r\n }\r\n if(obj.doComputeFaceNormals)\r\n geometry.computeFaceNormals();\r\n if(obj.doComputeVertexNormals)\r\n geometry.computeVertexNormals();\r\n if (obj.multipleMatricesCount && obj.multipleMatrixData) {\r\n var multipleMatrixData = JSON.parse(LZString.decompressFromEncodedURIComponent(obj.multipleMatrixData)) as Array,\r\n mergedGeometry = new THREE.BufferGeometry(),\r\n sourceAttributes = geometry.attributes,\r\n mat = new THREE.Matrix4(),\r\n nMat = new THREE.Matrix3(),\r\n matricesLength = obj.multipleMatricesCount,\r\n sourceVertexCount = 0;\r\n\r\n for (var sourceName in sourceAttributes) {\r\n\r\n var sourceAttribute = sourceAttributes[sourceName] as THREE.BufferAttribute;\r\n\r\n if (sourceAttribute && sourceAttribute.array)\r\n mergedGeometry.setAttribute(sourceName, new THREE.BufferAttribute(new (sourceAttribute.array.constructor)(sourceAttribute.array.length * matricesLength) as any, sourceAttribute.itemSize, sourceAttribute.normalized));\r\n\r\n if (sourceName === \"position\")\r\n sourceVertexCount = sourceAttribute.count;\r\n }\r\n\r\n if (geometry.index && geometry.index.array) {\r\n var maxIndex = sourceVertexCount * matricesLength;\r\n if (maxIndex >= 65535)\r\n mergedGeometry.setIndex(new THREE.BufferAttribute(new Uint32Array(geometry.index.array.length * matricesLength), geometry.index.itemSize, geometry.index.normalized));\r\n else\r\n mergedGeometry.setIndex(new THREE.BufferAttribute(new Uint16Array(geometry.index.array.length * matricesLength), geometry.index.itemSize, geometry.index.normalized));\r\n }\r\n\r\n var targetAttributes = Object.keys(mergedGeometry.attributes).map(name => {\r\n return { name: name, attribute: mergedGeometry.attributes[name] as THREE.BufferAttribute };\r\n });\r\n\r\n if (mergedGeometry.index && mergedGeometry.index.array) {\r\n targetAttributes.push({ name: \"index\", attribute: mergedGeometry.index as THREE.BufferAttribute });\r\n }\r\n\r\n targetAttributes.forEach(attr => {\r\n var name = attr.name,\r\n targetAttribute = attr.attribute,\r\n targetArray = targetAttribute.array as number[],\r\n //targetCount = targetAttribute.count,\r\n sourceAttribute = name === \"index\" ? geometry.index : sourceAttributes[name] as THREE.BufferAttribute,\r\n sourceArray = sourceAttribute.array as number[],\r\n sourceArrayLength = sourceArray.length,\r\n sourceCount = sourceAttribute.count;\r\n\r\n if (name === \"position\" || name === \"normal\") {\r\n var v1 = new THREE.Vector3(),\r\n isNormal = name === \"normal\";\r\n\r\n for (var midx = 0; midx < matricesLength; midx++) {\r\n\r\n mat.fromArray(multipleMatrixData, midx * 16);\r\n\r\n if (isNormal) {\r\n nMat.getNormalMatrix(mat);\r\n\r\n for (var sci = 0; sci < sourceCount; sci++) {\r\n\r\n v1.set(sourceAttribute.getX(sci),\r\n sourceAttribute.getY(sci),\r\n sourceAttribute.getZ(sci)).applyMatrix3(nMat);//.normalize();\r\n\r\n targetAttribute.setXYZ(midx * sourceCount + sci, v1.x, v1.y, v1.z);\r\n\r\n }\r\n } else {\r\n for (var sci = 0; sci < sourceCount; sci++) {\r\n\r\n v1.set(sourceAttribute.getX(sci),\r\n sourceAttribute.getY(sci),\r\n sourceAttribute.getZ(sci)).applyMatrix4(mat);\r\n\r\n targetAttribute.setXYZ(midx * sourceCount + sci, v1.x, v1.y, v1.z);\r\n\r\n }\r\n }\r\n }\r\n }\r\n else if (name === \"index\") {\r\n for (var midx = 0; midx < matricesLength; midx++) {\r\n for (var sidx = 0; sidx < sourceArrayLength; sidx++) {\r\n targetArray[midx * sourceArrayLength + sidx] = sourceArray[sidx] + sourceVertexCount * midx;\r\n }\r\n }\r\n } else {\r\n for (var midx = 0; midx < matricesLength; midx++) {\r\n for (var sidx = 0; sidx < sourceArrayLength; sidx++) {\r\n targetArray[midx * sourceArrayLength + sidx] = sourceArray[sidx];\r\n }\r\n }\r\n }\r\n\r\n targetAttribute.needsUpdate = true;\r\n });\r\n\r\n geometry = mergedGeometry;\r\n }\r\n for (var key in geometry) {\r\n if (key !== \"attributes\" && key !== \"index\" && typeof obj[key] !== \"undefined\" && obj[key] !== null) {\r\n this.assignThreeJsProperty(geometry, key, (obj[key]));\r\n }\r\n }\r\n geometry.computeBoundingSphere();\r\n return geometry;\r\n case \"BufferAttribute\":\r\n return new THREE.BufferAttribute(this.convertThreeJsObject(obj.array), obj.itemSize);\r\n case \"DynamicBufferAttribute\":\r\n return new THREE.BufferAttribute(this.convertThreeJsObject(obj.array), obj.itemSize).setUsage(THREE.DynamicDrawUsage);\r\n case \"BBlockGeometry\":\r\n return this.getBufferGeometryFromBBlockGeometry(obj);\r\n case \"Geometry\":\r\n case \"MultipleGeometry\":\r\n var resGeometry = new THREE.Geometry();\r\n this.assignProperties(obj, resGeometry, false, [\"multipleMatricesCount\", \"multipleMatrixData\"]);\r\n\r\n if(obj.doComputeFaceNormals)\r\n resGeometry.computeFaceNormals();\r\n if(obj.doComputeVertexNormals)\r\n resGeometry.computeVertexNormals();\r\n\r\n var mGeometry = resGeometry.clone();\r\n\r\n if (obj.multipleMatricesCount && obj.multipleMatrixData) {\r\n var multipleMatrixData = JSON.parse(LZString.decompressFromEncodedURIComponent(obj.multipleMatrixData)) as Array,\r\n mat = new THREE.Matrix4(),\r\n matricesLength = obj.multipleMatricesCount;\r\n\r\n for (var midx = 0; midx < matricesLength; midx++) {\r\n mat.fromArray(multipleMatrixData, midx * 16);\r\n if(midx === 0)\r\n resGeometry.applyMatrix4(mat);\r\n else\r\n resGeometry.merge(mGeometry, mat, 0);\r\n }\r\n }\r\n\r\n return resGeometry;\r\n case \"InstancedMesh\":\r\n var instanceCount = obj.count || 0,\r\n geo = this.convertThreeJsObject(obj.geometry) as THREE.BufferGeometry;\r\n if((geo as THREE.Geometry).isGeometry)\r\n geo = new THREE.BufferGeometry().fromGeometry(geo as any);\r\n else if(obj.geometry.ThreeJSType === \"ReferenceEntry\")\r\n geo = new THREE.BufferGeometry().copy(geo);\r\n\r\n var instancedMesh = new THREE.InstancedMesh(geo, this.convertThreeJsObject(obj.material), instanceCount);\r\n\r\n if (instanceCount && obj.instanceMatrixData) {\r\n var instanceMatrixData = JSON.parse(LZString.decompressFromEncodedURIComponent(obj.instanceMatrixData)) as Array,\r\n mat = new THREE.Matrix4();\r\n\r\n for (var i = 0; i < instanceCount; ++i) {\r\n instancedMesh.setMatrixAt(i, mat.fromArray(instanceMatrixData, i * 16));\r\n }\r\n }\r\n this.assignProperties(obj, instancedMesh, true, [\"count\", \"instanceMatrixData\", \"instanceMatrix\", \"geometry\", \"material\"]);\r\n return instancedMesh;\r\n case \"LOD\":\r\n var lod = new THREE.LOD();\r\n if (obj.levels) {\r\n var levels = obj.levels as { obj: any, dist: number }[];\r\n for (var i = 0; i < levels.length; ++i) {\r\n lod.addLevel(this.convertThreeJsObject(levels[i].obj), levels[i].dist);\r\n }\r\n }\r\n this.assignProperties(obj, lod, true, [\"levels\"]);\r\n return lod;\r\n default: //generic\r\n var threejsObj = constructObject(THREE[type], []);\r\n var isObject3D = threejsObj instanceof THREE.Object3D;\r\n this.assignProperties(obj, threejsObj, isObject3D);\r\n return threejsObj;\r\n }\r\n }\r\n\r\n assignProperties(obj: any, threejsObj: any, isObject3D: boolean, except?: string[]) {\r\n if (!except) except = [];\r\n var doUpdateMatrix = false;\r\n for (var key in obj) {\r\n if (key === \"ThreeJSType\" || except.indexOf(key) !== -1)\r\n continue;\r\n if (typeof obj[key] !== \"undefined\" && obj[key] !== null) {\r\n if (isObject3D) {\r\n switch (key) {\r\n case \"matrix\":\r\n spt.ThreeJs.utils.setMatrix4(threejsObj, this.convertThreeJsObject(obj[key]));\r\n doUpdateMatrix = false;\r\n break;\r\n case \"position\":\r\n case \"scale\":\r\n case \"quaternion\":\r\n case \"rotation\":\r\n threejsObj[key].copy(this.convertThreeJsObject(obj[key]));\r\n doUpdateMatrix = true;\r\n break;\r\n case \"children\":\r\n for (var i = 0, l = obj[key].length; i < l; i++) {\r\n var child = obj[key][i];\r\n if (child === null)\r\n continue;\r\n if (typeof child === \"object\" && (child).ThreeJSType === \"ReferenceLibrary\") {\r\n this.addToLibrary(child as any);\r\n continue;\r\n }\r\n threejsObj.add(this.convertThreeJsObject(child));\r\n }\r\n break;\r\n default:\r\n this.assignThreeJsProperty(threejsObj, key, (obj[key]));\r\n break;\r\n }\r\n } else\r\n this.assignThreeJsProperty(threejsObj, key, (obj[key]));\r\n }\r\n }\r\n\r\n if(isObject3D && doUpdateMatrix)\r\n threejsObj.updateMatrix();\r\n\r\n if (threejsObj instanceof THREE.Camera)\r\n (threejsObj as any).updateProjectionMatrix();\r\n\r\n if (isObject3D && obj.LayerType && typeof obj.LayerType == \"string\" && obj.LayerType.length) {\r\n if (this.Layer[obj.LayerType])\r\n this.Layer[obj.LayerType].push(threejsObj as THREE.Object3D);\r\n else\r\n this.Layer[obj.LayerType] = [threejsObj as THREE.Object3D];\r\n }\r\n }\r\n\r\n assignThreeJsProperty(threejsObj: any, key: string, nprop: any) {\r\n\r\n if (nprop !== null && typeof nprop === \"object\" && (nprop).ThreeJSType === \"ReferenceLibrary\") {\r\n this.addToLibrary(nprop as any);\r\n return;\r\n }\r\n var newObj = this.convertThreeJsObject(nprop);\r\n //if (threejsObj[key] === undefined && !Object.keys(threejsObj).some(k => k === key)) {\r\n // console.warn(Object.prototype.toString.call(threejsObj) + \" has no attribute with name: \" + key + \". Possible attributes are [\" + Object.keys(threejsObj).join(\",\") + \"]\");\r\n //}\r\n //if (!newObj && nprop) {\r\n // console.warn(Object.prototype.toString.call(threejsObj) + \"[\" + key + \"] : property is \" + newObj + \". From \" + nprop);\r\n //}\r\n if (!threejsObj[key] || !newObj)\r\n threejsObj[key] = newObj;\r\n else if (threejsObj[key] instanceof THREE.Color)\r\n threejsObj[key].set(newObj);\r\n else if (typeof threejsObj[key].copy == \"function\" && threejsObj[key].type === newObj.type)\r\n threejsObj[key].copy(newObj);\r\n else\r\n threejsObj[key] = newObj;\r\n }\r\n\r\n loadTextureFromUrl(url: string, onLoad?: (t?: THREE.Texture) => void, onError?: (e?: ErrorEvent) => void): THREE.Texture {\r\n return JsonConverter.loadTextureFromUrlStatic(url, this.TextureLoader || (this.TextureLoader = new THREE.TextureLoader()), onLoad, onError);\r\n }\r\n\r\n static loadTextureFromUrlStatic(url: string, loader?: THREE.TextureLoader, onLoad?: (t?: THREE.Texture) => void, onError?: (e?: ErrorEvent) => void): THREE.Texture {\r\n if (!loader)\r\n loader = new THREE.TextureLoader();\r\n\r\n var texture = loader.load(url, (t?: THREE.Texture) => {\r\n if (onLoad)\r\n onLoad(t);\r\n LoaderManager.notifyResourceLoaded();\r\n }, undefined, onError);\r\n texture.anisotropy = Detector.webglParameters.maxAnisotropy || 1;\r\n return texture;\r\n }\r\n\r\n TypedArrayGenerator = {\r\n 'Int8Array': (array?: number[]) => new Int8Array(array),\r\n 'Uint8Array': (array?: number[]) => new Uint8Array(array),\r\n 'Uint8ClampedArray': (array?: number[]) => new Uint8ClampedArray(array),\r\n 'Int16Array': (array?: number[]) => new Int16Array(array),\r\n 'Uint16Array': (array?: number[]) => new Uint16Array(array),\r\n 'Int32Array': (array?: number[]) => new Int32Array(array),\r\n 'Uint32Array': (array?: number[]) => new Uint32Array(array),\r\n 'Float32Array': (array?: number[]) => new Float32Array(array),\r\n 'Float64Array': (array?: number[]) => new Float64Array(array),\r\n 'UndefinedArray': (array?: number[]) => array ? (Array.isArray(array) ? array : new Array(array)) : []\r\n };\r\n\r\n BufferGeometryToExtendable(geometry: THREE.BufferGeometry): IExtendableBufferAttributes {\r\n var geo = geometry.index ? geometry.toNonIndexed() : geometry;\r\n\r\n var extAttributes: IExtendableBufferAttributes = {};\r\n\r\n var attributes = geo.attributes;\r\n\r\n for (var name in attributes) {\r\n var attribute = attributes[name] as any;\r\n var array = attribute.array as any[];\r\n var newArray: any[] = spt.Utils.arrayFrom(array);\r\n\r\n extAttributes[name] = {\r\n array: newArray,\r\n itemSize: attribute.itemSize,\r\n type: attribute.array.constructor.name\r\n };\r\n }\r\n\r\n return extAttributes;\r\n }\r\n\r\n BufferGeometryFromExtendable(attributes: IExtendableBufferAttributes): THREE.BufferGeometry {\r\n var geometry = new THREE.BufferGeometry();\r\n\r\n for (var key in attributes) {\r\n\r\n var attribute = attributes[key];\r\n var typedArray = this.TypedArrayGenerator[attribute.type](attribute.array);\r\n\r\n geometry.setAttribute(key, new THREE.BufferAttribute(typedArray, attribute.itemSize));\r\n\r\n }\r\n\r\n return geometry;\r\n }\r\n\r\n AppendBufferGeometryToExtendable(attributes: IExtendableBufferAttributes, geometry: THREE.BufferGeometry | THREE.Geometry, transform?: THREE.Matrix4, color?: THREE.Color) {\r\n if (!transform)\r\n transform = new THREE.Matrix4();\r\n\r\n if (!geometry || !attributes || typeof attributes !== \"object\")\r\n return;\r\n\r\n var newGeo: THREE.BufferGeometry;\r\n\r\n if (geometry instanceof THREE.Geometry) {\r\n newGeo = (new THREE.BufferGeometry()).fromGeometry(geometry);\r\n if (newGeo.index)\r\n newGeo = newGeo.toNonIndexed();\r\n } else if (geometry instanceof THREE.BufferGeometry) {\r\n newGeo = geometry.index ? geometry.toNonIndexed() : (new THREE.BufferGeometry()).copy(geometry);\r\n }\r\n else\r\n return;\r\n\r\n if (!newGeo.attributes)\r\n return;\r\n\r\n if (!attributes['position']) {\r\n\r\n attributes['position'] = { array: [], itemSize: 3, type: 'Float32Array' };\r\n\r\n if (newGeo.attributes['normal'])\r\n attributes['normal'] = { array: [], itemSize: 3, type: 'Float32Array' };\r\n if (newGeo.attributes['color'] || color)\r\n attributes['color'] = { array: [], itemSize: 3, type: 'Float32Array' };\r\n if (newGeo.attributes['uv'])\r\n attributes['uv'] = { array: [], itemSize: 2, type: 'Float32Array' };\r\n\r\n }\r\n\r\n if (!color)\r\n color = new THREE.Color(0, 0, 0);\r\n\r\n if (attributes['normal'] && !newGeo.attributes['normal'])\r\n newGeo.computeVertexNormals();\r\n\r\n var newAttributes = newGeo.attributes;\r\n\r\n var newPositionAttribute = newAttributes['position'] as any;\r\n var newPositionArray = newPositionAttribute.array as number[];\r\n var newPosItemSize = newPositionAttribute.itemSize;\r\n var pointCount = newPositionArray.length / newPosItemSize;\r\n\r\n var tvec = new THREE.Vector3();\r\n\r\n for (var k = 0, m = newPositionArray.length; k < m; k += newPosItemSize) {\r\n var x = newPositionArray[k],\r\n y = newPositionArray[k + 1],\r\n z = newPositionArray[k + 2];\r\n\r\n tvec.set(x, y, z).applyMatrix4(transform);\r\n newPositionArray[k] = tvec.x;\r\n newPositionArray[k + 1] = tvec.y;\r\n newPositionArray[k + 2] = tvec.z;\r\n }\r\n\r\n if (newAttributes['normal'] && attributes['normal']) {\r\n\r\n var normalTransform = (new THREE.Matrix3()).getNormalMatrix(transform);\r\n\r\n var newNormalAttribute = newAttributes['normal'] as any;\r\n var newNormalArray = newNormalAttribute.array as number[];\r\n var newNormalItemSize = newNormalAttribute.itemSize;\r\n\r\n for (var k = 0, m = newNormalArray.length; k < m; k += newNormalItemSize) {\r\n var x = newNormalArray[k],\r\n y = newNormalArray[k + 1],\r\n z = newNormalArray[k + 2];\r\n\r\n tvec.set(x, y, z).applyMatrix3(normalTransform);\r\n\r\n newNormalArray[k] = tvec.x;\r\n newNormalArray[k + 1] = tvec.y;\r\n newNormalArray[k + 2] = tvec.z;\r\n }\r\n }\r\n\r\n for (var name in attributes) {\r\n\r\n var attribute = attributes[name];\r\n var newAttribute = newAttributes[name] as any;\r\n\r\n var array = attribute.array as number[];\r\n\r\n var itemSize = attribute.itemSize;\r\n\r\n if (!newAttribute) {\r\n switch (name) {\r\n case 'color':\r\n for (var i = 0; i < pointCount; i++) {\r\n array.push(color.r, color.g, color.b);\r\n }\r\n break;\r\n case 'uv':\r\n for (var i = 0; i < pointCount; i++) {\r\n array.push(0, 0);\r\n }\r\n break;\r\n default:\r\n for (var i = 0; i < pointCount; i++) {\r\n for (var j = 0; j < itemSize; j++) {\r\n array.push(0);\r\n }\r\n }\r\n break;\r\n }\r\n } else {\r\n var newArray = newAttribute.array as number[];\r\n\r\n for (var i = 0, l = newArray.length; i < l; i++) {\r\n array.push(newArray[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n getBufferGeometryFromBBlockGeometry(bBlockGeometry: any) {\r\n var stopwatch = new Stopwatch().start();\r\n var resGeometry = new THREE.Geometry();\r\n\r\n var index = 0;\r\n if (bBlockGeometry.verticeDataCompressed)\r\n bBlockGeometry.verticeData = JSON.parse(LZString.decompressFromEncodedURIComponent(bBlockGeometry.verticeDataCompressed));\r\n if (!bBlockGeometry.verticeData || !bBlockGeometry.verticeData.length)\r\n return new THREE.BufferGeometry();\r\n for (var i = 0, l = bBlockGeometry.verticeData.length; i < l; i++) {\r\n var poly = bBlockGeometry.verticeData[i];\r\n\r\n var verts2D: THREE.Vector2[] = [];\r\n var j: number, k: number, m: number, n: number, l2: number;\r\n\r\n for (j = 0, l2 = poly.length - 2; j < l2; j += 2) {\r\n var vx = poly[j];\r\n var vy = poly[j + 1];\r\n\r\n verts2D.push(new THREE.Vector2(vx, vy));\r\n }\r\n\r\n var vertsLength = verts2D.length;\r\n\r\n if (!vertsLength)\r\n continue;\r\n\r\n var h = poly[poly.length - 2];\r\n var zOffset = poly[poly.length - 1];\r\n\r\n for (k = 0, l2 = vertsLength; k < l2; k++) {\r\n var v = verts2D[k];\r\n resGeometry.vertices.push(new THREE.Vector3(v.x, v.y, h + zOffset));\r\n }\r\n\r\n for (k = 0, l2 = vertsLength; k < l2; k++) {\r\n var v = verts2D[k];\r\n resGeometry.vertices.push(new THREE.Vector3(v.x, v.y, zOffset));\r\n }\r\n\r\n var vIndizes = THREE.ShapeUtils.triangulateShape(verts2D, []);\r\n //var vIndizes = THREE.ShapeUtils.triangulate(verts2D, true) as number[][];\r\n\r\n for (m = 0, l2 = vIndizes.length; m < l2; m++) {\r\n var ind = vIndizes[m];\r\n resGeometry.faces.push(new THREE.Face3(ind[0] + index, ind[1] + index, ind[2] + index, new THREE.Vector3(0, 0, 1)));\r\n }\r\n\r\n for (n = 0, l2 = vertsLength; n < l2; n++) {\r\n var n2 = n + 1;\r\n if (n2 == l2)\r\n n2 = 0;\r\n\r\n var v1 = verts2D[n];\r\n var v2 = verts2D[n2];\r\n\r\n var d = (new THREE.Vector3(v2.x, v2.y, 0)).sub(new THREE.Vector3(v1.x, v1.y, 0));\r\n var dLengthSq = d.lengthSq();\r\n if (dLengthSq <= 0)\r\n continue;\r\n var dn = (new THREE.Vector3(d.y, -d.x, d.z)).divideScalar(Math.sqrt(dLengthSq));\r\n\r\n resGeometry.faces.push(new THREE.Face3(n + vertsLength + index, n2 + vertsLength + index, n2 + index, dn));\r\n resGeometry.faces.push(new THREE.Face3(n + vertsLength + index, n2 + index, n + index, dn.clone()));\r\n }\r\n\r\n index += vertsLength * 2;\r\n }\r\n\r\n if (bBlockGeometry.initializerMatrix)\r\n resGeometry.applyMatrix4(this.convertThreeJsObject(bBlockGeometry.initializerMatrix) as THREE.Matrix4);\r\n\r\n var bufferGeometry = (new THREE.BufferGeometry()).fromGeometry(resGeometry);\r\n\r\n stopwatch.log(\"BBlockgeometry generated\");\r\n\r\n return bufferGeometry;\r\n }\r\n }\r\n}"]}