{"version":3,"file":"kendo.pdf.min.js","names":["factory","define","amd","$","kendo","pdf","supportsDeflate","window","pako","deflate","data","keyStr","supportBrowser","support","browser","drawing","util","extendStatic","kendoPdf","kendoGeometry","geometry","HAS_TYPED_ARRAYS","Uint8Array","msie","version","BASE64","decode","str","input","replace","i","n","length","output","enc1","indexOf","charAt","enc2","enc3","enc4","chr1","chr2","chr3","push","encode","bytes","BinaryStream","offset","ensure","len","tmp","Math","max","set","get","buffer","write","writeString","writeByte","slice","start","x","readByte","b","readShort","writeShort","w","readLong","writeLong","readLong_","writeLong_","read","times","charCodeAt","reader","ret","Array","stream","eof","readFixed","writeFixed","f","round","readShort_","writeShort_","readFixed_","writeFixed_","readString","String","fromCharCode","apply","pos","skip","nbytes","toString","Error","saveExcursion","writeBase64","base64","atob","base64ToUint8Array","result","idx","atobUint8Array","createUint8Array","hasOwnProperty$1","obj","key","Object","prototype","hasOwnProperty","call","sortedKeys","keys","sort","a","map","parseFloat","Directory","this","raw","scalerType","tableCount","searchRange","entrySelector","rangeShift","tables","entry","tag","checksum","readTable","name","Ctor","def","table","render","maxpow2","pow","floor","log","LN2","out","directoryLength","headOffset","tableData","adjustment","sum","Table","file","definition","rawData","parse","NameEntry","POSTSCRIPT_GLYPHS","CmapEntry","HeadTable","arguments","create","constructor","fn","init","revision","checkSumAdjustment","magicNumber","flags","unitsPerEm","created","modified","xMin","yMin","xMax","yMax","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","LocaTable","format","head","offsets","offsetOf","id","lengthOf","needsLongFormat","HheaTable","ascent","descent","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numOfLongHorMetrics","ids","MaxpTable","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","glyphIds","HmtxTable","dir","hhea","metrics","advance","lsb","lsbCount","maxp","leftSideBearings","forGlyph","m","GlyfTable","SimpleGlyph","prototypeAccessors","compound","defineProperties","CompoundGlyph","idOffsets","prototypeAccessors$1","old2new","anonymous","cache","glyphFor","loca","numberOfContours","glyph","glyphs","oldIds","NameTable","text","platformID","platformSpecificID","languageID","nameID","count","stringOffset","nameRecords","strings","rec","postscriptEntry","postscriptName","psName","strCount","strTable","list","j","PostTable","split","numberOfGlyphs","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","limit","code","index","mapping","indexes","post","CmapTable","codeMap","self","language","segCount","endCode","startCode","idDelta","idRangeOffset","end","glyphId","ngroups","endCharCode","glyphCode","console","error","ncid2ogid","ogid2ngid","codes","startCodes","endCodes","last","diff","new_gid","charcode","delta","segCountX2","deltas","rangeOffsets","startGlyph","forEach","renderCharmap","OS2Table","averageCharWidth","weightClass","widthClass","type","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","familyClass","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","winAscent","winDescent","codePageRange","xHeight","capHeight","defaultChar","breakChar","maxContext","subsetTag","Subfont","font","subset","unicodes","ngid2ogid","next","firstChar","nextGid","nextSubsetTag","use","ch","string","value","extra","counter","ucs2decode","reduce","old_gid","cmap","encodeText","glyphsFor","glyf","this$1$1","parseInt","old_gid_ids","lastChar","hmtx","os2","directory","cidToGidMap","cid","TTFFont","contents","numFonts","scale","widthOfGlyph","makeSubset","encodeUnit","codeUnit","NL","RESOURCE_COUNTER","PAPER_SIZE","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","c10","executive","folio","legal","letter","tabloid","makeOutput","indentLevel","arguments$1","undefined","PDFValue","beforeRender","isArray","renderArray","isDate","renderDate","isNaN","num","toFixed","test","PDFDictionary","writeData","withIndent","indent","pad","getPaperOptions","getOption","options","paperSize","toLowerCase","unitsToPoints","min","margin","left","top","right","bottom","FONT_CACHE","Helvetica","Courier","Symbol","ZapfDingbats","IMAGE_CACHE","clearImageCache","loadOne","loadFonts","url","cont","exec","substr","req","XMLHttpRequest","open","responseType","onload","status","response","VBArray","responseBody","toArray","onerror","send","loadBinary","urls","callback","loadImages","images","extend","jpegQuality","keepPNG","size","bloburl","blob","img","Image","crossOrigin","xhr","mozilla","FileReader","svg","DOMParser","parseFromString","documentElement","getAttribute","_load","URL","createObjectURL","setAttribute","width","height","xml","XMLSerializer","serializeToString","encodeBase64","readAsText","_onerror","src","complete","_onload","_trycanvas","canvas","document","createElement","imgdata","ctx","getContext","drawImage","getImageData","ex","revokeObjectURL","hasAlpha","rgb","alpha","rawbytes","PDFRawImage","toDataURL","PDFJpegImage","substring","upscale","readAsArrayBuffer","loadImage","PDFDocument","objcount","objects","defval","attach","renderValue","renderFull","_offset","wrapObject","pages","FONTS","IMAGES","GRAD_COL_FUNCTIONS","GRAD_OPC_FUNCTIONS","GRAD_COL","GRAD_OPC","catalog","PDFCatalog","pageTree","PDFPageTree","nameTree","JavaScript","Names","PDFString","S","_","JS","props","setPages","info","Producer","Title","Author","Subject","Keywords","Creator","CreationDate","Date","addPage","paperOptions","contentWidth","contentHeight","content","PDFStream","Contents","Parent","MediaBox","page","PDFPage","_content","transform","translate","rect","clip","xrefOffset","zeropad","Size","Root","Info","getFont","PDFStandardFont","PDFFont","getImage","asStream","getOpacityGS","opacity","forStroke","_opacityGSCache","gs","Type","CA","ca","_resourceName","dict","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","mm2pt","mm","cm2pt","cm","in2pt","inch","in","utf16be","Boolean","txt","c","trail","encodeUTF16BE","PDFHexString","PDFName","escape","PDFName_cache","empty","compress","Filter","unshift","Length","pagesObj","Pages","Kids","Count","pageObj","SOF_CODES","colorSpace","bitsPerComponent","marker","Subtype","Width","Height","BitsPerComponent","ColorSpace","Decode","mask","SMask","BaseFont","Encoding","_pdf","_font","_sub","bbox","stemV","isSerif","isScript","getTextWidth","fontSize","sub","fontStream","Length1","descriptor","FontName","FontBBox","Flags","StemV","ItalicAngle","Ascent","Descent","CapHeight","XHeight","FontFile2","charWidths","loop","chunk","gid","descendant","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","FirstChar","LastChar","DW","W","CIDToGIDMap","_makeCidToGidMap","DescendantFonts","unimap","PDFToUnicodeCmap","unimapStream","ToUnicode","unicode","join","makeHash","cacheColorGradientFunction","r1","g1","r2","g2","hash","func","FunctionType","Domain","Range","N","C0","C1","cacheOpacityGradientFunction","cacheGradient","gradient","box","isRadial","funcs","stops","prev","cur","prevColor","curColor","opacities","colors","color","r","g","pop","assemble","Functions","Bounds","Encode","makeGradientFunctions","coords","y","shading","concat","ShadingType","Coords","Function","Extend","cacheColorGradient","userSpace","AIS","G","FormType","BBox","Group","CS","I","Resources","ExtGState","Shading","s0","cacheOpacityGradient","_rcount","_textMode","_fontResources","_gsResources","_xResources","_patResources","_shResources","_opacity","_matrix","_annotations","_fontSize","_contextStack","ProcSet","Font","XObject","Pattern","Annots","_out","d","e","isIdentityMatrix","mmul","dx","dy","sx","sy","rotate","angle","cos","sin","beginText","endText","_requireTextMode","_requireFont","setFont","setTextLeading","setTextRenderingMode","mode","showText","requestedWidth","showTextNL","addLink","uri","ll","_toPage","ur","Rect","Border","A","URI","setStrokeColor","setOpacity","setFillOpacity","setStrokeOpacity","setFillColor","gradient$1","save","oname","sname","restore","setDashPattern","dashArray","dashPhase","setLineWidth","setLineCap","lineCap","setLineJoin","lineJoin","setMitterLimit","mitterLimit","_context","moveTo","lineTo","bezier","x1","y1","x2","y2","x3","y3","bezier1","bezier2","close","h","ellipse","rx","ry","_X","v","_Y","k","circle","stroke","nop","clipStroke","closeStroke","fill","fillStroke","comment","line","val","matrix","p","unquote","parseFontDef","fontdef","fontFamily","italic","variant","bold","lineHeight","getFontURL","style","mkFamily","FONT_MAPPINGS","serif","monospace","zapfdingbats","fontAlias","alias","d1","e1","f1","d2","TEXT_RENDERING_MODE","fillAndStroke","invisible","fillAndClip","strokeAndClip","fillStrokeClip","TEXT_RENDERING_MODE$1","DASH_PATTERNS","dash","dashDot","dot","longDash","longDashDot","longDashDotDot","solid","LINE_CAP","butt","square","LINE_JOIN","miter","bevel","render$1","group","fonts","multiPage","imgDPI","doIt","producer","title","author","subject","keywords","creator","autoPrint","children","drawPage","root","changed","clipbox","Matrix","unit","currentBox","opt","change","newShape","visible","shape","shouldDraw","optArray","el","withClipping","saveclipbox","savematrix","multiplyCopy","intersect","inClipbox","rawBBox","MultiPath","union","dispatch","Path","segments","paths","Circle","Arc","Text","_pdfLink","optimize","addMargin","getSize","origin","getOrigin","append","drawElement","landscape","traverse","element","ceil","toBlob","Blob","handlers","handler","nodeType","_pdfDebug","parseColor$1","dashType","setStrokeOptions","Gradient","setFillOptions","_drawPath","setClipping","drawPath","drawMultiPath","drawCircle","drawArc","drawText","drawImage$1","drawGroup","drawRect","thing","maybeGradient","RadialGradient","center","radius","elements","stop","tl","topLeft","maybeFillStroke","path","closed","controlIn","anchor","maybeDrawRect","seg","prevOut","controlOut","points","curvePoints","_position","_pdfRect","sz","ref","cornerRadius","fromRect","parseColor","toRGB","deepExtend","Document","defineFont","exportPDF","promise","createPromise","_ignoreMargin","resolve","exportPDFToBlob","safari","saveAs","filename","proxy","dataURI","fileName","dataURL","proxyURL","jQuery","PDFMixin","proto","events","saveAsPDF","_drawPDF","_drawPDFShadow","allPages","progress","Deferred","args","trigger","then","done","forceProxy","proxyTarget","fail","err","reject","drawDOM","wrapper","pageNumber","totalPages","notify","settings","drawOptions","shadow","css","overflow","before","clone","defer","setTimeout","always","remove"],"sources":["kendo.pdf.js"],"mappings":"CAAA,SAAWA,GACW,mBAAXC,QAAyBA,OAAOC,IAAMD,OAAO,CAAC,iBAAkB,oBAAqB,mBAAoBD,GAChHA,IAFJ,EAGG,WA04IC,IAAWG,EAv4IPC,MAAMC,IAAMD,MAAMC,KAAO,GAEzBD,MAAMC,IAAIC,gBAAkB,WACxB,OAAOC,OAAOC,MAAsC,mBAAvBD,OAAOC,KAAKC,SAG7CL,MAAMC,IAAII,QAAU,SAASC,GACzB,OAAOH,OAAOC,KAAKC,QAAQC,IAYnC,SAAUP,GAGVI,OAAOH,MAAMC,IAAME,OAAOH,MAAMC,KAAO,GACvC,IAkBQM,EAjBJC,EADUR,MAAMS,QACSC,QACzBC,EAAUX,MAAMW,QAChBC,EAAOD,EAAQC,KACfC,EAAeD,EAAKC,aACpBC,EAAWd,MAAMC,IACjBc,EAAgBf,MAAMgB,SAStBC,EAAyC,oBAAfC,YAA8BlB,MAAMS,QAAQC,WAAaV,MAAMS,QAAQC,QAAQS,MAAQnB,MAAMS,QAAQC,QAAQU,QAAU,GAEjJC,GACId,EAAS,oEACN,CACHe,OAAQ,SAASC,GAGb,IAFA,IAAIC,EAAQD,EAAIE,QAAQ,sBAAuB,IAAKC,EAAI,EAAGC,EAAIH,EAAMI,OAAQC,EAAS,GAE/EH,EAAIC,GAAG,CACV,IAAIG,EAAOvB,EAAOwB,QAAQP,EAAMQ,OAAON,MACnCO,EAAO1B,EAAOwB,QAAQP,EAAMQ,OAAON,MACnCQ,EAAO3B,EAAOwB,QAAQP,EAAMQ,OAAON,MACnCS,EAAO5B,EAAOwB,QAAQP,EAAMQ,OAAON,MAEnCU,EAAQN,GAAQ,EAAMG,IAAS,EAC/BI,GAAgB,GAAPJ,IAAc,EAAMC,IAAS,EACtCI,GAAgB,EAAPJ,IAAa,EAAKC,EAE/BN,EAAOU,KAAKH,GACA,IAARF,GACAL,EAAOU,KAAKF,GAEJ,IAARF,GACAN,EAAOU,KAAKD,GAIpB,OAAOT,GAEXW,OAAQ,SAASC,GAIb,IAHA,IAAIf,EAAI,EAAGC,EAAIc,EAAMb,OACjBC,EAAS,GAENH,EAAIC,GAAG,CACV,IAAIS,EAAOK,EAAMf,KACbW,EAAOI,EAAMf,KACbY,EAAOG,EAAMf,KAGbO,GAAgB,EAAPG,IAAa,EAAMC,IAAS,EACrCH,GAAgB,GAAPG,IAAc,EAAMC,IAAS,EACtCH,EAAc,GAAPG,EAEPZ,EAAIC,GAAK,EACTO,EAAOC,EAAO,GACPT,EAAIC,GAAK,IAChBQ,EAAO,IAGXN,GAAUtB,EAAOyB,OAXNI,IAAS,GAWY7B,EAAOyB,OAAOC,GAAQ1B,EAAOyB,OAAOE,GAAQ3B,EAAOyB,OAAOG,GAE9F,OAAON,KAKnB,SAASa,EAAapC,GAClB,IAAIqC,EAAS,EAAGf,EAAS,EACb,MAARtB,EACAA,EAAOW,EAAmB,IAAIC,WAAW,KAAO,GAEhDU,EAAStB,EAAKsB,OAGlB,IAAIgB,EAAS3B,EAAmB,SAAS4B,GACrC,GAAIA,GAAOvC,EAAKsB,OAAQ,CACpB,IAAIkB,EAAM,IAAI5B,WAAW6B,KAAKC,IAAIH,EAAM,IAAmB,EAAdvC,EAAKsB,SAClDkB,EAAIG,IAAI3C,EAAM,GACdA,EAAOwC,IAEX,aAEAI,EAAMjC,EAAmB,WACzB,OAAO,IAAIC,WAAWZ,EAAK6C,OAAQ,EAAGvB,IACtC,WACA,OAAOtB,GAGP8C,EAAQnC,EAAmB,SAASwB,GACpC,GAAoB,iBAATA,EACP,OAAOY,EAAYZ,GAEvB,IAAII,EAAMJ,EAAMb,OAChBgB,EAAOD,EAASE,GAChBvC,EAAK2C,IAAIR,EAAOE,IAChBA,GAAUE,GACGjB,IACTA,EAASe,IAEb,SAASF,GACT,GAAoB,iBAATA,EACP,OAAOY,EAAYZ,GAEvB,IAAK,IAAIf,EAAI,EAAGA,EAAIe,EAAMb,SAAUF,EAChC4B,EAAUb,EAAMf,KAIpB6B,EAAQtC,EAAmB,SAASuC,EAAO5B,GAC3C,GAAItB,EAAK6C,OAAOI,MACZ,OAAO,IAAIrC,WAAWZ,EAAK6C,OAAOI,MAAMC,EAAOA,EAAQ5B,IAGvD,IAAI6B,EAAI,IAAIvC,WAAWU,GAEvB,OADA6B,EAAER,IAAI,IAAI/B,WAAWZ,EAAK6C,OAAQK,EAAO5B,IAClC6B,GAEX,SAASD,EAAO5B,GAChB,OAAOtB,EAAKiD,MAAMC,EAAOA,EAAQ5B,IAMrC,SAAS8B,IACL,OAAOf,EAASf,EAAStB,EAAKqC,KAAY,EAE9C,SAASW,EAAUK,GACff,EAAOD,GACPrC,EAAKqC,KAAgB,IAAJgB,EACbhB,EAASf,IACTA,EAASe,GAGjB,SAASiB,IACL,OAAQF,KAAc,EAAKA,IAE/B,SAASG,EAAWC,GAChBR,EAAUQ,GAAK,GACfR,EAAUQ,GASd,SAASC,IACL,OAAsB,MAAdH,IAAyBA,IAErC,SAASI,EAAUF,GACfD,EAAYC,IAAM,GAAM,OACxBD,EAAe,MAAJC,GAEf,SAASG,IACL,IAAIH,EAAIC,IACR,OAAOD,GAAK,WAAaA,EAAI,WAAcA,EAE/C,SAASI,EAAWJ,GAChBE,EAAUF,EAAI,EAAIA,EAAI,WAAcA,GAcxC,SAASK,EAAKtB,GACV,OAAOuB,EAAMvB,EAAKa,GAKtB,SAASL,EAAY9B,GACjB,IAAK,IAAIG,EAAI,EAAGA,EAAIH,EAAIK,SAAUF,EAC9B4B,EAAU/B,EAAI8C,WAAW3C,IAGjC,SAAS0C,EAAMzC,EAAG2C,GACd,IAAK,IAAIC,EAAM,IAAIC,MAAM7C,GAAID,EAAI,EAAGA,EAAIC,IAAKD,EACzC6C,EAAI7C,GAAK4C,IAEb,OAAOC,EAGX,IAAIE,EAAS,CACTC,IAxEJ,WACI,OAAO/B,GAAUf,GAwEjB8B,SAAcA,EACdJ,UAAcA,EACdM,UAAcA,EACdC,WAAcA,EACdE,SAAcA,EACdC,UAAcA,EACdW,UAtCJ,WACI,OAAOZ,IAAa,OAsCpBa,WApCJ,SAAoBC,GAChBb,EAAUjB,KAAK+B,MAAU,MAAJD,KAsCrBE,WA/DJ,WACI,IAAIjB,EAAIF,IACR,OAAOE,GAAK,MAASA,EAAI,MAAUA,GA8DnCkB,YA5DJ,SAAqBlB,GACjBD,EAAWC,EAAI,EAAIA,EAAI,MAAUA,IA4DjCG,UAAcA,EACdC,WAAcA,EACde,WAxCJ,WACI,OAAOhB,IAAc,OAwCrBiB,YAtCJ,SAAqBL,GACjBX,EAAWnB,KAAK+B,MAAU,MAAJD,KAuCtBV,KAAcA,EACdf,MAAcA,EACd+B,WApCJ,SAAoBtC,GAChB,OAAOuC,OAAOC,aAAaC,MAAMF,OAAQjB,EAAKtB,KAoC9CQ,YAAcA,EAEde,MAAcA,EACdlB,IAAcA,EACdK,MAAcA,EAEdZ,OAAQ,SAAS4C,GACb,OAAW,MAAPA,GACA5C,EAAS4C,EACFd,GAEJ9B,GAGX6C,KAAM,SAASC,GACX9C,GAAU8C,GAGdC,SAAU,WACN,MAAM,IAAIC,MAAM,kEAGpB/D,OAAQ,WAAa,OAAOA,GAE5BgE,cAAe,SAASf,GACpB,IAAIU,EAAM5C,EACV,IACI,OAAOkC,IACT,QACElC,EAAS4C,IAIjBM,YAAa,SAASC,GACd3F,OAAO4F,KACP1C,EAAYlD,OAAO4F,KAAKD,IAExB1C,EAAM/B,EAAOC,OAAOwE,KAG5BA,OAAQ,WACJ,OAAOzE,EAAOmB,OAAOU,OAI7B,OAAOuB,EA+DX,SAASuB,EAAmBF,GACxB,OAAI3F,OAAO4F,KAtBf,SAAwBD,GAIpB,IAHA,IAAIxF,EAAOH,OAAO4F,KAAKD,GACnBG,EAAS,IAAI/E,WAAWZ,EAAKsB,QAExBsE,EAAM,EAAGA,EAAM5F,EAAKsB,OAAQsE,IACjCD,EAAOC,GAAO5F,EAAK+D,WAAW6B,GAGlC,OAAOD,EAeIE,CAAeL,GAZ9B,SAA0BxF,GAGtB,IAFA,IAAI2F,EAAS,IAAI/E,WAAWZ,EAAKsB,QAExBsE,EAAM,EAAGA,EAAM5F,EAAKsB,OAAQsE,IACjCD,EAAOC,GAAO5F,EAAK4F,GAGvB,OAAOD,EAQAG,CAAiB/E,EAAOC,OAAOwE,IAkB1C,SAASO,EAAiBC,EAAKC,GAC3B,OAAOC,OAAOC,UAAUC,eAAeC,KAAKL,EAAKC,GAGrD,SAASK,EAAWN,GAChB,OAAOE,OAAOK,KAAKP,GAAKQ,MAAK,SAASC,EAAGpD,GAAI,OAAOoD,EAAIpD,KAAMqD,IAAIC,YAItE,IAAIC,EAAY,SAAmB5G,GAC/B6G,KAAKC,IAAM9G,EACX6G,KAAKE,WAAa/G,EAAKyD,WACvBoD,KAAKG,WAAahH,EAAKsD,YACvBuD,KAAKI,YAAcjH,EAAKsD,YACxBuD,KAAKK,cAAgBlH,EAAKsD,YAC1BuD,KAAKM,WAAanH,EAAKsD,YAGvB,IADA,IAAI8D,EAASP,KAAKO,OAAS,GAClBhG,EAAI,EAAGA,EAAIyF,KAAKG,aAAc5F,EAAG,CACtC,IAAIiG,EAAQ,CACRC,IAAOtH,EAAK6E,WAAW,GACvB0C,SAAWvH,EAAKyD,WAChBpB,OAAWrC,EAAKyD,WAChBnC,OAAWtB,EAAKyD,YAEpB2D,EAAOC,EAAMC,KAAOD,IAI5BT,EAAUT,UAAUqB,UAAY,SAAoBC,EAAMC,GACtD,IAAIC,EAAMd,KAAKO,OAAOK,GACtB,IAAKE,EACD,MAAM,IAAItC,MAAM,SAAWoC,EAAO,2BAEtC,OAAQZ,KAAKY,GAAQE,EAAIC,MAAQ,IAAIF,EAAKb,KAAMc,IAGpDf,EAAUT,UAAU0B,OAAS,SAAiBT,GACtC,IAEAJ,EAAad,OAAOK,KAAKa,GAAQ9F,OAEjCwG,EAAUrF,KAAKsF,IAAI,EAAGtF,KAAKuF,MAAMvF,KAAKwF,IAAIjB,GAAcvE,KAAKyF,MAC7DjB,EAAwB,GAAVa,EACdZ,EAAgBzE,KAAKuF,MAAMvF,KAAKwF,IAAIH,GAAWrF,KAAKyF,KACpDf,EAA0B,GAAbH,EAAkBC,EAE/BkB,EAAM/F,IACV+F,EAAIzE,UAAUmD,KAAKE,YACnBoB,EAAI5E,WAAWyD,GACfmB,EAAI5E,WAAW0D,GACfkB,EAAI5E,WAAW2D,GACfiB,EAAI5E,WAAW4D,GAEf,IAAIiB,EAA+B,GAAbpB,EAClB3E,EAAS8F,EAAI9F,SAAW+F,EACxBC,EAAa,KACbC,EAAYlG,IAEhB,IAAK,IAAIkF,KAAOF,EACZ,GAAIrB,EAAiBqB,EAAQE,GAAM,CAC/B,IAAIM,EAAQR,EAAOE,GAanB,IAXAa,EAAIpF,YAAYuE,GAChBa,EAAIzE,UA1BOmD,KA0BYU,SAASK,IAChCO,EAAIzE,UAAUrB,GACd8F,EAAIzE,UAAUkE,EAAMtG,QAEpBgH,EAAUxF,MAAM8E,GACL,QAAPN,IACAe,EAAahG,GAEjBA,GAAUuF,EAAMtG,OAETe,EAAS,GACZiG,EAAUtF,UAAU,GACpBX,IAKZ8F,EAAIrF,MAAMwF,EAAU1F,OACpB,IACI2F,EAAa,WADP1B,KAAKU,SAASY,EAAIvF,OAK5B,OAFAuF,EAAI9F,OAAOgG,EAAa,GACxBF,EAAIzE,UAAU6E,GACPJ,EAAIvF,OAGfgE,EAAUT,UAAUoB,SAAW,SAAmBvH,GAC9CA,EAAOoC,EAAapC,GAEpB,IADA,IAAIwI,EAAM,GACFxI,EAAKoE,OACToE,GAAOxI,EAAKyD,WAEhB,OAAa,WAAN+E,GAGX,IAAIC,EAAQ,SAAeC,EAAMf,GAC7Bd,KAAK8B,WAAahB,EAClBd,KAAKvF,OAASqG,EAAIrG,OAClBuF,KAAKxE,OAASsF,EAAItF,OAClBwE,KAAK6B,KAAOA,EACZ7B,KAAK+B,QAAUF,EAAK5B,IACpBD,KAAKgC,MAAMH,EAAK5B,MAGpB2B,EAAMtC,UAAUW,IAAM,WAClB,OAAOD,KAAK+B,QAAQ3F,MAAM4D,KAAKxE,OAAQwE,KAAKvF,SAGhDmH,EAAMtC,UAAU0C,MAAQ,aAExB,IA+ZQC,EA+FAC,EA4HAC,EA1nBJC,EAAa,SAAUR,GACvB,SAASQ,IACLR,EAAMzD,MAAM6B,KAAMqC,WAsDtB,OAnDA3I,EAAa0I,EAAWR,GACxBQ,EAAU9C,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD8C,EAAU9C,UAAUiD,YAAcH,EAClCA,EAAUI,GAAKJ,EAAU9C,UACzB8C,EAAUI,GAAGC,KAAOL,EAAUI,GAAGD,YAEjCH,EAAU9C,UAAU0C,MAAQ,SAAgB7I,GACxCA,EAAKqC,OAAOwE,KAAKxE,QACjBwE,KAAK/F,QAAsBd,EAAKyD,WAChCoD,KAAK0C,SAAsBvJ,EAAKyD,WAChCoD,KAAK2C,mBAAsBxJ,EAAKyD,WAChCoD,KAAK4C,YAAsBzJ,EAAKyD,WAChCoD,KAAK6C,MAAsB1J,EAAKsD,YAChCuD,KAAK8C,WAAsB3J,EAAKsD,YAChCuD,KAAK+C,QAAsB5J,EAAK6D,KAAK,GACrCgD,KAAKgD,SAAsB7J,EAAK6D,KAAK,GAErCgD,KAAKiD,KAAO9J,EAAKyE,aACjBoC,KAAKkD,KAAO/J,EAAKyE,aACjBoC,KAAKmD,KAAOhK,EAAKyE,aACjBoC,KAAKoD,KAAOjK,EAAKyE,aAEjBoC,KAAKqD,SAAqBlK,EAAKsD,YAC/BuD,KAAKsD,cAAqBnK,EAAKsD,YAC/BuD,KAAKuD,kBAAqBpK,EAAKyE,aAC/BoC,KAAKwD,iBAAqBrK,EAAKyE,aAC/BoC,KAAKyD,gBAAqBtK,EAAKyE,cAGnCwE,EAAU9C,UAAU0B,OAAS,SAAiBwC,GAC1C,IAAIlC,EAAM/F,IAkBV,OAjBA+F,EAAIzE,UAAUmD,KAAK/F,SACnBqH,EAAIzE,UAAUmD,KAAK0C,UACnBpB,EAAIzE,UAAU,GACdyE,EAAIzE,UAAUmD,KAAK4C,aACnBtB,EAAI5E,WAAWsD,KAAK6C,OACpBvB,EAAI5E,WAAWsD,KAAK8C,YACpBxB,EAAIrF,MAAM+D,KAAK+C,SACfzB,EAAIrF,MAAM+D,KAAKgD,UACf1B,EAAIzD,YAAYmC,KAAKiD,MACrB3B,EAAIzD,YAAYmC,KAAKkD,MACrB5B,EAAIzD,YAAYmC,KAAKmD,MACrB7B,EAAIzD,YAAYmC,KAAKoD,MACrB9B,EAAI5E,WAAWsD,KAAKqD,UACpB/B,EAAI5E,WAAWsD,KAAKsD,eACpBhC,EAAIzD,YAAYmC,KAAKuD,mBACrBjC,EAAIzD,YAAY2F,GAChBlC,EAAIzD,YAAYmC,KAAKyD,iBACdnC,EAAIvF,OAGRqG,EAxDK,CAyDdR,GAEE8B,EAAa,SAAU9B,GACvB,SAAS8B,IACL9B,EAAMzD,MAAM6B,KAAMqC,WA6CtB,OA1CA3I,EAAagK,EAAW9B,GACxB8B,EAAUpE,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpDoE,EAAUpE,UAAUiD,YAAcmB,EAClCA,EAAUlB,GAAKkB,EAAUpE,UACzBoE,EAAUlB,GAAGC,KAAOiB,EAAUlB,GAAGD,YAEjCmB,EAAUpE,UAAU0C,MAAQ,SAAgB7I,GACxCA,EAAKqC,OAAOwE,KAAKxE,QACjB,IAAImI,EAAS3D,KAAK6B,KAAK+B,KAAKJ,iBAExBxD,KAAK6D,QADM,IAAXF,EACexK,EAAK8D,MAAM+C,KAAKvF,OAAS,GAAG,WACvC,OAAO,EAAItB,EAAKsD,eAGLtD,EAAK8D,MAAM+C,KAAKvF,OAAS,EAAGtB,EAAKyD,WAIxD8G,EAAUpE,UAAUwE,SAAW,SAAmBC,GAC9C,OAAO/D,KAAK6D,QAAQE,IAGxBL,EAAUpE,UAAU0E,SAAW,SAAmBD,GAC9C,OAAO/D,KAAK6D,QAAQE,EAAK,GAAK/D,KAAK6D,QAAQE,IAG/CL,EAAUpE,UAAU0B,OAAS,SAAiB6C,GAG1C,IAFA,IAAIvC,EAAM/F,IACN0I,EAAkBJ,EAAQA,EAAQpJ,OAAS,GAAK,MAC3CF,EAAI,EAAGA,EAAIsJ,EAAQpJ,SAAUF,EAC9B0J,EACA3C,EAAIzE,UAAUgH,EAAQtJ,IAEtB+G,EAAI5E,WAAWmH,EAAQtJ,GAAK,GAGpC,MAAO,CACHoJ,OAAQM,EAAkB,EAAI,EAC9BlD,MAAOO,EAAIvF,QAIZ2H,EA/CK,CAgDd9B,GAEEsC,EAAa,SAAUtC,GACvB,SAASsC,IACLtC,EAAMzD,MAAM6B,KAAMqC,WAmDtB,OAhDA3I,EAAawK,EAAWtC,GACxBsC,EAAU5E,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD4E,EAAU5E,UAAUiD,YAAc2B,EAClCA,EAAU1B,GAAK0B,EAAU5E,UACzB4E,EAAU1B,GAAGC,KAAOyB,EAAU1B,GAAGD,YAEjC2B,EAAU5E,UAAU0C,MAAQ,SAAgB7I,GACxCA,EAAKqC,OAAOwE,KAAKxE,QAEjBwE,KAAK/F,QAAuBd,EAAKyD,WACjCoD,KAAKmE,OAAuBhL,EAAKyE,aACjCoC,KAAKoE,QAAuBjL,EAAKyE,aACjCoC,KAAKqE,QAAuBlL,EAAKyE,aACjCoC,KAAKsE,gBAAuBnL,EAAKsD,YACjCuD,KAAKuE,mBAAuBpL,EAAKyE,aACjCoC,KAAKwE,oBAAuBrL,EAAKyE,aACjCoC,KAAKyE,WAAuBtL,EAAKyE,aACjCoC,KAAK0E,eAAuBvL,EAAKyE,aACjCoC,KAAK2E,cAAuBxL,EAAKyE,aACjCoC,KAAK4E,YAAuBzL,EAAKyE,aAEjCzE,EAAKkF,KAAK,GAEV2B,KAAK6E,iBAAuB1L,EAAKyE,aACjCoC,KAAK8E,oBAAuB3L,EAAKsD,aAGrCyH,EAAU5E,UAAU0B,OAAS,SAAiB+D,GAC1C,IAAIzD,EAAM/F,IAiBV,OAhBA+F,EAAIzE,UAAUmD,KAAK/F,SACnBqH,EAAIzD,YAAYmC,KAAKmE,QACrB7C,EAAIzD,YAAYmC,KAAKoE,SACrB9C,EAAIzD,YAAYmC,KAAKqE,SACrB/C,EAAI5E,WAAWsD,KAAKsE,iBACpBhD,EAAIzD,YAAYmC,KAAKuE,oBACrBjD,EAAIzD,YAAYmC,KAAKwE,qBACrBlD,EAAIzD,YAAYmC,KAAKyE,YACrBnD,EAAIzD,YAAYmC,KAAK0E,gBACrBpD,EAAIzD,YAAYmC,KAAK2E,eACrBrD,EAAIzD,YAAYmC,KAAK4E,aAErBtD,EAAIrF,MAAM,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAEjCqF,EAAIzD,YAAYmC,KAAK6E,kBACrBvD,EAAI5E,WAAWqI,EAAItK,QACZ6G,EAAIvF,OAGRmI,EArDK,CAsDdtC,GAEEoD,EAAa,SAAUpD,GACvB,SAASoD,IACLpD,EAAMzD,MAAM6B,KAAMqC,WAgDtB,OA7CA3I,EAAasL,EAAWpD,GACxBoD,EAAU1F,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD0F,EAAU1F,UAAUiD,YAAcyC,EAClCA,EAAUxC,GAAKwC,EAAU1F,UACzB0F,EAAUxC,GAAGC,KAAOuC,EAAUxC,GAAGD,YAEjCyC,EAAU1F,UAAU0C,MAAQ,SAAgB7I,GACxCA,EAAKqC,OAAOwE,KAAKxE,QACjBwE,KAAK/F,QAAUd,EAAKyD,WACpBoD,KAAKiF,UAAY9L,EAAKsD,YACtBuD,KAAKkF,UAAY/L,EAAKsD,YACtBuD,KAAKmF,YAAchM,EAAKsD,YACxBuD,KAAKoF,mBAAqBjM,EAAKsD,YAC/BuD,KAAKqF,qBAAuBlM,EAAKsD,YACjCuD,KAAKsF,SAAWnM,EAAKsD,YACrBuD,KAAKuF,kBAAoBpM,EAAKsD,YAC9BuD,KAAKwF,WAAarM,EAAKsD,YACvBuD,KAAKyF,gBAAkBtM,EAAKsD,YAC5BuD,KAAK0F,mBAAqBvM,EAAKsD,YAC/BuD,KAAK2F,iBAAmBxM,EAAKsD,YAC7BuD,KAAK4F,sBAAwBzM,EAAKsD,YAClCuD,KAAK6F,qBAAuB1M,EAAKsD,YACjCuD,KAAK8F,kBAAoB3M,EAAKsD,aAGlCuI,EAAU1F,UAAU0B,OAAS,SAAiB+E,GAC1C,IAAIzE,EAAM/F,IAgBV,OAfA+F,EAAIzE,UAAUmD,KAAK/F,SACnBqH,EAAI5E,WAAWqJ,EAAStL,QACxB6G,EAAI5E,WAAWsD,KAAKkF,WACpB5D,EAAI5E,WAAWsD,KAAKmF,aACpB7D,EAAI5E,WAAWsD,KAAKoF,oBACpB9D,EAAI5E,WAAWsD,KAAKqF,sBACpB/D,EAAI5E,WAAWsD,KAAKsF,UACpBhE,EAAI5E,WAAWsD,KAAKuF,mBACpBjE,EAAI5E,WAAWsD,KAAKwF,YACpBlE,EAAI5E,WAAWsD,KAAKyF,iBACpBnE,EAAI5E,WAAWsD,KAAK0F,oBACpBpE,EAAI5E,WAAWsD,KAAK2F,kBACpBrE,EAAI5E,WAAWsD,KAAK4F,uBACpBtE,EAAI5E,WAAWsD,KAAK6F,sBACpBvE,EAAI5E,WAAWsD,KAAK8F,mBACbxE,EAAIvF,OAGRiJ,EAlDK,CAmDdpD,GAEEoE,EAAa,SAAUpE,GACvB,SAASoE,IACLpE,EAAMzD,MAAM6B,KAAMqC,WA8CtB,OA3CA3I,EAAasM,EAAWpE,GACxBoE,EAAU1G,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD0G,EAAU1G,UAAUiD,YAAcyD,EAClCA,EAAUxD,GAAKwD,EAAU1G,UACzB0G,EAAUxD,GAAGC,KAAOuD,EAAUxD,GAAGD,YAEjCyD,EAAU1G,UAAU0C,MAAQ,SAAgB7I,GACxCA,EAAKqC,OAAOwE,KAAKxE,QACjB,IAAIyK,EAAMjG,KAAK6B,KAAMqE,EAAOD,EAAIC,KAChClG,KAAKmG,QAAUhN,EAAK8D,MAAMiJ,EAAKpB,qBAAqB,WAChD,MAAO,CACHsB,QAASjN,EAAKsD,YACd4J,IAAKlN,EAAKyE,iBAGlB,IAAI0I,EAAWL,EAAIM,KAAKtB,UAAYgB,EAAIC,KAAKpB,oBAC7C9E,KAAKwG,iBAAmBrN,EAAK8D,MAAMqJ,EAAUnN,EAAKyE,aAGtDoI,EAAU1G,UAAUmH,SAAW,SAAmB1C,GAC9C,IAAIoC,EAAUnG,KAAKmG,QACf3L,EAAI2L,EAAQ1L,OAChB,OAAIsJ,EAAKvJ,EACE2L,EAAQpC,GAEZ,CACHqC,QAASD,EAAQ3L,EAAI,GAAG4L,QACxBC,IAAKrG,KAAKwG,iBAAiBzC,EAAKvJ,KAIxCwL,EAAU1G,UAAU0B,OAAS,SAAiB+E,GAI1C,IAHA,IAEIzE,EAAM/F,IACDhB,EAAI,EAAGA,EAAIwL,EAAStL,SAAUF,EAAG,CACtC,IAAImM,EAJO1G,KAIMyG,SAASV,EAASxL,IACnC+G,EAAI5E,WAAWgK,EAAEN,SACjB9E,EAAIzD,YAAY6I,EAAEL,KAEtB,OAAO/E,EAAIvF,OAGRiK,EAhDK,CAiDdpE,GAEE+E,EAAa,WACb,IAAIC,EAAc,SAAqB3G,GACnCD,KAAKC,IAAMA,GAGX4G,EAAqB,CAAEC,SAAU,IAErCD,EAAmBC,SAAS/K,IAAM,WAC9B,OAAO,GAGX6K,EAAYtH,UAAU0B,OAAS,WAC3B,OAAOhB,KAAKC,IAAIlE,OAGpBsD,OAAO0H,iBAAkBH,EAAYtH,UAAWuH,GAEhD,IAOIG,EAAgB,SAAuB7N,GACvC6G,KAAKC,IAAM9G,EAGX,IAFA,IAAI4L,EAAM/E,KAAK+F,SAAW,GACtBlC,EAAU7D,KAAKiH,UAAY,KAClB,CACT,IAAIpE,EAAQ1J,EAAKsD,YAIjB,GAHAoH,EAAQzI,KAAKjC,EAAKqC,UAClBuJ,EAAI3J,KAAKjC,EAAKsD,eAZU,GAclBoG,GACF,MAGJ1J,EAAKkF,KApBmB,EAoBdwE,EAAgC,EAAI,GAhBtB,IAkBpBA,EACA1J,EAAKkF,KAAK,GApBU,GAqBbwE,EACP1J,EAAKkF,KAAK,GAxBU,EAyBbwE,GACP1J,EAAKkF,KAAK,KAKlB6I,EAAuB,CAAEJ,SAAU,IAoBvC,OAlBAI,EAAqBJ,SAAS/K,IAAM,WAChC,OAAO,GAGXiL,EAAc1H,UAAU0B,OAAS,SAAiBmG,GAI9C,IAHI,IAEA7F,EAAM/F,EAAayE,KAAKC,IAAIlE,OACvBxB,EAAI,EAAGA,EAAIyF,KAAK+F,SAAStL,SAAUF,EAAG,CAC3C,IAAIwJ,EAJW/D,KAIG+F,SAASxL,GAC3B+G,EAAI9F,OALWwE,KAKKiH,UAAU1M,IAC9B+G,EAAI5E,WAAWyK,EAAQpD,IAE3B,OAAOzC,EAAIvF,OAGfsD,OAAO0H,iBAAkBC,EAAc1H,UAAW4H,GAE1C,SAAUtF,GACd,SAASwF,IACLxF,EAAMzD,MAAM6B,KAAMqC,WAsEtB,OAnEA3I,EAAa0N,EAAWxF,GACxBwF,EAAU9H,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD8H,EAAU9H,UAAUiD,YAAc6E,EAClCA,EAAU5E,GAAK4E,EAAU9H,UACzB8H,EAAU5E,GAAGC,KAAO2E,EAAU5E,GAAGD,YAEjC6E,EAAU9H,UAAU0C,MAAQ,WACxBhC,KAAKqH,MAAQ,IAGjBD,EAAU9H,UAAUgI,SAAW,SAAmBvD,GAC9C,IAAIsD,EAAQrH,KAAKqH,MACjB,GAAInI,EAAiBmI,EAAOtD,GACxB,OAAOsD,EAAMtD,GAGjB,IAAIwD,EAAOvH,KAAK6B,KAAK0F,KACjB9M,EAAS8M,EAAKvD,SAASD,GAE3B,GAAe,IAAXtJ,EACA,OAAQ4M,EAAMtD,GAAM,KAGxB,IAAI5K,EAAO6G,KAAK+B,QACZvG,EAASwE,KAAKxE,OAAS+L,EAAKzD,SAASC,GACrC9D,EAAM1E,EAAapC,EAAKiD,MAAMZ,EAAQf,IAEtC+M,EAAmBvH,EAAIrC,aACvBqF,EAAOhD,EAAIrC,aACXsF,EAAOjD,EAAIrC,aACXuF,EAAOlD,EAAIrC,aACXwF,EAAOnD,EAAIrC,aAEX6J,EAAQJ,EAAMtD,GAAMyD,EAAmB,EAAI,IAAIR,EAAc/G,GAAO,IAAI2G,EAAY3G,GAQxF,OANAwH,EAAMD,iBAAmBA,EACzBC,EAAMxE,KAAOA,EACbwE,EAAMvE,KAAOA,EACbuE,EAAMtE,KAAOA,EACbsE,EAAMrE,KAAOA,EAENqE,GAGXL,EAAU9H,UAAU0B,OAAS,SAAiB0G,EAAQC,EAAQR,GAE1D,IADA,IAAI7F,EAAM/F,IAAgBsI,EAAU,GAC3BtJ,EAAI,EAAGA,EAAIoN,EAAOlN,SAAUF,EAAG,CACpC,IACIkN,EAAQC,EADHC,EAAOpN,IAEZ+G,EAAI9F,SAAW,GACf8F,EAAInF,UAAU,GAElB0H,EAAQzI,KAAKkG,EAAI9F,UACbiM,GACAnG,EAAIrF,MAAMwL,EAAMzG,OAAOmG,IAO/B,OAJI7F,EAAI9F,SAAW,GACf8F,EAAInF,UAAU,GAElB0H,EAAQzI,KAAKkG,EAAI9F,UACV,CACHuF,MAAOO,EAAIvF,MACX8H,QAASA,IAIVuD,EAxEJ,CAyELxF,GA9IU,GAiJZgG,GACI3F,EAAY,SAAmB4F,EAAMrH,GACrCR,KAAK6H,KAAOA,EACZ7H,KAAKvF,OAASoN,EAAKpN,OACnBuF,KAAK8H,WAAatH,EAAMsH,WACxB9H,KAAK+H,mBAAqBvH,EAAMuH,mBAChC/H,KAAKgI,WAAaxH,EAAMwH,WACxBhI,KAAKiI,OAASzH,EAAMyH,QAGhB,SAAUrG,GACd,SAASwF,IACLxF,EAAMzD,MAAM6B,KAAMqC,WA+EtB,OA5EA3I,EAAa0N,EAAWxF,GACxBwF,EAAU9H,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD8H,EAAU9H,UAAUiD,YAAc6E,EAClCA,EAAU5E,GAAK4E,EAAU9H,UACzB8H,EAAU5E,GAAGC,KAAO2E,EAAU5E,GAAGD,YAEjC6E,EAAU9H,UAAU0C,MAAQ,SAAgB7I,GACxCA,EAAKqC,OAAOwE,KAAKxE,QACjBrC,EAAKsD,YAcL,IAbA,IAAIyL,EAAQ/O,EAAKsD,YACb0L,EAAenI,KAAKxE,OAASrC,EAAKsD,YAClC2L,EAAcjP,EAAK8D,MAAMiL,GAAO,WAChC,MAAO,CACHJ,WAAqB3O,EAAKsD,YAC1BsL,mBAAqB5O,EAAKsD,YAC1BuL,WAAqB7O,EAAKsD,YAC1BwL,OAAqB9O,EAAKsD,YAC1BhC,OAAqBtB,EAAKsD,YAC1BjB,OAAqBrC,EAAKsD,YAAc0L,MAG5CE,EAAUrI,KAAKqI,QAAU,GACpB9N,EAAI,EAAGA,EAAI6N,EAAY3N,SAAUF,EAAG,CACzC,IAAI+N,EAAMF,EAAY7N,GACtBpB,EAAKqC,OAAO8M,EAAI9M,QAChB,IAAIqM,EAAO1O,EAAK6E,WAAWsK,EAAI7N,QAC1B4N,EAAQC,EAAIL,UACbI,EAAQC,EAAIL,QAAU,IAE1BI,EAAQC,EAAIL,QAAQ7M,KAAK,IAAI6G,EAAU4F,EAAMS,IAEjDtI,KAAKuI,gBAAkBF,EAAQ,GAAG,GAClCrI,KAAKwI,eAAiBxI,KAAKuI,gBAAgBV,KAAKvN,QAAQ,gBAAiB,KAG7E8M,EAAU9H,UAAU0B,OAAS,SAAiByH,GAC1C,IAEIJ,EAAUrI,KAAKqI,QACfK,EAAW,EACf,IAAK,IAAInO,KAAK8N,EACNnJ,EAAiBmJ,EAAS9N,KAC1BmO,GAAYL,EAAQ9N,GAAGE,QAG/B,IAAI6G,EAAM/F,IACNoN,EAAWpN,IAMf,IAAKhB,KAJL+G,EAAI5E,WAAW,GACf4E,EAAI5E,WAAWgM,GACfpH,EAAI5E,WAAW,EAAI,GAAKgM,GAEdL,EACN,GAAInJ,EAAiBmJ,EAAS9N,GAI1B,IAHA,IAAIqO,EAAY,GAALrO,EAAS,CAChB,IAAI0H,EAAUwG,EAnBXzI,KAmB4BuI,kBAC/BF,EAAQ9N,GACHsO,EAAI,EAAGA,EAAID,EAAKnO,SAAUoO,EAAG,CAClC,IAAIzO,EAAMwO,EAAKC,GACfvH,EAAI5E,WAAWtC,EAAI0N,YACnBxG,EAAI5E,WAAWtC,EAAI2N,oBACnBzG,EAAI5E,WAAWtC,EAAI4N,YACnB1G,EAAI5E,WAAWtC,EAAI6N,QACnB3G,EAAI5E,WAAWtC,EAAIK,QACnB6G,EAAI5E,WAAWiM,EAASnN,UAExBmN,EAASzM,YAAY9B,EAAIyN,MAOrC,OAFAvG,EAAIrF,MAAM0M,EAAS5M,OAEZuF,EAAIvF,OAGRqL,EAjFJ,CAkFLxF,IAGFkH,GACI5G,EAAoB,4zDAA4zD6G,MAAM,QAEl1D,SAAUnH,GACd,SAASwF,IACLxF,EAAMzD,MAAM6B,KAAMqC,WAmHtB,OAhHA3I,EAAa0N,EAAWxF,GACxBwF,EAAU9H,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD8H,EAAU9H,UAAUiD,YAAc6E,EAClCA,EAAU5E,GAAK4E,EAAU9H,UACzB8H,EAAU5E,GAAGC,KAAO2E,EAAU5E,GAAGD,YAEjC6E,EAAU9H,UAAU0C,MAAQ,SAAgB7I,GACxC,IAcI6P,EAEJ,OAdA7P,EAAKqC,OAAOwE,KAAKxE,QAEjBwE,KAAK2D,OAASxK,EAAKyD,WACnBoD,KAAKiJ,YAAc9P,EAAK2E,aACxBkC,KAAKkJ,kBAAoB/P,EAAKyE,aAC9BoC,KAAKmJ,mBAAqBhQ,EAAKyE,aAC/BoC,KAAKoJ,aAAejQ,EAAKyD,WACzBoD,KAAKqJ,aAAelQ,EAAKyD,WACzBoD,KAAKsJ,aAAenQ,EAAKyD,WACzBoD,KAAKuJ,YAAcpQ,EAAKyD,WACxBoD,KAAKwJ,YAAcrQ,EAAKyD,WAIhBoD,KAAK2D,QACX,KAAK,MACL,KAAK,OACH,MAEF,KAAK,OACHqF,EAAiB7P,EAAKsD,YACtBuD,KAAKyJ,eAAiBtQ,EAAK8D,MAAM+L,EAAgB7P,EAAKsD,WACtDuD,KAAK0J,MAAQ,GAEb,IADA,IAAIC,EAAQ3J,KAAKxE,OAASwE,KAAKvF,OACxBtB,EAAKqC,SAAWmO,GA1BZ3J,KA2BE0J,MAAMtO,KAAKjC,EAAK6E,WAAW7E,EAAKoD,aAE7C,MAEF,KAAK,OACHyM,EAAiB7P,EAAKsD,YACtBuD,KAAK6D,QAAU1K,EAAK6D,KAAKgM,GACzB,MAEF,KAAK,OACHhJ,KAAKH,IAAM1G,EAAK8D,MAAM+C,KAAK6B,KAAK0E,KAAKtB,UAAW9L,EAAKsD,aAK7D2K,EAAU9H,UAAUgI,SAAW,SAAmBsC,GAC9C,OAAQ5J,KAAK2D,QACX,KAAK,MACH,OAAOzB,EAAkB0H,IAAS,UAEpC,KAAK,OACH,IAAIC,EAAQ7J,KAAKyJ,eAAeG,GAChC,OAAIC,EAAQ3H,EAAkBzH,OACnByH,EAAkB2H,GAEtB7J,KAAK0J,MAAMG,EAAQ3H,EAAkBzH,SAAW,UAEzD,KAAK,OAEL,KAAK,OACH,MAAO,UAET,KAAK,OACH,OAAOuF,KAAKH,IAAI+J,IAAS,QAIjCxC,EAAU9H,UAAU0B,OAAS,SAAiB8I,GAG1C,GAAmB,QAAf9J,KAAK2D,OACL,OAAO3D,KAAKC,MAIhB,IAAIqB,EAAM/F,EAAayE,KAAK+B,QAAQ3F,MAAM4D,KAAKxE,OAAQ,KACvD8F,EAAIzE,UAAU,QACdyE,EAAI9F,OAAO,IAKX,IAHA,IAAIuO,EAAU,GACV1B,EAAU,GAEL9N,EAAI,EAAGA,EAAIuP,EAAQrP,SAAUF,EAAG,CACrC,IAAIwJ,EAAK+F,EAAQvP,GACbyP,EAhBOhK,KAgBSsH,SAASvD,GACzB8F,EAAQ3H,EAAkBtH,QAAQoP,GAClCH,GAAS,EACTE,EAAQ3O,KAAKyO,IAEbE,EAAQ3O,KAAK8G,EAAkBzH,OAAS4N,EAAQ5N,QAChD4N,EAAQjN,KAAK4O,IAMrB,IAFA1I,EAAI5E,WAAWoN,EAAQrP,QAElBF,EAAI,EAAGA,EAAIwP,EAAQtP,SAAUF,EAC9B+G,EAAI5E,WAAWqN,EAAQxP,IAG3B,IAAKA,EAAI,EAAGA,EAAI8N,EAAQ5N,SAAUF,EAC9B+G,EAAInF,UAAUkM,EAAQ9N,GAAGE,QACzB6G,EAAIpF,YAAYmM,EAAQ9N,IAG5B,OAAO+G,EAAIvF,OAGRqL,EArHJ,CAsHLxF,IAGFqI,GACI9H,EAAY,SAAmBhJ,EAAMqC,EAAQ0O,GAC7C,IAAIC,EAAOnK,KACXmK,EAAKrC,WAAa3O,EAAKsD,YACvB0N,EAAKpC,mBAAqB5O,EAAKsD,YAC/B0N,EAAK3O,OAASA,EAASrC,EAAKyD,WAE5BzD,EAAKsF,eAAc,WACf,IAAImL,EAIJ,OAHAzQ,EAAKqC,OAAO2O,EAAK3O,QACjB2O,EAAKxG,OAASxK,EAAKsD,YAEX0N,EAAKxG,QACb,KAAK,EACDwG,EAAK1P,OAAStB,EAAKsD,YACnB0N,EAAKC,SAAWjR,EAAKsD,YACrB,IAAK,IAAIlC,EAAI,EAAGA,EAAI,MAAOA,EACvB2P,EAAQ3P,GAAKpB,EAAKoD,WAEtB,MAEJ,KAAK,EACD4N,EAAK1P,OAAStB,EAAKsD,YACnB0N,EAAKC,SAAWjR,EAAKsD,YACrB,IAAI4N,EAAWlR,EAAKsD,YAAc,EAElCtD,EAAKkF,KAAK,GACV,IAAIiM,EAAUnR,EAAK8D,MAAMoN,EAAUlR,EAAKsD,WACxCtD,EAAKkF,KAAK,GACV,IAAIkM,EAAYpR,EAAK8D,MAAMoN,EAAUlR,EAAKsD,WACtC+N,EAAUrR,EAAK8D,MAAMoN,EAAUlR,EAAKyE,YACpC6M,EAAgBtR,EAAK8D,MAAMoN,EAAUlR,EAAKsD,WAE1CyL,GAASiC,EAAK1P,OAAS0P,EAAK3O,OAASrC,EAAKqC,UAAY,EACtDuK,EAAW5M,EAAK8D,MAAMiL,EAAO/O,EAAKsD,WAEtC,IAAKlC,EAAI,EAAGA,EAAI8P,IAAY9P,EAAG,CAC3B,IAAI8B,EAAQkO,EAAUhQ,GAAImQ,EAAMJ,EAAQ/P,GACxC,IAAKqP,EAAOvN,EAAOuN,GAAQc,IAAOd,EAAM,CACpC,IAAIe,EACqB,IAArBF,EAAclQ,GACdoQ,EAAUf,EAAOY,EAAQjQ,GAsBT,KADhBoQ,EAAU5E,EADE0E,EAAclQ,GAAK,GAAK8P,EAAW9P,IAAMqP,EAAOvN,KAC/B,KAEzBsO,GAAWH,EAAQjQ,IAG3B2P,EAAQN,GAAkB,MAAVe,GAGxB,MAEJ,KAAK,EACDR,EAAK1P,OAAStB,EAAKsD,YACnB0N,EAAKC,SAAWjR,EAAKsD,YACrBmN,EAAOzQ,EAAKsD,YAEZ,IADA,IAAIhC,EAAStB,EAAKsD,YACXhC,KAAW,GACdyP,EAAQN,KAAUzQ,EAAKsD,YAE3B,MAEJ,KAAK,GACDtD,EAAKsD,YACL0N,EAAK1P,OAAStB,EAAKyD,WACnBuN,EAAKC,SAAWjR,EAAKyD,WAErB,IADA,IAAIgO,EAAUzR,EAAKyD,WACZgO,KAAY,GAAG,CAClBhB,EAAOzQ,EAAKyD,WAGZ,IAFA,IAAIiO,EAAc1R,EAAKyD,WACnBkO,EAAY3R,EAAKyD,WACdgN,GAAQiB,GACXX,EAAQN,KAAUkB,IAG1B,MAEJ,QACQ9R,OAAO+R,SACP/R,OAAO+R,QAAQC,MAAM,0BAA4Bb,EAAKxG,aA2F9D,SAAU/B,GACd,SAASwF,IACLxF,EAAMzD,MAAM6B,KAAMqC,WA6BtB,OA1BA3I,EAAa0N,EAAWxF,GACxBwF,EAAU9H,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACpD8H,EAAU9H,UAAUiD,YAAc6E,EAClCA,EAAU5E,GAAK4E,EAAU9H,UACzB8H,EAAU5E,GAAGC,KAAO2E,EAAU5E,GAAGD,YAEjC6E,EAAU9H,UAAU0C,MAAQ,SAAgB7I,GACxC,IAAIgR,EAAOnK,KACPxE,EAAS2O,EAAK3O,OAClBrC,EAAKqC,OAAOA,GACZ2O,EAAKD,QAAU,GACfC,EAAKlQ,QAAUd,EAAKsD,YACpB,IAAI0D,EAAahH,EAAKsD,YACtB0N,EAAK5J,OAASpH,EAAK8D,MAAMkD,GAAY,WACjC,OAAO,IAAIgC,EAAUhJ,EAAMqC,EAAQ2O,EAAKD,aAIhD9C,EAAUpG,OAAS,SAAiBiK,EAAWC,GAC3C,IAAI5J,EAAM/F,IAIV,OAHA+F,EAAI5E,WAAW,GACf4E,EAAI5E,WAAW,GACf4E,EAAIrF,MAhHZ,SAAuBgP,EAAWC,GAC9B,IAAIC,EAAQ1L,EAAWwL,GACnBG,EAAa,GACbC,EAAW,GACXC,EAAO,KACPC,EAAO,KAEX,SAASC,EAAQC,GACb,OAAOP,EAAUD,EAAUQ,IAG/B,IAAK,IAAIlR,EAAI,EAAGA,EAAI4Q,EAAM1Q,SAAUF,EAAG,CACnC,IAAIqP,EAAOuB,EAAM5Q,GAEbmR,EADMF,EAAQ5B,GACAA,EACN,MAAR0B,GAAgBI,IAAUH,IACtBD,GACAD,EAASjQ,KAAKkQ,GAElBF,EAAWhQ,KAAKwO,GAChB2B,EAAOG,GAEXJ,EAAO1B,EAGP0B,GACAD,EAASjQ,KAAKkQ,GAElBD,EAASjQ,KAAK,OACdgQ,EAAWhQ,KAAK,OAEhB,IAAIiP,EAAWe,EAAW3Q,OACtBkR,EAAwB,EAAXtB,EACbjK,EAAc,EAAIxE,KAAKsF,IAAI,EAAGtF,KAAKuF,MAAMvF,KAAKwF,IAAIiJ,GAAYzO,KAAKyF,MACnEhB,EAAgBzE,KAAKwF,IAAIhB,EAAc,GAAKxE,KAAKyF,IACjDf,EAAaqL,EAAavL,EAE1BwL,EAAS,GACTC,EAAe,GACf9F,EAAW,GAEf,IAAKxL,EAAI,EAAGA,EAAI8P,IAAY9P,EAAG,CAC3B,IAAIgQ,EAAYa,EAAW7Q,GACvB+P,EAAUe,EAAS9Q,GACvB,GAAiB,OAAbgQ,EAAqB,CACrBqB,EAAOxQ,KAAK,GACZyQ,EAAazQ,KAAK,GAClB,MAEJ,IAAI0Q,EAAaN,EAAQjB,GACzB,GAAIA,EAAYuB,GAAc,MAAQ,CAClCF,EAAOxQ,KAAK,GACZyQ,EAAazQ,KAAK,GAAK2K,EAAStL,OAAS4P,EAAW9P,IACpD,IAAK,IAAIsO,EAAI0B,EAAW1B,GAAKyB,IAAWzB,EACpC9C,EAAS3K,KAAKoQ,EAAQ3C,SAG1B+C,EAAOxQ,KAAK0Q,EAAavB,GACzBsB,EAAazQ,KAAK,GAI1B,IAAIkG,EAAM/F,IAoBV,OAlBA+F,EAAI5E,WAAW,GACf4E,EAAI5E,WAAW,GACf4E,EAAIzE,UAAU,IACdyE,EAAI5E,WAAW,GACf4E,EAAI5E,WAAW,GAAgB,EAAX2N,EAAiC,EAAlBtE,EAAStL,QAC5C6G,EAAI5E,WAAW,GACf4E,EAAI5E,WAAWiP,GACfrK,EAAI5E,WAAW0D,GACfkB,EAAI5E,WAAW2D,GACfiB,EAAI5E,WAAW4D,GAEf+K,EAASU,QAAQzK,EAAI5E,YACrB4E,EAAI5E,WAAW,GACf0O,EAAWW,QAAQzK,EAAI5E,YACvBkP,EAAOG,QAAQzK,EAAIzD,aACnBgO,EAAaE,QAAQzK,EAAI5E,YACzBqJ,EAASgG,QAAQzK,EAAI5E,YAEd4E,EAAIvF,MA8BGiQ,CAAcf,EAAWC,IAC5B5J,EAAIvF,OAGRqL,EA/BJ,CAgCLxF,IAIFqK,EAAY,SAAUrK,GACtB,SAASqK,IACLrK,EAAMzD,MAAM6B,KAAMqC,WA0DtB,OAvDA3I,EAAauS,EAAUrK,GACvBqK,EAAS3M,UAAYD,OAAOiD,OAAQV,GAASA,EAAMtC,WACnD2M,EAAS3M,UAAUiD,YAAc0J,EACjCA,EAASzJ,GAAKyJ,EAAS3M,UACvB2M,EAASzJ,GAAGC,KAAOwJ,EAASzJ,GAAGD,YAE/B0J,EAAS3M,UAAU0C,MAAQ,SAAgB7I,GACvCA,EAAKqC,OAAOwE,KAAKxE,QACjBwE,KAAK/F,QAAUd,EAAKsD,YACpBuD,KAAKkM,iBAAmB/S,EAAKyE,aAC7BoC,KAAKmM,YAAchT,EAAKsD,YACxBuD,KAAKoM,WAAajT,EAAKsD,YACvBuD,KAAKqM,KAAOlT,EAAKsD,YACjBuD,KAAKsM,gBAAkBnT,EAAKyE,aAC5BoC,KAAKuM,gBAAkBpT,EAAKyE,aAC5BoC,KAAKwM,kBAAoBrT,EAAKyE,aAC9BoC,KAAKyM,kBAAoBtT,EAAKyE,aAC9BoC,KAAK0M,kBAAoBvT,EAAKyE,aAC9BoC,KAAK2M,kBAAoBxT,EAAKyE,aAC9BoC,KAAK4M,oBAAsBzT,EAAKyE,aAChCoC,KAAK6M,oBAAsB1T,EAAKyE,aAChCoC,KAAK8M,eAAiB3T,EAAKyE,aAC3BoC,KAAK+M,mBAAqB5T,EAAKyE,aAC/BoC,KAAKgN,YAAc7T,EAAKyE,aAExBoC,KAAKiN,OAAS9T,EAAK8D,MAAM,GAAI9D,EAAKoD,UAClCyD,KAAKkN,UAAY/T,EAAK8D,MAAM,EAAG9D,EAAKyD,UAEpCoD,KAAKmN,SAAWhU,EAAK6E,WAAW,GAChCgC,KAAKoN,UAAYjU,EAAKsD,YACtBuD,KAAKqN,eAAiBlU,EAAKsD,YAC3BuD,KAAKsN,cAAgBnU,EAAKsD,YAEtBuD,KAAK/F,QAAU,IACf+F,KAAKmE,OAAShL,EAAKyE,aACnBoC,KAAKoE,QAAUjL,EAAKyE,aACpBoC,KAAKqE,QAAUlL,EAAKyE,aACpBoC,KAAKuN,UAAYpU,EAAKsD,YACtBuD,KAAKwN,WAAarU,EAAKsD,YACvBuD,KAAKyN,cAAgBtU,EAAK8D,MAAM,EAAG9D,EAAKyD,UAEpCoD,KAAK/F,QAAU,IACf+F,KAAK0N,QAAUvU,EAAKsD,YACpBuD,KAAK2N,UAAYxU,EAAKsD,YACtBuD,KAAK4N,YAAczU,EAAKsD,YACxBuD,KAAK6N,UAAY1U,EAAKsD,YACtBuD,KAAK8N,WAAa3U,EAAKsD,eAKnCwP,EAAS3M,UAAU0B,OAAS,WACxB,OAAOhB,KAAKC,OAGTgM,EA5DI,CA6DbrK,GAEEmM,EAAY,IAWhB,IAAIC,EAAU,SAAiBC,GAC3BjO,KAAKiO,KAAOA,EACZjO,KAAKkO,OAAS,GACdlO,KAAKmO,SAAW,GAChBnO,KAAKkL,UAAY,CAAE,EAAG,GACtBlL,KAAKoO,UAAY,CAAE,EAAG,GACtBpO,KAAKiL,UAAY,GACjBjL,KAAKqO,KAAOrO,KAAKsO,UAAY,EAC7BtO,KAAKuO,QAAU,EACfvO,KAAKyI,OAlBT,WAEI,IADA,IAAIrL,EAAM,GAAI5C,EAAIyD,OAAO8P,GAChBxT,EAAI,EAAGA,EAAIC,EAAEC,SAAUF,EAC5B6C,GAAOa,OAAOC,aAAa1D,EAAE0C,WAAW3C,GAAK,GAAK,IAGtD,QADEwT,EACK3Q,EAYOoR,GAAkB,IAAMxO,KAAKiO,KAAKxF,QAGpDuF,EAAQ1O,UAAUmP,IAAM,SAAcC,GAClC,IAAIvE,EAAOnK,KACX,GAAiB,iBAAN0O,EACP,OAznCR,SAAoBC,GAMhB,IALA,IAGIC,EACAC,EAJAnU,EAAS,GACToU,EAAU,EACVrU,EAASkU,EAAOlU,OAGbqU,EAAUrU,IACbmU,EAAQD,EAAOzR,WAAW4R,OACb,OAAUF,GAAS,OAAUE,EAAUrU,EAGxB,QAAX,OADboU,EAAQF,EAAOzR,WAAW4R,OAEtBpU,EAAOU,OAAe,KAARwT,IAAkB,KAAe,KAARC,GAAiB,QAIxDnU,EAAOU,KAAKwT,GACZE,KAGJpU,EAAOU,KAAKwT,GAGpB,OAAOlU,EAkmCIqU,CAAWL,GAAIM,QAAO,SAAS5R,EAAKwM,GACvC,OAAOxM,EAAMa,OAAOC,aAAaiM,EAAKsE,IAAI7E,MAC3C,IAEP,IAAIA,EAAOO,EAAKgE,SAASO,GACzB,IAAK9E,EAAM,CACPA,EAAOO,EAAKkE,OACZlE,EAAK+D,OAAOtE,GAAQ8E,EACpBvE,EAAKgE,SAASO,GAAM9E,EAIpB,IAAIqF,EAAU9E,EAAK8D,KAAKiB,KAAKhF,QAAQwE,GACrC,GAAIO,IACA9E,EAAKc,UAAUrB,GAAQqF,EACQ,MAA3B9E,EAAKe,UAAU+D,IAAkB,CACjC,IAAIzD,EAAUrB,EAAKoE,UACnBpE,EAAKe,UAAU+D,GAAWzD,EAC1BrB,EAAKiE,UAAU5C,GAAWyD,GAItC,OAAOrF,GAGXoE,EAAQ1O,UAAU6P,WAAa,SAAqBtH,GAChD,OAAO7H,KAAKyO,IAAI5G,IAGpBmG,EAAQ1O,UAAUyG,SAAW,WACzB,OAAOtG,EAAWO,KAAKkL,YAG3B8C,EAAQ1O,UAAU8P,UAAY,SAAoBrJ,EAAUjH,GAGnDA,IACDA,EAAS,IAEb,IAAK,IAAIvE,EAAI,EAAGA,EAAIwL,EAAStL,SAAUF,EAAG,CACtC,IAAIwJ,EAAKgC,EAASxL,GAClB,IAAKuE,EAAOiF,GAAK,CACb,IAAI0D,EAAQ3I,EAAOiF,GARR/D,KAQuBiO,KAAKoB,KAAK/H,SAASvD,GACjD0D,GAASA,EAAMX,UATR9G,KAUEoP,UAAU3H,EAAM1B,SAAUjH,IAI/C,OAAOA,GAGXkP,EAAQ1O,UAAU0B,OAAS,WACnB,IAAIsO,EAAWtP,KAEf0H,EAAS1H,KAAKoP,UAAUpP,KAAK+F,YAGjC,IAAK,IAAIkJ,KAAWvH,EAChB,GAAIxI,EAAiBwI,EAAQuH,KACzBA,EAAUM,SAASN,EAAS,IACO,MAA/BK,EAASpE,UAAU+D,IAAkB,CACrC,IAAIzD,EAAU8D,EAASf,UACvBe,EAASpE,UAAU+D,GAAWzD,EAC9B8D,EAASlB,UAAU5C,GAAWyD,EAO1C,IACIO,EADc/P,EAAWO,KAAKoO,WACJvO,KAAI,SAASkE,GACvC,OAAO/D,KAAKoO,UAAUrK,KACvB/D,MAECiO,EAAOjO,KAAKiO,KACZoB,EAAOpB,EAAKoB,KAAKrO,OAAO0G,EAAQ8H,EAAaxP,KAAKkL,WAClD3D,EAAO0G,EAAK1G,KAAKvG,OAAOqO,EAAKxL,SAEjC7D,KAAKyP,SAAWzP,KAAKqO,KAAO,EAE5B,IAAI9N,EAAS,CACT2O,KAASjF,EAAUjJ,OAAOhB,KAAKiL,UAAWjL,KAAKkL,WAC/CmE,KAASA,EAAKtO,MACdwG,KAASA,EAAKxG,MACd2O,KAASzB,EAAKyB,KAAK1O,OAAOwO,GAC1BtJ,KAAS+H,EAAK/H,KAAKlF,OAAOwO,GAC1BjJ,KAAS0H,EAAK1H,KAAKvF,OAAOwO,GAC1BxF,KAASiE,EAAKjE,KAAKhJ,OAAOwO,GAC1B5O,KAASqN,EAAKrN,KAAKI,OAAOhB,KAAKyI,QAC/B7E,KAASqK,EAAKrK,KAAK5C,OAAOuG,EAAK5D,QAC/B,OAASsK,EAAK0B,IAAI3O,UAGtB,OAAOhB,KAAKiO,KAAK2B,UAAU5O,OAAOT,IAGtCyN,EAAQ1O,UAAUuQ,YAAc,WAI5B,IAHI,IAEAvO,EAAM/F,IAAgBG,EAAM,EACvBoU,EAAM9P,KAAKsO,UAAWwB,EAAM9P,KAAKqO,OAAQyB,EAAK,CACnD,KAAOpU,EAAMoU,GACTxO,EAAI5E,WAAW,GACfhB,IAEJ,IAAIuT,EARWjP,KAQQiL,UAAU6E,GACjC,GAAIb,EAAS,CACT,IAAIzD,EAVOxL,KAUYkL,UAAU+D,GACjC3N,EAAI5E,WAAW8O,QAEflK,EAAI5E,WAAW,GAEnBhB,IAEJ,OAAO4F,EAAIvF,OAGf,IAAIgU,EAAU,SAAiBhO,EAASnB,GACpC,IAAIuJ,EAAOnK,KACP7G,EAAOgR,EAAK6F,SAAWzU,EAAawG,GACxC,GAA0B,QAAtB5I,EAAK6E,WAAW,GAAc,CAC9B,IAAIxC,EACAwG,EAAQ,WACR7I,EAAKqC,OAAOA,GACZ2O,EAAKnI,SAET,IAAKpB,EACD,MAAM,IAAIpC,MAAM,qCAEpBrF,EAAKyD,WAEL,IADA,IAAIqT,EAAW9W,EAAKyD,WACXrC,EAAI,EAAGA,EAAI0V,IAAY1V,EAG5B,GAFAiB,EAASrC,EAAKyD,WACdzD,EAAKsF,cAAcuD,GACfmI,EAAK1B,QAAU7H,EACf,OAGR,MAAM,IAAIpC,MAAM,QAAUoC,EAAO,4BAEjCzH,EAAKqC,OAAO,GACZ2O,EAAKnI,SAIb+N,EAAQzQ,UAAU0C,MAAQ,WACtB,IAAIiE,EAAMjG,KAAK4P,UAAY,IAAI7P,EAAUC,KAAKgQ,UAE9ChQ,KAAK4D,KAAOqC,EAAItF,UAAU,OAAQyB,GAClCpC,KAAKuH,KAAOtB,EAAItF,UAAU,OAAQ+C,GAClC1D,KAAKkG,KAAOD,EAAItF,UAAU,OAAQuD,GAClClE,KAAKuG,KAAON,EAAItF,UAAU,OAAQqE,GAClChF,KAAK0P,KAAOzJ,EAAItF,UAAU,OAAQqF,GAClChG,KAAKqP,KAAOpJ,EAAItF,UAAU,OAAQgG,GAClC3G,KAAKY,KAAOqF,EAAItF,UAAU,OAAQiH,GAClC5H,KAAKgK,KAAO/D,EAAItF,UAAU,OAAQmI,GAClC9I,KAAKkP,KAAOjJ,EAAItF,UAAU,OAAQsJ,GAClCjK,KAAK2P,IAAO1J,EAAItF,UAAU,OAAQsL,GAElCjM,KAAKyI,OAASzI,KAAKY,KAAK4H,eACxBxI,KAAKmE,OAASnE,KAAK2P,IAAIxL,QAAUnE,KAAKkG,KAAK/B,OAC3CnE,KAAKoE,QAAUpE,KAAK2P,IAAIvL,SAAWpE,KAAKkG,KAAK9B,QAC7CpE,KAAKqE,QAAUrE,KAAK2P,IAAItL,SAAWrE,KAAKkG,KAAK7B,QAC7CrE,KAAKkQ,MAAQ,IAAOlQ,KAAK4D,KAAKd,YAGlCiN,EAAQzQ,UAAU6Q,aAAe,SAAuB1I,GACpD,OAAOzH,KAAK0P,KAAKjJ,SAASgB,GAAOrB,QAAUpG,KAAKkQ,OAGpDH,EAAQzQ,UAAU8Q,WAAa,WAC3B,OAAO,IAAIpC,EAAQhO,OAGvB,IAAI9B,EAAeD,OAAOC,aAM1B,SAASmS,EAAWC,GAChB,OAAOpS,EAAaoS,GAAY,GAAKpS,EAAwB,IAAXoS,GA4BtD,IAAI/W,EAAUV,MAAMS,QAAQC,QACxBgX,EAAK,KAELC,EAAmB,EAEnBC,EAAa,CACbC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,OAAU,SACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,MAAU,QACxBC,GAAY,CAAE,OAAU,OACxBC,IAAY,CAAE,KAAU,QACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,OAAU,SACxBC,GAAY,CAAE,MAAU,QACxBC,GAAY,CAAE,OAAU,OACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,IAAY,CAAE,MAAU,QACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,QAAU,SACxBC,GAAY,CAAE,OAAU,SACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,GAAY,CAAE,OAAU,QACxBC,IAAY,CAAE,MAAU,QACxBC,UAAY,CAAE,OAAU,KACxBC,MAAY,CAAE,IAAU,KACxBC,MAAY,CAAE,IAAU,MACxBC,OAAY,CAAE,IAAU,KACxBC,QAAY,CAAE,IAAU,OAG5B,SAASC,IACL,IAAIC,EAAc,EAAGvY,EAASa,IAC9B,SAAS+F,IAGL,IAFA,IAAI4R,EAAc7Q,UAET9H,EAAI,EAAGA,EAAI8H,UAAU5H,SAAUF,EAAG,CACvC,IAAI+B,EAAI4W,EAAY3Y,GACpB,QAAU4Y,IAAN7W,EACA,MAAM,IAAIkC,MAAM,kCAEf,GAAIlC,aAAa8W,GAClB9W,EAAE+W,aAAa/R,GACfhF,EAAE0E,OAAOM,QAER,GAAIgS,EAAQhX,GACbiX,EAAYjX,EAAGgF,QAEd,GAAIkS,EAAOlX,GACZmX,EAAWnX,EAAGgF,QAEb,GAAgB,iBAALhF,EAAe,CAC3B,GAAIoX,MAAMpX,GACN,MAAM,IAAIkC,MAAM,4BAGpB,IAAImV,EAAMrX,EAAEsX,QAAQ,GAChBD,EAAI/Y,QAAQ,MAAQ,IACpB+Y,EAAMA,EAAIrZ,QAAQ,SAAU,KAErB,MAAPqZ,IACAA,EAAM,KAEVjZ,EAAOwB,YAAYyX,OAEd,iBAAiBE,YAAYvX,GAClC5B,EAAOwB,YAAY+B,OAAO3B,IAEL,mBAATA,EAAEP,IACdrB,EAAOuB,MAAMK,EAAEP,OAEE,iBAALO,IACPA,EAGDgF,EAAI,IAAIwS,GAAcxX,IAFtB5B,EAAOwB,YAAY,UA+BnC,OAxBAoF,EAAIyS,UAAY,SAAS5a,GACrBuB,EAAOuB,MAAM9C,IAEjBmI,EAAI0S,WAAa,SAAStW,KACpBuV,EACFvV,EAAE4D,KACA2R,GAEN3R,EAAI2S,OAAS,WACT3S,EAAIiP,EAAI2D,EAAI,GAAkB,EAAdjB,EAAiB,OACjC3R,EAAInD,MAAM,KAAMkE,YAEpBf,EAAI9F,OAAS,WACT,OAAOd,EAAOc,UAElB8F,EAAI/C,SAAW,WACX,MAAM,IAAIC,MAAM,eAEpB8C,EAAIvF,IAAM,WACN,OAAOrB,EAAOqB,OAElBuF,EAAIhE,OAAS,WACT,OAAO5C,GAEJ4G,EAsBX,SAAS6S,EAAgBC,GACrB,GAAwB,mBAAbA,EAAyB,CAChC,IAAIC,EAAUD,EACdA,EAAY,SAAShV,EAAK0B,GACtB,OAAO1B,KAAOiV,EAAUA,EAAQjV,GAAO0B,GAG/C,IAAIwT,EAAYF,EAAU,YAAa3D,EAAWK,IAClD,IAAKwD,EACD,MAAO,GAEX,GAAwB,iBAAbA,GAEU,OADjBA,EAAY7D,EAAW6D,EAAUC,gBAE7B,MAAM,IAAI/V,MAAM,sBAIxB8V,EAAU,GAAKE,GAAcF,EAAU,IACvCA,EAAU,GAAKE,GAAcF,EAAU,IAEnCF,EAAU,aAAa,KACvBE,EAAY,CACR1Y,KAAKC,IAAIyY,EAAU,GAAIA,EAAU,IACjC1Y,KAAK6Y,IAAIH,EAAU,GAAIA,EAAU,MAIzC,IAAII,EAASN,EAAU,UAkBvB,OAjBIM,IAGIA,EAFiB,iBAAVA,GAAuC,iBAAVA,EAE3B,CAAEC,KADXD,EAASF,GAAcE,EAAQ,GACNE,IAAKF,EAAQG,MAAOH,EAAQI,OAAQJ,GAEpD,CACLC,KAASH,GAAcE,EAAOC,KAAM,GACpCC,IAASJ,GAAcE,EAAOE,IAAK,GACnCC,MAASL,GAAcE,EAAOG,MAAO,GACrCC,OAASN,GAAcE,EAAOI,OAAQ,IAG1CV,EAAU,eACVE,EAAU,IAAMI,EAAOC,KAAOD,EAAOG,MACrCP,EAAU,IAAMI,EAAOE,IAAMF,EAAOI,SAGrC,CAAER,UAAWA,EAAWI,OAAQA,GAG3C,IAAIK,EAAa,CACb,eAA0B,EAC1B,cAA0B,EAC1B,gBAA0B,EAC1B,oBAA0B,EAC1BC,WAA0B,EAC1B,kBAA0B,EAC1B,qBAA0B,EAC1B,yBAA0B,EAC1BC,SAA0B,EAC1B,gBAA0B,EAC1B,mBAA0B,EAC1B,uBAA0B,EAC1BC,QAA0B,EAC1BC,cAA0B,GA0D9B,IAAIC,EAAc,GAElB,SAASC,IACLD,EAAc,GAmMlB,IAjBoBE,EAiBhBC,GAjBgBD,EAtMpB,SAAkBE,EAAKC,GACnB,IAAIxH,EAAO8G,EAAWS,GAClBvH,EACAwH,EAAKxH,GAzCb,SAAoBuH,EAAKC,GAErB,IAAI/O,EACJ,GAAInN,EAAQS,OAAS0M,EAAI,qBAAqBgP,KAAKF,IAC/CC,EAAK5W,EAAmB2W,EAAIG,OAAOjP,EAAE,GAAGjM,cAD5C,CAeA,IAAImb,EAAM,IAAIC,eACdD,EAAIE,KAAK,MAAON,GAAK,GACjB1b,IACA8b,EAAIG,aAAe,eAEvBH,EAAII,OAAS,WACS,KAAdJ,EAAIK,QAA+B,KAAdL,EAAIK,OAErBR,EADA3b,EACK,IAAIC,WAAW6b,EAAIM,UAEnB,IAAIld,OAAOmd,QAAQP,EAAIQ,cAAcC,WAG9CrL,KAGR4K,EAAIU,QAAUtL,EACd4K,EAAIW,KAAK,MA3BT,SAASvL,IACDhS,OAAO+R,UACH/R,OAAO+R,QAAQC,MACfhS,OAAO+R,QAAQC,MAAM,sBAAuBwK,GAE5Cxc,OAAO+R,QAAQ3J,IAAI,sBAAuBoU,IAGlDC,EAAK,OA2BLe,CAAWhB,GAAK,SAASrc,GACrB,GAAY,MAARA,EACA,MAAM,IAAIqF,MAAM,yBAA2BgX,GAE3C,IAAIvH,EAAO,IAAI8B,EAAQ5W,GACvB4b,EAAWS,GAAOvH,EAClBwH,EAAKxH,OA4LV,SAASwI,EAAMC,GAClB,IAAIlc,EAAIic,EAAKhc,OAAQF,EAAIC,EACzB,GAAU,IAANA,EACA,OAAOkc,IAEX,SAASrI,IACO,KAAN7T,GACFkc,IAGR,KAAOnc,KAAM,GACT+a,EAAQmB,EAAKlc,GAAI8T,KAMzBsI,EAAa,SAASC,EAAQF,EAAUrC,GACxCA,EAAUzb,EAAEie,OAAO,CACfC,YAAc,IACdC,SAAc,GACf1C,GACH,IAAIoC,EAAOpX,OAAOK,KAAKkX,GAASpc,EAAIic,EAAKhc,OACzC,GAAU,IAAND,EACA,OAAOkc,IAEX,SAASrI,IACO,KAAN7T,GACFkc,IAGRD,EAAK1K,SAAQ,SAASyJ,IA/M1B,SAAmBA,EAAKwB,EAAMvB,EAAMpB,GAChC,IAA4B4C,EAASC,EAAjCC,EAAM/B,EAAYI,GACtB,GAAI2B,EACA1B,EAAK0B,QAML,GAJAA,EAAM,IAAIC,MACJ,UAAUvD,KAAK2B,KACjB2B,EAAIE,YAAc,aAElBvd,IAAsB,UAAU+Z,KAAK2B,GAAO,CAS5C,IAAI8B,EAAM,IAAIzB,eACdyB,EAAItB,OAAS,WAET,GADAkB,EAAOI,EAAIpB,SACP3c,EAAQge,SAAwB,iBAAbL,EAAK7K,KAAyB,CAEjD,IAAIlP,EAAS,IAAIqa,WACjBra,EAAO6Y,OAAS,WACZ,IACIyB,GADM,IAAIze,OAAO0e,WAAYC,gBAAgB3X,KAAKlB,OAAQ,iBAChD8Y,gBACd,GAAIH,EAAII,aAAa,UAAYJ,EAAII,aAAa,UAG9CC,EADAb,EAAUc,IAAIC,gBAAgBd,QAE3B,CACHO,EAAIQ,aAAa,QAASjB,EAAKkB,OAC/BT,EAAIQ,aAAa,SAAUjB,EAAKmB,QAChC,IAAIC,GAAM,IAAIpf,OAAOqf,eAAgBC,kBAAkBb,GAEvDK,EADc,6BAAgCre,EAAK8e,aAAaH,MAIxEjb,EAAOqb,WAAWtB,QAGlBY,EADAb,EAAUc,IAAIC,gBAAgBd,KAItCI,EAAIhB,QAAUmC,EACdnB,EAAIxB,KAAK,MAAON,GAAK,GACrB8B,EAAIvB,aAAe,OACnBuB,EAAIf,YAEJuB,EAAMtC,GAId,SAASsC,EAAMtC,GACX2B,EAAIuB,IAAMlD,EACN2B,EAAIwB,WAAapf,EAAQS,KAGzB4e,EAAQpZ,KAAK2X,IAEbA,EAAInB,OAAS4C,EACbzB,EAAIb,QAAUmC,GAItB,SAASI,IACA7B,IACDA,EAAO,CAAEkB,MAAOf,EAAIe,MAAOC,OAAQhB,EAAIgB,SAG3C,IAAIW,EAASC,SAASC,cAAc,UACpCF,EAAOZ,MAAQlB,EAAKkB,MACpBY,EAAOX,OAASnB,EAAKmB,OAErB,IAGIc,EAHAC,EAAMJ,EAAOK,WAAW,MAC5BD,EAAIE,UAAUjC,EAAK,EAAG,EAAGH,EAAKkB,MAAOlB,EAAKmB,QAG1C,IACIc,EAAUC,EAAIG,aAAa,EAAG,EAAGrC,EAAKkB,MAAOlB,EAAKmB,QACpD,MAAOmB,GAGL,YADAb,IAEF,QACMxB,GACAc,IAAIwB,gBAAgBtC,GAc5B,IAHA,IAAIuC,GAAW,EAAOC,EAAMle,IAAgBme,EAAQne,IAChDoe,EAAWV,EAAQ9f,KACnBoB,EAAI,EACDA,EAAIof,EAASlf,QAAQ,CACxBgf,EAAItd,UAAUwd,EAASpf,MACvBkf,EAAItd,UAAUwd,EAASpf,MACvBkf,EAAItd,UAAUwd,EAASpf,MACvB,IAAIqF,EAAI+Z,EAASpf,KACbqF,EAAI,MACJ4Z,GAAW,GAEfE,EAAMvd,UAAUyD,GAGpB,GAAI4Z,GAAYnF,EAAQ0C,QACpBI,EAAM,IAAIyC,GAAY5C,EAAKkB,MAAOlB,EAAKmB,OAAQsB,EAAKC,OACjD,CAEH,IAAIvgB,EAAO2f,EAAOe,UAAU,aAAcxF,EAAQyC,aAClD3d,EAAOA,EAAKwc,OAAOxc,EAAKyB,QAAQ,YAAc,GAE9C,IAAI0C,EAAS/B,IACb+B,EAAOoB,YAAYvF,GACnBge,EAAM,IAAI2C,GAAaxc,GAG3BmY,EAAKL,EAAYI,GAAO2B,GAG5B,SAASsB,IACLhD,EAAKL,EAAYI,GAAO,SAG5B,SAASoD,IACL,GAAI5B,EAAM,CACN,IAAIS,EAAOP,GAAsB,kBAAdA,EAAK7K,MACtB,0BAA0BwH,KAAK7T,KAAK0Y,IAAIqB,UAAU,EAAG,KAGnDC,EAAUhD,EAAKkB,OAASf,EAAIe,OAASlB,EAAKmB,QAAUhB,EAAIgB,QAIvDV,GAAOuC,IACRhD,EAAO,MAGf,IAAKA,GAAQE,GAAQ,kBAAkBrD,KAAKqD,EAAK7K,MAAO,CASpD,IAAIlP,EAAS,IAAIqa,WACjBra,EAAO6Y,OAAS,WACZ,IACI,IAAImB,EAAM,IAAI2C,GAAave,EAAa,IAAIxB,WAAWiG,KAAKlB,UAC5DiZ,IAAIwB,gBAAgBtC,GACpBxB,EAAKL,EAAYI,GAAO2B,GAC1B,MAAOmC,GAKLT,MAGR1b,EAAO8c,kBAAkB/C,QAEzB2B,KAsCJqB,CAAU1E,EAAKoB,EAAOpB,GAAMnH,EAAMgG,OAItC8F,EAAc,SAAsB9F,GACpC,IAAIlK,EAAOnK,KACPsB,EAAM0R,IACNoH,EAAW,EACXC,EAAU,GAEd,SAASjG,EAAUxT,EAAM0Z,GACrB,OAAQjG,GAA4B,MAAjBA,EAAQzT,GAAiByT,EAAQzT,GAAQ0Z,EAGhEnQ,EAAKiK,UAAYA,EAEjBjK,EAAKoQ,OAAS,SAAS3L,GAKnB,OAJIyL,EAAQzf,QAAQgU,GAAS,KAnXrC,SAAoBA,EAAO7K,GACvB,IAAIsP,EAAezE,EAAMyE,aACrBmH,EAAc5L,EAAM5N,OAExB4N,EAAMyE,aAAe,aAErBzE,EAAM5N,OAAS,SAASM,GACpBA,EAAIyC,EAAI,SAGZ6K,EAAM6L,WAAa,SAASnZ,GACxBsN,EAAM8L,QAAUpZ,EAAI9F,SACpB8F,EAAIyC,EAAI,WACRsP,EAAa7T,KAAKoP,EAAOtN,GACzBkZ,EAAYhb,KAAKoP,EAAOtN,GACxBA,EAAI,YAqWAqZ,CAAW/L,IAASwL,GACpBC,EAAQjf,KAAKwT,IAEVA,GAGXzE,EAAKyQ,MAAQ,GAEbzQ,EAAK0Q,MAAQ,GACb1Q,EAAK2Q,OAAS,GACd3Q,EAAK4Q,mBAAqB,GAC1B5Q,EAAK6Q,mBAAqB,GAC1B7Q,EAAK8Q,SAAW,GAChB9Q,EAAK+Q,SAAW,GAEhB,IAAIC,EAAUhR,EAAKoQ,OAAO,IAAIa,IAC1BC,EAAWlR,EAAKoQ,OAAO,IAAIe,IAE/B,GAAIlH,EAAU,aAAc,CACxB,IAAImH,EAAW,GACfA,EAASC,WAAa,IAAI1H,GAAc,CAAE2H,MAAO,CAC7C,IAAIC,GAAU,MAAOvR,EAAKoQ,OAAO,IAAIzG,GAAc,CAC/C6H,EAAGC,GAAE,cACLC,GAAI,IAAIH,GAAU,sBAG1BP,EAAQW,MAAML,MAAQ,IAAI3H,GAAcyH,GAG5CJ,EAAQY,SAASV,GAEjB,IAAIW,EAAO7R,EAAKoQ,OAAO,IAAIzG,GAAc,CACrCmI,SAAW,IAAIP,GAAUtH,EAAU,WAAY,2BAA2B,GAC1E8H,MAAW,IAAIR,GAAUtH,EAAU,QAAS,KAAK,GACjD+H,OAAW,IAAIT,GAAUtH,EAAU,SAAU,KAAK,GAClDgI,QAAW,IAAIV,GAAUtH,EAAU,UAAW,KAAK,GACnDiI,SAAW,IAAIX,GAAUtH,EAAU,WAAY,KAAK,GACpDkI,QAAW,IAAIZ,GAAUtH,EAAU,UAAW,2BAA2B,GACzEmI,aAAenI,EAAU,OAAQ,IAAIoI,SAGzCrS,EAAKsS,QAAU,SAASpI,GACpB,IAAIqI,EAAgBvI,GAAgB,SAASvT,EAAM0Z,GAC/C,OAAQjG,GAA4B,MAAjBA,EAAQzT,GAAiByT,EAAQzT,GAAQ0Z,KAE5DhG,EAAYoI,EAAapI,UACzBI,EAAYgI,EAAahI,OACzBiI,EAAgBrI,EAAU,GAC1BsI,EAAgBtI,EAAU,GAC1BI,IACAiI,GAAgBjI,EAAOC,KAAOD,EAAOG,MACrC+H,GAAiBlI,EAAOE,IAAMF,EAAOI,QAEzC,IAAI+H,EAAU,IAAIC,GAAU9J,IAAc,MAAM,GAC5C8I,EAAQ,CACRiB,SAAW5S,EAAKoQ,OAAOsC,GACvBG,OAAW3B,EACX4B,SAAW,CAAE,EAAG,EAAG3I,EAAU,GAAIA,EAAU,KAE3C4I,EAAO,IAAIC,GAAQhT,EAAM2R,GAgB7B,OAfAoB,EAAKE,SAAWP,EAChBxB,EAASoB,QAAQtS,EAAKoQ,OAAO2C,IAI7BA,EAAKG,UAAU,EAAG,EAAG,GAAI,EAAG,EAAG/I,EAAU,IAErCI,IACAwI,EAAKI,UAAU5I,EAAOC,KAAMD,EAAOE,KAEnCsI,EAAKK,KAAK,EAAG,EAAGZ,EAAcC,GAC9BM,EAAKM,QAGTrT,EAAKyQ,MAAMxf,KAAK8hB,GACTA,GAGX/S,EAAKnJ,OAAS,WACV,IAAIzG,EAKJ,IAHA+G,EAAI,WAAYiP,EAAI,SAAyBA,EAAIA,GAG5ChW,EAAI,EAAGA,EAAI8f,EAAQ5f,SAAUF,EAC9B8f,EAAQ9f,GAAGkgB,WAAWnZ,GACtBA,EAAIiP,EAAIA,GAIZ,IAAIkN,EAAanc,EAAI9F,SAGrB,IAFA8F,EAAI,OAAQiP,EAAI,EAAG,IAAK8J,EAAQ5f,OAAS,EAAG8V,GAC5CjP,EAAI,sBAAuBiP,GACtBhW,EAAI,EAAGA,EAAI8f,EAAQ5f,SAAUF,EAC9B+G,EAAIoc,EAAQrD,EAAQ9f,GAAGmgB,QAAS,IAAK,YAAanK,GAgBtD,OAdAjP,EAAIiP,GAGJjP,EAAI,UAAWiP,GACfjP,EAAI,IAAIwS,GAAc,CAClB6J,KAAMtD,EAAQ5f,OAAS,EACvBmjB,KAAMzC,EACN0C,KAAM7B,IACNzL,EAAIA,GAGRjP,EAAI,YAAaiP,EAAIkN,EAAYlN,GACjCjP,EAAI,QAASiP,GAENjP,EAAIhE,SAAS9B,OAAO,IAG/B2O,EAAKoL,UAAYA,EACjBpL,EAAKwM,WAAaA,GAuEtB,SAASzC,EAAI9Z,EAAKsB,EAAKgT,GACnB,KAAOtU,EAAIK,OAASiB,GAChBtB,EAAMsU,EAAKtU,EAEf,OAAOA,EAGX,SAASsjB,EAAQljB,EAAGkB,GAChB,OAAOwY,EAAIjW,OAAOzD,GAAIkB,EAAK,KAG/B,SAAS6D,EAAeJ,EAAKC,GACzB,OAAOC,OAAOC,UAAUC,eAAeC,KAAKL,EAAKC,GAhFrD+a,EAAY7a,UAAUwe,QAAU,SAAkBtI,GAC9C,IAAIvH,EAAOjO,KAAK6a,MAAMrF,GACtB,IAAKvH,EAAM,CAEP,KADAA,EAAO8G,EAAWS,IAEd,MAAM,IAAIhX,MAAM,QAAUgX,EAAM,wBAGhCvH,GADS,IAATA,EACOjO,KAAKua,OAAO,IAAIwD,GAAgBvI,IAEhCxV,KAAKua,OAAO,IAAIyD,GAAQhe,KAAMiO,IAEzCjO,KAAK6a,MAAMrF,GAAOvH,EAEtB,OAAOA,GAGXkM,EAAY7a,UAAU2e,SAAW,SAAmBzI,GAChD,IAAI2B,EAAMnX,KAAK8a,OAAOtF,GACtB,IAAK2B,EAAK,CAEN,KADAA,EAAM/B,EAAYI,IAEd,MAAM,IAAIhX,MAAM,SAAWgX,EAAM,wBAErC,GAAY,UAAR2B,EACA,OAAO,KAEXA,EAAMnX,KAAK8a,OAAOtF,GAAOxV,KAAKua,OAAOpD,EAAI+G,SAASle,OAEtD,OAAOmX,GAGXgD,EAAY7a,UAAU6e,aAAe,SAAuBC,EAASC,GACjE,IAAIta,EAAKjE,WAAWse,GAASxK,QAAQ,GACrCwK,EAAUte,WAAWiE,GACrBA,GAAMsa,EAAY,IAAM,IACxB,IAAIhX,EAAQrH,KAAKse,kBAAoBte,KAAKse,gBAAkB,IACxDC,EAAKlX,EAAMtD,GACf,IAAKwa,EAAI,CACL,IAAIzC,EAAQ,CACR0C,KAAM5C,GAAE,cAERyC,EACAvC,EAAM2C,GAAKL,EAEXtC,EAAM4C,GAAKN,GAEfG,EAAKve,KAAKua,OAAO,IAAIzG,GAAcgI,KAChC6C,cAAgB/C,GAAE,QAAUpL,GAC/BnJ,EAAMtD,GAAMwa,EAEhB,OAAOA,GAGXpE,EAAY7a,UAAUsf,KAAO,SAAe9C,GACxC,OAAO,IAAIhI,GAAcgI,IAG7B3B,EAAY7a,UAAUsB,KAAO,SAAexG,GACxC,OAAOwhB,GAAExhB,IAGb+f,EAAY7a,UAAUhC,OAAS,SAAiBwe,EAAOe,GACnD,OAAO,IAAIC,GAAUD,EAASf,IAoBlC,IAAIxI,EAAUjW,MAAMiW,SAAW,SAASnU,GACpC,OAAOA,aAAe9B,OAG1B,SAASmW,EAAOrU,GACZ,OAAOA,aAAeqd,KAG1B,SAASjJ,EAAY3T,EAAG0B,GACpBA,EAAI,KACA1B,EAAEnF,OAAS,GACX6G,EAAI0S,YAAW,WACX,IAAK,IAAIzZ,EAAI,EAAGA,EAAIqF,EAAEnF,SAAUF,EACxBA,EAAI,GAAKA,EAAI,GAAM,EACnB+G,EAAI2S,OAAOrU,EAAErF,IAEb+G,EAAI,IAAK1B,EAAErF,OAM3B+G,EAAI,MAGR,SAASmS,EAAWoL,EAAMvd,GACtBA,EAAI,MACAoc,EAAQmB,EAAKC,iBAAkB,GAC/BpB,EAAQmB,EAAKE,cAAgB,EAAG,GAChCrB,EAAQmB,EAAKG,aAAc,GAC3BtB,EAAQmB,EAAKI,cAAe,GAC5BvB,EAAQmB,EAAKK,gBAAiB,GAC9BxB,EAAQmB,EAAKM,gBAAiB,GAC9B,MAGR,SAASC,GAAMC,GACX,OAAOA,GAAM,GAAG,MAGpB,SAASC,GAAMC,GACX,OAAOH,GAAW,GAALG,GAGjB,SAASC,GAAMC,GACX,OAAc,GAAPA,EAGX,SAASjL,GAAclY,EAAGwE,GACtB,GAAgB,iBAALxE,EACP,OAAOA,EAGP,IAAIoK,EADR,GAAgB,iBAALpK,IAEPoK,EAAI,oCAAoCgP,KAAKpZ,IACtC,CACH,IAAIqX,EAAM7T,WAAW4G,EAAE,IACvB,IAAKgN,MAAMC,GACP,MAAY,MAARjN,EAAE,GACKiN,EAEJ,CACH0L,GAAMD,GACNG,GAAMD,GACNI,GAAMF,IACR9Y,EAAE,IAAIiN,GAIpB,GAAW,MAAP7S,EACA,OAAOA,EAEX,MAAM,IAAItC,MAAM,qBAAuBlC,GAK3C,IAAI8W,GAAW,aAEfA,GAAS9T,UAAU+T,aAAe,aAElC,IAAIqI,GAAa,SAAUtI,GACvB,SAASsI,EAAU9M,EAAO+Q,GACtBvM,EAAS5T,KAAKQ,MACdA,KAAK4O,MAAQA,EACb5O,KAAK2f,QAAUC,QAAQD,GAsC3B,OAnCAjmB,EAAagiB,EAAWtI,GACxBsI,EAAUpc,UAAYD,OAAOiD,OAAQ8Q,GAAYA,EAAS9T,WAC1Doc,EAAUpc,UAAUiD,YAAcmZ,EAClCA,EAAUlZ,GAAKkZ,EAAUpc,UACzBoc,EAAUlZ,GAAGC,KAAOiZ,EAAUlZ,GAAGD,YAEjCmZ,EAAUpc,UAAU0B,OAAS,SAAiBM,GAC1C,IAAIue,EAAM7f,KAAK4O,MACf,GAAI5O,KAAK2f,QACLE,EAxzBF,KASV,SAAuBxlB,GAGnB,IAFA,IAAIK,EAAS,GAEJH,EAAI,EAAGA,EAAIF,EAAMI,OAAQF,IAAK,CACnC,IAAIulB,EAAIzlB,EAAM6C,WAAW3C,GAEzB,GAAIulB,EAAI,MACJplB,GAAU2V,EAAWyP,OAClB,CACH,IACIC,EAAkC,OAAxBD,EAAI,MAAW,MAC7BplB,GAAU2V,EAFyB,OAAtByP,EAAI,OAAY,KAG7BplB,GAAU2V,EAAW0P,IAI7B,OAAOrlB,EA+xBaslB,CAAcH,GAE1Bve,EAAI,IADJue,EAAMA,EAAIvlB,QAAQ,cAAe,QACnB,SACX,CAMH,IADA,IAAInB,EAAO,CAAE,IACJoB,EAAI,EAAGA,EAAIslB,EAAIplB,SAAUF,EAAG,CACjC,IAAIqP,EAA2B,IAApBiW,EAAI3iB,WAAW3C,GACd,IAARqP,GAAsB,IAARA,GAAsB,IAARA,GAE5BzQ,EAAKiC,KAAK,IAEdjC,EAAKiC,KAAKwO,GAEdzQ,EAAKiC,KAAK,IACVkG,EAAIyS,UAAU5a,KAItBuiB,EAAUpc,UAAUf,SAAW,WAC3B,OAAOyB,KAAK4O,OAGT8M,EA1CK,CA2CdtI,IAEE6M,GAAgB,SAAUvE,GAC1B,SAASuE,EAAarR,GAClB8M,EAAUlc,KAAKQ,KAAM4O,GACrB5O,KAAK4O,MAAQA,EAmBjB,OAhBAlV,EAAaumB,EAAcvE,GAC3BuE,EAAa3gB,UAAYD,OAAOiD,OAAQoZ,GAAaA,EAAUpc,WAC/D2gB,EAAa3gB,UAAUiD,YAAc0d,EACrCA,EAAazd,GAAKyd,EAAa3gB,UAC/B2gB,EAAazd,GAAGC,KAAOwd,EAAazd,GAAGD,YAEvC0d,EAAa3gB,UAAU0B,OAAS,SAAiBM,GAG7CA,EAAI,KACJ,IAAK,IAAI/G,EAAI,EAAGA,EAAIyF,KAAK4O,MAAMnU,SAAUF,EACrC+G,EAAIoc,EAJO1d,KAIU4O,MAAM1R,WAAW3C,GAAGgE,SAAS,IAAK,IAE3D+C,EAAI,MAGD2e,EAtBQ,CAuBjBvE,IAGEwE,GAAW,SAAU9M,GACrB,SAAS8M,EAAQtf,GACbwS,EAAS5T,KAAKQ,MACdA,KAAKY,KAAOA,EA2BhB,OAxBAlH,EAAawmB,EAAS9M,GACtB8M,EAAQ5gB,UAAYD,OAAOiD,OAAQ8Q,GAAYA,EAAS9T,WACxD4gB,EAAQ5gB,UAAUiD,YAAc2d,EAChCA,EAAQ1d,GAAK0d,EAAQ5gB,UACrB4gB,EAAQ1d,GAAGC,KAAOyd,EAAQ1d,GAAGD,YAE7B2d,EAAQnkB,IAAM,SAAc6E,GACxB,OAAOgb,GAAEhb,IAGbsf,EAAQ5gB,UAAU0B,OAAS,SAAiBM,GACxCA,EAAI,IAAMtB,KAAKmgB,WAGnBD,EAAQ5gB,UAAU6gB,OAAS,WACvB,OAAOngB,KAAKY,KAAKtG,QAAQ,iBAAiB,SAASwlB,GAC/C,MAAO,IAAMpC,EAAQoC,EAAE5iB,WAAW,GAAGqB,SAAS,IAAK,OAI3D2hB,EAAQ5gB,UAAUf,SAAW,WACzB,OAAOyB,KAAKY,MAGTsf,EA9BG,CA+BZ9M,IAEEgN,GAAgB,GAEpB,SAASxE,GAAEhb,GACP,OAAIrB,EAAe6gB,GAAexf,GACvBwf,GAAcxf,GAEjBwf,GAAcxf,GAAQ,IAAIsf,GAAQtf,GAK9C,IAAIkT,GAAiB,SAAUV,GAC3B,SAASU,EAAcgI,GACnB1I,EAAS5T,KAAKQ,MACdA,KAAK8b,MAAQA,EA0BjB,OAvBApiB,EAAaoa,EAAeV,GAC5BU,EAAcxU,UAAYD,OAAOiD,OAAQ8Q,GAAYA,EAAS9T,WAC9DwU,EAAcxU,UAAUiD,YAAcuR,EACtCA,EAActR,GAAKsR,EAAcxU,UACjCwU,EAActR,GAAGC,KAAOqR,EAActR,GAAGD,YAEzCuR,EAAcxU,UAAU0B,OAAS,SAAiBM,GAC9C,IAAIwa,EAAQ9b,KAAK8b,MAAOuE,GAAQ,EAChC/e,EAAI,MACJA,EAAI0S,YAAW,WACX,IAAK,IAAIzZ,KAAKuhB,EACNvc,EAAeuc,EAAOvhB,KAAO,KAAKsZ,KAAKtZ,KACvC8lB,GAAQ,EACR/e,EAAI2S,OAAO2H,GAAErhB,GAAI,IAAKuhB,EAAMvhB,QAInC8lB,GACD/e,EAAI2S,SAER3S,EAAI,OAGDwS,EA7BS,CA8BlBV,IAIE0J,GAAa,SAAU1J,GACvB,SAAS0J,EAAU3jB,EAAM2iB,EAAOwE,GAE5B,GADAlN,EAAS5T,KAAKQ,MACK,iBAAR7G,EAAkB,CACzB,IAAIwC,EAAMJ,IACVI,EAAIM,MAAM9C,GACVA,EAAOwC,EAEXqE,KAAK7G,KAAOA,EACZ6G,KAAK8b,MAAQA,GAAS,GACtB9b,KAAKsgB,SAAWA,EA0BpB,OAvBA5mB,EAAaojB,EAAW1J,GACxB0J,EAAUxd,UAAYD,OAAOiD,OAAQ8Q,GAAYA,EAAS9T,WAC1Dwd,EAAUxd,UAAUiD,YAAcua,EAClCA,EAAUta,GAAKsa,EAAUxd,UACzBwd,EAAUta,GAAGC,KAAOqa,EAAUta,GAAGD,YAEjCua,EAAUxd,UAAU0B,OAAS,SAAiBM,GAC1C,IAAInI,EAAO6G,KAAK7G,KAAK4C,MAAO+f,EAAQ9b,KAAK8b,MACrC9b,KAAKsgB,UAAY3mB,EAASZ,oBACrB+iB,EAAMyE,OAEEzE,EAAMyE,kBAAkBljB,QACjCye,EAAMyE,OAAS,CAAEzE,EAAMyE,SAFvBzE,EAAMyE,OAAS,GAInBzE,EAAMyE,OAAOC,QAAQ5E,GAAE,gBACvBziB,EAAOQ,EAAST,QAAQC,IAE5B2iB,EAAM2E,OAAStnB,EAAKsB,OACpB6G,EAAI,IAAIwS,GAAcgI,GAAQ,UAAWvL,GACzCjP,EAAIyS,UAAU5a,GACdmI,EAAIiP,EAAI,cAGLuM,EApCK,CAqCd1J,IAIEgI,GAAc,SAAUtH,GACxB,SAASsH,IACLtH,EAActU,KAAKQ,KAAM,CACrBwe,KAAM5C,GAAE,aAchB,OAVAliB,EAAa0hB,EAAYtH,GACzBsH,EAAW9b,UAAYD,OAAOiD,OAAQwR,GAAiBA,EAAcxU,WACrE8b,EAAW9b,UAAUiD,YAAc6Y,EACnCA,EAAW5Y,GAAK4Y,EAAW9b,UAC3B8b,EAAW5Y,GAAGC,KAAO2Y,EAAW5Y,GAAGD,YAEnC6Y,EAAW9b,UAAUyc,SAAW,SAAmB2E,GAC/C1gB,KAAK8b,MAAM6E,MAAQD,GAGhBtF,EAjBM,CAkBftH,IAIEwH,GAAe,SAAUxH,GACzB,SAASwH,IACLxH,EAActU,KAAKQ,KAAM,CACrBwe,KAAQ5C,GAAE,SACVgF,KAAQ,GACRC,MAAQ,IAehB,OAXAnnB,EAAa4hB,EAAaxH,GAC1BwH,EAAYhc,UAAYD,OAAOiD,OAAQwR,GAAiBA,EAAcxU,WACtEgc,EAAYhc,UAAUiD,YAAc+Y,EACpCA,EAAY9Y,GAAK8Y,EAAYhc,UAC7Bgc,EAAY9Y,GAAGC,KAAO6Y,EAAY9Y,GAAGD,YAErC+Y,EAAYhc,UAAUmd,QAAU,SAAkBqE,GAC9C9gB,KAAK8b,MAAM8E,KAAKxlB,KAAK0lB,GACrB9gB,KAAK8b,MAAM+E,SAGRvF,EApBO,CAqBhBxH,IAMEiN,GAAY,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,KAErFjH,GAAe,SAAsB3gB,GAMrC,IAAI+e,EAAOC,EAAQ6I,EAAYC,EAE/B,GAHA9nB,EAAKqC,OAAO,GAGD,OADDrC,EAAKsD,YAGX,MAAM,IAAI+B,MAAM,sBAEpB,MAAQrF,EAAKoE,OAAO,CAEhB,GAAU,KADDpE,EAAKoD,WAEV,MAAM,IAAIiC,MAAM,sBAEpB,IAAI0iB,EAAS/nB,EAAKoD,WACd9B,EAAStB,EAAKsD,YAClB,GAAIskB,GAAUnmB,QAAQsmB,IAAW,EAAG,CAEhCD,EAAmB9nB,EAAKoD,WACxB4b,EAAShf,EAAKsD,YACdyb,EAAQ/e,EAAKsD,YACbukB,EAAa7nB,EAAKoD,WAClB,MAEJpD,EAAKkF,KAAK5D,EAAS,GAGvB,GAAkB,MAAdumB,EACA,MAAM,IAAIxiB,MAAM,sBAGpB,IAAIsd,EAAQ,CACR0C,KAAe5C,GAAE,WACjBuF,QAAevF,GAAE,SACjBwF,MAAelJ,EACfmJ,OAAelJ,EACfmJ,iBAAmBL,EACnBV,OAAe3E,GAAE,cAGrB,OAAQoF,GACR,KAAK,EACDlF,EAAMyF,WAAa3F,GAAE,cACrB,MACJ,KAAK,EACDE,EAAMyF,WAAa3F,GAAE,aACrB,MACJ,KAAK,EACDE,EAAMyF,WAAa3F,GAAE,cACrBE,EAAM0F,OAAS,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAI1CxhB,KAAKke,SAAW,WACZ/kB,EAAKqC,OAAO,GACZ,IAAI8B,EAAS,IAAIwf,GAAU3jB,EAAM2iB,GAEjC,OADAxe,EAAOqhB,cAAgB/C,GAAE,OAASpL,GAC3BlT,IAMXsc,GAAc,SAAqB1B,EAAOC,EAAQsB,EAAKC,GACvD1Z,KAAKke,SAAW,SAASplB,GACrB,IAAI2oB,EAAO,IAAI3E,GAAUpD,EAAO,CAC5B8E,KAAe5C,GAAE,WACjBuF,QAAevF,GAAE,SACjBwF,MAAelJ,EACfmJ,OAAelJ,EACfmJ,iBAAmB,EACnBC,WAAe3F,GAAE,gBAClB,GACCte,EAAS,IAAIwf,GAAUrD,EAAK,CAC5B+E,KAAe5C,GAAE,WACjBuF,QAAevF,GAAE,SACjBwF,MAAelJ,EACfmJ,OAAelJ,EACfmJ,iBAAmB,EACnBC,WAAe3F,GAAE,aACjB8F,MAAe5oB,EAAIyhB,OAAOkH,KAC3B,GAEH,OADAnkB,EAAOqhB,cAAgB/C,GAAE,OAASpL,GAC3BlT,IAMXygB,GAAmB,SAAUjK,GAC7B,SAASiK,EAAgBnd,GACrBkT,EAActU,KAAKQ,KAAM,CACrBwe,KAAW5C,GAAE,QACbuF,QAAWvF,GAAE,SACb+F,SAAW/F,GAAEhb,KAGjBZ,KAAK2e,cAAgB/C,GAAE,OAASpL,GAapC,OAVA9W,EAAaqkB,EAAiBjK,GAC9BiK,EAAgBze,UAAYD,OAAOiD,OAAQwR,GAAiBA,EAAcxU,WAC1Eye,EAAgBze,UAAUiD,YAAcwb,EACxCA,EAAgBvb,GAAKub,EAAgBze,UACrCye,EAAgBvb,GAAGC,KAAOsb,EAAgBvb,GAAGD,YAE7Cwb,EAAgBze,UAAU6P,WAAa,SAAqB/U,GACxD,OAAO,IAAIshB,GAAUzd,OAAO7D,KAGzB2jB,EArBW,CAsBpBjK,IAIEkK,GAAW,SAAUlK,GACrB,SAASkK,EAAQllB,EAAKmV,EAAM6N,GACxBhI,EAActU,KAAKQ,KAAM,KAEzB8b,EAAQ9b,KAAK8b,OACP0C,KAAO5C,GAAE,QACfE,EAAMqF,QAAUvF,GAAE,SAClBE,EAAM8F,SAAWhG,GAAE,cAEnB5b,KAAK6hB,KAAO/oB,EACZkH,KAAK8hB,MAAQ7T,EACbjO,KAAK+hB,KAAO9T,EAAKmC,aACjBpQ,KAAK2e,cAAgB/C,GAAE,OAASpL,GAEhC,IAAI5M,EAAOqK,EAAKrK,KAEhB5D,KAAKY,KAAOqN,EAAKxF,OACjB,IAAIyH,EAAQlQ,KAAKkQ,MAAQjC,EAAKiC,MAC9BlQ,KAAKgiB,KAAO,CACRpe,EAAKX,KAAOiN,EACZtM,EAAKV,KAAOgN,EACZtM,EAAKT,KAAO+M,EACZtM,EAAKR,KAAO8M,GAGhBlQ,KAAKiJ,YAAcgF,EAAKjE,KAAKf,YAC7BjJ,KAAKmE,OAAS8J,EAAK9J,OAAS+L,EAC5BlQ,KAAKoE,QAAU6J,EAAK7J,QAAU8L,EAC9BlQ,KAAKqE,QAAU4J,EAAK5J,QAAU6L,EAC9BlQ,KAAK2N,UAAYM,EAAK0B,IAAIhC,WAAa3N,KAAKmE,OAC5CnE,KAAK0N,QAAUO,EAAK0B,IAAIjC,SAAW,EACnC1N,KAAKiiB,MAAQ,EAEbjiB,KAAKgN,aAAeiB,EAAK0B,IAAI3C,aAAe,IAAM,EAClDhN,KAAKkiB,QAAUliB,KAAKgN,aAAe,GAAKhN,KAAKgN,aAAe,EAC5DhN,KAAKmiB,SAA+B,IAApBniB,KAAKgN,YAErBhN,KAAK6C,OAAUoL,EAAKjE,KAAKZ,aAAe,EAAI,IAC/BpJ,KAAKkiB,QAAU,EAAS,IACxBliB,KAAKmiB,SAAW,EAAS,IACJ,IAArBniB,KAAKiJ,YAAoB,GAAS,GACnC,GA0GhB,OAvGAvP,EAAaskB,EAASlK,GACtBkK,EAAQ1e,UAAYD,OAAOiD,OAAQwR,GAAiBA,EAAcxU,WAClE0e,EAAQ1e,UAAUiD,YAAcyb,EAChCA,EAAQxb,GAAKwb,EAAQ1e,UACrB0e,EAAQxb,GAAGC,KAAOub,EAAQxb,GAAGD,YAEzByb,EAAQ1e,UAAU6P,WAAa,SAAqBtH,GAChD,OAAO,IAAIoY,GAAajgB,KAAK+hB,KAAK5S,WAAWlR,OAAO4J,MAGxDmW,EAAQ1e,UAAU8iB,aAAe,SAAuBC,EAAUxa,GAI9D,IAHA,IAEIqQ,EAAQ,EAAGhO,EAAUlK,KAAK8hB,MAAM5S,KAAKhF,QAChC3P,EAAI,EAAGA,EAAIsN,EAAKpN,SAAUF,EAAG,CAClC,IAAIoQ,EAAUT,EAAQrC,EAAK3K,WAAW3C,IACtC2d,GALWlY,KAKO8hB,MAAM3R,aAAaxF,GAAW,GAEpD,OAAOuN,EAAQmK,EAAW,KAG9BrE,EAAQ1e,UAAU+T,aAAe,WAC7B,IAAIlJ,EAAOnK,KACPsiB,EAAMnY,EAAK4X,KAGX5oB,EAAOmpB,EAAIthB,SACXuhB,EAAa,IAAIzF,GAAUvhB,EAAapC,GAAO,CAC/CqpB,QAASrpB,EAAKsB,SACf,GAECgoB,EAAatY,EAAK0X,KAAKtH,OAAO,IAAIzG,EAAc,CAChD0K,KAAe5C,GAAE,kBACjB8G,SAAe9G,GAAEzR,EAAK4X,KAAKtZ,QAC3Bka,SAAexY,EAAK6X,KACpBY,MAAezY,EAAKtH,MACpBggB,MAAe1Y,EAAK8X,MACpBa,YAAe3Y,EAAKlB,YACpB8Z,OAAe5Y,EAAKhG,OACpB6e,QAAe7Y,EAAK/F,QACpB6e,UAAe9Y,EAAKwD,UACpBuV,QAAe/Y,EAAKuD,QACpByV,UAAehZ,EAAK0X,KAAKtH,OAAOgI,MAGhCrT,EAAOoT,EAAIrX,UACXqD,EAAYgU,EAAIhU,UAChBmB,EAAW6S,EAAI7S,SACf2T,EAAa,IACjB,SAAUC,EAAK9oB,EAAG+oB,GACd,GAAI/oB,GAAKkV,EAAU,CACf,IAAI8T,EAAMrU,EAAK3U,GACJ,MAAPgpB,EACAF,EAAK9oB,EAAI,IAEJ+oB,GACDF,EAAWhoB,KAAKb,EAAG+oB,EAAQ,IAE/BA,EAAMloB,KAAK+O,EAAK2X,MAAM3R,aAAaoT,IACnCF,EAAK9oB,EAAI,EAAG+oB,KAVxB,CAaGhV,GAQH,IAAIkV,EAAa,IAAI1P,EAAc,CAC/B0K,KAAM5C,GAAE,QACRuF,QAASvF,GAAE,gBACX+F,SAAU/F,GAAEzR,EAAK4X,KAAKtZ,QACtBgb,cAAe,IAAI3P,EAAc,CAC7B4P,SAAa,IAAIhI,GAAU,SAC3BiI,SAAa,IAAIjI,GAAU,YAC3BkI,WAAa,IAEjBC,eAAgBpB,EAChBqB,UAAWxV,EACXyV,SAAUtU,EACVuU,GAAIpoB,KAAK+B,MAAMwM,EAAK2X,MAAM3R,aAAa,IACvC8T,EAAGb,EACHc,YAAa/Z,EAAK0X,KAAKtH,OAAOpQ,EAAKga,sBAGnCvF,EAAOzU,EAAK2R,MAChB8C,EAAK+C,SAAW/F,GAAEzR,EAAK4X,KAAKtZ,QAC5BmW,EAAKwF,gBAAkB,CAAEja,EAAK0X,KAAKtH,OAAOiJ,IAI1C,IAAIa,EAAS,IAAIC,GAAiBhW,EAAWmB,EAAU6S,EAAIpU,QACvDqW,EAAe,IAAIzH,GAAU9J,IAAc,MAAM,GACrDuR,EAAaprB,KAAKkrB,GAClBzF,EAAK4F,UAAYra,EAAK0X,KAAKtH,OAAOgK,IAGtCvG,EAAQ1e,UAAU6kB,iBAAmB,WACjC,OAAO,IAAIrH,GAAUvhB,EAAayE,KAAK+hB,KAAKlS,eAAgB,MAAM,IAGnEmO,EAnJG,CAoJZlK,IAEEwQ,GAAoB,SAAUlR,GAC9B,SAASkR,EAAiBhW,EAAWmB,EAAU5P,GAC3CuT,EAAS5T,KAAKQ,MACdA,KAAKsO,UAAYA,EACjBtO,KAAKyP,SAAWA,EAChBzP,KAAKH,IAAMA,EA6Cf,OA1CAnG,EAAa4qB,EAAkBlR,GAC/BkR,EAAiBhlB,UAAYD,OAAOiD,OAAQ8Q,GAAYA,EAAS9T,WACjEglB,EAAiBhlB,UAAUiD,YAAc+hB,EACzCA,EAAiB9hB,GAAK8hB,EAAiBhlB,UACvCglB,EAAiB9hB,GAAGC,KAAO6hB,EAAiB9hB,GAAGD,YAE/C+hB,EAAiBhlB,UAAU0B,OAAS,SAAiBM,GACjDA,EAAI2S,OAAO,wCACX3S,EAAI2S,OAAO,iBACX3S,EAAI2S,OAAO,aACX3S,EAAI2S,OAAO,qBACX3S,EAAI2S,OAAO,uBACX3S,EAAI2S,OAAO,qBACX3S,EAAI2S,OAAO,mBACX3S,EAAI2S,OAAO,UACX3S,EAAI2S,OAAO,qCACX3S,EAAI2S,OAAO,mBACX3S,EAAI2S,OAAO,yBACX3S,EAAI2S,OAAO,kBACX3S,EAAI2S,OAAO,qBAEX,IAAI9J,EAAOnK,KACXsB,EAAI2S,OAAO9J,EAAKsF,SAAWtF,EAAKmE,UAAY,EAAG,gBAC/ChN,EAAI0S,YAAW,WACX,IAAK,IAAIpK,EAAOO,EAAKmE,UAAW1E,GAAQO,EAAKsF,WAAY7F,EAAM,CAC3D,IAAI6a,EAAUta,EAAKtK,IAAI+J,GACnBxP,EAAiB,CAAEqqB,GAtlFtB5kB,KAAI,SAAS+O,GACtB,IAAIlU,EAAS,GAOb,OANIkU,EAAQ,QACRA,GAAS,MACTlU,GAAUuD,OAAOC,aAAa0Q,IAAU,GAAK,KAAQ,OACrDA,EAAQ,MAAiB,KAARA,GAErBlU,GAAUuD,OAAOC,aAAa0Q,MAE/B8V,KAAK,IA8kFIpjB,EAAI2S,OAAO,IAAKyJ,EAAQ9T,EAAKrL,SAAS,IAAK,GAAI,IAAK,KACpD,IAAK,IAAIhE,EAAI,EAAGA,EAAIH,EAAIK,SAAUF,EAC9B+G,EAAIoc,EAAQtjB,EAAI8C,WAAW3C,GAAGgE,SAAS,IAAK,IAEhD+C,EAAI,SAGZA,EAAI2S,OAAO,aAEX3S,EAAI2S,OAAO,WACX3S,EAAI2S,OAAO,iDACX3S,EAAI2S,OAAO,OACX3S,EAAI2S,OAAO,QAGRqQ,EAlDY,CAmDrBlR,IAIF,SAASuR,GAAS/kB,GACd,OAAOA,EAAEC,KAAI,SAASvD,GAClB,OAAOgX,EAAQhX,GAAKqoB,GAASroB,GACX,iBAALA,GAAiBV,KAAK+B,MAAU,IAAJrB,GAAY,KAAMsX,QAAQ,GAC7DtX,KACPooB,KAAK,KAGZ,SAASE,GAA2B9rB,EAAK+rB,EAAIC,EAAIxT,EAAIyT,EAAIC,EAAIzT,GACzD,IAAI0T,EAAON,GAAS,CAAEE,EAAIC,EAAIxT,EAAIyT,EAAIC,EAAIzT,IACtC2T,EAAOpsB,EAAIiiB,mBAAmBkK,GAWlC,OAVKC,IACDA,EAAOpsB,EAAIiiB,mBAAmBkK,GAAQnsB,EAAIyhB,OAAO,IAAIzG,GAAc,CAC/DqR,aAAc,EACdC,OAAQ,CAAE,EAAG,GACbC,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,GACxBC,EAAG,EACHC,GAAI,CAAEV,EAAKC,EAAKxT,GAChBkU,GAAI,CAAET,EAAKC,EAAKzT,OAGjB2T,EAGX,SAASO,GAA6B3sB,EAAK6X,EAAIC,GAC3C,IAAIqU,EAAON,GAAS,CAAEhU,EAAIC,IACtBsU,EAAOpsB,EAAIkiB,mBAAmBiK,GAWlC,OAVKC,IACDA,EAAOpsB,EAAIkiB,mBAAmBiK,GAAQnsB,EAAIyhB,OAAO,IAAIzG,GAAc,CAC/DqR,aAAc,EACdC,OAAQ,CAAE,EAAG,GACbC,MAAO,CAAE,EAAG,GACZC,EAAG,EACHC,GAAI,CAAE5U,GACN6U,GAAI,CAAE5U,OAGPsU,EAuJX,SAASQ,GAAc5sB,EAAK6sB,EAAUC,GAClC,IAAIC,EAA4B,UAAjBF,EAAStZ,KACpByZ,EAtJR,SAA+BhtB,EAAKitB,GAChC,IAKIxrB,EAAGyrB,EAAMC,EAAKC,EAAWC,EALzB3M,GAAW,EACX4M,EAAY,GACZC,EAAS,GACTxiB,EAAU,GACVxI,EAAS,GAEb,IAAKd,EAAI,EAAGA,EAAIwrB,EAAMtrB,SAAUF,EAC5ByrB,EAAOD,EAAMxrB,EAAI,GACjB0rB,EAAMF,EAAMxrB,GACZ2rB,EAAYF,EAAKM,MACjBH,EAAWF,EAAIK,MACfD,EAAOjrB,KAAKwpB,GACR9rB,EACAotB,EAAUK,EAAGL,EAAUM,EAAGN,EAAU1pB,EACpC2pB,EAASI,EAAIJ,EAASK,EAAIL,EAAS3pB,KAEnC0pB,EAAUtmB,EAAI,GAAKumB,EAASvmB,EAAI,KAChC4Z,GAAW,GAEf3V,EAAQzI,KAAK6qB,EAAIzqB,QACjBH,EAAOD,KAAK,EAAG,GAEnB,GAAIoe,EACA,IAAKjf,EAAI,EAAGA,EAAIwrB,EAAMtrB,SAAUF,EAC5ByrB,EAAOD,EAAMxrB,EAAI,GACjB0rB,EAAMF,EAAMxrB,GACZ2rB,EAAYF,EAAKM,MACjBH,EAAWF,EAAIK,MACfF,EAAUhrB,KAAKqqB,GACX3sB,EAAKotB,EAAUtmB,EAAGumB,EAASvmB,IAKvC,OADAiE,EAAQ4iB,MACD,CACHjN,SAAYA,EACZ6M,OAAYK,EAASL,GACrBD,UAAY5M,EAAWkN,EAASN,GAAa,MAEjD,SAASM,EAASZ,GACd,OAAoB,GAAhBA,EAAMrrB,OACCqrB,EAAM,GAEV,CACHX,aAAc,EACdwB,UAAWb,EACXV,OAAQ,CAAE,EAAG,GACbwB,OAAQ/iB,EACRgjB,OAAQxrB,IAqGJyrB,CAAsBhuB,EAAK6sB,EAASI,OAC5CgB,EAASlB,EAAW,CACpBF,EAAStpB,MAAMC,EAAIqpB,EAAStpB,MAAM2qB,EAAIrB,EAAStpB,MAAMkqB,EACrDZ,EAASjb,IAAIpO,EAAMqpB,EAASjb,IAAIsc,EAAMrB,EAASjb,IAAI6b,GACnD,CACAZ,EAAStpB,MAAMC,EAAIqpB,EAAStpB,MAAM2qB,EAClCrB,EAASjb,IAAIpO,EAAMqpB,EAASjb,IAAIsc,GAEhCC,EAxGR,SAA4BnuB,EAAK+sB,EAAUE,EAAOgB,EAAQjB,EAAOF,GAC7D,IAAIqB,EAAShC,EAIb,IAAKW,EAAK,CACN,IAAIhmB,EAAI,CAAEimB,GAAWqB,OAAOH,GAC5BhB,EAAMha,SAAQ,SAASzP,GACnBsD,EAAExE,KAAKkB,EAAEd,OAAQc,EAAEgqB,MAAMC,EAAGjqB,EAAEgqB,MAAME,EAAGlqB,EAAEgqB,MAAM9pB,MAEnDyoB,EAAON,GAAS/kB,GAChBqnB,EAAUnuB,EAAImiB,SAASgK,GAkB3B,OAhBKgC,IACDA,EAAU,IAAInT,GAAc,CACxB0K,KAAM5C,GAAE,WACRuL,YAAatB,EAAW,EAAI,EAC5BtE,WAAY3F,GAAE,aACdwL,OAAQL,EACR3B,OAAQ,CAAE,EAAG,GACbiC,SAAUvB,EACVwB,OAAQ,EAAE,GAAM,KAEpBxuB,EAAIyhB,OAAO0M,GACXA,EAAQtI,cAAgB,OAASnO,EAC7ByU,IACAnsB,EAAImiB,SAASgK,GAAQgC,IAGtBA,EA2EOM,CACVzuB,EAAK+sB,EAAUF,EAASI,MAAOgB,EAAQjB,EAAMO,OAAQV,EAAS6B,WAAa5B,GAE3ExH,EAAU0H,EAAMtM,SA3ExB,SAA8B1gB,EAAK+sB,EAAUE,EAAOgB,EAAQjB,EAAOF,GAC/D,IAAIxH,EAAS6G,EAIb,IAAKW,EAAK,CACN,IAAIhmB,EAAI,CAAEimB,GAAWqB,OAAOH,GAC5BhB,EAAMha,SAAQ,SAASzP,GACnBsD,EAAExE,KAAKkB,EAAEd,OAAQc,EAAEgqB,MAAM1mB,MAE7BqlB,EAAON,GAAS/kB,GAChBwe,EAAUtlB,EAAIoiB,SAAS+J,GAgD3B,OA9CK7G,IACDA,EAAU,IAAItK,GAAc,CACxB0K,KAAM5C,GAAE,aACR6L,KAAK,EACLhJ,GAAI,EACJC,GAAI,EACJgD,MAAO,CACHlD,KAAM5C,GAAE,QACRD,EAAGC,GAAE,cACL8L,EAAG5uB,EAAIyhB,OAAO,IAAIuC,GAAU,gBAAiB,CACzC0B,KAAM5C,GAAE,WACRuF,QAASvF,GAAE,QACX+L,SAAU,EACVC,KAAOhC,EAAM,CACTA,EAAIjR,KAAMiR,EAAIhR,IAAMgR,EAAIzN,OAAQyN,EAAIjR,KAAOiR,EAAI1N,MAAO0N,EAAIhR,KAC1D,CAAE,EAAG,EAAG,EAAG,GACfiT,MAAO,CACHrJ,KAAM5C,GAAE,SACRD,EAAGC,GAAE,gBACLkM,GAAIlM,GAAE,cACNmM,GAAG,GAEPC,UAAW,CACPC,UAAW,CACPvX,GAAI,CAAE+N,GAAI,EAAGC,GAAI,IAErBwJ,QAAS,CACLC,GAAI,CACA5G,WAAY3F,GAAE,cACdwL,OAAQL,EACR3B,OAAQ,CAAE,EAAG,GACb+B,YAAatB,EAAW,EAAI,EAC5BwB,SAAUvB,EACVwB,OAAQ,EAAE,GAAM,YAOxCxuB,EAAIyhB,OAAO6D,GACXA,EAAQO,cAAgB,OAASnO,EAC7ByU,IACAnsB,EAAIoiB,SAAS+J,GAAQ7G,IAGtBA,EAgBwBgK,CAC3BtvB,EAAK+sB,EAAUF,EAASI,MAAOgB,EAAQjB,EAAMM,UAAWT,EAAS6B,WAAa5B,GAC9E,KACJ,MAAO,CACHpM,SAAUsM,EAAMtM,SAChByN,QAASA,EACT7I,QAASA,GAMjB,IAAIjB,GAAW,SAAUrJ,GACrB,SAASqJ,EAAQrkB,EAAKgjB,GAClBhI,EAActU,KAAKQ,KAAM8b,GAEzB9b,KAAK6hB,KAAO/oB,EACZkH,KAAKqoB,QAAU,EACfroB,KAAKsoB,WAAY,EACjBtoB,KAAKuoB,eAAiB,GACtBvoB,KAAKwoB,aAAe,GACpBxoB,KAAKyoB,YAAc,GACnBzoB,KAAK0oB,cAAgB,GACrB1oB,KAAK2oB,aAAe,GACpB3oB,KAAK4oB,SAAW,EAChB5oB,KAAK6oB,QAAU,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,GAChC7oB,KAAK8oB,aAAe,GAEpB9oB,KAAK8hB,MAAQ,KACb9hB,KAAK+oB,UAAY,KAEjB/oB,KAAKgpB,cAAgB,IAErBlN,EAAQ9b,KAAK8b,OACP0C,KAAO5C,GAAE,QACfE,EAAMmN,QAAU,CACZrN,GAAE,OACFA,GAAE,QACFA,GAAE,UACFA,GAAE,UACFA,GAAE,WAENE,EAAMkM,UAAY,IAAIlU,EAAc,CAChCoV,KAAY,IAAIpV,EAAc9T,KAAKuoB,gBACnCN,UAAY,IAAInU,EAAc9T,KAAKwoB,cACnCW,QAAY,IAAIrV,EAAc9T,KAAKyoB,aACnCW,QAAY,IAAItV,EAAc9T,KAAK0oB,eACnCR,QAAY,IAAIpU,EAAc9T,KAAK2oB,gBAEvC7M,EAAMuN,OAASrpB,KAAK8oB,aAmUxB,OAhUApvB,EAAayjB,EAASrJ,GACtBqJ,EAAQ7d,UAAYD,OAAOiD,OAAQwR,GAAiBA,EAAcxU,WAClE6d,EAAQ7d,UAAUiD,YAAc4a,EAChCA,EAAQ3a,GAAK2a,EAAQ7d,UACrB6d,EAAQ3a,GAAGC,KAAO0a,EAAQ3a,GAAGD,YAE7B4a,EAAQ7d,UAAUgqB,KAAO,WACrBtpB,KAAKod,SAASjkB,KAAKgF,MAAM,KAAMkE,YAGnC8a,EAAQ7d,UAAU+d,UAAY,SAAoBzd,EAAGpD,EAAGsjB,EAAGyJ,EAAGC,EAAG9rB,GACxD+rB,GAAiBpnB,aAClBrC,KAAK6oB,QAAUa,GAAKrnB,UAAWrC,KAAK6oB,SACpC7oB,KAAKspB,KAAK1pB,EAAG,IAAKpD,EAAG,IAAKsjB,EAAG,IAAKyJ,EAAG,IAAKC,EAAG,IAAK9rB,EAAG,OAGrDsC,KAAKspB,KAAK/Y,KAIlB4M,EAAQ7d,UAAUge,UAAY,SAAoBqM,EAAIC,GAClD5pB,KAAKqd,UAAU,EAAG,EAAG,EAAG,EAAGsM,EAAIC,IAGnCzM,EAAQ7d,UAAU4Q,MAAQ,SAAgB2Z,EAAIC,GAC1C9pB,KAAKqd,UAAUwM,EAAI,EAAG,EAAGC,EAAI,EAAG,IAGpC3M,EAAQ7d,UAAUyqB,OAAS,SAAiBC,GACxC,IAAIC,EAAMruB,KAAKquB,IAAID,GAAQE,EAAMtuB,KAAKsuB,IAAIF,GAC1ChqB,KAAKqd,UAAU4M,EAAKC,GAAMA,EAAKD,EAAK,EAAG,IAG3C9M,EAAQ7d,UAAU6qB,UAAY,WAC1BnqB,KAAKsoB,WAAY,EACjBtoB,KAAKspB,KAAK,KAAM/Y,IAGpB4M,EAAQ7d,UAAU8qB,QAAU,WACxBpqB,KAAKsoB,WAAY,EACjBtoB,KAAKspB,KAAK,KAAM/Y,IAGpB4M,EAAQ7d,UAAU+qB,iBAAmB,WACjC,IAAKrqB,KAAKsoB,UACN,MAAM,IAAI9pB,MAAM,oDAIxB2e,EAAQ7d,UAAUgrB,aAAe,WAC7B,IAAKtqB,KAAK8hB,MACN,MAAM,IAAItjB,MAAM,gDAIxB2e,EAAQ7d,UAAUirB,QAAU,SAAkBtc,EAAM+I,GAChDhX,KAAKqqB,mBACO,MAARpc,EACAA,EAAOjO,KAAK8hB,MACH7T,aAAgB+P,KACzB/P,EAAOjO,KAAK6hB,KAAK/D,QAAQ7P,IAEjB,MAAR+I,IACAA,EAAOhX,KAAK+oB,WAEhB/oB,KAAKuoB,eAAeta,EAAK0Q,eAAiB1Q,EAC1CjO,KAAK8hB,MAAQ7T,EACbjO,KAAK+oB,UAAY/R,EACjBhX,KAAKspB,KAAKrb,EAAK0Q,cAAe,IAAK3H,EAAM,MAAOzG,IAGpD4M,EAAQ7d,UAAUkrB,eAAiB,SAAyBxT,GACxDhX,KAAKqqB,mBACLrqB,KAAKspB,KAAKtS,EAAM,MAAOzG,IAG3B4M,EAAQ7d,UAAUmrB,qBAAuB,SAA+BC,GACpE1qB,KAAKqqB,mBACLrqB,KAAKspB,KAAKoB,EAAM,MAAOna,IAG3B4M,EAAQ7d,UAAUqrB,SAAW,SAAmB9iB,EAAM+iB,GAElD,GADA5qB,KAAKsqB,eACDziB,EAAKpN,OAAS,GAAKmwB,GAAkB5qB,KAAK8hB,iBAAiB9D,GAAS,CACpE,IACI9N,EAAQ0a,EADM5qB,KAAK8hB,MAAMM,aAAapiB,KAAK+oB,UAAWlhB,GACf,IAC3C7H,KAAKspB,KAAKpZ,EAAO,QAErBlQ,KAAKspB,KAAKtpB,KAAK8hB,MAAM3S,WAAWtH,GAAO,MAAO0I,IAGlD4M,EAAQ7d,UAAUurB,WAAa,SAAqBhjB,GAChD7H,KAAKsqB,eACLtqB,KAAKspB,KAAKtpB,KAAK8hB,MAAM3S,WAAWtH,GAAO,KAAM0I,IAGjD4M,EAAQ7d,UAAUwrB,QAAU,SAAkBC,EAAKnF,GAC/C,IAAIoF,EAAKhrB,KAAKirB,QAAQ,CAAE3uB,EAAGspB,EAAIjR,KAAMqS,EAAGpB,EAAI9Q,SACxCoW,EAAKlrB,KAAKirB,QAAQ,CAAE3uB,EAAGspB,EAAI/Q,MAAOmS,EAAGpB,EAAIhR,MAC7C5U,KAAK8oB,aAAa1tB,KAAK,IAAI0Y,EAAc,CACrC0K,KAAU5C,GAAE,SACZuF,QAAUvF,GAAE,QACZuP,KAAU,CAAEH,EAAG1uB,EAAG0uB,EAAGhE,EAAGkE,EAAG5uB,EAAG4uB,EAAGlE,GACjCoE,OAAU,CAAE,EAAG,EAAG,GAClBC,EAAU,IAAIvX,EAAc,CACxB0K,KAAO5C,GAAE,UACTD,EAAOC,GAAE,OACT0P,IAAO,IAAI5P,GAAUqP,SAKjC5N,EAAQ7d,UAAUisB,eAAiB,SAAyBhF,EAAGC,EAAGhqB,GAC9DwD,KAAKspB,KAAK/C,EAAG,IAAKC,EAAG,IAAKhqB,EAAG,MAAO+T,IAGxC4M,EAAQ7d,UAAUksB,WAAa,SAAqBpN,GAChDpe,KAAKyrB,eAAerN,GACpBpe,KAAK0rB,iBAAiBtN,GACtBpe,KAAK4oB,UAAYxK,GAGrBjB,EAAQ7d,UAAUosB,iBAAmB,SAA2BtN,GAC5D,GAAIA,EAAU,EAAG,CACb,IAAIG,EAAKve,KAAK6hB,KAAK1D,aAAane,KAAK4oB,SAAWxK,GAAS,GACzDpe,KAAKwoB,aAAajK,EAAGI,eAAiBJ,EACtCve,KAAKspB,KAAK/K,EAAGI,cAAe,MAAOpO,KAI3C4M,EAAQ7d,UAAUqsB,aAAe,SAAuBpF,EAAGC,EAAGhqB,GAC1DwD,KAAKspB,KAAK/C,EAAG,IAAKC,EAAG,IAAKhqB,EAAG,MAAO+T,IAGxC4M,EAAQ7d,UAAUmsB,eAAiB,SAAyBrN,GACxD,GAAIA,EAAU,EAAG,CACb,IAAIG,EAAKve,KAAK6hB,KAAK1D,aAAane,KAAK4oB,SAAWxK,GAAS,GACzDpe,KAAKwoB,aAAajK,EAAGI,eAAiBJ,EACtCve,KAAKspB,KAAK/K,EAAGI,cAAe,MAAOpO,KAI3C4M,EAAQ7d,UAAUqmB,SAAW,SAAmBiG,EAAYhG,GACxD5lB,KAAK6rB,OACL7rB,KAAKud,KAAKqI,EAAIjR,KAAMiR,EAAIhR,IAAKgR,EAAI1N,MAAO0N,EAAIzN,QAC5CnY,KAAKwd,OACAoO,EAAWpE,WACZxnB,KAAKqd,UAAUuI,EAAI1N,MAAO,EAAG,EAAG0N,EAAIzN,OAAQyN,EAAIjR,KAAMiR,EAAIhR,KAE9D,IACqCkX,EADjCtF,EAAId,GAAc1lB,KAAK6hB,KAAM+J,EAAYhG,GACzCmG,EAAQvF,EAAES,QAAQtI,cACtB3e,KAAK2oB,aAAaoD,GAASvF,EAAES,QACzBT,EAAEhN,WACFsS,EAAQtF,EAAEpI,QAAQO,cAClB3e,KAAKwoB,aAAasD,GAAStF,EAAEpI,QAC7Bpe,KAAKspB,KAAK,IAAMwC,EAAQ,SAE5B9rB,KAAKspB,KAAK,IAAMyC,EAAQ,MAAOxb,GAC/BvQ,KAAKgsB,WAGT7O,EAAQ7d,UAAU2sB,eAAiB,SAAyBC,EAAWC,GACnEnsB,KAAKspB,KAAK4C,EAAW,IAAKC,EAAW,KAAM5b,IAG/C4M,EAAQ7d,UAAU8sB,aAAe,SAAuBlU,GACpDlY,KAAKspB,KAAKpR,EAAO,KAAM3H,IAG3B4M,EAAQ7d,UAAU+sB,WAAa,SAAqBC,GAChDtsB,KAAKspB,KAAKgD,EAAS,KAAM/b,IAG7B4M,EAAQ7d,UAAUitB,YAAc,SAAsBC,GAClDxsB,KAAKspB,KAAKkD,EAAU,KAAMjc,IAG9B4M,EAAQ7d,UAAUmtB,eAAiB,SAAyBC,GACxD1sB,KAAKspB,KAAKoD,EAAa,KAAMnc,IAGjC4M,EAAQ7d,UAAUusB,KAAO,WACrB7rB,KAAKgpB,cAAc5tB,KAAK4E,KAAK2sB,YAC7B3sB,KAAKspB,KAAK,IAAK/Y,IAGnB4M,EAAQ7d,UAAU0sB,QAAU,WACxBhsB,KAAKspB,KAAK,IAAK/Y,GACfvQ,KAAK2sB,SAAS3sB,KAAKgpB,cAAcvC,QAIrCtJ,EAAQ7d,UAAUstB,OAAS,SAAiBtwB,EAAG0qB,GAC3ChnB,KAAKspB,KAAKhtB,EAAG,IAAK0qB,EAAG,KAAMzW,IAG/B4M,EAAQ7d,UAAUutB,OAAS,SAAiBvwB,EAAG0qB,GAC3ChnB,KAAKspB,KAAKhtB,EAAG,IAAK0qB,EAAG,KAAMzW,IAG/B4M,EAAQ7d,UAAUwtB,OAAS,SAAiBC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAC5DptB,KAAKspB,KAAKyD,EAAI,IAAKC,EAAI,IAAKC,EAAI,IAAKC,EAAI,IAAKC,EAAI,IAAKC,EAAI,KAAM7c,IAGrE4M,EAAQ7d,UAAU+tB,QAAU,SAAkBN,EAAIC,EAAIG,EAAIC,GACtDptB,KAAKspB,KAAKyD,EAAI,IAAKC,EAAI,IAAKG,EAAI,IAAKC,EAAI,KAAM7c,IAGnD4M,EAAQ7d,UAAUguB,QAAU,SAAkBL,EAAIC,EAAIC,EAAIC,GACtDptB,KAAKspB,KAAK2D,EAAI,IAAKC,EAAI,IAAKC,EAAI,IAAKC,EAAI,KAAM7c,IAGnD4M,EAAQ7d,UAAUiuB,MAAQ,WACtBvtB,KAAKspB,KAAK,IAAK/Y,IAGnB4M,EAAQ7d,UAAUie,KAAO,SAAejhB,EAAG0qB,EAAGrqB,EAAG6wB,GAC7CxtB,KAAKspB,KAAKhtB,EAAG,IAAK0qB,EAAG,IAAKrqB,EAAG,IAAK6wB,EAAG,MAAOjd,IAGhD4M,EAAQ7d,UAAUmuB,QAAU,SAAkBnxB,EAAG0qB,EAAG0G,EAAIC,GACpD,SAASC,EAAGC,GAAK,OAAOvxB,EAAIuxB,EAC5B,SAASC,EAAGD,GAAK,OAAO7G,EAAI6G,EAI5B,IAAIE,EAAI,kBAER/tB,KAAK4sB,OAAOgB,EAAG,GAAIE,EAAGH,IACtB3tB,KAAK8sB,OACDc,EAAGF,EAAKK,GAAKD,EAAGH,GAChBC,EAAGF,GAAUI,EAAGH,EAAKI,GACrBH,EAAGF,GAAUI,EAAG,IAEpB9tB,KAAK8sB,OACDc,EAAGF,GAAUI,GAAIH,EAAKI,GACtBH,EAAGF,EAAKK,GAAKD,GAAIH,GACjBC,EAAG,GAAUE,GAAIH,IAErB3tB,KAAK8sB,OACDc,GAAIF,EAAKK,GAAKD,GAAIH,GAClBC,GAAIF,GAAUI,GAAIH,EAAKI,GACvBH,GAAIF,GAAUI,EAAG,IAErB9tB,KAAK8sB,OACDc,GAAIF,GAAUI,EAAGH,EAAKI,GACtBH,GAAIF,EAAKK,GAAKD,EAAGH,GACjBC,EAAG,GAAWE,EAAGH,KAIzBxQ,EAAQ7d,UAAU0uB,OAAS,SAAiB1xB,EAAG0qB,EAAGT,GAC9CvmB,KAAKytB,QAAQnxB,EAAG0qB,EAAGT,EAAGA,IAG1BpJ,EAAQ7d,UAAU2uB,OAAS,WACvBjuB,KAAKspB,KAAK,IAAK/Y,IAGnB4M,EAAQ7d,UAAU4uB,IAAM,WACpBluB,KAAKspB,KAAK,IAAK/Y,IAGnB4M,EAAQ7d,UAAUke,KAAO,WACrBxd,KAAKspB,KAAK,MAAO/Y,IAGrB4M,EAAQ7d,UAAU6uB,WAAa,WAC3BnuB,KAAKspB,KAAK,MAAO/Y,IAGrB4M,EAAQ7d,UAAU8uB,YAAc,WAC5BpuB,KAAKspB,KAAK,IAAK/Y,IAGnB4M,EAAQ7d,UAAU+uB,KAAO,WACrBruB,KAAKspB,KAAK,IAAK/Y,IAGnB4M,EAAQ7d,UAAUgvB,WAAa,WAC3BtuB,KAAKspB,KAAK,IAAK/Y,IAGnB4M,EAAQ7d,UAAU8Z,UAAY,SAAoB5D,GAC9C,IAAI2B,EAAMnX,KAAK6hB,KAAK5D,SAASzI,GACzB2B,IACAnX,KAAKyoB,YAAYtR,EAAIwH,eAAiBxH,EACtCnX,KAAKspB,KAAKnS,EAAIwH,cAAe,MAAOpO,KAI5C4M,EAAQ7d,UAAUivB,QAAU,SAAkB1O,GAC1C,IAAI1V,EAAOnK,KACX6f,EAAI9W,MAAM,UAAUgD,SAAQ,SAASyiB,GACjCrkB,EAAKmf,KAAK,KAAMkF,EAAMje,OAK9B4M,EAAQ7d,UAAUqtB,SAAW,SAAmB8B,GAC5C,GAAW,MAAPA,EAIA,MAAO,CACHrQ,QAASpe,KAAK4oB,SACd8F,OAAQ1uB,KAAK6oB,SALjB7oB,KAAK4oB,SAAW6F,EAAIrQ,QACpBpe,KAAK6oB,QAAU4F,EAAIC,QAS3BvR,EAAQ7d,UAAU2rB,QAAU,SAAkB0D,GAC1C,IAAIjoB,EAAI1G,KAAK6oB,QACTjpB,EAAI8G,EAAE,GAAIlK,EAAIkK,EAAE,GAAIoZ,EAAIpZ,EAAE,GAAI6iB,EAAI7iB,EAAE,GAAI8iB,EAAI9iB,EAAE,GAAIhJ,EAAIgJ,EAAE,GAC5D,MAAO,CACHpK,EAAGsD,EAAE+uB,EAAEryB,EAAIwjB,EAAE6O,EAAE3H,EAAIwC,EACnBxC,EAAGxqB,EAAEmyB,EAAEryB,EAAIitB,EAAEoF,EAAE3H,EAAItpB,IAIpByf,EAxWG,CAyWZrJ,IAEF,SAAS8a,GAAQx0B,GACb,OAAOA,EAAIE,QAAQ,uBAAwB,MAG/C,SAASu0B,GAAaC,GAElB,IACIpoB,EADK,yIACEgP,KAAKoZ,GAChB,IAAKpoB,EACD,MAAO,CAAE2b,SAAU,GAAI0M,WAAY,cAEvC,IAAI1M,EAAW3b,EAAE,GAAK6I,SAAS7I,EAAE,GAAI,IAAM,GAC3C,MAAO,CACHsoB,OAAatoB,EAAE,IAA4B,UAAtBA,EAAE,GAAG6N,cAC1B0a,QAAavoB,EAAE,GACfwoB,KAAaxoB,EAAE,IAAM,YAAYmN,KAAKnN,EAAE,IACxC2b,SAAaA,EACb8M,WAAazoB,EAAE,IAAe,UAATA,EAAE,IAAkB2b,EAAW9S,SAAS7I,EAAE,IAAK,IAAM,KAC1EqoB,WAAaroB,EAAE,IAAIqC,MAAM,YAAYlJ,IAAI+uB,KAIjD,SAASQ,GAAWC,GAChB,SAASC,EAAS1uB,GAOd,OANIyuB,EAAMH,OACNtuB,GAAQ,SAERyuB,EAAML,SACNpuB,GAAQ,WAELA,EAAK2T,cAEhB,IACI3T,EAAM4U,EADNuZ,EAAaM,EAAMN,WAEvB,GAAIA,aAAsB1xB,MACtB,IAAK,IAAI9C,EAAI,EAAGA,EAAIw0B,EAAWt0B,SAC3BmG,EAAO0uB,EAASP,EAAWx0B,MAC3Bib,EAAM+Z,GAAc3uB,OAFiBrG,QAQzCib,EAAM+Z,GAAcR,EAAWxa,eAEnC,KAAqB,mBAAPiB,GACVA,EAAMA,IAKV,OAHKA,IACDA,EAAM,eAEHA,EAGX,IAAI+Z,GAAgB,CAChBC,MAA6B,cAC7B,aAA6B,aAC7B,eAA6B,eAC7B,oBAA6B,mBAC7B,aAA6B,YAC7B,kBAA6B,iBAC7B,oBAA6B,oBAC7B,yBAA6B,wBAC7BC,UAA6B,UAC7B,iBAA6B,eAC7B,mBAA6B,kBAC7B,wBAA6B,sBAC7BC,aAA6B,eAC7B,oBAA6B,eAC7B,sBAA6B,eAC7B,2BAA6B,gBAGjC,SAASC,GAAUC,EAAOhvB,GACtBgvB,EAAQA,EAAMrb,cACdgb,GAAcK,GAAS,WACnB,OAAOL,GAAc3uB,IAEzB2uB,GAAcK,EAAQ,SAAW,WAC7B,OAAOL,GAAc3uB,EAAO,UAEhC2uB,GAAcK,EAAQ,WAAa,WAC/B,OAAOL,GAAc3uB,EAAO,YAEhC2uB,GAAcK,EAAQ,gBAAkB,WACpC,OAAOL,GAAc3uB,EAAO,iBAiDpC,SAAS8oB,GAAK9pB,EAAGpD,GACb,IAAImU,EAAK/Q,EAAE,GAAI0R,EAAK1R,EAAE,GAAIqS,EAAKrS,EAAE,GAAIiwB,EAAKjwB,EAAE,GAAIkwB,EAAKlwB,EAAE,GAAImwB,EAAKnwB,EAAE,GAC9DgR,EAAKpU,EAAE,GAAI+U,EAAK/U,EAAE,GAAI0V,EAAK1V,EAAE,GAAIwzB,EAAKxzB,EAAE,GAC5C,MAAO,CACHmU,EAAGC,EAAKU,EAAGY,EAAavB,EAAGY,EAAKD,EAAG0e,EACnC/d,EAAGrB,EAAKif,EAAG3d,EAAaD,EAAGV,EAAKse,EAAGG,EACnCF,EAAGlf,EAAKmf,EAAG7d,EAJsC1V,EAAE,GAI3BszB,EAAGve,EAAKwe,EAAGC,EAJyBxzB,EAAE,IAQtE,SAASitB,GAAiB/iB,GACtB,OAAgB,IAATA,EAAE,IAAqB,IAATA,EAAE,IAAqB,IAATA,EAAE,IAAqB,IAATA,EAAE,IAAqB,IAATA,EAAE,IAAqB,IAATA,EAAE,GApDnFipB,GAAU,kBAAoB,SAC9BA,GAAU,cAAoB,aAC9BA,GAAU,QAAoB,cAC9BA,GAAU,YAAoB,cAC9BA,GAAU,UAAoB,cAC9BA,GAAU,SAAoB,cAC9BA,GAAU,UAAoB,cAC9BA,GAAU,SAAoB,aAC9BA,GAAU,cAAoB,aA+C9B,IAAIM,GAAsB,CACtB5B,KAAiB,EACjBJ,OAAiB,EACjBiC,cAAiB,EACjBC,UAAiB,EACjBC,YAAiB,EACjBC,cAAiB,EACjBC,eAAiB,EACjB9S,KAAiB,GASjB+S,GAAwBN,GAExBO,GAAgB,CAChBC,KAAiB,CAAE,GACnBC,QAAiB,CAAE,EAAG,EAAG,EAAG,GAC5BC,IAAiB,CAAE,EAAG,GACtBC,SAAiB,CAAE,EAAG,GACtBC,YAAiB,CAAE,EAAG,EAAG,EAAG,GAC5BC,eAAiB,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,GAClCC,MAAiB,IAGjBC,GAAW,CACXC,KAAS,EACTtzB,MAAS,EACTuzB,OAAS,GAGTC,GAAY,CACZC,MAAQ,EACRzzB,MAAQ,EACR0zB,MAAQ,GAGZ,SAASC,GAASC,EAAO7a,GACrB,IAAI8a,EAAQ,GAAI5a,EAAS,GAAIvC,EAAUkd,EAAMld,QAE7C,SAASD,EAAUxT,EAAM0Z,EAAQ2K,GAI7B,OAHKA,IACDA,EAAO5Q,GAEP4Q,EAAKnsB,KAAyB,MAAlBmsB,EAAKnsB,IAAI8H,GACdqkB,EAAKnsB,IAAI8H,GAEb0Z,EAGX,IAAImX,EAAYrd,EAAU,aACtBsd,EAAStd,EAAU,SAvCH,KAyEpB,SAASud,IACL,OAAMzpB,EAAQ,GAAd,CAIA,IAAIpP,EAAM,IAAI,EAAc,CACxB84B,SAAYxd,EAAU,YACtByd,MAAYzd,EAAU,SACtB0d,OAAY1d,EAAU,UACtB2d,QAAY3d,EAAU,WACtB4d,SAAY5d,EAAU,YACtB6d,QAAY7d,EAAU,WACtByK,KAAYzK,EAAU,QAEtB8d,UAAY9d,EAAU,eAsCtBqd,EACAF,EAAMY,SAASpmB,QAAQqmB,GAEvBA,EAASb,GAGb7a,EAAS5d,EAAIkI,SAAUlI,GAzCvB,SAASs5B,EAASb,GACd,IAAIld,EAAUkd,EAAMld,QAEhB1Y,EAwchB,SAAkB02B,GACd,IAGIC,EAHAC,GAAU,EACV7D,EAAS90B,EAAc44B,OAAOC,OAC9BC,EAAa,KAEjB,GACIJ,GAAU,EACVD,EAAOM,EAAIN,SACNA,GAAQC,GACjB,MAAO,CAAED,KAAMA,EAAMrQ,KAAM0Q,GAE3B,SAASE,EAAOC,GAEZ,OADAP,GAAU,EACHO,EAGX,SAASC,EAAQC,GACb,OAAQA,EAAMD,WAAaC,EAAM3U,UAAY,IACnC4U,GAAWD,EAAM1E,SACjB2E,GAAWD,EAAM9E,WAG/B,SAASgF,EAASrzB,GAEd,IADA,IAAIpD,EAAI,GACCjC,EAAI,EAAGA,EAAIqF,EAAEnF,SAAUF,EAAG,CAC/B,IAAI24B,EAAKP,EAAI/yB,EAAErF,IACL,MAAN24B,GACA12B,EAAEpB,KAAK83B,GAGf,OAAO12B,EAGX,SAAS22B,EAAaJ,EAAOr1B,GACzB,IAAI01B,EAAcb,EACdc,EAAa3E,EAEbqE,EAAM1V,cACNqR,EAASA,EAAO4E,aAAaP,EAAM1V,YAAYqR,WAGnD,IAAIlR,EAAOuV,EAAMvV,OACbA,IACAA,EAAOA,EAAKwE,UAERxE,EAAOA,EAAKwE,KAAK0M,GACjB6D,EAAUA,EAAU34B,EAAcuxB,KAAKoI,UAAUhB,EAAS/U,GAAQA,GAI1E,IACI,OAAO9f,IAEX,QACI60B,EAAUa,EACV1E,EAAS2E,GAIjB,SAASG,EAAUT,GACf,GAAe,MAAXR,EACA,OAAO,EAEX,IAAI3M,EAAMmN,EAAMU,UAAUzR,KAAK0M,GAI/B,OAHI6D,GAAW3M,IACXA,EAAMhsB,EAAcuxB,KAAKoI,UAAU3N,EAAK2M,IAErC3M,EAGX,SAAS+M,EAAII,GACT,OAAOI,EAAaJ,GAAO,WACvB,KAAMA,aAAiBv5B,EAAQquB,OAASkL,aAAiBv5B,EAAQk6B,WAAY,CACzE,IAAI9N,EAAM4N,EAAUT,GACpB,IAAKnN,EACD,OAAOgN,EAAO,MAElBF,EAAaA,EAAa94B,EAAcuxB,KAAKwI,MAAMjB,EAAY9M,GAAOA,EAE1E,OAAOgO,GAAS,CACZC,KAAM,SAASd,GACX,OAA8B,IAA1BA,EAAMe,SAASr5B,QAAiBq4B,EAAQC,GAGrCA,EAFIH,EAAO,OAItBc,UAAW,SAASX,GAChB,IAAKD,EAAQC,GACT,OAAOH,EAAO,MAElB,IAAIM,EAAK,IAAI15B,EAAQk6B,UAAUX,EAAM1e,SAErC,OADA6e,EAAGa,MAAQd,EAASF,EAAMgB,OACF,IAApBb,EAAGa,MAAMt5B,OACFm4B,EAAO,MAEXM,GAEXc,OAAQ,SAASjB,GACb,OAAKD,EAAQC,GAGNA,EAFIH,EAAO,OAItBqB,IAAK,SAASlB,GACV,OAAKD,EAAQC,GAGNA,EAFIH,EAAO,OAItBsB,KAAM,SAASnB,GACX,MAAK,KAAKlf,KAAKkf,EAAMlW,YAAeiW,EAAQC,GAGrCA,EAFIH,EAAO,OAItBxb,MAAO,SAAS2b,GACZ,OAAMA,EAAMD,WAAaC,EAAM3U,UAAY,EAGpC2U,EAFIH,EAAO,OAItB/K,MAAO,SAASkL,GACZ,KAAMA,EAAMD,WAAaC,EAAM3U,UAAY,GACvC,OAAOwU,EAAO,MAElB,IAAIM,EAAK,IAAI15B,EAAQquB,MAAMkL,EAAM1e,SAGjC,OAFA6e,EAAGf,SAAWc,EAASF,EAAMZ,UAC7Be,EAAGiB,SAAWpB,EAAMoB,SAChBpB,IAAUV,GAA+B,IAAvBa,EAAGf,SAAS13B,QAAiBs4B,EAAMoB,SAGlDjB,EAFIN,EAAO,OAItBzH,KAAM,SAAS4H,GACX,OAAKD,EAAQC,GAGNA,EAFIH,EAAO,QAIvBG,OAnlBOqB,CAAS7C,GACfvP,EAAOrmB,EAAIqmB,KACfuP,EAAQ51B,EAAI02B,KAGZ,IAAI/d,EAAYF,EAAU,YAAaA,EAAU,YAAa,QAASC,GAAUggB,GAAY,EAC7F,GAAiB,QAAb/f,EACA,GAAI0N,EAAM,CACN,IAAIhL,EAAOgL,EAAKsS,UAChBhgB,EAAY,CAAE0C,EAAKkB,MAAOlB,EAAKmB,QAC/Bkc,GAAY,EACZ,IAAIE,EAASvS,EAAKwS,aAClB74B,EAAM,IAAInC,EAAQquB,OACdxK,UAAU,IAAIzjB,EAAc44B,OAAO,EAAG,EAAG,EAAG,GAAI+B,EAAOj4B,GAAIi4B,EAAOvN,IACtErrB,EAAI84B,OAAOlD,GACXA,EAAQ51B,OAGR2Y,EAAY,KAWpBogB,GAAYnD,EANLz4B,EAAI2jB,QAAQ,CACfnI,UAAYA,EACZI,OAAYN,EAAU,SAAUA,EAAU,UAAWC,GACrDggB,UAAYA,EACZM,UAAYvgB,EAAU,YAAaA,EAAU,aAAa,GAAQC,KAE7Cvb,IAjFjCuc,IAEAkc,EAAMqD,UAAS,SAASC,GACpBjB,GAAS,CACLxc,MAAO,SAASyd,GACZ,IAAIrf,EAAMqf,EAAQnc,MACd1B,EAAO6d,EAAQ7S,OAAOhL,KAC1B,GAAI0a,EAAQ,CACR,IAAI1L,EAAOpP,EAAOpB,GAClBwB,EAAO,CACLkB,MAAOtc,KAAKk5B,KAAK9d,EAAKkB,MAAQwZ,EAAS,IACvCvZ,OAAQvc,KAAKk5B,KAAK9d,EAAKmB,OAASuZ,EAAS,KAGvC1L,IACFhP,EAAKkB,MAAQtc,KAAKC,IAAImqB,EAAK9N,MAAOlB,EAAKkB,OACvClB,EAAKmB,OAASvc,KAAKC,IAAImqB,EAAK7N,OAAQnB,EAAKmB,SAI/CvB,EAAOpB,GAAOwB,GAElBkd,KAAM,SAASW,GACX,IACIrf,EAAM4Z,GADEP,GAAagG,EAAQxgB,QAAQpG,OAErCujB,EAAM52B,QAAQ4a,GAAO,GACrBgc,EAAMp2B,KAAKoa,KAGpBqf,MAgEP,IAAI3sB,EAAQ,EACZqN,EAAUic,EAAOG,GACjBhb,EAAWC,EAAQ+a,EAAM,CACrB7a,YAAc1C,EAAU,cAAe,KACvC2C,QAAc3C,EAAU,WAAW,KAI3C,SAASyF,GAAU0X,EAAO7a,GACtB4a,GAASC,GAAO,SAASp4B,GACrBud,EAAS,+BAAiCvd,EAAKwF,aAIvD,SAASo2B,GAAOxD,EAAO7a,GACnB4a,GAASC,GAAO,SAASp4B,GACrBud,EAAS,IAAI1d,OAAOg8B,KAAK,CAAE77B,EAAK4C,OAAS,CAAEsQ,KAAM,wBAwBzD,SAASunB,GAASqB,EAAUJ,GACxB,IAAIK,EAAUD,EAASJ,EAAQM,UAC/B,OAAID,EACOA,EAAQ11B,KAAKrB,MAAM+2B,EAAS7yB,WAEhCwyB,EAGX,SAASH,GAAYG,EAAS3X,EAAMpkB,GAC5B+7B,EAAQxgB,QAAQ+gB,WAChBlY,EAAKqR,QAAQ,UAAYsG,EAAQxgB,QAAQ+gB,WAG7C,IAAI/X,EAAYwX,EAAQxX,YACpBe,EAAUyW,EAAQzW,UAWtB,GATAlB,EAAK2O,OAEU,MAAXzN,GAAmBA,EAAU,GAC7BlB,EAAKsO,WAAWpN,GA+BxB,SAA0ByW,EAAS3X,GAC/B,IAAI+Q,EAAS4G,EAAQ5G,QAAU4G,EAAQ5G,SACvC,IAAKA,EACD,OAGJ,IAAI3H,EAAQ2H,EAAO3H,MACnB,GAAIA,EAAO,CAEP,GAAa,OADbA,EAAQ+O,GAAa/O,IAEjB,OAEJpJ,EAAKqO,eAAejF,EAAMC,EAAGD,EAAME,EAAGF,EAAM9pB,GAC7B,GAAX8pB,EAAM1mB,GACNsd,EAAKwO,iBAAiBpF,EAAM1mB,GAIpC,IAAIsY,EAAQ+V,EAAO/V,MACnB,GAAa,MAATA,EAAe,CACf,GAAc,IAAVA,EACA,OAEJgF,EAAKkP,aAAalU,GAGtB,IAAIod,EAAWrH,EAAOqH,SAClBA,GACApY,EAAK+O,eAAeuE,GAAc8E,GAAW,GAGjD,IAAIhJ,EAAU2B,EAAO3B,QACjBA,GACApP,EAAKmP,WAAW2E,GAAS1E,IAG7B,IAAIE,EAAWyB,EAAOzB,SAClBA,GACAtP,EAAKqP,YAAY4E,GAAU3E,IAG/B,IAAIpO,EAAU6P,EAAO7P,QACN,MAAXA,GACAlB,EAAKwO,iBAAiBtN,GAvE1BmX,CAAiBV,EAAS3X,GA2E9B,SAAwB2X,EAAS3X,GAC7B,IAAImR,EAAOwG,EAAQxG,MAAQwG,EAAQxG,OACnC,IAAKA,EACD,OAGJ,GAAIA,aAAgB70B,EAAQg8B,SACxB,OAGJ,IAAIlP,EAAQ+H,EAAK/H,MACjB,GAAIA,EAAO,CAEP,GAAa,OADbA,EAAQ+O,GAAa/O,IAEjB,OAEJpJ,EAAKyO,aAAarF,EAAMC,EAAGD,EAAME,EAAGF,EAAM9pB,GAC3B,GAAX8pB,EAAM1mB,GACNsd,EAAKuO,eAAenF,EAAM1mB,GAIlC,IAAIwe,EAAUiQ,EAAKjQ,QACJ,MAAXA,GACAlB,EAAKuO,eAAerN,GAlGxBqX,CAAeZ,EAAS3X,GAEpBG,EAAW,CACX,IAAI3W,EAAI2W,EAAUqR,SAClBxR,EAAKG,UAAU3W,EAAE9G,EAAG8G,EAAElK,EAAGkK,EAAEoZ,EAAGpZ,EAAE6iB,EAAG7iB,EAAE8iB,EAAG9iB,EAAEhJ,IAkGlD,SAAqBm3B,EAAS3X,EAAMpkB,GAEhC,IAAI0kB,EAAOqX,EAAQrX,OACfA,IACAkY,GAAUlY,EAAMN,EAAMpkB,GACtBokB,EAAKM,QApGTmY,CAAYd,EAAS3X,EAAMpkB,GAE3B86B,GAAS,CACLC,KAAY+B,GACZlC,UAAYmC,GACZ7B,OAAY8B,GACZ7B,IAAY8B,GACZ7B,KAAY8B,GACZ5e,MAAY6e,GACZpO,MAAYqO,GACZ/K,KAAYgL,IACbtB,EAAS3X,EAAMpkB,GAElBokB,EAAK8O,UAED6I,EAAQxgB,QAAQ+gB,WAChBlY,EAAKqR,QAAQ,QAAUsG,EAAQxgB,QAAQ+gB,WA2F/C,SAASpC,GAAWoD,GAChB,OAAQA,IACCA,aAAiB58B,EAAQg8B,UACxBY,EAAM9P,QAAU,wBAAwBzS,KAAKuiB,EAAM9P,SACnC,MAAf8P,EAAMle,OAAiBke,EAAMle,MAAQ,KACpB,MAAjBke,EAAMhY,SAAmBgY,EAAMhY,QAAU,IAGxD,SAASiY,GAAcxB,EAAS3X,EAAMpkB,EAAKm1B,GACvC,IAAII,EAAOwG,EAAQxG,OACnB,GAAIA,aAAgB70B,EAAQg8B,SAAU,CAC9BvH,EACA/Q,EAAKiR,aAELjR,EAAKM,OAET,IACInhB,EAAOqO,EADPmb,EAAWwI,aAAgB70B,EAAQ88B,eAEnCzQ,GACAxpB,EAAQ,CAAEC,EAAG+xB,EAAKkI,SAASj6B,EAAI0qB,EAAGqH,EAAKkI,SAASvP,EAAIT,EAAG,GACvD7b,EAAQ,CAAEpO,EAAG+xB,EAAKkI,SAASj6B,EAAI0qB,EAAGqH,EAAKkI,SAASvP,EAAIT,EAAG8H,EAAKmI,YAE5Dn6B,EAAQ,CAAEC,EAAG+xB,EAAKhyB,QAAQC,EAAI0qB,EAAGqH,EAAKhyB,QAAQ2qB,GAC9Ctc,EAAQ,CAAEpO,EAAG+xB,EAAK3jB,MAAMpO,EAAM0qB,EAAGqH,EAAK3jB,MAAMsc,IAGhD,IAAIjB,EAAQsI,EAAKtI,MAAM0Q,WAAW52B,KAAI,SAAS62B,GAC3C,IAAIl7B,EAASk7B,EAAKl7B,SAEdA,EADA,KAAKqY,KAAKrY,GACDsE,WAAWtE,GAAU,IAErBsE,WAAWtE,GAExB,IAAI8qB,EAAQ+O,GAAaqB,EAAKpQ,SAE9B,OADAA,EAAM1mB,GAAK82B,EAAKtY,UACT,CACH5iB,OAAQA,EACR8qB,MAAOA,MAMfP,EAAMvF,QAAQuF,EAAM,IACpBA,EAAM3qB,KAAK2qB,EAAMA,EAAMtrB,OAAS,IAEhC,IAAIkrB,EAAW,CACX6B,UAAY6G,EAAK7G,YACjBnb,KAAYwZ,EAAW,SAAW,SAClCxpB,MAAYA,EACZqO,IAAYA,EACZqb,MAAYA,GAEZH,EAAMiP,EAAQpB,UACdkD,EAAK/Q,EAAIgR,UAAW5f,EAAO4O,EAAI0O,UAQnC,OAPA1O,EAAM,CACFjR,KAASgiB,EAAGr6B,EACZsY,IAAS+hB,EAAG3P,EACZ9O,MAASlB,EAAKkB,MACdC,OAASnB,EAAKmB,QAElB+E,EAAKyI,SAASA,EAAUC,IACjB,GAIf,SAASiR,GAAgBhC,EAAS3X,EAAMpkB,GAChCk6B,GAAW6B,EAAQxG,SAAW2E,GAAW6B,EAAQ5G,UAC5CoI,GAAcxB,EAAS3X,EAAMpkB,GAAK,IACnCokB,EAAKoR,aAEF0E,GAAW6B,EAAQxG,QACrBgI,GAAcxB,EAAS3X,EAAMpkB,GAAK,IACnCokB,EAAKmR,OAEF2E,GAAW6B,EAAQ5G,UAC1B/Q,EAAK+Q,SAIL/Q,EAAKgR,MAiCb,SAASwH,GAAUb,EAAS3X,EAAMpkB,GAC9B,IAAIg7B,EAAWe,EAAQf,SACvB,GAAwB,IAApBA,EAASr5B,SA/BjB,SAAuBq8B,EAAM5Z,GACzB,IAAI4W,EAAWgD,EAAKhD,SACpB,GAAuB,GAAnBA,EAASr5B,QAAeq8B,EAAKziB,QAAQ0iB,OAAQ,CAG7C,IADA,IAAIn3B,EAAI,GACCrF,EAAI,EAAGA,EAAIu5B,EAASr5B,SAAUF,EAAG,CACtC,GAAIu5B,EAASv5B,GAAGy8B,YACZ,OAAO,EAEXp3B,EAAErF,GAAKu5B,EAASv5B,GAAG08B,SASvB,GAJIr3B,EAAE,GAAGonB,GAAKpnB,EAAE,GAAGonB,GAAKpnB,EAAE,GAAGtD,GAAKsD,EAAE,GAAGtD,GAAKsD,EAAE,GAAGonB,GAAKpnB,EAAE,GAAGonB,GAAKpnB,EAAE,GAAGtD,GAAKsD,EAAE,GAAGtD,GAE3EsD,EAAE,GAAGtD,GAAKsD,EAAE,GAAGtD,GAAKsD,EAAE,GAAGonB,GAAKpnB,EAAE,GAAGonB,GAAKpnB,EAAE,GAAGtD,GAAKsD,EAAE,GAAGtD,GAAKsD,EAAE,GAAGonB,GAAKpnB,EAAE,GAAGonB,EAQ3E,OAHA9J,EAAKK,KAAK3d,EAAE,GAAGtD,EAAGsD,EAAE,GAAGonB,EACbpnB,EAAE,GAAGtD,EAAIsD,EAAE,GAAGtD,EACdsD,EAAE,GAAGonB,EAAIpnB,EAAE,GAAGonB,IACjB,GAUVkQ,CAAcrC,EAAS3X,GAAY,CACpC,IAAK,IAAI8I,EAAMzrB,EAAI,EAAGA,EAAIu5B,EAASr5B,SAAUF,EAAG,CAC5C,IAAI48B,EAAMrD,EAASv5B,GACf08B,EAASE,EAAIF,SACjB,GAAKjR,EAEE,CACH,IAAIoR,EAAUpR,EAAKqR,aACfL,EAAYG,EAAIH,YAChBI,GAAWJ,EACX9Z,EAAK4P,OACDsK,EAAQ96B,EAAM86B,EAAQpQ,EACtBgQ,EAAU16B,EAAI06B,EAAUhQ,EACxBiQ,EAAO36B,EAAO26B,EAAOjQ,GAGzB9J,EAAK2P,OAAOoK,EAAO36B,EAAG26B,EAAOjQ,QAXjC9J,EAAK0P,OAAOqK,EAAO36B,EAAG26B,EAAOjQ,GAcjChB,EAAOmR,EAEPtC,EAAQxgB,QAAQ0iB,QAChB7Z,EAAKqQ,SAKjB,SAASqI,GAASf,EAAS3X,EAAMpkB,GAC7B48B,GAAUb,EAAS3X,GACnB2Z,GAAgBhC,EAAS3X,GAG7B,SAAS2Y,GAAchB,EAAS3X,EAAMpkB,GAElC,IADA,IAAIi7B,EAAQc,EAAQd,MACXx5B,EAAI,EAAGA,EAAIw5B,EAAMt5B,SAAUF,EAChCm7B,GAAU3B,EAAMx5B,GAAI2iB,GAExB2Z,GAAgBhC,EAAS3X,GAG7B,SAAS4Y,GAAWjB,EAAS3X,EAAMpkB,GAC/B,IAAI0tB,EAAIqO,EAAQh7B,WAChBqjB,EAAK8Q,OAAOxH,EAAE+P,OAAOj6B,EAAGkqB,EAAE+P,OAAOvP,EAAGR,EAAEgQ,QACtCK,GAAgBhC,EAAS3X,GAG7B,SAAS6Y,GAAQlB,EAAS3X,EAAMpkB,GAC5B,IAAIw+B,EAASzC,EAAQh7B,WAAW09B,cAChCra,EAAK0P,OAAO0K,EAAO,GAAGh7B,EAAGg7B,EAAO,GAAGtQ,GACnC,IAAK,IAAIzsB,EAAI,EAAGA,EAAI+8B,EAAO78B,QACvByiB,EAAK4P,OACDwK,EAAO/8B,GAAG+B,EAAGg7B,EAAO/8B,KAAKysB,EACzBsQ,EAAO/8B,GAAG+B,EAAGg7B,EAAO/8B,KAAKysB,EACzBsQ,EAAO/8B,GAAG+B,EAAGg7B,EAAO/8B,KAAKysB,GAGjC6P,GAAgBhC,EAAS3X,GAG7B,SAAS8Y,GAASnB,EAAS3X,GACvB,IAEIwN,EAFA2E,EAAQR,GAAagG,EAAQxgB,QAAQpG,MACrC7P,EAAMy2B,EAAQ2C,UAEd3C,EAAQxG,QAAUwG,EAAQ5G,SAC1BvD,EAAO6F,GAAsBL,cACtB2E,EAAQxG,OACf3D,EAAO6F,GAAsBlC,KACtBwG,EAAQ5G,WACfvD,EAAO6F,GAAsBtC,QAGjC/Q,EAAKG,UAAU,EAAG,EAAG,GAAI,EAAGjf,EAAI9B,EAAG8B,EAAI4oB,EAAIqI,EAAMhN,UACjDnF,EAAKiN,YACLjN,EAAKqN,QAAQ6E,GAAWC,GAAQA,EAAMhN,UACtCnF,EAAKuN,qBAAqBC,GAC1BxN,EAAKyN,SAASkK,EAAQhY,UAAWgY,EAAQ4C,SAAW5C,EAAQ4C,SAASvf,QAAU,MAC/EgF,EAAKkN,UAGT,SAAS8L,GAAUrB,EAAS3X,EAAMpkB,GAC1B+7B,EAAQV,UACRjX,EAAK4N,QAAQ+J,EAAQV,SAAS3e,IAAKqf,EAAQV,UAG/C,IADA,IAAIhC,EAAW0C,EAAQ1C,SACd53B,EAAI,EAAGA,EAAI43B,EAAS13B,SAAUF,EACnCm6B,GAAYvC,EAAS53B,GAAI2iB,EAAMpkB,GAIvC,SAASm9B,GAAYpB,EAAS3X,GAC1B,IAAI1H,EAAMqf,EAAQnc,MAClB,GAAKlD,EAAL,CAIA,IAAI+H,EAAOsX,EAAQtX,OACfoZ,EAAKpZ,EAAKiX,YACVkD,EAAKna,EAAK+W,UACdpX,EAAKG,UAAUqa,EAAGxf,MAAO,EAAG,GAAIwf,EAAGvf,OAAQwe,EAAGr6B,EAAGq6B,EAAG3P,EAAI0Q,EAAGvf,QAC3D+E,EAAK9D,UAAU5D,IAGnB,SAAS2gB,GAAStB,EAAS3X,EAAMpkB,GAC7B,IAAIe,EAAWg7B,EAAQh7B,WACnB89B,EAAM99B,EAAS+9B,aACflK,EAAKiK,EAAI,GACThK,EAAKgK,EAAI,GACF,IAAPjK,GAAmB,IAAPC,GACZzQ,EAAKK,KAAK1jB,EAAS06B,OAAOj4B,EAAGzC,EAAS06B,OAAOvN,EAAGntB,EAASmd,KAAKkB,MAAOre,EAASmd,KAAKmB,QACnF0e,GAAgBhC,EAAS3X,IAEzB0Y,GAASp8B,EAAQq6B,KAAKgE,SAASh+B,EAAUg7B,EAAQxgB,SAAU6I,GAInE,SAASmY,GAAazmB,GAClB,IAAI0X,EAAQztB,MAAMi/B,WAAWlpB,GAAO,GACpC,OAAO0X,EAAQA,EAAMyR,QAAU,KAiMnCl/B,MAAMm/B,WAAWn/B,MAAMC,IAAK,CACxBm/B,SAAU9d,EACV5e,aAAcA,EACd28B,WAnyBJ,SAASA,EAAWt3B,EAAM4U,GACtB,GAAwB,GAApBnT,UAAU5H,OACV,IAAK,IAAIF,KAAKqG,EACNrB,EAAeqB,EAAMrG,IACrB29B,EAAW39B,EAAGqG,EAAKrG,SAU3B,OANAqG,EAAOA,EAAK2T,cACZgb,GAAc3uB,GAAQ4U,EAKd5U,GACN,IAAK,cAA8B2uB,GAAc,cAA6B/Z,EAAK,MACnF,IAAK,mBAA8B+Z,GAAc,mBAA6B/Z,EAAK,MACnF,IAAK,qBAA8B+Z,GAAc,qBAA6B/Z,EAAK,MACnF,IAAK,0BAA8B+Z,GAAc,0BAA6B/Z,EAAK,MACnF,IAAK,eAA8B+Z,GAAqB,MAAsB/Z,EAAK,MACnF,IAAK,oBAA8B+Z,GAAc,cAA6B/Z,EAAK,MACnF,IAAK,sBAA8B+Z,GAAc,gBAA6B/Z,EAAK,MACnF,IAAK,2BAA8B+Z,GAAc,qBAA6B/Z,EAAK,MACnF,IAAK,cAA8B+Z,GAAyB,UAAkB/Z,EAAK,MACnF,IAAK,mBAA8B+Z,GAAc,kBAA6B/Z,EAAK,MACnF,IAAK,qBAA8B+Z,GAAc,oBAA6B/Z,EAAK,MACnF,IAAK,0BAA8B+Z,GAAc,yBAA6B/Z,IA0wBpFqZ,aAAcA,GACdO,WAAYA,GACZ7Z,UAAWA,EACXoB,WAAYA,EACZxC,gBAAiBA,EACjBkB,gBAAiBA,EACjB4a,oBAAqBA,GACrBkI,UAzDJ,SAAmB5G,EAAOld,GACtB,IAAI+jB,EAAU3+B,EAAK4+B,gBAEnB,IAAK,IAAI99B,KAAK8Z,EACD,UAAL9Z,GAAiBg3B,EAAMld,QAAQvb,KAAOy4B,EAAMld,QAAQvb,IAAIw/B,eAO5D/G,EAAMld,QAAQvY,IAAI,OAASvB,EAAG8Z,EAAQ9Z,IAK1C,OAFAsf,GAAU0X,EAAO6G,EAAQG,SAElBH,GA0CPI,gBAnCJ,SAAyBjH,EAAOld,GAC5B,IAAI+jB,EAAU3+B,EAAK4+B,gBAEnB,IAAK,IAAI99B,KAAK8Z,EACD,UAAL9Z,GAAiBg3B,EAAMld,QAAQvb,KAAOy4B,EAAMld,QAAQvb,IAAIw/B,eAO5D/G,EAAMld,QAAQvY,IAAI,OAASvB,EAAG8Z,EAAQ9Z,IAS1C,OANIvB,OAAOg8B,OAAS37B,EAAeo/B,OAC/B1D,GAAOxD,EAAO6G,EAAQG,SAEtB1e,GAAU0X,EAAO6G,EAAQG,SAGtBH,GAgBPM,OAtlBJ,SAAkBnH,EAAOoH,EAAUC,EAAOliB,GAGlC1d,OAAOg8B,OAAS37B,EAAeo/B,OAC/B1D,GAAOxD,GAAO,SAASra,GACnBre,MAAM6/B,OAAO,CAAEG,QAAS3hB,EAAM4hB,SAAUH,IACpCjiB,GACAA,EAASQ,MAIjB2C,GAAU0X,GAAO,SAASwH,GACtBlgC,MAAM6/B,OAAO,CAAEG,QAASE,EAASD,SAAUH,EAAUK,SAAUJ,IAC3DliB,GACAA,EAASqiB,OAykBrBlf,UAAWA,GACXkb,OAAQA,GACR/zB,OAAQswB,KAGZz4B,MAAMW,QAAQ2+B,UAAYt/B,MAAMC,IAAIq/B,UACpCt/B,MAAMW,QAAQV,IAAMD,MAAMC,IAh3I1B,CAk3IGE,OAAOH,MAAMogC,QAELrgC,EA0IRI,OAAOH,MAAMogC,OAxIhBpgC,MAAMqgC,SAAW,CACbriB,OAAQ,SAASsiB,GACbA,EAAMC,OAAOh+B,KAAK,aAClB+9B,EAAM9kB,QAAQvb,IAAMkH,KAAKqU,QACzB8kB,EAAME,UAAYr5B,KAAKq5B,UACvBF,EAAMG,SAAWt5B,KAAKs5B,SACtBH,EAAMI,eAAiBv5B,KAAKu5B,gBAEhCllB,QAAS,CACLykB,SAAY,aACZE,SAAY,GAMZ1kB,UAAY,OAGZklB,UAAU,EAGV7E,WAAY,EAGZjgB,OAAY,KAGZmd,MAAY,KACZC,OAAY,KACZC,QAAY,KACZC,SAAY,KACZC,QAAY,4BAA8Bp5B,MAAMoB,QAGhD4kB,KAAY,MAGhBwa,UAAW,WACP,IAAII,EAAW,IAAI7gC,EAAE8gC,SACjBtB,EAAUqB,EAASrB,UACnBuB,EAAO,CAAEvB,QAASA,GAEtB,IAAIp4B,KAAK45B,QAAQ,YAAaD,GAA9B,CAIA,IAAItlB,EAAUrU,KAAKqU,QAAQvb,IAsB3B,OArBAub,EAAQod,UAAYpd,EAAQod,WAAapd,EAAQmlB,SAEjDx5B,KAAKs5B,SAASG,GACbI,MAAK,SAASxH,GACX,OAAOx5B,MAAMW,QAAQ2+B,UAAU9F,EAAMhe,MAExCylB,MAAK,SAASjB,GACXhgC,MAAM6/B,OAAO,CACTG,QAASA,EACTC,SAAUzkB,EAAQykB,SAClBE,SAAU3kB,EAAQ2kB,SAClBe,WAAY1lB,EAAQ0lB,WACpBC,YAAa3lB,EAAQ2lB,cAGzBP,EAASlB,aAEZ0B,MAAK,SAASC,GACXT,EAASU,OAAOD,MAGb9B,IAGXkB,SAAU,SAASG,GACf,IAAIrB,EAAU,IAAIx/B,EAAE8gC,SAkBpB,OAhBA7gC,MAAMW,QAAQ4gC,QAAQp6B,KAAKq6B,SAC1BP,MAAK,SAASvI,GACX,IAAIoI,EAAO,CACPzc,KAAMqU,EACN+I,WAAY,EACZb,SAAU,EACVc,WAAY,GAGhBd,EAASe,OAAOb,GAChBvB,EAAQG,QAAQoB,EAAKzc,SAExB+c,MAAK,SAASC,GACX9B,EAAQ+B,OAAOD,MAGZ9B,GAGXmB,eAAgB,SAASkB,EAAUC,GAC/BD,EAAWA,GAAY,GACvB,IAAIJ,EAAUr6B,KAAKq6B,QACfM,EAAS/hC,EAAE,qCAGX6hC,EAASviB,OACTyiB,EAAOC,IAAI,CACP1iB,MAAOuiB,EAASviB,MAChB2iB,SAAU,YAIlBR,EAAQS,OAAOH,GACfA,EAAOlG,OAAOgG,EAAS5d,SAAWwd,EAAQU,OAAM,GAAM,IAEtD,IAAIC,EAAQpiC,EAAE8gC,WAsBd,OAbAuB,YAAW,WACOpiC,MAAMW,QAAQ4gC,QAAQO,EAAQD,GACpCQ,QAAO,WACXP,EAAOQ,YACRtB,MAAK,WACJmB,EAAMzC,QAAQp6B,MAAM68B,EAAO34B,cAC5B43B,MAAK,WACJe,EAAMb,OAAOh8B,MAAM68B,EAAO34B,cAC3Bo3B,UAAS,WACRuB,EAAMvB,SAASt7B,MAAM68B,EAAO34B,gBAEjC,IAEI24B,EAAM5C","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.core', 'kendo.drawing', 'kendo.color'], factory) :\n factory();\n})((function () {\n (function () {\n\n kendo.pdf = kendo.pdf || {};\n\n kendo.pdf.supportsDeflate = function() {\n return window.pako && typeof window.pako.deflate == \"function\";\n };\n\n kendo.pdf.deflate = function(data) {\n return window.pako.deflate(data);\n };\n\n })();\n\n /***********************************************************************\n * WARNING: this file is auto-generated. If you change it directly,\n * your modifications will eventually be lost. The source code is in\n * `kendo-drawing` repository, you should make your changes there and\n * run `src-modules/sync.sh` in this repository.\n */\n\n (function($) {\n /* eslint-disable space-before-blocks, space-before-function-paren */\n\n window.kendo.pdf = window.kendo.pdf || {};\n var support = kendo.support;\n var supportBrowser = support.browser;\n var drawing = kendo.drawing;\n var util = drawing.util;\n var extendStatic = util.extendStatic;\n var kendoPdf = kendo.pdf;\n var kendoGeometry = kendo.geometry;\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n // XXX: remove this junk (assume `true`) when we no longer have to support IE < 10\n // IE 9 (at least compatibility) reports having Uint8Array but the request response does not contain ArrayBuffer which results in missing table head error\n var HAS_TYPED_ARRAYS = typeof Uint8Array !== 'undefined' && kendo.support.browser && (!kendo.support.browser.msie || kendo.support.browser.version > 9);\n\n var BASE64 = (function(){\n var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n return {\n decode: function(str) {\n var input = str.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\"), i = 0, n = input.length, output = [];\n\n while (i < n) {\n var enc1 = keyStr.indexOf(input.charAt(i++));\n var enc2 = keyStr.indexOf(input.charAt(i++));\n var enc3 = keyStr.indexOf(input.charAt(i++));\n var enc4 = keyStr.indexOf(input.charAt(i++));\n\n var chr1 = (enc1 << 2) | (enc2 >>> 4);\n var chr2 = ((enc2 & 15) << 4) | (enc3 >>> 2);\n var chr3 = ((enc3 & 3) << 6) | enc4;\n\n output.push(chr1);\n if (enc3 != 64) {\n output.push(chr2);\n }\n if (enc4 != 64) {\n output.push(chr3);\n }\n }\n\n return output;\n },\n encode: function(bytes) {\n var i = 0, n = bytes.length;\n var output = \"\";\n\n while (i < n) {\n var chr1 = bytes[i++];\n var chr2 = bytes[i++];\n var chr3 = bytes[i++];\n\n var enc1 = chr1 >>> 2;\n var enc2 = ((chr1 & 3) << 4) | (chr2 >>> 4);\n var enc3 = ((chr2 & 15) << 2) | (chr3 >>> 6);\n var enc4 = chr3 & 63;\n\n if (i - n == 2) {\n enc3 = enc4 = 64;\n } else if (i - n == 1) {\n enc4 = 64;\n }\n\n output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n }\n return output;\n }\n };\n }());\n\n function BinaryStream(data) {\n var offset = 0, length = 0;\n if (data == null) {\n data = HAS_TYPED_ARRAYS ? new Uint8Array(256) : [];\n } else {\n length = data.length;\n }\n\n var ensure = HAS_TYPED_ARRAYS ? function(len) {\n if (len >= data.length) {\n var tmp = new Uint8Array(Math.max(len + 256, data.length * 2));\n tmp.set(data, 0);\n data = tmp;\n }\n } : function() {};\n\n var get = HAS_TYPED_ARRAYS ? function() {\n return new Uint8Array(data.buffer, 0, length);\n } : function() {\n return data;\n };\n\n var write = HAS_TYPED_ARRAYS ? function(bytes) {\n if (typeof bytes == \"string\") {\n return writeString(bytes);\n }\n var len = bytes.length;\n ensure(offset + len);\n data.set(bytes, offset);\n offset += len;\n if (offset > length) {\n length = offset;\n }\n } : function(bytes) {\n if (typeof bytes == \"string\") {\n return writeString(bytes);\n }\n for (var i = 0; i < bytes.length; ++i) {\n writeByte(bytes[i]);\n }\n };\n\n var slice = HAS_TYPED_ARRAYS ? function(start, length) {\n if (data.buffer.slice) {\n return new Uint8Array(data.buffer.slice(start, start + length));\n } else {\n // IE10\n var x = new Uint8Array(length);\n x.set(new Uint8Array(data.buffer, start, length));\n return x;\n }\n } : function(start, length) {\n return data.slice(start, start + length);\n };\n\n function eof() {\n return offset >= length;\n }\n function readByte() {\n return offset < length ? data[offset++] : 0;\n }\n function writeByte(b) {\n ensure(offset);\n data[offset++] = b & 0xFF;\n if (offset > length) {\n length = offset;\n }\n }\n function readShort() {\n return (readByte() << 8) | readByte();\n }\n function writeShort(w) {\n writeByte(w >> 8);\n writeByte(w);\n }\n function readShort_() {\n var w = readShort();\n return w >= 0x8000 ? w - 0x10000 : w;\n }\n function writeShort_(w) {\n writeShort(w < 0 ? w + 0x10000 : w);\n }\n function readLong() {\n return (readShort() * 0x10000) + readShort();\n }\n function writeLong(w) {\n writeShort((w >>> 16) & 0xFFFF);\n writeShort(w & 0xFFFF);\n }\n function readLong_() {\n var w = readLong();\n return w >= 0x80000000 ? w - 0x100000000 : w;\n }\n function writeLong_(w) {\n writeLong(w < 0 ? w + 0x100000000 : w);\n }\n function readFixed() {\n return readLong() / 0x10000;\n }\n function writeFixed(f) {\n writeLong(Math.round(f * 0x10000));\n }\n function readFixed_() {\n return readLong_() / 0x10000;\n }\n function writeFixed_(f) {\n writeLong_(Math.round(f * 0x10000));\n }\n function read(len) {\n return times(len, readByte);\n }\n function readString(len) {\n return String.fromCharCode.apply(String, read(len));\n }\n function writeString(str) {\n for (var i = 0; i < str.length; ++i) {\n writeByte(str.charCodeAt(i));\n }\n }\n function times(n, reader) {\n for (var ret = new Array(n), i = 0; i < n; ++i) {\n ret[i] = reader();\n }\n return ret;\n }\n\n var stream = {\n eof : eof,\n readByte : readByte,\n writeByte : writeByte,\n readShort : readShort,\n writeShort : writeShort,\n readLong : readLong,\n writeLong : writeLong,\n readFixed : readFixed,\n writeFixed : writeFixed,\n\n // signed numbers.\n readShort_ : readShort_,\n writeShort_ : writeShort_,\n readLong_ : readLong_,\n writeLong_ : writeLong_,\n readFixed_ : readFixed_,\n writeFixed_ : writeFixed_,\n\n read : read,\n write : write,\n readString : readString,\n writeString : writeString,\n\n times : times,\n get : get,\n slice : slice,\n\n offset: function(pos) {\n if (pos != null) {\n offset = pos;\n return stream;\n }\n return offset;\n },\n\n skip: function(nbytes) {\n offset += nbytes;\n },\n\n toString: function() {\n throw new Error(\"FIX CALLER. BinaryStream is no longer convertible to string!\");\n },\n\n length: function() { return length; },\n\n saveExcursion: function(f) {\n var pos = offset;\n try {\n return f();\n } finally {\n offset = pos;\n }\n },\n\n writeBase64: function(base64) {\n if (window.atob) {\n writeString(window.atob(base64));\n } else {\n write(BASE64.decode(base64));\n }\n },\n base64: function() {\n return BASE64.encode(get());\n }\n };\n\n return stream;\n }\n\n function ucs2decode(string) {\n var output = [],\n counter = 0,\n length = string.length,\n value,\n extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // high surrogate, and there is a next character\n extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // low surrogate\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // unmatched surrogate; only append this code unit, in case the next\n // code unit is the high surrogate of a surrogate pair\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n }\n\n function ucs2encode(array) {\n return array.map(function(value){\n var output = \"\";\n if (value > 0xFFFF) {\n value -= 0x10000;\n output += String.fromCharCode(value >>> 10 & 0x3FF | 0xD800);\n value = 0xDC00 | value & 0x3FF;\n }\n output += String.fromCharCode(value);\n return output;\n }).join(\"\");\n }\n\n function atobUint8Array(base64) {\n var data = window.atob(base64);\n var result = new Uint8Array(data.length);\n\n for (var idx = 0; idx < data.length; idx++) {\n result[idx] = data.charCodeAt(idx);\n }\n\n return result;\n }\n\n function createUint8Array(data) {\n var result = new Uint8Array(data.length);\n\n for (var idx = 0; idx < data.length; idx++) {\n result[idx] = data[idx];\n }\n\n return result;\n }\n\n function base64ToUint8Array(base64) {\n if (window.atob) {\n return atobUint8Array(base64);\n }\n\n return createUint8Array(BASE64.decode(base64));\n }\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n /*****************************************************************************\\\n *\n * The code in this file, although written from scratch, is influenced by the\n * TrueType parser/encoder in PDFKit -- http://pdfkit.org/ (a CoffeeScript\n * library for producing PDF files).\n *\n * PDFKit is (c) Devon Govett 2014 and released under the MIT License.\n *\n \\*****************************************************************************/\n\n function hasOwnProperty$1(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n function sortedKeys(obj) {\n return Object.keys(obj).sort(function(a, b){ return a - b; }).map(parseFloat);\n }\n\n ///\n var Directory = function Directory(data) {\n this.raw = data;\n this.scalerType = data.readLong();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n\n var tables = this.tables = {};\n for (var i = 0; i < this.tableCount; ++i) {\n var entry = {\n tag : data.readString(4),\n checksum : data.readLong(),\n offset : data.readLong(),\n length : data.readLong()\n };\n tables[entry.tag] = entry;\n }\n };\n\n Directory.prototype.readTable = function readTable (name, Ctor) {\n var def = this.tables[name];\n if (!def) {\n throw new Error(\"Table \" + name + \" not found in directory\");\n }\n return (this[name] = def.table = new Ctor(this, def));\n };\n\n Directory.prototype.render = function render (tables) {\n var this$1$1 = this;\n\n var tableCount = Object.keys(tables).length;\n\n var maxpow2 = Math.pow(2, Math.floor(Math.log(tableCount) / Math.LN2));\n var searchRange = maxpow2 * 16;\n var entrySelector = Math.floor(Math.log(maxpow2) / Math.LN2);\n var rangeShift = tableCount * 16 - searchRange;\n\n var out = BinaryStream();\n out.writeLong(this.scalerType);\n out.writeShort(tableCount);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n\n var directoryLength = tableCount * 16;\n var offset = out.offset() + directoryLength;\n var headOffset = null;\n var tableData = BinaryStream();\n\n for (var tag in tables) {\n if (hasOwnProperty$1(tables, tag)) {\n var table = tables[tag];\n\n out.writeString(tag);\n out.writeLong(this$1$1.checksum(table));\n out.writeLong(offset);\n out.writeLong(table.length);\n\n tableData.write(table);\n if (tag == \"head\") {\n headOffset = offset;\n }\n offset += table.length;\n\n while (offset % 4) {\n tableData.writeByte(0);\n offset++;\n }\n }\n }\n\n out.write(tableData.get());\n var sum = this.checksum(out.get());\n var adjustment = 0xB1B0AFBA - sum;\n\n out.offset(headOffset + 8);\n out.writeLong(adjustment);\n return out.get();\n };\n\n Directory.prototype.checksum = function checksum (data) {\n data = BinaryStream(data);\n var sum = 0;\n while (!data.eof()) {\n sum += data.readLong();\n }\n return sum & 0xFFFFFFFF;\n };\n\n var Table = function Table(file, def) {\n this.definition = def;\n this.length = def.length;\n this.offset = def.offset;\n this.file = file;\n this.rawData = file.raw;\n this.parse(file.raw);\n };\n\n Table.prototype.raw = function raw () {\n return this.rawData.slice(this.offset, this.length);\n };\n\n Table.prototype.parse = function parse () {};\n\n var HeadTable = (function (Table) {\n function HeadTable () {\n Table.apply(this, arguments);\n }\n\n extendStatic(HeadTable, Table);\n HeadTable.prototype = Object.create( Table && Table.prototype );\n HeadTable.prototype.constructor = HeadTable;\n HeadTable.fn = HeadTable.prototype;\n HeadTable.fn.init = HeadTable.fn.constructor;\n\n HeadTable.prototype.parse = function parse (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.revision = data.readLong();\n this.checkSumAdjustment = data.readLong();\n this.magicNumber = data.readLong();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.read(8);\n this.modified = data.read(8);\n\n this.xMin = data.readShort_();\n this.yMin = data.readShort_();\n this.xMax = data.readShort_();\n this.yMax = data.readShort_();\n\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort_();\n this.indexToLocFormat = data.readShort_();\n this.glyphDataFormat = data.readShort_();\n };\n\n HeadTable.prototype.render = function render (indexToLocFormat) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeLong(this.revision);\n out.writeLong(0); // checksum adjustment; shall be computed later\n out.writeLong(this.magicNumber);\n out.writeShort(this.flags);\n out.writeShort(this.unitsPerEm);\n out.write(this.created);\n out.write(this.modified);\n out.writeShort_(this.xMin);\n out.writeShort_(this.yMin);\n out.writeShort_(this.xMax);\n out.writeShort_(this.yMax);\n out.writeShort(this.macStyle);\n out.writeShort(this.lowestRecPPEM);\n out.writeShort_(this.fontDirectionHint);\n out.writeShort_(indexToLocFormat); // this will depend on the `loca` table\n out.writeShort_(this.glyphDataFormat);\n return out.get();\n };\n\n return HeadTable;\n }(Table));\n\n var LocaTable = (function (Table) {\n function LocaTable () {\n Table.apply(this, arguments);\n }\n\n extendStatic(LocaTable, Table);\n LocaTable.prototype = Object.create( Table && Table.prototype );\n LocaTable.prototype.constructor = LocaTable;\n LocaTable.fn = LocaTable.prototype;\n LocaTable.fn.init = LocaTable.fn.constructor;\n\n LocaTable.prototype.parse = function parse (data) {\n data.offset(this.offset);\n var format = this.file.head.indexToLocFormat;\n if (format === 0) {\n this.offsets = data.times(this.length / 2, function(){\n return 2 * data.readShort();\n });\n } else {\n this.offsets = data.times(this.length / 4, data.readLong);\n }\n };\n\n LocaTable.prototype.offsetOf = function offsetOf (id) {\n return this.offsets[id];\n };\n\n LocaTable.prototype.lengthOf = function lengthOf (id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n\n LocaTable.prototype.render = function render (offsets) {\n var out = BinaryStream();\n var needsLongFormat = offsets[offsets.length - 1] > 0xFFFF;\n for (var i = 0; i < offsets.length; ++i) {\n if (needsLongFormat) {\n out.writeLong(offsets[i]);\n } else {\n out.writeShort(offsets[i] / 2);\n }\n }\n return {\n format: needsLongFormat ? 1 : 0,\n table: out.get()\n };\n };\n\n return LocaTable;\n }(Table));\n\n var HheaTable = (function (Table) {\n function HheaTable () {\n Table.apply(this, arguments);\n }\n\n extendStatic(HheaTable, Table);\n HheaTable.prototype = Object.create( Table && Table.prototype );\n HheaTable.prototype.constructor = HheaTable;\n HheaTable.fn = HheaTable.prototype;\n HheaTable.fn.init = HheaTable.fn.constructor;\n\n HheaTable.prototype.parse = function parse (data) {\n data.offset(this.offset);\n\n this.version = data.readLong();\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort_();\n this.minRightSideBearing = data.readShort_();\n this.xMaxExtent = data.readShort_();\n this.caretSlopeRise = data.readShort_();\n this.caretSlopeRun = data.readShort_();\n this.caretOffset = data.readShort_();\n\n data.skip(4 * 2); // reserved\n\n this.metricDataFormat = data.readShort_();\n this.numOfLongHorMetrics = data.readShort();\n };\n\n HheaTable.prototype.render = function render (ids) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort_(this.ascent);\n out.writeShort_(this.descent);\n out.writeShort_(this.lineGap);\n out.writeShort(this.advanceWidthMax);\n out.writeShort_(this.minLeftSideBearing);\n out.writeShort_(this.minRightSideBearing);\n out.writeShort_(this.xMaxExtent);\n out.writeShort_(this.caretSlopeRise);\n out.writeShort_(this.caretSlopeRun);\n out.writeShort_(this.caretOffset);\n\n out.write([ 0, 0, 0, 0, 0, 0, 0, 0 ]); // reserved bytes\n\n out.writeShort_(this.metricDataFormat);\n out.writeShort(ids.length);\n return out.get();\n };\n\n return HheaTable;\n }(Table));\n\n var MaxpTable = (function (Table) {\n function MaxpTable () {\n Table.apply(this, arguments);\n }\n\n extendStatic(MaxpTable, Table);\n MaxpTable.prototype = Object.create( Table && Table.prototype );\n MaxpTable.prototype.constructor = MaxpTable;\n MaxpTable.fn = MaxpTable.prototype;\n MaxpTable.fn.init = MaxpTable.fn.constructor;\n\n MaxpTable.prototype.parse = function parse (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.numGlyphs = data.readShort();\n this.maxPoints = data.readShort();\n this.maxContours = data.readShort();\n this.maxComponentPoints = data.readShort();\n this.maxComponentContours = data.readShort();\n this.maxZones = data.readShort();\n this.maxTwilightPoints = data.readShort();\n this.maxStorage = data.readShort();\n this.maxFunctionDefs = data.readShort();\n this.maxInstructionDefs = data.readShort();\n this.maxStackElements = data.readShort();\n this.maxSizeOfInstructions = data.readShort();\n this.maxComponentElements = data.readShort();\n this.maxComponentDepth = data.readShort();\n };\n\n MaxpTable.prototype.render = function render (glyphIds) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort(glyphIds.length);\n out.writeShort(this.maxPoints);\n out.writeShort(this.maxContours);\n out.writeShort(this.maxComponentPoints);\n out.writeShort(this.maxComponentContours);\n out.writeShort(this.maxZones);\n out.writeShort(this.maxTwilightPoints);\n out.writeShort(this.maxStorage);\n out.writeShort(this.maxFunctionDefs);\n out.writeShort(this.maxInstructionDefs);\n out.writeShort(this.maxStackElements);\n out.writeShort(this.maxSizeOfInstructions);\n out.writeShort(this.maxComponentElements);\n out.writeShort(this.maxComponentDepth);\n return out.get();\n };\n\n return MaxpTable;\n }(Table));\n\n var HmtxTable = (function (Table) {\n function HmtxTable () {\n Table.apply(this, arguments);\n }\n\n extendStatic(HmtxTable, Table);\n HmtxTable.prototype = Object.create( Table && Table.prototype );\n HmtxTable.prototype.constructor = HmtxTable;\n HmtxTable.fn = HmtxTable.prototype;\n HmtxTable.fn.init = HmtxTable.fn.constructor;\n\n HmtxTable.prototype.parse = function parse (data) {\n data.offset(this.offset);\n var dir = this.file, hhea = dir.hhea;\n this.metrics = data.times(hhea.numOfLongHorMetrics, function(){\n return {\n advance: data.readShort(),\n lsb: data.readShort_()\n };\n });\n var lsbCount = dir.maxp.numGlyphs - dir.hhea.numOfLongHorMetrics;\n this.leftSideBearings = data.times(lsbCount, data.readShort_);\n };\n\n HmtxTable.prototype.forGlyph = function forGlyph (id) {\n var metrics = this.metrics;\n var n = metrics.length;\n if (id < n) {\n return metrics[id];\n }\n return {\n advance: metrics[n - 1].advance,\n lsb: this.leftSideBearings[id - n]\n };\n };\n\n HmtxTable.prototype.render = function render (glyphIds) {\n var this$1$1 = this;\n\n var out = BinaryStream();\n for (var i = 0; i < glyphIds.length; ++i) {\n var m = this$1$1.forGlyph(glyphIds[i]);\n out.writeShort(m.advance);\n out.writeShort_(m.lsb);\n }\n return out.get();\n };\n\n return HmtxTable;\n }(Table));\n\n var GlyfTable = (function(){\n var SimpleGlyph = function SimpleGlyph(raw) {\n this.raw = raw;\n };\n\n var prototypeAccessors = { compound: {} };\n\n prototypeAccessors.compound.get = function () {\n return false;\n };\n\n SimpleGlyph.prototype.render = function render () {\n return this.raw.get();\n };\n\n Object.defineProperties( SimpleGlyph.prototype, prototypeAccessors );\n\n var ARG_1_AND_2_ARE_WORDS = 0x0001;\n var WE_HAVE_A_SCALE = 0x0008;\n var MORE_COMPONENTS = 0x0020;\n var WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;\n var WE_HAVE_A_TWO_BY_TWO = 0x0080;\n //var WE_HAVE_INSTRUCTIONS = 0x0100;\n\n var CompoundGlyph = function CompoundGlyph(data) {\n this.raw = data;\n var ids = this.glyphIds = [];\n var offsets = this.idOffsets = [];\n while (true) { // eslint-disable-line no-constant-condition\n var flags = data.readShort();\n offsets.push(data.offset());\n ids.push(data.readShort());\n\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n\n data.skip(flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.skip(8);\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.skip(4);\n } else if (flags & WE_HAVE_A_SCALE) {\n data.skip(2);\n }\n }\n };\n\n var prototypeAccessors$1 = { compound: {} };\n\n prototypeAccessors$1.compound.get = function () {\n return true;\n };\n\n CompoundGlyph.prototype.render = function render (old2new) {\n var this$1$1 = this;\n\n var out = BinaryStream(this.raw.get());\n for (var i = 0; i < this.glyphIds.length; ++i) {\n var id = this$1$1.glyphIds[i];\n out.offset(this$1$1.idOffsets[i]);\n out.writeShort(old2new[id]);\n }\n return out.get();\n };\n\n Object.defineProperties( CompoundGlyph.prototype, prototypeAccessors$1 );\n\n return (function (Table) {\n function anonymous () {\n Table.apply(this, arguments);\n }\n\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create( Table && Table.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.parse = function parse () {\n this.cache = {};\n };\n\n anonymous.prototype.glyphFor = function glyphFor (id) {\n var cache = this.cache;\n if (hasOwnProperty$1(cache, id)) {\n return cache[id];\n }\n\n var loca = this.file.loca;\n var length = loca.lengthOf(id);\n\n if (length === 0) {\n return (cache[id] = null);\n }\n\n var data = this.rawData;\n var offset = this.offset + loca.offsetOf(id);\n var raw = BinaryStream(data.slice(offset, length));\n\n var numberOfContours = raw.readShort_();\n var xMin = raw.readShort_();\n var yMin = raw.readShort_();\n var xMax = raw.readShort_();\n var yMax = raw.readShort_();\n\n var glyph = cache[id] = numberOfContours < 0 ? new CompoundGlyph(raw) : new SimpleGlyph(raw);\n\n glyph.numberOfContours = numberOfContours;\n glyph.xMin = xMin;\n glyph.yMin = yMin;\n glyph.xMax = xMax;\n glyph.yMax = yMax;\n\n return glyph;\n };\n\n anonymous.prototype.render = function render (glyphs, oldIds, old2new) {\n var out = BinaryStream(), offsets = [];\n for (var i = 0; i < oldIds.length; ++i) {\n var id = oldIds[i];\n var glyph = glyphs[id];\n if (out.offset() % 2) {\n out.writeByte(0);\n }\n offsets.push(out.offset());\n if (glyph) {\n out.write(glyph.render(old2new));\n }\n }\n if (out.offset() % 2) {\n out.writeByte(0);\n }\n offsets.push(out.offset());\n return {\n table: out.get(),\n offsets: offsets\n };\n };\n\n return anonymous;\n }(Table));\n }());\n\n var NameTable = (function(){\n var NameEntry = function NameEntry(text, entry) {\n this.text = text;\n this.length = text.length;\n this.platformID = entry.platformID;\n this.platformSpecificID = entry.platformSpecificID;\n this.languageID = entry.languageID;\n this.nameID = entry.nameID;\n };\n\n return (function (Table) {\n function anonymous () {\n Table.apply(this, arguments);\n }\n\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create( Table && Table.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.parse = function parse (data) {\n data.offset(this.offset);\n data.readShort(); // format\n var count = data.readShort();\n var stringOffset = this.offset + data.readShort();\n var nameRecords = data.times(count, function(){\n return {\n platformID : data.readShort(),\n platformSpecificID : data.readShort(),\n languageID : data.readShort(),\n nameID : data.readShort(),\n length : data.readShort(),\n offset : data.readShort() + stringOffset\n };\n });\n var strings = this.strings = {};\n for (var i = 0; i < nameRecords.length; ++i) {\n var rec = nameRecords[i];\n data.offset(rec.offset);\n var text = data.readString(rec.length);\n if (!strings[rec.nameID]) {\n strings[rec.nameID] = [];\n }\n strings[rec.nameID].push(new NameEntry(text, rec));\n }\n this.postscriptEntry = strings[6][0];\n this.postscriptName = this.postscriptEntry.text.replace(/[^\\x20-\\x7F]/g, \"\");\n };\n\n anonymous.prototype.render = function render (psName) {\n var this$1$1 = this;\n\n var strings = this.strings;\n var strCount = 0;\n for (var i in strings) {\n if (hasOwnProperty$1(strings, i)) {\n strCount += strings[i].length;\n }\n }\n var out = BinaryStream();\n var strTable = BinaryStream();\n\n out.writeShort(0); // format\n out.writeShort(strCount);\n out.writeShort(6 + 12 * strCount); // stringOffset\n\n for (i in strings) {\n if (hasOwnProperty$1(strings, i)) {\n var list = i == 6 ? [\n new NameEntry(psName, this$1$1.postscriptEntry)\n ] : strings[i];\n for (var j = 0; j < list.length; ++j) {\n var str = list[j];\n out.writeShort(str.platformID);\n out.writeShort(str.platformSpecificID);\n out.writeShort(str.languageID);\n out.writeShort(str.nameID);\n out.writeShort(str.length);\n out.writeShort(strTable.offset());\n\n strTable.writeString(str.text);\n }\n }\n }\n\n out.write(strTable.get());\n\n return out.get();\n };\n\n return anonymous;\n }(Table));\n })();\n\n var PostTable = (function(){\n var POSTSCRIPT_GLYPHS = \".notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat\".split(/\\s+/g);\n\n return (function (Table) {\n function anonymous () {\n Table.apply(this, arguments);\n }\n\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create( Table && Table.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.parse = function parse (data) {\n var this$1$1 = this;\n\n data.offset(this.offset);\n\n this.format = data.readLong();\n this.italicAngle = data.readFixed_();\n this.underlinePosition = data.readShort_();\n this.underlineThickness = data.readShort_();\n this.isFixedPitch = data.readLong();\n this.minMemType42 = data.readLong();\n this.maxMemType42 = data.readLong();\n this.minMemType1 = data.readLong();\n this.maxMemType1 = data.readLong();\n\n var numberOfGlyphs;\n\n switch (this.format) {\n case 0x00010000:\n case 0x00030000:\n break;\n\n case 0x00020000:\n numberOfGlyphs = data.readShort();\n this.glyphNameIndex = data.times(numberOfGlyphs, data.readShort);\n this.names = [];\n var limit = this.offset + this.length;\n while (data.offset() < limit) {\n this$1$1.names.push(data.readString(data.readByte()));\n }\n break;\n\n case 0x00025000:\n numberOfGlyphs = data.readShort();\n this.offsets = data.read(numberOfGlyphs);\n break;\n\n case 0x00040000:\n this.map = data.times(this.file.maxp.numGlyphs, data.readShort);\n break;\n }\n };\n\n anonymous.prototype.glyphFor = function glyphFor (code) {\n switch (this.format) {\n case 0x00010000:\n return POSTSCRIPT_GLYPHS[code] || \".notdef\";\n\n case 0x00020000:\n var index = this.glyphNameIndex[code];\n if (index < POSTSCRIPT_GLYPHS.length) {\n return POSTSCRIPT_GLYPHS[index];\n }\n return this.names[index - POSTSCRIPT_GLYPHS.length] || \".notdef\";\n\n case 0x00025000:\n\n case 0x00030000:\n return \".notdef\";\n\n case 0x00040000:\n return this.map[code] || 0xFFFF;\n }\n };\n\n anonymous.prototype.render = function render (mapping) {\n var this$1$1 = this;\n\n if (this.format == 0x00030000) {\n return this.raw();\n }\n\n // keep original header, but set format to 2.0\n var out = BinaryStream(this.rawData.slice(this.offset, 32));\n out.writeLong(0x00020000);\n out.offset(32);\n\n var indexes = [];\n var strings = [];\n\n for (var i = 0; i < mapping.length; ++i) {\n var id = mapping[i];\n var post = this$1$1.glyphFor(id);\n var index = POSTSCRIPT_GLYPHS.indexOf(post);\n if (index >= 0) {\n indexes.push(index);\n } else {\n indexes.push(POSTSCRIPT_GLYPHS.length + strings.length);\n strings.push(post);\n }\n }\n\n out.writeShort(mapping.length);\n\n for (i = 0; i < indexes.length; ++i) {\n out.writeShort(indexes[i]);\n }\n\n for (i = 0; i < strings.length; ++i) {\n out.writeByte(strings[i].length);\n out.writeString(strings[i]);\n }\n\n return out.get();\n };\n\n return anonymous;\n }(Table));\n })();\n\n var CmapTable = (function(){\n var CmapEntry = function CmapEntry(data, offset, codeMap) {\n var self = this;\n self.platformID = data.readShort();\n self.platformSpecificID = data.readShort();\n self.offset = offset + data.readLong();\n\n data.saveExcursion(function(){\n var code;\n data.offset(self.offset);\n self.format = data.readShort();\n\n switch (self.format) {\n case 0:\n self.length = data.readShort();\n self.language = data.readShort();\n for (var i = 0; i < 256; ++i) {\n codeMap[i] = data.readByte();\n }\n break;\n\n case 4:\n self.length = data.readShort();\n self.language = data.readShort();\n var segCount = data.readShort() / 2;\n\n data.skip(6); // searchRange, entrySelector, rangeShift\n var endCode = data.times(segCount, data.readShort);\n data.skip(2); // reserved pad\n var startCode = data.times(segCount, data.readShort);\n var idDelta = data.times(segCount, data.readShort_);\n var idRangeOffset = data.times(segCount, data.readShort);\n\n var count = (self.length + self.offset - data.offset()) / 2;\n var glyphIds = data.times(count, data.readShort);\n\n for (i = 0; i < segCount; ++i) {\n var start = startCode[i], end = endCode[i];\n for (code = start; code <= end; ++code) {\n var glyphId;\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n ///\n // When non-zero, idRangeOffset contains for each segment the byte offset of the Glyph ID\n // into the glyphIds table, from the *current* `i` cell of idRangeOffset. In other words,\n // this offset spans from the first into the second array. This works, because the arrays\n // are consecutive in the TTF file:\n //\n // [ ...idRangeOffset... ][ ...glyphIds... ]\n // ...... 48 ...... .... ID ....\n // ^----- 48 bytes -----^\n //\n // (but I can't stop wondering why is it not just a plain index, possibly incremented by 1\n // so that we can have that special `zero` value.)\n //\n // The elements of idRangeOffset are even numbers, because both arrays contain 16-bit words,\n // yet the offset is in bytes. That is why we divide it by 2. Then we subtract the\n // remaining segments (segCount-i), and add the code-start offset, to which we need to add\n // the corresponding delta to get the actual glyph ID.\n ///\n var index = idRangeOffset[i] / 2 - (segCount - i) + (code - start);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n codeMap[code] = glyphId & 0xFFFF;\n }\n }\n break;\n\n case 6:\n self.length = data.readShort();\n self.language = data.readShort();\n code = data.readShort();\n var length = data.readShort();\n while (length-- > 0) {\n codeMap[code++] = data.readShort();\n }\n break;\n\n case 12:\n data.readShort(); // reserved\n self.length = data.readLong();\n self.language = data.readLong();\n var ngroups = data.readLong();\n while (ngroups-- > 0) {\n code = data.readLong();\n var endCharCode = data.readLong();\n var glyphCode = data.readLong();\n while (code <= endCharCode) {\n codeMap[code++] = glyphCode++;\n }\n }\n break;\n\n default:\n if (window.console) {\n window.console.error(\"Unhandled CMAP format: \" + self.format);\n }\n }\n });\n };\n\n function renderCharmap(ncid2ogid, ogid2ngid) {\n var codes = sortedKeys(ncid2ogid);\n var startCodes = [];\n var endCodes = [];\n var last = null;\n var diff = null;\n\n function new_gid(charcode) {\n return ogid2ngid[ncid2ogid[charcode]];\n }\n\n for (var i = 0; i < codes.length; ++i) {\n var code = codes[i];\n var gid = new_gid(code);\n var delta = gid - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(0xFFFF);\n startCodes.push(0xFFFF);\n\n var segCount = startCodes.length;\n var segCountX2 = segCount * 2;\n var searchRange = 2 * Math.pow(2, Math.floor(Math.log(segCount) / Math.LN2));\n var entrySelector = Math.log(searchRange / 2) / Math.LN2;\n var rangeShift = segCountX2 - searchRange;\n\n var deltas = [];\n var rangeOffsets = [];\n var glyphIds = [];\n\n for (i = 0; i < segCount; ++i) {\n var startCode = startCodes[i];\n var endCode = endCodes[i];\n if (startCode == 0xFFFF) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n var startGlyph = new_gid(startCode);\n if (startCode - startGlyph >= 0x8000) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIds.length + segCount - i));\n for (var j = startCode; j <= endCode; ++j) {\n glyphIds.push(new_gid(j));\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n\n var out = BinaryStream();\n\n out.writeShort(3); // platformID\n out.writeShort(1); // platformSpecificID\n out.writeLong(12); // offset\n out.writeShort(4); // format\n out.writeShort(16 + segCount * 8 + glyphIds.length * 2); // length\n out.writeShort(0); // language\n out.writeShort(segCountX2);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n\n endCodes.forEach(out.writeShort);\n out.writeShort(0); // reserved pad\n startCodes.forEach(out.writeShort);\n deltas.forEach(out.writeShort_);\n rangeOffsets.forEach(out.writeShort);\n glyphIds.forEach(out.writeShort);\n\n return out.get();\n }\n\n return (function (Table) {\n function anonymous () {\n Table.apply(this, arguments);\n }\n\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create( Table && Table.prototype );\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n\n anonymous.prototype.parse = function parse (data) {\n var self = this;\n var offset = self.offset;\n data.offset(offset);\n self.codeMap = {};\n self.version = data.readShort();\n var tableCount = data.readShort();\n self.tables = data.times(tableCount, function(){\n return new CmapEntry(data, offset, self.codeMap);\n });\n };\n\n anonymous.render = function render (ncid2ogid, ogid2ngid) {\n var out = BinaryStream();\n out.writeShort(0); // version\n out.writeShort(1); // tableCount\n out.write(renderCharmap(ncid2ogid, ogid2ngid));\n return out.get();\n };\n\n return anonymous;\n }(Table));\n\n })();\n\n var OS2Table = (function (Table) {\n function OS2Table () {\n Table.apply(this, arguments);\n }\n\n extendStatic(OS2Table, Table);\n OS2Table.prototype = Object.create( Table && Table.prototype );\n OS2Table.prototype.constructor = OS2Table;\n OS2Table.fn = OS2Table.prototype;\n OS2Table.fn.init = OS2Table.fn.constructor;\n\n OS2Table.prototype.parse = function parse (data) {\n data.offset(this.offset);\n this.version = data.readShort();\n this.averageCharWidth = data.readShort_();\n this.weightClass = data.readShort();\n this.widthClass = data.readShort();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort_();\n this.ySubscriptYSize = data.readShort_();\n this.ySubscriptXOffset = data.readShort_();\n this.ySubscriptYOffset = data.readShort_();\n this.ySuperscriptXSize = data.readShort_();\n this.ySuperscriptYSize = data.readShort_();\n this.ySuperscriptXOffset = data.readShort_();\n this.ySuperscriptYOffset = data.readShort_();\n this.yStrikeoutSize = data.readShort_();\n this.yStrikeoutPosition = data.readShort_();\n this.familyClass = data.readShort_();\n\n this.panose = data.times(10, data.readByte);\n this.charRange = data.times(4, data.readLong);\n\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n\n if (this.version > 0) {\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = data.times(2, data.readLong);\n\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n this.maxContext = data.readShort();\n }\n }\n };\n\n OS2Table.prototype.render = function render () {\n return this.raw();\n };\n\n return OS2Table;\n }(Table));\n\n var subsetTag = 100000;\n\n function nextSubsetTag() {\n var ret = \"\", n = String(subsetTag);\n for (var i = 0; i < n.length; ++i) {\n ret += String.fromCharCode(n.charCodeAt(i) - 48 + 65);\n }\n ++subsetTag;\n return ret;\n }\n\n var Subfont = function Subfont(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.ogid2ngid = { 0: 0 };\n this.ngid2ogid = { 0: 0 };\n this.ncid2ogid = {};\n this.next = this.firstChar = 1;\n this.nextGid = 1;\n this.psName = nextSubsetTag() + \"+\" + this.font.psName;\n };\n\n Subfont.prototype.use = function use (ch) {\n var self = this;\n if (typeof ch == \"string\") {\n return ucs2decode(ch).reduce(function(ret, code){\n return ret + String.fromCharCode(self.use(code));\n }, \"\");\n }\n var code = self.unicodes[ch];\n if (!code) {\n code = self.next++;\n self.subset[code] = ch;\n self.unicodes[ch] = code;\n\n // generate new GID (glyph ID) and maintain newGID ->\n // oldGID and back mappings\n var old_gid = self.font.cmap.codeMap[ch];\n if (old_gid) {\n self.ncid2ogid[code] = old_gid;\n if (self.ogid2ngid[old_gid] == null) {\n var new_gid = self.nextGid++;\n self.ogid2ngid[old_gid] = new_gid;\n self.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n return code;\n };\n\n Subfont.prototype.encodeText = function encodeText (text) {\n return this.use(text);\n };\n\n Subfont.prototype.glyphIds = function glyphIds () {\n return sortedKeys(this.ogid2ngid);\n };\n\n Subfont.prototype.glyphsFor = function glyphsFor (glyphIds, result) {\n var this$1$1 = this;\n\n if (!result) {\n result = {};\n }\n for (var i = 0; i < glyphIds.length; ++i) {\n var id = glyphIds[i];\n if (!result[id]) {\n var glyph = result[id] = this$1$1.font.glyf.glyphFor(id);\n if (glyph && glyph.compound) {\n this$1$1.glyphsFor(glyph.glyphIds, result);\n }\n }\n }\n return result;\n };\n\n Subfont.prototype.render = function render () {\n var this$1$1 = this;\n\n var glyphs = this.glyphsFor(this.glyphIds());\n\n // add missing sub-glyphs\n for (var old_gid in glyphs) {\n if (hasOwnProperty$1(glyphs, old_gid)) {\n old_gid = parseInt(old_gid, 10);\n if (this$1$1.ogid2ngid[old_gid] == null) {\n var new_gid = this$1$1.nextGid++;\n this$1$1.ogid2ngid[old_gid] = new_gid;\n this$1$1.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n\n // must obtain old_gid_ids in an order matching sorted\n // new_gid_ids\n var new_gid_ids = sortedKeys(this.ngid2ogid);\n var old_gid_ids = new_gid_ids.map(function(id){\n return this.ngid2ogid[id];\n }, this);\n\n var font = this.font;\n var glyf = font.glyf.render(glyphs, old_gid_ids, this.ogid2ngid);\n var loca = font.loca.render(glyf.offsets);\n\n this.lastChar = this.next - 1;\n\n var tables = {\n \"cmap\" : CmapTable.render(this.ncid2ogid, this.ogid2ngid),\n \"glyf\" : glyf.table,\n \"loca\" : loca.table,\n \"hmtx\" : font.hmtx.render(old_gid_ids),\n \"hhea\" : font.hhea.render(old_gid_ids),\n \"maxp\" : font.maxp.render(old_gid_ids),\n \"post\" : font.post.render(old_gid_ids),\n \"name\" : font.name.render(this.psName),\n \"head\" : font.head.render(loca.format),\n \"OS/2\" : font.os2.render()\n };\n\n return this.font.directory.render(tables);\n };\n\n Subfont.prototype.cidToGidMap = function cidToGidMap () {\n var this$1$1 = this;\n\n var out = BinaryStream(), len = 0;\n for (var cid = this.firstChar; cid < this.next; ++cid) {\n while (len < cid) {\n out.writeShort(0);\n len++;\n }\n var old_gid = this$1$1.ncid2ogid[cid];\n if (old_gid) {\n var new_gid = this$1$1.ogid2ngid[old_gid];\n out.writeShort(new_gid);\n } else {\n out.writeShort(0);\n }\n len++;\n }\n return out.get();\n };\n\n var TTFFont = function TTFFont(rawData, name) {\n var self = this;\n var data = self.contents = BinaryStream(rawData);\n if (data.readString(4) == \"ttcf\") {\n var offset;\n var parse = function() {\n data.offset(offset);\n self.parse();\n };\n if (!name) {\n throw new Error(\"Must specify a name for TTC files\");\n }\n data.readLong(); // version\n var numFonts = data.readLong();\n for (var i = 0; i < numFonts; ++i) {\n offset = data.readLong();\n data.saveExcursion(parse);\n if (self.psName == name) {\n return;\n }\n }\n throw new Error(\"Font \" + name + \" not found in collection\");\n } else {\n data.offset(0);\n self.parse();\n }\n };\n\n TTFFont.prototype.parse = function parse () {\n var dir = this.directory = new Directory(this.contents);\n\n this.head = dir.readTable(\"head\", HeadTable);\n this.loca = dir.readTable(\"loca\", LocaTable);\n this.hhea = dir.readTable(\"hhea\", HheaTable);\n this.maxp = dir.readTable(\"maxp\", MaxpTable);\n this.hmtx = dir.readTable(\"hmtx\", HmtxTable);\n this.glyf = dir.readTable(\"glyf\", GlyfTable);\n this.name = dir.readTable(\"name\", NameTable);\n this.post = dir.readTable(\"post\", PostTable);\n this.cmap = dir.readTable(\"cmap\", CmapTable);\n this.os2 = dir.readTable(\"OS/2\", OS2Table);\n\n this.psName = this.name.postscriptName;\n this.ascent = this.os2.ascent || this.hhea.ascent;\n this.descent = this.os2.descent || this.hhea.descent;\n this.lineGap = this.os2.lineGap || this.hhea.lineGap;\n this.scale = 1000 / this.head.unitsPerEm;\n };\n\n TTFFont.prototype.widthOfGlyph = function widthOfGlyph (glyph) {\n return this.hmtx.forGlyph(glyph).advance * this.scale;\n };\n\n TTFFont.prototype.makeSubset = function makeSubset () {\n return new Subfont(this);\n };\n\n var fromCharCode = String.fromCharCode;\n\n var BOM = '\\xfe\\xff';\n\n // Encodes a string as UTF-8\n\n function encodeUnit(codeUnit) {\n return fromCharCode(codeUnit >> 8) + fromCharCode(codeUnit & 0x00ff);\n }\n\n // Encodes a string as UTF-16 big-endian\n function encodeUTF16BE(input) {\n var output = '';\n\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n\n if (c < 0xFFFF) {\n output += encodeUnit(c);\n } else {\n var lead = ((c - 0x10000) >> 10) + 0xD800;\n var trail = ((c - 0x10000) & 0x3FF) + 0xDC00;\n output += encodeUnit(lead);\n output += encodeUnit(trail);\n }\n }\n\n return output;\n }\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n var browser = kendo.support.browser;\n var NL = \"\\n\";\n\n var RESOURCE_COUNTER = 0;\n\n var PAPER_SIZE = {\n a0 : [ 2383.94 , 3370.39 ],\n a1 : [ 1683.78 , 2383.94 ],\n a2 : [ 1190.55 , 1683.78 ],\n a3 : [ 841.89 , 1190.55 ],\n a4 : [ 595.28 , 841.89 ],\n a5 : [ 419.53 , 595.28 ],\n a6 : [ 297.64 , 419.53 ],\n a7 : [ 209.76 , 297.64 ],\n a8 : [ 147.40 , 209.76 ],\n a9 : [ 104.88 , 147.40 ],\n a10 : [ 73.70 , 104.88 ],\n b0 : [ 2834.65 , 4008.19 ],\n b1 : [ 2004.09 , 2834.65 ],\n b2 : [ 1417.32 , 2004.09 ],\n b3 : [ 1000.63 , 1417.32 ],\n b4 : [ 708.66 , 1000.63 ],\n b5 : [ 498.90 , 708.66 ],\n b6 : [ 354.33 , 498.90 ],\n b7 : [ 249.45 , 354.33 ],\n b8 : [ 175.75 , 249.45 ],\n b9 : [ 124.72 , 175.75 ],\n b10 : [ 87.87 , 124.72 ],\n c0 : [ 2599.37 , 3676.54 ],\n c1 : [ 1836.85 , 2599.37 ],\n c2 : [ 1298.27 , 1836.85 ],\n c3 : [ 918.43 , 1298.27 ],\n c4 : [ 649.13 , 918.43 ],\n c5 : [ 459.21 , 649.13 ],\n c6 : [ 323.15 , 459.21 ],\n c7 : [ 229.61 , 323.15 ],\n c8 : [ 161.57 , 229.61 ],\n c9 : [ 113.39 , 161.57 ],\n c10 : [ 79.37 , 113.39 ],\n executive : [ 521.86 , 756.00 ],\n folio : [ 612.00 , 936.00 ],\n legal : [ 612.00 , 1008.00 ],\n letter : [ 612.00 , 792.00 ],\n tabloid : [ 792.00 , 1224.00 ]\n };\n\n function makeOutput() {\n var indentLevel = 0, output = BinaryStream();\n function out() {\n var arguments$1 = arguments;\n\n for (var i = 0; i < arguments.length; ++i) {\n var x = arguments$1[i];\n if (x === undefined) {\n throw new Error(\"Cannot output undefined to PDF\");\n }\n else if (x instanceof PDFValue) {\n x.beforeRender(out);\n x.render(out);\n }\n else if (isArray(x)) {\n renderArray(x, out);\n }\n else if (isDate(x)) {\n renderDate(x, out);\n }\n else if (typeof x == \"number\") {\n if (isNaN(x)) {\n throw new Error(\"Cannot output NaN to PDF\");\n }\n // make sure it doesn't end up in exponent notation\n var num = x.toFixed(7);\n if (num.indexOf(\".\") >= 0) {\n num = num.replace(/\\.?0+$/, \"\");\n }\n if (num == \"-0\") {\n num = \"0\";\n }\n output.writeString(num);\n }\n else if (/string|boolean/.test(typeof x)) {\n output.writeString(String(x));\n }\n else if (typeof x.get == \"function\") {\n output.write(x.get());\n }\n else if (typeof x == \"object\") {\n if (!x) {\n output.writeString(\"null\");\n } else {\n out(new PDFDictionary(x));\n }\n }\n }\n }\n out.writeData = function(data) {\n output.write(data);\n };\n out.withIndent = function(f) {\n ++indentLevel;\n f(out);\n --indentLevel;\n };\n out.indent = function() {\n out(NL, pad(\"\", indentLevel * 2, \" \"));\n out.apply(null, arguments);\n };\n out.offset = function() {\n return output.offset();\n };\n out.toString = function() {\n throw new Error(\"FIX CALLER\");\n };\n out.get = function() {\n return output.get();\n };\n out.stream = function() {\n return output;\n };\n return out;\n }\n\n function wrapObject(value, id) {\n var beforeRender = value.beforeRender;\n var renderValue = value.render;\n\n value.beforeRender = function(){};\n\n value.render = function(out) {\n out(id, \" 0 R\");\n };\n\n value.renderFull = function(out) {\n value._offset = out.offset();\n out(id, \" 0 obj \");\n beforeRender.call(value, out);\n renderValue.call(value, out);\n out(\" endobj\");\n };\n }\n\n function getPaperOptions(getOption) {\n if (typeof getOption != \"function\") {\n var options = getOption;\n getOption = function(key, def) {\n return key in options ? options[key] : def;\n };\n }\n var paperSize = getOption(\"paperSize\", PAPER_SIZE.a4);\n if (!paperSize) {\n return {};\n }\n if (typeof paperSize == \"string\") {\n paperSize = PAPER_SIZE[paperSize.toLowerCase()];\n if (paperSize == null) {\n throw new Error(\"Unknown paper size\");\n }\n }\n\n paperSize[0] = unitsToPoints(paperSize[0]);\n paperSize[1] = unitsToPoints(paperSize[1]);\n\n if (getOption(\"landscape\", false)) {\n paperSize = [\n Math.max(paperSize[0], paperSize[1]),\n Math.min(paperSize[0], paperSize[1])\n ];\n }\n\n var margin = getOption(\"margin\");\n if (margin) {\n if (typeof margin == \"string\" || typeof margin == \"number\") {\n margin = unitsToPoints(margin, 0);\n margin = { left: margin, top: margin, right: margin, bottom: margin };\n } else {\n margin = {\n left : unitsToPoints(margin.left, 0),\n top : unitsToPoints(margin.top, 0),\n right : unitsToPoints(margin.right, 0),\n bottom : unitsToPoints(margin.bottom, 0)\n };\n }\n if (getOption(\"addMargin\")) {\n paperSize[0] += margin.left + margin.right;\n paperSize[1] += margin.top + margin.bottom;\n }\n }\n return { paperSize: paperSize, margin: margin };\n }\n\n var FONT_CACHE = {\n \"Times-Roman\" : true,\n \"Times-Bold\" : true,\n \"Times-Italic\" : true,\n \"Times-BoldItalic\" : true,\n \"Helvetica\" : true,\n \"Helvetica-Bold\" : true,\n \"Helvetica-Oblique\" : true,\n \"Helvetica-BoldOblique\" : true,\n \"Courier\" : true,\n \"Courier-Bold\" : true,\n \"Courier-Oblique\" : true,\n \"Courier-BoldOblique\" : true,\n \"Symbol\" : true,\n \"ZapfDingbats\" : true\n };\n\n function loadBinary(url, cont) {\n // IE throws Accesss denied error for Data URIs\n var m;\n if (browser.msie && (m = /^data:.*?;base64,/i.exec(url))) {\n cont(base64ToUint8Array(url.substr(m[0].length)));\n return;\n }\n\n function error() {\n if (window.console) {\n if (window.console.error) {\n window.console.error(\"Cannot load URL: %s\", url);\n } else {\n window.console.log(\"Cannot load URL: %s\", url);\n }\n }\n cont(null);\n }\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n if (HAS_TYPED_ARRAYS) {\n req.responseType = \"arraybuffer\";\n }\n req.onload = function() {\n if (req.status == 200 || req.status == 304) {\n if (HAS_TYPED_ARRAYS) {\n cont(new Uint8Array(req.response));\n } else {\n cont(new window.VBArray(req.responseBody).toArray()); // IE9 only\n }\n } else {\n error();\n }\n };\n req.onerror = error;\n req.send(null);\n }\n\n function loadFont(url, cont) {\n var font = FONT_CACHE[url];\n if (font) {\n cont(font);\n } else {\n loadBinary(url, function(data){\n if (data == null) {\n throw new Error(\"Cannot load font from \" + url);\n } else {\n var font = new TTFFont(data);\n FONT_CACHE[url] = font;\n cont(font);\n }\n });\n }\n }\n\n var IMAGE_CACHE = {};\n\n function clearImageCache() {\n IMAGE_CACHE = {};\n }\n\n function loadImage(url, size, cont, options) {\n var img = IMAGE_CACHE[url], bloburl, blob;\n if (img) {\n cont(img);\n } else {\n img = new Image();\n if (!(/^data:/i.test(url))) {\n img.crossOrigin = \"Anonymous\";\n }\n if (HAS_TYPED_ARRAYS && !(/^data:/i.test(url))) {\n // IE10 fails to load images from another domain even when the server sends the\n // proper CORS headers. a XHR, however, will be able to load the data.\n // http://stackoverflow.com/a/19734516/154985\n //\n // On the other hand, it's worth doing it this way for all browsers which support\n // responseType = \"blob\" (HAS_TYPED_ARRAYS will be true), because we can inspect the\n // mime type and if it's a JPEG (very common case) we can save a lot of time in\n // _load below.\n var xhr = new XMLHttpRequest();\n xhr.onload = function() {\n blob = xhr.response;\n if (browser.mozilla && blob.type == \"image/svg+xml\") {\n // Firefox won't render SVGs that don't contain width and height attributes.\n var reader = new FileReader();\n reader.onload = function() {\n var doc = new window.DOMParser().parseFromString(this.result, \"image/svg+xml\");\n var svg = doc.documentElement;\n if (svg.getAttribute(\"width\") && svg.getAttribute(\"height\")) {\n // we're good, continue with the existing blob.\n bloburl = URL.createObjectURL(blob);\n _load(bloburl);\n } else {\n svg.setAttribute(\"width\", size.width);\n svg.setAttribute(\"height\", size.height);\n var xml = new window.XMLSerializer().serializeToString(svg);\n var dataURL = \"data:image/svg+xml;base64,\" + (util.encodeBase64(xml));\n _load(dataURL);\n }\n };\n reader.readAsText(blob);\n } else {\n bloburl = URL.createObjectURL(blob);\n _load(bloburl);\n }\n };\n xhr.onerror = _onerror;\n xhr.open(\"GET\", url, true);\n xhr.responseType = \"blob\";\n xhr.send();\n } else {\n _load(url);\n }\n }\n\n function _load(url) {\n img.src = url;\n if (img.complete && !browser.msie) {\n // IE, bless its little heart, says img.complete == true even though the image is\n // not loaded (width=0), therefore we must go the onload route (ticket 929635).\n _onload.call(img);\n } else {\n img.onload = _onload;\n img.onerror = _onerror;\n }\n }\n\n function _trycanvas() {\n if (!size) {\n size = { width: img.width, height: img.height };\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = size.width;\n canvas.height = size.height;\n\n var ctx = canvas.getContext(\"2d\");\n ctx.drawImage(img, 0, 0, size.width, size.height);\n\n var imgdata;\n try {\n imgdata = ctx.getImageData(0, 0, size.width, size.height);\n } catch (ex) {\n // it tainted the canvas -- can't draw it.\n _onerror();\n return;\n } finally {\n if (bloburl) {\n URL.revokeObjectURL(bloburl);\n }\n }\n\n // in case it contains transparency, we must separate rgb data from the alpha\n // channel and create a PDFRawImage image with opacity. otherwise we can use a\n // PDFJpegImage.\n //\n // to do this in one step, we create the rgb and alpha streams anyway, even if\n // we might end up not using them if hasAlpha remains false.\n\n var hasAlpha = false, rgb = BinaryStream(), alpha = BinaryStream();\n var rawbytes = imgdata.data;\n var i = 0;\n while (i < rawbytes.length) {\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n var a = rawbytes[i++];\n if (a < 255) {\n hasAlpha = true;\n }\n alpha.writeByte(a);\n }\n\n if (hasAlpha || options.keepPNG) {\n img = new PDFRawImage(size.width, size.height, rgb, alpha);\n } else {\n // no transparency, encode as JPEG.\n var data = canvas.toDataURL(\"image/jpeg\", options.jpegQuality);\n data = data.substr(data.indexOf(\";base64,\") + 8);\n\n var stream = BinaryStream();\n stream.writeBase64(data);\n img = new PDFJpegImage(stream);\n }\n\n cont(IMAGE_CACHE[url] = img);\n }\n\n function _onerror() {\n cont(IMAGE_CACHE[url] = \"ERROR\");\n }\n\n function _onload() {\n if (size) {\n var svg = (blob && blob.type === 'image/svg+xml') || (\n /^data:image\\/svg\\+xml;/i.test(this.src.substring(0, 19))\n );\n\n var upscale = size.width >= img.width || size.height >= img.height;\n\n // Use the original image if requested size is bigger than the source,\n // unless it's an SVG that can be upscaled.\n if (!svg && upscale) {\n size = null;\n }\n }\n if (!size && blob && /^image\\/jpe?g$/i.test(blob.type)) {\n // If we know we got a JPEG, we can skip the process of rendering it to a\n // canvas, getting the pixel data, searching for transparency we know we won't\n // find, getting back a data URI and then decoding the BASE64 to finally get the\n // binary we already have. Also, we avoid downgrading the image quality, with\n // the possible drawback of making a bigger PDF; still, seems legit.\n //\n // Besides saving a lot of work, this also reuses the buffer memory\n // (BinaryStream does not create a copy), potentially saving some GC cycles.\n var reader = new FileReader();\n reader.onload = function() {\n try {\n var img = new PDFJpegImage(BinaryStream(new Uint8Array(this.result)));\n URL.revokeObjectURL(bloburl);\n cont(IMAGE_CACHE[url] = img);\n } catch (ex) {\n // if there's an error parsing the JPEG stream, it could be due to a\n // misconfigured server (improper content-type:\n // https://github.com/telerik/kendo-ui-core/issues/4184). If that's the case,\n // the canvas will still be able to draw it.\n _trycanvas();\n }\n };\n reader.readAsArrayBuffer(blob);\n } else {\n _trycanvas();\n }\n }\n }\n\n function manyLoader(loadOne) {\n return function(urls, callback) {\n var n = urls.length, i = n;\n if (n === 0) {\n return callback();\n }\n function next() {\n if (--n === 0) {\n callback();\n }\n }\n while (i-- > 0) {\n loadOne(urls[i], next);\n }\n };\n }\n\n var loadFonts = manyLoader(loadFont);\n var loadImages = function(images, callback, options) {\n options = $.extend({\n jpegQuality : 0.92,\n keepPNG : false\n }, options);\n var urls = Object.keys(images), n = urls.length;\n if (n === 0) {\n return callback();\n }\n function next() {\n if (--n === 0) {\n callback();\n }\n }\n urls.forEach(function(url){\n loadImage(url, images[url], next, options);\n });\n };\n\n var PDFDocument = function PDFDocument (options) {\n var self = this;\n var out = makeOutput();\n var objcount = 0;\n var objects = [];\n\n function getOption(name, defval) {\n return (options && options[name] != null) ? options[name] : defval;\n }\n\n self.getOption = getOption;\n\n self.attach = function(value) {\n if (objects.indexOf(value) < 0) {\n wrapObject(value, ++objcount);\n objects.push(value);\n }\n return value;\n };\n\n self.pages = [];\n\n self.FONTS = {};\n self.IMAGES = {};\n self.GRAD_COL_FUNCTIONS = {}; // cache for color gradient functions\n self.GRAD_OPC_FUNCTIONS = {}; // cache for opacity gradient functions\n self.GRAD_COL = {}; // cache for whole color gradient objects\n self.GRAD_OPC = {}; // cache for whole opacity gradient objects\n\n var catalog = self.attach(new PDFCatalog());\n var pageTree = self.attach(new PDFPageTree());\n\n if (getOption(\"autoPrint\")) {\n var nameTree = {};\n nameTree.JavaScript = new PDFDictionary({ Names: [\n new PDFString(\"JS\"), self.attach(new PDFDictionary({\n S: _(\"JavaScript\"),\n JS: new PDFString(\"print(true);\")\n }))\n ] });\n catalog.props.Names = new PDFDictionary(nameTree);\n }\n\n catalog.setPages(pageTree);\n\n var info = self.attach(new PDFDictionary({\n Producer : new PDFString(getOption(\"producer\", \"Kendo UI PDF Generator\"), true), // XXX: kendo.version?\n Title : new PDFString(getOption(\"title\", \"\"), true),\n Author : new PDFString(getOption(\"author\", \"\"), true),\n Subject : new PDFString(getOption(\"subject\", \"\"), true),\n Keywords : new PDFString(getOption(\"keywords\", \"\"), true),\n Creator : new PDFString(getOption(\"creator\", \"Kendo UI PDF Generator\"), true),\n CreationDate : getOption(\"date\", new Date())\n }));\n\n self.addPage = function(options) {\n var paperOptions = getPaperOptions(function(name, defval){\n return (options && options[name] != null) ? options[name] : defval;\n });\n var paperSize = paperOptions.paperSize;\n var margin = paperOptions.margin;\n var contentWidth = paperSize[0];\n var contentHeight = paperSize[1];\n if (margin) {\n contentWidth -= margin.left + margin.right;\n contentHeight -= margin.top + margin.bottom;\n }\n var content = new PDFStream(makeOutput(), null, true);\n var props = {\n Contents : self.attach(content),\n Parent : pageTree,\n MediaBox : [ 0, 0, paperSize[0], paperSize[1] ]\n };\n var page = new PDFPage(self, props);\n page._content = content;\n pageTree.addPage(self.attach(page));\n\n // canvas-like coord. system. (0,0) is upper-left.\n // text must be vertically mirorred before drawing.\n page.transform(1, 0, 0, -1, 0, paperSize[1]);\n\n if (margin) {\n page.translate(margin.left, margin.top);\n // XXX: clip to right/bottom margin. Make this optional?\n page.rect(0, 0, contentWidth, contentHeight);\n page.clip();\n }\n\n self.pages.push(page);\n return page;\n };\n\n self.render = function() {\n var i;\n /// file header\n out(\"%PDF-1.4\", NL, \"%\\xc2\\xc1\\xda\\xcf\\xce\", NL, NL);\n\n /// file body\n for (i = 0; i < objects.length; ++i) {\n objects[i].renderFull(out);\n out(NL, NL);\n }\n\n /// cross-reference table\n var xrefOffset = out.offset();\n out(\"xref\", NL, 0, \" \", objects.length + 1, NL);\n out(\"0000000000 65535 f \", NL);\n for (i = 0; i < objects.length; ++i) {\n out(zeropad(objects[i]._offset, 10), \" 00000 n \", NL);\n }\n out(NL);\n\n /// trailer\n out(\"trailer\", NL);\n out(new PDFDictionary({\n Size: objects.length + 1,\n Root: catalog,\n Info: info\n }), NL, NL);\n\n /// end\n out(\"startxref\", NL, xrefOffset, NL);\n out(\"%%EOF\", NL);\n\n return out.stream().offset(0);\n };\n\n self.loadFonts = loadFonts;\n self.loadImages = loadImages;\n };\n\n PDFDocument.prototype.getFont = function getFont (url) {\n var font = this.FONTS[url];\n if (!font) {\n font = FONT_CACHE[url];\n if (!font) {\n throw new Error(\"Font \" + url + \" has not been loaded\");\n }\n if (font === true) {\n font = this.attach(new PDFStandardFont(url));\n } else {\n font = this.attach(new PDFFont(this, font));\n }\n this.FONTS[url] = font;\n }\n return font;\n };\n\n PDFDocument.prototype.getImage = function getImage (url) {\n var img = this.IMAGES[url];\n if (!img) {\n img = IMAGE_CACHE[url];\n if (!img) {\n throw new Error(\"Image \" + url + \" has not been loaded\");\n }\n if (img === \"ERROR\") {\n return null;\n }\n img = this.IMAGES[url] = this.attach(img.asStream(this));\n }\n return img;\n };\n\n PDFDocument.prototype.getOpacityGS = function getOpacityGS (opacity, forStroke) {\n var id = parseFloat(opacity).toFixed(3);\n opacity = parseFloat(id);\n id += forStroke ? \"S\" : \"F\";\n var cache = this._opacityGSCache || (this._opacityGSCache = {});\n var gs = cache[id];\n if (!gs) {\n var props = {\n Type: _(\"ExtGState\")\n };\n if (forStroke) {\n props.CA = opacity;\n } else {\n props.ca = opacity;\n }\n gs = this.attach(new PDFDictionary(props));\n gs._resourceName = _(\"GS\" + (++RESOURCE_COUNTER));\n cache[id] = gs;\n }\n return gs;\n };\n\n PDFDocument.prototype.dict = function dict (props) {\n return new PDFDictionary(props);\n };\n\n PDFDocument.prototype.name = function name (str) {\n return _(str);\n };\n\n PDFDocument.prototype.stream = function stream (props, content) {\n return new PDFStream(content, props);\n };\n\n /* -----[ utils ]----- */\n\n function pad(str, len, ch) {\n while (str.length < len) {\n str = ch + str;\n }\n return str;\n }\n\n function zeropad(n, len) {\n return pad(String(n), len, \"0\");\n }\n\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n\n var isArray = Array.isArray || function(obj) {\n return obj instanceof Array;\n };\n\n function isDate(obj) {\n return obj instanceof Date;\n }\n\n function renderArray(a, out) {\n out(\"[\");\n if (a.length > 0) {\n out.withIndent(function(){\n for (var i = 0; i < a.length; ++i) {\n if (i > 0 && i % 8 === 0) {\n out.indent(a[i]);\n } else {\n out(\" \", a[i]);\n }\n }\n });\n //out.indent();\n }\n out(\" ]\");\n }\n\n function renderDate(date, out) {\n out(\"(D:\",\n zeropad(date.getUTCFullYear(), 4),\n zeropad(date.getUTCMonth() + 1, 2),\n zeropad(date.getUTCDate(), 2),\n zeropad(date.getUTCHours(), 2),\n zeropad(date.getUTCMinutes(), 2),\n zeropad(date.getUTCSeconds(), 2),\n \"Z)\");\n }\n\n function mm2pt(mm) {\n return mm * (72/25.4);\n }\n\n function cm2pt(cm) {\n return mm2pt(cm * 10);\n }\n\n function in2pt(inch) {\n return inch * 72;\n }\n\n function unitsToPoints(x, def) {\n if (typeof x == \"number\") {\n return x;\n }\n if (typeof x == \"string\") {\n var m;\n m = /^\\s*([0-9.]+)\\s*(mm|cm|in|pt)\\s*$/.exec(x);\n if (m) {\n var num = parseFloat(m[1]);\n if (!isNaN(num)) {\n if (m[2] == \"pt\") {\n return num;\n }\n return {\n \"mm\": mm2pt,\n \"cm\": cm2pt,\n \"in\": in2pt\n }[m[2]](num);\n }\n }\n }\n if (def != null) {\n return def;\n }\n throw new Error(\"Can't parse unit: \" + x);\n }\n\n /* -----[ PDF basic objects ]----- */\n\n var PDFValue = function PDFValue () {};\n\n PDFValue.prototype.beforeRender = function beforeRender () {};\n\n var PDFString = (function (PDFValue) {\n function PDFString(value, utf16be) {\n PDFValue.call(this);\n this.value = value;\n this.utf16be = Boolean(utf16be);\n }\n\n extendStatic(PDFString, PDFValue);\n PDFString.prototype = Object.create( PDFValue && PDFValue.prototype );\n PDFString.prototype.constructor = PDFString;\n PDFString.fn = PDFString.prototype;\n PDFString.fn.init = PDFString.fn.constructor;\n\n PDFString.prototype.render = function render (out) {\n var txt = this.value;\n if (this.utf16be) {\n txt = BOM + encodeUTF16BE(txt);\n txt = txt.replace(/([\\(\\)\\\\])/g, \"\\\\$1\");\n out(\"(\", txt, \")\");\n } else {\n // out.writeString truncates charcodes to 8 bits and\n // 0x128 & 0xFF is 40, the code for open paren.\n // therefore we need to do the chopping here to make\n // sure we backslash all cases.\n var data = [ 40 ]; // open PDF string '('\n for (var i = 0; i < txt.length; ++i) {\n var code = txt.charCodeAt(i) & 0xFF;\n if (code == 40 || code == 41 || code == 92) {\n // backslash before (, ) and \\\n data.push(92);\n }\n data.push(code);\n }\n data.push(41); // ')' close PDF string\n out.writeData(data);\n }\n };\n\n PDFString.prototype.toString = function toString () {\n return this.value;\n };\n\n return PDFString;\n }(PDFValue));\n\n var PDFHexString = (function (PDFString) {\n function PDFHexString(value) {\n PDFString.call(this, value);\n this.value = value;\n }\n\n extendStatic(PDFHexString, PDFString);\n PDFHexString.prototype = Object.create( PDFString && PDFString.prototype );\n PDFHexString.prototype.constructor = PDFHexString;\n PDFHexString.fn = PDFHexString.prototype;\n PDFHexString.fn.init = PDFHexString.fn.constructor;\n\n PDFHexString.prototype.render = function render (out) {\n var this$1$1 = this;\n\n out(\"<\");\n for (var i = 0; i < this.value.length; ++i) {\n out(zeropad(this$1$1.value.charCodeAt(i).toString(16), 4));\n }\n out(\">\");\n };\n\n return PDFHexString;\n }(PDFString));\n\n /// names\n var PDFName = (function (PDFValue) {\n function PDFName(name) {\n PDFValue.call(this);\n this.name = name;\n }\n\n extendStatic(PDFName, PDFValue);\n PDFName.prototype = Object.create( PDFValue && PDFValue.prototype );\n PDFName.prototype.constructor = PDFName;\n PDFName.fn = PDFName.prototype;\n PDFName.fn.init = PDFName.fn.constructor;\n\n PDFName.get = function get (name) {\n return _(name);\n };\n\n PDFName.prototype.render = function render (out) {\n out(\"/\" + this.escape());\n };\n\n PDFName.prototype.escape = function escape () {\n return this.name.replace(/[^\\x21-\\x7E]/g, function(c){\n return \"#\" + zeropad(c.charCodeAt(0).toString(16), 2);\n });\n };\n\n PDFName.prototype.toString = function toString () {\n return this.name;\n };\n\n return PDFName;\n }(PDFValue));\n\n var PDFName_cache = {};\n\n function _(name) {\n if (hasOwnProperty(PDFName_cache, name)) {\n return PDFName_cache[name];\n }\n return (PDFName_cache[name] = new PDFName(name));\n }\n\n /// dictionary\n\n var PDFDictionary = (function (PDFValue) {\n function PDFDictionary(props) {\n PDFValue.call(this);\n this.props = props;\n }\n\n extendStatic(PDFDictionary, PDFValue);\n PDFDictionary.prototype = Object.create( PDFValue && PDFValue.prototype );\n PDFDictionary.prototype.constructor = PDFDictionary;\n PDFDictionary.fn = PDFDictionary.prototype;\n PDFDictionary.fn.init = PDFDictionary.fn.constructor;\n\n PDFDictionary.prototype.render = function render (out) {\n var props = this.props, empty = true;\n out(\"<<\");\n out.withIndent(function(){\n for (var i in props) {\n if (hasOwnProperty(props, i) && !/^_/.test(i)) {\n empty = false;\n out.indent(_(i), \" \", props[i]);\n }\n }\n });\n if (!empty) {\n out.indent();\n }\n out(\">>\");\n };\n\n return PDFDictionary;\n }(PDFValue));\n\n /// streams\n\n var PDFStream = (function (PDFValue) {\n function PDFStream(data, props, compress) {\n PDFValue.call(this);\n if (typeof data == \"string\") {\n var tmp = BinaryStream();\n tmp.write(data);\n data = tmp;\n }\n this.data = data;\n this.props = props || {};\n this.compress = compress;\n }\n\n extendStatic(PDFStream, PDFValue);\n PDFStream.prototype = Object.create( PDFValue && PDFValue.prototype );\n PDFStream.prototype.constructor = PDFStream;\n PDFStream.fn = PDFStream.prototype;\n PDFStream.fn.init = PDFStream.fn.constructor;\n\n PDFStream.prototype.render = function render (out) {\n var data = this.data.get(), props = this.props;\n if (this.compress && kendoPdf.supportsDeflate()) {\n if (!props.Filter) {\n props.Filter = [];\n } else if (!(props.Filter instanceof Array)) {\n props.Filter = [ props.Filter ];\n }\n props.Filter.unshift(_(\"FlateDecode\"));\n data = kendoPdf.deflate(data);\n }\n props.Length = data.length;\n out(new PDFDictionary(props), \" stream\", NL);\n out.writeData(data);\n out(NL, \"endstream\");\n };\n\n return PDFStream;\n }(PDFValue));\n\n /// catalog\n\n var PDFCatalog = (function (PDFDictionary) {\n function PDFCatalog() {\n PDFDictionary.call(this, {\n Type: _(\"Catalog\")\n });\n }\n\n extendStatic(PDFCatalog, PDFDictionary);\n PDFCatalog.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n PDFCatalog.prototype.constructor = PDFCatalog;\n PDFCatalog.fn = PDFCatalog.prototype;\n PDFCatalog.fn.init = PDFCatalog.fn.constructor;\n\n PDFCatalog.prototype.setPages = function setPages (pagesObj) {\n this.props.Pages = pagesObj;\n };\n\n return PDFCatalog;\n }(PDFDictionary));\n\n /// page tree\n\n var PDFPageTree = (function (PDFDictionary) {\n function PDFPageTree() {\n PDFDictionary.call(this, {\n Type : _(\"Pages\"),\n Kids : [],\n Count : 0\n });\n }\n\n extendStatic(PDFPageTree, PDFDictionary);\n PDFPageTree.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n PDFPageTree.prototype.constructor = PDFPageTree;\n PDFPageTree.fn = PDFPageTree.prototype;\n PDFPageTree.fn.init = PDFPageTree.fn.constructor;\n\n PDFPageTree.prototype.addPage = function addPage (pageObj) {\n this.props.Kids.push(pageObj);\n this.props.Count++;\n };\n\n return PDFPageTree;\n }(PDFDictionary));\n\n /// images\n\n // JPEG\n\n var SOF_CODES = [0xc0, 0xc1, 0xc2, 0xc3, 0xc5, 0xc6, 0xc7, 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf];\n\n var PDFJpegImage = function PDFJpegImage(data) {\n // we must determine the correct color space. we'll parse a bit\n // of the JPEG stream for this, it's still better than going\n // through the canvas.\n // https://github.com/telerik/kendo-ui-core/issues/2845\n data.offset(0);\n var width, height, colorSpace, bitsPerComponent;\n var soi = data.readShort();\n if (soi != 0xFFD8) {\n // XXX: do we have some better options here?\n throw new Error(\"Invalid JPEG image\");\n }\n while (!data.eof()) {\n var ff = data.readByte();\n if (ff != 0xFF) {\n throw new Error(\"Invalid JPEG image\");\n }\n var marker = data.readByte();\n var length = data.readShort();\n if (SOF_CODES.indexOf(marker) >= 0) {\n // \"start of frame\" marker\n bitsPerComponent = data.readByte();\n height = data.readShort();\n width = data.readShort();\n colorSpace = data.readByte();\n break;\n }\n data.skip(length - 2);\n }\n\n if (colorSpace == null) {\n throw new Error(\"Invalid JPEG image\");\n }\n\n var props = {\n Type : _(\"XObject\"),\n Subtype : _(\"Image\"),\n Width : width,\n Height : height,\n BitsPerComponent : bitsPerComponent,\n Filter : _(\"DCTDecode\")\n };\n\n switch (colorSpace) {\n case 1:\n props.ColorSpace = _(\"DeviceGray\");\n break;\n case 3:\n props.ColorSpace = _(\"DeviceRGB\");\n break;\n case 4:\n props.ColorSpace = _(\"DeviceCMYK\");\n props.Decode = [ 1, 0, 1, 0, 1, 0, 1, 0 ]; // invert colors\n break;\n }\n\n this.asStream = function() {\n data.offset(0);\n var stream = new PDFStream(data, props);\n stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n return stream;\n };\n };\n\n // PDFRawImage will be used for images with transparency (PNG)\n\n var PDFRawImage = function PDFRawImage(width, height, rgb, alpha) {\n this.asStream = function(pdf) {\n var mask = new PDFStream(alpha, {\n Type : _(\"XObject\"),\n Subtype : _(\"Image\"),\n Width : width,\n Height : height,\n BitsPerComponent : 8,\n ColorSpace : _(\"DeviceGray\")\n }, true);\n var stream = new PDFStream(rgb, {\n Type : _(\"XObject\"),\n Subtype : _(\"Image\"),\n Width : width,\n Height : height,\n BitsPerComponent : 8,\n ColorSpace : _(\"DeviceRGB\"),\n SMask : pdf.attach(mask)\n }, true);\n stream._resourceName = _(\"I\" + (++RESOURCE_COUNTER));\n return stream;\n };\n };\n\n /// standard fonts\n\n var PDFStandardFont = (function (PDFDictionary) {\n function PDFStandardFont(name){\n PDFDictionary.call(this, {\n Type : _(\"Font\"),\n Subtype : _(\"Type1\"),\n BaseFont : _(name)\n });\n\n this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n }\n\n extendStatic(PDFStandardFont, PDFDictionary);\n PDFStandardFont.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n PDFStandardFont.prototype.constructor = PDFStandardFont;\n PDFStandardFont.fn = PDFStandardFont.prototype;\n PDFStandardFont.fn.init = PDFStandardFont.fn.constructor;\n\n PDFStandardFont.prototype.encodeText = function encodeText (str) {\n return new PDFString(String(str));\n };\n\n return PDFStandardFont;\n }(PDFDictionary));\n\n /// TTF fonts\n\n var PDFFont = (function (PDFDictionary) {\n function PDFFont(pdf, font, props){\n PDFDictionary.call(this, {});\n\n props = this.props;\n props.Type = _(\"Font\");\n props.Subtype = _(\"Type0\");\n props.Encoding = _(\"Identity-H\");\n\n this._pdf = pdf;\n this._font = font;\n this._sub = font.makeSubset();\n this._resourceName = _(\"F\" + (++RESOURCE_COUNTER));\n\n var head = font.head;\n\n this.name = font.psName;\n var scale = this.scale = font.scale;\n this.bbox = [\n head.xMin * scale,\n head.yMin * scale,\n head.xMax * scale,\n head.yMax * scale\n ];\n\n this.italicAngle = font.post.italicAngle;\n this.ascent = font.ascent * scale;\n this.descent = font.descent * scale;\n this.lineGap = font.lineGap * scale;\n this.capHeight = font.os2.capHeight || this.ascent;\n this.xHeight = font.os2.xHeight || 0;\n this.stemV = 0;\n\n this.familyClass = (font.os2.familyClass || 0) >> 8;\n this.isSerif = this.familyClass >= 1 && this.familyClass <= 7;\n this.isScript = this.familyClass == 10;\n\n this.flags = ((font.post.isFixedPitch ? 1 : 0) |\n (this.isSerif ? 1 << 1 : 0) |\n (this.isScript ? 1 << 3 : 0) |\n (this.italicAngle !== 0 ? 1 << 6 : 0) |\n (1 << 5));\n }\n\n extendStatic(PDFFont, PDFDictionary);\n PDFFont.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n PDFFont.prototype.constructor = PDFFont;\n PDFFont.fn = PDFFont.prototype;\n PDFFont.fn.init = PDFFont.fn.constructor;\n\n PDFFont.prototype.encodeText = function encodeText (text) {\n return new PDFHexString(this._sub.encodeText(String(text)));\n };\n\n PDFFont.prototype.getTextWidth = function getTextWidth (fontSize, text) {\n var this$1$1 = this;\n\n var width = 0, codeMap = this._font.cmap.codeMap;\n for (var i = 0; i < text.length; ++i) {\n var glyphId = codeMap[text.charCodeAt(i)];\n width += this$1$1._font.widthOfGlyph(glyphId || 0);\n }\n return width * fontSize / 1000;\n };\n\n PDFFont.prototype.beforeRender = function beforeRender () {\n var self = this;\n var sub = self._sub;\n\n // write the TTF data\n var data = sub.render();\n var fontStream = new PDFStream(BinaryStream(data), {\n Length1: data.length\n }, true);\n\n var descriptor = self._pdf.attach(new PDFDictionary({\n Type : _(\"FontDescriptor\"),\n FontName : _(self._sub.psName),\n FontBBox : self.bbox,\n Flags : self.flags,\n StemV : self.stemV,\n ItalicAngle : self.italicAngle,\n Ascent : self.ascent,\n Descent : self.descent,\n CapHeight : self.capHeight,\n XHeight : self.xHeight,\n FontFile2 : self._pdf.attach(fontStream)\n }));\n\n var cmap = sub.ncid2ogid;\n var firstChar = sub.firstChar;\n var lastChar = sub.lastChar;\n var charWidths = [];\n (function loop(i, chunk){\n if (i <= lastChar) {\n var gid = cmap[i];\n if (gid == null) {\n loop(i + 1);\n } else {\n if (!chunk) {\n charWidths.push(i, chunk = []);\n }\n chunk.push(self._font.widthOfGlyph(gid));\n loop(i + 1, chunk);\n }\n }\n })(firstChar);\n\n // As if two dictionaries weren't enough, we need another\n // one, the \"descendant font\". Only that one can be of\n // Subtype CIDFontType2. PDF is the X11 of document\n // formats: portable but full of legacy that nobody cares\n // about anymore.\n\n var descendant = new PDFDictionary({\n Type: _(\"Font\"),\n Subtype: _(\"CIDFontType2\"),\n BaseFont: _(self._sub.psName),\n CIDSystemInfo: new PDFDictionary({\n Registry : new PDFString(\"Adobe\"),\n Ordering : new PDFString(\"Identity\"),\n Supplement : 0\n }),\n FontDescriptor: descriptor,\n FirstChar: firstChar,\n LastChar: lastChar,\n DW: Math.round(self._font.widthOfGlyph(0)),\n W: charWidths,\n CIDToGIDMap: self._pdf.attach(self._makeCidToGidMap())\n });\n\n var dict = self.props;\n dict.BaseFont = _(self._sub.psName);\n dict.DescendantFonts = [ self._pdf.attach(descendant) ];\n\n // Compute the ToUnicode map so that apps can extract\n // meaningful text from the PDF.\n var unimap = new PDFToUnicodeCmap(firstChar, lastChar, sub.subset);\n var unimapStream = new PDFStream(makeOutput(), null, true);\n unimapStream.data(unimap);\n dict.ToUnicode = self._pdf.attach(unimapStream);\n };\n\n PDFFont.prototype._makeCidToGidMap = function _makeCidToGidMap () {\n return new PDFStream(BinaryStream(this._sub.cidToGidMap()), null, true);\n };\n\n return PDFFont;\n }(PDFDictionary));\n\n var PDFToUnicodeCmap = (function (PDFValue) {\n function PDFToUnicodeCmap(firstChar, lastChar, map){\n PDFValue.call(this);\n this.firstChar = firstChar;\n this.lastChar = lastChar;\n this.map = map;\n }\n\n extendStatic(PDFToUnicodeCmap, PDFValue);\n PDFToUnicodeCmap.prototype = Object.create( PDFValue && PDFValue.prototype );\n PDFToUnicodeCmap.prototype.constructor = PDFToUnicodeCmap;\n PDFToUnicodeCmap.fn = PDFToUnicodeCmap.prototype;\n PDFToUnicodeCmap.fn.init = PDFToUnicodeCmap.fn.constructor;\n\n PDFToUnicodeCmap.prototype.render = function render (out) {\n out.indent(\"/CIDInit /ProcSet findresource begin\");\n out.indent(\"12 dict begin\");\n out.indent(\"begincmap\");\n out.indent(\"/CIDSystemInfo <<\");\n out.indent(\" /Registry (Adobe)\");\n out.indent(\" /Ordering (UCS)\");\n out.indent(\" /Supplement 0\");\n out.indent(\">> def\");\n out.indent(\"/CMapName /Adobe-Identity-UCS def\");\n out.indent(\"/CMapType 2 def\");\n out.indent(\"1 begincodespacerange\");\n out.indent(\" <0000>\");\n out.indent(\"endcodespacerange\");\n\n var self = this;\n out.indent(self.lastChar - self.firstChar + 1, \" beginbfchar\");\n out.withIndent(function(){\n for (var code = self.firstChar; code <= self.lastChar; ++code) {\n var unicode = self.map[code];\n var str = ucs2encode([ unicode ]);\n out.indent(\"<\", zeropad(code.toString(16), 4), \">\", \"<\");\n for (var i = 0; i < str.length; ++i) {\n out(zeropad(str.charCodeAt(i).toString(16), 4));\n }\n out(\">\");\n }\n });\n out.indent(\"endbfchar\");\n\n out.indent(\"endcmap\");\n out.indent(\"CMapName currentdict /CMap defineresource pop\");\n out.indent(\"end\");\n out.indent(\"end\");\n };\n\n return PDFToUnicodeCmap;\n }(PDFValue));\n\n /// gradients\n\n function makeHash(a) {\n return a.map(function(x){\n return isArray(x) ? makeHash(x)\n : typeof x == \"number\" ? (Math.round(x * 1000) / 1000).toFixed(3)\n : x;\n }).join(\" \");\n }\n\n function cacheColorGradientFunction(pdf, r1, g1, b1, r2, g2, b2) {\n var hash = makeHash([ r1, g1, b1, r2, g2, b2 ]);\n var func = pdf.GRAD_COL_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_COL_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [ 0, 1 ],\n Range: [ 0, 1, 0, 1, 0, 1 ],\n N: 1,\n C0: [ r1 , g1 , b1 ],\n C1: [ r2 , g2 , b2 ]\n }));\n }\n return func;\n }\n\n function cacheOpacityGradientFunction(pdf, a1, a2) {\n var hash = makeHash([ a1, a2 ]);\n var func = pdf.GRAD_OPC_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_OPC_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [ 0, 1 ],\n Range: [ 0, 1 ],\n N: 1,\n C0: [ a1 ],\n C1: [ a2 ]\n }));\n }\n return func;\n }\n\n function makeGradientFunctions(pdf, stops) {\n var hasAlpha = false;\n var opacities = [];\n var colors = [];\n var offsets = [];\n var encode = [];\n var i, prev, cur, prevColor, curColor;\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n colors.push(cacheColorGradientFunction(\n pdf,\n prevColor.r, prevColor.g, prevColor.b,\n curColor.r, curColor.g, curColor.b\n ));\n if (prevColor.a < 1 || curColor.a < 1) {\n hasAlpha = true;\n }\n offsets.push(cur.offset);\n encode.push(0, 1);\n }\n if (hasAlpha) {\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n opacities.push(cacheOpacityGradientFunction(\n pdf, prevColor.a, curColor.a\n ));\n }\n }\n offsets.pop();\n return {\n hasAlpha : hasAlpha,\n colors : assemble(colors),\n opacities : hasAlpha ? assemble(opacities) : null\n };\n function assemble(funcs) {\n if (funcs.length == 1) {\n return funcs[0];\n }\n return {\n FunctionType: 3,\n Functions: funcs,\n Domain: [ 0, 1 ],\n Bounds: offsets,\n Encode: encode\n };\n }\n }\n\n function cacheColorGradient(pdf, isRadial, stops, coords, funcs, box) {\n var shading, hash;\n // if box is given then we have user-space coordinates, which\n // means the gradient is designed for a certain position/size\n // on page. caching won't do any good.\n if (!box) {\n var a = [ isRadial ].concat(coords);\n stops.forEach(function(x){\n a.push(x.offset, x.color.r, x.color.g, x.color.b);\n });\n hash = makeHash(a);\n shading = pdf.GRAD_COL[hash];\n }\n if (!shading) {\n shading = new PDFDictionary({\n Type: _(\"Shading\"),\n ShadingType: isRadial ? 3 : 2,\n ColorSpace: _(\"DeviceRGB\"),\n Coords: coords,\n Domain: [ 0, 1 ],\n Function: funcs,\n Extend: [ true, true ]\n });\n pdf.attach(shading);\n shading._resourceName = \"S\" + (++RESOURCE_COUNTER);\n if (hash) {\n pdf.GRAD_COL[hash] = shading;\n }\n }\n return shading;\n }\n\n function cacheOpacityGradient(pdf, isRadial, stops, coords, funcs, box) {\n var opacity, hash;\n // if box is given then we have user-space coordinates, which\n // means the gradient is designed for a certain position/size\n // on page. caching won't do any good.\n if (!box) {\n var a = [ isRadial ].concat(coords);\n stops.forEach(function(x){\n a.push(x.offset, x.color.a);\n });\n hash = makeHash(a);\n opacity = pdf.GRAD_OPC[hash];\n }\n if (!opacity) {\n opacity = new PDFDictionary({\n Type: _(\"ExtGState\"),\n AIS: false,\n CA: 1,\n ca: 1,\n SMask: {\n Type: _(\"Mask\"),\n S: _(\"Luminosity\"),\n G: pdf.attach(new PDFStream(\"/a0 gs /s0 sh\", {\n Type: _(\"XObject\"),\n Subtype: _(\"Form\"),\n FormType: 1,\n BBox: (box ? [\n box.left, box.top + box.height, box.left + box.width, box.top\n ] : [ 0, 1, 1, 0 ]),\n Group: {\n Type: _(\"Group\"),\n S: _(\"Transparency\"),\n CS: _(\"DeviceGray\"),\n I: true\n },\n Resources: {\n ExtGState: {\n a0: { CA: 1, ca: 1 }\n },\n Shading: {\n s0: {\n ColorSpace: _(\"DeviceGray\"),\n Coords: coords,\n Domain: [ 0, 1 ],\n ShadingType: isRadial ? 3 : 2,\n Function: funcs,\n Extend: [ true, true ]\n }\n }\n }\n }))\n }\n });\n pdf.attach(opacity);\n opacity._resourceName = \"O\" + (++RESOURCE_COUNTER);\n if (hash) {\n pdf.GRAD_OPC[hash] = opacity;\n }\n }\n return opacity;\n }\n\n function cacheGradient(pdf, gradient, box) {\n var isRadial = gradient.type == \"radial\";\n var funcs = makeGradientFunctions(pdf, gradient.stops);\n var coords = isRadial ? [\n gradient.start.x , gradient.start.y , gradient.start.r,\n gradient.end.x , gradient.end.y , gradient.end.r\n ] : [\n gradient.start.x , gradient.start.y,\n gradient.end.x , gradient.end.y\n ];\n var shading = cacheColorGradient(\n pdf, isRadial, gradient.stops, coords, funcs.colors, gradient.userSpace && box\n );\n var opacity = funcs.hasAlpha ? cacheOpacityGradient(\n pdf, isRadial, gradient.stops, coords, funcs.opacities, gradient.userSpace && box\n ) : null;\n return {\n hasAlpha: funcs.hasAlpha,\n shading: shading,\n opacity: opacity\n };\n }\n\n /// page object\n\n var PDFPage = (function (PDFDictionary) {\n function PDFPage(pdf, props){\n PDFDictionary.call(this, props);\n\n this._pdf = pdf;\n this._rcount = 0;\n this._textMode = false;\n this._fontResources = {};\n this._gsResources = {};\n this._xResources = {};\n this._patResources = {};\n this._shResources = {};\n this._opacity = 1;\n this._matrix = [ 1, 0, 0, 1, 0, 0 ];\n this._annotations = [];\n\n this._font = null;\n this._fontSize = null;\n\n this._contextStack = [];\n\n props = this.props;\n props.Type = _(\"Page\");\n props.ProcSet = [\n _(\"PDF\"),\n _(\"Text\"),\n _(\"ImageB\"),\n _(\"ImageC\"),\n _(\"ImageI\")\n ];\n props.Resources = new PDFDictionary({\n Font : new PDFDictionary(this._fontResources),\n ExtGState : new PDFDictionary(this._gsResources),\n XObject : new PDFDictionary(this._xResources),\n Pattern : new PDFDictionary(this._patResources),\n Shading : new PDFDictionary(this._shResources)\n });\n props.Annots = this._annotations;\n }\n\n extendStatic(PDFPage, PDFDictionary);\n PDFPage.prototype = Object.create( PDFDictionary && PDFDictionary.prototype );\n PDFPage.prototype.constructor = PDFPage;\n PDFPage.fn = PDFPage.prototype;\n PDFPage.fn.init = PDFPage.fn.constructor;\n\n PDFPage.prototype._out = function _out () {\n this._content.data.apply(null, arguments);\n };\n\n PDFPage.prototype.transform = function transform (a, b, c, d, e, f) {\n if (!isIdentityMatrix(arguments)) {\n this._matrix = mmul(arguments, this._matrix);\n this._out(a, \" \", b, \" \", c, \" \", d, \" \", e, \" \", f, \" cm\");\n // XXX: debug\n // this._out(\" % current matrix: \", this._matrix);\n this._out(NL);\n }\n };\n\n PDFPage.prototype.translate = function translate (dx, dy) {\n this.transform(1, 0, 0, 1, dx, dy);\n };\n\n PDFPage.prototype.scale = function scale (sx, sy) {\n this.transform(sx, 0, 0, sy, 0, 0);\n };\n\n PDFPage.prototype.rotate = function rotate (angle) {\n var cos = Math.cos(angle), sin = Math.sin(angle);\n this.transform(cos, sin, -sin, cos, 0, 0);\n };\n\n PDFPage.prototype.beginText = function beginText () {\n this._textMode = true;\n this._out(\"BT\", NL);\n };\n\n PDFPage.prototype.endText = function endText () {\n this._textMode = false;\n this._out(\"ET\", NL);\n };\n\n PDFPage.prototype._requireTextMode = function _requireTextMode () {\n if (!this._textMode) {\n throw new Error(\"Text mode required; call page.beginText() first\");\n }\n };\n\n PDFPage.prototype._requireFont = function _requireFont () {\n if (!this._font) {\n throw new Error(\"No font selected; call page.setFont() first\");\n }\n };\n\n PDFPage.prototype.setFont = function setFont (font, size) {\n this._requireTextMode();\n if (font == null) {\n font = this._font;\n } else if (!(font instanceof PDFFont)) {\n font = this._pdf.getFont(font);\n }\n if (size == null) {\n size = this._fontSize;\n }\n this._fontResources[font._resourceName] = font;\n this._font = font;\n this._fontSize = size;\n this._out(font._resourceName, \" \", size, \" Tf\", NL);\n };\n\n PDFPage.prototype.setTextLeading = function setTextLeading (size) {\n this._requireTextMode();\n this._out(size, \" TL\", NL);\n };\n\n PDFPage.prototype.setTextRenderingMode = function setTextRenderingMode (mode) {\n this._requireTextMode();\n this._out(mode, \" Tr\", NL);\n };\n\n PDFPage.prototype.showText = function showText (text, requestedWidth) {\n this._requireFont();\n if (text.length > 1 && requestedWidth && this._font instanceof PDFFont) {\n var outputWidth = this._font.getTextWidth(this._fontSize, text);\n var scale = requestedWidth / outputWidth * 100;\n this._out(scale, \" Tz \");\n }\n this._out(this._font.encodeText(text), \" Tj\", NL);\n };\n\n PDFPage.prototype.showTextNL = function showTextNL (text) {\n this._requireFont();\n this._out(this._font.encodeText(text), \" '\", NL);\n };\n\n PDFPage.prototype.addLink = function addLink (uri, box) {\n var ll = this._toPage({ x: box.left, y: box.bottom });\n var ur = this._toPage({ x: box.right, y: box.top });\n this._annotations.push(new PDFDictionary({\n Type : _(\"Annot\"),\n Subtype : _(\"Link\"),\n Rect : [ ll.x, ll.y, ur.x, ur.y ],\n Border : [ 0, 0, 0 ],\n A : new PDFDictionary({\n Type : _(\"Action\"),\n S : _(\"URI\"),\n URI : new PDFString(uri)\n })\n }));\n };\n\n PDFPage.prototype.setStrokeColor = function setStrokeColor (r, g, b) {\n this._out(r, \" \", g, \" \", b, \" RG\", NL);\n };\n\n PDFPage.prototype.setOpacity = function setOpacity (opacity) {\n this.setFillOpacity(opacity);\n this.setStrokeOpacity(opacity);\n this._opacity *= opacity;\n };\n\n PDFPage.prototype.setStrokeOpacity = function setStrokeOpacity (opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, true);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, \" gs\", NL);\n }\n };\n\n PDFPage.prototype.setFillColor = function setFillColor (r, g, b) {\n this._out(r, \" \", g, \" \", b, \" rg\", NL);\n };\n\n PDFPage.prototype.setFillOpacity = function setFillOpacity (opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, false);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, \" gs\", NL);\n }\n };\n\n PDFPage.prototype.gradient = function gradient (gradient$1, box) {\n this.save();\n this.rect(box.left, box.top, box.width, box.height);\n this.clip();\n if (!gradient$1.userSpace) {\n this.transform(box.width, 0, 0, box.height, box.left, box.top);\n }\n var g = cacheGradient(this._pdf, gradient$1, box);\n var sname = g.shading._resourceName, oname;\n this._shResources[sname] = g.shading;\n if (g.hasAlpha) {\n oname = g.opacity._resourceName;\n this._gsResources[oname] = g.opacity;\n this._out(\"/\" + oname + \" gs \");\n }\n this._out(\"/\" + sname + \" sh\", NL);\n this.restore();\n };\n\n PDFPage.prototype.setDashPattern = function setDashPattern (dashArray, dashPhase) {\n this._out(dashArray, \" \", dashPhase, \" d\", NL);\n };\n\n PDFPage.prototype.setLineWidth = function setLineWidth (width) {\n this._out(width, \" w\", NL);\n };\n\n PDFPage.prototype.setLineCap = function setLineCap (lineCap) {\n this._out(lineCap, \" J\", NL);\n };\n\n PDFPage.prototype.setLineJoin = function setLineJoin (lineJoin) {\n this._out(lineJoin, \" j\", NL);\n };\n\n PDFPage.prototype.setMitterLimit = function setMitterLimit (mitterLimit) {\n this._out(mitterLimit, \" M\", NL);\n };\n\n PDFPage.prototype.save = function save () {\n this._contextStack.push(this._context());\n this._out(\"q\", NL);\n };\n\n PDFPage.prototype.restore = function restore () {\n this._out(\"Q\", NL);\n this._context(this._contextStack.pop());\n };\n\n // paths\n PDFPage.prototype.moveTo = function moveTo (x, y) {\n this._out(x, \" \", y, \" m\", NL);\n };\n\n PDFPage.prototype.lineTo = function lineTo (x, y) {\n this._out(x, \" \", y, \" l\", NL);\n };\n\n PDFPage.prototype.bezier = function bezier (x1, y1, x2, y2, x3, y3) {\n this._out(x1, \" \", y1, \" \", x2, \" \", y2, \" \", x3, \" \", y3, \" c\", NL);\n };\n\n PDFPage.prototype.bezier1 = function bezier1 (x1, y1, x3, y3) {\n this._out(x1, \" \", y1, \" \", x3, \" \", y3, \" y\", NL);\n };\n\n PDFPage.prototype.bezier2 = function bezier2 (x2, y2, x3, y3) {\n this._out(x2, \" \", y2, \" \", x3, \" \", y3, \" v\", NL);\n };\n\n PDFPage.prototype.close = function close () {\n this._out(\"h\", NL);\n };\n\n PDFPage.prototype.rect = function rect (x, y, w, h) {\n this._out(x, \" \", y, \" \", w, \" \", h, \" re\", NL);\n };\n\n PDFPage.prototype.ellipse = function ellipse (x, y, rx, ry) {\n function _X(v) { return x + v; }\n function _Y(v) { return y + v; }\n\n // how to get to the \"magic number\" is explained here:\n // http://www.whizkidtech.redprince.net/bezier/circle/kappa/\n var k = 0.5522847498307936;\n\n this.moveTo(_X(0), _Y(ry));\n this.bezier(\n _X(rx * k) , _Y(ry),\n _X(rx) , _Y(ry * k),\n _X(rx) , _Y(0)\n );\n this.bezier(\n _X(rx) , _Y(-ry * k),\n _X(rx * k) , _Y(-ry),\n _X(0) , _Y(-ry)\n );\n this.bezier(\n _X(-rx * k) , _Y(-ry),\n _X(-rx) , _Y(-ry * k),\n _X(-rx) , _Y(0)\n );\n this.bezier(\n _X(-rx) , _Y(ry * k),\n _X(-rx * k) , _Y(ry),\n _X(0) , _Y(ry)\n );\n };\n\n PDFPage.prototype.circle = function circle (x, y, r) {\n this.ellipse(x, y, r, r);\n };\n\n PDFPage.prototype.stroke = function stroke () {\n this._out(\"S\", NL);\n };\n\n PDFPage.prototype.nop = function nop () {\n this._out(\"n\", NL);\n };\n\n PDFPage.prototype.clip = function clip () {\n this._out(\"W n\", NL);\n };\n\n PDFPage.prototype.clipStroke = function clipStroke () {\n this._out(\"W S\", NL);\n };\n\n PDFPage.prototype.closeStroke = function closeStroke () {\n this._out(\"s\", NL);\n };\n\n PDFPage.prototype.fill = function fill () {\n this._out(\"f\", NL);\n };\n\n PDFPage.prototype.fillStroke = function fillStroke () {\n this._out(\"B\", NL);\n };\n\n PDFPage.prototype.drawImage = function drawImage (url) {\n var img = this._pdf.getImage(url);\n if (img) { // the result can be null for a cross-domain image\n this._xResources[img._resourceName] = img;\n this._out(img._resourceName, \" Do\", NL);\n }\n };\n\n PDFPage.prototype.comment = function comment (txt) {\n var self = this;\n txt.split(/\\r?\\n/g).forEach(function(line){\n self._out(\"% \", line, NL);\n });\n };\n\n // internal\n PDFPage.prototype._context = function _context (val) {\n if (val != null) {\n this._opacity = val.opacity;\n this._matrix = val.matrix;\n } else {\n return {\n opacity: this._opacity,\n matrix: this._matrix\n };\n }\n };\n\n PDFPage.prototype._toPage = function _toPage (p) {\n var m = this._matrix;\n var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];\n return {\n x: a*p.x + c*p.y + e,\n y: b*p.x + d*p.y + f\n };\n };\n\n return PDFPage;\n }(PDFDictionary));\n\n function unquote(str) {\n return str.replace(/^\\s*(['\"])(.*)\\1\\s*$/, \"$2\");\n }\n\n function parseFontDef(fontdef) {\n // XXX: this is very crude for now and buggy. Proper parsing is quite involved.\n var rx = /^\\s*((normal|italic)\\s+)?((normal|small-caps)\\s+)?((normal|bold|\\d+)\\s+)?(([0-9.]+)(px|pt))(\\/(([0-9.]+)(px|pt)|normal))?\\s+(.*?)\\s*$/i;\n var m = rx.exec(fontdef);\n if (!m) {\n return { fontSize: 12, fontFamily: \"sans-serif\" };\n }\n var fontSize = m[8] ? parseInt(m[8], 10) : 12;\n return {\n italic : m[2] && m[2].toLowerCase() == \"italic\",\n variant : m[4],\n bold : m[6] && /bold|700/i.test(m[6]),\n fontSize : fontSize,\n lineHeight : m[12] ? m[12] == \"normal\" ? fontSize : parseInt(m[12], 10) : null,\n fontFamily : m[14].split(/\\s*,\\s*/g).map(unquote)\n };\n }\n\n function getFontURL(style) {\n function mkFamily(name) {\n if (style.bold) {\n name += \"|bold\";\n }\n if (style.italic) {\n name += \"|italic\";\n }\n return name.toLowerCase();\n }\n var fontFamily = style.fontFamily;\n var name, url;\n if (fontFamily instanceof Array) {\n for (var i = 0; i < fontFamily.length; ++i) {\n name = mkFamily(fontFamily[i]);\n url = FONT_MAPPINGS[name];\n if (url) {\n break;\n }\n }\n } else {\n url = FONT_MAPPINGS[fontFamily.toLowerCase()];\n }\n while (typeof url == \"function\") {\n url = url();\n }\n if (!url) {\n url = \"Times-Roman\";\n }\n return url;\n }\n\n var FONT_MAPPINGS = {\n \"serif\" : \"Times-Roman\",\n \"serif|bold\" : \"Times-Bold\",\n \"serif|italic\" : \"Times-Italic\",\n \"serif|bold|italic\" : \"Times-BoldItalic\",\n \"sans-serif\" : \"Helvetica\",\n \"sans-serif|bold\" : \"Helvetica-Bold\",\n \"sans-serif|italic\" : \"Helvetica-Oblique\",\n \"sans-serif|bold|italic\" : \"Helvetica-BoldOblique\",\n \"monospace\" : \"Courier\",\n \"monospace|bold\" : \"Courier-Bold\",\n \"monospace|italic\" : \"Courier-Oblique\",\n \"monospace|bold|italic\" : \"Courier-BoldOblique\",\n \"zapfdingbats\" : \"ZapfDingbats\",\n \"zapfdingbats|bold\" : \"ZapfDingbats\",\n \"zapfdingbats|italic\" : \"ZapfDingbats\",\n \"zapfdingbats|bold|italic\" : \"ZapfDingbats\"\n };\n\n function fontAlias(alias, name) {\n alias = alias.toLowerCase();\n FONT_MAPPINGS[alias] = function() {\n return FONT_MAPPINGS[name];\n };\n FONT_MAPPINGS[alias + \"|bold\"] = function() {\n return FONT_MAPPINGS[name + \"|bold\"];\n };\n FONT_MAPPINGS[alias + \"|italic\"] = function() {\n return FONT_MAPPINGS[name + \"|italic\"];\n };\n FONT_MAPPINGS[alias + \"|bold|italic\"] = function() {\n return FONT_MAPPINGS[name + \"|bold|italic\"];\n };\n }\n\n // Let's define some common names to an appropriate replacement.\n // These are overridable via pdf.defineFont, should the user want to\n // include the proper versions.\n\n fontAlias(\"Times New Roman\" , \"serif\");\n fontAlias(\"Courier New\" , \"monospace\");\n fontAlias(\"Arial\" , \"sans-serif\");\n fontAlias(\"Helvetica\" , \"sans-serif\");\n fontAlias(\"Verdana\" , \"sans-serif\");\n fontAlias(\"Tahoma\" , \"sans-serif\");\n fontAlias(\"Georgia\" , \"sans-serif\");\n fontAlias(\"Monaco\" , \"monospace\");\n fontAlias(\"Andale Mono\" , \"monospace\");\n\n function defineFont(name, url) {\n if (arguments.length == 1) {\n for (var i in name) {\n if (hasOwnProperty(name, i)) {\n defineFont(i, name[i]);\n }\n }\n } else {\n name = name.toLowerCase();\n FONT_MAPPINGS[name] = url;\n\n // special handling for DejaVu fonts: if they get defined,\n // let them also replace the default families, for good\n // Unicode support out of the box.\n switch (name) {\n case \"dejavu sans\" : FONT_MAPPINGS[\"sans-serif\"] = url; break;\n case \"dejavu sans|bold\" : FONT_MAPPINGS[\"sans-serif|bold\"] = url; break;\n case \"dejavu sans|italic\" : FONT_MAPPINGS[\"sans-serif|italic\"] = url; break;\n case \"dejavu sans|bold|italic\" : FONT_MAPPINGS[\"sans-serif|bold|italic\"] = url; break;\n case \"dejavu serif\" : FONT_MAPPINGS[\"serif\"] = url; break;\n case \"dejavu serif|bold\" : FONT_MAPPINGS[\"serif|bold\"] = url; break;\n case \"dejavu serif|italic\" : FONT_MAPPINGS[\"serif|italic\"] = url; break;\n case \"dejavu serif|bold|italic\" : FONT_MAPPINGS[\"serif|bold|italic\"] = url; break;\n case \"dejavu mono\" : FONT_MAPPINGS[\"monospace\"] = url; break;\n case \"dejavu mono|bold\" : FONT_MAPPINGS[\"monospace|bold\"] = url; break;\n case \"dejavu mono|italic\" : FONT_MAPPINGS[\"monospace|italic\"] = url; break;\n case \"dejavu mono|bold|italic\" : FONT_MAPPINGS[\"monospace|bold|italic\"] = url; break;\n }\n }\n }\n\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1*a2 + b1*c2, a1*b2 + b1*d2,\n c1*a2 + d1*c2, c1*b2 + d1*d2,\n e1*a2 + f1*c2 + e2, e1*b2 + f1*d2 + f2\n ];\n }\n\n function isIdentityMatrix(m) {\n return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;\n }\n\n var TEXT_RENDERING_MODE = {\n fill : 0,\n stroke : 1,\n fillAndStroke : 2,\n invisible : 3,\n fillAndClip : 4,\n strokeAndClip : 5,\n fillStrokeClip : 6,\n clip : 7\n };\n\n /* eslint-disable no-multi-spaces, key-spacing, indent, camelcase, space-before-blocks, eqeqeq, brace-style */\n /* eslint-disable space-infix-ops, space-before-function-paren, array-bracket-spacing, object-curly-spacing */\n /* eslint-disable no-nested-ternary, max-params, default-case, no-else-return, no-empty */\n /* eslint-disable no-param-reassign, no-var, block-scoped-var */\n\n var DEFAULT_IMAGE_DPI = 300;\n var TEXT_RENDERING_MODE$1 = TEXT_RENDERING_MODE;\n\n var DASH_PATTERNS = {\n dash : [ 4 ],\n dashDot : [ 4, 2, 1, 2 ],\n dot : [ 1, 2 ],\n longDash : [ 8, 2 ],\n longDashDot : [ 8, 2, 1, 2 ],\n longDashDotDot : [ 8, 2, 1, 2, 1, 2 ],\n solid : []\n };\n\n var LINE_CAP = {\n butt : 0,\n round : 1,\n square : 2\n };\n\n var LINE_JOIN = {\n miter : 0,\n round : 1,\n bevel : 2\n };\n\n function render$1(group, callback) {\n var fonts = [], images = {}, options = group.options;\n\n function getOption(name, defval, hash) {\n if (!hash) {\n hash = options;\n }\n if (hash.pdf && hash.pdf[name] != null) {\n return hash.pdf[name];\n }\n return defval;\n }\n\n var multiPage = getOption(\"multiPage\");\n var imgDPI = getOption(\"imgDPI\", DEFAULT_IMAGE_DPI);\n\n clearImageCache();\n\n group.traverse(function(element){\n dispatch({\n Image: function(element) {\n var url = element.src();\n var size = element.bbox().size;\n if (imgDPI) {\n var prev = images[url];\n size = {\n width: Math.ceil(size.width * imgDPI / 72),\n height: Math.ceil(size.height * imgDPI / 72)\n };\n\n if (prev) {\n size.width = Math.max(prev.width, size.width);\n size.height = Math.max(prev.height, size.height);\n }\n }\n\n images[url] = size;\n },\n Text: function(element) {\n var style = parseFontDef(element.options.font);\n var url = getFontURL(style);\n if (fonts.indexOf(url) < 0) {\n fonts.push(url);\n }\n }\n }, element);\n });\n\n function doIt() {\n if (--count > 0) {\n return;\n }\n\n var pdf = new (PDFDocument)({\n producer : getOption(\"producer\"),\n title : getOption(\"title\"),\n author : getOption(\"author\"),\n subject : getOption(\"subject\"),\n keywords : getOption(\"keywords\"),\n creator : getOption(\"creator\"),\n date : getOption(\"date\"),\n\n autoPrint : getOption(\"autoPrint\")\n });\n\n function drawPage(group) {\n var options = group.options;\n\n var tmp = optimize(group);\n var bbox = tmp.bbox;\n group = tmp.root;\n // var tmp, bbox;\n\n var paperSize = getOption(\"paperSize\", getOption(\"paperSize\", \"auto\"), options), addMargin = false;\n if (paperSize == \"auto\") {\n if (bbox) {\n var size = bbox.getSize();\n paperSize = [ size.width, size.height ];\n addMargin = true;\n var origin = bbox.getOrigin();\n tmp = new drawing.Group();\n tmp.transform(new kendoGeometry.Matrix(1, 0, 0, 1, -origin.x, -origin.y));\n tmp.append(group);\n group = tmp;\n }\n else {\n paperSize = \"A4\";\n }\n }\n\n var page;\n page = pdf.addPage({\n paperSize : paperSize,\n margin : getOption(\"margin\", getOption(\"margin\"), options),\n addMargin : addMargin,\n landscape : getOption(\"landscape\", getOption(\"landscape\", false), options)\n });\n drawElement(group, page, pdf);\n }\n\n if (multiPage) {\n group.children.forEach(drawPage);\n } else {\n drawPage(group);\n }\n\n callback(pdf.render(), pdf);\n }\n\n var count = 2;\n loadFonts(fonts, doIt);\n loadImages(images, doIt, {\n jpegQuality : getOption(\"jpegQuality\", 0.92),\n keepPNG : getOption(\"keepPNG\", false)\n });\n }\n\n function toDataURL(group, callback) {\n render$1(group, function(data){\n callback(\"data:application/pdf;base64,\" + data.base64());\n });\n }\n\n function toBlob(group, callback) {\n render$1(group, function(data){\n callback(new window.Blob([ data.get() ], { type: \"application/pdf\" }));\n });\n }\n\n function saveAs$1(group, filename, proxy, callback) {\n // XXX: Safari has Blob, but does not support the download attribute\n // so we'd end up converting to dataURL and using the proxy anyway.\n if (window.Blob && !supportBrowser.safari) {\n toBlob(group, function(blob){\n kendo.saveAs({ dataURI: blob, fileName: filename });\n if (callback) {\n callback(blob);\n }\n });\n } else {\n toDataURL(group, function(dataURL){\n kendo.saveAs({ dataURI: dataURL, fileName: filename, proxyURL: proxy });\n if (callback) {\n callback(dataURL);\n }\n });\n }\n }\n\n function dispatch(handlers, element) {\n var handler = handlers[element.nodeType];\n if (handler) {\n return handler.call.apply(handler, arguments);\n }\n return element;\n }\n\n function drawElement(element, page, pdf) {\n if (element.options._pdfDebug) {\n page.comment(\"BEGIN: \" + element.options._pdfDebug);\n }\n\n var transform = element.transform();\n var opacity = element.opacity();\n\n page.save();\n\n if (opacity != null && opacity < 1) {\n page.setOpacity(opacity);\n }\n\n setStrokeOptions(element, page, pdf);\n setFillOptions(element, page, pdf);\n\n if (transform) {\n var m = transform.matrix();\n page.transform(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n\n setClipping(element, page, pdf);\n\n dispatch({\n Path : drawPath,\n MultiPath : drawMultiPath,\n Circle : drawCircle,\n Arc : drawArc,\n Text : drawText,\n Image : drawImage$1,\n Group : drawGroup,\n Rect : drawRect\n }, element, page, pdf);\n\n page.restore();\n\n if (element.options._pdfDebug) {\n page.comment(\"END: \" + element.options._pdfDebug);\n }\n }\n\n function setStrokeOptions(element, page) {\n var stroke = element.stroke && element.stroke();\n if (!stroke) {\n return;\n }\n\n var color = stroke.color;\n if (color) {\n color = parseColor$1(color);\n if (color == null) {\n return; // no stroke\n }\n page.setStrokeColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setStrokeOpacity(color.a);\n }\n }\n\n var width = stroke.width;\n if (width != null) {\n if (width === 0) {\n return; // no stroke\n }\n page.setLineWidth(width);\n }\n\n var dashType = stroke.dashType;\n if (dashType) {\n page.setDashPattern(DASH_PATTERNS[dashType], 0);\n }\n\n var lineCap = stroke.lineCap;\n if (lineCap) {\n page.setLineCap(LINE_CAP[lineCap]);\n }\n\n var lineJoin = stroke.lineJoin;\n if (lineJoin) {\n page.setLineJoin(LINE_JOIN[lineJoin]);\n }\n\n var opacity = stroke.opacity;\n if (opacity != null) {\n page.setStrokeOpacity(opacity);\n }\n }\n\n function setFillOptions(element, page) {\n var fill = element.fill && element.fill();\n if (!fill) {\n return;\n }\n\n if (fill instanceof drawing.Gradient) {\n return;\n }\n\n var color = fill.color;\n if (color) {\n color = parseColor$1(color);\n if (color == null) {\n return; // no fill\n }\n page.setFillColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setFillOpacity(color.a);\n }\n }\n\n var opacity = fill.opacity;\n if (opacity != null) {\n page.setFillOpacity(opacity);\n }\n }\n\n function setClipping(element, page, pdf) {\n // XXX: only Path supported at the moment.\n var clip = element.clip();\n if (clip) {\n _drawPath(clip, page, pdf);\n page.clip();\n // page.setStrokeColor(Math.random(), Math.random(), Math.random());\n // page.setLineWidth(1);\n // page.stroke();\n }\n }\n\n function shouldDraw(thing) {\n return (thing &&\n (thing instanceof drawing.Gradient ||\n (thing.color && !/^(none|transparent)$/i.test(thing.color) &&\n (thing.width == null || thing.width > 0) &&\n (thing.opacity == null || thing.opacity > 0))));\n }\n\n function maybeGradient(element, page, pdf, stroke) {\n var fill = element.fill();\n if (fill instanceof drawing.Gradient) {\n if (stroke) {\n page.clipStroke();\n } else {\n page.clip();\n }\n var isRadial = fill instanceof drawing.RadialGradient;\n var start, end;\n if (isRadial) {\n start = { x: fill.center().x , y: fill.center().y , r: 0 };\n end = { x: fill.center().x , y: fill.center().y , r: fill.radius() };\n } else {\n start = { x: fill.start().x , y: fill.start().y };\n end = { x: fill.end().x , y: fill.end().y };\n }\n\n var stops = fill.stops.elements().map(function(stop){\n var offset = stop.offset();\n if (/%$/.test(offset)) {\n offset = parseFloat(offset) / 100;\n } else {\n offset = parseFloat(offset);\n }\n var color = parseColor$1(stop.color());\n color.a *= stop.opacity();\n return {\n offset: offset,\n color: color\n };\n });\n\n // Duplicats first and last stop to fix\n // https://github.com/telerik/kendo-ui-core/issues/1782\n stops.unshift(stops[0]);\n stops.push(stops[stops.length - 1]);\n\n var gradient = {\n userSpace : fill.userSpace(),\n type : isRadial ? \"radial\" : \"linear\",\n start : start,\n end : end,\n stops : stops\n };\n var box = element.rawBBox();\n var tl = box.topLeft(), size = box.getSize();\n box = {\n left : tl.x,\n top : tl.y,\n width : size.width,\n height : size.height\n };\n page.gradient(gradient, box);\n return true;\n }\n }\n\n function maybeFillStroke(element, page, pdf) {\n if (shouldDraw(element.fill()) && shouldDraw(element.stroke())) {\n if (!maybeGradient(element, page, pdf, true)) {\n page.fillStroke();\n }\n } else if (shouldDraw(element.fill())) {\n if (!maybeGradient(element, page, pdf, false)) {\n page.fill();\n }\n } else if (shouldDraw(element.stroke())) {\n page.stroke();\n } else {\n // we should not get here; the path should have been\n // optimized away. but let's be prepared.\n page.nop();\n }\n }\n\n function maybeDrawRect(path, page) {\n var segments = path.segments;\n if (segments.length == 4 && path.options.closed) {\n // detect if this path looks like a rectangle parallel to the axis\n var a = [];\n for (var i = 0; i < segments.length; ++i) {\n if (segments[i].controlIn()) { // has curve?\n return false;\n }\n a[i] = segments[i].anchor();\n }\n // it's a rectangle if the y/x/y/x or x/y/x/y coords of\n // consecutive points are the same.\n var isRect = (\n a[0].y == a[1].y && a[1].x == a[2].x && a[2].y == a[3].y && a[3].x == a[0].x\n ) || (\n a[0].x == a[1].x && a[1].y == a[2].y && a[2].x == a[3].x && a[3].y == a[0].y\n );\n if (isRect) {\n // this saves a bunch of instructions in PDF:\n // moveTo, lineTo, lineTo, lineTo, close -> rect.\n page.rect(a[0].x, a[0].y,\n a[2].x - a[0].x /*width*/,\n a[2].y - a[0].y /*height*/);\n return true;\n }\n }\n }\n\n function _drawPath(element, page, pdf) {\n var segments = element.segments;\n if (segments.length === 0) {\n return;\n }\n if (!maybeDrawRect(element, page, pdf)) {\n for (var prev, i = 0; i < segments.length; ++i) {\n var seg = segments[i];\n var anchor = seg.anchor();\n if (!prev) {\n page.moveTo(anchor.x, anchor.y);\n } else {\n var prevOut = prev.controlOut();\n var controlIn = seg.controlIn();\n if (prevOut && controlIn) {\n page.bezier(\n prevOut.x , prevOut.y,\n controlIn.x , controlIn.y,\n anchor.x , anchor.y\n );\n } else {\n page.lineTo(anchor.x, anchor.y);\n }\n }\n prev = seg;\n }\n if (element.options.closed) {\n page.close();\n }\n }\n }\n\n function drawPath(element, page, pdf) {\n _drawPath(element, page, pdf);\n maybeFillStroke(element, page, pdf);\n }\n\n function drawMultiPath(element, page, pdf) {\n var paths = element.paths;\n for (var i = 0; i < paths.length; ++i) {\n _drawPath(paths[i], page, pdf);\n }\n maybeFillStroke(element, page, pdf);\n }\n\n function drawCircle(element, page, pdf) {\n var g = element.geometry();\n page.circle(g.center.x, g.center.y, g.radius);\n maybeFillStroke(element, page, pdf);\n }\n\n function drawArc(element, page, pdf) {\n var points = element.geometry().curvePoints();\n page.moveTo(points[0].x, points[0].y);\n for (var i = 1; i < points.length;) {\n page.bezier(\n points[i].x, points[i++].y,\n points[i].x, points[i++].y,\n points[i].x, points[i++].y\n );\n }\n maybeFillStroke(element, page, pdf);\n }\n\n function drawText(element, page) {\n var style = parseFontDef(element.options.font);\n var pos = element._position;\n var mode;\n if (element.fill() && element.stroke()) {\n mode = TEXT_RENDERING_MODE$1.fillAndStroke;\n } else if (element.fill()) {\n mode = TEXT_RENDERING_MODE$1.fill;\n } else if (element.stroke()) {\n mode = TEXT_RENDERING_MODE$1.stroke;\n }\n\n page.transform(1, 0, 0, -1, pos.x, pos.y + style.fontSize);\n page.beginText();\n page.setFont(getFontURL(style), style.fontSize);\n page.setTextRenderingMode(mode);\n page.showText(element.content(), element._pdfRect ? element._pdfRect.width() : null);\n page.endText();\n }\n\n function drawGroup(element, page, pdf) {\n if (element._pdfLink) {\n page.addLink(element._pdfLink.url, element._pdfLink);\n }\n var children = element.children;\n for (var i = 0; i < children.length; ++i) {\n drawElement(children[i], page, pdf);\n }\n }\n\n function drawImage$1(element, page) {\n var url = element.src();\n if (!url) {\n return;\n }\n\n var rect = element.rect();\n var tl = rect.getOrigin();\n var sz = rect.getSize();\n page.transform(sz.width, 0, 0, -sz.height, tl.x, tl.y + sz.height);\n page.drawImage(url);\n }\n\n function drawRect(element, page, pdf) {\n var geometry = element.geometry();\n var ref = geometry.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n if (rx === 0 && ry === 0) {\n page.rect(geometry.origin.x, geometry.origin.y, geometry.size.width, geometry.size.height);\n maybeFillStroke(element, page, pdf);\n } else {\n drawPath(drawing.Path.fromRect(geometry, element.options), page, pdf);\n }\n }\n\n function parseColor$1(value) {\n var color = kendo.parseColor(value, true);\n return color ? color.toRGB() : null;\n }\n\n function optimize(root) {\n var clipbox = false;\n var matrix = kendoGeometry.Matrix.unit();\n var currentBox = null;\n var changed;\n do {\n changed = false;\n root = opt(root);\n } while (root && changed);\n return { root: root, bbox: currentBox };\n\n function change(newShape) {\n changed = true;\n return newShape;\n }\n\n function visible(shape) {\n return (shape.visible() && shape.opacity() > 0 &&\n ( shouldDraw(shape.fill()) ||\n shouldDraw(shape.stroke()) ));\n }\n\n function optArray(a) {\n var b = [];\n for (var i = 0; i < a.length; ++i) {\n var el = opt(a[i]);\n if (el != null) {\n b.push(el);\n }\n }\n return b;\n }\n\n function withClipping(shape, f) {\n var saveclipbox = clipbox;\n var savematrix = matrix;\n\n if (shape.transform()) {\n matrix = matrix.multiplyCopy(shape.transform().matrix());\n }\n\n var clip = shape.clip();\n if (clip) {\n clip = clip.bbox();\n if (clip) {\n clip = clip.bbox(matrix);\n clipbox = clipbox ? kendoGeometry.Rect.intersect(clipbox, clip) : clip;\n }\n }\n\n try {\n return f();\n }\n finally {\n clipbox = saveclipbox;\n matrix = savematrix;\n }\n }\n\n function inClipbox(shape) {\n if (clipbox == null) {\n return false;\n }\n var box = shape.rawBBox().bbox(matrix);\n if (clipbox && box) {\n box = kendoGeometry.Rect.intersect(box, clipbox);\n }\n return box;\n }\n\n function opt(shape) {\n return withClipping(shape, function(){\n if (!(shape instanceof drawing.Group || shape instanceof drawing.MultiPath)) {\n var box = inClipbox(shape);\n if (!box) {\n return change(null);\n }\n currentBox = currentBox ? kendoGeometry.Rect.union(currentBox, box) : box;\n }\n return dispatch({\n Path: function(shape) {\n if (shape.segments.length === 0 || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n MultiPath: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n var el = new drawing.MultiPath(shape.options);\n el.paths = optArray(shape.paths);\n if (el.paths.length === 0) {\n return change(null);\n }\n return el;\n },\n Circle: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Arc: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Text: function(shape) {\n if (!/\\S/.test(shape.content()) || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Image: function(shape) {\n if (!(shape.visible() && shape.opacity() > 0)) {\n return change(null);\n }\n return shape;\n },\n Group: function(shape) {\n if (!(shape.visible() && shape.opacity() > 0)) {\n return change(null);\n }\n var el = new drawing.Group(shape.options);\n el.children = optArray(shape.children);\n el._pdfLink = shape._pdfLink;\n if (shape !== root && el.children.length === 0 && !shape._pdfLink) {\n return change(null);\n }\n return el;\n },\n Rect: function(shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n }\n }, shape);\n });\n }\n }\n\n function exportPDF(group, options) {\n var promise = util.createPromise();\n\n for (var i in options) {\n if (i == \"margin\" && group.options.pdf && group.options.pdf._ignoreMargin) {\n // This hackish option is set by the page breaking code in drawDOM. The idea is\n // that margin is already taken into account there (that's required to do proper\n // page breaking) and we don't want to set it again here, as it would double the\n // top-left margin, and truncate the content on bottom/right.\n continue;\n }\n group.options.set(\"pdf.\" + i, options[i]);\n }\n\n toDataURL(group, promise.resolve);\n\n return promise;\n }\n\n // XXX: the duplication is in order to keep exportPDF return a data\n // URI, which is what previous versions do. Currently only IE9 does\n // not support Blob, IMO we should switch to Blob by default\n // everywhere.\n function exportPDFToBlob(group, options) {\n var promise = util.createPromise();\n\n for (var i in options) {\n if (i == \"margin\" && group.options.pdf && group.options.pdf._ignoreMargin) {\n // This hackish option is set by the page breaking code in drawDOM. The idea is\n // that margin is already taken into account there (that's required to do proper\n // page breaking) and we don't want to set it again here, as it would double the\n // top-left margin, and truncate the content on bottom/right.\n continue;\n }\n group.options.set(\"pdf.\" + i, options[i]);\n }\n\n if (window.Blob && !supportBrowser.safari) {\n toBlob(group, promise.resolve);\n } else {\n toDataURL(group, promise.resolve);\n }\n\n return promise;\n }\n\n kendo.deepExtend(kendo.pdf, {\n Document: PDFDocument,\n BinaryStream: BinaryStream,\n defineFont: defineFont,\n parseFontDef: parseFontDef,\n getFontURL: getFontURL,\n loadFonts: loadFonts,\n loadImages: loadImages,\n getPaperOptions: getPaperOptions,\n clearImageCache: clearImageCache,\n TEXT_RENDERING_MODE: TEXT_RENDERING_MODE,\n exportPDF: exportPDF,\n exportPDFToBlob: exportPDFToBlob,\n saveAs: saveAs$1,\n toDataURL: toDataURL,\n toBlob: toBlob,\n render: render$1\n });\n\n kendo.drawing.exportPDF = kendo.pdf.exportPDF;\n kendo.drawing.pdf = kendo.pdf;\n\n })(window.kendo.jQuery);\n\n (function ($, undefined$1) {\n \n kendo.PDFMixin = {\n extend: function(proto) {\n proto.events.push(\"pdfExport\");\n proto.options.pdf = this.options;\n proto.saveAsPDF = this.saveAsPDF;\n proto._drawPDF = this._drawPDF;\n proto._drawPDFShadow = this._drawPDFShadow;\n },\n options: {\n fileName : \"Export.pdf\",\n proxyURL : \"\",\n\n // paperSize can be an usual name, i.e. \"A4\", or an array of two Number-s specifying the\n // width/height in points (1pt = 1/72in), or strings including unit, i.e. \"10mm\". Supported\n // units are \"mm\", \"cm\", \"in\" and \"pt\". The default \"auto\" means paper size is determined\n // by content.\n paperSize : \"auto\",\n\n // Export all pages, if applicable\n allPages: false,\n\n // True to reverse the paper dimensions if needed such that width is the larger edge.\n landscape : false,\n\n // An object containing { left, top, bottom, right } margins with units.\n margin : null,\n\n // Optional information for the PDF Info dictionary; all strings except for the date.\n title : null,\n author : null,\n subject : null,\n keywords : null,\n creator : \"Kendo UI PDF Generator v.\" + kendo.version,\n\n // Creation Date; defaults to new Date()\n date : null\n },\n\n saveAsPDF: function() {\n var progress = new $.Deferred();\n var promise = progress.promise();\n var args = { promise: promise };\n\n if (this.trigger(\"pdfExport\", args)) {\n return;\n }\n\n var options = this.options.pdf;\n options.multiPage = options.multiPage || options.allPages;\n\n this._drawPDF(progress)\n .then(function(root) {\n return kendo.drawing.exportPDF(root, options);\n })\n .done(function(dataURI) {\n kendo.saveAs({\n dataURI: dataURI,\n fileName: options.fileName,\n proxyURL: options.proxyURL,\n forceProxy: options.forceProxy,\n proxyTarget: options.proxyTarget\n });\n\n progress.resolve();\n })\n .fail(function(err) {\n progress.reject(err);\n });\n\n return promise;\n },\n\n _drawPDF: function(progress) {\n var promise = new $.Deferred();\n\n kendo.drawing.drawDOM(this.wrapper)\n .done(function(group) {\n var args = {\n page: group,\n pageNumber: 1,\n progress: 1,\n totalPages: 1\n };\n\n progress.notify(args);\n promise.resolve(args.page);\n })\n .fail(function(err) {\n promise.reject(err);\n });\n\n return promise;\n },\n\n _drawPDFShadow: function(settings, drawOptions) {\n settings = settings || {};\n var wrapper = this.wrapper;\n var shadow = $(\"
\");\n\n // Content will be allowed to take up to 200\" if no width is given.\n if (settings.width) {\n shadow.css({\n width: settings.width,\n overflow: \"visible\"\n });\n }\n\n wrapper.before(shadow);\n shadow.append(settings.content || wrapper.clone(true, true));\n\n var defer = $.Deferred();\n\n /* https://github.com/telerik/kendo/issues/4790 -- We need to\n * allow a small timeout so that the browser finalizes the\n * layout of any images here. Another option would be to pass\n * forcePageBreak: \"-\" to drawDOM, but that would make it\n * clone the content as well and look for page breaks;\n * needless work, so better do it here.\n */\n setTimeout(function(){\n var promise = kendo.drawing.drawDOM(shadow, drawOptions);\n promise.always(function() {\n shadow.remove();\n }).then(function(){\n defer.resolve.apply(defer, arguments);\n }).fail(function(){\n defer.reject.apply(defer, arguments);\n }).progress(function(){\n defer.progress.apply(defer, arguments);\n });\n }, 15);\n\n return defer.promise();\n }\n };\n\n })(window.kendo.jQuery);\n\n var __meta__ = {\n id: \"pdf\",\n name: \"PDF export\",\n description: \"PDF Generation framework\",\n mixin: true,\n category: \"framework\",\n depends: [ \"core\", \"drawing\" ]\n };\n\n}));\n"]}