mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-08 01:17:23 +08:00
36 lines
2.3 MiB
36 lines
2.3 MiB
var Bs=Object.defineProperty,As=Object.defineProperties;var _s=Object.getOwnPropertyDescriptors;var ns=Object.getOwnPropertySymbols;var qs=Object.prototype.hasOwnProperty,$s=Object.prototype.propertyIsEnumerable;var $l=Math.pow,Te=(st,r,h)=>r in st?Bs(st,r,{enumerable:!0,configurable:!0,writable:!0,value:h}):st[r]=h,El=(st,r)=>{for(var h in r||(r={}))qs.call(r,h)&&Te(st,h,r[h]);if(ns)for(var h of ns(r))$s.call(r,h)&&Te(st,h,r[h]);return st},vl=(st,r)=>As(st,_s(r));var Dl=(st,r,h)=>(Te(st,typeof r!="symbol"?r+"":r,h),h),Le=(st,r,h)=>{if(!r.has(st))throw TypeError("Cannot "+h)};var bt=(st,r,h)=>(Le(st,r,"read from private field"),h?h.call(st):r.get(st)),ll=(st,r,h)=>{if(r.has(st))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(st):r.set(st,h)},ul=(st,r,h,M)=>(Le(st,r,"write to private field"),M?M.call(st,h):r.set(st,h),h);var te=(st,r,h,M)=>({set _(p){ul(st,r,p,h)},get _(){return bt(st,r,M)}}),nl=(st,r,h)=>(Le(st,r,"access private method"),h);var Sl=(st,r,h)=>new Promise((M,p)=>{var f=F=>{try{O(h.next(F))}catch(L){p(L)}},B=F=>{try{O(h.throw(F))}catch(L){p(L)}},O=F=>F.done?M(F.value):Promise.resolve(F.value).then(f,B);O((h=h.apply(st,r)).next())});import{c as commonjsRequire$1}from"./_commonjs-dynamic-modules-TDtrdbi3.js";import{R as require$$5,S as shallowRef,U as watchEffect,V as toValue,z as onBeforeUnmount,d as defineComponent,a as ref,W as toRef,p as computed,n as watch,f as openBlock,k as createElementBlock,F as Fragment,l as renderList,X as renderSlot,g as createBaseVNode,j as createCommentVNode,s as normalizeStyle,Z as useI18n,b as createBlock,w as withCtx,e as resolveComponent,A as resolveDirective,i as createVNode,h as createTextVNode,B as withDirectives,t as toDisplayString,u as unref}from"./index-CLfWc4d3.js";var pdf$1={exports:{}};(function(module,exports){(function(r,h){module.exports=r.pdfjsLib=h()})(globalThis,()=>(()=>{var __webpack_modules__=[,(st,r)=>{var yl;Object.defineProperty(r,"__esModule",{value:!0}),r.VerbosityLevel=r.Util=r.UnknownErrorException=r.UnexpectedResponseException=r.TextRenderingMode=r.RenderingIntentFlag=r.PromiseCapability=r.PermissionFlag=r.PasswordResponses=r.PasswordException=r.PageActionEventType=r.OPS=r.MissingPDFException=r.MAX_IMAGE_SIZE_TO_CACHE=r.LINE_FACTOR=r.LINE_DESCENT_FACTOR=r.InvalidPDFException=r.ImageKind=r.IDENTITY_MATRIX=r.FormatError=r.FeatureTest=r.FONT_IDENTITY_MATRIX=r.DocumentActionEventType=r.CMapCompressionType=r.BaseException=r.BASELINE_FACTOR=r.AnnotationType=r.AnnotationReplyType=r.AnnotationPrefix=r.AnnotationMode=r.AnnotationFlag=r.AnnotationFieldFlag=r.AnnotationEditorType=r.AnnotationEditorPrefix=r.AnnotationEditorParamsType=r.AnnotationBorderStyleType=r.AnnotationActionEventType=r.AbortException=void 0,r.assert=Ut,r.bytesToString=Mt,r.createValidAbsoluteUrl=Ht,r.getModificationDate=cl,r.getUuid=Vl,r.getVerbosityLevel=Nt,r.info=zt,r.isArrayBuffer=Ct,r.isArrayEqual=el,r.isNodeJS=void 0,r.normalizeUnicode=Tl,r.objectFromMap=Dt,r.objectSize=Ot,r.setVerbosityLevel=it,r.shadow=Pt,r.string32=gt,r.stringToBytes=Rt,r.stringToPDFString=Ft,r.stringToUTF8String=wt,r.unreachable=Xt,r.utf8StringToString=pt,r.warn=Gt;const h=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser");r.isNodeJS=h;const M=[1,0,0,1,0,0];r.IDENTITY_MATRIX=M;const p=[.001,0,0,.001,0,0];r.FONT_IDENTITY_MATRIX=p;const f=1e7;r.MAX_IMAGE_SIZE_TO_CACHE=f;const B=1.35;r.LINE_FACTOR=B;const O=.35;r.LINE_DESCENT_FACTOR=O;const F=O/B;r.BASELINE_FACTOR=F;const L={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,OPLIST:256};r.RenderingIntentFlag=L;const g={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3};r.AnnotationMode=g;const q="pdfjs_internal_editor_";r.AnnotationEditorPrefix=q;const v={DISABLE:-1,NONE:0,FREETEXT:3,STAMP:13,INK:15};r.AnnotationEditorType=v;const Q={RESIZE:1,CREATE:2,FREETEXT_SIZE:11,FREETEXT_COLOR:12,FREETEXT_OPACITY:13,INK_COLOR:21,INK_THICKNESS:22,INK_OPACITY:23};r.AnnotationEditorParamsType=Q;const R={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048};r.PermissionFlag=R;const j={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4};r.TextRenderingMode=j;const I={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3};r.ImageKind=I;const k={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26};r.AnnotationType=k;const C={GROUP:"Group",REPLY:"R"};r.AnnotationReplyType=C;const U={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512};r.AnnotationFlag=U;const K={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864};r.AnnotationFieldFlag=K;const u={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};r.AnnotationBorderStyleType=u;const m={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"};r.AnnotationActionEventType=m;const _={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"};r.DocumentActionEventType=_;const $={O:"PageOpen",C:"PageClose"};r.PageActionEventType=$;const P={ERRORS:0,WARNINGS:1,INFOS:5};r.VerbosityLevel=P;const Zt={NONE:0,BINARY:1};r.CMapCompressionType=Zt;const dt={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91};r.OPS=dt;const It={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};r.PasswordResponses=It;let xt=P.WARNINGS;function it(Qt){Number.isInteger(Qt)&&(xt=Qt)}function Nt(){return xt}function zt(Qt){xt>=P.INFOS&&console.log(`Info: ${Qt}`)}function Gt(Qt){xt>=P.WARNINGS&&console.log(`Warning: ${Qt}`)}function Xt(Qt){throw new Error(Qt)}function Ut(Qt,ot){Qt||Xt(ot)}function Vt(Qt){switch(Qt==null?void 0:Qt.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function Ht(Qt,ot=null,ut=null){if(!Qt)return null;try{if(ut&&typeof Qt=="string"){if(ut.addDefaultProtocol&&Qt.startsWith("www.")){const jt=Qt.match(/\./g);(jt==null?void 0:jt.length)>=2&&(Qt=`http://${Qt}`)}if(ut.tryConvertEncoding)try{Qt=wt(Qt)}catch(jt){}}const Tt=ot?new URL(Qt,ot):new URL(Qt);if(Vt(Tt))return Tt}catch(Tt){}return null}function Pt(Qt,ot,ut,Tt=!1){return Object.defineProperty(Qt,ot,{value:ut,enumerable:!Tt,configurable:!0,writable:!1}),ut}const at=function(){function ot(ut,Tt){this.constructor===ot&&Xt("Cannot initialize BaseException."),this.message=ut,this.name=Tt}return ot.prototype=new Error,ot.constructor=ot,ot}();r.BaseException=at;class S extends at{constructor(ot,ut){super(ot,"PasswordException"),this.code=ut}}r.PasswordException=S;class w extends at{constructor(ot,ut){super(ot,"UnknownErrorException"),this.details=ut}}r.UnknownErrorException=w;class X extends at{constructor(ot){super(ot,"InvalidPDFException")}}r.InvalidPDFException=X;class J extends at{constructor(ot){super(ot,"MissingPDFException")}}r.MissingPDFException=J;class H extends at{constructor(ot,ut){super(ot,"UnexpectedResponseException"),this.status=ut}}r.UnexpectedResponseException=H;class et extends at{constructor(ot){super(ot,"FormatError")}}r.FormatError=et;class lt extends at{constructor(ot){super(ot,"AbortException")}}r.AbortException=lt;function Mt(Qt){(typeof Qt!="object"||(Qt==null?void 0:Qt.length)===void 0)&&Xt("Invalid argument for bytesToString");const ot=Qt.length,ut=8192;if(ot<ut)return String.fromCharCode.apply(null,Qt);const Tt=[];for(let jt=0;jt<ot;jt+=ut){const Jt=Math.min(jt+ut,ot),Lt=Qt.subarray(jt,Jt);Tt.push(String.fromCharCode.apply(null,Lt))}return Tt.join("")}function Rt(Qt){typeof Qt!="string"&&Xt("Invalid argument for stringToBytes");const ot=Qt.length,ut=new Uint8Array(ot);for(let Tt=0;Tt<ot;++Tt)ut[Tt]=Qt.charCodeAt(Tt)&255;return ut}function gt(Qt){return String.fromCharCode(Qt>>24&255,Qt>>16&255,Qt>>8&255,Qt&255)}function Ot(Qt){return Object.keys(Qt).length}function Dt(Qt){const ot=Object.create(null);for(const[ut,Tt]of Qt)ot[ut]=Tt;return ot}function qt(){const Qt=new Uint8Array(4);return Qt[0]=1,new Uint32Array(Qt.buffer,0,1)[0]===1}function vt(){try{return new Function(""),!0}catch(Qt){return!1}}class dl{static get isLittleEndian(){return Pt(this,"isLittleEndian",qt())}static get isEvalSupported(){return Pt(this,"isEvalSupported",vt())}static get isOffscreenCanvasSupported(){return Pt(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas!="undefined")}static get platform(){return typeof navigator=="undefined"?Pt(this,"platform",{isWin:!1,isMac:!1}):Pt(this,"platform",{isWin:navigator.platform.includes("Win"),isMac:navigator.platform.includes("Mac")})}static get isCSSRoundSupported(){var ot,ut;return Pt(this,"isCSSRoundSupported",(ut=(ot=globalThis.CSS)==null?void 0:ot.supports)==null?void 0:ut.call(ot,"width: round(1.5px, 1px)"))}}r.FeatureTest=dl;const ol=[...Array(256).keys()].map(Qt=>Qt.toString(16).padStart(2,"0"));class il{static makeHexColor(ot,ut,Tt){return`#${ol[ot]}${ol[ut]}${ol[Tt]}`}static scaleMinMax(ot,ut){let Tt;ot[0]?(ot[0]<0&&(Tt=ut[0],ut[0]=ut[1],ut[1]=Tt),ut[0]*=ot[0],ut[1]*=ot[0],ot[3]<0&&(Tt=ut[2],ut[2]=ut[3],ut[3]=Tt),ut[2]*=ot[3],ut[3]*=ot[3]):(Tt=ut[0],ut[0]=ut[2],ut[2]=Tt,Tt=ut[1],ut[1]=ut[3],ut[3]=Tt,ot[1]<0&&(Tt=ut[2],ut[2]=ut[3],ut[3]=Tt),ut[2]*=ot[1],ut[3]*=ot[1],ot[2]<0&&(Tt=ut[0],ut[0]=ut[1],ut[1]=Tt),ut[0]*=ot[2],ut[1]*=ot[2]),ut[0]+=ot[4],ut[1]+=ot[4],ut[2]+=ot[5],ut[3]+=ot[5]}static transform(ot,ut){return[ot[0]*ut[0]+ot[2]*ut[1],ot[1]*ut[0]+ot[3]*ut[1],ot[0]*ut[2]+ot[2]*ut[3],ot[1]*ut[2]+ot[3]*ut[3],ot[0]*ut[4]+ot[2]*ut[5]+ot[4],ot[1]*ut[4]+ot[3]*ut[5]+ot[5]]}static applyTransform(ot,ut){const Tt=ot[0]*ut[0]+ot[1]*ut[2]+ut[4],jt=ot[0]*ut[1]+ot[1]*ut[3]+ut[5];return[Tt,jt]}static applyInverseTransform(ot,ut){const Tt=ut[0]*ut[3]-ut[1]*ut[2],jt=(ot[0]*ut[3]-ot[1]*ut[2]+ut[2]*ut[5]-ut[4]*ut[3])/Tt,Jt=(-ot[0]*ut[1]+ot[1]*ut[0]+ut[4]*ut[1]-ut[5]*ut[0])/Tt;return[jt,Jt]}static getAxialAlignedBoundingBox(ot,ut){const Tt=this.applyTransform(ot,ut),jt=this.applyTransform(ot.slice(2,4),ut),Jt=this.applyTransform([ot[0],ot[3]],ut),Lt=this.applyTransform([ot[2],ot[1]],ut);return[Math.min(Tt[0],jt[0],Jt[0],Lt[0]),Math.min(Tt[1],jt[1],Jt[1],Lt[1]),Math.max(Tt[0],jt[0],Jt[0],Lt[0]),Math.max(Tt[1],jt[1],Jt[1],Lt[1])]}static inverseTransform(ot){const ut=ot[0]*ot[3]-ot[1]*ot[2];return[ot[3]/ut,-ot[1]/ut,-ot[2]/ut,ot[0]/ut,(ot[2]*ot[5]-ot[4]*ot[3])/ut,(ot[4]*ot[1]-ot[5]*ot[0])/ut]}static singularValueDecompose2dScale(ot){const ut=[ot[0],ot[2],ot[1],ot[3]],Tt=ot[0]*ut[0]+ot[1]*ut[2],jt=ot[0]*ut[1]+ot[1]*ut[3],Jt=ot[2]*ut[0]+ot[3]*ut[2],Lt=ot[2]*ut[1]+ot[3]*ut[3],Yt=(Tt+Lt)/2,Kt=Math.sqrt($l(Tt+Lt,2)-4*(Tt*Lt-Jt*jt))/2,$t=Yt+Kt||1,tl=Yt-Kt||1;return[Math.sqrt($t),Math.sqrt(tl)]}static normalizeRect(ot){const ut=ot.slice(0);return ot[0]>ot[2]&&(ut[0]=ot[2],ut[2]=ot[0]),ot[1]>ot[3]&&(ut[1]=ot[3],ut[3]=ot[1]),ut}static intersect(ot,ut){const Tt=Math.max(Math.min(ot[0],ot[2]),Math.min(ut[0],ut[2])),jt=Math.min(Math.max(ot[0],ot[2]),Math.max(ut[0],ut[2]));if(Tt>jt)return null;const Jt=Math.max(Math.min(ot[1],ot[3]),Math.min(ut[1],ut[3])),Lt=Math.min(Math.max(ot[1],ot[3]),Math.max(ut[1],ut[3]));return Jt>Lt?null:[Tt,Jt,jt,Lt]}static bezierBoundingBox(ot,ut,Tt,jt,Jt,Lt,Yt,Kt){const $t=[],tl=[[],[]];let bl,Bt,rl,hl,Il,Wl,nt,T;for(let kt=0;kt<2;++kt){if(kt===0?(Bt=6*ot-12*Tt+6*Jt,bl=-3*ot+9*Tt-9*Jt+3*Yt,rl=3*Tt-3*ot):(Bt=6*ut-12*jt+6*Lt,bl=-3*ut+9*jt-9*Lt+3*Kt,rl=3*jt-3*ut),Math.abs(bl)<1e-12){if(Math.abs(Bt)<1e-12)continue;hl=-rl/Bt,0<hl&&hl<1&&$t.push(hl);continue}nt=Bt*Bt-4*rl*bl,T=Math.sqrt(nt),!(nt<0)&&(Il=(-Bt+T)/(2*bl),0<Il&&Il<1&&$t.push(Il),Wl=(-Bt-T)/(2*bl),0<Wl&&Wl<1&&$t.push(Wl))}let ct=$t.length,Wt;const yt=ct;for(;ct--;)hl=$t[ct],Wt=1-hl,tl[0][ct]=Wt*Wt*Wt*ot+3*Wt*Wt*hl*Tt+3*Wt*hl*hl*Jt+hl*hl*hl*Yt,tl[1][ct]=Wt*Wt*Wt*ut+3*Wt*Wt*hl*jt+3*Wt*hl*hl*Lt+hl*hl*hl*Kt;return tl[0][yt]=ot,tl[1][yt]=ut,tl[0][yt+1]=Yt,tl[1][yt+1]=Kt,tl[0].length=tl[1].length=yt+2,[Math.min(...tl[0]),Math.min(...tl[1]),Math.max(...tl[0]),Math.max(...tl[1])]}}r.Util=il;const _t=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function Ft(Qt){if(Qt[0]>="ï"){let ut;if(Qt[0]==="þ"&&Qt[1]==="ÿ"?ut="utf-16be":Qt[0]==="ÿ"&&Qt[1]==="þ"?ut="utf-16le":Qt[0]==="ï"&&Qt[1]==="»"&&Qt[2]==="¿"&&(ut="utf-8"),ut)try{const Tt=new TextDecoder(ut,{fatal:!0}),jt=Rt(Qt);return Tt.decode(jt)}catch(Tt){Gt(`stringToPDFString: "${Tt}".`)}}const ot=[];for(let ut=0,Tt=Qt.length;ut<Tt;ut++){const jt=_t[Qt.charCodeAt(ut)];ot.push(jt?String.fromCharCode(jt):Qt.charAt(ut))}return ot.join("")}function wt(Qt){return decodeURIComponent(escape(Qt))}function pt(Qt){return unescape(encodeURIComponent(Qt))}function Ct(Qt){return typeof Qt=="object"&&(Qt==null?void 0:Qt.byteLength)!==void 0}function el(Qt,ot){if(Qt.length!==ot.length)return!1;for(let ut=0,Tt=Qt.length;ut<Tt;ut++)if(Qt[ut]!==ot[ut])return!1;return!0}function cl(Qt=new Date){return[Qt.getUTCFullYear().toString(),(Qt.getUTCMonth()+1).toString().padStart(2,"0"),Qt.getUTCDate().toString().padStart(2,"0"),Qt.getUTCHours().toString().padStart(2,"0"),Qt.getUTCMinutes().toString().padStart(2,"0"),Qt.getUTCSeconds().toString().padStart(2,"0")].join("")}class Ml{constructor(){ll(this,yl,!1);this.promise=new Promise((ot,ut)=>{this.resolve=Tt=>{ul(this,yl,!0),ot(Tt)},this.reject=Tt=>{ul(this,yl,!0),ut(Tt)}})}get settled(){return bt(this,yl)}}yl=new WeakMap,r.PromiseCapability=Ml;let Yl=null,Xl=null;function Tl(Qt){return Yl||(Yl=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu,Xl=new Map([["ſt","ſt"]])),Qt.replaceAll(Yl,(ot,ut,Tt)=>ut?ut.normalize("NFKC"):Xl.get(Tt))}function Vl(){if(typeof crypto!="undefined"&&typeof(crypto==null?void 0:crypto.randomUUID)=="function")return crypto.randomUUID();const Qt=new Uint8Array(32);if(typeof crypto!="undefined"&&typeof(crypto==null?void 0:crypto.getRandomValues)=="function")crypto.getRandomValues(Qt);else for(let ot=0;ot<32;ot++)Qt[ot]=Math.floor(Math.random()*255);return Mt(Qt)}const Ll="pdfjs_internal_id_";r.AnnotationPrefix=Ll},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{var st,h,M,p,Ql,B,Ze,F,L,g,q,v,Q,R,j,I,he,C,U,Ve,u,m;Object.defineProperty(exports,"__esModule",{value:!0}),exports.RenderTask=exports.PDFWorkerUtil=exports.PDFWorker=exports.PDFPageProxy=exports.PDFDocumentProxy=exports.PDFDocumentLoadingTask=exports.PDFDataRangeTransport=exports.LoopbackPort=exports.DefaultStandardFontDataFactory=exports.DefaultFilterFactory=exports.DefaultCanvasFactory=exports.DefaultCMapReaderFactory=void 0,Object.defineProperty(exports,"SVGGraphics",{enumerable:!0,get:function(){return _displaySvg.SVGGraphics}}),exports.build=void 0,exports.getDocument=getDocument,exports.version=void 0;var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(3),_display_utils=__w_pdfjs_require__(6),_font_loader=__w_pdfjs_require__(9),_displayNode_utils=__w_pdfjs_require__(10),_canvas=__w_pdfjs_require__(11),_worker_options=__w_pdfjs_require__(14),_message_handler=__w_pdfjs_require__(15),_metadata=__w_pdfjs_require__(16),_optional_content_config=__w_pdfjs_require__(17),_transport_stream=__w_pdfjs_require__(18),_displayFetch_stream=__w_pdfjs_require__(19),_displayNetwork=__w_pdfjs_require__(22),_displayNode_stream=__w_pdfjs_require__(23),_displaySvg=__w_pdfjs_require__(24),_xfa_text=__w_pdfjs_require__(25);const DEFAULT_RANGE_CHUNK_SIZE=65536,RENDERING_CANCELLED_TIMEOUT=100,DELAYED_CLEANUP_TIMEOUT=5e3,DefaultCanvasFactory=_util.isNodeJS?_displayNode_utils.NodeCanvasFactory:_display_utils.DOMCanvasFactory;exports.DefaultCanvasFactory=DefaultCanvasFactory;const DefaultCMapReaderFactory=_util.isNodeJS?_displayNode_utils.NodeCMapReaderFactory:_display_utils.DOMCMapReaderFactory;exports.DefaultCMapReaderFactory=DefaultCMapReaderFactory;const DefaultFilterFactory=_util.isNodeJS?_displayNode_utils.NodeFilterFactory:_display_utils.DOMFilterFactory;exports.DefaultFilterFactory=DefaultFilterFactory;const DefaultStandardFontDataFactory=_util.isNodeJS?_displayNode_utils.NodeStandardFontDataFactory:_display_utils.DOMStandardFontDataFactory;exports.DefaultStandardFontDataFactory=DefaultStandardFontDataFactory;function getDocument($){var Ml,Yl;if(typeof $=="string"||$ instanceof URL?$={url:$}:(0,_util.isArrayBuffer)($)&&($={data:$}),typeof $!="object")throw new Error("Invalid parameter in getDocument, need parameter object.");if(!$.url&&!$.data&&!$.range)throw new Error("Invalid parameter object: need either .data, .range or .url");const P=new PDFDocumentLoadingTask,{docId:Zt}=P,dt=$.url?getUrlProp($.url):null,It=$.data?getDataProp($.data):null,xt=$.httpHeaders||null,it=$.withCredentials===!0,Nt=(Ml=$.password)!=null?Ml:null,zt=$.range instanceof PDFDataRangeTransport?$.range:null,Gt=Number.isInteger($.rangeChunkSize)&&$.rangeChunkSize>0?$.rangeChunkSize:DEFAULT_RANGE_CHUNK_SIZE;let Xt=$.worker instanceof PDFWorker?$.worker:null;const Ut=$.verbosity,Vt=typeof $.docBaseUrl=="string"&&!(0,_display_utils.isDataScheme)($.docBaseUrl)?$.docBaseUrl:null,Ht=typeof $.cMapUrl=="string"?$.cMapUrl:null,Pt=$.cMapPacked!==!1,at=$.CMapReaderFactory||DefaultCMapReaderFactory,S=typeof $.standardFontDataUrl=="string"?$.standardFontDataUrl:null,w=$.StandardFontDataFactory||DefaultStandardFontDataFactory,X=$.stopAtErrors!==!0,J=Number.isInteger($.maxImageSize)&&$.maxImageSize>-1?$.maxImageSize:-1,H=$.isEvalSupported!==!1,et=typeof $.isOffscreenCanvasSupported=="boolean"?$.isOffscreenCanvasSupported:!_util.isNodeJS,lt=Number.isInteger($.canvasMaxAreaInBytes)?$.canvasMaxAreaInBytes:-1,Mt=typeof $.disableFontFace=="boolean"?$.disableFontFace:_util.isNodeJS,Rt=$.fontExtraProperties===!0,gt=$.enableXfa===!0,Ot=$.ownerDocument||globalThis.document,Dt=$.disableRange===!0,qt=$.disableStream===!0,vt=$.disableAutoFetch===!0,dl=$.pdfBug===!0,ol=zt?zt.length:(Yl=$.length)!=null?Yl:NaN,il=typeof $.useSystemFonts=="boolean"?$.useSystemFonts:!_util.isNodeJS&&!Mt,_t=typeof $.useWorkerFetch=="boolean"?$.useWorkerFetch:at===_display_utils.DOMCMapReaderFactory&&w===_display_utils.DOMStandardFontDataFactory&&Ht&&S&&(0,_display_utils.isValidFetchUrl)(Ht,document.baseURI)&&(0,_display_utils.isValidFetchUrl)(S,document.baseURI),Ft=$.canvasFactory||new DefaultCanvasFactory({ownerDocument:Ot}),wt=$.filterFactory||new DefaultFilterFactory({docId:Zt,ownerDocument:Ot}),pt=null;(0,_util.setVerbosityLevel)(Ut);const Ct={canvasFactory:Ft,filterFactory:wt};if(_t||(Ct.cMapReaderFactory=new at({baseUrl:Ht,isCompressed:Pt}),Ct.standardFontDataFactory=new w({baseUrl:S})),!Xt){const Xl={verbosity:Ut,port:_worker_options.GlobalWorkerOptions.workerPort};Xt=Xl.port?PDFWorker.fromPort(Xl):new PDFWorker(Xl),P._worker=Xt}const el={docId:Zt,apiVersion:"3.11.174",data:It,password:Nt,disableAutoFetch:vt,rangeChunkSize:Gt,length:ol,docBaseUrl:Vt,enableXfa:gt,evaluatorOptions:{maxImageSize:J,disableFontFace:Mt,ignoreErrors:X,isEvalSupported:H,isOffscreenCanvasSupported:et,canvasMaxAreaInBytes:lt,fontExtraProperties:Rt,useSystemFonts:il,cMapUrl:_t?Ht:null,standardFontDataUrl:_t?S:null}},cl={ignoreErrors:X,isEvalSupported:H,disableFontFace:Mt,fontExtraProperties:Rt,enableXfa:gt,ownerDocument:Ot,disableAutoFetch:vt,pdfBug:dl,styleElement:pt};return Xt.promise.then(function(){if(P.destroyed)throw new Error("Loading aborted");const Xl=_fetchDocument(Xt,el),Tl=new Promise(function(Vl){let Ll;zt?Ll=new _transport_stream.PDFDataTransportStream({length:ol,initialData:zt.initialData,progressiveDone:zt.progressiveDone,contentDispositionFilename:zt.contentDispositionFilename,disableRange:Dt,disableStream:qt},zt):It||(Ll=(Qt=>_util.isNodeJS?new _displayNode_stream.PDFNodeStream(Qt):(0,_display_utils.isValidFetchUrl)(Qt.url)?new _displayFetch_stream.PDFFetchStream(Qt):new _displayNetwork.PDFNetworkStream(Qt))({url:dt,length:ol,httpHeaders:xt,withCredentials:it,rangeChunkSize:Gt,disableRange:Dt,disableStream:qt})),Vl(Ll)});return Promise.all([Xl,Tl]).then(function([Vl,Ll]){if(P.destroyed)throw new Error("Loading aborted");const yl=new _message_handler.MessageHandler(Zt,Vl,Xt.port),Qt=new WorkerTransport(yl,P,Ll,cl,Ct);P._transport=Qt,yl.send("Ready",null)})}).catch(P._capability.reject),P}function _fetchDocument($,P){return Sl(this,null,function*(){if($.destroyed)throw new Error("Worker was destroyed");const Zt=yield $.messageHandler.sendWithPromise("GetDocRequest",P,P.data?[P.data.buffer]:null);if($.destroyed)throw new Error("Worker was destroyed");return Zt})}function getUrlProp($){if($ instanceof URL)return $.href;try{return new URL($,window.location).href}catch(P){if(_util.isNodeJS&&typeof $=="string")return $}throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.")}function getDataProp($){if(_util.isNodeJS&&typeof Buffer!="undefined"&&$ instanceof Buffer)throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");if($ instanceof Uint8Array&&$.byteLength===$.buffer.byteLength)return $;if(typeof $=="string")return(0,_util.stringToBytes)($);if(typeof $=="object"&&!isNaN($==null?void 0:$.length)||(0,_util.isArrayBuffer)($))return new Uint8Array($);throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.")}const r=class r{constructor(){this._capability=new _util.PromiseCapability,this._transport=null,this._worker=null,this.docId=`d${te(r,st)._++}`,this.destroyed=!1,this.onPassword=null,this.onProgress=null}get promise(){return this._capability.promise}destroy(){return Sl(this,null,function*(){var P,Zt,dt;this.destroyed=!0;try{(P=this._worker)!=null&&P.port&&(this._worker._pendingDestroy=!0),yield(Zt=this._transport)==null?void 0:Zt.destroy()}catch(It){throw(dt=this._worker)!=null&&dt.port&&delete this._worker._pendingDestroy,It}this._transport=null,this._worker&&(this._worker.destroy(),this._worker=null)})}};st=new WeakMap,ll(r,st,0);let PDFDocumentLoadingTask=r;exports.PDFDocumentLoadingTask=PDFDocumentLoadingTask;class PDFDataRangeTransport{constructor(P,Zt,dt=!1,It=null){this.length=P,this.initialData=Zt,this.progressiveDone=dt,this.contentDispositionFilename=It,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=new _util.PromiseCapability}addRangeListener(P){this._rangeListeners.push(P)}addProgressListener(P){this._progressListeners.push(P)}addProgressiveReadListener(P){this._progressiveReadListeners.push(P)}addProgressiveDoneListener(P){this._progressiveDoneListeners.push(P)}onDataRange(P,Zt){for(const dt of this._rangeListeners)dt(P,Zt)}onDataProgress(P,Zt){this._readyCapability.promise.then(()=>{for(const dt of this._progressListeners)dt(P,Zt)})}onDataProgressiveRead(P){this._readyCapability.promise.then(()=>{for(const Zt of this._progressiveReadListeners)Zt(P)})}onDataProgressiveDone(){this._readyCapability.promise.then(()=>{for(const P of this._progressiveDoneListeners)P()})}transportReady(){this._readyCapability.resolve()}requestDataRange(P,Zt){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}abort(){}}exports.PDFDataRangeTransport=PDFDataRangeTransport;class PDFDocumentProxy{constructor(P,Zt){this._pdfInfo=P,this._transport=Zt,Object.defineProperty(this,"getJavaScript",{value:()=>((0,_display_utils.deprecated)("`PDFDocumentProxy.getJavaScript`, please use `PDFDocumentProxy.getJSActions` instead."),this.getJSActions().then(dt=>{if(!dt)return dt;const It=[];for(const xt in dt)It.push(...dt[xt]);return It}))})}get annotationStorage(){return this._transport.annotationStorage}get filterFactory(){return this._transport.filterFactory}get numPages(){return this._pdfInfo.numPages}get fingerprints(){return this._pdfInfo.fingerprints}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}get allXfaHtml(){return this._transport._htmlForXfa}getPage(P){return this._transport.getPage(P)}getPageIndex(P){return this._transport.getPageIndex(P)}getDestinations(){return this._transport.getDestinations()}getDestination(P){return this._transport.getDestination(P)}getPageLabels(){return this._transport.getPageLabels()}getPageLayout(){return this._transport.getPageLayout()}getPageMode(){return this._transport.getPageMode()}getViewerPreferences(){return this._transport.getViewerPreferences()}getOpenAction(){return this._transport.getOpenAction()}getAttachments(){return this._transport.getAttachments()}getJSActions(){return this._transport.getDocJSActions()}getOutline(){return this._transport.getOutline()}getOptionalContentConfig(){return this._transport.getOptionalContentConfig()}getPermissions(){return this._transport.getPermissions()}getMetadata(){return this._transport.getMetadata()}getMarkInfo(){return this._transport.getMarkInfo()}getData(){return this._transport.getData()}saveDocument(){return this._transport.saveDocument()}getDownloadInfo(){return this._transport.downloadInfoCapability.promise}cleanup(P=!1){return this._transport.startCleanup(P||this.isPureXfa)}destroy(){return this.loadingTask.destroy()}get loadingParams(){return this._transport.loadingParams}get loadingTask(){return this._transport.loadingTask}getFieldObjects(){return this._transport.getFieldObjects()}hasJSActions(){return this._transport.hasJSActions()}getCalculationOrderIds(){return this._transport.getCalculationOrderIds()}}exports.PDFDocumentProxy=PDFDocumentProxy;class PDFPageProxy{constructor(P,Zt,dt,It=!1){ll(this,p);ll(this,B);ll(this,h,null);ll(this,M,!1);this._pageIndex=P,this._pageInfo=Zt,this._transport=dt,this._stats=It?new _display_utils.StatTimer:null,this._pdfBug=It,this.commonObjs=dt.commonObjs,this.objs=new PDFObjects,this._maybeCleanupAfterRender=!1,this._intentStates=new Map,this.destroyed=!1}get pageNumber(){return this._pageIndex+1}get rotate(){return this._pageInfo.rotate}get ref(){return this._pageInfo.ref}get userUnit(){return this._pageInfo.userUnit}get view(){return this._pageInfo.view}getViewport({scale:P,rotation:Zt=this.rotate,offsetX:dt=0,offsetY:It=0,dontFlip:xt=!1}={}){return new _display_utils.PageViewport({viewBox:this.view,scale:P,rotation:Zt,offsetX:dt,offsetY:It,dontFlip:xt})}getAnnotations({intent:P="display"}={}){const Zt=this._transport.getRenderingIntent(P);return this._transport.getAnnotations(this._pageIndex,Zt.renderingIntent)}getJSActions(){return this._transport.getPageJSActions(this._pageIndex)}get filterFactory(){return this._transport.filterFactory}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}getXfa(){return Sl(this,null,function*(){var P;return((P=this._transport._htmlForXfa)==null?void 0:P.children[this._pageIndex])||null})}render({canvasContext:P,viewport:Zt,intent:dt="display",annotationMode:It=_util.AnnotationMode.ENABLE,transform:xt=null,background:it=null,optionalContentConfigPromise:Nt=null,annotationCanvasMap:zt=null,pageColors:Gt=null,printAnnotationStorage:Xt=null}){var w,X;(w=this._stats)==null||w.time("Overall");const Ut=this._transport.getRenderingIntent(dt,It,Xt);ul(this,M,!1),nl(this,B,Ze).call(this),Nt||(Nt=this._transport.getOptionalContentConfig());let Vt=this._intentStates.get(Ut.cacheKey);Vt||(Vt=Object.create(null),this._intentStates.set(Ut.cacheKey,Vt)),Vt.streamReaderCancelTimeout&&(clearTimeout(Vt.streamReaderCancelTimeout),Vt.streamReaderCancelTimeout=null);const Ht=!!(Ut.renderingIntent&_util.RenderingIntentFlag.PRINT);Vt.displayReadyCapability||(Vt.displayReadyCapability=new _util.PromiseCapability,Vt.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(X=this._stats)==null||X.time("Page Request"),this._pumpOperatorList(Ut));const Pt=J=>{var H,et;Vt.renderTasks.delete(at),(this._maybeCleanupAfterRender||Ht)&&ul(this,M,!0),nl(this,p,Ql).call(this,!Ht),J?(at.capability.reject(J),this._abortOperatorList({intentState:Vt,reason:J instanceof Error?J:new Error(J)})):at.capability.resolve(),(H=this._stats)==null||H.timeEnd("Rendering"),(et=this._stats)==null||et.timeEnd("Overall")},at=new InternalRenderTask({callback:Pt,params:{canvasContext:P,viewport:Zt,transform:xt,background:it},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:zt,operatorList:Vt.operatorList,pageIndex:this._pageIndex,canvasFactory:this._transport.canvasFactory,filterFactory:this._transport.filterFactory,useRequestAnimationFrame:!Ht,pdfBug:this._pdfBug,pageColors:Gt});(Vt.renderTasks||(Vt.renderTasks=new Set)).add(at);const S=at.task;return Promise.all([Vt.displayReadyCapability.promise,Nt]).then(([J,H])=>{var et;if(this.destroyed){Pt();return}(et=this._stats)==null||et.time("Rendering"),at.initializeGraphics({transparency:J,optionalContentConfig:H}),at.operatorListChanged()}).catch(Pt),S}getOperatorList({intent:P="display",annotationMode:Zt=_util.AnnotationMode.ENABLE,printAnnotationStorage:dt=null}={}){var zt;function It(){it.operatorList.lastChunk&&(it.opListReadCapability.resolve(it.operatorList),it.renderTasks.delete(Nt))}const xt=this._transport.getRenderingIntent(P,Zt,dt,!0);let it=this._intentStates.get(xt.cacheKey);it||(it=Object.create(null),this._intentStates.set(xt.cacheKey,it));let Nt;return it.opListReadCapability||(Nt=Object.create(null),Nt.operatorListChanged=It,it.opListReadCapability=new _util.PromiseCapability,(it.renderTasks||(it.renderTasks=new Set)).add(Nt),it.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(zt=this._stats)==null||zt.time("Page Request"),this._pumpOperatorList(xt)),it.opListReadCapability.promise}streamTextContent({includeMarkedContent:P=!1,disableNormalization:Zt=!1}={}){return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,includeMarkedContent:P===!0,disableNormalization:Zt===!0},{highWaterMark:100,size(It){return It.items.length}})}getTextContent(P={}){if(this._transport._htmlForXfa)return this.getXfa().then(dt=>_xfa_text.XfaText.textContent(dt));const Zt=this.streamTextContent(P);return new Promise(function(dt,It){function xt(){it.read().then(function({value:zt,done:Gt}){if(Gt){dt(Nt);return}Object.assign(Nt.styles,zt.styles),Nt.items.push(...zt.items),xt()},It)}const it=Zt.getReader(),Nt={items:[],styles:Object.create(null)};xt()})}getStructTree(){return this._transport.getStructTree(this._pageIndex)}_destroy(){this.destroyed=!0;const P=[];for(const Zt of this._intentStates.values())if(this._abortOperatorList({intentState:Zt,reason:new Error("Page was destroyed."),force:!0}),!Zt.opListReadCapability)for(const dt of Zt.renderTasks)P.push(dt.completed),dt.cancel();return this.objs.clear(),ul(this,M,!1),nl(this,B,Ze).call(this),Promise.all(P)}cleanup(P=!1){ul(this,M,!0);const Zt=nl(this,p,Ql).call(this,!1);return P&&Zt&&this._stats&&(this._stats=new _display_utils.StatTimer),Zt}_startRenderPage(P,Zt){var It,xt;const dt=this._intentStates.get(Zt);dt&&((It=this._stats)==null||It.timeEnd("Page Request"),(xt=dt.displayReadyCapability)==null||xt.resolve(P))}_renderPageChunk(P,Zt){for(let dt=0,It=P.length;dt<It;dt++)Zt.operatorList.fnArray.push(P.fnArray[dt]),Zt.operatorList.argsArray.push(P.argsArray[dt]);Zt.operatorList.lastChunk=P.lastChunk,Zt.operatorList.separateAnnots=P.separateAnnots;for(const dt of Zt.renderTasks)dt.operatorListChanged();P.lastChunk&&nl(this,p,Ql).call(this,!0)}_pumpOperatorList({renderingIntent:P,cacheKey:Zt,annotationStorageSerializable:dt}){const{map:It,transfers:xt}=dt,Nt=this._transport.messageHandler.sendWithStream("GetOperatorList",{pageIndex:this._pageIndex,intent:P,cacheKey:Zt,annotationStorage:It},xt).getReader(),zt=this._intentStates.get(Zt);zt.streamReader=Nt;const Gt=()=>{Nt.read().then(({value:Xt,done:Ut})=>{if(Ut){zt.streamReader=null;return}this._transport.destroyed||(this._renderPageChunk(Xt,zt),Gt())},Xt=>{if(zt.streamReader=null,!this._transport.destroyed){if(zt.operatorList){zt.operatorList.lastChunk=!0;for(const Ut of zt.renderTasks)Ut.operatorListChanged();nl(this,p,Ql).call(this,!0)}if(zt.displayReadyCapability)zt.displayReadyCapability.reject(Xt);else if(zt.opListReadCapability)zt.opListReadCapability.reject(Xt);else throw Xt}})};Gt()}_abortOperatorList({intentState:P,reason:Zt,force:dt=!1}){if(P.streamReader){if(P.streamReaderCancelTimeout&&(clearTimeout(P.streamReaderCancelTimeout),P.streamReaderCancelTimeout=null),!dt){if(P.renderTasks.size>0)return;if(Zt instanceof _display_utils.RenderingCancelledException){let It=RENDERING_CANCELLED_TIMEOUT;Zt.extraDelay>0&&Zt.extraDelay<1e3&&(It+=Zt.extraDelay),P.streamReaderCancelTimeout=setTimeout(()=>{P.streamReaderCancelTimeout=null,this._abortOperatorList({intentState:P,reason:Zt,force:!0})},It);return}}if(P.streamReader.cancel(new _util.AbortException(Zt.message)).catch(()=>{}),P.streamReader=null,!this._transport.destroyed){for(const[It,xt]of this._intentStates)if(xt===P){this._intentStates.delete(It);break}this.cleanup()}}}get stats(){return this._stats}}h=new WeakMap,M=new WeakMap,p=new WeakSet,Ql=function(P=!1){if(nl(this,B,Ze).call(this),!bt(this,M)||this.destroyed)return!1;if(P)return ul(this,h,setTimeout(()=>{ul(this,h,null),nl(this,p,Ql).call(this,!1)},DELAYED_CLEANUP_TIMEOUT)),!1;for(const{renderTasks:Zt,operatorList:dt}of this._intentStates.values())if(Zt.size>0||!dt.lastChunk)return!1;return this._intentStates.clear(),this.objs.clear(),ul(this,M,!1),!0},B=new WeakSet,Ze=function(){bt(this,h)&&(clearTimeout(bt(this,h)),ul(this,h,null))},exports.PDFPageProxy=PDFPageProxy;class LoopbackPort{constructor(){ll(this,F,new Set);ll(this,L,Promise.resolve())}postMessage(P,Zt){const dt={data:structuredClone(P,Zt?{transfer:Zt}:null)};bt(this,L).then(()=>{for(const It of bt(this,F))It.call(this,dt)})}addEventListener(P,Zt){bt(this,F).add(Zt)}removeEventListener(P,Zt){bt(this,F).delete(Zt)}terminate(){bt(this,F).clear()}}F=new WeakMap,L=new WeakMap,exports.LoopbackPort=LoopbackPort;const PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};exports.PDFWorkerUtil=PDFWorkerUtil;{if(_util.isNodeJS&&typeof commonjsRequire$1=="function")PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if(typeof document=="object"){const $=(g=document==null?void 0:document.currentScript)==null?void 0:g.src;$&&(PDFWorkerUtil.fallbackWorkerSrc=$.replace(/(\.(?:min\.)?js)(\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function($,P){let Zt;try{if(Zt=new URL($),!Zt.origin||Zt.origin==="null")return!1}catch(It){return!1}const dt=new URL(P,Zt);return Zt.origin===dt.origin},PDFWorkerUtil.createCDNWrapper=function($){const P=`importScripts("${$}");`;return URL.createObjectURL(new Blob([P]))}}const _PDFWorker=class _PDFWorker{constructor({name:$=null,port:P=null,verbosity:Zt=(0,_util.getVerbosityLevel)()}={}){var dt;if(this.name=$,this.destroyed=!1,this.verbosity=Zt,this._readyCapability=new _util.PromiseCapability,this._port=null,this._webWorker=null,this._messageHandler=null,P){if((dt=bt(_PDFWorker,q))!=null&&dt.has(P))throw new Error("Cannot use more than one PDFWorker per port.");(bt(_PDFWorker,q)||ul(_PDFWorker,q,new WeakMap)).set(P,this),this._initializeFromPort(P);return}this._initialize()}get promise(){return this._readyCapability.promise}get port(){return this._port}get messageHandler(){return this._messageHandler}_initializeFromPort($){this._port=$,this._messageHandler=new _message_handler.MessageHandler("main","worker",$),this._messageHandler.on("ready",function(){}),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}_initialize(){if(!PDFWorkerUtil.isWorkerDisabled&&!_PDFWorker._mainThreadWorkerMessageHandler){let{workerSrc:$}=_PDFWorker;try{PDFWorkerUtil.isSameOrigin(window.location.href,$)||($=PDFWorkerUtil.createCDNWrapper(new URL($,window.location).href));const P=new Worker($),Zt=new _message_handler.MessageHandler("main","worker",P),dt=()=>{P.removeEventListener("error",It),Zt.destroy(),P.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()},It=()=>{this._webWorker||dt()};P.addEventListener("error",It),Zt.on("test",it=>{if(P.removeEventListener("error",It),this.destroyed){dt();return}it?(this._messageHandler=Zt,this._port=P,this._webWorker=P,this._readyCapability.resolve(),Zt.send("configure",{verbosity:this.verbosity})):(this._setupFakeWorker(),Zt.destroy(),P.terminate())}),Zt.on("ready",it=>{if(P.removeEventListener("error",It),this.destroyed){dt();return}try{xt()}catch(Nt){this._setupFakeWorker()}});const xt=()=>{const it=new Uint8Array;Zt.send("test",it,[it.buffer])};xt();return}catch(P){(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}_setupFakeWorker(){PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),_PDFWorker._setupFakeWorkerGlobal.then($=>{if(this.destroyed){this._readyCapability.reject(new Error("Worker was destroyed"));return}const P=new LoopbackPort;this._port=P;const Zt=`fake${PDFWorkerUtil.fakeWorkerId++}`,dt=new _message_handler.MessageHandler(Zt+"_worker",Zt,P);$.setup(dt,P);const It=new _message_handler.MessageHandler(Zt,Zt+"_worker",P);this._messageHandler=It,this._readyCapability.resolve(),It.send("configure",{verbosity:this.verbosity})}).catch($=>{this._readyCapability.reject(new Error(`Setting up fake worker failed: "${$.message}".`))})}destroy(){var $;this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),($=bt(_PDFWorker,q))==null||$.delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}static fromPort($){var Zt;if(!($!=null&&$.port))throw new Error("PDFWorker.fromPort - invalid method signature.");const P=(Zt=bt(this,q))==null?void 0:Zt.get($.port);if(P){if(P._pendingDestroy)throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.");return P}return new _PDFWorker($)}static get workerSrc(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(PDFWorkerUtil.fallbackWorkerSrc!==null)return _util.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}static get _mainThreadWorkerMessageHandler(){var $;try{return(($=globalThis.pdfjsWorker)==null?void 0:$.WorkerMessageHandler)||null}catch(P){return null}}static get _setupFakeWorkerGlobal(){const loader=()=>Sl(this,null,function*(){const mainWorkerMessageHandler=this._mainThreadWorkerMessageHandler;if(mainWorkerMessageHandler)return mainWorkerMessageHandler;if(_util.isNodeJS&&typeof commonjsRequire$1=="function"){const worker=eval("require")(this.workerSrc);return worker.WorkerMessageHandler}return yield(0,_display_utils.loadScript)(this.workerSrc),window.pdfjsWorker.WorkerMessageHandler});return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}};q=new WeakMap,ll(_PDFWorker,q,void 0);let PDFWorker=_PDFWorker;exports.PDFWorker=PDFWorker;class WorkerTransport{constructor(P,Zt,dt,It,xt){ll(this,I);ll(this,v,new Map);ll(this,Q,new Map);ll(this,R,new Map);ll(this,j,null);this.messageHandler=P,this.loadingTask=Zt,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({ownerDocument:It.ownerDocument,styleElement:It.styleElement}),this._params=It,this.canvasFactory=xt.canvasFactory,this.filterFactory=xt.filterFactory,this.cMapReaderFactory=xt.cMapReaderFactory,this.standardFontDataFactory=xt.standardFontDataFactory,this.destroyed=!1,this.destroyCapability=null,this._networkStream=dt,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=new _util.PromiseCapability,this.setupMessageHandler()}get annotationStorage(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}getRenderingIntent(P,Zt=_util.AnnotationMode.ENABLE,dt=null,It=!1){let xt=_util.RenderingIntentFlag.DISPLAY,it=_annotation_storage.SerializableEmpty;switch(P){case"any":xt=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":xt=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)(`getRenderingIntent - invalid intent: ${P}`)}switch(Zt){case _util.AnnotationMode.DISABLE:xt+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:xt+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:xt+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE,it=(xt&_util.RenderingIntentFlag.PRINT&&dt instanceof _annotation_storage.PrintAnnotationStorage?dt:this.annotationStorage).serializable;break;default:(0,_util.warn)(`getRenderingIntent - invalid annotationMode: ${Zt}`)}return It&&(xt+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:xt,cacheKey:`${xt}_${it.hash}`,annotationStorageSerializable:it}}destroy(){var dt;if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=new _util.PromiseCapability,(dt=bt(this,j))==null||dt.reject(new Error("Worker was destroyed during onPassword callback"));const P=[];for(const It of bt(this,Q).values())P.push(It._destroy());bt(this,Q).clear(),bt(this,R).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();const Zt=this.messageHandler.sendWithPromise("Terminate",null);return P.push(Zt),Promise.all(P).then(()=>{var It;this.commonObjs.clear(),this.fontLoader.clear(),bt(this,v).clear(),this.filterFactory.destroy(),(It=this._networkStream)==null||It.cancelAllRequests(new _util.AbortException("Worker was terminated.")),this.messageHandler&&(this.messageHandler.destroy(),this.messageHandler=null),this.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise}setupMessageHandler(){const{messageHandler:P,loadingTask:Zt}=this;P.on("GetReader",(dt,It)=>{(0,_util.assert)(this._networkStream,"GetReader - no `IPDFStream` instance available."),this._fullReader=this._networkStream.getFullReader(),this._fullReader.onProgress=xt=>{this._lastProgress={loaded:xt.loaded,total:xt.total}},It.onPull=()=>{this._fullReader.read().then(function({value:xt,done:it}){if(it){It.close();return}(0,_util.assert)(xt instanceof ArrayBuffer,"GetReader - expected an ArrayBuffer."),It.enqueue(new Uint8Array(xt),1,[xt])}).catch(xt=>{It.error(xt)})},It.onCancel=xt=>{this._fullReader.cancel(xt),It.ready.catch(it=>{if(!this.destroyed)throw it})}}),P.on("ReaderHeadersReady",dt=>{const It=new _util.PromiseCapability,xt=this._fullReader;return xt.headersReady.then(()=>{var it;(!xt.isStreamingSupported||!xt.isRangeSupported)&&(this._lastProgress&&((it=Zt.onProgress)==null||it.call(Zt,this._lastProgress)),xt.onProgress=Nt=>{var zt;(zt=Zt.onProgress)==null||zt.call(Zt,{loaded:Nt.loaded,total:Nt.total})}),It.resolve({isStreamingSupported:xt.isStreamingSupported,isRangeSupported:xt.isRangeSupported,contentLength:xt.contentLength})},It.reject),It.promise}),P.on("GetRangeReader",(dt,It)=>{(0,_util.assert)(this._networkStream,"GetRangeReader - no `IPDFStream` instance available.");const xt=this._networkStream.getRangeReader(dt.begin,dt.end);if(!xt){It.close();return}It.onPull=()=>{xt.read().then(function({value:it,done:Nt}){if(Nt){It.close();return}(0,_util.assert)(it instanceof ArrayBuffer,"GetRangeReader - expected an ArrayBuffer."),It.enqueue(new Uint8Array(it),1,[it])}).catch(it=>{It.error(it)})},It.onCancel=it=>{xt.cancel(it),It.ready.catch(Nt=>{if(!this.destroyed)throw Nt})}}),P.on("GetDoc",({pdfInfo:dt})=>{this._numPages=dt.numPages,this._htmlForXfa=dt.htmlForXfa,delete dt.htmlForXfa,Zt._capability.resolve(new PDFDocumentProxy(dt,this))}),P.on("DocException",function(dt){let It;switch(dt.name){case"PasswordException":It=new _util.PasswordException(dt.message,dt.code);break;case"InvalidPDFException":It=new _util.InvalidPDFException(dt.message);break;case"MissingPDFException":It=new _util.MissingPDFException(dt.message);break;case"UnexpectedResponseException":It=new _util.UnexpectedResponseException(dt.message,dt.status);break;case"UnknownErrorException":It=new _util.UnknownErrorException(dt.message,dt.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}Zt._capability.reject(It)}),P.on("PasswordRequest",dt=>{if(ul(this,j,new _util.PromiseCapability),Zt.onPassword){const It=xt=>{xt instanceof Error?bt(this,j).reject(xt):bt(this,j).resolve({password:xt})};try{Zt.onPassword(It,dt.code)}catch(xt){bt(this,j).reject(xt)}}else bt(this,j).reject(new _util.PasswordException(dt.message,dt.code));return bt(this,j).promise}),P.on("DataLoaded",dt=>{var It;(It=Zt.onProgress)==null||It.call(Zt,{loaded:dt.length,total:dt.length}),this.downloadInfoCapability.resolve(dt)}),P.on("StartRenderPage",dt=>{if(this.destroyed)return;bt(this,Q).get(dt.pageIndex)._startRenderPage(dt.transparency,dt.cacheKey)}),P.on("commonobj",([dt,It,xt])=>{var it;if(!this.destroyed&&!this.commonObjs.has(dt))switch(It){case"Font":const Nt=this._params;if("error"in xt){const Xt=xt.error;(0,_util.warn)(`Error during font loading: ${Xt}`),this.commonObjs.resolve(dt,Xt);break}const zt=Nt.pdfBug&&((it=globalThis.FontInspector)!=null&&it.enabled)?(Xt,Ut)=>globalThis.FontInspector.fontAdded(Xt,Ut):null,Gt=new _font_loader.FontFaceObject(xt,{isEvalSupported:Nt.isEvalSupported,disableFontFace:Nt.disableFontFace,ignoreErrors:Nt.ignoreErrors,inspectFont:zt});this.fontLoader.bind(Gt).catch(Xt=>P.sendWithPromise("FontFallback",{id:dt})).finally(()=>{!Nt.fontExtraProperties&&Gt.data&&(Gt.data=null),this.commonObjs.resolve(dt,Gt)});break;case"FontPath":case"Image":case"Pattern":this.commonObjs.resolve(dt,xt);break;default:throw new Error(`Got unknown common object type ${It}`)}}),P.on("obj",([dt,It,xt,it])=>{var zt;if(this.destroyed)return;const Nt=bt(this,Q).get(It);if(!Nt.objs.has(dt))switch(xt){case"Image":if(Nt.objs.resolve(dt,it),it){let Gt;if(it.bitmap){const{width:Xt,height:Ut}=it;Gt=Xt*Ut*4}else Gt=((zt=it.data)==null?void 0:zt.length)||0;Gt>_util.MAX_IMAGE_SIZE_TO_CACHE&&(Nt._maybeCleanupAfterRender=!0)}break;case"Pattern":Nt.objs.resolve(dt,it);break;default:throw new Error(`Got unknown object type ${xt}`)}}),P.on("DocProgress",dt=>{var It;this.destroyed||(It=Zt.onProgress)==null||It.call(Zt,{loaded:dt.loaded,total:dt.total})}),P.on("FetchBuiltInCMap",dt=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.cMapReaderFactory?this.cMapReaderFactory.fetch(dt):Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."))),P.on("FetchStandardFontData",dt=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.standardFontDataFactory?this.standardFontDataFactory.fetch(dt):Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")))}getData(){return this.messageHandler.sendWithPromise("GetData",null)}saveDocument(){var dt,It;this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while `annotationStorage` is empty, please use the getData-method instead.");const{map:P,transfers:Zt}=this.annotationStorage.serializable;return this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:P,filename:(It=(dt=this._fullReader)==null?void 0:dt.filename)!=null?It:null},Zt).finally(()=>{this.annotationStorage.resetModified()})}getPage(P){if(!Number.isInteger(P)||P<=0||P>this._numPages)return Promise.reject(new Error("Invalid page request."));const Zt=P-1,dt=bt(this,R).get(Zt);if(dt)return dt;const It=this.messageHandler.sendWithPromise("GetPage",{pageIndex:Zt}).then(xt=>{if(this.destroyed)throw new Error("Transport destroyed");const it=new PDFPageProxy(Zt,xt,this,this._params.pdfBug);return bt(this,Q).set(Zt,it),it});return bt(this,R).set(Zt,It),It}getPageIndex(P){return typeof P!="object"||P===null||!Number.isInteger(P.num)||P.num<0||!Number.isInteger(P.gen)||P.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:P.num,gen:P.gen})}getAnnotations(P,Zt){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:P,intent:Zt})}getFieldObjects(){return nl(this,I,he).call(this,"GetFieldObjects")}hasJSActions(){return nl(this,I,he).call(this,"HasJSActions")}getCalculationOrderIds(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}getDestinations(){return this.messageHandler.sendWithPromise("GetDestinations",null)}getDestination(P){return typeof P!="string"?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:P})}getPageLabels(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}getPageLayout(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}getPageMode(){return this.messageHandler.sendWithPromise("GetPageMode",null)}getViewerPreferences(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}getOpenAction(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}getAttachments(){return this.messageHandler.sendWithPromise("GetAttachments",null)}getDocJSActions(){return nl(this,I,he).call(this,"GetDocJSActions")}getPageJSActions(P){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:P})}getStructTree(P){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:P})}getOutline(){return this.messageHandler.sendWithPromise("GetOutline",null)}getOptionalContentConfig(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then(P=>new _optional_content_config.OptionalContentConfig(P))}getPermissions(){return this.messageHandler.sendWithPromise("GetPermissions",null)}getMetadata(){const P="GetMetadata",Zt=bt(this,v).get(P);if(Zt)return Zt;const dt=this.messageHandler.sendWithPromise(P,null).then(It=>{var xt,it,Nt,zt;return{info:It[0],metadata:It[1]?new _metadata.Metadata(It[1]):null,contentDispositionFilename:(it=(xt=this._fullReader)==null?void 0:xt.filename)!=null?it:null,contentLength:(zt=(Nt=this._fullReader)==null?void 0:Nt.contentLength)!=null?zt:null}});return bt(this,v).set(P,dt),dt}getMarkInfo(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}startCleanup(P=!1){return Sl(this,null,function*(){if(!this.destroyed){yield this.messageHandler.sendWithPromise("Cleanup",null);for(const Zt of bt(this,Q).values())if(!Zt.cleanup())throw new Error(`startCleanup: Page ${Zt.pageNumber} is currently rendering.`);this.commonObjs.clear(),P||this.fontLoader.clear(),bt(this,v).clear(),this.filterFactory.destroy(!0)}})}get loadingParams(){const{disableAutoFetch:P,enableXfa:Zt}=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:P,enableXfa:Zt})}}v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakSet,he=function(P,Zt=null){const dt=bt(this,v).get(P);if(dt)return dt;const It=this.messageHandler.sendWithPromise(P,Zt);return bt(this,v).set(P,It),It};class PDFObjects{constructor(){ll(this,U);ll(this,C,Object.create(null))}get(P,Zt=null){if(Zt){const It=nl(this,U,Ve).call(this,P);return It.capability.promise.then(()=>Zt(It.data)),null}const dt=bt(this,C)[P];if(!(dt!=null&&dt.capability.settled))throw new Error(`Requesting object that isn't resolved yet ${P}.`);return dt.data}has(P){const Zt=bt(this,C)[P];return(Zt==null?void 0:Zt.capability.settled)||!1}resolve(P,Zt=null){const dt=nl(this,U,Ve).call(this,P);dt.data=Zt,dt.capability.resolve()}clear(){var P;for(const Zt in bt(this,C)){const{data:dt}=bt(this,C)[Zt];(P=dt==null?void 0:dt.bitmap)==null||P.close()}ul(this,C,Object.create(null))}}C=new WeakMap,U=new WeakSet,Ve=function(P){var Zt;return(Zt=bt(this,C))[P]||(Zt[P]={capability:new _util.PromiseCapability,data:null})};class RenderTask{constructor(P){ll(this,u,null);ul(this,u,P),this.onContinue=null}get promise(){return bt(this,u).capability.promise}cancel(P=0){bt(this,u).cancel(null,P)}get separateAnnots(){const{separateAnnots:P}=bt(this,u).operatorList;if(!P)return!1;const{annotationCanvasMap:Zt}=bt(this,u);return P.form||P.canvas&&(Zt==null?void 0:Zt.size)>0}}u=new WeakMap,exports.RenderTask=RenderTask;const _=class _{constructor({callback:P,params:Zt,objs:dt,commonObjs:It,annotationCanvasMap:xt,operatorList:it,pageIndex:Nt,canvasFactory:zt,filterFactory:Gt,useRequestAnimationFrame:Xt=!1,pdfBug:Ut=!1,pageColors:Vt=null}){this.callback=P,this.params=Zt,this.objs=dt,this.commonObjs=It,this.annotationCanvasMap=xt,this.operatorListIdx=null,this.operatorList=it,this._pageIndex=Nt,this.canvasFactory=zt,this.filterFactory=Gt,this._pdfBug=Ut,this.pageColors=Vt,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=Xt===!0&&typeof window!="undefined",this.cancelled=!1,this.capability=new _util.PromiseCapability,this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=Zt.canvasContext.canvas}get completed(){return this.capability.promise.catch(function(){})}initializeGraphics({transparency:P=!1,optionalContentConfig:Zt}){var Nt,zt;if(this.cancelled)return;if(this._canvas){if(bt(_,m).has(this._canvas))throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");bt(_,m).add(this._canvas)}this._pdfBug&&((Nt=globalThis.StepperManager)!=null&&Nt.enabled)&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());const{canvasContext:dt,viewport:It,transform:xt,background:it}=this.params;this.gfx=new _canvas.CanvasGraphics(dt,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:Zt},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:xt,viewport:It,transparency:P,background:it}),this.operatorListIdx=0,this.graphicsReady=!0,(zt=this.graphicsReadyCallback)==null||zt.call(this)}cancel(P=null,Zt=0){var dt;this.running=!1,this.cancelled=!0,(dt=this.gfx)==null||dt.endDrawing(),bt(_,m).delete(this._canvas),this.callback(P||new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex+1}`,Zt))}operatorListChanged(){var P;if(!this.graphicsReady){this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound);return}(P=this.stepper)==null||P.updateOperatorList(this.operatorList),!this.running&&this._continue()}_continue(){this.running=!0,!this.cancelled&&(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}_scheduleNext(){this._useRequestAnimationFrame?window.requestAnimationFrame(()=>{this._nextBound().catch(this._cancelBound)}):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}_next(){return Sl(this,null,function*(){this.cancelled||(this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),bt(_,m).delete(this._canvas),this.callback())))})}};m=new WeakMap,ll(_,m,new WeakSet);let InternalRenderTask=_;const version="3.11.174";exports.version=version;const build="ce8716743";exports.build=build},(st,r,h)=>{var L,g,q,Zs,Q;Object.defineProperty(r,"__esModule",{value:!0}),r.SerializableEmpty=r.PrintAnnotationStorage=r.AnnotationStorage=void 0;var M=h(1),p=h(4),f=h(8);const B=Object.freeze({map:null,hash:"",transfers:void 0});r.SerializableEmpty=B;class O{constructor(){ll(this,q);ll(this,L,!1);ll(this,g,new Map);this.onSetModified=null,this.onResetModified=null,this.onAnnotationEditor=null}getValue(j,I){const k=bt(this,g).get(j);return k===void 0?I:Object.assign(I,k)}getRawValue(j){return bt(this,g).get(j)}remove(j){if(bt(this,g).delete(j),bt(this,g).size===0&&this.resetModified(),typeof this.onAnnotationEditor=="function"){for(const I of bt(this,g).values())if(I instanceof p.AnnotationEditor)return;this.onAnnotationEditor(null)}}setValue(j,I){const k=bt(this,g).get(j);let C=!1;if(k!==void 0)for(const[U,K]of Object.entries(I))k[U]!==K&&(C=!0,k[U]=K);else C=!0,bt(this,g).set(j,I);C&&nl(this,q,Zs).call(this),I instanceof p.AnnotationEditor&&typeof this.onAnnotationEditor=="function"&&this.onAnnotationEditor(I.constructor._type)}has(j){return bt(this,g).has(j)}getAll(){return bt(this,g).size>0?(0,M.objectFromMap)(bt(this,g)):null}setAll(j){for(const[I,k]of Object.entries(j))this.setValue(I,k)}get size(){return bt(this,g).size}resetModified(){bt(this,L)&&(ul(this,L,!1),typeof this.onResetModified=="function"&&this.onResetModified())}get print(){return new F(this)}get serializable(){if(bt(this,g).size===0)return B;const j=new Map,I=new f.MurmurHash3_64,k=[],C=Object.create(null);let U=!1;for(const[K,u]of bt(this,g)){const m=u instanceof p.AnnotationEditor?u.serialize(!1,C):u;m&&(j.set(K,m),I.update(`${K}:${JSON.stringify(m)}`),U||(U=!!m.bitmap))}if(U)for(const K of j.values())K.bitmap&&k.push(K.bitmap);return j.size>0?{map:j,hash:I.hexdigest(),transfers:k}:B}}L=new WeakMap,g=new WeakMap,q=new WeakSet,Zs=function(){bt(this,L)||(ul(this,L,!0),typeof this.onSetModified=="function"&&this.onSetModified())},r.AnnotationStorage=O;class F extends O{constructor(I){super();ll(this,Q,void 0);const{map:k,hash:C,transfers:U}=I.serializable,K=structuredClone(k,U?{transfer:U}:null);ul(this,Q,{map:K,hash:C,transfers:U})}get print(){(0,M.unreachable)("Should not call PrintAnnotationStorage.print")}get serializable(){return bt(this,Q)}}Q=new WeakMap,r.PrintAnnotationStorage=F},(st,r,h)=>{var F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,Ie,$,ze,Zt,Re,It,Se,it,hs,zt,bs,Xt,os,Vt,we,Pt,ms;Object.defineProperty(r,"__esModule",{value:!0}),r.AnnotationEditor=void 0;var M=h(5),p=h(1),f=h(6);const S=class S{constructor(X){ll(this,m);ll(this,$);ll(this,It);ll(this,it);ll(this,zt);ll(this,Xt);ll(this,Vt);ll(this,Pt);ll(this,F,"");ll(this,L,!1);ll(this,g,null);ll(this,q,null);ll(this,v,null);ll(this,Q,!1);ll(this,R,null);ll(this,j,this.focusin.bind(this));ll(this,I,this.focusout.bind(this));ll(this,k,!1);ll(this,C,!1);ll(this,U,!1);Dl(this,"_initialOptions",Object.create(null));Dl(this,"_uiManager",null);Dl(this,"_focusEventsAllowed",!0);Dl(this,"_l10nPromise",null);ll(this,K,!1);ll(this,u,S._zIndex++);this.constructor===S&&(0,p.unreachable)("Cannot initialize AnnotationEditor."),this.parent=X.parent,this.id=X.id,this.width=this.height=null,this.pageIndex=X.parent.pageIndex,this.name=X.name,this.div=null,this._uiManager=X.uiManager,this.annotationElementId=null,this._willKeepAspectRatio=!1,this._initialOptions.isCentered=X.isCentered,this._structTreeParentId=null;const{rotation:J,rawDims:{pageWidth:H,pageHeight:et,pageX:lt,pageY:Mt}}=this.parent.viewport;this.rotation=J,this.pageRotation=(360+J-this._uiManager.viewParameters.rotation)%360,this.pageDimensions=[H,et],this.pageTranslation=[lt,Mt];const[Rt,gt]=this.parentDimensions;this.x=X.x/Rt,this.y=X.y/gt,this.isAttachedToDOM=!1,this.deleted=!1}get editorType(){return Object.getPrototypeOf(this).constructor._type}static get _defaultLineColor(){return(0,p.shadow)(this,"_defaultLineColor",this._colorManager.getHexCode("CanvasText"))}static deleteAnnotationElement(X){const J=new O({id:X.parent.getNextId(),parent:X.parent,uiManager:X._uiManager});J.annotationElementId=X.annotationElementId,J.deleted=!0,J._uiManager.addToAnnotationStorage(J)}static initialize(X,J=null){if(S._l10nPromise||(S._l10nPromise=new Map(["editor_alt_text_button_label","editor_alt_text_edit_button_label","editor_alt_text_decorative_tooltip"].map(et=>[et,X.get(et)]))),J!=null&&J.strings)for(const et of J.strings)S._l10nPromise.set(et,X.get(et));if(S._borderLineWidth!==-1)return;const H=getComputedStyle(document.documentElement);S._borderLineWidth=parseFloat(H.getPropertyValue("--outline-width"))||0}static updateDefaultParams(X,J){}static get defaultPropertiesToUpdate(){return[]}static isHandlingMimeForPasting(X){return!1}static paste(X,J){(0,p.unreachable)("Not implemented")}get propertiesToUpdate(){return[]}get _isDraggable(){return bt(this,K)}set _isDraggable(X){var J;ul(this,K,X),(J=this.div)==null||J.classList.toggle("draggable",X)}center(){const[X,J]=this.pageDimensions;switch(this.parentRotation){case 90:this.x-=this.height*J/(X*2),this.y+=this.width*X/(J*2);break;case 180:this.x+=this.width/2,this.y+=this.height/2;break;case 270:this.x+=this.height*J/(X*2),this.y-=this.width*X/(J*2);break;default:this.x-=this.width/2,this.y-=this.height/2;break}this.fixAndSetPosition()}addCommands(X){this._uiManager.addCommands(X)}get currentLayer(){return this._uiManager.currentLayer}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=bt(this,u)}setParent(X){X!==null&&(this.pageIndex=X.pageIndex,this.pageDimensions=X.pageDimensions),this.parent=X}focusin(X){this._focusEventsAllowed&&(bt(this,k)?ul(this,k,!1):this.parent.setSelected(this))}focusout(X){var H;if(!this._focusEventsAllowed||!this.isAttachedToDOM)return;const J=X.relatedTarget;J!=null&&J.closest(`#${this.id}`)||(X.preventDefault(),(H=this.parent)!=null&&H.isMultipleSelection||this.commitOrRemove())}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.addToAnnotationStorage()}addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)}setAt(X,J,H,et){const[lt,Mt]=this.parentDimensions;[H,et]=this.screenToPageTranslation(H,et),this.x=(X+H)/lt,this.y=(J+et)/Mt,this.fixAndSetPosition()}translate(X,J){nl(this,m,Ie).call(this,this.parentDimensions,X,J)}translateInPage(X,J){nl(this,m,Ie).call(this,this.pageDimensions,X,J),this.div.scrollIntoView({block:"nearest"})}drag(X,J){const[H,et]=this.parentDimensions;if(this.x+=X/H,this.y+=J/et,this.parent&&(this.x<0||this.x>1||this.y<0||this.y>1)){const{x:Ot,y:Dt}=this.div.getBoundingClientRect();this.parent.findNewParent(this,Ot,Dt)&&(this.x-=Math.floor(this.x),this.y-=Math.floor(this.y))}let{x:lt,y:Mt}=this;const[Rt,gt]=nl(this,$,ze).call(this);lt+=Rt,Mt+=gt,this.div.style.left=`${(100*lt).toFixed(2)}%`,this.div.style.top=`${(100*Mt).toFixed(2)}%`,this.div.scrollIntoView({block:"nearest"})}fixAndSetPosition(){const[X,J]=this.pageDimensions;let{x:H,y:et,width:lt,height:Mt}=this;switch(lt*=X,Mt*=J,H*=X,et*=J,this.rotation){case 0:H=Math.max(0,Math.min(X-lt,H)),et=Math.max(0,Math.min(J-Mt,et));break;case 90:H=Math.max(0,Math.min(X-Mt,H)),et=Math.min(J,Math.max(lt,et));break;case 180:H=Math.min(X,Math.max(lt,H)),et=Math.min(J,Math.max(Mt,et));break;case 270:H=Math.min(X,Math.max(Mt,H)),et=Math.max(0,Math.min(J-lt,et));break}this.x=H/=X,this.y=et/=J;const[Rt,gt]=nl(this,$,ze).call(this);H+=Rt,et+=gt;const{style:Ot}=this.div;Ot.left=`${(100*H).toFixed(2)}%`,Ot.top=`${(100*et).toFixed(2)}%`,this.moveInDOM()}screenToPageTranslation(X,J){var H;return nl(H=S,Zt,Re).call(H,X,J,this.parentRotation)}pageTranslationToScreen(X,J){var H;return nl(H=S,Zt,Re).call(H,X,J,360-this.parentRotation)}get parentScale(){return this._uiManager.viewParameters.realScale}get parentRotation(){return(this._uiManager.viewParameters.rotation+this.pageRotation)%360}get parentDimensions(){const{parentScale:X,pageDimensions:[J,H]}=this,et=J*X,lt=H*X;return p.FeatureTest.isCSSRoundSupported?[Math.round(et),Math.round(lt)]:[et,lt]}setDims(X,J){var lt;const[H,et]=this.parentDimensions;this.div.style.width=`${(100*X/H).toFixed(2)}%`,bt(this,Q)||(this.div.style.height=`${(100*J/et).toFixed(2)}%`),(lt=bt(this,g))==null||lt.classList.toggle("small",X<S.SMALL_EDITOR_SIZE||J<S.SMALL_EDITOR_SIZE)}fixDims(){const{style:X}=this.div,{height:J,width:H}=X,et=H.endsWith("%"),lt=!bt(this,Q)&&J.endsWith("%");if(et&<)return;const[Mt,Rt]=this.parentDimensions;et||(X.width=`${(100*parseFloat(H)/Mt).toFixed(2)}%`),!bt(this,Q)&&!lt&&(X.height=`${(100*parseFloat(J)/Rt).toFixed(2)}%`)}getInitialTranslation(){return[0,0]}addAltTextButton(){return Sl(this,null,function*(){if(bt(this,g))return;const X=ul(this,g,document.createElement("button"));X.className="altText";const J=yield S._l10nPromise.get("editor_alt_text_button_label");X.textContent=J,X.setAttribute("aria-label",J),X.tabIndex="0",X.addEventListener("contextmenu",f.noContextMenu),X.addEventListener("pointerdown",H=>H.stopPropagation()),X.addEventListener("click",H=>{H.preventDefault(),this._uiManager.editAltText(this)},{capture:!0}),X.addEventListener("keydown",H=>{H.target===X&&H.key==="Enter"&&(H.preventDefault(),this._uiManager.editAltText(this))}),nl(this,Vt,we).call(this),this.div.append(X),S.SMALL_EDITOR_SIZE||(S.SMALL_EDITOR_SIZE=Math.min(128,Math.round(X.getBoundingClientRect().width*1.4)))})}getClientDimensions(){return this.div.getBoundingClientRect()}get altTextData(){return{altText:bt(this,F),decorative:bt(this,L)}}set altTextData({altText:X,decorative:J}){bt(this,F)===X&&bt(this,L)===J||(ul(this,F,X),ul(this,L,J),nl(this,Vt,we).call(this))}render(){this.div=document.createElement("div"),this.div.setAttribute("data-editor-rotation",(360-this.rotation)%360),this.div.className=this.name,this.div.setAttribute("id",this.id),this.div.setAttribute("tabIndex",0),this.setInForeground(),this.div.addEventListener("focusin",bt(this,j)),this.div.addEventListener("focusout",bt(this,I));const[X,J]=this.parentDimensions;this.parentRotation%180!==0&&(this.div.style.maxWidth=`${(100*J/X).toFixed(2)}%`,this.div.style.maxHeight=`${(100*X/J).toFixed(2)}%`);const[H,et]=this.getInitialTranslation();return this.translate(H,et),(0,M.bindEvents)(this,this.div,["pointerdown"]),this.div}pointerdown(X){const{isMac:J}=p.FeatureTest.platform;if(X.button!==0||X.ctrlKey&&J){X.preventDefault();return}ul(this,k,!0),nl(this,Pt,ms).call(this,X)}moveInDOM(){var X;(X=this.parent)==null||X.moveEditorInDOM(this)}_setParentAndPosition(X,J,H){X.changeParent(this),this.x=J,this.y=H,this.fixAndSetPosition()}getRect(X,J){const H=this.parentScale,[et,lt]=this.pageDimensions,[Mt,Rt]=this.pageTranslation,gt=X/H,Ot=J/H,Dt=this.x*et,qt=this.y*lt,vt=this.width*et,dl=this.height*lt;switch(this.rotation){case 0:return[Dt+gt+Mt,lt-qt-Ot-dl+Rt,Dt+gt+vt+Mt,lt-qt-Ot+Rt];case 90:return[Dt+Ot+Mt,lt-qt+gt+Rt,Dt+Ot+dl+Mt,lt-qt+gt+vt+Rt];case 180:return[Dt-gt-vt+Mt,lt-qt+Ot+Rt,Dt-gt+Mt,lt-qt+Ot+dl+Rt];case 270:return[Dt-Ot-dl+Mt,lt-qt-gt-vt+Rt,Dt-Ot+Mt,lt-qt-gt+Rt];default:throw new Error("Invalid rotation")}}getRectInCurrentCoords(X,J){const[H,et,lt,Mt]=X,Rt=lt-H,gt=Mt-et;switch(this.rotation){case 0:return[H,J-Mt,Rt,gt];case 90:return[H,J-et,gt,Rt];case 180:return[lt,J-et,Rt,gt];case 270:return[lt,J-Mt,gt,Rt];default:throw new Error("Invalid rotation")}}onceAdded(){}isEmpty(){return!1}enableEditMode(){ul(this,U,!0)}disableEditMode(){ul(this,U,!1)}isInEditMode(){return bt(this,U)}shouldGetKeyboardEvents(){return!1}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}rebuild(){var X,J;(X=this.div)==null||X.addEventListener("focusin",bt(this,j)),(J=this.div)==null||J.addEventListener("focusout",bt(this,I))}serialize(X=!1,J=null){(0,p.unreachable)("An editor must be serializable")}static deserialize(X,J,H){const et=new this.prototype.constructor({parent:J,id:J.getNextId(),uiManager:H});et.rotation=X.rotation;const[lt,Mt]=et.pageDimensions,[Rt,gt,Ot,Dt]=et.getRectInCurrentCoords(X.rect,Mt);return et.x=Rt/lt,et.y=gt/Mt,et.width=Ot/lt,et.height=Dt/Mt,et}remove(){var X;this.div.removeEventListener("focusin",bt(this,j)),this.div.removeEventListener("focusout",bt(this,I)),this.isEmpty()||this.commit(),this.parent?this.parent.remove(this):this._uiManager.removeEditor(this),(X=bt(this,g))==null||X.remove(),ul(this,g,null),ul(this,q,null)}get isResizable(){return!1}makeResizable(){this.isResizable&&(nl(this,it,hs).call(this),bt(this,R).classList.remove("hidden"))}select(){var X;this.makeResizable(),(X=this.div)==null||X.classList.add("selectedEditor")}unselect(){var X,J,H;(X=bt(this,R))==null||X.classList.add("hidden"),(J=this.div)==null||J.classList.remove("selectedEditor"),(H=this.div)!=null&&H.contains(document.activeElement)&&this._uiManager.currentLayer.div.focus()}updateParams(X,J){}disableEditing(){bt(this,g)&&(bt(this,g).hidden=!0)}enableEditing(){bt(this,g)&&(bt(this,g).hidden=!1)}enterInEditMode(){}get contentDiv(){return this.div}get isEditing(){return bt(this,C)}set isEditing(X){ul(this,C,X),this.parent&&(X?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null))}setAspectRatio(X,J){ul(this,Q,!0);const H=X/J,{style:et}=this.div;et.aspectRatio=H,et.height="auto"}static get MIN_SIZE(){return 16}};F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakMap,K=new WeakMap,u=new WeakMap,m=new WeakSet,Ie=function([X,J],H,et){[H,et]=this.screenToPageTranslation(H,et),this.x+=H/X,this.y+=et/J,this.fixAndSetPosition()},$=new WeakSet,ze=function(){const[X,J]=this.parentDimensions,{_borderLineWidth:H}=S,et=H/X,lt=H/J;switch(this.rotation){case 90:return[-et,lt];case 180:return[et,lt];case 270:return[et,-lt];default:return[-et,-lt]}},Zt=new WeakSet,Re=function(X,J,H){switch(H){case 90:return[J,-X];case 180:return[-X,-J];case 270:return[-J,X];default:return[X,J]}},It=new WeakSet,Se=function(X){switch(X){case 90:{const[J,H]=this.pageDimensions;return[0,-J/H,H/J,0]}case 180:return[-1,0,0,-1];case 270:{const[J,H]=this.pageDimensions;return[0,J/H,-H/J,0]}default:return[1,0,0,1]}},it=new WeakSet,hs=function(){if(bt(this,R))return;ul(this,R,document.createElement("div")),bt(this,R).classList.add("resizers");const X=["topLeft","topRight","bottomRight","bottomLeft"];this._willKeepAspectRatio||X.push("topMiddle","middleRight","bottomMiddle","middleLeft");for(const J of X){const H=document.createElement("div");bt(this,R).append(H),H.classList.add("resizer",J),H.addEventListener("pointerdown",nl(this,zt,bs).bind(this,J)),H.addEventListener("contextmenu",f.noContextMenu)}this.div.prepend(bt(this,R))},zt=new WeakSet,bs=function(X,J){J.preventDefault();const{isMac:H}=p.FeatureTest.platform;if(J.button!==0||J.ctrlKey&&H)return;const et=nl(this,Xt,os).bind(this,X),lt=this._isDraggable;this._isDraggable=!1;const Mt={passive:!0,capture:!0};window.addEventListener("pointermove",et,Mt);const Rt=this.x,gt=this.y,Ot=this.width,Dt=this.height,qt=this.parent.div.style.cursor,vt=this.div.style.cursor;this.div.style.cursor=this.parent.div.style.cursor=window.getComputedStyle(J.target).cursor;const dl=()=>{this._isDraggable=lt,window.removeEventListener("pointerup",dl),window.removeEventListener("blur",dl),window.removeEventListener("pointermove",et,Mt),this.parent.div.style.cursor=qt,this.div.style.cursor=vt;const ol=this.x,il=this.y,_t=this.width,Ft=this.height;ol===Rt&&il===gt&&_t===Ot&&Ft===Dt||this.addCommands({cmd:()=>{this.width=_t,this.height=Ft,this.x=ol,this.y=il;const[wt,pt]=this.parentDimensions;this.setDims(wt*_t,pt*Ft),this.fixAndSetPosition()},undo:()=>{this.width=Ot,this.height=Dt,this.x=Rt,this.y=gt;const[wt,pt]=this.parentDimensions;this.setDims(wt*Ot,pt*Dt),this.fixAndSetPosition()},mustExec:!0})};window.addEventListener("pointerup",dl),window.addEventListener("blur",dl)},Xt=new WeakSet,os=function(X,J){const[H,et]=this.parentDimensions,lt=this.x,Mt=this.y,Rt=this.width,gt=this.height,Ot=S.MIN_SIZE/H,Dt=S.MIN_SIZE/et,qt=Tt=>Math.round(Tt*1e4)/1e4,vt=nl(this,It,Se).call(this,this.rotation),dl=(Tt,jt)=>[vt[0]*Tt+vt[2]*jt,vt[1]*Tt+vt[3]*jt],ol=nl(this,It,Se).call(this,360-this.rotation),il=(Tt,jt)=>[ol[0]*Tt+ol[2]*jt,ol[1]*Tt+ol[3]*jt];let _t,Ft,wt=!1,pt=!1;switch(X){case"topLeft":wt=!0,_t=(Tt,jt)=>[0,0],Ft=(Tt,jt)=>[Tt,jt];break;case"topMiddle":_t=(Tt,jt)=>[Tt/2,0],Ft=(Tt,jt)=>[Tt/2,jt];break;case"topRight":wt=!0,_t=(Tt,jt)=>[Tt,0],Ft=(Tt,jt)=>[0,jt];break;case"middleRight":pt=!0,_t=(Tt,jt)=>[Tt,jt/2],Ft=(Tt,jt)=>[0,jt/2];break;case"bottomRight":wt=!0,_t=(Tt,jt)=>[Tt,jt],Ft=(Tt,jt)=>[0,0];break;case"bottomMiddle":_t=(Tt,jt)=>[Tt/2,jt],Ft=(Tt,jt)=>[Tt/2,0];break;case"bottomLeft":wt=!0,_t=(Tt,jt)=>[0,jt],Ft=(Tt,jt)=>[Tt,0];break;case"middleLeft":pt=!0,_t=(Tt,jt)=>[0,jt/2],Ft=(Tt,jt)=>[Tt,jt/2];break}const Ct=_t(Rt,gt),el=Ft(Rt,gt);let cl=dl(...el);const Ml=qt(lt+cl[0]),Yl=qt(Mt+cl[1]);let Xl=1,Tl=1,[Vl,Ll]=this.screenToPageTranslation(J.movementX,J.movementY);if([Vl,Ll]=il(Vl/H,Ll/et),wt){const Tt=Math.hypot(Rt,gt);Xl=Tl=Math.max(Math.min(Math.hypot(el[0]-Ct[0]-Vl,el[1]-Ct[1]-Ll)/Tt,1/Rt,1/gt),Ot/Rt,Dt/gt)}else pt?Xl=Math.max(Ot,Math.min(1,Math.abs(el[0]-Ct[0]-Vl)))/Rt:Tl=Math.max(Dt,Math.min(1,Math.abs(el[1]-Ct[1]-Ll)))/gt;const yl=qt(Rt*Xl),Qt=qt(gt*Tl);cl=dl(...Ft(yl,Qt));const ot=Ml-cl[0],ut=Yl-cl[1];this.width=yl,this.height=Qt,this.x=ot,this.y=ut,this.setDims(H*yl,et*Qt),this.fixAndSetPosition()},Vt=new WeakSet,we=function(){return Sl(this,null,function*(){var H;const X=bt(this,g);if(!X)return;if(!bt(this,F)&&!bt(this,L)){X.classList.remove("done"),(H=bt(this,q))==null||H.remove();return}S._l10nPromise.get("editor_alt_text_edit_button_label").then(et=>{X.setAttribute("aria-label",et)});let J=bt(this,q);if(!J){ul(this,q,J=document.createElement("span")),J.className="tooltip",J.setAttribute("role","tooltip");const et=J.id=`alt-text-tooltip-${this.id}`;X.setAttribute("aria-describedby",et);const lt=100;X.addEventListener("mouseenter",()=>{ul(this,v,setTimeout(()=>{ul(this,v,null),bt(this,q).classList.add("show"),this._uiManager._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",subtype:this.editorType,data:{action:"alt_text_tooltip"}}})},lt))}),X.addEventListener("mouseleave",()=>{var Mt;clearTimeout(bt(this,v)),ul(this,v,null),(Mt=bt(this,q))==null||Mt.classList.remove("show")})}X.classList.add("done"),J.innerText=bt(this,L)?yield S._l10nPromise.get("editor_alt_text_decorative_tooltip"):bt(this,F),J.parentNode||X.append(J)})},Pt=new WeakSet,ms=function(X){if(!this._isDraggable)return;const J=this._uiManager.isSelected(this);this._uiManager.setUpDragSession();let H,et;J&&(H={passive:!0,capture:!0},et=Mt=>{const[Rt,gt]=this.screenToPageTranslation(Mt.movementX,Mt.movementY);this._uiManager.dragSelectedEditors(Rt,gt)},window.addEventListener("pointermove",et,H));const lt=()=>{if(window.removeEventListener("pointerup",lt),window.removeEventListener("blur",lt),J&&window.removeEventListener("pointermove",et,H),ul(this,k,!1),!this._uiManager.endDragSession()){const{isMac:Mt}=p.FeatureTest.platform;X.ctrlKey&&!Mt||X.shiftKey||X.metaKey&&Mt?this.parent.toggleSelected(this):this.parent.setSelected(this)}};window.addEventListener("pointerup",lt),window.addEventListener("blur",lt)},ll(S,Zt),Dl(S,"_borderLineWidth",-1),Dl(S,"_colorManager",new M.ColorManager),Dl(S,"_zIndex",1),Dl(S,"SMALL_EDITOR_SIZE",0);let B=S;r.AnnotationEditor=B;class O extends B{constructor(X){super(X),this.annotationElementId=X.annotationElementId,this.deleted=!0}serialize(){return{id:this.annotationElementId,deleted:!0,pageIndex:this.pageIndex}}}},(st,r,h)=>{var Q,R,j,I,k,xe,K,u,m,_,$,us,dt,It,xt,it,Nt,zt,Gt,Xt,Ut,Vt,Ht,Pt,at,S,w,X,J,H,et,lt,Mt,Rt,gt,Ot,Dt,qt,vt,dl,ol,il,_t,Ft,wt,pt,Ct,Ws,cl,ke,Yl,ge,Tl,be,Ll,De,Qt,je,ut,Ol,jt,le,Lt,Gs,Kt,Ms,tl,Ce,Bt,ee,hl,Fe;Object.defineProperty(r,"__esModule",{value:!0}),r.KeyboardManager=r.CommandManager=r.ColorManager=r.AnnotationEditorUIManager=void 0,r.bindEvents=f,r.opacityToHex=B;var M=h(1),p=h(6);function f(nt,T,ct){for(const Wt of ct)T.addEventListener(Wt,nt[Wt].bind(nt))}function B(nt){return Math.round(Math.min(255,Math.max(1,255*nt))).toString(16).padStart(2,"0")}class O{constructor(){ll(this,Q,0)}getId(){return`${M.AnnotationEditorPrefix}${te(this,Q)._++}`}}Q=new WeakMap;const U=class U{constructor(){ll(this,k);ll(this,R,(0,M.getUuid)());ll(this,j,0);ll(this,I,null)}static get _isSVGFittingCanvas(){const T='data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>',Wt=new OffscreenCanvas(1,3).getContext("2d"),yt=new Image;yt.src=T;const kt=yt.decode().then(()=>(Wt.drawImage(yt,0,0,1,1,0,0,1,3),new Uint32Array(Wt.getImageData(0,0,1,1).data.buffer)[0]===0));return(0,M.shadow)(this,"_isSVGFittingCanvas",kt)}getFromFile(T){return Sl(this,null,function*(){const{lastModified:ct,name:Wt,size:yt,type:kt}=T;return nl(this,k,xe).call(this,`${ct}_${Wt}_${yt}_${kt}`,T)})}getFromUrl(T){return Sl(this,null,function*(){return nl(this,k,xe).call(this,T,T)})}getFromId(T){return Sl(this,null,function*(){bt(this,I)||ul(this,I,new Map);const ct=bt(this,I).get(T);return ct?ct.bitmap?(ct.refCounter+=1,ct):ct.file?this.getFromFile(ct.file):this.getFromUrl(ct.url):null})}getSvgUrl(T){const ct=bt(this,I).get(T);return ct!=null&&ct.isSvg?ct.svgUrl:null}deleteId(T){bt(this,I)||ul(this,I,new Map);const ct=bt(this,I).get(T);ct&&(ct.refCounter-=1,ct.refCounter===0&&(ct.bitmap=null))}isValidId(T){return T.startsWith(`image_${bt(this,R)}_`)}};R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakSet,xe=function(T,ct){return Sl(this,null,function*(){bt(this,I)||ul(this,I,new Map);let Wt=bt(this,I).get(T);if(Wt===null)return null;if(Wt!=null&&Wt.bitmap)return Wt.refCounter+=1,Wt;try{Wt||(Wt={bitmap:null,id:`image_${bt(this,R)}_${te(this,j)._++}`,refCounter:0,isSvg:!1});let yt;if(typeof ct=="string"){Wt.url=ct;const kt=yield fetch(ct);if(!kt.ok)throw new Error(kt.statusText);yt=yield kt.blob()}else yt=Wt.file=ct;if(yt.type==="image/svg+xml"){const kt=U._isSVGFittingCanvas,Et=new FileReader,sl=new Image,ml=new Promise((al,zl)=>{sl.onload=()=>{Wt.bitmap=sl,Wt.isSvg=!0,al()},Et.onload=()=>Sl(this,null,function*(){const Gl=Wt.svgUrl=Et.result;sl.src=(yield kt)?`${Gl}#svgView(preserveAspectRatio(none))`:Gl}),sl.onerror=Et.onerror=zl});Et.readAsDataURL(yt),yield ml}else Wt.bitmap=yield createImageBitmap(yt);Wt.refCounter=1}catch(yt){console.error(yt),Wt=null}return bt(this,I).set(T,Wt),Wt&&bt(this,I).set(Wt.id,Wt),Wt})};let F=U;class L{constructor(T=128){ll(this,K,[]);ll(this,u,!1);ll(this,m,void 0);ll(this,_,-1);ul(this,m,T)}add({cmd:T,undo:ct,mustExec:Wt,type:yt=NaN,overwriteIfSameType:kt=!1,keepUndo:Et=!1}){if(Wt&&T(),bt(this,u))return;const sl={cmd:T,undo:ct,type:yt};if(bt(this,_)===-1){bt(this,K).length>0&&(bt(this,K).length=0),ul(this,_,0),bt(this,K).push(sl);return}if(kt&&bt(this,K)[bt(this,_)].type===yt){Et&&(sl.undo=bt(this,K)[bt(this,_)].undo),bt(this,K)[bt(this,_)]=sl;return}const ml=bt(this,_)+1;ml===bt(this,m)?bt(this,K).splice(0,1):(ul(this,_,ml),ml<bt(this,K).length&&bt(this,K).splice(ml)),bt(this,K).push(sl)}undo(){bt(this,_)!==-1&&(ul(this,u,!0),bt(this,K)[bt(this,_)].undo(),ul(this,u,!1),ul(this,_,bt(this,_)-1))}redo(){bt(this,_)<bt(this,K).length-1&&(ul(this,_,bt(this,_)+1),ul(this,u,!0),bt(this,K)[bt(this,_)].cmd(),ul(this,u,!1))}hasSomethingToUndo(){return bt(this,_)!==-1}hasSomethingToRedo(){return bt(this,_)<bt(this,K).length-1}destroy(){ul(this,K,null)}}K=new WeakMap,u=new WeakMap,m=new WeakMap,_=new WeakMap,r.CommandManager=L;class g{constructor(T){ll(this,$);this.buffer=[],this.callbacks=new Map,this.allKeys=new Set;const{isMac:ct}=M.FeatureTest.platform;for(const[Wt,yt,kt={}]of T)for(const Et of Wt){const sl=Et.startsWith("mac+");ct&&sl?(this.callbacks.set(Et.slice(4),{callback:yt,options:kt}),this.allKeys.add(Et.split("+").at(-1))):!ct&&!sl&&(this.callbacks.set(Et,{callback:yt,options:kt}),this.allKeys.add(Et.split("+").at(-1)))}}exec(T,ct){if(!this.allKeys.has(ct.key))return;const Wt=this.callbacks.get(nl(this,$,us).call(this,ct));if(!Wt)return;const{callback:yt,options:{bubbles:kt=!1,args:Et=[],checker:sl=null}}=Wt;sl&&!sl(T,ct)||(yt.bind(T,...Et)(),kt||(ct.stopPropagation(),ct.preventDefault()))}}$=new WeakSet,us=function(T){T.altKey&&this.buffer.push("alt"),T.ctrlKey&&this.buffer.push("ctrl"),T.metaKey&&this.buffer.push("meta"),T.shiftKey&&this.buffer.push("shift"),this.buffer.push(T.key);const ct=this.buffer.join("+");return this.buffer.length=0,ct},r.KeyboardManager=g;const Zt=class Zt{get _colors(){const T=new Map([["CanvasText",null],["Canvas",null]]);return(0,p.getColorValues)(T),(0,M.shadow)(this,"_colors",T)}convert(T){const ct=(0,p.getRGB)(T);if(!window.matchMedia("(forced-colors: active)").matches)return ct;for(const[Wt,yt]of this._colors)if(yt.every((kt,Et)=>kt===ct[Et]))return Zt._colorsMapping.get(Wt);return ct}getHexCode(T){const ct=this._colors.get(T);return ct?M.Util.makeHexColor(...ct):T}};Dl(Zt,"_colorsMapping",new Map([["CanvasText",[0,0,0]],["Canvas",[255,255,255]]]));let q=Zt;r.ColorManager=q;const Wl=class Wl{constructor(T,ct,Wt,yt,kt,Et){ll(this,Ct);ll(this,cl);ll(this,Yl);ll(this,Tl);ll(this,Ll);ll(this,Qt);ll(this,ut);ll(this,jt);ll(this,Lt);ll(this,Kt);ll(this,tl);ll(this,Bt);ll(this,hl);ll(this,dt,null);ll(this,It,new Map);ll(this,xt,new Map);ll(this,it,null);ll(this,Nt,null);ll(this,zt,new L);ll(this,Gt,0);ll(this,Xt,new Set);ll(this,Ut,null);ll(this,Vt,null);ll(this,Ht,new Set);ll(this,Pt,null);ll(this,at,new O);ll(this,S,!1);ll(this,w,!1);ll(this,X,null);ll(this,J,M.AnnotationEditorType.NONE);ll(this,H,new Set);ll(this,et,null);ll(this,lt,this.blur.bind(this));ll(this,Mt,this.focus.bind(this));ll(this,Rt,this.copy.bind(this));ll(this,gt,this.cut.bind(this));ll(this,Ot,this.paste.bind(this));ll(this,Dt,this.keydown.bind(this));ll(this,qt,this.onEditingAction.bind(this));ll(this,vt,this.onPageChanging.bind(this));ll(this,dl,this.onScaleChanging.bind(this));ll(this,ol,this.onRotationChanging.bind(this));ll(this,il,{isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1});ll(this,_t,[0,0]);ll(this,Ft,null);ll(this,wt,null);ll(this,pt,null);ul(this,wt,T),ul(this,pt,ct),ul(this,it,Wt),this._eventBus=yt,this._eventBus._on("editingaction",bt(this,qt)),this._eventBus._on("pagechanging",bt(this,vt)),this._eventBus._on("scalechanging",bt(this,dl)),this._eventBus._on("rotationchanging",bt(this,ol)),ul(this,Nt,kt.annotationStorage),ul(this,Pt,kt.filterFactory),ul(this,et,Et),this.viewParameters={realScale:p.PixelsPerInch.PDF_TO_CSS_UNITS,rotation:0}}static get _keyboardManager(){const T=Wl.prototype,ct=kt=>{const{activeElement:Et}=document;return Et&&bt(kt,wt).contains(Et)&&kt.hasSomethingToControl()},Wt=this.TRANSLATE_SMALL,yt=this.TRANSLATE_BIG;return(0,M.shadow)(this,"_keyboardManager",new g([[["ctrl+a","mac+meta+a"],T.selectAll],[["ctrl+z","mac+meta+z"],T.undo],[["ctrl+y","ctrl+shift+z","mac+meta+shift+z","ctrl+shift+Z","mac+meta+shift+Z"],T.redo],[["Backspace","alt+Backspace","ctrl+Backspace","shift+Backspace","mac+Backspace","mac+alt+Backspace","mac+ctrl+Backspace","Delete","ctrl+Delete","shift+Delete","mac+Delete"],T.delete],[["Escape","mac+Escape"],T.unselectAll],[["ArrowLeft","mac+ArrowLeft"],T.translateSelectedEditors,{args:[-Wt,0],checker:ct}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],T.translateSelectedEditors,{args:[-yt,0],checker:ct}],[["ArrowRight","mac+ArrowRight"],T.translateSelectedEditors,{args:[Wt,0],checker:ct}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],T.translateSelectedEditors,{args:[yt,0],checker:ct}],[["ArrowUp","mac+ArrowUp"],T.translateSelectedEditors,{args:[0,-Wt],checker:ct}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],T.translateSelectedEditors,{args:[0,-yt],checker:ct}],[["ArrowDown","mac+ArrowDown"],T.translateSelectedEditors,{args:[0,Wt],checker:ct}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],T.translateSelectedEditors,{args:[0,yt],checker:ct}]]))}destroy(){nl(this,Tl,be).call(this),nl(this,cl,ke).call(this),this._eventBus._off("editingaction",bt(this,qt)),this._eventBus._off("pagechanging",bt(this,vt)),this._eventBus._off("scalechanging",bt(this,dl)),this._eventBus._off("rotationchanging",bt(this,ol));for(const T of bt(this,xt).values())T.destroy();bt(this,xt).clear(),bt(this,It).clear(),bt(this,Ht).clear(),ul(this,dt,null),bt(this,H).clear(),bt(this,zt).destroy(),bt(this,it).destroy()}get hcmFilter(){return(0,M.shadow)(this,"hcmFilter",bt(this,et)?bt(this,Pt).addHCMFilter(bt(this,et).foreground,bt(this,et).background):"none")}get direction(){return(0,M.shadow)(this,"direction",getComputedStyle(bt(this,wt)).direction)}editAltText(T){var ct;(ct=bt(this,it))==null||ct.editAltText(this,T)}onPageChanging({pageNumber:T}){ul(this,Gt,T-1)}focusMainContainer(){bt(this,wt).focus()}findParent(T,ct){for(const Wt of bt(this,xt).values()){const{x:yt,y:kt,width:Et,height:sl}=Wt.div.getBoundingClientRect();if(T>=yt&&T<=yt+Et&&ct>=kt&&ct<=kt+sl)return Wt}return null}disableUserSelect(T=!1){bt(this,pt).classList.toggle("noUserSelect",T)}addShouldRescale(T){bt(this,Ht).add(T)}removeShouldRescale(T){bt(this,Ht).delete(T)}onScaleChanging({scale:T}){this.commitOrRemove(),this.viewParameters.realScale=T*p.PixelsPerInch.PDF_TO_CSS_UNITS;for(const ct of bt(this,Ht))ct.onScaleChanging()}onRotationChanging({pagesRotation:T}){this.commitOrRemove(),this.viewParameters.rotation=T}addToAnnotationStorage(T){!T.isEmpty()&&bt(this,Nt)&&!bt(this,Nt).has(T.id)&&bt(this,Nt).setValue(T.id,T)}blur(){if(!this.hasSelection)return;const{activeElement:T}=document;for(const ct of bt(this,H))if(ct.div.contains(T)){ul(this,X,[ct,T]),ct._focusEventsAllowed=!1;break}}focus(){if(!bt(this,X))return;const[T,ct]=bt(this,X);ul(this,X,null),ct.addEventListener("focusin",()=>{T._focusEventsAllowed=!0},{once:!0}),ct.focus()}addEditListeners(){nl(this,Yl,ge).call(this),nl(this,Ll,De).call(this)}removeEditListeners(){nl(this,Tl,be).call(this),nl(this,Qt,je).call(this)}copy(T){var Wt;if(T.preventDefault(),(Wt=bt(this,dt))==null||Wt.commitOrRemove(),!this.hasSelection)return;const ct=[];for(const yt of bt(this,H)){const kt=yt.serialize(!0);kt&&ct.push(kt)}ct.length!==0&&T.clipboardData.setData("application/pdfjs",JSON.stringify(ct))}cut(T){this.copy(T),this.delete()}paste(T){T.preventDefault();const{clipboardData:ct}=T;for(const kt of ct.items)for(const Et of bt(this,Vt))if(Et.isHandlingMimeForPasting(kt.type)){Et.paste(kt,this.currentLayer);return}let Wt=ct.getData("application/pdfjs");if(!Wt)return;try{Wt=JSON.parse(Wt)}catch(kt){(0,M.warn)(`paste: "${kt.message}".`);return}if(!Array.isArray(Wt))return;this.unselectAll();const yt=this.currentLayer;try{const kt=[];for(const ml of Wt){const al=yt.deserialize(ml);if(!al)return;kt.push(al)}const Et=()=>{for(const ml of kt)nl(this,tl,Ce).call(this,ml);nl(this,hl,Fe).call(this,kt)},sl=()=>{for(const ml of kt)ml.remove()};this.addCommands({cmd:Et,undo:sl,mustExec:!0})}catch(kt){(0,M.warn)(`paste: "${kt.message}".`)}}keydown(T){var ct;(ct=this.getActive())!=null&&ct.shouldGetKeyboardEvents()||Wl._keyboardManager.exec(this,T)}onEditingAction(T){["undo","redo","delete","selectAll"].includes(T.name)&&this[T.name]()}setEditingState(T){T?(nl(this,Ct,Ws).call(this),nl(this,Yl,ge).call(this),nl(this,Ll,De).call(this),nl(this,ut,Ol).call(this,{isEditing:bt(this,J)!==M.AnnotationEditorType.NONE,isEmpty:nl(this,Bt,ee).call(this),hasSomethingToUndo:bt(this,zt).hasSomethingToUndo(),hasSomethingToRedo:bt(this,zt).hasSomethingToRedo(),hasSelectedEditor:!1})):(nl(this,cl,ke).call(this),nl(this,Tl,be).call(this),nl(this,Qt,je).call(this),nl(this,ut,Ol).call(this,{isEditing:!1}),this.disableUserSelect(!1))}registerEditorTypes(T){if(!bt(this,Vt)){ul(this,Vt,T);for(const ct of bt(this,Vt))nl(this,jt,le).call(this,ct.defaultPropertiesToUpdate)}}getId(){return bt(this,at).getId()}get currentLayer(){return bt(this,xt).get(bt(this,Gt))}getLayer(T){return bt(this,xt).get(T)}get currentPageIndex(){return bt(this,Gt)}addLayer(T){bt(this,xt).set(T.pageIndex,T),bt(this,S)?T.enable():T.disable()}removeLayer(T){bt(this,xt).delete(T.pageIndex)}updateMode(T,ct=null){if(bt(this,J)!==T){if(ul(this,J,T),T===M.AnnotationEditorType.NONE){this.setEditingState(!1),nl(this,Kt,Ms).call(this);return}this.setEditingState(!0),nl(this,Lt,Gs).call(this),this.unselectAll();for(const Wt of bt(this,xt).values())Wt.updateMode(T);if(ct){for(const Wt of bt(this,It).values())if(Wt.annotationElementId===ct){this.setSelected(Wt),Wt.enterInEditMode();break}}}}updateToolbar(T){T!==bt(this,J)&&this._eventBus.dispatch("switchannotationeditormode",{source:this,mode:T})}updateParams(T,ct){if(bt(this,Vt)){if(T===M.AnnotationEditorParamsType.CREATE){this.currentLayer.addNewEditor(T);return}for(const Wt of bt(this,H))Wt.updateParams(T,ct);for(const Wt of bt(this,Vt))Wt.updateDefaultParams(T,ct)}}enableWaiting(T=!1){if(bt(this,w)!==T){ul(this,w,T);for(const ct of bt(this,xt).values())T?ct.disableClick():ct.enableClick(),ct.div.classList.toggle("waiting",T)}}getEditors(T){const ct=[];for(const Wt of bt(this,It).values())Wt.pageIndex===T&&ct.push(Wt);return ct}getEditor(T){return bt(this,It).get(T)}addEditor(T){bt(this,It).set(T.id,T)}removeEditor(T){var ct;bt(this,It).delete(T.id),this.unselect(T),(!T.annotationElementId||!bt(this,Xt).has(T.annotationElementId))&&((ct=bt(this,Nt))==null||ct.remove(T.id))}addDeletedAnnotationElement(T){bt(this,Xt).add(T.annotationElementId),T.deleted=!0}isDeletedAnnotationElement(T){return bt(this,Xt).has(T)}removeDeletedAnnotationElement(T){bt(this,Xt).delete(T.annotationElementId),T.deleted=!1}setActiveEditor(T){bt(this,dt)!==T&&(ul(this,dt,T),T&&nl(this,jt,le).call(this,T.propertiesToUpdate))}toggleSelected(T){if(bt(this,H).has(T)){bt(this,H).delete(T),T.unselect(),nl(this,ut,Ol).call(this,{hasSelectedEditor:this.hasSelection});return}bt(this,H).add(T),T.select(),nl(this,jt,le).call(this,T.propertiesToUpdate),nl(this,ut,Ol).call(this,{hasSelectedEditor:!0})}setSelected(T){for(const ct of bt(this,H))ct!==T&&ct.unselect();bt(this,H).clear(),bt(this,H).add(T),T.select(),nl(this,jt,le).call(this,T.propertiesToUpdate),nl(this,ut,Ol).call(this,{hasSelectedEditor:!0})}isSelected(T){return bt(this,H).has(T)}unselect(T){T.unselect(),bt(this,H).delete(T),nl(this,ut,Ol).call(this,{hasSelectedEditor:this.hasSelection})}get hasSelection(){return bt(this,H).size!==0}undo(){bt(this,zt).undo(),nl(this,ut,Ol).call(this,{hasSomethingToUndo:bt(this,zt).hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:nl(this,Bt,ee).call(this)})}redo(){bt(this,zt).redo(),nl(this,ut,Ol).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:bt(this,zt).hasSomethingToRedo(),isEmpty:nl(this,Bt,ee).call(this)})}addCommands(T){bt(this,zt).add(T),nl(this,ut,Ol).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:nl(this,Bt,ee).call(this)})}delete(){if(this.commitOrRemove(),!this.hasSelection)return;const T=[...bt(this,H)],ct=()=>{for(const yt of T)yt.remove()},Wt=()=>{for(const yt of T)nl(this,tl,Ce).call(this,yt)};this.addCommands({cmd:ct,undo:Wt,mustExec:!0})}commitOrRemove(){var T;(T=bt(this,dt))==null||T.commitOrRemove()}hasSomethingToControl(){return bt(this,dt)||this.hasSelection}selectAll(){for(const T of bt(this,H))T.commit();nl(this,hl,Fe).call(this,bt(this,It).values())}unselectAll(){if(bt(this,dt)){bt(this,dt).commitOrRemove();return}if(this.hasSelection){for(const T of bt(this,H))T.unselect();bt(this,H).clear(),nl(this,ut,Ol).call(this,{hasSelectedEditor:!1})}}translateSelectedEditors(T,ct,Wt=!1){if(Wt||this.commitOrRemove(),!this.hasSelection)return;bt(this,_t)[0]+=T,bt(this,_t)[1]+=ct;const[yt,kt]=bt(this,_t),Et=[...bt(this,H)],sl=1e3;bt(this,Ft)&&clearTimeout(bt(this,Ft)),ul(this,Ft,setTimeout(()=>{ul(this,Ft,null),bt(this,_t)[0]=bt(this,_t)[1]=0,this.addCommands({cmd:()=>{for(const ml of Et)bt(this,It).has(ml.id)&&ml.translateInPage(yt,kt)},undo:()=>{for(const ml of Et)bt(this,It).has(ml.id)&&ml.translateInPage(-yt,-kt)},mustExec:!1})},sl));for(const ml of Et)ml.translateInPage(T,ct)}setUpDragSession(){if(this.hasSelection){this.disableUserSelect(!0),ul(this,Ut,new Map);for(const T of bt(this,H))bt(this,Ut).set(T,{savedX:T.x,savedY:T.y,savedPageIndex:T.pageIndex,newX:0,newY:0,newPageIndex:-1})}}endDragSession(){if(!bt(this,Ut))return!1;this.disableUserSelect(!1);const T=bt(this,Ut);ul(this,Ut,null);let ct=!1;for(const[{x:yt,y:kt,pageIndex:Et},sl]of T)sl.newX=yt,sl.newY=kt,sl.newPageIndex=Et,ct||(ct=yt!==sl.savedX||kt!==sl.savedY||Et!==sl.savedPageIndex);if(!ct)return!1;const Wt=(yt,kt,Et,sl)=>{if(bt(this,It).has(yt.id)){const ml=bt(this,xt).get(sl);ml?yt._setParentAndPosition(ml,kt,Et):(yt.pageIndex=sl,yt.x=kt,yt.y=Et)}};return this.addCommands({cmd:()=>{for(const[yt,{newX:kt,newY:Et,newPageIndex:sl}]of T)Wt(yt,kt,Et,sl)},undo:()=>{for(const[yt,{savedX:kt,savedY:Et,savedPageIndex:sl}]of T)Wt(yt,kt,Et,sl)},mustExec:!0}),!0}dragSelectedEditors(T,ct){if(bt(this,Ut))for(const Wt of bt(this,Ut).keys())Wt.drag(T,ct)}rebuild(T){if(T.parent===null){const ct=this.getLayer(T.pageIndex);ct?(ct.changeParent(T),ct.addOrRebuild(T)):(this.addEditor(T),this.addToAnnotationStorage(T),T.rebuild())}else T.parent.addOrRebuild(T)}isActive(T){return bt(this,dt)===T}getActive(){return bt(this,dt)}getMode(){return bt(this,J)}get imageManager(){return(0,M.shadow)(this,"imageManager",new F)}};dt=new WeakMap,It=new WeakMap,xt=new WeakMap,it=new WeakMap,Nt=new WeakMap,zt=new WeakMap,Gt=new WeakMap,Xt=new WeakMap,Ut=new WeakMap,Vt=new WeakMap,Ht=new WeakMap,Pt=new WeakMap,at=new WeakMap,S=new WeakMap,w=new WeakMap,X=new WeakMap,J=new WeakMap,H=new WeakMap,et=new WeakMap,lt=new WeakMap,Mt=new WeakMap,Rt=new WeakMap,gt=new WeakMap,Ot=new WeakMap,Dt=new WeakMap,qt=new WeakMap,vt=new WeakMap,dl=new WeakMap,ol=new WeakMap,il=new WeakMap,_t=new WeakMap,Ft=new WeakMap,wt=new WeakMap,pt=new WeakMap,Ct=new WeakSet,Ws=function(){window.addEventListener("focus",bt(this,Mt)),window.addEventListener("blur",bt(this,lt))},cl=new WeakSet,ke=function(){window.removeEventListener("focus",bt(this,Mt)),window.removeEventListener("blur",bt(this,lt))},Yl=new WeakSet,ge=function(){window.addEventListener("keydown",bt(this,Dt),{capture:!0})},Tl=new WeakSet,be=function(){window.removeEventListener("keydown",bt(this,Dt),{capture:!0})},Ll=new WeakSet,De=function(){document.addEventListener("copy",bt(this,Rt)),document.addEventListener("cut",bt(this,gt)),document.addEventListener("paste",bt(this,Ot))},Qt=new WeakSet,je=function(){document.removeEventListener("copy",bt(this,Rt)),document.removeEventListener("cut",bt(this,gt)),document.removeEventListener("paste",bt(this,Ot))},ut=new WeakSet,Ol=function(T){Object.entries(T).some(([Wt,yt])=>bt(this,il)[Wt]!==yt)&&this._eventBus.dispatch("annotationeditorstateschanged",{source:this,details:Object.assign(bt(this,il),T)})},jt=new WeakSet,le=function(T){this._eventBus.dispatch("annotationeditorparamschanged",{source:this,details:T})},Lt=new WeakSet,Gs=function(){if(!bt(this,S)){ul(this,S,!0);for(const T of bt(this,xt).values())T.enable()}},Kt=new WeakSet,Ms=function(){if(this.unselectAll(),bt(this,S)){ul(this,S,!1);for(const T of bt(this,xt).values())T.disable()}},tl=new WeakSet,Ce=function(T){const ct=bt(this,xt).get(T.pageIndex);ct?ct.addOrRebuild(T):this.addEditor(T)},Bt=new WeakSet,ee=function(){if(bt(this,It).size===0)return!0;if(bt(this,It).size===1)for(const T of bt(this,It).values())return T.isEmpty();return!1},hl=new WeakSet,Fe=function(T){bt(this,H).clear();for(const ct of T)ct.isEmpty()||(bt(this,H).add(ct),ct.select());nl(this,ut,Ol).call(this,{hasSelectedEditor:!0})},Dl(Wl,"TRANSLATE_SMALL",1),Dl(Wl,"TRANSLATE_BIG",10);let v=Wl;r.AnnotationEditorUIManager=v},(st,r,h)=>{var Gt,Xt,Ut,Vt,Ht,Pt,at,S,w,X,J,H,fl,lt,Bl,Rt,Je,Ot,oe,qt,me,dl,se,il,ie;Object.defineProperty(r,"__esModule",{value:!0}),r.StatTimer=r.RenderingCancelledException=r.PixelsPerInch=r.PageViewport=r.PDFDateString=r.DOMStandardFontDataFactory=r.DOMSVGFactory=r.DOMFilterFactory=r.DOMCanvasFactory=r.DOMCMapReaderFactory=void 0,r.deprecated=_,r.getColorValues=It,r.getCurrentTransform=xt,r.getCurrentTransformInverse=it,r.getFilenameFromUrl=k,r.getPdfFilenameFromUrl=C,r.getRGB=dt,r.getXfaPageViewport=Zt,r.isDataScheme=j,r.isPdfFile=I,r.isValidFetchUrl=K,r.loadScript=m,r.noContextMenu=u,r.setLayerDimensions=Nt;var M=h(7),p=h(1);const f="http://www.w3.org/2000/svg",zt=class zt{};Dl(zt,"CSS",96),Dl(zt,"PDF",72),Dl(zt,"PDF_TO_CSS_UNITS",zt.CSS/zt.PDF);let B=zt;r.PixelsPerInch=B;class O extends M.BaseFilterFactory{constructor({docId:pt,ownerDocument:Ct=globalThis.document}={}){super();ll(this,H);ll(this,lt);ll(this,Rt);ll(this,Ot);ll(this,qt);ll(this,dl);ll(this,il);ll(this,Gt,void 0);ll(this,Xt,void 0);ll(this,Ut,void 0);ll(this,Vt,void 0);ll(this,Ht,void 0);ll(this,Pt,void 0);ll(this,at,void 0);ll(this,S,void 0);ll(this,w,void 0);ll(this,X,void 0);ll(this,J,0);ul(this,Ut,pt),ul(this,Vt,Ct)}addFilter(pt){if(!pt)return"none";let Ct=bt(this,H,fl).get(pt);if(Ct)return Ct;let el,cl,Ml,Yl;if(pt.length===1){const Ll=pt[0],yl=new Array(256);for(let Qt=0;Qt<256;Qt++)yl[Qt]=Ll[Qt]/255;Yl=el=cl=Ml=yl.join(",")}else{const[Ll,yl,Qt]=pt,ot=new Array(256),ut=new Array(256),Tt=new Array(256);for(let jt=0;jt<256;jt++)ot[jt]=Ll[jt]/255,ut[jt]=yl[jt]/255,Tt[jt]=Qt[jt]/255;el=ot.join(","),cl=ut.join(","),Ml=Tt.join(","),Yl=`${el}${cl}${Ml}`}if(Ct=bt(this,H,fl).get(Yl),Ct)return bt(this,H,fl).set(pt,Ct),Ct;const Xl=`g_${bt(this,Ut)}_transfer_map_${te(this,J)._++}`,Tl=`url(#${Xl})`;bt(this,H,fl).set(pt,Tl),bt(this,H,fl).set(Yl,Tl);const Vl=nl(this,Ot,oe).call(this,Xl);return nl(this,dl,se).call(this,el,cl,Ml,Vl),Tl}addHCMFilter(pt,Ct){var yl;const el=`${pt}-${Ct}`;if(bt(this,Pt)===el)return bt(this,at);if(ul(this,Pt,el),ul(this,at,"none"),(yl=bt(this,Ht))==null||yl.remove(),!pt||!Ct)return bt(this,at);const cl=nl(this,il,ie).call(this,pt);pt=p.Util.makeHexColor(...cl);const Ml=nl(this,il,ie).call(this,Ct);if(Ct=p.Util.makeHexColor(...Ml),bt(this,lt,Bl).style.color="",pt==="#000000"&&Ct==="#ffffff"||pt===Ct)return bt(this,at);const Yl=new Array(256);for(let Qt=0;Qt<=255;Qt++){const ot=Qt/255;Yl[Qt]=ot<=.03928?ot/12.92:$l((ot+.055)/1.055,2.4)}const Xl=Yl.join(","),Tl=`g_${bt(this,Ut)}_hcm_filter`,Vl=ul(this,S,nl(this,Ot,oe).call(this,Tl));nl(this,dl,se).call(this,Xl,Xl,Xl,Vl),nl(this,Rt,Je).call(this,Vl);const Ll=(Qt,ot)=>{const ut=cl[Qt]/255,Tt=Ml[Qt]/255,jt=new Array(ot+1);for(let Jt=0;Jt<=ot;Jt++)jt[Jt]=ut+Jt/ot*(Tt-ut);return jt.join(",")};return nl(this,dl,se).call(this,Ll(0,5),Ll(1,5),Ll(2,5),Vl),ul(this,at,`url(#${Tl})`),bt(this,at)}addHighlightHCMFilter(pt,Ct,el,cl){var Tt;const Ml=`${pt}-${Ct}-${el}-${cl}`;if(bt(this,w)===Ml)return bt(this,X);if(ul(this,w,Ml),ul(this,X,"none"),(Tt=bt(this,S))==null||Tt.remove(),!pt||!Ct)return bt(this,X);const[Yl,Xl]=[pt,Ct].map(nl(this,il,ie).bind(this));let Tl=Math.round(.2126*Yl[0]+.7152*Yl[1]+.0722*Yl[2]),Vl=Math.round(.2126*Xl[0]+.7152*Xl[1]+.0722*Xl[2]),[Ll,yl]=[el,cl].map(nl(this,il,ie).bind(this));Vl<Tl&&([Tl,Vl,Ll,yl]=[Vl,Tl,yl,Ll]),bt(this,lt,Bl).style.color="";const Qt=(jt,Jt,Lt)=>{const Yt=new Array(256),Kt=(Vl-Tl)/Lt,$t=jt/255,tl=(Jt-jt)/(255*Lt);let bl=0;for(let Bt=0;Bt<=Lt;Bt++){const rl=Math.round(Tl+Bt*Kt),hl=$t+Bt*tl;for(let Il=bl;Il<=rl;Il++)Yt[Il]=hl;bl=rl+1}for(let Bt=bl;Bt<256;Bt++)Yt[Bt]=Yt[bl-1];return Yt.join(",")},ot=`g_${bt(this,Ut)}_hcm_highlight_filter`,ut=ul(this,S,nl(this,Ot,oe).call(this,ot));return nl(this,Rt,Je).call(this,ut),nl(this,dl,se).call(this,Qt(Ll[0],yl[0],5),Qt(Ll[1],yl[1],5),Qt(Ll[2],yl[2],5),ut),ul(this,X,`url(#${ot})`),bt(this,X)}destroy(pt=!1){pt&&(bt(this,at)||bt(this,X))||(bt(this,Xt)&&(bt(this,Xt).parentNode.parentNode.remove(),ul(this,Xt,null)),bt(this,Gt)&&(bt(this,Gt).clear(),ul(this,Gt,null)),ul(this,J,0))}}Gt=new WeakMap,Xt=new WeakMap,Ut=new WeakMap,Vt=new WeakMap,Ht=new WeakMap,Pt=new WeakMap,at=new WeakMap,S=new WeakMap,w=new WeakMap,X=new WeakMap,J=new WeakMap,H=new WeakSet,fl=function(){return bt(this,Gt)||ul(this,Gt,new Map)},lt=new WeakSet,Bl=function(){if(!bt(this,Xt)){const pt=bt(this,Vt).createElement("div"),{style:Ct}=pt;Ct.visibility="hidden",Ct.contain="strict",Ct.width=Ct.height=0,Ct.position="absolute",Ct.top=Ct.left=0,Ct.zIndex=-1;const el=bt(this,Vt).createElementNS(f,"svg");el.setAttribute("width",0),el.setAttribute("height",0),ul(this,Xt,bt(this,Vt).createElementNS(f,"defs")),pt.append(el),el.append(bt(this,Xt)),bt(this,Vt).body.append(pt)}return bt(this,Xt)},Rt=new WeakSet,Je=function(pt){const Ct=bt(this,Vt).createElementNS(f,"feColorMatrix");Ct.setAttribute("type","matrix"),Ct.setAttribute("values","0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"),pt.append(Ct)},Ot=new WeakSet,oe=function(pt){const Ct=bt(this,Vt).createElementNS(f,"filter");return Ct.setAttribute("color-interpolation-filters","sRGB"),Ct.setAttribute("id",pt),bt(this,lt,Bl).append(Ct),Ct},qt=new WeakSet,me=function(pt,Ct,el){const cl=bt(this,Vt).createElementNS(f,Ct);cl.setAttribute("type","discrete"),cl.setAttribute("tableValues",el),pt.append(cl)},dl=new WeakSet,se=function(pt,Ct,el,cl){const Ml=bt(this,Vt).createElementNS(f,"feComponentTransfer");cl.append(Ml),nl(this,qt,me).call(this,Ml,"feFuncR",pt),nl(this,qt,me).call(this,Ml,"feFuncG",Ct),nl(this,qt,me).call(this,Ml,"feFuncB",el)},il=new WeakSet,ie=function(pt){return bt(this,lt,Bl).style.color=pt,dt(getComputedStyle(bt(this,lt,Bl)).getPropertyValue("color"))},r.DOMFilterFactory=O;class F extends M.BaseCanvasFactory{constructor({ownerDocument:wt=globalThis.document}={}){super(),this._document=wt}_createCanvas(wt,pt){const Ct=this._document.createElement("canvas");return Ct.width=wt,Ct.height=pt,Ct}}r.DOMCanvasFactory=F;function L(Ft,wt=!1){return Sl(this,null,function*(){if(K(Ft,document.baseURI)){const pt=yield fetch(Ft);if(!pt.ok)throw new Error(pt.statusText);return wt?new Uint8Array(yield pt.arrayBuffer()):(0,p.stringToBytes)(yield pt.text())}return new Promise((pt,Ct)=>{const el=new XMLHttpRequest;el.open("GET",Ft,!0),wt&&(el.responseType="arraybuffer"),el.onreadystatechange=()=>{if(el.readyState===XMLHttpRequest.DONE){if(el.status===200||el.status===0){let cl;if(wt&&el.response?cl=new Uint8Array(el.response):!wt&&el.responseText&&(cl=(0,p.stringToBytes)(el.responseText)),cl){pt(cl);return}}Ct(new Error(el.statusText))}},el.send(null)})})}class g extends M.BaseCMapReaderFactory{_fetchData(wt,pt){return L(wt,this.isCompressed).then(Ct=>({cMapData:Ct,compressionType:pt}))}}r.DOMCMapReaderFactory=g;class q extends M.BaseStandardFontDataFactory{_fetchData(wt){return L(wt,!0)}}r.DOMStandardFontDataFactory=q;class v extends M.BaseSVGFactory{_createSVG(wt){return document.createElementNS(f,wt)}}r.DOMSVGFactory=v;class Q{constructor({viewBox:wt,scale:pt,rotation:Ct,offsetX:el=0,offsetY:cl=0,dontFlip:Ml=!1}){this.viewBox=wt,this.scale=pt,this.rotation=Ct,this.offsetX=el,this.offsetY=cl;const Yl=(wt[2]+wt[0])/2,Xl=(wt[3]+wt[1])/2;let Tl,Vl,Ll,yl;switch(Ct%=360,Ct<0&&(Ct+=360),Ct){case 180:Tl=-1,Vl=0,Ll=0,yl=1;break;case 90:Tl=0,Vl=1,Ll=1,yl=0;break;case 270:Tl=0,Vl=-1,Ll=-1,yl=0;break;case 0:Tl=1,Vl=0,Ll=0,yl=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}Ml&&(Ll=-Ll,yl=-yl);let Qt,ot,ut,Tt;Tl===0?(Qt=Math.abs(Xl-wt[1])*pt+el,ot=Math.abs(Yl-wt[0])*pt+cl,ut=(wt[3]-wt[1])*pt,Tt=(wt[2]-wt[0])*pt):(Qt=Math.abs(Yl-wt[0])*pt+el,ot=Math.abs(Xl-wt[1])*pt+cl,ut=(wt[2]-wt[0])*pt,Tt=(wt[3]-wt[1])*pt),this.transform=[Tl*pt,Vl*pt,Ll*pt,yl*pt,Qt-Tl*pt*Yl-Ll*pt*Xl,ot-Vl*pt*Yl-yl*pt*Xl],this.width=ut,this.height=Tt}get rawDims(){const{viewBox:wt}=this;return(0,p.shadow)(this,"rawDims",{pageWidth:wt[2]-wt[0],pageHeight:wt[3]-wt[1],pageX:wt[0],pageY:wt[1]})}clone({scale:wt=this.scale,rotation:pt=this.rotation,offsetX:Ct=this.offsetX,offsetY:el=this.offsetY,dontFlip:cl=!1}={}){return new Q({viewBox:this.viewBox.slice(),scale:wt,rotation:pt,offsetX:Ct,offsetY:el,dontFlip:cl})}convertToViewportPoint(wt,pt){return p.Util.applyTransform([wt,pt],this.transform)}convertToViewportRectangle(wt){const pt=p.Util.applyTransform([wt[0],wt[1]],this.transform),Ct=p.Util.applyTransform([wt[2],wt[3]],this.transform);return[pt[0],pt[1],Ct[0],Ct[1]]}convertToPdfPoint(wt,pt){return p.Util.applyInverseTransform([wt,pt],this.transform)}}r.PageViewport=Q;class R extends p.BaseException{constructor(wt,pt=0){super(wt,"RenderingCancelledException"),this.extraDelay=pt}}r.RenderingCancelledException=R;function j(Ft){const wt=Ft.length;let pt=0;for(;pt<wt&&Ft[pt].trim()==="";)pt++;return Ft.substring(pt,pt+5).toLowerCase()==="data:"}function I(Ft){return typeof Ft=="string"&&/\.pdf$/i.test(Ft)}function k(Ft,wt=!1){return wt||([Ft]=Ft.split(/[#?]/,1)),Ft.substring(Ft.lastIndexOf("/")+1)}function C(Ft,wt="document.pdf"){if(typeof Ft!="string")return wt;if(j(Ft))return(0,p.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),wt;const pt=/^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/,Ct=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i,el=pt.exec(Ft);let cl=Ct.exec(el[1])||Ct.exec(el[2])||Ct.exec(el[3]);if(cl&&(cl=cl[0],cl.includes("%")))try{cl=Ct.exec(decodeURIComponent(cl))[0]}catch(Ml){}return cl||wt}class U{constructor(){Dl(this,"started",Object.create(null));Dl(this,"times",[])}time(wt){wt in this.started&&(0,p.warn)(`Timer is already running for ${wt}`),this.started[wt]=Date.now()}timeEnd(wt){wt in this.started||(0,p.warn)(`Timer has not been started for ${wt}`),this.times.push({name:wt,start:this.started[wt],end:Date.now()}),delete this.started[wt]}toString(){const wt=[];let pt=0;for(const{name:Ct}of this.times)pt=Math.max(Ct.length,pt);for(const{name:Ct,start:el,end:cl}of this.times)wt.push(`${Ct.padEnd(pt)} ${cl-el}ms
|
||
`);return wt.join("")}}r.StatTimer=U;function K(Ft,wt){try{const{protocol:pt}=wt?new URL(Ft,wt):new URL(Ft);return pt==="http:"||pt==="https:"}catch(pt){return!1}}function u(Ft){Ft.preventDefault()}function m(Ft,wt=!1){return new Promise((pt,Ct)=>{const el=document.createElement("script");el.src=Ft,el.onload=function(cl){wt&&el.remove(),pt(cl)},el.onerror=function(){Ct(new Error(`Cannot load script at: ${el.src}`))},(document.head||document.documentElement).append(el)})}function _(Ft){console.log("Deprecated API usage: "+Ft)}let $;class P{static toDateObject(wt){if(!wt||typeof wt!="string")return null;$||($=new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));const pt=$.exec(wt);if(!pt)return null;const Ct=parseInt(pt[1],10);let el=parseInt(pt[2],10);el=el>=1&&el<=12?el-1:0;let cl=parseInt(pt[3],10);cl=cl>=1&&cl<=31?cl:1;let Ml=parseInt(pt[4],10);Ml=Ml>=0&&Ml<=23?Ml:0;let Yl=parseInt(pt[5],10);Yl=Yl>=0&&Yl<=59?Yl:0;let Xl=parseInt(pt[6],10);Xl=Xl>=0&&Xl<=59?Xl:0;const Tl=pt[7]||"Z";let Vl=parseInt(pt[8],10);Vl=Vl>=0&&Vl<=23?Vl:0;let Ll=parseInt(pt[9],10)||0;return Ll=Ll>=0&&Ll<=59?Ll:0,Tl==="-"?(Ml+=Vl,Yl+=Ll):Tl==="+"&&(Ml-=Vl,Yl-=Ll),new Date(Date.UTC(Ct,el,cl,Ml,Yl,Xl))}}r.PDFDateString=P;function Zt(Ft,{scale:wt=1,rotation:pt=0}){const{width:Ct,height:el}=Ft.attributes.style,cl=[0,0,parseInt(Ct),parseInt(el)];return new Q({viewBox:cl,scale:wt,rotation:pt})}function dt(Ft){if(Ft.startsWith("#")){const wt=parseInt(Ft.slice(1),16);return[(wt&16711680)>>16,(wt&65280)>>8,wt&255]}return Ft.startsWith("rgb(")?Ft.slice(4,-1).split(",").map(wt=>parseInt(wt)):Ft.startsWith("rgba(")?Ft.slice(5,-1).split(",").map(wt=>parseInt(wt)).slice(0,3):((0,p.warn)(`Not a valid color format: "${Ft}"`),[0,0,0])}function It(Ft){const wt=document.createElement("span");wt.style.visibility="hidden",document.body.append(wt);for(const pt of Ft.keys()){wt.style.color=pt;const Ct=window.getComputedStyle(wt).color;Ft.set(pt,dt(Ct))}wt.remove()}function xt(Ft){const{a:wt,b:pt,c:Ct,d:el,e:cl,f:Ml}=Ft.getTransform();return[wt,pt,Ct,el,cl,Ml]}function it(Ft){const{a:wt,b:pt,c:Ct,d:el,e:cl,f:Ml}=Ft.getTransform().invertSelf();return[wt,pt,Ct,el,cl,Ml]}function Nt(Ft,wt,pt=!1,Ct=!0){if(wt instanceof Q){const{pageWidth:el,pageHeight:cl}=wt.rawDims,{style:Ml}=Ft,Yl=p.FeatureTest.isCSSRoundSupported,Xl=`var(--scale-factor) * ${el}px`,Tl=`var(--scale-factor) * ${cl}px`,Vl=Yl?`round(${Xl}, 1px)`:`calc(${Xl})`,Ll=Yl?`round(${Tl}, 1px)`:`calc(${Tl})`;!pt||wt.rotation%180===0?(Ml.width=Vl,Ml.height=Ll):(Ml.width=Ll,Ml.height=Vl)}Ct&&Ft.setAttribute("data-main-rotation",wt.rotation)}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.BaseStandardFontDataFactory=r.BaseSVGFactory=r.BaseFilterFactory=r.BaseCanvasFactory=r.BaseCMapReaderFactory=void 0;var M=h(1);class p{constructor(){this.constructor===p&&(0,M.unreachable)("Cannot initialize BaseFilterFactory.")}addFilter(g){return"none"}addHCMFilter(g,q){return"none"}addHighlightHCMFilter(g,q,v,Q){return"none"}destroy(g=!1){}}r.BaseFilterFactory=p;class f{constructor(){this.constructor===f&&(0,M.unreachable)("Cannot initialize BaseCanvasFactory.")}create(g,q){if(g<=0||q<=0)throw new Error("Invalid canvas size");const v=this._createCanvas(g,q);return{canvas:v,context:v.getContext("2d")}}reset(g,q,v){if(!g.canvas)throw new Error("Canvas is not specified");if(q<=0||v<=0)throw new Error("Invalid canvas size");g.canvas.width=q,g.canvas.height=v}destroy(g){if(!g.canvas)throw new Error("Canvas is not specified");g.canvas.width=0,g.canvas.height=0,g.canvas=null,g.context=null}_createCanvas(g,q){(0,M.unreachable)("Abstract method `_createCanvas` called.")}}r.BaseCanvasFactory=f;class B{constructor({baseUrl:g=null,isCompressed:q=!0}){this.constructor===B&&(0,M.unreachable)("Cannot initialize BaseCMapReaderFactory."),this.baseUrl=g,this.isCompressed=q}fetch(q){return Sl(this,arguments,function*({name:g}){if(!this.baseUrl)throw new Error('The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.');if(!g)throw new Error("CMap name must be specified.");const v=this.baseUrl+g+(this.isCompressed?".bcmap":""),Q=this.isCompressed?M.CMapCompressionType.BINARY:M.CMapCompressionType.NONE;return this._fetchData(v,Q).catch(R=>{throw new Error(`Unable to load ${this.isCompressed?"binary ":""}CMap at: ${v}`)})})}_fetchData(g,q){(0,M.unreachable)("Abstract method `_fetchData` called.")}}r.BaseCMapReaderFactory=B;class O{constructor({baseUrl:g=null}){this.constructor===O&&(0,M.unreachable)("Cannot initialize BaseStandardFontDataFactory."),this.baseUrl=g}fetch(q){return Sl(this,arguments,function*({filename:g}){if(!this.baseUrl)throw new Error('The standard font "baseUrl" parameter must be specified, ensure that the "standardFontDataUrl" API parameter is provided.');if(!g)throw new Error("Font filename must be specified.");const v=`${this.baseUrl}${g}`;return this._fetchData(v).catch(Q=>{throw new Error(`Unable to load font data at: ${v}`)})})}_fetchData(g){(0,M.unreachable)("Abstract method `_fetchData` called.")}}r.BaseStandardFontDataFactory=O;class F{constructor(){this.constructor===F&&(0,M.unreachable)("Cannot initialize BaseSVGFactory.")}create(g,q,v=!1){if(g<=0||q<=0)throw new Error("Invalid SVG dimensions");const Q=this._createSVG("svg:svg");return Q.setAttribute("version","1.1"),v||(Q.setAttribute("width",`${g}px`),Q.setAttribute("height",`${q}px`)),Q.setAttribute("preserveAspectRatio","none"),Q.setAttribute("viewBox",`0 0 ${g} ${q}`),Q}createElement(g){if(typeof g!="string")throw new Error("Invalid SVG element type");return this._createSVG(g)}_createSVG(g){(0,M.unreachable)("Abstract method `_createSVG` called.")}}r.BaseSVGFactory=F},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.MurmurHash3_64=void 0;var M=h(1);const p=3285377520,f=4294901760,B=65535;class O{constructor(L){this.h1=L?L&4294967295:p,this.h2=L?L&4294967295:p}update(L){let g,q;if(typeof L=="string"){g=new Uint8Array(L.length*2),q=0;for(let _=0,$=L.length;_<$;_++){const P=L.charCodeAt(_);P<=255?g[q++]=P:(g[q++]=P>>>8,g[q++]=P&255)}}else if((0,M.isArrayBuffer)(L))g=L.slice(),q=g.byteLength;else throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");const v=q>>2,Q=q-v*4,R=new Uint32Array(g.buffer,0,v);let j=0,I=0,k=this.h1,C=this.h2;const U=3432918353,K=461845907,u=U&B,m=K&B;for(let _=0;_<v;_++)_&1?(j=R[_],j=j*U&f|j*u&B,j=j<<15|j>>>17,j=j*K&f|j*m&B,k^=j,k=k<<13|k>>>19,k=k*5+3864292196):(I=R[_],I=I*U&f|I*u&B,I=I<<15|I>>>17,I=I*K&f|I*m&B,C^=I,C=C<<13|C>>>19,C=C*5+3864292196);switch(j=0,Q){case 3:j^=g[v*4+2]<<16;case 2:j^=g[v*4+1]<<8;case 1:j^=g[v*4],j=j*U&f|j*u&B,j=j<<15|j>>>17,j=j*K&f|j*m&B,v&1?k^=j:C^=j}this.h1=k,this.h2=C}hexdigest(){let L=this.h1,g=this.h2;return L^=g>>>1,L=L*3981806797&f|L*36045&B,g=g*4283543511&f|((g<<16|L>>>16)*2950163797&f)>>>16,L^=g>>>1,L=L*444984403&f|L*60499&B,g=g*3301882366&f|((g<<16|L>>>16)*3120437893&f)>>>16,L^=g>>>1,(L>>>0).toString(16).padStart(8,"0")+(g>>>0).toString(16).padStart(8,"0")}}r.MurmurHash3_64=O},(st,r,h)=>{var B;Object.defineProperty(r,"__esModule",{value:!0}),r.FontLoader=r.FontFaceObject=void 0;var M=h(1);class p{constructor({ownerDocument:F=globalThis.document,styleElement:L=null}){ll(this,B,new Set);this._document=F,this.nativeFontFaces=new Set,this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(F){this.nativeFontFaces.add(F),this._document.fonts.add(F)}removeNativeFontFace(F){this.nativeFontFaces.delete(F),this._document.fonts.delete(F)}insertRule(F){this.styleElement||(this.styleElement=this._document.createElement("style"),this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));const L=this.styleElement.sheet;L.insertRule(F,L.cssRules.length)}clear(){for(const F of this.nativeFontFaces)this._document.fonts.delete(F);this.nativeFontFaces.clear(),bt(this,B).clear(),this.styleElement&&(this.styleElement.remove(),this.styleElement=null)}loadSystemFont(F){return Sl(this,null,function*(){if(!(!F||bt(this,B).has(F.loadedName))){if((0,M.assert)(!this.disableFontFace,"loadSystemFont shouldn't be called when `disableFontFace` is set."),this.isFontLoadingAPISupported){const{loadedName:L,src:g,style:q}=F,v=new FontFace(L,g,q);this.addNativeFontFace(v);try{yield v.load(),bt(this,B).add(L)}catch(Q){(0,M.warn)(`Cannot load system font: ${F.baseFontName}, installing it could help to improve PDF rendering.`),this.removeNativeFontFace(v)}return}(0,M.unreachable)("Not implemented: loadSystemFont without the Font Loading API.")}})}bind(F){return Sl(this,null,function*(){if(F.attached||F.missingFile&&!F.systemFontInfo)return;if(F.attached=!0,F.systemFontInfo){yield this.loadSystemFont(F.systemFontInfo);return}if(this.isFontLoadingAPISupported){const g=F.createNativeFontFace();if(g){this.addNativeFontFace(g);try{yield g.loaded}catch(q){throw(0,M.warn)(`Failed to load font '${g.family}': '${q}'.`),F.disableFontFace=!0,q}}return}const L=F.createFontFaceRule();if(L){if(this.insertRule(L),this.isSyncFontLoadingSupported)return;yield new Promise(g=>{const q=this._queueLoadingCallback(g);this._prepareFontLoadEvent(F,q)})}})}get isFontLoadingAPISupported(){var L;const F=!!((L=this._document)!=null&&L.fonts);return(0,M.shadow)(this,"isFontLoadingAPISupported",F)}get isSyncFontLoadingSupported(){let F=!1;return(M.isNodeJS||typeof navigator!="undefined"&&/Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent))&&(F=!0),(0,M.shadow)(this,"isSyncFontLoadingSupported",F)}_queueLoadingCallback(F){function L(){for((0,M.assert)(!q.done,"completeRequest() cannot be called twice."),q.done=!0;g.length>0&&g[0].done;){const v=g.shift();setTimeout(v.callback,0)}}const{loadingRequests:g}=this,q={done:!1,complete:L,callback:F};return g.push(q),q}get _loadTestFont(){const F=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,M.shadow)(this,"_loadTestFont",F)}_prepareFontLoadEvent(F,L){function g(dt,It){return dt.charCodeAt(It)<<24|dt.charCodeAt(It+1)<<16|dt.charCodeAt(It+2)<<8|dt.charCodeAt(It+3)&255}function q(dt,It,xt,it){const Nt=dt.substring(0,It),zt=dt.substring(It+xt);return Nt+it+zt}let v,Q;const R=this._document.createElement("canvas");R.width=1,R.height=1;const j=R.getContext("2d");let I=0;function k(dt,It){if(++I>30){(0,M.warn)("Load test font never loaded."),It();return}if(j.font="30px "+dt,j.fillText(".",0,20),j.getImageData(0,0,1,1).data[3]>0){It();return}setTimeout(k.bind(null,dt,It))}const C=`lt${Date.now()}${this.loadTestFontId++}`;let U=this._loadTestFont;U=q(U,976,C.length,C);const u=16,m=1482184792;let _=g(U,u);for(v=0,Q=C.length-3;v<Q;v+=4)_=_-m+g(C,v)|0;v<C.length&&(_=_-m+g(C+"XXX",v)|0),U=q(U,u,4,(0,M.string32)(_));const $=`url(data:font/opentype;base64,${btoa(U)});`,P=`@font-face {font-family:"${C}";src:${$}}`;this.insertRule(P);const Zt=this._document.createElement("div");Zt.style.visibility="hidden",Zt.style.width=Zt.style.height="10px",Zt.style.position="absolute",Zt.style.top=Zt.style.left="0px";for(const dt of[F.loadedName,C]){const It=this._document.createElement("span");It.textContent="Hi",It.style.fontFamily=dt,Zt.append(It)}this._document.body.append(Zt),k(C,()=>{Zt.remove(),L.complete()})}}B=new WeakMap,r.FontLoader=p;class f{constructor(F,{isEvalSupported:L=!0,disableFontFace:g=!1,ignoreErrors:q=!1,inspectFont:v=null}){this.compiledGlyphs=Object.create(null);for(const Q in F)this[Q]=F[Q];this.isEvalSupported=L!==!1,this.disableFontFace=g===!0,this.ignoreErrors=q===!0,this._inspectFont=v}createNativeFontFace(){var L;if(!this.data||this.disableFontFace)return null;let F;if(!this.cssFontInfo)F=new FontFace(this.loadedName,this.data,{});else{const g={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(g.style=`oblique ${this.cssFontInfo.italicAngle}deg`),F=new FontFace(this.cssFontInfo.fontFamily,this.data,g)}return(L=this._inspectFont)==null||L.call(this,this),F}createFontFaceRule(){var q;if(!this.data||this.disableFontFace)return null;const F=(0,M.bytesToString)(this.data),L=`url(data:${this.mimetype};base64,${btoa(F)});`;let g;if(!this.cssFontInfo)g=`@font-face {font-family:"${this.loadedName}";src:${L}}`;else{let v=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(v+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),g=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${v}src:${L}}`}return(q=this._inspectFont)==null||q.call(this,this,L),g}getPathGenerator(F,L){if(this.compiledGlyphs[L]!==void 0)return this.compiledGlyphs[L];let g;try{g=F.get(this.loadedName+"_path_"+L)}catch(q){if(!this.ignoreErrors)throw q;return(0,M.warn)(`getPathGenerator - ignoring character: "${q}".`),this.compiledGlyphs[L]=function(v,Q){}}if(this.isEvalSupported&&M.FeatureTest.isEvalSupported){const q=[];for(const v of g){const Q=v.args!==void 0?v.args.join(","):"";q.push("c.",v.cmd,"(",Q,`);
|
||
`)}return this.compiledGlyphs[L]=new Function("c","size",q.join(""))}return this.compiledGlyphs[L]=function(q,v){for(const Q of g)Q.cmd==="scale"&&(Q.args=[v,-v]),q[Q.cmd].apply(q,Q.args)}}}r.FontFaceObject=f},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.NodeStandardFontDataFactory=r.NodeFilterFactory=r.NodeCanvasFactory=r.NodeCMapReaderFactory=void 0;var M=h(7);h(1);const p=function(L){return new Promise((g,q)=>{require$$5.readFile(L,(Q,R)=>{if(Q||!R){q(new Error(Q));return}g(new Uint8Array(R))})})};class f extends M.BaseFilterFactory{}r.NodeFilterFactory=f;class B extends M.BaseCanvasFactory{_createCanvas(g,q){return require$$5.createCanvas(g,q)}}r.NodeCanvasFactory=B;class O extends M.BaseCMapReaderFactory{_fetchData(g,q){return p(g).then(v=>({cMapData:v,compressionType:q}))}}r.NodeCMapReaderFactory=O;class F extends M.BaseStandardFontDataFactory{_fetchData(g){return p(g)}}r.NodeStandardFontDataFactory=F},(st,r,h)=>{var Xt,Oe,Vt,Ue;Object.defineProperty(r,"__esModule",{value:!0}),r.CanvasGraphics=void 0;var M=h(1),p=h(6),f=h(12),B=h(13);const O=16,F=100,L=4096,g=15,q=10,v=1e3,Q=16;function R(at,S){if(at._removeMirroring)throw new Error("Context is already forwarding operations.");at.__originalSave=at.save,at.__originalRestore=at.restore,at.__originalRotate=at.rotate,at.__originalScale=at.scale,at.__originalTranslate=at.translate,at.__originalTransform=at.transform,at.__originalSetTransform=at.setTransform,at.__originalResetTransform=at.resetTransform,at.__originalClip=at.clip,at.__originalMoveTo=at.moveTo,at.__originalLineTo=at.lineTo,at.__originalBezierCurveTo=at.bezierCurveTo,at.__originalRect=at.rect,at.__originalClosePath=at.closePath,at.__originalBeginPath=at.beginPath,at._removeMirroring=()=>{at.save=at.__originalSave,at.restore=at.__originalRestore,at.rotate=at.__originalRotate,at.scale=at.__originalScale,at.translate=at.__originalTranslate,at.transform=at.__originalTransform,at.setTransform=at.__originalSetTransform,at.resetTransform=at.__originalResetTransform,at.clip=at.__originalClip,at.moveTo=at.__originalMoveTo,at.lineTo=at.__originalLineTo,at.bezierCurveTo=at.__originalBezierCurveTo,at.rect=at.__originalRect,at.closePath=at.__originalClosePath,at.beginPath=at.__originalBeginPath,delete at._removeMirroring},at.save=function(){S.save(),this.__originalSave()},at.restore=function(){S.restore(),this.__originalRestore()},at.translate=function(X,J){S.translate(X,J),this.__originalTranslate(X,J)},at.scale=function(X,J){S.scale(X,J),this.__originalScale(X,J)},at.transform=function(X,J,H,et,lt,Mt){S.transform(X,J,H,et,lt,Mt),this.__originalTransform(X,J,H,et,lt,Mt)},at.setTransform=function(X,J,H,et,lt,Mt){S.setTransform(X,J,H,et,lt,Mt),this.__originalSetTransform(X,J,H,et,lt,Mt)},at.resetTransform=function(){S.resetTransform(),this.__originalResetTransform()},at.rotate=function(X){S.rotate(X),this.__originalRotate(X)},at.clip=function(X){S.clip(X),this.__originalClip(X)},at.moveTo=function(w,X){S.moveTo(w,X),this.__originalMoveTo(w,X)},at.lineTo=function(w,X){S.lineTo(w,X),this.__originalLineTo(w,X)},at.bezierCurveTo=function(w,X,J,H,et,lt){S.bezierCurveTo(w,X,J,H,et,lt),this.__originalBezierCurveTo(w,X,J,H,et,lt)},at.rect=function(w,X,J,H){S.rect(w,X,J,H),this.__originalRect(w,X,J,H)},at.closePath=function(){S.closePath(),this.__originalClosePath()},at.beginPath=function(){S.beginPath(),this.__originalBeginPath()}}class j{constructor(S){this.canvasFactory=S,this.cache=Object.create(null)}getCanvas(S,w,X){let J;return this.cache[S]!==void 0?(J=this.cache[S],this.canvasFactory.reset(J,w,X)):(J=this.canvasFactory.create(w,X),this.cache[S]=J),J}delete(S){delete this.cache[S]}clear(){for(const S in this.cache){const w=this.cache[S];this.canvasFactory.destroy(w),delete this.cache[S]}}}function I(at,S,w,X,J,H,et,lt,Mt,Rt){const[gt,Ot,Dt,qt,vt,dl]=(0,p.getCurrentTransform)(at);if(Ot===0&&Dt===0){const _t=et*gt+vt,Ft=Math.round(_t),wt=lt*qt+dl,pt=Math.round(wt),Ct=(et+Mt)*gt+vt,el=Math.abs(Math.round(Ct)-Ft)||1,cl=(lt+Rt)*qt+dl,Ml=Math.abs(Math.round(cl)-pt)||1;return at.setTransform(Math.sign(gt),0,0,Math.sign(qt),Ft,pt),at.drawImage(S,w,X,J,H,0,0,el,Ml),at.setTransform(gt,Ot,Dt,qt,vt,dl),[el,Ml]}if(gt===0&&qt===0){const _t=lt*Dt+vt,Ft=Math.round(_t),wt=et*Ot+dl,pt=Math.round(wt),Ct=(lt+Rt)*Dt+vt,el=Math.abs(Math.round(Ct)-Ft)||1,cl=(et+Mt)*Ot+dl,Ml=Math.abs(Math.round(cl)-pt)||1;return at.setTransform(0,Math.sign(Ot),Math.sign(Dt),0,Ft,pt),at.drawImage(S,w,X,J,H,0,0,Ml,el),at.setTransform(gt,Ot,Dt,qt,vt,dl),[Ml,el]}at.drawImage(S,w,X,J,H,et,lt,Mt,Rt);const ol=Math.hypot(gt,Ot),il=Math.hypot(Dt,qt);return[ol*Mt,il*Rt]}function k(at){const{width:S,height:w}=at;if(S>v||w>v)return null;const X=1e3,J=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),H=S+1;let et=new Uint8Array(H*(w+1)),lt,Mt,Rt;const gt=S+7&-8;let Ot=new Uint8Array(gt*w),Dt=0;for(const il of at.data){let _t=128;for(;_t>0;)Ot[Dt++]=il&_t?0:255,_t>>=1}let qt=0;for(Dt=0,Ot[Dt]!==0&&(et[0]=1,++qt),Mt=1;Mt<S;Mt++)Ot[Dt]!==Ot[Dt+1]&&(et[Mt]=Ot[Dt]?2:1,++qt),Dt++;for(Ot[Dt]!==0&&(et[Mt]=2,++qt),lt=1;lt<w;lt++){Dt=lt*gt,Rt=lt*H,Ot[Dt-gt]!==Ot[Dt]&&(et[Rt]=Ot[Dt]?1:8,++qt);let il=(Ot[Dt]?4:0)+(Ot[Dt-gt]?8:0);for(Mt=1;Mt<S;Mt++)il=(il>>2)+(Ot[Dt+1]?4:0)+(Ot[Dt-gt+1]?8:0),J[il]&&(et[Rt+Mt]=J[il],++qt),Dt++;if(Ot[Dt-gt]!==Ot[Dt]&&(et[Rt+Mt]=Ot[Dt]?2:4,++qt),qt>X)return null}for(Dt=gt*(w-1),Rt=lt*H,Ot[Dt]!==0&&(et[Rt]=8,++qt),Mt=1;Mt<S;Mt++)Ot[Dt]!==Ot[Dt+1]&&(et[Rt+Mt]=Ot[Dt]?4:8,++qt),Dt++;if(Ot[Dt]!==0&&(et[Rt+Mt]=4,++qt),qt>X)return null;const vt=new Int32Array([0,H,-1,0,-H,0,0,0,1]),dl=new Path2D;for(lt=0;qt&<<=w;lt++){let il=lt*H;const _t=il+S;for(;il<_t&&!et[il];)il++;if(il===_t)continue;dl.moveTo(il%H,lt);const Ft=il;let wt=et[il];do{const pt=vt[wt];do il+=pt;while(!et[il]);const Ct=et[il];Ct!==5&&Ct!==10?(wt=Ct,et[il]=0):(wt=Ct&51*wt>>4,et[il]&=wt>>2|wt<<2),dl.lineTo(il%H,il/H|0),et[il]||--qt}while(Ft!==il);--lt}return Ot=null,et=null,function(il){il.save(),il.scale(1/S,-1/w),il.translate(0,-w),il.fill(dl),il.beginPath(),il.restore()}}class C{constructor(S,w){this.alphaIsShape=!1,this.fontSize=0,this.fontSizeScale=1,this.textMatrix=M.IDENTITY_MATRIX,this.textMatrixScale=1,this.fontMatrix=M.FONT_IDENTITY_MATRIX,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRenderingMode=M.TextRenderingMode.FILL,this.textRise=0,this.fillColor="#000000",this.strokeColor="#000000",this.patternFill=!1,this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.activeSMask=null,this.transferMaps="none",this.startNewPathAndClipBox([0,0,S,w])}clone(){const S=Object.create(this);return S.clipBox=this.clipBox.slice(),S}setCurrentPoint(S,w){this.x=S,this.y=w}updatePathMinMax(S,w,X){[w,X]=M.Util.applyTransform([w,X],S),this.minX=Math.min(this.minX,w),this.minY=Math.min(this.minY,X),this.maxX=Math.max(this.maxX,w),this.maxY=Math.max(this.maxY,X)}updateRectMinMax(S,w){const X=M.Util.applyTransform(w,S),J=M.Util.applyTransform(w.slice(2),S);this.minX=Math.min(this.minX,X[0],J[0]),this.minY=Math.min(this.minY,X[1],J[1]),this.maxX=Math.max(this.maxX,X[0],J[0]),this.maxY=Math.max(this.maxY,X[1],J[1])}updateScalingPathMinMax(S,w){M.Util.scaleMinMax(S,w),this.minX=Math.min(this.minX,w[0]),this.maxX=Math.max(this.maxX,w[1]),this.minY=Math.min(this.minY,w[2]),this.maxY=Math.max(this.maxY,w[3])}updateCurvePathMinMax(S,w,X,J,H,et,lt,Mt,Rt,gt){const Ot=M.Util.bezierBoundingBox(w,X,J,H,et,lt,Mt,Rt);if(gt){gt[0]=Math.min(gt[0],Ot[0],Ot[2]),gt[1]=Math.max(gt[1],Ot[0],Ot[2]),gt[2]=Math.min(gt[2],Ot[1],Ot[3]),gt[3]=Math.max(gt[3],Ot[1],Ot[3]);return}this.updateRectMinMax(S,Ot)}getPathBoundingBox(S=f.PathType.FILL,w=null){const X=[this.minX,this.minY,this.maxX,this.maxY];if(S===f.PathType.STROKE){w||(0,M.unreachable)("Stroke bounding box must include transform.");const J=M.Util.singularValueDecompose2dScale(w),H=J[0]*this.lineWidth/2,et=J[1]*this.lineWidth/2;X[0]-=H,X[1]-=et,X[2]+=H,X[3]+=et}return X}updateClipFromPath(){const S=M.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(S||[0,0,0,0])}isEmptyClip(){return this.minX===1/0}startNewPathAndClipBox(S){this.clipBox=S,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}getClippedPathBoundingBox(S=f.PathType.FILL,w=null){return M.Util.intersect(this.clipBox,this.getPathBoundingBox(S,w))}}function U(at,S){if(typeof ImageData!="undefined"&&S instanceof ImageData){at.putImageData(S,0,0);return}const w=S.height,X=S.width,J=w%Q,H=(w-J)/Q,et=J===0?H:H+1,lt=at.createImageData(X,Q);let Mt=0,Rt;const gt=S.data,Ot=lt.data;let Dt,qt,vt,dl;if(S.kind===M.ImageKind.GRAYSCALE_1BPP){const ol=gt.byteLength,il=new Uint32Array(Ot.buffer,0,Ot.byteLength>>2),_t=il.length,Ft=X+7>>3,wt=4294967295,pt=M.FeatureTest.isLittleEndian?4278190080:255;for(Dt=0;Dt<et;Dt++){for(vt=Dt<H?Q:J,Rt=0,qt=0;qt<vt;qt++){const Ct=ol-Mt;let el=0;const cl=Ct>Ft?X:Ct*8-7,Ml=cl&-8;let Yl=0,Xl=0;for(;el<Ml;el+=8)Xl=gt[Mt++],il[Rt++]=Xl&128?wt:pt,il[Rt++]=Xl&64?wt:pt,il[Rt++]=Xl&32?wt:pt,il[Rt++]=Xl&16?wt:pt,il[Rt++]=Xl&8?wt:pt,il[Rt++]=Xl&4?wt:pt,il[Rt++]=Xl&2?wt:pt,il[Rt++]=Xl&1?wt:pt;for(;el<cl;el++)Yl===0&&(Xl=gt[Mt++],Yl=128),il[Rt++]=Xl&Yl?wt:pt,Yl>>=1}for(;Rt<_t;)il[Rt++]=0;at.putImageData(lt,0,Dt*Q)}}else if(S.kind===M.ImageKind.RGBA_32BPP){for(qt=0,dl=X*Q*4,Dt=0;Dt<H;Dt++)Ot.set(gt.subarray(Mt,Mt+dl)),Mt+=dl,at.putImageData(lt,0,qt),qt+=Q;Dt<et&&(dl=X*J*4,Ot.set(gt.subarray(Mt,Mt+dl)),at.putImageData(lt,0,qt))}else if(S.kind===M.ImageKind.RGB_24BPP)for(vt=Q,dl=X*vt,Dt=0;Dt<et;Dt++){for(Dt>=H&&(vt=J,dl=X*vt),Rt=0,qt=dl;qt--;)Ot[Rt++]=gt[Mt++],Ot[Rt++]=gt[Mt++],Ot[Rt++]=gt[Mt++],Ot[Rt++]=255;at.putImageData(lt,0,Dt*Q)}else throw new Error(`bad image kind: ${S.kind}`)}function K(at,S){if(S.bitmap){at.drawImage(S.bitmap,0,0);return}const w=S.height,X=S.width,J=w%Q,H=(w-J)/Q,et=J===0?H:H+1,lt=at.createImageData(X,Q);let Mt=0;const Rt=S.data,gt=lt.data;for(let Ot=0;Ot<et;Ot++){const Dt=Ot<H?Q:J;({srcPos:Mt}=(0,B.convertBlackAndWhiteToRGBA)({src:Rt,srcPos:Mt,dest:gt,width:X,height:Dt,nonBlackColor:0})),at.putImageData(lt,0,Ot*Q)}}function u(at,S){const w=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font","filter"];for(const X of w)at[X]!==void 0&&(S[X]=at[X]);at.setLineDash!==void 0&&(S.setLineDash(at.getLineDash()),S.lineDashOffset=at.lineDashOffset)}function m(at){if(at.strokeStyle=at.fillStyle="#000000",at.fillRule="nonzero",at.globalAlpha=1,at.lineWidth=1,at.lineCap="butt",at.lineJoin="miter",at.miterLimit=10,at.globalCompositeOperation="source-over",at.font="10px sans-serif",at.setLineDash!==void 0&&(at.setLineDash([]),at.lineDashOffset=0),!M.isNodeJS){const{filter:S}=at;S!=="none"&&S!==""&&(at.filter="none")}}function _(at,S,w,X){const J=at.length;for(let H=3;H<J;H+=4){const et=at[H];if(et===0)at[H-3]=S,at[H-2]=w,at[H-1]=X;else if(et<255){const lt=255-et;at[H-3]=at[H-3]*et+S*lt>>8,at[H-2]=at[H-2]*et+w*lt>>8,at[H-1]=at[H-1]*et+X*lt>>8}}}function $(at,S,w){const X=at.length,J=1/255;for(let H=3;H<X;H+=4){const et=w?w[at[H]]:at[H];S[H]=S[H]*et*J|0}}function P(at,S,w){const X=at.length;for(let J=3;J<X;J+=4){const H=at[J-3]*77+at[J-2]*152+at[J-1]*28;S[J]=w?S[J]*w[H>>8]>>8:S[J]*H>>16}}function Zt(at,S,w,X,J,H,et,lt,Mt,Rt,gt){const Ot=!!H,Dt=Ot?H[0]:0,qt=Ot?H[1]:0,vt=Ot?H[2]:0,dl=J==="Luminosity"?P:$,il=Math.min(X,Math.ceil(1048576/w));for(let _t=0;_t<X;_t+=il){const Ft=Math.min(il,X-_t),wt=at.getImageData(lt-Rt,_t+(Mt-gt),w,Ft),pt=S.getImageData(lt,_t+Mt,w,Ft);Ot&&_(wt.data,Dt,qt,vt),dl(wt.data,pt.data,et),S.putImageData(pt,lt,_t+Mt)}}function dt(at,S,w,X){const J=X[0],H=X[1],et=X[2]-J,lt=X[3]-H;et===0||lt===0||(Zt(S.context,w,et,lt,S.subtype,S.backdrop,S.transferMap,J,H,S.offsetX,S.offsetY),at.save(),at.globalAlpha=1,at.globalCompositeOperation="source-over",at.setTransform(1,0,0,1,0,0),at.drawImage(w.canvas,0,0),at.restore())}function It(at,S){const w=M.Util.singularValueDecompose2dScale(at);w[0]=Math.fround(w[0]),w[1]=Math.fround(w[1]);const X=Math.fround((globalThis.devicePixelRatio||1)*p.PixelsPerInch.PDF_TO_CSS_UNITS);return S!==void 0?S:w[0]<=X||w[1]<=X}const xt=["butt","round","square"],it=["miter","round","bevel"],Nt={},zt={},Pt=class Pt{constructor(S,w,X,J,H,{optionalContentConfig:et,markedContentStack:lt=null},Mt,Rt){ll(this,Xt);ll(this,Vt);this.ctx=S,this.current=new C(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=w,this.objs=X,this.canvasFactory=J,this.filterFactory=H,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,this.suspendedCtx=null,this.contentVisible=!0,this.markedContentStack=lt||[],this.optionalContentConfig=et,this.cachedCanvases=new j(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=Mt,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.pageColors=Rt,this._cachedScaleForStroking=[-1,0],this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}getObject(S,w=null){return typeof S=="string"?S.startsWith("g_")?this.commonObjs.get(S):this.objs.get(S):w}beginDrawing({transform:S,viewport:w,transparency:X=!1,background:J=null}){const H=this.ctx.canvas.width,et=this.ctx.canvas.height,lt=this.ctx.fillStyle;if(this.ctx.fillStyle=J||"#ffffff",this.ctx.fillRect(0,0,H,et),this.ctx.fillStyle=lt,X){const Mt=this.cachedCanvases.getCanvas("transparent",H,et);this.compositeCtx=this.ctx,this.transparentCanvas=Mt.canvas,this.ctx=Mt.context,this.ctx.save(),this.ctx.transform(...(0,p.getCurrentTransform)(this.compositeCtx))}this.ctx.save(),m(this.ctx),S&&(this.ctx.transform(...S),this.outputScaleX=S[0],this.outputScaleY=S[0]),this.ctx.transform(...w.transform),this.viewportScale=w.scale,this.baseTransform=(0,p.getCurrentTransform)(this.ctx)}executeOperatorList(S,w,X,J){const H=S.argsArray,et=S.fnArray;let lt=w||0;const Mt=H.length;if(Mt===lt)return lt;const Rt=Mt-lt>q&&typeof X=="function",gt=Rt?Date.now()+g:0;let Ot=0;const Dt=this.commonObjs,qt=this.objs;let vt;for(;;){if(J!==void 0&<===J.nextBreakPoint)return J.breakIt(lt,X),lt;if(vt=et[lt],vt!==M.OPS.dependency)this[vt].apply(this,H[lt]);else for(const dl of H[lt]){const ol=dl.startsWith("g_")?Dt:qt;if(!ol.has(dl))return ol.get(dl,X),lt}if(lt++,lt===Mt)return lt;if(Rt&&++Ot>q){if(Date.now()>gt)return X(),lt;Ot=0}}}endDrawing(){nl(this,Xt,Oe).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();for(const S of this._cachedBitmapsMap.values()){for(const w of S.values())typeof HTMLCanvasElement!="undefined"&&w instanceof HTMLCanvasElement&&(w.width=w.height=0);S.clear()}this._cachedBitmapsMap.clear(),nl(this,Vt,Ue).call(this)}_scaleImage(S,w){const X=S.width,J=S.height;let H=Math.max(Math.hypot(w[0],w[1]),1),et=Math.max(Math.hypot(w[2],w[3]),1),lt=X,Mt=J,Rt="prescale1",gt,Ot;for(;H>2&<>1||et>2&&Mt>1;){let Dt=lt,qt=Mt;H>2&<>1&&(Dt=lt>=16384?Math.floor(lt/2)-1||1:Math.ceil(lt/2),H/=lt/Dt),et>2&&Mt>1&&(qt=Mt>=16384?Math.floor(Mt/2)-1||1:Math.ceil(Mt)/2,et/=Mt/qt),gt=this.cachedCanvases.getCanvas(Rt,Dt,qt),Ot=gt.context,Ot.clearRect(0,0,Dt,qt),Ot.drawImage(S,0,0,lt,Mt,0,0,Dt,qt),S=gt.canvas,lt=Dt,Mt=qt,Rt=Rt==="prescale1"?"prescale2":"prescale1"}return{img:S,paintWidth:lt,paintHeight:Mt}}_createMaskCanvas(S){const w=this.ctx,{width:X,height:J}=S,H=this.current.fillColor,et=this.current.patternFill,lt=(0,p.getCurrentTransform)(w);let Mt,Rt,gt,Ot;if((S.bitmap||S.data)&&S.count>1){const el=S.bitmap||S.data.buffer;Rt=JSON.stringify(et?lt:[lt.slice(0,4),H]),Mt=this._cachedBitmapsMap.get(el),Mt||(Mt=new Map,this._cachedBitmapsMap.set(el,Mt));const cl=Mt.get(Rt);if(cl&&!et){const Ml=Math.round(Math.min(lt[0],lt[2])+lt[4]),Yl=Math.round(Math.min(lt[1],lt[3])+lt[5]);return{canvas:cl,offsetX:Ml,offsetY:Yl}}gt=cl}gt||(Ot=this.cachedCanvases.getCanvas("maskCanvas",X,J),K(Ot.context,S));let Dt=M.Util.transform(lt,[1/X,0,0,-1/J,0,0]);Dt=M.Util.transform(Dt,[1,0,0,1,0,-J]);const qt=M.Util.applyTransform([0,0],Dt),vt=M.Util.applyTransform([X,J],Dt),dl=M.Util.normalizeRect([qt[0],qt[1],vt[0],vt[1]]),ol=Math.round(dl[2]-dl[0])||1,il=Math.round(dl[3]-dl[1])||1,_t=this.cachedCanvases.getCanvas("fillCanvas",ol,il),Ft=_t.context,wt=Math.min(qt[0],vt[0]),pt=Math.min(qt[1],vt[1]);Ft.translate(-wt,-pt),Ft.transform(...Dt),gt||(gt=this._scaleImage(Ot.canvas,(0,p.getCurrentTransformInverse)(Ft)),gt=gt.img,Mt&&et&&Mt.set(Rt,gt)),Ft.imageSmoothingEnabled=It((0,p.getCurrentTransform)(Ft),S.interpolate),I(Ft,gt,0,0,gt.width,gt.height,0,0,X,J),Ft.globalCompositeOperation="source-in";const Ct=M.Util.transform((0,p.getCurrentTransformInverse)(Ft),[1,0,0,1,-wt,-pt]);return Ft.fillStyle=et?H.getPattern(w,this,Ct,f.PathType.FILL):H,Ft.fillRect(0,0,X,J),Mt&&!et&&(this.cachedCanvases.delete("fillCanvas"),Mt.set(Rt,_t.canvas)),{canvas:_t.canvas,offsetX:Math.round(wt),offsetY:Math.round(pt)}}setLineWidth(S){S!==this.current.lineWidth&&(this._cachedScaleForStroking[0]=-1),this.current.lineWidth=S,this.ctx.lineWidth=S}setLineCap(S){this.ctx.lineCap=xt[S]}setLineJoin(S){this.ctx.lineJoin=it[S]}setMiterLimit(S){this.ctx.miterLimit=S}setDash(S,w){const X=this.ctx;X.setLineDash!==void 0&&(X.setLineDash(S),X.lineDashOffset=w)}setRenderingIntent(S){}setFlatness(S){}setGState(S){for(const[w,X]of S)switch(w){case"LW":this.setLineWidth(X);break;case"LC":this.setLineCap(X);break;case"LJ":this.setLineJoin(X);break;case"ML":this.setMiterLimit(X);break;case"D":this.setDash(X[0],X[1]);break;case"RI":this.setRenderingIntent(X);break;case"FL":this.setFlatness(X);break;case"Font":this.setFont(X[0],X[1]);break;case"CA":this.current.strokeAlpha=X;break;case"ca":this.current.fillAlpha=X,this.ctx.globalAlpha=X;break;case"BM":this.ctx.globalCompositeOperation=X;break;case"SMask":this.current.activeSMask=X?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.ctx.filter=this.current.transferMaps=this.filterFactory.addFilter(X);break}}get inSMaskMode(){return!!this.suspendedCtx}checkSMaskState(){const S=this.inSMaskMode;this.current.activeSMask&&!S?this.beginSMaskMode():!this.current.activeSMask&&S&&this.endSMaskMode()}beginSMaskMode(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");const S=this.ctx.canvas.width,w=this.ctx.canvas.height,X="smaskGroupAt"+this.groupLevel,J=this.cachedCanvases.getCanvas(X,S,w);this.suspendedCtx=this.ctx,this.ctx=J.context;const H=this.ctx;H.setTransform(...(0,p.getCurrentTransform)(this.suspendedCtx)),u(this.suspendedCtx,H),R(H,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}endSMaskMode(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),u(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}compose(S){if(!this.current.activeSMask)return;S?(S[0]=Math.floor(S[0]),S[1]=Math.floor(S[1]),S[2]=Math.ceil(S[2]),S[3]=Math.ceil(S[3])):S=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];const w=this.current.activeSMask,X=this.suspendedCtx;dt(X,w,this.ctx,S),this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.restore()}save(){this.inSMaskMode?(u(this.ctx,this.suspendedCtx),this.suspendedCtx.save()):this.ctx.save();const S=this.current;this.stateStack.push(S),this.current=S.clone()}restore(){this.stateStack.length===0&&this.inSMaskMode&&this.endSMaskMode(),this.stateStack.length!==0&&(this.current=this.stateStack.pop(),this.inSMaskMode?(this.suspendedCtx.restore(),u(this.suspendedCtx,this.ctx)):this.ctx.restore(),this.checkSMaskState(),this.pendingClip=null,this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null)}transform(S,w,X,J,H,et){this.ctx.transform(S,w,X,J,H,et),this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null}constructPath(S,w,X){const J=this.ctx,H=this.current;let et=H.x,lt=H.y,Mt,Rt;const gt=(0,p.getCurrentTransform)(J),Ot=gt[0]===0&>[3]===0||gt[1]===0&>[2]===0,Dt=Ot?X.slice(0):null;for(let qt=0,vt=0,dl=S.length;qt<dl;qt++)switch(S[qt]|0){case M.OPS.rectangle:et=w[vt++],lt=w[vt++];const ol=w[vt++],il=w[vt++],_t=et+ol,Ft=lt+il;J.moveTo(et,lt),ol===0||il===0?J.lineTo(_t,Ft):(J.lineTo(_t,lt),J.lineTo(_t,Ft),J.lineTo(et,Ft)),Ot||H.updateRectMinMax(gt,[et,lt,_t,Ft]),J.closePath();break;case M.OPS.moveTo:et=w[vt++],lt=w[vt++],J.moveTo(et,lt),Ot||H.updatePathMinMax(gt,et,lt);break;case M.OPS.lineTo:et=w[vt++],lt=w[vt++],J.lineTo(et,lt),Ot||H.updatePathMinMax(gt,et,lt);break;case M.OPS.curveTo:Mt=et,Rt=lt,et=w[vt+4],lt=w[vt+5],J.bezierCurveTo(w[vt],w[vt+1],w[vt+2],w[vt+3],et,lt),H.updateCurvePathMinMax(gt,Mt,Rt,w[vt],w[vt+1],w[vt+2],w[vt+3],et,lt,Dt),vt+=6;break;case M.OPS.curveTo2:Mt=et,Rt=lt,J.bezierCurveTo(et,lt,w[vt],w[vt+1],w[vt+2],w[vt+3]),H.updateCurvePathMinMax(gt,Mt,Rt,et,lt,w[vt],w[vt+1],w[vt+2],w[vt+3],Dt),et=w[vt+2],lt=w[vt+3],vt+=4;break;case M.OPS.curveTo3:Mt=et,Rt=lt,et=w[vt+2],lt=w[vt+3],J.bezierCurveTo(w[vt],w[vt+1],et,lt,et,lt),H.updateCurvePathMinMax(gt,Mt,Rt,w[vt],w[vt+1],et,lt,et,lt,Dt),vt+=4;break;case M.OPS.closePath:J.closePath();break}Ot&&H.updateScalingPathMinMax(gt,Dt),H.setCurrentPoint(et,lt)}closePath(){this.ctx.closePath()}stroke(S=!0){const w=this.ctx,X=this.current.strokeColor;w.globalAlpha=this.current.strokeAlpha,this.contentVisible&&(typeof X=="object"&&(X!=null&&X.getPattern)?(w.save(),w.strokeStyle=X.getPattern(w,this,(0,p.getCurrentTransformInverse)(w),f.PathType.STROKE),this.rescaleAndStroke(!1),w.restore()):this.rescaleAndStroke(!0)),S&&this.consumePath(this.current.getClippedPathBoundingBox()),w.globalAlpha=this.current.fillAlpha}closeStroke(){this.closePath(),this.stroke()}fill(S=!0){const w=this.ctx,X=this.current.fillColor,J=this.current.patternFill;let H=!1;J&&(w.save(),w.fillStyle=X.getPattern(w,this,(0,p.getCurrentTransformInverse)(w),f.PathType.FILL),H=!0);const et=this.current.getClippedPathBoundingBox();this.contentVisible&&et!==null&&(this.pendingEOFill?(w.fill("evenodd"),this.pendingEOFill=!1):w.fill()),H&&w.restore(),S&&this.consumePath(et)}eoFill(){this.pendingEOFill=!0,this.fill()}fillStroke(){this.fill(!1),this.stroke(!1),this.consumePath()}eoFillStroke(){this.pendingEOFill=!0,this.fillStroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()}endPath(){this.consumePath()}clip(){this.pendingClip=Nt}eoClip(){this.pendingClip=zt}beginText(){this.current.textMatrix=M.IDENTITY_MATRIX,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}endText(){const S=this.pendingTextPaths,w=this.ctx;if(S===void 0){w.beginPath();return}w.save(),w.beginPath();for(const X of S)w.setTransform(...X.transform),w.translate(X.x,X.y),X.addToPath(w,X.fontSize);w.restore(),w.clip(),w.beginPath(),delete this.pendingTextPaths}setCharSpacing(S){this.current.charSpacing=S}setWordSpacing(S){this.current.wordSpacing=S}setHScale(S){this.current.textHScale=S/100}setLeading(S){this.current.leading=-S}setFont(S,w){var gt;const X=this.commonObjs.get(S),J=this.current;if(!X)throw new Error(`Can't find font for ${S}`);if(J.fontMatrix=X.fontMatrix||M.FONT_IDENTITY_MATRIX,(J.fontMatrix[0]===0||J.fontMatrix[3]===0)&&(0,M.warn)("Invalid font matrix for font "+S),w<0?(w=-w,J.fontDirection=-1):J.fontDirection=1,this.current.font=X,this.current.fontSize=w,X.isType3Font)return;const H=X.loadedName||"sans-serif",et=((gt=X.systemFontInfo)==null?void 0:gt.css)||`"${H}", ${X.fallbackName}`;let lt="normal";X.black?lt="900":X.bold&&(lt="bold");const Mt=X.italic?"italic":"normal";let Rt=w;w<O?Rt=O:w>F&&(Rt=F),this.current.fontSizeScale=w/Rt,this.ctx.font=`${Mt} ${lt} ${Rt}px ${et}`}setTextRenderingMode(S){this.current.textRenderingMode=S}setTextRise(S){this.current.textRise=S}moveText(S,w){this.current.x=this.current.lineX+=S,this.current.y=this.current.lineY+=w}setLeadingMoveText(S,w){this.setLeading(-w),this.moveText(S,w)}setTextMatrix(S,w,X,J,H,et){this.current.textMatrix=[S,w,X,J,H,et],this.current.textMatrixScale=Math.hypot(S,w),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}nextLine(){this.moveText(0,this.current.leading)}paintChar(S,w,X,J){const H=this.ctx,et=this.current,lt=et.font,Mt=et.textRenderingMode,Rt=et.fontSize/et.fontSizeScale,gt=Mt&M.TextRenderingMode.FILL_STROKE_MASK,Ot=!!(Mt&M.TextRenderingMode.ADD_TO_PATH_FLAG),Dt=et.patternFill&&!lt.missingFile;let qt;(lt.disableFontFace||Ot||Dt)&&(qt=lt.getPathGenerator(this.commonObjs,S)),lt.disableFontFace||Dt?(H.save(),H.translate(w,X),H.beginPath(),qt(H,Rt),J&&H.setTransform(...J),(gt===M.TextRenderingMode.FILL||gt===M.TextRenderingMode.FILL_STROKE)&&H.fill(),(gt===M.TextRenderingMode.STROKE||gt===M.TextRenderingMode.FILL_STROKE)&&H.stroke(),H.restore()):((gt===M.TextRenderingMode.FILL||gt===M.TextRenderingMode.FILL_STROKE)&&H.fillText(S,w,X),(gt===M.TextRenderingMode.STROKE||gt===M.TextRenderingMode.FILL_STROKE)&&H.strokeText(S,w,X)),Ot&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:(0,p.getCurrentTransform)(H),x:w,y:X,fontSize:Rt,addToPath:qt})}get isFontSubpixelAAEnabled(){const{context:S}=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10);S.scale(1.5,1),S.fillText("I",0,10);const w=S.getImageData(0,0,10,10).data;let X=!1;for(let J=3;J<w.length;J+=4)if(w[J]>0&&w[J]<255){X=!0;break}return(0,M.shadow)(this,"isFontSubpixelAAEnabled",X)}showText(S){const w=this.current,X=w.font;if(X.isType3Font)return this.showType3Text(S);const J=w.fontSize;if(J===0)return;const H=this.ctx,et=w.fontSizeScale,lt=w.charSpacing,Mt=w.wordSpacing,Rt=w.fontDirection,gt=w.textHScale*Rt,Ot=S.length,Dt=X.vertical,qt=Dt?1:-1,vt=X.defaultVMetrics,dl=J*w.fontMatrix[0],ol=w.textRenderingMode===M.TextRenderingMode.FILL&&!X.disableFontFace&&!w.patternFill;H.save(),H.transform(...w.textMatrix),H.translate(w.x,w.y+w.textRise),Rt>0?H.scale(gt,-1):H.scale(gt,1);let il;if(w.patternFill){H.save();const Ct=w.fillColor.getPattern(H,this,(0,p.getCurrentTransformInverse)(H),f.PathType.FILL);il=(0,p.getCurrentTransform)(H),H.restore(),H.fillStyle=Ct}let _t=w.lineWidth;const Ft=w.textMatrixScale;if(Ft===0||_t===0){const Ct=w.textRenderingMode&M.TextRenderingMode.FILL_STROKE_MASK;(Ct===M.TextRenderingMode.STROKE||Ct===M.TextRenderingMode.FILL_STROKE)&&(_t=this.getSinglePixelWidth())}else _t/=Ft;if(et!==1&&(H.scale(et,et),_t/=et),H.lineWidth=_t,X.isInvalidPDFjsFont){const Ct=[];let el=0;for(const cl of S)Ct.push(cl.unicode),el+=cl.width;H.fillText(Ct.join(""),0,0),w.x+=el*dl*gt,H.restore(),this.compose();return}let wt=0,pt;for(pt=0;pt<Ot;++pt){const Ct=S[pt];if(typeof Ct=="number"){wt+=qt*Ct*J/1e3;continue}let el=!1;const cl=(Ct.isSpace?Mt:0)+lt,Ml=Ct.fontChar,Yl=Ct.accent;let Xl,Tl,Vl=Ct.width;if(Dt){const yl=Ct.vmetric||vt,Qt=-(Ct.vmetric?yl[1]:Vl*.5)*dl,ot=yl[2]*dl;Vl=yl?-yl[0]:Vl,Xl=Qt/et,Tl=(wt+ot)/et}else Xl=wt/et,Tl=0;if(X.remeasure&&Vl>0){const yl=H.measureText(Ml).width*1e3/J*et;if(Vl<yl&&this.isFontSubpixelAAEnabled){const Qt=Vl/yl;el=!0,H.save(),H.scale(Qt,1),Xl/=Qt}else Vl!==yl&&(Xl+=(Vl-yl)/2e3*J/et)}if(this.contentVisible&&(Ct.isInFont||X.missingFile)){if(ol&&!Yl)H.fillText(Ml,Xl,Tl);else if(this.paintChar(Ml,Xl,Tl,il),Yl){const yl=Xl+J*Yl.offset.x/et,Qt=Tl-J*Yl.offset.y/et;this.paintChar(Yl.fontChar,yl,Qt,il)}}const Ll=Dt?Vl*dl-cl*Rt:Vl*dl+cl*Rt;wt+=Ll,el&&H.restore()}Dt?w.y-=wt:w.x+=wt*gt,H.restore(),this.compose()}showType3Text(S){const w=this.ctx,X=this.current,J=X.font,H=X.fontSize,et=X.fontDirection,lt=J.vertical?1:-1,Mt=X.charSpacing,Rt=X.wordSpacing,gt=X.textHScale*et,Ot=X.fontMatrix||M.FONT_IDENTITY_MATRIX,Dt=S.length,qt=X.textRenderingMode===M.TextRenderingMode.INVISIBLE;let vt,dl,ol,il;if(!(qt||H===0)){for(this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null,w.save(),w.transform(...X.textMatrix),w.translate(X.x,X.y),w.scale(gt,et),vt=0;vt<Dt;++vt){if(dl=S[vt],typeof dl=="number"){il=lt*dl*H/1e3,this.ctx.translate(il,0),X.x+=il*gt;continue}const _t=(dl.isSpace?Rt:0)+Mt,Ft=J.charProcOperatorList[dl.operatorListId];if(!Ft){(0,M.warn)(`Type3 character "${dl.operatorListId}" is not available.`);continue}this.contentVisible&&(this.processingType3=dl,this.save(),w.scale(H,H),w.transform(...Ot),this.executeOperatorList(Ft),this.restore()),ol=M.Util.applyTransform([dl.width,0],Ot)[0]*H+_t,w.translate(ol,0),X.x+=ol*gt}w.restore(),this.processingType3=null}}setCharWidth(S,w){}setCharWidthAndBounds(S,w,X,J,H,et){this.ctx.rect(X,J,H-X,et-J),this.ctx.clip(),this.endPath()}getColorN_Pattern(S){let w;if(S[0]==="TilingPattern"){const X=S[1],J=this.baseTransform||(0,p.getCurrentTransform)(this.ctx),H={createCanvasGraphics:et=>new Pt(et,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:this.optionalContentConfig,markedContentStack:this.markedContentStack})};w=new f.TilingPattern(S,X,this.ctx,H,J)}else w=this._getPattern(S[1],S[2]);return w}setStrokeColorN(){this.current.strokeColor=this.getColorN_Pattern(arguments)}setFillColorN(){this.current.fillColor=this.getColorN_Pattern(arguments),this.current.patternFill=!0}setStrokeRGBColor(S,w,X){const J=M.Util.makeHexColor(S,w,X);this.ctx.strokeStyle=J,this.current.strokeColor=J}setFillRGBColor(S,w,X){const J=M.Util.makeHexColor(S,w,X);this.ctx.fillStyle=J,this.current.fillColor=J,this.current.patternFill=!1}_getPattern(S,w=null){let X;return this.cachedPatterns.has(S)?X=this.cachedPatterns.get(S):(X=(0,f.getShadingPattern)(this.getObject(S)),this.cachedPatterns.set(S,X)),w&&(X.matrix=w),X}shadingFill(S){if(!this.contentVisible)return;const w=this.ctx;this.save();const X=this._getPattern(S);w.fillStyle=X.getPattern(w,this,(0,p.getCurrentTransformInverse)(w),f.PathType.SHADING);const J=(0,p.getCurrentTransformInverse)(w);if(J){const{width:H,height:et}=w.canvas,[lt,Mt,Rt,gt]=M.Util.getAxialAlignedBoundingBox([0,0,H,et],J);this.ctx.fillRect(lt,Mt,Rt-lt,gt-Mt)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}beginInlineImage(){(0,M.unreachable)("Should not call beginInlineImage")}beginImageData(){(0,M.unreachable)("Should not call beginImageData")}paintFormXObjectBegin(S,w){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(S)&&S.length===6&&this.transform(...S),this.baseTransform=(0,p.getCurrentTransform)(this.ctx),w)){const X=w[2]-w[0],J=w[3]-w[1];this.ctx.rect(w[0],w[1],X,J),this.current.updateRectMinMax((0,p.getCurrentTransform)(this.ctx),w),this.clip(),this.endPath()}}paintFormXObjectEnd(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}beginGroup(S){if(!this.contentVisible)return;this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);const w=this.ctx;S.isolated||(0,M.info)("TODO: Support non-isolated groups."),S.knockout&&(0,M.warn)("Knockout groups not supported.");const X=(0,p.getCurrentTransform)(w);if(S.matrix&&w.transform(...S.matrix),!S.bbox)throw new Error("Bounding box is required.");let J=M.Util.getAxialAlignedBoundingBox(S.bbox,(0,p.getCurrentTransform)(w));const H=[0,0,w.canvas.width,w.canvas.height];J=M.Util.intersect(J,H)||[0,0,0,0];const et=Math.floor(J[0]),lt=Math.floor(J[1]);let Mt=Math.max(Math.ceil(J[2])-et,1),Rt=Math.max(Math.ceil(J[3])-lt,1),gt=1,Ot=1;Mt>L&&(gt=Mt/L,Mt=L),Rt>L&&(Ot=Rt/L,Rt=L),this.current.startNewPathAndClipBox([0,0,Mt,Rt]);let Dt="groupAt"+this.groupLevel;S.smask&&(Dt+="_smask_"+this.smaskCounter++%2);const qt=this.cachedCanvases.getCanvas(Dt,Mt,Rt),vt=qt.context;vt.scale(1/gt,1/Ot),vt.translate(-et,-lt),vt.transform(...X),S.smask?this.smaskStack.push({canvas:qt.canvas,context:vt,offsetX:et,offsetY:lt,scaleX:gt,scaleY:Ot,subtype:S.smask.subtype,backdrop:S.smask.backdrop,transferMap:S.smask.transferMap||null,startTransformInverse:null}):(w.setTransform(1,0,0,1,0,0),w.translate(et,lt),w.scale(gt,Ot),w.save()),u(w,vt),this.ctx=vt,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(w),this.groupLevel++}endGroup(S){if(!this.contentVisible)return;this.groupLevel--;const w=this.ctx,X=this.groupStack.pop();if(this.ctx=X,this.ctx.imageSmoothingEnabled=!1,S.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{this.ctx.restore();const J=(0,p.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),this.ctx.setTransform(...J);const H=M.Util.getAxialAlignedBoundingBox([0,0,w.canvas.width,w.canvas.height],J);this.ctx.drawImage(w.canvas,0,0),this.ctx.restore(),this.compose(H)}}beginAnnotation(S,w,X,J,H){if(nl(this,Xt,Oe).call(this),m(this.ctx),this.ctx.save(),this.save(),this.baseTransform&&this.ctx.setTransform(...this.baseTransform),Array.isArray(w)&&w.length===4){const et=w[2]-w[0],lt=w[3]-w[1];if(H&&this.annotationCanvasMap){X=X.slice(),X[4]-=w[0],X[5]-=w[1],w=w.slice(),w[0]=w[1]=0,w[2]=et,w[3]=lt;const[Mt,Rt]=M.Util.singularValueDecompose2dScale((0,p.getCurrentTransform)(this.ctx)),{viewportScale:gt}=this,Ot=Math.ceil(et*this.outputScaleX*gt),Dt=Math.ceil(lt*this.outputScaleY*gt);this.annotationCanvas=this.canvasFactory.create(Ot,Dt);const{canvas:qt,context:vt}=this.annotationCanvas;this.annotationCanvasMap.set(S,qt),this.annotationCanvas.savedCtx=this.ctx,this.ctx=vt,this.ctx.save(),this.ctx.setTransform(Mt,0,0,-Rt,0,lt*Rt),m(this.ctx)}else m(this.ctx),this.ctx.rect(w[0],w[1],et,lt),this.ctx.clip(),this.endPath()}this.current=new C(this.ctx.canvas.width,this.ctx.canvas.height),this.transform(...X),this.transform(...J)}endAnnotation(){this.annotationCanvas&&(this.ctx.restore(),nl(this,Vt,Ue).call(this),this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}paintImageMaskXObject(S){if(!this.contentVisible)return;const w=S.count;S=this.getObject(S.data,S),S.count=w;const X=this.ctx,J=this.processingType3;if(J&&(J.compiled===void 0&&(J.compiled=k(S)),J.compiled)){J.compiled(X);return}const H=this._createMaskCanvas(S),et=H.canvas;X.save(),X.setTransform(1,0,0,1,0,0),X.drawImage(et,H.offsetX,H.offsetY),X.restore(),this.compose()}paintImageMaskXObjectRepeat(S,w,X=0,J=0,H,et){if(!this.contentVisible)return;S=this.getObject(S.data,S);const lt=this.ctx;lt.save();const Mt=(0,p.getCurrentTransform)(lt);lt.transform(w,X,J,H,0,0);const Rt=this._createMaskCanvas(S);lt.setTransform(1,0,0,1,Rt.offsetX-Mt[4],Rt.offsetY-Mt[5]);for(let gt=0,Ot=et.length;gt<Ot;gt+=2){const Dt=M.Util.transform(Mt,[w,X,J,H,et[gt],et[gt+1]]),[qt,vt]=M.Util.applyTransform([0,0],Dt);lt.drawImage(Rt.canvas,qt,vt)}lt.restore(),this.compose()}paintImageMaskXObjectGroup(S){if(!this.contentVisible)return;const w=this.ctx,X=this.current.fillColor,J=this.current.patternFill;for(const H of S){const{data:et,width:lt,height:Mt,transform:Rt}=H,gt=this.cachedCanvases.getCanvas("maskCanvas",lt,Mt),Ot=gt.context;Ot.save();const Dt=this.getObject(et,H);K(Ot,Dt),Ot.globalCompositeOperation="source-in",Ot.fillStyle=J?X.getPattern(Ot,this,(0,p.getCurrentTransformInverse)(w),f.PathType.FILL):X,Ot.fillRect(0,0,lt,Mt),Ot.restore(),w.save(),w.transform(...Rt),w.scale(1,-1),I(w,gt.canvas,0,0,lt,Mt,0,-1,1,1),w.restore()}this.compose()}paintImageXObject(S){if(!this.contentVisible)return;const w=this.getObject(S);if(!w){(0,M.warn)("Dependent image isn't ready yet");return}this.paintInlineImageXObject(w)}paintImageXObjectRepeat(S,w,X,J){if(!this.contentVisible)return;const H=this.getObject(S);if(!H){(0,M.warn)("Dependent image isn't ready yet");return}const et=H.width,lt=H.height,Mt=[];for(let Rt=0,gt=J.length;Rt<gt;Rt+=2)Mt.push({transform:[w,0,0,X,J[Rt],J[Rt+1]],x:0,y:0,w:et,h:lt});this.paintInlineImageXObjectGroup(H,Mt)}applyTransferMapsToCanvas(S){return this.current.transferMaps!=="none"&&(S.filter=this.current.transferMaps,S.drawImage(S.canvas,0,0),S.filter="none"),S.canvas}applyTransferMapsToBitmap(S){if(this.current.transferMaps==="none")return S.bitmap;const{bitmap:w,width:X,height:J}=S,H=this.cachedCanvases.getCanvas("inlineImage",X,J),et=H.context;return et.filter=this.current.transferMaps,et.drawImage(w,0,0),et.filter="none",H.canvas}paintInlineImageXObject(S){if(!this.contentVisible)return;const w=S.width,X=S.height,J=this.ctx;if(this.save(),!M.isNodeJS){const{filter:lt}=J;lt!=="none"&<!==""&&(J.filter="none")}J.scale(1/w,-1/X);let H;if(S.bitmap)H=this.applyTransferMapsToBitmap(S);else if(typeof HTMLElement=="function"&&S instanceof HTMLElement||!S.data)H=S;else{const Mt=this.cachedCanvases.getCanvas("inlineImage",w,X).context;U(Mt,S),H=this.applyTransferMapsToCanvas(Mt)}const et=this._scaleImage(H,(0,p.getCurrentTransformInverse)(J));J.imageSmoothingEnabled=It((0,p.getCurrentTransform)(J),S.interpolate),I(J,et.img,0,0,et.paintWidth,et.paintHeight,0,-X,w,X),this.compose(),this.restore()}paintInlineImageXObjectGroup(S,w){if(!this.contentVisible)return;const X=this.ctx;let J;if(S.bitmap)J=S.bitmap;else{const H=S.width,et=S.height,Mt=this.cachedCanvases.getCanvas("inlineImage",H,et).context;U(Mt,S),J=this.applyTransferMapsToCanvas(Mt)}for(const H of w)X.save(),X.transform(...H.transform),X.scale(1,-1),I(X,J,H.x,H.y,H.w,H.h,0,-1,1,1),X.restore();this.compose()}paintSolidColorImageMask(){this.contentVisible&&(this.ctx.fillRect(0,0,1,1),this.compose())}markPoint(S){}markPointProps(S,w){}beginMarkedContent(S){this.markedContentStack.push({visible:!0})}beginMarkedContentProps(S,w){S==="OC"?this.markedContentStack.push({visible:this.optionalContentConfig.isVisible(w)}):this.markedContentStack.push({visible:!0}),this.contentVisible=this.isContentVisible()}endMarkedContent(){this.markedContentStack.pop(),this.contentVisible=this.isContentVisible()}beginCompat(){}endCompat(){}consumePath(S){const w=this.current.isEmptyClip();this.pendingClip&&this.current.updateClipFromPath(),this.pendingClip||this.compose(S);const X=this.ctx;this.pendingClip&&(w||(this.pendingClip===zt?X.clip("evenodd"):X.clip()),this.pendingClip=null),this.current.startNewPathAndClipBox(this.current.clipBox),X.beginPath()}getSinglePixelWidth(){if(!this._cachedGetSinglePixelWidth){const S=(0,p.getCurrentTransform)(this.ctx);if(S[1]===0&&S[2]===0)this._cachedGetSinglePixelWidth=1/Math.min(Math.abs(S[0]),Math.abs(S[3]));else{const w=Math.abs(S[0]*S[3]-S[2]*S[1]),X=Math.hypot(S[0],S[2]),J=Math.hypot(S[1],S[3]);this._cachedGetSinglePixelWidth=Math.max(X,J)/w}}return this._cachedGetSinglePixelWidth}getScaleForStroking(){if(this._cachedScaleForStroking[0]===-1){const{lineWidth:S}=this.current,{a:w,b:X,c:J,d:H}=this.ctx.getTransform();let et,lt;if(X===0&&J===0){const Mt=Math.abs(w),Rt=Math.abs(H);if(Mt===Rt)if(S===0)et=lt=1/Mt;else{const gt=Mt*S;et=lt=gt<1?1/gt:1}else if(S===0)et=1/Mt,lt=1/Rt;else{const gt=Mt*S,Ot=Rt*S;et=gt<1?1/gt:1,lt=Ot<1?1/Ot:1}}else{const Mt=Math.abs(w*H-X*J),Rt=Math.hypot(w,X),gt=Math.hypot(J,H);if(S===0)et=gt/Mt,lt=Rt/Mt;else{const Ot=S*Mt;et=gt>Ot?gt/Ot:1,lt=Rt>Ot?Rt/Ot:1}}this._cachedScaleForStroking[0]=et,this._cachedScaleForStroking[1]=lt}return this._cachedScaleForStroking}rescaleAndStroke(S){const{ctx:w}=this,{lineWidth:X}=this.current,[J,H]=this.getScaleForStroking();if(w.lineWidth=X||1,J===1&&H===1){w.stroke();return}const et=w.getLineDash();if(S&&w.save(),w.scale(J,H),et.length>0){const lt=Math.max(J,H);w.setLineDash(et.map(Mt=>Mt/lt)),w.lineDashOffset/=lt}w.stroke(),S&&w.restore()}isContentVisible(){for(let S=this.markedContentStack.length-1;S>=0;S--)if(!this.markedContentStack[S].visible)return!1;return!0}};Xt=new WeakSet,Oe=function(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)},Vt=new WeakSet,Ue=function(){if(this.pageColors){const S=this.filterFactory.addHCMFilter(this.pageColors.foreground,this.pageColors.background);if(S!=="none"){const w=this.ctx.filter;this.ctx.filter=S,this.ctx.drawImage(this.ctx.canvas,0,0),this.ctx.filter=w}}};let Gt=Pt;r.CanvasGraphics=Gt;for(const at in M.OPS)Gt.prototype[at]!==void 0&&(Gt.prototype[M.OPS[at]]=Gt.prototype[at])},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.TilingPattern=r.PathType=void 0,r.getShadingPattern=Q;var M=h(1),p=h(6);const f={FILL:"Fill",STROKE:"Stroke",SHADING:"Shading"};r.PathType=f;function B(k,C){if(!C)return;const U=C[2]-C[0],K=C[3]-C[1],u=new Path2D;u.rect(C[0],C[1],U,K),k.clip(u)}class O{constructor(){this.constructor===O&&(0,M.unreachable)("Cannot initialize BaseShadingPattern.")}getPattern(){(0,M.unreachable)("Abstract method `getPattern` called.")}}class F extends O{constructor(C){super(),this._type=C[1],this._bbox=C[2],this._colorStops=C[3],this._p0=C[4],this._p1=C[5],this._r0=C[6],this._r1=C[7],this.matrix=null}_createGradient(C){let U;this._type==="axial"?U=C.createLinearGradient(this._p0[0],this._p0[1],this._p1[0],this._p1[1]):this._type==="radial"&&(U=C.createRadialGradient(this._p0[0],this._p0[1],this._r0,this._p1[0],this._p1[1],this._r1));for(const K of this._colorStops)U.addColorStop(K[0],K[1]);return U}getPattern(C,U,K,u){let m;if(u===f.STROKE||u===f.FILL){const _=U.current.getClippedPathBoundingBox(u,(0,p.getCurrentTransform)(C))||[0,0,0,0],$=Math.ceil(_[2]-_[0])||1,P=Math.ceil(_[3]-_[1])||1,Zt=U.cachedCanvases.getCanvas("pattern",$,P,!0),dt=Zt.context;dt.clearRect(0,0,dt.canvas.width,dt.canvas.height),dt.beginPath(),dt.rect(0,0,dt.canvas.width,dt.canvas.height),dt.translate(-_[0],-_[1]),K=M.Util.transform(K,[1,0,0,1,_[0],_[1]]),dt.transform(...U.baseTransform),this.matrix&&dt.transform(...this.matrix),B(dt,this._bbox),dt.fillStyle=this._createGradient(dt),dt.fill(),m=C.createPattern(Zt.canvas,"no-repeat");const It=new DOMMatrix(K);m.setTransform(It)}else B(C,this._bbox),m=this._createGradient(C);return m}}function L(k,C,U,K,u,m,_,$){const P=C.coords,Zt=C.colors,dt=k.data,It=k.width*4;let xt;P[U+1]>P[K+1]&&(xt=U,U=K,K=xt,xt=m,m=_,_=xt),P[K+1]>P[u+1]&&(xt=K,K=u,u=xt,xt=_,_=$,$=xt),P[U+1]>P[K+1]&&(xt=U,U=K,K=xt,xt=m,m=_,_=xt);const it=(P[U]+C.offsetX)*C.scaleX,Nt=(P[U+1]+C.offsetY)*C.scaleY,zt=(P[K]+C.offsetX)*C.scaleX,Gt=(P[K+1]+C.offsetY)*C.scaleY,Xt=(P[u]+C.offsetX)*C.scaleX,Ut=(P[u+1]+C.offsetY)*C.scaleY;if(Nt>=Ut)return;const Vt=Zt[m],Ht=Zt[m+1],Pt=Zt[m+2],at=Zt[_],S=Zt[_+1],w=Zt[_+2],X=Zt[$],J=Zt[$+1],H=Zt[$+2],et=Math.round(Nt),lt=Math.round(Ut);let Mt,Rt,gt,Ot,Dt,qt,vt,dl;for(let ol=et;ol<=lt;ol++){if(ol<Gt){const pt=ol<Nt?0:(Nt-ol)/(Nt-Gt);Mt=it-(it-zt)*pt,Rt=Vt-(Vt-at)*pt,gt=Ht-(Ht-S)*pt,Ot=Pt-(Pt-w)*pt}else{let pt;ol>Ut?pt=1:Gt===Ut?pt=0:pt=(Gt-ol)/(Gt-Ut),Mt=zt-(zt-Xt)*pt,Rt=at-(at-X)*pt,gt=S-(S-J)*pt,Ot=w-(w-H)*pt}let il;ol<Nt?il=0:ol>Ut?il=1:il=(Nt-ol)/(Nt-Ut),Dt=it-(it-Xt)*il,qt=Vt-(Vt-X)*il,vt=Ht-(Ht-J)*il,dl=Pt-(Pt-H)*il;const _t=Math.round(Math.min(Mt,Dt)),Ft=Math.round(Math.max(Mt,Dt));let wt=It*ol+_t*4;for(let pt=_t;pt<=Ft;pt++)il=(Mt-pt)/(Mt-Dt),il<0?il=0:il>1&&(il=1),dt[wt++]=Rt-(Rt-qt)*il|0,dt[wt++]=gt-(gt-vt)*il|0,dt[wt++]=Ot-(Ot-dl)*il|0,dt[wt++]=255}}function g(k,C,U){const K=C.coords,u=C.colors;let m,_;switch(C.type){case"lattice":const $=C.verticesPerRow,P=Math.floor(K.length/$)-1,Zt=$-1;for(m=0;m<P;m++){let dt=m*$;for(let It=0;It<Zt;It++,dt++)L(k,U,K[dt],K[dt+1],K[dt+$],u[dt],u[dt+1],u[dt+$]),L(k,U,K[dt+$+1],K[dt+1],K[dt+$],u[dt+$+1],u[dt+1],u[dt+$])}break;case"triangles":for(m=0,_=K.length;m<_;m+=3)L(k,U,K[m],K[m+1],K[m+2],u[m],u[m+1],u[m+2]);break;default:throw new Error("illegal figure")}}class q extends O{constructor(C){super(),this._coords=C[2],this._colors=C[3],this._figures=C[4],this._bounds=C[5],this._bbox=C[7],this._background=C[8],this.matrix=null}_createMeshCanvas(C,U,K){const $=Math.floor(this._bounds[0]),P=Math.floor(this._bounds[1]),Zt=Math.ceil(this._bounds[2])-$,dt=Math.ceil(this._bounds[3])-P,It=Math.min(Math.ceil(Math.abs(Zt*C[0]*1.1)),3e3),xt=Math.min(Math.ceil(Math.abs(dt*C[1]*1.1)),3e3),it=Zt/It,Nt=dt/xt,zt={coords:this._coords,colors:this._colors,offsetX:-$,offsetY:-P,scaleX:1/it,scaleY:1/Nt},Gt=It+2*2,Xt=xt+2*2,Ut=K.getCanvas("mesh",Gt,Xt,!1),Vt=Ut.context,Ht=Vt.createImageData(It,xt);if(U){const at=Ht.data;for(let S=0,w=at.length;S<w;S+=4)at[S]=U[0],at[S+1]=U[1],at[S+2]=U[2],at[S+3]=255}for(const at of this._figures)g(Ht,at,zt);return Vt.putImageData(Ht,2,2),{canvas:Ut.canvas,offsetX:$-2*it,offsetY:P-2*Nt,scaleX:it,scaleY:Nt}}getPattern(C,U,K,u){B(C,this._bbox);let m;if(u===f.SHADING)m=M.Util.singularValueDecompose2dScale((0,p.getCurrentTransform)(C));else if(m=M.Util.singularValueDecompose2dScale(U.baseTransform),this.matrix){const $=M.Util.singularValueDecompose2dScale(this.matrix);m=[m[0]*$[0],m[1]*$[1]]}const _=this._createMeshCanvas(m,u===f.SHADING?null:this._background,U.cachedCanvases);return u!==f.SHADING&&(C.setTransform(...U.baseTransform),this.matrix&&C.transform(...this.matrix)),C.translate(_.offsetX,_.offsetY),C.scale(_.scaleX,_.scaleY),C.createPattern(_.canvas,"no-repeat")}}class v extends O{getPattern(){return"hotpink"}}function Q(k){switch(k[0]){case"RadialAxial":return new F(k);case"Mesh":return new q(k);case"Dummy":return new v}throw new Error(`Unknown IR type: ${k[0]}`)}const R={COLORED:1,UNCOLORED:2},I=class I{constructor(C,U,K,u,m){this.operatorList=C[2],this.matrix=C[3]||[1,0,0,1,0,0],this.bbox=C[4],this.xstep=C[5],this.ystep=C[6],this.paintType=C[7],this.tilingType=C[8],this.color=U,this.ctx=K,this.canvasGraphicsFactory=u,this.baseTransform=m}createPatternCanvas(C){const U=this.operatorList,K=this.bbox,u=this.xstep,m=this.ystep,_=this.paintType,$=this.tilingType,P=this.color,Zt=this.canvasGraphicsFactory;(0,M.info)("TilingType: "+$);const dt=K[0],It=K[1],xt=K[2],it=K[3],Nt=M.Util.singularValueDecompose2dScale(this.matrix),zt=M.Util.singularValueDecompose2dScale(this.baseTransform),Gt=[Nt[0]*zt[0],Nt[1]*zt[1]],Xt=this.getSizeAndScale(u,this.ctx.canvas.width,Gt[0]),Ut=this.getSizeAndScale(m,this.ctx.canvas.height,Gt[1]),Vt=C.cachedCanvases.getCanvas("pattern",Xt.size,Ut.size,!0),Ht=Vt.context,Pt=Zt.createCanvasGraphics(Ht);Pt.groupLevel=C.groupLevel,this.setFillAndStrokeStyleToContext(Pt,_,P);let at=dt,S=It,w=xt,X=it;return dt<0&&(at=0,w+=Math.abs(dt)),It<0&&(S=0,X+=Math.abs(It)),Ht.translate(-(Xt.scale*at),-(Ut.scale*S)),Pt.transform(Xt.scale,0,0,Ut.scale,0,0),Ht.save(),this.clipBbox(Pt,at,S,w,X),Pt.baseTransform=(0,p.getCurrentTransform)(Pt.ctx),Pt.executeOperatorList(U),Pt.endDrawing(),{canvas:Vt.canvas,scaleX:Xt.scale,scaleY:Ut.scale,offsetX:at,offsetY:S}}getSizeAndScale(C,U,K){C=Math.abs(C);const u=Math.max(I.MAX_PATTERN_SIZE,U);let m=Math.ceil(C*K);return m>=u?m=u:K=m/C,{scale:K,size:m}}clipBbox(C,U,K,u,m){const _=u-U,$=m-K;C.ctx.rect(U,K,_,$),C.current.updateRectMinMax((0,p.getCurrentTransform)(C.ctx),[U,K,u,m]),C.clip(),C.endPath()}setFillAndStrokeStyleToContext(C,U,K){const u=C.ctx,m=C.current;switch(U){case R.COLORED:const _=this.ctx;u.fillStyle=_.fillStyle,u.strokeStyle=_.strokeStyle,m.fillColor=_.fillStyle,m.strokeColor=_.strokeStyle;break;case R.UNCOLORED:const $=M.Util.makeHexColor(K[0],K[1],K[2]);u.fillStyle=$,u.strokeStyle=$,m.fillColor=$,m.strokeColor=$;break;default:throw new M.FormatError(`Unsupported paint type: ${U}`)}}getPattern(C,U,K,u){let m=K;u!==f.SHADING&&(m=M.Util.transform(m,U.baseTransform),this.matrix&&(m=M.Util.transform(m,this.matrix)));const _=this.createPatternCanvas(U);let $=new DOMMatrix(m);$=$.translate(_.offsetX,_.offsetY),$=$.scale(1/_.scaleX,1/_.scaleY);const P=C.createPattern(_.canvas,"repeat");return P.setTransform($),P}};Dl(I,"MAX_PATTERN_SIZE",3e3);let j=I;r.TilingPattern=j},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.convertBlackAndWhiteToRGBA=f,r.convertToRGBA=p,r.grayToRGBA=O;var M=h(1);function p(F){switch(F.kind){case M.ImageKind.GRAYSCALE_1BPP:return f(F);case M.ImageKind.RGB_24BPP:return B(F)}return null}function f({src:F,srcPos:L=0,dest:g,width:q,height:v,nonBlackColor:Q=4294967295,inverseDecode:R=!1}){const j=M.FeatureTest.isLittleEndian?4278190080:255,[I,k]=R?[Q,j]:[j,Q],C=q>>3,U=q&7,K=F.length;g=new Uint32Array(g.buffer);let u=0;for(let m=0;m<v;m++){for(const $=L+C;L<$;L++){const P=L<K?F[L]:255;g[u++]=P&128?k:I,g[u++]=P&64?k:I,g[u++]=P&32?k:I,g[u++]=P&16?k:I,g[u++]=P&8?k:I,g[u++]=P&4?k:I,g[u++]=P&2?k:I,g[u++]=P&1?k:I}if(U===0)continue;const _=L<K?F[L++]:255;for(let $=0;$<U;$++)g[u++]=_&1<<7-$?k:I}return{srcPos:L,destPos:u}}function B({src:F,srcPos:L=0,dest:g,destPos:q=0,width:v,height:Q}){let R=0;const j=F.length>>2,I=new Uint32Array(F.buffer,L,j);if(M.FeatureTest.isLittleEndian){for(;R<j-2;R+=3,q+=4){const k=I[R],C=I[R+1],U=I[R+2];g[q]=k|4278190080,g[q+1]=k>>>24|C<<8|4278190080,g[q+2]=C>>>16|U<<16|4278190080,g[q+3]=U>>>8|4278190080}for(let k=R*4,C=F.length;k<C;k+=3)g[q++]=F[k]|F[k+1]<<8|F[k+2]<<16|4278190080}else{for(;R<j-2;R+=3,q+=4){const k=I[R],C=I[R+1],U=I[R+2];g[q]=k|255,g[q+1]=k<<24|C>>>8|255,g[q+2]=C<<16|U>>>16|255,g[q+3]=U<<8|255}for(let k=R*4,C=F.length;k<C;k+=3)g[q++]=F[k]<<24|F[k+1]<<16|F[k+2]<<8|255}return{srcPos:L,destPos:q}}function O(F,L){if(M.FeatureTest.isLittleEndian)for(let g=0,q=F.length;g<q;g++)L[g]=F[g]*65793|4278190080;else for(let g=0,q=F.length;g<q;g++)L[g]=F[g]*16843008|255}},(st,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.GlobalWorkerOptions=void 0;const h=Object.create(null);r.GlobalWorkerOptions=h,h.workerPort=null,h.workerSrc=""},(st,r,h)=>{var F,rs,g,Ns,v,ue;Object.defineProperty(r,"__esModule",{value:!0}),r.MessageHandler=void 0;var M=h(1);const p={UNKNOWN:0,DATA:1,ERROR:2},f={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function B(R){switch(R instanceof Error||typeof R=="object"&&R!==null||(0,M.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'),R.name){case"AbortException":return new M.AbortException(R.message);case"MissingPDFException":return new M.MissingPDFException(R.message);case"PasswordException":return new M.PasswordException(R.message,R.code);case"UnexpectedResponseException":return new M.UnexpectedResponseException(R.message,R.status);case"UnknownErrorException":return new M.UnknownErrorException(R.message,R.details);default:return new M.UnknownErrorException(R.message,R.toString())}}class O{constructor(j,I,k){ll(this,F);ll(this,g);ll(this,v);this.sourceName=j,this.targetName=I,this.comObj=k,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),this._onComObjOnMessage=C=>{const U=C.data;if(U.targetName!==this.sourceName)return;if(U.stream){nl(this,g,Ns).call(this,U);return}if(U.callback){const u=U.callbackId,m=this.callbackCapabilities[u];if(!m)throw new Error(`Cannot resolve callback ${u}`);if(delete this.callbackCapabilities[u],U.callback===p.DATA)m.resolve(U.data);else if(U.callback===p.ERROR)m.reject(B(U.reason));else throw new Error("Unexpected callback case");return}const K=this.actionHandler[U.action];if(!K)throw new Error(`Unknown action from worker: ${U.action}`);if(U.callbackId){const u=this.sourceName,m=U.sourceName;new Promise(function(_){_(K(U.data))}).then(function(_){k.postMessage({sourceName:u,targetName:m,callback:p.DATA,callbackId:U.callbackId,data:_})},function(_){k.postMessage({sourceName:u,targetName:m,callback:p.ERROR,callbackId:U.callbackId,reason:B(_)})});return}if(U.streamId){nl(this,F,rs).call(this,U);return}K(U.data)},k.addEventListener("message",this._onComObjOnMessage)}on(j,I){const k=this.actionHandler;if(k[j])throw new Error(`There is already an actionName called "${j}"`);k[j]=I}send(j,I,k){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:j,data:I},k)}sendWithPromise(j,I,k){const C=this.callbackId++,U=new M.PromiseCapability;this.callbackCapabilities[C]=U;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:j,callbackId:C,data:I},k)}catch(K){U.reject(K)}return U.promise}sendWithStream(j,I,k,C){const U=this.streamId++,K=this.sourceName,u=this.targetName,m=this.comObj;return new ReadableStream({start:_=>{const $=new M.PromiseCapability;return this.streamControllers[U]={controller:_,startCall:$,pullCall:null,cancelCall:null,isClosed:!1},m.postMessage({sourceName:K,targetName:u,action:j,streamId:U,data:I,desiredSize:_.desiredSize},C),$.promise},pull:_=>{const $=new M.PromiseCapability;return this.streamControllers[U].pullCall=$,m.postMessage({sourceName:K,targetName:u,stream:f.PULL,streamId:U,desiredSize:_.desiredSize}),$.promise},cancel:_=>{(0,M.assert)(_ instanceof Error,"cancel must have a valid reason");const $=new M.PromiseCapability;return this.streamControllers[U].cancelCall=$,this.streamControllers[U].isClosed=!0,m.postMessage({sourceName:K,targetName:u,stream:f.CANCEL,streamId:U,reason:B(_)}),$.promise}},k)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}F=new WeakSet,rs=function(j){const I=j.streamId,k=this.sourceName,C=j.sourceName,U=this.comObj,K=this,u=this.actionHandler[j.action],m={enqueue(_,$=1,P){if(this.isCancelled)return;const Zt=this.desiredSize;this.desiredSize-=$,Zt>0&&this.desiredSize<=0&&(this.sinkCapability=new M.PromiseCapability,this.ready=this.sinkCapability.promise),U.postMessage({sourceName:k,targetName:C,stream:f.ENQUEUE,streamId:I,chunk:_},P)},close(){this.isCancelled||(this.isCancelled=!0,U.postMessage({sourceName:k,targetName:C,stream:f.CLOSE,streamId:I}),delete K.streamSinks[I])},error(_){(0,M.assert)(_ instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,U.postMessage({sourceName:k,targetName:C,stream:f.ERROR,streamId:I,reason:B(_)}))},sinkCapability:new M.PromiseCapability,onPull:null,onCancel:null,isCancelled:!1,desiredSize:j.desiredSize,ready:null};m.sinkCapability.resolve(),m.ready=m.sinkCapability.promise,this.streamSinks[I]=m,new Promise(function(_){_(u(j.data,m))}).then(function(){U.postMessage({sourceName:k,targetName:C,stream:f.START_COMPLETE,streamId:I,success:!0})},function(_){U.postMessage({sourceName:k,targetName:C,stream:f.START_COMPLETE,streamId:I,reason:B(_)})})},g=new WeakSet,Ns=function(j){const I=j.streamId,k=this.sourceName,C=j.sourceName,U=this.comObj,K=this.streamControllers[I],u=this.streamSinks[I];switch(j.stream){case f.START_COMPLETE:j.success?K.startCall.resolve():K.startCall.reject(B(j.reason));break;case f.PULL_COMPLETE:j.success?K.pullCall.resolve():K.pullCall.reject(B(j.reason));break;case f.PULL:if(!u){U.postMessage({sourceName:k,targetName:C,stream:f.PULL_COMPLETE,streamId:I,success:!0});break}u.desiredSize<=0&&j.desiredSize>0&&u.sinkCapability.resolve(),u.desiredSize=j.desiredSize,new Promise(function(m){var _;m((_=u.onPull)==null?void 0:_.call(u))}).then(function(){U.postMessage({sourceName:k,targetName:C,stream:f.PULL_COMPLETE,streamId:I,success:!0})},function(m){U.postMessage({sourceName:k,targetName:C,stream:f.PULL_COMPLETE,streamId:I,reason:B(m)})});break;case f.ENQUEUE:if((0,M.assert)(K,"enqueue should have stream controller"),K.isClosed)break;K.controller.enqueue(j.chunk);break;case f.CLOSE:if((0,M.assert)(K,"close should have stream controller"),K.isClosed)break;K.isClosed=!0,K.controller.close(),nl(this,v,ue).call(this,K,I);break;case f.ERROR:(0,M.assert)(K,"error should have stream controller"),K.controller.error(B(j.reason)),nl(this,v,ue).call(this,K,I);break;case f.CANCEL_COMPLETE:j.success?K.cancelCall.resolve():K.cancelCall.reject(B(j.reason)),nl(this,v,ue).call(this,K,I);break;case f.CANCEL:if(!u)break;new Promise(function(m){var _;m((_=u.onCancel)==null?void 0:_.call(u,B(j.reason)))}).then(function(){U.postMessage({sourceName:k,targetName:C,stream:f.CANCEL_COMPLETE,streamId:I,success:!0})},function(m){U.postMessage({sourceName:k,targetName:C,stream:f.CANCEL_COMPLETE,streamId:I,reason:B(m)})}),u.sinkCapability.reject(B(j.reason)),u.isCancelled=!0,delete this.streamSinks[I];break;default:throw new Error("Unexpected stream case")}},v=new WeakSet,ue=function(j,I){return Sl(this,null,function*(){var k,C,U;yield Promise.allSettled([(k=j.startCall)==null?void 0:k.promise,(C=j.pullCall)==null?void 0:C.promise,(U=j.cancelCall)==null?void 0:U.promise]),delete this.streamControllers[I]})},r.MessageHandler=O},(st,r,h)=>{var f,B;Object.defineProperty(r,"__esModule",{value:!0}),r.Metadata=void 0;var M=h(1);class p{constructor({parsedData:F,rawData:L}){ll(this,f,void 0);ll(this,B,void 0);ul(this,f,F),ul(this,B,L)}getRaw(){return bt(this,B)}get(F){var L;return(L=bt(this,f).get(F))!=null?L:null}getAll(){return(0,M.objectFromMap)(bt(this,f))}has(F){return bt(this,f).has(F)}}f=new WeakMap,B=new WeakMap,r.Metadata=p},(st,r,h)=>{var F,L,g,q,v,Q,Ee;Object.defineProperty(r,"__esModule",{value:!0}),r.OptionalContentConfig=void 0;var M=h(1),p=h(8);const f=Symbol("INTERNAL");class B{constructor(I,k){ll(this,F,!0);this.name=I,this.intent=k}get visible(){return bt(this,F)}_setVisible(I,k){I!==f&&(0,M.unreachable)("Internal method `_setVisible` called."),ul(this,F,k)}}F=new WeakMap;class O{constructor(I){ll(this,Q);ll(this,L,null);ll(this,g,new Map);ll(this,q,null);ll(this,v,null);if(this.name=null,this.creator=null,I!==null){this.name=I.name,this.creator=I.creator,ul(this,v,I.order);for(const k of I.groups)bt(this,g).set(k.id,new B(k.name,k.intent));if(I.baseState==="OFF")for(const k of bt(this,g).values())k._setVisible(f,!1);for(const k of I.on)bt(this,g).get(k)._setVisible(f,!0);for(const k of I.off)bt(this,g).get(k)._setVisible(f,!1);ul(this,q,this.getHash())}}isVisible(I){if(bt(this,g).size===0)return!0;if(!I)return(0,M.warn)("Optional content group not defined."),!0;if(I.type==="OCG")return bt(this,g).has(I.id)?bt(this,g).get(I.id).visible:((0,M.warn)(`Optional content group not found: ${I.id}`),!0);if(I.type==="OCMD"){if(I.expression)return nl(this,Q,Ee).call(this,I.expression);if(!I.policy||I.policy==="AnyOn"){for(const k of I.ids){if(!bt(this,g).has(k))return(0,M.warn)(`Optional content group not found: ${k}`),!0;if(bt(this,g).get(k).visible)return!0}return!1}else if(I.policy==="AllOn"){for(const k of I.ids){if(!bt(this,g).has(k))return(0,M.warn)(`Optional content group not found: ${k}`),!0;if(!bt(this,g).get(k).visible)return!1}return!0}else if(I.policy==="AnyOff"){for(const k of I.ids){if(!bt(this,g).has(k))return(0,M.warn)(`Optional content group not found: ${k}`),!0;if(!bt(this,g).get(k).visible)return!0}return!1}else if(I.policy==="AllOff"){for(const k of I.ids){if(!bt(this,g).has(k))return(0,M.warn)(`Optional content group not found: ${k}`),!0;if(bt(this,g).get(k).visible)return!1}return!0}return(0,M.warn)(`Unknown optional content policy ${I.policy}.`),!0}return(0,M.warn)(`Unknown group type ${I.type}.`),!0}setVisibility(I,k=!0){if(!bt(this,g).has(I)){(0,M.warn)(`Optional content group not found: ${I}`);return}bt(this,g).get(I)._setVisible(f,!!k),ul(this,L,null)}get hasInitialVisibility(){return bt(this,q)===null||this.getHash()===bt(this,q)}getOrder(){return bt(this,g).size?bt(this,v)?bt(this,v).slice():[...bt(this,g).keys()]:null}getGroups(){return bt(this,g).size>0?(0,M.objectFromMap)(bt(this,g)):null}getGroup(I){return bt(this,g).get(I)||null}getHash(){if(bt(this,L)!==null)return bt(this,L);const I=new p.MurmurHash3_64;for(const[k,C]of bt(this,g))I.update(`${k}:${C.visible}`);return ul(this,L,I.hexdigest())}}L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakSet,Ee=function(I){const k=I.length;if(k<2)return!0;const C=I[0];for(let U=1;U<k;U++){const K=I[U];let u;if(Array.isArray(K))u=nl(this,Q,Ee).call(this,K);else if(bt(this,g).has(K))u=bt(this,g).get(K).visible;else return(0,M.warn)(`Optional content group not found: ${K}`),!0;switch(C){case"And":if(!u)return!1;break;case"Or":if(u)return!0;break;case"Not":return!u;default:return!0}}return C==="And"},r.OptionalContentConfig=O},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFDataTransportStream=void 0;var M=h(1),p=h(6);class f{constructor({length:L,initialData:g,progressiveDone:q=!1,contentDispositionFilename:v=null,disableRange:Q=!1,disableStream:R=!1},j){if((0,M.assert)(j,'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'),this._queuedChunks=[],this._progressiveDone=q,this._contentDispositionFilename=v,(g==null?void 0:g.length)>0){const I=g instanceof Uint8Array&&g.byteLength===g.buffer.byteLength?g.buffer:new Uint8Array(g).buffer;this._queuedChunks.push(I)}this._pdfDataRangeTransport=j,this._isStreamingSupported=!R,this._isRangeSupported=!Q,this._contentLength=L,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener((I,k)=>{this._onReceiveData({begin:I,chunk:k})}),this._pdfDataRangeTransport.addProgressListener((I,k)=>{this._onProgress({loaded:I,total:k})}),this._pdfDataRangeTransport.addProgressiveReadListener(I=>{this._onReceiveData({chunk:I})}),this._pdfDataRangeTransport.addProgressiveDoneListener(()=>{this._onProgressiveDone()}),this._pdfDataRangeTransport.transportReady()}_onReceiveData({begin:L,chunk:g}){const q=g instanceof Uint8Array&&g.byteLength===g.buffer.byteLength?g.buffer:new Uint8Array(g).buffer;if(L===void 0)this._fullRequestReader?this._fullRequestReader._enqueue(q):this._queuedChunks.push(q);else{const v=this._rangeReaders.some(function(Q){return Q._begin!==L?!1:(Q._enqueue(q),!0)});(0,M.assert)(v,"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.")}}get _progressiveDataLength(){var L,g;return(g=(L=this._fullRequestReader)==null?void 0:L._loaded)!=null?g:0}_onProgress(L){var g,q,v,Q;L.total===void 0?(q=(g=this._rangeReaders[0])==null?void 0:g.onProgress)==null||q.call(g,{loaded:L.loaded}):(Q=(v=this._fullRequestReader)==null?void 0:v.onProgress)==null||Q.call(v,{loaded:L.loaded,total:L.total})}_onProgressiveDone(){var L;(L=this._fullRequestReader)==null||L.progressiveDone(),this._progressiveDone=!0}_removeRangeReader(L){const g=this._rangeReaders.indexOf(L);g>=0&&this._rangeReaders.splice(g,1)}getFullReader(){(0,M.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");const L=this._queuedChunks;return this._queuedChunks=null,new B(this,L,this._progressiveDone,this._contentDispositionFilename)}getRangeReader(L,g){if(g<=this._progressiveDataLength)return null;const q=new O(this,L,g);return this._pdfDataRangeTransport.requestDataRange(L,g),this._rangeReaders.push(q),q}cancelAllRequests(L){var g;(g=this._fullRequestReader)==null||g.cancel(L);for(const q of this._rangeReaders.slice(0))q.cancel(L);this._pdfDataRangeTransport.abort()}}r.PDFDataTransportStream=f;class B{constructor(L,g,q=!1,v=null){this._stream=L,this._done=q||!1,this._filename=(0,p.isPdfFile)(v)?v:null,this._queuedChunks=g||[],this._loaded=0;for(const Q of this._queuedChunks)this._loaded+=Q.byteLength;this._requests=[],this._headersReady=Promise.resolve(),L._fullRequestReader=this,this.onProgress=null}_enqueue(L){this._done||(this._requests.length>0?this._requests.shift().resolve({value:L,done:!1}):this._queuedChunks.push(L),this._loaded+=L.byteLength)}get headersReady(){return this._headersReady}get filename(){return this._filename}get isRangeSupported(){return this._stream._isRangeSupported}get isStreamingSupported(){return this._stream._isStreamingSupported}get contentLength(){return this._stream._contentLength}read(){return Sl(this,null,function*(){if(this._queuedChunks.length>0)return{value:this._queuedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const L=new M.PromiseCapability;return this._requests.push(L),L.promise})}cancel(L){this._done=!0;for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0}progressiveDone(){this._done||(this._done=!0)}}class O{constructor(L,g,q){this._stream=L,this._begin=g,this._end=q,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}_enqueue(L){if(!this._done){if(this._requests.length===0)this._queuedChunk=L;else{this._requests.shift().resolve({value:L,done:!1});for(const q of this._requests)q.resolve({value:void 0,done:!0});this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}get isStreamingSupported(){return!1}read(){return Sl(this,null,function*(){if(this._queuedChunk){const g=this._queuedChunk;return this._queuedChunk=null,{value:g,done:!1}}if(this._done)return{value:void 0,done:!0};const L=new M.PromiseCapability;return this._requests.push(L),L.promise})}cancel(L){this._done=!0;for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0,this._stream._removeRangeReader(this)}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFFetchStream=void 0;var M=h(1),p=h(20);function f(q,v,Q){return{method:"GET",headers:q,signal:Q.signal,mode:"cors",credentials:v?"include":"same-origin",redirect:"follow"}}function B(q){const v=new Headers;for(const Q in q){const R=q[Q];R!==void 0&&v.append(Q,R)}return v}function O(q){return q instanceof Uint8Array?q.buffer:q instanceof ArrayBuffer?q:((0,M.warn)(`getArrayBuffer - unexpected data format: ${q}`),new Uint8Array(q).buffer)}class F{constructor(v){this.source=v,this.isHttp=/^https?:/i.test(v.url),this.httpHeaders=this.isHttp&&v.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var v,Q;return(Q=(v=this._fullRequestReader)==null?void 0:v._loaded)!=null?Q:0}getFullReader(){return(0,M.assert)(!this._fullRequestReader,"PDFFetchStream.getFullReader can only be called once."),this._fullRequestReader=new L(this),this._fullRequestReader}getRangeReader(v,Q){if(Q<=this._progressiveDataLength)return null;const R=new g(this,v,Q);return this._rangeRequestReaders.push(R),R}cancelAllRequests(v){var Q;(Q=this._fullRequestReader)==null||Q.cancel(v);for(const R of this._rangeRequestReaders.slice(0))R.cancel(v)}}r.PDFFetchStream=F;class L{constructor(v){this._stream=v,this._reader=null,this._loaded=0,this._filename=null;const Q=v.source;this._withCredentials=Q.withCredentials||!1,this._contentLength=Q.length,this._headersCapability=new M.PromiseCapability,this._disableRange=Q.disableRange||!1,this._rangeChunkSize=Q.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!Q.disableStream,this._isRangeSupported=!Q.disableRange,this._headers=B(this._stream.httpHeaders);const R=Q.url;fetch(R,f(this._headers,this._withCredentials,this._abortController)).then(j=>{if(!(0,p.validateResponseStatus)(j.status))throw(0,p.createResponseStatusError)(j.status,R);this._reader=j.body.getReader(),this._headersCapability.resolve();const I=U=>j.headers.get(U),{allowRangeRequests:k,suggestedLength:C}=(0,p.validateRangeRequestCapabilities)({getResponseHeader:I,isHttp:this._stream.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=k,this._contentLength=C||this._contentLength,this._filename=(0,p.extractFilenameFromHeader)(I),!this._isStreamingSupported&&this._isRangeSupported&&this.cancel(new M.AbortException("Streaming is disabled."))}).catch(this._headersCapability.reject),this.onProgress=null}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var R;yield this._headersCapability.promise;const{value:v,done:Q}=yield this._reader.read();return Q?{value:v,done:Q}:(this._loaded+=v.byteLength,(R=this.onProgress)==null||R.call(this,{loaded:this._loaded,total:this._contentLength}),{value:O(v),done:!1})})}cancel(v){var Q;(Q=this._reader)==null||Q.cancel(v),this._abortController.abort()}}class g{constructor(v,Q,R){this._stream=v,this._reader=null,this._loaded=0;const j=v.source;this._withCredentials=j.withCredentials||!1,this._readCapability=new M.PromiseCapability,this._isStreamingSupported=!j.disableStream,this._abortController=new AbortController,this._headers=B(this._stream.httpHeaders),this._headers.append("Range",`bytes=${Q}-${R-1}`);const I=j.url;fetch(I,f(this._headers,this._withCredentials,this._abortController)).then(k=>{if(!(0,p.validateResponseStatus)(k.status))throw(0,p.createResponseStatusError)(k.status,I);this._readCapability.resolve(),this._reader=k.body.getReader()}).catch(this._readCapability.reject),this.onProgress=null}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var R;yield this._readCapability.promise;const{value:v,done:Q}=yield this._reader.read();return Q?{value:v,done:Q}:(this._loaded+=v.byteLength,(R=this.onProgress)==null||R.call(this,{loaded:this._loaded}),{value:O(v),done:!1})})}cancel(v){var Q;(Q=this._reader)==null||Q.cancel(v),this._abortController.abort()}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.createResponseStatusError=F,r.extractFilenameFromHeader=O,r.validateRangeRequestCapabilities=B,r.validateResponseStatus=L;var M=h(1),p=h(21),f=h(6);function B({getResponseHeader:g,isHttp:q,rangeChunkSize:v,disableRange:Q}){const R={allowRangeRequests:!1,suggestedLength:void 0},j=parseInt(g("Content-Length"),10);return!Number.isInteger(j)||(R.suggestedLength=j,j<=2*v)||Q||!q||g("Accept-Ranges")!=="bytes"||(g("Content-Encoding")||"identity")!=="identity"||(R.allowRangeRequests=!0),R}function O(g){const q=g("Content-Disposition");if(q){let v=(0,p.getFilenameFromContentDispositionHeader)(q);if(v.includes("%"))try{v=decodeURIComponent(v)}catch(Q){}if((0,f.isPdfFile)(v))return v}return null}function F(g,q){return g===404||g===0&&q.startsWith("file:")?new M.MissingPDFException('Missing PDF "'+q+'".'):new M.UnexpectedResponseException(`Unexpected server response (${g}) while retrieving PDF "${q}".`,g)}function L(g){return g===200||g===206}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.getFilenameFromContentDispositionHeader=p;var M=h(1);function p(f){let B=!0,O=F("filename\\*","i").exec(f);if(O){O=O[1];let j=v(O);return j=unescape(j),j=Q(j),j=R(j),g(j)}if(O=q(f),O){const j=R(O);return g(j)}if(O=F("filename","i").exec(f),O){O=O[1];let j=v(O);return j=R(j),g(j)}function F(j,I){return new RegExp("(?:^|;)\\s*"+j+'\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)',I)}function L(j,I){if(j){if(!/^[\x00-\xFF]+$/.test(I))return I;try{const k=new TextDecoder(j,{fatal:!0}),C=(0,M.stringToBytes)(I);I=k.decode(C),B=!1}catch(k){}}return I}function g(j){return B&&/[\x80-\xff]/.test(j)&&(j=L("utf-8",j),B&&(j=L("iso-8859-1",j))),j}function q(j){const I=[];let k;const C=F("filename\\*((?!0\\d)\\d+)(\\*?)","ig");for(;(k=C.exec(j))!==null;){let[,K,u,m]=k;if(K=parseInt(K,10),K in I){if(K===0)break;continue}I[K]=[u,m]}const U=[];for(let K=0;K<I.length&&K in I;++K){let[u,m]=I[K];m=v(m),u&&(m=unescape(m),K===0&&(m=Q(m))),U.push(m)}return U.join("")}function v(j){if(j.startsWith('"')){const I=j.slice(1).split('\\"');for(let k=0;k<I.length;++k){const C=I[k].indexOf('"');C!==-1&&(I[k]=I[k].slice(0,C),I.length=k+1),I[k]=I[k].replaceAll(/\\(.)/g,"$1")}j=I.join('"')}return j}function Q(j){const I=j.indexOf("'");if(I===-1)return j;const k=j.slice(0,I),U=j.slice(I+1).replace(/^[^']*'/,"");return L(k,U)}function R(j){return!j.startsWith("=?")||/[\x00-\x19\x80-\xff]/.test(j)?j:j.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g,function(I,k,C,U){if(C==="q"||C==="Q")return U=U.replaceAll("_"," "),U=U.replaceAll(/=([0-9a-fA-F]{2})/g,function(K,u){return String.fromCharCode(parseInt(u,16))}),L(k,U);try{U=atob(U)}catch(K){}return L(k,U)})}return""}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFNetworkStream=void 0;var M=h(1),p=h(20);const f=200,B=206;function O(v){const Q=v.response;return typeof Q!="string"?Q:(0,M.stringToBytes)(Q).buffer}class F{constructor(Q,R={}){this.url=Q,this.isHttp=/^https?:/i.test(Q),this.httpHeaders=this.isHttp&&R.httpHeaders||Object.create(null),this.withCredentials=R.withCredentials||!1,this.currXhrId=0,this.pendingRequests=Object.create(null)}requestRange(Q,R,j){const I={begin:Q,end:R};for(const k in j)I[k]=j[k];return this.request(I)}requestFull(Q){return this.request(Q)}request(Q){const R=new XMLHttpRequest,j=this.currXhrId++,I=this.pendingRequests[j]={xhr:R};R.open("GET",this.url),R.withCredentials=this.withCredentials;for(const k in this.httpHeaders){const C=this.httpHeaders[k];C!==void 0&&R.setRequestHeader(k,C)}return this.isHttp&&"begin"in Q&&"end"in Q?(R.setRequestHeader("Range",`bytes=${Q.begin}-${Q.end-1}`),I.expectedStatus=B):I.expectedStatus=f,R.responseType="arraybuffer",Q.onError&&(R.onerror=function(k){Q.onError(R.status)}),R.onreadystatechange=this.onStateChange.bind(this,j),R.onprogress=this.onProgress.bind(this,j),I.onHeadersReceived=Q.onHeadersReceived,I.onDone=Q.onDone,I.onError=Q.onError,I.onProgress=Q.onProgress,R.send(null),j}onProgress(Q,R){var I;const j=this.pendingRequests[Q];j&&((I=j.onProgress)==null||I.call(j,R))}onStateChange(Q,R){var K,u,m;const j=this.pendingRequests[Q];if(!j)return;const I=j.xhr;if(I.readyState>=2&&j.onHeadersReceived&&(j.onHeadersReceived(),delete j.onHeadersReceived),I.readyState!==4||!(Q in this.pendingRequests))return;if(delete this.pendingRequests[Q],I.status===0&&this.isHttp){(K=j.onError)==null||K.call(j,I.status);return}const k=I.status||f;if(!(k===f&&j.expectedStatus===B)&&k!==j.expectedStatus){(u=j.onError)==null||u.call(j,I.status);return}const U=O(I);if(k===B){const _=I.getResponseHeader("Content-Range"),$=/bytes (\d+)-(\d+)\/(\d+)/.exec(_);j.onDone({begin:parseInt($[1],10),chunk:U})}else U?j.onDone({begin:0,chunk:U}):(m=j.onError)==null||m.call(j,I.status)}getRequestXhr(Q){return this.pendingRequests[Q].xhr}isPendingRequest(Q){return Q in this.pendingRequests}abortRequest(Q){const R=this.pendingRequests[Q].xhr;delete this.pendingRequests[Q],R.abort()}}class L{constructor(Q){this._source=Q,this._manager=new F(Q.url,{httpHeaders:Q.httpHeaders,withCredentials:Q.withCredentials}),this._rangeChunkSize=Q.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}_onRangeRequestReaderClosed(Q){const R=this._rangeRequestReaders.indexOf(Q);R>=0&&this._rangeRequestReaders.splice(R,1)}getFullReader(){return(0,M.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new g(this._manager,this._source),this._fullRequestReader}getRangeReader(Q,R){const j=new q(this._manager,Q,R);return j.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(j),j}cancelAllRequests(Q){var R;(R=this._fullRequestReader)==null||R.cancel(Q);for(const j of this._rangeRequestReaders.slice(0))j.cancel(Q)}}r.PDFNetworkStream=L;class g{constructor(Q,R){this._manager=Q;const j={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=R.url,this._fullRequestId=Q.requestFull(j),this._headersReceivedCapability=new M.PromiseCapability,this._disableRange=R.disableRange||!1,this._contentLength=R.length,this._rangeChunkSize=R.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}_onHeadersReceived(){const Q=this._fullRequestId,R=this._manager.getRequestXhr(Q),j=C=>R.getResponseHeader(C),{allowRangeRequests:I,suggestedLength:k}=(0,p.validateRangeRequestCapabilities)({getResponseHeader:j,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});I&&(this._isRangeSupported=!0),this._contentLength=k||this._contentLength,this._filename=(0,p.extractFilenameFromHeader)(j),this._isRangeSupported&&this._manager.abortRequest(Q),this._headersReceivedCapability.resolve()}_onDone(Q){if(Q&&(this._requests.length>0?this._requests.shift().resolve({value:Q.chunk,done:!1}):this._cachedChunks.push(Q.chunk)),this._done=!0,!(this._cachedChunks.length>0)){for(const R of this._requests)R.resolve({value:void 0,done:!0});this._requests.length=0}}_onError(Q){this._storedError=(0,p.createResponseStatusError)(Q,this._url),this._headersReceivedCapability.reject(this._storedError);for(const R of this._requests)R.reject(this._storedError);this._requests.length=0,this._cachedChunks.length=0}_onProgress(Q){var R;(R=this.onProgress)==null||R.call(this,{loaded:Q.loaded,total:Q.lengthComputable?Q.total:this._contentLength})}get filename(){return this._filename}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}get contentLength(){return this._contentLength}get headersReady(){return this._headersReceivedCapability.promise}read(){return Sl(this,null,function*(){if(this._storedError)throw this._storedError;if(this._cachedChunks.length>0)return{value:this._cachedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const Q=new M.PromiseCapability;return this._requests.push(Q),Q.promise})}cancel(Q){this._done=!0,this._headersReceivedCapability.reject(Q);for(const R of this._requests)R.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}class q{constructor(Q,R,j){this._manager=Q;const I={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=Q.url,this._requestId=Q.requestRange(R,j,I),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}_close(){var Q;(Q=this.onClosed)==null||Q.call(this,this)}_onDone(Q){const R=Q.chunk;this._requests.length>0?this._requests.shift().resolve({value:R,done:!1}):this._queuedChunk=R,this._done=!0;for(const j of this._requests)j.resolve({value:void 0,done:!0});this._requests.length=0,this._close()}_onError(Q){this._storedError=(0,p.createResponseStatusError)(Q,this._url);for(const R of this._requests)R.reject(this._storedError);this._requests.length=0,this._queuedChunk=null}_onProgress(Q){var R;this.isStreamingSupported||(R=this.onProgress)==null||R.call(this,{loaded:Q.loaded})}get isStreamingSupported(){return!1}read(){return Sl(this,null,function*(){if(this._storedError)throw this._storedError;if(this._queuedChunk!==null){const R=this._queuedChunk;return this._queuedChunk=null,{value:R,done:!1}}if(this._done)return{value:void 0,done:!0};const Q=new M.PromiseCapability;return this._requests.push(Q),Q.promise})}cancel(Q){this._done=!0;for(const R of this._requests)R.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFNodeStream=void 0;var M=h(1),p=h(20);const f=/^file:\/\/\/[a-zA-Z]:\//;function B(j){const I=require$$5,k=I.parse(j);return k.protocol==="file:"||k.host?k:/^[a-z]:[/\\]/i.test(j)?I.parse(`file:///${j}`):(k.host||(k.protocol="file:"),k)}class O{constructor(I){this.source=I,this.url=B(I.url),this.isHttp=this.url.protocol==="http:"||this.url.protocol==="https:",this.isFsUrl=this.url.protocol==="file:",this.httpHeaders=this.isHttp&&I.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var I,k;return(k=(I=this._fullRequestReader)==null?void 0:I._loaded)!=null?k:0}getFullReader(){return(0,M.assert)(!this._fullRequestReader,"PDFNodeStream.getFullReader can only be called once."),this._fullRequestReader=this.isFsUrl?new Q(this):new q(this),this._fullRequestReader}getRangeReader(I,k){if(k<=this._progressiveDataLength)return null;const C=this.isFsUrl?new R(this,I,k):new v(this,I,k);return this._rangeRequestReaders.push(C),C}cancelAllRequests(I){var k;(k=this._fullRequestReader)==null||k.cancel(I);for(const C of this._rangeRequestReaders.slice(0))C.cancel(I)}}r.PDFNodeStream=O;class F{constructor(I){this._url=I.url,this._done=!1,this._storedError=null,this.onProgress=null;const k=I.source;this._contentLength=k.length,this._loaded=0,this._filename=null,this._disableRange=k.disableRange||!1,this._rangeChunkSize=k.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!k.disableStream,this._isRangeSupported=!k.disableRange,this._readableStream=null,this._readCapability=new M.PromiseCapability,this._headersCapability=new M.PromiseCapability}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var C;if(yield this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const I=this._readableStream.read();return I===null?(this._readCapability=new M.PromiseCapability,this.read()):(this._loaded+=I.length,(C=this.onProgress)==null||C.call(this,{loaded:this._loaded,total:this._contentLength}),{value:new Uint8Array(I).buffer,done:!1})})}cancel(I){if(!this._readableStream){this._error(I);return}this._readableStream.destroy(I)}_error(I){this._storedError=I,this._readCapability.resolve()}_setReadableStream(I){this._readableStream=I,I.on("readable",()=>{this._readCapability.resolve()}),I.on("end",()=>{I.destroy(),this._done=!0,this._readCapability.resolve()}),I.on("error",k=>{this._error(k)}),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new M.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}class L{constructor(I){this._url=I.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=new M.PromiseCapability;const k=I.source;this._isStreamingSupported=!k.disableStream}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var C;if(yield this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const I=this._readableStream.read();return I===null?(this._readCapability=new M.PromiseCapability,this.read()):(this._loaded+=I.length,(C=this.onProgress)==null||C.call(this,{loaded:this._loaded}),{value:new Uint8Array(I).buffer,done:!1})})}cancel(I){if(!this._readableStream){this._error(I);return}this._readableStream.destroy(I)}_error(I){this._storedError=I,this._readCapability.resolve()}_setReadableStream(I){this._readableStream=I,I.on("readable",()=>{this._readCapability.resolve()}),I.on("end",()=>{I.destroy(),this._done=!0,this._readCapability.resolve()}),I.on("error",k=>{this._error(k)}),this._storedError&&this._readableStream.destroy(this._storedError)}}function g(j,I){return{protocol:j.protocol,auth:j.auth,host:j.hostname,port:j.port,path:j.path,method:"GET",headers:I}}class q extends F{constructor(I){super(I);const k=C=>{if(C.statusCode===404){const m=new M.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=m,this._headersCapability.reject(m);return}this._headersCapability.resolve(),this._setReadableStream(C);const U=m=>this._readableStream.headers[m.toLowerCase()],{allowRangeRequests:K,suggestedLength:u}=(0,p.validateRangeRequestCapabilities)({getResponseHeader:U,isHttp:I.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=K,this._contentLength=u||this._contentLength,this._filename=(0,p.extractFilenameFromHeader)(U)};if(this._request=null,this._url.protocol==="http:"){const C=require$$5;this._request=C.request(g(this._url,I.httpHeaders),k)}else{const C=require$$5;this._request=C.request(g(this._url,I.httpHeaders),k)}this._request.on("error",C=>{this._storedError=C,this._headersCapability.reject(C)}),this._request.end()}}class v extends L{constructor(I,k,C){super(I),this._httpHeaders={};for(const K in I.httpHeaders){const u=I.httpHeaders[K];u!==void 0&&(this._httpHeaders[K]=u)}this._httpHeaders.Range=`bytes=${k}-${C-1}`;const U=K=>{if(K.statusCode===404){const u=new M.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=u;return}this._setReadableStream(K)};if(this._request=null,this._url.protocol==="http:"){const K=require$$5;this._request=K.request(g(this._url,this._httpHeaders),U)}else{const K=require$$5;this._request=K.request(g(this._url,this._httpHeaders),U)}this._request.on("error",K=>{this._storedError=K}),this._request.end()}}class Q extends F{constructor(I){super(I);let k=decodeURIComponent(this._url.path);f.test(this._url.href)&&(k=k.replace(/^\//,""));const C=require$$5;C.lstat(k,(U,K)=>{if(U){U.code==="ENOENT"&&(U=new M.MissingPDFException(`Missing PDF "${k}".`)),this._storedError=U,this._headersCapability.reject(U);return}this._contentLength=K.size,this._setReadableStream(C.createReadStream(k)),this._headersCapability.resolve()})}}class R extends L{constructor(I,k,C){super(I);let U=decodeURIComponent(this._url.path);f.test(this._url.href)&&(U=U.replace(/^\//,""));const K=require$$5;this._setReadableStream(K.createReadStream(U,{start:k,end:C-1}))}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.SVGGraphics=void 0;var M=h(6),p=h(1);const f={fontStyle:"normal",fontWeight:"normal",fillColor:"#000000"},B="http://www.w3.org/XML/1998/namespace",O="http://www.w3.org/1999/xlink",F=["butt","round","square"],L=["miter","round","bevel"],g=function(K,u="",m=!1){if(URL.createObjectURL&&typeof Blob!="undefined"&&!m)return URL.createObjectURL(new Blob([K],{type:u}));const _="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";let $=`data:${u};base64,`;for(let P=0,Zt=K.length;P<Zt;P+=3){const dt=K[P]&255,It=K[P+1]&255,xt=K[P+2]&255,it=dt>>2,Nt=(dt&3)<<4|It>>4,zt=P+1<Zt?(It&15)<<2|xt>>6:64,Gt=P+2<Zt?xt&63:64;$+=_[it]+_[Nt]+_[zt]+_[Gt]}return $},q=function(){const K=new Uint8Array([137,80,78,71,13,10,26,10]),u=12,m=new Int32Array(256);for(let xt=0;xt<256;xt++){let it=xt;for(let Nt=0;Nt<8;Nt++)it=it&1?3988292384^it>>1&2147483647:it>>1&2147483647;m[xt]=it}function _(xt,it,Nt){let zt=-1;for(let Gt=it;Gt<Nt;Gt++){const Xt=(zt^xt[Gt])&255,Ut=m[Xt];zt=zt>>>8^Ut}return zt^-1}function $(xt,it,Nt,zt){let Gt=zt;const Xt=it.length;Nt[Gt]=Xt>>24&255,Nt[Gt+1]=Xt>>16&255,Nt[Gt+2]=Xt>>8&255,Nt[Gt+3]=Xt&255,Gt+=4,Nt[Gt]=xt.charCodeAt(0)&255,Nt[Gt+1]=xt.charCodeAt(1)&255,Nt[Gt+2]=xt.charCodeAt(2)&255,Nt[Gt+3]=xt.charCodeAt(3)&255,Gt+=4,Nt.set(it,Gt),Gt+=it.length;const Ut=_(Nt,zt+4,Gt);Nt[Gt]=Ut>>24&255,Nt[Gt+1]=Ut>>16&255,Nt[Gt+2]=Ut>>8&255,Nt[Gt+3]=Ut&255}function P(xt,it,Nt){let zt=1,Gt=0;for(let Xt=it;Xt<Nt;++Xt)zt=(zt+(xt[Xt]&255))%65521,Gt=(Gt+zt)%65521;return Gt<<16|zt}function Zt(xt){if(!p.isNodeJS)return dt(xt);try{const it=parseInt(process.versions.node)>=8?xt:Buffer.from(xt),Nt=require$$5.deflateSync(it,{level:9});return Nt instanceof Uint8Array?Nt:new Uint8Array(Nt)}catch(it){(0,p.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+it)}return dt(xt)}function dt(xt){let it=xt.length;const Nt=65535,zt=Math.ceil(it/Nt),Gt=new Uint8Array(2+it+zt*5+4);let Xt=0;Gt[Xt++]=120,Gt[Xt++]=156;let Ut=0;for(;it>Nt;)Gt[Xt++]=0,Gt[Xt++]=255,Gt[Xt++]=255,Gt[Xt++]=0,Gt[Xt++]=0,Gt.set(xt.subarray(Ut,Ut+Nt),Xt),Xt+=Nt,Ut+=Nt,it-=Nt;Gt[Xt++]=1,Gt[Xt++]=it&255,Gt[Xt++]=it>>8&255,Gt[Xt++]=~it&65535&255,Gt[Xt++]=(~it&65535)>>8&255,Gt.set(xt.subarray(Ut),Xt),Xt+=xt.length-Ut;const Vt=P(xt,0,xt.length);return Gt[Xt++]=Vt>>24&255,Gt[Xt++]=Vt>>16&255,Gt[Xt++]=Vt>>8&255,Gt[Xt++]=Vt&255,Gt}function It(xt,it,Nt,zt){const Gt=xt.width,Xt=xt.height;let Ut,Vt,Ht;const Pt=xt.data;switch(it){case p.ImageKind.GRAYSCALE_1BPP:Vt=0,Ut=1,Ht=Gt+7>>3;break;case p.ImageKind.RGB_24BPP:Vt=2,Ut=8,Ht=Gt*3;break;case p.ImageKind.RGBA_32BPP:Vt=6,Ut=8,Ht=Gt*4;break;default:throw new Error("invalid format")}const at=new Uint8Array((1+Ht)*Xt);let S=0,w=0;for(let Mt=0;Mt<Xt;++Mt)at[S++]=0,at.set(Pt.subarray(w,w+Ht),S),w+=Ht,S+=Ht;if(it===p.ImageKind.GRAYSCALE_1BPP&&zt){S=0;for(let Mt=0;Mt<Xt;Mt++){S++;for(let Rt=0;Rt<Ht;Rt++)at[S++]^=255}}const X=new Uint8Array([Gt>>24&255,Gt>>16&255,Gt>>8&255,Gt&255,Xt>>24&255,Xt>>16&255,Xt>>8&255,Xt&255,Ut,Vt,0,0,0]),J=Zt(at),H=K.length+u*3+X.length+J.length,et=new Uint8Array(H);let lt=0;return et.set(K,lt),lt+=K.length,$("IHDR",X,et,lt),lt+=u+X.length,$("IDATA",J,et,lt),lt+=u+J.length,$("IEND",new Uint8Array(0),et,lt),g(et,"image/png",Nt)}return function(it,Nt,zt){const Gt=it.kind===void 0?p.ImageKind.GRAYSCALE_1BPP:it.kind;return It(it,Gt,Nt,zt)}}();class v{constructor(){this.fontSizeScale=1,this.fontWeight=f.fontWeight,this.fontSize=0,this.textMatrix=p.IDENTITY_MATRIX,this.fontMatrix=p.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=p.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=f.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}clone(){return Object.create(this)}setCurrentPoint(u,m){this.x=u,this.y=m}}function Q(K){let u=[];const m=[];for(const _ of K){if(_.fn==="save"){u.push({fnId:92,fn:"group",items:[]}),m.push(u),u=u.at(-1).items;continue}_.fn==="restore"?u=m.pop():u.push(_)}return u}function R(K){if(Number.isInteger(K))return K.toString();const u=K.toFixed(10);let m=u.length-1;if(u[m]!=="0")return u;do m--;while(u[m]==="0");return u.substring(0,u[m]==="."?m:m+1)}function j(K){if(K[4]===0&&K[5]===0){if(K[1]===0&&K[2]===0)return K[0]===1&&K[3]===1?"":`scale(${R(K[0])} ${R(K[3])})`;if(K[0]===K[3]&&K[1]===-K[2]){const u=Math.acos(K[0])*180/Math.PI;return`rotate(${R(u)})`}}else if(K[0]===1&&K[1]===0&&K[2]===0&&K[3]===1)return`translate(${R(K[4])} ${R(K[5])})`;return`matrix(${R(K[0])} ${R(K[1])} ${R(K[2])} ${R(K[3])} ${R(K[4])} ${R(K[5])})`}let I=0,k=0,C=0;class U{constructor(u,m,_=!1){(0,M.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new M.DOMSVGFactory,this.current=new v,this.transformMatrix=p.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=u,this.objs=m,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!_,this._operatorIdMapping=[];for(const $ in p.OPS)this._operatorIdMapping[p.OPS[$]]=$}getObject(u,m=null){return typeof u=="string"?u.startsWith("g_")?this.commonObjs.get(u):this.objs.get(u):m}save(){this.transformStack.push(this.transformMatrix);const u=this.current;this.extraStack.push(u),this.current=u.clone()}restore(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}group(u){this.save(),this.executeOpTree(u),this.restore()}loadDependencies(u){const m=u.fnArray,_=u.argsArray;for(let $=0,P=m.length;$<P;$++)if(m[$]===p.OPS.dependency)for(const Zt of _[$]){const dt=Zt.startsWith("g_")?this.commonObjs:this.objs,It=new Promise(xt=>{dt.get(Zt,xt)});this.current.dependencies.push(It)}return Promise.all(this.current.dependencies)}transform(u,m,_,$,P,Zt){const dt=[u,m,_,$,P,Zt];this.transformMatrix=p.Util.transform(this.transformMatrix,dt),this.tgrp=null}getSVG(u,m){this.viewport=m;const _=this._initialize(m);return this.loadDependencies(u).then(()=>(this.transformMatrix=p.IDENTITY_MATRIX,this.executeOpTree(this.convertOpList(u)),_))}convertOpList(u){const m=this._operatorIdMapping,_=u.argsArray,$=u.fnArray,P=[];for(let Zt=0,dt=$.length;Zt<dt;Zt++){const It=$[Zt];P.push({fnId:It,fn:m[It],args:_[Zt]})}return Q(P)}executeOpTree(u){for(const m of u){const _=m.fn,$=m.fnId,P=m.args;switch($|0){case p.OPS.beginText:this.beginText();break;case p.OPS.dependency:break;case p.OPS.setLeading:this.setLeading(P);break;case p.OPS.setLeadingMoveText:this.setLeadingMoveText(P[0],P[1]);break;case p.OPS.setFont:this.setFont(P);break;case p.OPS.showText:this.showText(P[0]);break;case p.OPS.showSpacedText:this.showText(P[0]);break;case p.OPS.endText:this.endText();break;case p.OPS.moveText:this.moveText(P[0],P[1]);break;case p.OPS.setCharSpacing:this.setCharSpacing(P[0]);break;case p.OPS.setWordSpacing:this.setWordSpacing(P[0]);break;case p.OPS.setHScale:this.setHScale(P[0]);break;case p.OPS.setTextMatrix:this.setTextMatrix(P[0],P[1],P[2],P[3],P[4],P[5]);break;case p.OPS.setTextRise:this.setTextRise(P[0]);break;case p.OPS.setTextRenderingMode:this.setTextRenderingMode(P[0]);break;case p.OPS.setLineWidth:this.setLineWidth(P[0]);break;case p.OPS.setLineJoin:this.setLineJoin(P[0]);break;case p.OPS.setLineCap:this.setLineCap(P[0]);break;case p.OPS.setMiterLimit:this.setMiterLimit(P[0]);break;case p.OPS.setFillRGBColor:this.setFillRGBColor(P[0],P[1],P[2]);break;case p.OPS.setStrokeRGBColor:this.setStrokeRGBColor(P[0],P[1],P[2]);break;case p.OPS.setStrokeColorN:this.setStrokeColorN(P);break;case p.OPS.setFillColorN:this.setFillColorN(P);break;case p.OPS.shadingFill:this.shadingFill(P[0]);break;case p.OPS.setDash:this.setDash(P[0],P[1]);break;case p.OPS.setRenderingIntent:this.setRenderingIntent(P[0]);break;case p.OPS.setFlatness:this.setFlatness(P[0]);break;case p.OPS.setGState:this.setGState(P[0]);break;case p.OPS.fill:this.fill();break;case p.OPS.eoFill:this.eoFill();break;case p.OPS.stroke:this.stroke();break;case p.OPS.fillStroke:this.fillStroke();break;case p.OPS.eoFillStroke:this.eoFillStroke();break;case p.OPS.clip:this.clip("nonzero");break;case p.OPS.eoClip:this.clip("evenodd");break;case p.OPS.paintSolidColorImageMask:this.paintSolidColorImageMask();break;case p.OPS.paintImageXObject:this.paintImageXObject(P[0]);break;case p.OPS.paintInlineImageXObject:this.paintInlineImageXObject(P[0]);break;case p.OPS.paintImageMaskXObject:this.paintImageMaskXObject(P[0]);break;case p.OPS.paintFormXObjectBegin:this.paintFormXObjectBegin(P[0],P[1]);break;case p.OPS.paintFormXObjectEnd:this.paintFormXObjectEnd();break;case p.OPS.closePath:this.closePath();break;case p.OPS.closeStroke:this.closeStroke();break;case p.OPS.closeFillStroke:this.closeFillStroke();break;case p.OPS.closeEOFillStroke:this.closeEOFillStroke();break;case p.OPS.nextLine:this.nextLine();break;case p.OPS.transform:this.transform(P[0],P[1],P[2],P[3],P[4],P[5]);break;case p.OPS.constructPath:this.constructPath(P[0],P[1]);break;case p.OPS.endPath:this.endPath();break;case 92:this.group(m.items);break;default:(0,p.warn)(`Unimplemented operator ${_}`);break}}}setWordSpacing(u){this.current.wordSpacing=u}setCharSpacing(u){this.current.charSpacing=u}nextLine(){this.moveText(0,this.current.leading)}setTextMatrix(u,m,_,$,P,Zt){const dt=this.current;dt.textMatrix=dt.lineMatrix=[u,m,_,$,P,Zt],dt.textMatrixScale=Math.hypot(u,m),dt.x=dt.lineX=0,dt.y=dt.lineY=0,dt.xcoords=[],dt.ycoords=[],dt.tspan=this.svgFactory.createElement("svg:tspan"),dt.tspan.setAttributeNS(null,"font-family",dt.fontFamily),dt.tspan.setAttributeNS(null,"font-size",`${R(dt.fontSize)}px`),dt.tspan.setAttributeNS(null,"y",R(-dt.y)),dt.txtElement=this.svgFactory.createElement("svg:text"),dt.txtElement.append(dt.tspan)}beginText(){const u=this.current;u.x=u.lineX=0,u.y=u.lineY=0,u.textMatrix=p.IDENTITY_MATRIX,u.lineMatrix=p.IDENTITY_MATRIX,u.textMatrixScale=1,u.tspan=this.svgFactory.createElement("svg:tspan"),u.txtElement=this.svgFactory.createElement("svg:text"),u.txtgrp=this.svgFactory.createElement("svg:g"),u.xcoords=[],u.ycoords=[]}moveText(u,m){const _=this.current;_.x=_.lineX+=u,_.y=_.lineY+=m,_.xcoords=[],_.ycoords=[],_.tspan=this.svgFactory.createElement("svg:tspan"),_.tspan.setAttributeNS(null,"font-family",_.fontFamily),_.tspan.setAttributeNS(null,"font-size",`${R(_.fontSize)}px`),_.tspan.setAttributeNS(null,"y",R(-_.y))}showText(u){const m=this.current,_=m.font,$=m.fontSize;if($===0)return;const P=m.fontSizeScale,Zt=m.charSpacing,dt=m.wordSpacing,It=m.fontDirection,xt=m.textHScale*It,it=_.vertical,Nt=it?1:-1,zt=_.defaultVMetrics,Gt=$*m.fontMatrix[0];let Xt=0;for(const Ht of u){if(Ht===null){Xt+=It*dt;continue}else if(typeof Ht=="number"){Xt+=Nt*Ht*$/1e3;continue}const Pt=(Ht.isSpace?dt:0)+Zt,at=Ht.fontChar;let S,w,X=Ht.width;if(it){let H;const et=Ht.vmetric||zt;H=Ht.vmetric?et[1]:X*.5,H=-H*Gt;const lt=et[2]*Gt;X=et?-et[0]:X,S=H/P,w=(Xt+lt)/P}else S=Xt/P,w=0;(Ht.isInFont||_.missingFile)&&(m.xcoords.push(m.x+S),it&&m.ycoords.push(-m.y+w),m.tspan.textContent+=at);const J=it?X*Gt-Pt*It:X*Gt+Pt*It;Xt+=J}m.tspan.setAttributeNS(null,"x",m.xcoords.map(R).join(" ")),it?m.tspan.setAttributeNS(null,"y",m.ycoords.map(R).join(" ")):m.tspan.setAttributeNS(null,"y",R(-m.y)),it?m.y-=Xt:m.x+=Xt*xt,m.tspan.setAttributeNS(null,"font-family",m.fontFamily),m.tspan.setAttributeNS(null,"font-size",`${R(m.fontSize)}px`),m.fontStyle!==f.fontStyle&&m.tspan.setAttributeNS(null,"font-style",m.fontStyle),m.fontWeight!==f.fontWeight&&m.tspan.setAttributeNS(null,"font-weight",m.fontWeight);const Ut=m.textRenderingMode&p.TextRenderingMode.FILL_STROKE_MASK;if(Ut===p.TextRenderingMode.FILL||Ut===p.TextRenderingMode.FILL_STROKE?(m.fillColor!==f.fillColor&&m.tspan.setAttributeNS(null,"fill",m.fillColor),m.fillAlpha<1&&m.tspan.setAttributeNS(null,"fill-opacity",m.fillAlpha)):m.textRenderingMode===p.TextRenderingMode.ADD_TO_PATH?m.tspan.setAttributeNS(null,"fill","transparent"):m.tspan.setAttributeNS(null,"fill","none"),Ut===p.TextRenderingMode.STROKE||Ut===p.TextRenderingMode.FILL_STROKE){const Ht=1/(m.textMatrixScale||1);this._setStrokeAttributes(m.tspan,Ht)}let Vt=m.textMatrix;m.textRise!==0&&(Vt=Vt.slice(),Vt[5]+=m.textRise),m.txtElement.setAttributeNS(null,"transform",`${j(Vt)} scale(${R(xt)}, -1)`),m.txtElement.setAttributeNS(B,"xml:space","preserve"),m.txtElement.append(m.tspan),m.txtgrp.append(m.txtElement),this._ensureTransformGroup().append(m.txtElement)}setLeadingMoveText(u,m){this.setLeading(-m),this.moveText(u,m)}addFontStyle(u){if(!u.data)throw new Error('addFontStyle: No font data available, ensure that the "fontExtraProperties" API parameter is set.');this.cssStyle||(this.cssStyle=this.svgFactory.createElement("svg:style"),this.cssStyle.setAttributeNS(null,"type","text/css"),this.defs.append(this.cssStyle));const m=g(u.data,u.mimetype,this.forceDataSchema);this.cssStyle.textContent+=`@font-face { font-family: "${u.loadedName}"; src: url(${m}); }
|
||
`}setFont(u){const m=this.current,_=this.commonObjs.get(u[0]);let $=u[1];m.font=_,this.embedFonts&&!_.missingFile&&!this.embeddedFonts[_.loadedName]&&(this.addFontStyle(_),this.embeddedFonts[_.loadedName]=_),m.fontMatrix=_.fontMatrix||p.FONT_IDENTITY_MATRIX;let P="normal";_.black?P="900":_.bold&&(P="bold");const Zt=_.italic?"italic":"normal";$<0?($=-$,m.fontDirection=-1):m.fontDirection=1,m.fontSize=$,m.fontFamily=_.loadedName,m.fontWeight=P,m.fontStyle=Zt,m.tspan=this.svgFactory.createElement("svg:tspan"),m.tspan.setAttributeNS(null,"y",R(-m.y)),m.xcoords=[],m.ycoords=[]}endText(){var m;const u=this.current;u.textRenderingMode&p.TextRenderingMode.ADD_TO_PATH_FLAG&&((m=u.txtElement)!=null&&m.hasChildNodes())&&(u.element=u.txtElement,this.clip("nonzero"),this.endPath())}setLineWidth(u){u>0&&(this.current.lineWidth=u)}setLineCap(u){this.current.lineCap=F[u]}setLineJoin(u){this.current.lineJoin=L[u]}setMiterLimit(u){this.current.miterLimit=u}setStrokeAlpha(u){this.current.strokeAlpha=u}setStrokeRGBColor(u,m,_){this.current.strokeColor=p.Util.makeHexColor(u,m,_)}setFillAlpha(u){this.current.fillAlpha=u}setFillRGBColor(u,m,_){this.current.fillColor=p.Util.makeHexColor(u,m,_),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}setStrokeColorN(u){this.current.strokeColor=this._makeColorN_Pattern(u)}setFillColorN(u){this.current.fillColor=this._makeColorN_Pattern(u)}shadingFill(u){const{width:m,height:_}=this.viewport,$=p.Util.inverseTransform(this.transformMatrix),[P,Zt,dt,It]=p.Util.getAxialAlignedBoundingBox([0,0,m,_],$),xt=this.svgFactory.createElement("svg:rect");xt.setAttributeNS(null,"x",P),xt.setAttributeNS(null,"y",Zt),xt.setAttributeNS(null,"width",dt-P),xt.setAttributeNS(null,"height",It-Zt),xt.setAttributeNS(null,"fill",this._makeShadingPattern(u)),this.current.fillAlpha<1&&xt.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(xt)}_makeColorN_Pattern(u){return u[0]==="TilingPattern"?this._makeTilingPattern(u):this._makeShadingPattern(u)}_makeTilingPattern(u){const m=u[1],_=u[2],$=u[3]||p.IDENTITY_MATRIX,[P,Zt,dt,It]=u[4],xt=u[5],it=u[6],Nt=u[7],zt=`shading${C++}`,[Gt,Xt,Ut,Vt]=p.Util.normalizeRect([...p.Util.applyTransform([P,Zt],$),...p.Util.applyTransform([dt,It],$)]),[Ht,Pt]=p.Util.singularValueDecompose2dScale($),at=xt*Ht,S=it*Pt,w=this.svgFactory.createElement("svg:pattern");w.setAttributeNS(null,"id",zt),w.setAttributeNS(null,"patternUnits","userSpaceOnUse"),w.setAttributeNS(null,"width",at),w.setAttributeNS(null,"height",S),w.setAttributeNS(null,"x",`${Gt}`),w.setAttributeNS(null,"y",`${Xt}`);const X=this.svg,J=this.transformMatrix,H=this.current.fillColor,et=this.current.strokeColor,lt=this.svgFactory.create(Ut-Gt,Vt-Xt);if(this.svg=lt,this.transformMatrix=$,Nt===2){const Mt=p.Util.makeHexColor(...m);this.current.fillColor=Mt,this.current.strokeColor=Mt}return this.executeOpTree(this.convertOpList(_)),this.svg=X,this.transformMatrix=J,this.current.fillColor=H,this.current.strokeColor=et,w.append(lt.childNodes[0]),this.defs.append(w),`url(#${zt})`}_makeShadingPattern(u){switch(typeof u=="string"&&(u=this.objs.get(u)),u[0]){case"RadialAxial":const m=`shading${C++}`,_=u[3];let $;switch(u[1]){case"axial":const P=u[4],Zt=u[5];$=this.svgFactory.createElement("svg:linearGradient"),$.setAttributeNS(null,"id",m),$.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),$.setAttributeNS(null,"x1",P[0]),$.setAttributeNS(null,"y1",P[1]),$.setAttributeNS(null,"x2",Zt[0]),$.setAttributeNS(null,"y2",Zt[1]);break;case"radial":const dt=u[4],It=u[5],xt=u[6],it=u[7];$=this.svgFactory.createElement("svg:radialGradient"),$.setAttributeNS(null,"id",m),$.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),$.setAttributeNS(null,"cx",It[0]),$.setAttributeNS(null,"cy",It[1]),$.setAttributeNS(null,"r",it),$.setAttributeNS(null,"fx",dt[0]),$.setAttributeNS(null,"fy",dt[1]),$.setAttributeNS(null,"fr",xt);break;default:throw new Error(`Unknown RadialAxial type: ${u[1]}`)}for(const P of _){const Zt=this.svgFactory.createElement("svg:stop");Zt.setAttributeNS(null,"offset",P[0]),Zt.setAttributeNS(null,"stop-color",P[1]),$.append(Zt)}return this.defs.append($),`url(#${m})`;case"Mesh":return(0,p.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error(`Unknown IR type: ${u[0]}`)}}setDash(u,m){this.current.dashArray=u,this.current.dashPhase=m}constructPath(u,m){const _=this.current;let $=_.x,P=_.y,Zt=[],dt=0;for(const It of u)switch(It|0){case p.OPS.rectangle:$=m[dt++],P=m[dt++];const xt=m[dt++],it=m[dt++],Nt=$+xt,zt=P+it;Zt.push("M",R($),R(P),"L",R(Nt),R(P),"L",R(Nt),R(zt),"L",R($),R(zt),"Z");break;case p.OPS.moveTo:$=m[dt++],P=m[dt++],Zt.push("M",R($),R(P));break;case p.OPS.lineTo:$=m[dt++],P=m[dt++],Zt.push("L",R($),R(P));break;case p.OPS.curveTo:$=m[dt+4],P=m[dt+5],Zt.push("C",R(m[dt]),R(m[dt+1]),R(m[dt+2]),R(m[dt+3]),R($),R(P)),dt+=6;break;case p.OPS.curveTo2:Zt.push("C",R($),R(P),R(m[dt]),R(m[dt+1]),R(m[dt+2]),R(m[dt+3])),$=m[dt+2],P=m[dt+3],dt+=4;break;case p.OPS.curveTo3:$=m[dt+2],P=m[dt+3],Zt.push("C",R(m[dt]),R(m[dt+1]),R($),R(P),R($),R(P)),dt+=4;break;case p.OPS.closePath:Zt.push("Z");break}Zt=Zt.join(" "),_.path&&u.length>0&&u[0]!==p.OPS.rectangle&&u[0]!==p.OPS.moveTo?Zt=_.path.getAttributeNS(null,"d")+Zt:(_.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(_.path)),_.path.setAttributeNS(null,"d",Zt),_.path.setAttributeNS(null,"fill","none"),_.element=_.path,_.setCurrentPoint($,P)}endPath(){const u=this.current;if(u.path=null,!this.pendingClip)return;if(!u.element){this.pendingClip=null;return}const m=`clippath${I++}`,_=this.svgFactory.createElement("svg:clipPath");_.setAttributeNS(null,"id",m),_.setAttributeNS(null,"transform",j(this.transformMatrix));const $=u.element.cloneNode(!0);if(this.pendingClip==="evenodd"?$.setAttributeNS(null,"clip-rule","evenodd"):$.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,_.append($),this.defs.append(_),u.activeClipUrl){u.clipGroup=null;for(const P of this.extraStack)P.clipGroup=null;_.setAttributeNS(null,"clip-path",u.activeClipUrl)}u.activeClipUrl=`url(#${m})`,this.tgrp=null}clip(u){this.pendingClip=u}closePath(){const u=this.current;if(u.path){const m=`${u.path.getAttributeNS(null,"d")}Z`;u.path.setAttributeNS(null,"d",m)}}setLeading(u){this.current.leading=-u}setTextRise(u){this.current.textRise=u}setTextRenderingMode(u){this.current.textRenderingMode=u}setHScale(u){this.current.textHScale=u/100}setRenderingIntent(u){}setFlatness(u){}setGState(u){for(const[m,_]of u)switch(m){case"LW":this.setLineWidth(_);break;case"LC":this.setLineCap(_);break;case"LJ":this.setLineJoin(_);break;case"ML":this.setMiterLimit(_);break;case"D":this.setDash(_[0],_[1]);break;case"RI":this.setRenderingIntent(_);break;case"FL":this.setFlatness(_);break;case"Font":this.setFont(_);break;case"CA":this.setStrokeAlpha(_);break;case"ca":this.setFillAlpha(_);break;default:(0,p.warn)(`Unimplemented graphic state operator ${m}`);break}}fill(){const u=this.current;u.element&&(u.element.setAttributeNS(null,"fill",u.fillColor),u.element.setAttributeNS(null,"fill-opacity",u.fillAlpha),this.endPath())}stroke(){const u=this.current;u.element&&(this._setStrokeAttributes(u.element),u.element.setAttributeNS(null,"fill","none"),this.endPath())}_setStrokeAttributes(u,m=1){const _=this.current;let $=_.dashArray;m!==1&&$.length>0&&($=$.map(function(P){return m*P})),u.setAttributeNS(null,"stroke",_.strokeColor),u.setAttributeNS(null,"stroke-opacity",_.strokeAlpha),u.setAttributeNS(null,"stroke-miterlimit",R(_.miterLimit)),u.setAttributeNS(null,"stroke-linecap",_.lineCap),u.setAttributeNS(null,"stroke-linejoin",_.lineJoin),u.setAttributeNS(null,"stroke-width",R(m*_.lineWidth)+"px"),u.setAttributeNS(null,"stroke-dasharray",$.map(R).join(" ")),u.setAttributeNS(null,"stroke-dashoffset",R(m*_.dashPhase)+"px")}eoFill(){var u;(u=this.current.element)==null||u.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}fillStroke(){this.stroke(),this.fill()}eoFillStroke(){var u;(u=this.current.element)==null||u.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}closeStroke(){this.closePath(),this.stroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.closePath(),this.eoFillStroke()}paintSolidColorImageMask(){const u=this.svgFactory.createElement("svg:rect");u.setAttributeNS(null,"x","0"),u.setAttributeNS(null,"y","0"),u.setAttributeNS(null,"width","1px"),u.setAttributeNS(null,"height","1px"),u.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(u)}paintImageXObject(u){const m=this.getObject(u);if(!m){(0,p.warn)(`Dependent image with object ID ${u} is not ready yet`);return}this.paintInlineImageXObject(m)}paintInlineImageXObject(u,m){const _=u.width,$=u.height,P=q(u,this.forceDataSchema,!!m),Zt=this.svgFactory.createElement("svg:rect");Zt.setAttributeNS(null,"x","0"),Zt.setAttributeNS(null,"y","0"),Zt.setAttributeNS(null,"width",R(_)),Zt.setAttributeNS(null,"height",R($)),this.current.element=Zt,this.clip("nonzero");const dt=this.svgFactory.createElement("svg:image");dt.setAttributeNS(O,"xlink:href",P),dt.setAttributeNS(null,"x","0"),dt.setAttributeNS(null,"y",R(-$)),dt.setAttributeNS(null,"width",R(_)+"px"),dt.setAttributeNS(null,"height",R($)+"px"),dt.setAttributeNS(null,"transform",`scale(${R(1/_)} ${R(-1/$)})`),m?m.append(dt):this._ensureTransformGroup().append(dt)}paintImageMaskXObject(u){const m=this.getObject(u.data,u);if(m.bitmap){(0,p.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the `isOffscreenCanvasSupported` API parameter is disabled.");return}const _=this.current,$=m.width,P=m.height,Zt=_.fillColor;_.maskId=`mask${k++}`;const dt=this.svgFactory.createElement("svg:mask");dt.setAttributeNS(null,"id",_.maskId);const It=this.svgFactory.createElement("svg:rect");It.setAttributeNS(null,"x","0"),It.setAttributeNS(null,"y","0"),It.setAttributeNS(null,"width",R($)),It.setAttributeNS(null,"height",R(P)),It.setAttributeNS(null,"fill",Zt),It.setAttributeNS(null,"mask",`url(#${_.maskId})`),this.defs.append(dt),this._ensureTransformGroup().append(It),this.paintInlineImageXObject(m,dt)}paintFormXObjectBegin(u,m){if(Array.isArray(u)&&u.length===6&&this.transform(u[0],u[1],u[2],u[3],u[4],u[5]),m){const _=m[2]-m[0],$=m[3]-m[1],P=this.svgFactory.createElement("svg:rect");P.setAttributeNS(null,"x",m[0]),P.setAttributeNS(null,"y",m[1]),P.setAttributeNS(null,"width",R(_)),P.setAttributeNS(null,"height",R($)),this.current.element=P,this.clip("nonzero"),this.endPath()}}paintFormXObjectEnd(){}_initialize(u){const m=this.svgFactory.create(u.width,u.height),_=this.svgFactory.createElement("svg:defs");m.append(_),this.defs=_;const $=this.svgFactory.createElement("svg:g");return $.setAttributeNS(null,"transform",j(u.transform)),m.append($),this.svg=$,m}_ensureClipGroup(){if(!this.current.clipGroup){const u=this.svgFactory.createElement("svg:g");u.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(u),this.current.clipGroup=u}return this.current.clipGroup}_ensureTransformGroup(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",j(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}r.SVGGraphics=U},(st,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.XfaText=void 0;class h{static textContent(p){const f=[],B={items:f,styles:Object.create(null)};function O(F){var q;if(!F)return;let L=null;const g=F.name;if(g==="#text")L=F.value;else if(h.shouldBuildText(g))(q=F==null?void 0:F.attributes)!=null&&q.textContent?L=F.attributes.textContent:F.value&&(L=F.value);else return;if(L!==null&&f.push({str:L}),!!F.children)for(const v of F.children)O(v)}return O(p),B}static shouldBuildText(p){return!(p==="textarea"||p==="input"||p==="option"||p==="select")}}r.XfaText=h},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.TextLayerRenderTask=void 0,r.renderTextLayer=j,r.updateTextLayer=I;var M=h(1),p=h(6);const f=1e5,B=30,O=.8,F=new Map;function L(k,C){let U;if(C&&M.FeatureTest.isOffscreenCanvasSupported)U=new OffscreenCanvas(k,k).getContext("2d",{alpha:!1});else{const K=document.createElement("canvas");K.width=K.height=k,U=K.getContext("2d",{alpha:!1})}return U}function g(k,C){const U=F.get(k);if(U)return U;const K=L(B,C);K.font=`${B}px ${k}`;const u=K.measureText("");let m=u.fontBoundingBoxAscent,_=Math.abs(u.fontBoundingBoxDescent);if(m){const P=m/(m+_);return F.set(k,P),K.canvas.width=K.canvas.height=0,P}K.strokeStyle="red",K.clearRect(0,0,B,B),K.strokeText("g",0,0);let $=K.getImageData(0,0,B,B).data;_=0;for(let P=$.length-1-3;P>=0;P-=4)if($[P]>0){_=Math.ceil(P/4/B);break}K.clearRect(0,0,B,B),K.strokeText("A",0,B),$=K.getImageData(0,0,B,B).data,m=0;for(let P=0,Zt=$.length;P<Zt;P+=4)if($[P]>0){m=B-Math.floor(P/4/B);break}if(K.canvas.width=K.canvas.height=0,m){const P=m/(m+_);return F.set(k,P),P}return F.set(k,O),O}function q(k,C,U){const K=document.createElement("span"),u={angle:0,canvasWidth:0,hasText:C.str!=="",hasEOL:C.hasEOL,fontSize:0};k._textDivs.push(K);const m=M.Util.transform(k._transform,C.transform);let _=Math.atan2(m[1],m[0]);const $=U[C.fontName];$.vertical&&(_+=Math.PI/2);const P=Math.hypot(m[2],m[3]),Zt=P*g($.fontFamily,k._isOffscreenCanvasSupported);let dt,It;_===0?(dt=m[4],It=m[5]-Zt):(dt=m[4]+Zt*Math.sin(_),It=m[5]-Zt*Math.cos(_));const xt="calc(var(--scale-factor)*",it=K.style;k._container===k._rootContainer?(it.left=`${(100*dt/k._pageWidth).toFixed(2)}%`,it.top=`${(100*It/k._pageHeight).toFixed(2)}%`):(it.left=`${xt}${dt.toFixed(2)}px)`,it.top=`${xt}${It.toFixed(2)}px)`),it.fontSize=`${xt}${P.toFixed(2)}px)`,it.fontFamily=$.fontFamily,u.fontSize=P,K.setAttribute("role","presentation"),K.textContent=C.str,K.dir=C.dir,k._fontInspectorEnabled&&(K.dataset.fontName=C.fontName),_!==0&&(u.angle=_*(180/Math.PI));let Nt=!1;if(C.str.length>1)Nt=!0;else if(C.str!==" "&&C.transform[0]!==C.transform[3]){const zt=Math.abs(C.transform[0]),Gt=Math.abs(C.transform[3]);zt!==Gt&&Math.max(zt,Gt)/Math.min(zt,Gt)>1.5&&(Nt=!0)}Nt&&(u.canvasWidth=$.vertical?C.height:C.width),k._textDivProperties.set(K,u),k._isReadableStream&&k._layoutText(K)}function v(k){const{div:C,scale:U,properties:K,ctx:u,prevFontSize:m,prevFontFamily:_}=k,{style:$}=C;let P="";if(K.canvasWidth!==0&&K.hasText){const{fontFamily:Zt}=$,{canvasWidth:dt,fontSize:It}=K;(m!==It||_!==Zt)&&(u.font=`${It*U}px ${Zt}`,k.prevFontSize=It,k.prevFontFamily=Zt);const{width:xt}=u.measureText(C.textContent);xt>0&&(P=`scaleX(${dt*U/xt})`)}K.angle!==0&&(P=`rotate(${K.angle}deg) ${P}`),P.length>0&&($.transform=P)}function Q(k){if(k._canceled)return;const C=k._textDivs,U=k._capability;if(C.length>f){U.resolve();return}if(!k._isReadableStream)for(const u of C)k._layoutText(u);U.resolve()}class R{constructor({textContentSource:C,container:U,viewport:K,textDivs:u,textDivProperties:m,textContentItemsStr:_,isOffscreenCanvasSupported:$}){var xt;this._textContentSource=C,this._isReadableStream=C instanceof ReadableStream,this._container=this._rootContainer=U,this._textDivs=u||[],this._textContentItemsStr=_||[],this._isOffscreenCanvasSupported=$,this._fontInspectorEnabled=!!((xt=globalThis.FontInspector)!=null&&xt.enabled),this._reader=null,this._textDivProperties=m||new WeakMap,this._canceled=!1,this._capability=new M.PromiseCapability,this._layoutTextParams={prevFontSize:null,prevFontFamily:null,div:null,scale:K.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:L(0,$)};const{pageWidth:P,pageHeight:Zt,pageX:dt,pageY:It}=K.rawDims;this._transform=[1,0,0,-1,-dt,It+Zt],this._pageWidth=P,this._pageHeight=Zt,(0,p.setLayerDimensions)(U,K),this._capability.promise.finally(()=>{this._layoutTextParams=null}).catch(()=>{})}get promise(){return this._capability.promise}cancel(){this._canceled=!0,this._reader&&(this._reader.cancel(new M.AbortException("TextLayer task cancelled.")).catch(()=>{}),this._reader=null),this._capability.reject(new M.AbortException("TextLayer task cancelled."))}_processItems(C,U){for(const K of C){if(K.str===void 0){if(K.type==="beginMarkedContentProps"||K.type==="beginMarkedContent"){const u=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),K.id!==null&&this._container.setAttribute("id",`${K.id}`),u.append(this._container)}else K.type==="endMarkedContent"&&(this._container=this._container.parentNode);continue}this._textContentItemsStr.push(K.str),q(this,K,U)}}_layoutText(C){const U=this._layoutTextParams.properties=this._textDivProperties.get(C);if(this._layoutTextParams.div=C,v(this._layoutTextParams),U.hasText&&this._container.append(C),U.hasEOL){const K=document.createElement("br");K.setAttribute("role","presentation"),this._container.append(K)}}_render(){const C=new M.PromiseCapability;let U=Object.create(null);if(this._isReadableStream){const K=()=>{this._reader.read().then(({value:u,done:m})=>{if(m){C.resolve();return}Object.assign(U,u.styles),this._processItems(u.items,U),K()},C.reject)};this._reader=this._textContentSource.getReader(),K()}else if(this._textContentSource){const{items:K,styles:u}=this._textContentSource;this._processItems(K,u),C.resolve()}else throw new Error('No "textContentSource" parameter specified.');C.promise.then(()=>{U=null,Q(this)},this._capability.reject)}}r.TextLayerRenderTask=R;function j(k){!k.textContentSource&&(k.textContent||k.textContentStream)&&((0,p.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters will be removed in the future, please use `textContentSource` instead."),k.textContentSource=k.textContent||k.textContentStream);const{container:C,viewport:U}=k,K=getComputedStyle(C),u=K.getPropertyValue("visibility"),m=parseFloat(K.getPropertyValue("--scale-factor"));u==="visible"&&(!m||Math.abs(m-U.scale)>1e-5)&&console.error("The `--scale-factor` CSS-variable must be set, to the same value as `viewport.scale`, either on the `container`-element itself or higher up in the DOM.");const _=new R(k);return _._render(),_}function I({container:k,viewport:C,textDivs:U,textDivProperties:K,isOffscreenCanvasSupported:u,mustRotate:m=!0,mustRescale:_=!0}){if(m&&(0,p.setLayerDimensions)(k,{rotation:C.rotation}),_){const $=L(0,u),Zt={prevFontSize:null,prevFontFamily:null,div:null,scale:C.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:$};for(const dt of U)Zt.properties=K.get(dt),Zt.div=dt,v(Zt)}}},(st,r,h)=>{var g,q,v,Q,R,j,I,k,C,U,K,Ke,m,We,$,ve,Zt,Pe;Object.defineProperty(r,"__esModule",{value:!0}),r.AnnotationEditorLayer=void 0;var M=h(1),p=h(4),f=h(28),B=h(33),O=h(6),F=h(34);const It=class It{constructor({uiManager:it,pageIndex:Nt,div:zt,accessibilityManager:Gt,annotationLayer:Xt,viewport:Ut,l10n:Vt}){ll(this,K);ll(this,m);ll(this,$);ll(this,Zt);ll(this,g,void 0);ll(this,q,!1);ll(this,v,null);ll(this,Q,this.pointerup.bind(this));ll(this,R,this.pointerdown.bind(this));ll(this,j,new Map);ll(this,I,!1);ll(this,k,!1);ll(this,C,!1);ll(this,U,void 0);const Ht=[f.FreeTextEditor,B.InkEditor,F.StampEditor];if(!It._initialized){It._initialized=!0;for(const Pt of Ht)Pt.initialize(Vt)}it.registerEditorTypes(Ht),ul(this,U,it),this.pageIndex=Nt,this.div=zt,ul(this,g,Gt),ul(this,v,Xt),this.viewport=Ut,bt(this,U).addLayer(this)}get isEmpty(){return bt(this,j).size===0}updateToolbar(it){bt(this,U).updateToolbar(it)}updateMode(it=bt(this,U).getMode()){nl(this,Zt,Pe).call(this),it===M.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),it!==M.AnnotationEditorType.NONE&&(this.div.classList.toggle("freeTextEditing",it===M.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",it===M.AnnotationEditorType.INK),this.div.classList.toggle("stampEditing",it===M.AnnotationEditorType.STAMP),this.div.hidden=!1)}addInkEditorIfNeeded(it){if(!it&&bt(this,U).getMode()!==M.AnnotationEditorType.INK)return;if(!it){for(const zt of bt(this,j).values())if(zt.isEmpty()){zt.setInBackground();return}}nl(this,m,We).call(this,{offsetX:0,offsetY:0},!1).setInBackground()}setEditingState(it){bt(this,U).setEditingState(it)}addCommands(it){bt(this,U).addCommands(it)}enable(){this.div.style.pointerEvents="auto";const it=new Set;for(const zt of bt(this,j).values())zt.enableEditing(),zt.annotationElementId&&it.add(zt.annotationElementId);if(!bt(this,v))return;const Nt=bt(this,v).getEditableAnnotations();for(const zt of Nt){if(zt.hide(),bt(this,U).isDeletedAnnotationElement(zt.data.id)||it.has(zt.data.id))continue;const Gt=this.deserialize(zt);Gt&&(this.addOrRebuild(Gt),Gt.enableEditing())}}disable(){var Nt;ul(this,C,!0),this.div.style.pointerEvents="none";const it=new Set;for(const zt of bt(this,j).values()){if(zt.disableEditing(),!zt.annotationElementId||zt.serialize()!==null){it.add(zt.annotationElementId);continue}(Nt=this.getEditableAnnotation(zt.annotationElementId))==null||Nt.show(),zt.remove()}if(bt(this,v)){const zt=bt(this,v).getEditableAnnotations();for(const Gt of zt){const{id:Xt}=Gt.data;it.has(Xt)||bt(this,U).isDeletedAnnotationElement(Xt)||Gt.show()}}nl(this,Zt,Pe).call(this),this.isEmpty&&(this.div.hidden=!0),ul(this,C,!1)}getEditableAnnotation(it){var Nt;return((Nt=bt(this,v))==null?void 0:Nt.getEditableAnnotation(it))||null}setActiveEditor(it){bt(this,U).getActive()!==it&&bt(this,U).setActiveEditor(it)}enableClick(){this.div.addEventListener("pointerdown",bt(this,R)),this.div.addEventListener("pointerup",bt(this,Q))}disableClick(){this.div.removeEventListener("pointerdown",bt(this,R)),this.div.removeEventListener("pointerup",bt(this,Q))}attach(it){bt(this,j).set(it.id,it);const{annotationElementId:Nt}=it;Nt&&bt(this,U).isDeletedAnnotationElement(Nt)&&bt(this,U).removeDeletedAnnotationElement(it)}detach(it){var Nt;bt(this,j).delete(it.id),(Nt=bt(this,g))==null||Nt.removePointerInTextLayer(it.contentDiv),!bt(this,C)&&it.annotationElementId&&bt(this,U).addDeletedAnnotationElement(it)}remove(it){this.detach(it),bt(this,U).removeEditor(it),it.div.contains(document.activeElement)&&setTimeout(()=>{bt(this,U).focusMainContainer()},0),it.div.remove(),it.isAttachedToDOM=!1,bt(this,k)||this.addInkEditorIfNeeded(!1)}changeParent(it){var Nt;it.parent!==this&&(it.annotationElementId&&(bt(this,U).addDeletedAnnotationElement(it.annotationElementId),p.AnnotationEditor.deleteAnnotationElement(it),it.annotationElementId=null),this.attach(it),(Nt=it.parent)==null||Nt.detach(it),it.setParent(this),it.div&&it.isAttachedToDOM&&(it.div.remove(),this.div.append(it.div)))}add(it){if(this.changeParent(it),bt(this,U).addEditor(it),this.attach(it),!it.isAttachedToDOM){const Nt=it.render();this.div.append(Nt),it.isAttachedToDOM=!0}it.fixAndSetPosition(),it.onceAdded(),bt(this,U).addToAnnotationStorage(it)}moveEditorInDOM(it){var zt;if(!it.isAttachedToDOM)return;const{activeElement:Nt}=document;it.div.contains(Nt)&&(it._focusEventsAllowed=!1,setTimeout(()=>{it.div.contains(document.activeElement)?it._focusEventsAllowed=!0:(it.div.addEventListener("focusin",()=>{it._focusEventsAllowed=!0},{once:!0}),Nt.focus())},0)),it._structTreeParentId=(zt=bt(this,g))==null?void 0:zt.moveElementInDOM(this.div,it.div,it.contentDiv,!0)}addOrRebuild(it){it.needsToBeRebuilt()?it.rebuild():this.add(it)}addUndoableEditor(it){const Nt=()=>it._uiManager.rebuild(it),zt=()=>{it.remove()};this.addCommands({cmd:Nt,undo:zt,mustExec:!1})}getNextId(){return bt(this,U).getId()}pasteEditor(it,Nt){bt(this,U).updateToolbar(it),bt(this,U).updateMode(it);const{offsetX:zt,offsetY:Gt}=nl(this,$,ve).call(this),Xt=this.getNextId(),Ut=nl(this,K,Ke).call(this,El({parent:this,id:Xt,x:zt,y:Gt,uiManager:bt(this,U),isCentered:!0},Nt));Ut&&this.add(Ut)}deserialize(it){var Nt;switch((Nt=it.annotationType)!=null?Nt:it.annotationEditorType){case M.AnnotationEditorType.FREETEXT:return f.FreeTextEditor.deserialize(it,this,bt(this,U));case M.AnnotationEditorType.INK:return B.InkEditor.deserialize(it,this,bt(this,U));case M.AnnotationEditorType.STAMP:return F.StampEditor.deserialize(it,this,bt(this,U))}return null}addNewEditor(){nl(this,m,We).call(this,nl(this,$,ve).call(this),!0)}setSelected(it){bt(this,U).setSelected(it)}toggleSelected(it){bt(this,U).toggleSelected(it)}isSelected(it){return bt(this,U).isSelected(it)}unselect(it){bt(this,U).unselect(it)}pointerup(it){const{isMac:Nt}=M.FeatureTest.platform;if(!(it.button!==0||it.ctrlKey&&Nt)&&it.target===this.div&&bt(this,I)){if(ul(this,I,!1),!bt(this,q)){ul(this,q,!0);return}if(bt(this,U).getMode()===M.AnnotationEditorType.STAMP){bt(this,U).unselectAll();return}nl(this,m,We).call(this,it,!1)}}pointerdown(it){if(bt(this,I)){ul(this,I,!1);return}const{isMac:Nt}=M.FeatureTest.platform;if(it.button!==0||it.ctrlKey&&Nt||it.target!==this.div)return;ul(this,I,!0);const zt=bt(this,U).getActive();ul(this,q,!zt||zt.isEmpty())}findNewParent(it,Nt,zt){const Gt=bt(this,U).findParent(Nt,zt);return Gt===null||Gt===this?!1:(Gt.changeParent(it),!0)}destroy(){var it,Nt;((it=bt(this,U).getActive())==null?void 0:it.parent)===this&&(bt(this,U).commitOrRemove(),bt(this,U).setActiveEditor(null));for(const zt of bt(this,j).values())(Nt=bt(this,g))==null||Nt.removePointerInTextLayer(zt.contentDiv),zt.setParent(null),zt.isAttachedToDOM=!1,zt.div.remove();this.div=null,bt(this,j).clear(),bt(this,U).removeLayer(this)}render({viewport:it}){this.viewport=it,(0,O.setLayerDimensions)(this.div,it);for(const Nt of bt(this,U).getEditors(this.pageIndex))this.add(Nt);this.updateMode()}update({viewport:it}){bt(this,U).commitOrRemove(),this.viewport=it,(0,O.setLayerDimensions)(this.div,{rotation:it.rotation}),this.updateMode()}get pageDimensions(){const{pageWidth:it,pageHeight:Nt}=this.viewport.rawDims;return[it,Nt]}};g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakMap,K=new WeakSet,Ke=function(it){switch(bt(this,U).getMode()){case M.AnnotationEditorType.FREETEXT:return new f.FreeTextEditor(it);case M.AnnotationEditorType.INK:return new B.InkEditor(it);case M.AnnotationEditorType.STAMP:return new F.StampEditor(it)}return null},m=new WeakSet,We=function(it,Nt){const zt=this.getNextId(),Gt=nl(this,K,Ke).call(this,{parent:this,id:zt,x:it.offsetX,y:it.offsetY,uiManager:bt(this,U),isCentered:Nt});return Gt&&this.add(Gt),Gt},$=new WeakSet,ve=function(){const{x:it,y:Nt,width:zt,height:Gt}=this.div.getBoundingClientRect(),Xt=Math.max(0,it),Ut=Math.max(0,Nt),Vt=Math.min(window.innerWidth,it+zt),Ht=Math.min(window.innerHeight,Nt+Gt),Pt=(Xt+Vt)/2-it,at=(Ut+Ht)/2-Nt,[S,w]=this.viewport.rotation%180===0?[Pt,at]:[at,Pt];return{offsetX:S,offsetY:w}},Zt=new WeakSet,Pe=function(){ul(this,k,!0);for(const it of bt(this,j).values())it.isEmpty()&&it.remove();ul(this,k,!1)},Dl(It,"_initialized",!1);let L=It;r.AnnotationEditorLayer=L},(st,r,h)=>{var F,L,g,q,v,Q,R,j,I,k,Xs,U,Ys,u,ps,_,ce,P,He,dt,ys,xt,Qe;Object.defineProperty(r,"__esModule",{value:!0}),r.FreeTextEditor=void 0;var M=h(1),p=h(5),f=h(4),B=h(29);const Nt=class Nt extends f.AnnotationEditor{constructor(Xt){super(vl(El({},Xt),{name:"freeTextEditor"}));ll(this,k);ll(this,U);ll(this,u);ll(this,_);ll(this,P);ll(this,dt);ll(this,xt);ll(this,F,this.editorDivBlur.bind(this));ll(this,L,this.editorDivFocus.bind(this));ll(this,g,this.editorDivInput.bind(this));ll(this,q,this.editorDivKeydown.bind(this));ll(this,v,void 0);ll(this,Q,"");ll(this,R,`${this.id}-editor`);ll(this,j,void 0);ll(this,I,null);ul(this,v,Xt.color||Nt._defaultColor||f.AnnotationEditor._defaultLineColor),ul(this,j,Xt.fontSize||Nt._defaultFontSize)}static get _keyboardManager(){const Xt=Nt.prototype,Ut=Pt=>Pt.isEmpty(),Vt=p.AnnotationEditorUIManager.TRANSLATE_SMALL,Ht=p.AnnotationEditorUIManager.TRANSLATE_BIG;return(0,M.shadow)(this,"_keyboardManager",new p.KeyboardManager([[["ctrl+s","mac+meta+s","ctrl+p","mac+meta+p"],Xt.commitOrRemove,{bubbles:!0}],[["ctrl+Enter","mac+meta+Enter","Escape","mac+Escape"],Xt.commitOrRemove],[["ArrowLeft","mac+ArrowLeft"],Xt._translateEmpty,{args:[-Vt,0],checker:Ut}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],Xt._translateEmpty,{args:[-Ht,0],checker:Ut}],[["ArrowRight","mac+ArrowRight"],Xt._translateEmpty,{args:[Vt,0],checker:Ut}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],Xt._translateEmpty,{args:[Ht,0],checker:Ut}],[["ArrowUp","mac+ArrowUp"],Xt._translateEmpty,{args:[0,-Vt],checker:Ut}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],Xt._translateEmpty,{args:[0,-Ht],checker:Ut}],[["ArrowDown","mac+ArrowDown"],Xt._translateEmpty,{args:[0,Vt],checker:Ut}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],Xt._translateEmpty,{args:[0,Ht],checker:Ut}]]))}static initialize(Xt){f.AnnotationEditor.initialize(Xt,{strings:["free_text2_default_content","editor_free_text2_aria_label"]});const Ut=getComputedStyle(document.documentElement);this._internalPadding=parseFloat(Ut.getPropertyValue("--freetext-padding"))}static updateDefaultParams(Xt,Ut){switch(Xt){case M.AnnotationEditorParamsType.FREETEXT_SIZE:Nt._defaultFontSize=Ut;break;case M.AnnotationEditorParamsType.FREETEXT_COLOR:Nt._defaultColor=Ut;break}}updateParams(Xt,Ut){switch(Xt){case M.AnnotationEditorParamsType.FREETEXT_SIZE:nl(this,k,Xs).call(this,Ut);break;case M.AnnotationEditorParamsType.FREETEXT_COLOR:nl(this,U,Ys).call(this,Ut);break}}static get defaultPropertiesToUpdate(){return[[M.AnnotationEditorParamsType.FREETEXT_SIZE,Nt._defaultFontSize],[M.AnnotationEditorParamsType.FREETEXT_COLOR,Nt._defaultColor||f.AnnotationEditor._defaultLineColor]]}get propertiesToUpdate(){return[[M.AnnotationEditorParamsType.FREETEXT_SIZE,bt(this,j)],[M.AnnotationEditorParamsType.FREETEXT_COLOR,bt(this,v)]]}_translateEmpty(Xt,Ut){this._uiManager.translateSelectedEditors(Xt,Ut,!0)}getInitialTranslation(){const Xt=this.parentScale;return[-Nt._internalPadding*Xt,-(Nt._internalPadding+bt(this,j))*Xt]}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(this.isAttachedToDOM||this.parent.add(this)))}enableEditMode(){this.isInEditMode()||(this.parent.setEditingState(!1),this.parent.updateToolbar(M.AnnotationEditorType.FREETEXT),super.enableEditMode(),this.overlayDiv.classList.remove("enabled"),this.editorDiv.contentEditable=!0,this._isDraggable=!1,this.div.removeAttribute("aria-activedescendant"),this.editorDiv.addEventListener("keydown",bt(this,q)),this.editorDiv.addEventListener("focus",bt(this,L)),this.editorDiv.addEventListener("blur",bt(this,F)),this.editorDiv.addEventListener("input",bt(this,g)))}disableEditMode(){this.isInEditMode()&&(this.parent.setEditingState(!0),super.disableEditMode(),this.overlayDiv.classList.add("enabled"),this.editorDiv.contentEditable=!1,this.div.setAttribute("aria-activedescendant",bt(this,R)),this._isDraggable=!0,this.editorDiv.removeEventListener("keydown",bt(this,q)),this.editorDiv.removeEventListener("focus",bt(this,L)),this.editorDiv.removeEventListener("blur",bt(this,F)),this.editorDiv.removeEventListener("input",bt(this,g)),this.div.focus({preventScroll:!0}),this.isEditing=!1,this.parent.div.classList.add("freeTextEditing"))}focusin(Xt){this._focusEventsAllowed&&(super.focusin(Xt),Xt.target!==this.editorDiv&&this.editorDiv.focus())}onceAdded(){var Xt;if(this.width){nl(this,xt,Qe).call(this);return}this.enableEditMode(),this.editorDiv.focus(),(Xt=this._initialOptions)!=null&&Xt.isCentered&&this.center(),this._initialOptions=null}isEmpty(){return!this.editorDiv||this.editorDiv.innerText.trim()===""}remove(){this.isEditing=!1,this.parent&&(this.parent.setEditingState(!0),this.parent.div.classList.add("freeTextEditing")),super.remove()}commit(){if(!this.isInEditMode())return;super.commit(),this.disableEditMode();const Xt=bt(this,Q),Ut=ul(this,Q,nl(this,u,ps).call(this).trimEnd());if(Xt===Ut)return;const Vt=Ht=>{if(ul(this,Q,Ht),!Ht){this.remove();return}nl(this,P,He).call(this),this._uiManager.rebuild(this),nl(this,_,ce).call(this)};this.addCommands({cmd:()=>{Vt(Ut)},undo:()=>{Vt(Xt)},mustExec:!1}),nl(this,_,ce).call(this)}shouldGetKeyboardEvents(){return this.isInEditMode()}enterInEditMode(){this.enableEditMode(),this.editorDiv.focus()}dblclick(Xt){this.enterInEditMode()}keydown(Xt){Xt.target===this.div&&Xt.key==="Enter"&&(this.enterInEditMode(),Xt.preventDefault())}editorDivKeydown(Xt){Nt._keyboardManager.exec(this,Xt)}editorDivFocus(Xt){this.isEditing=!0}editorDivBlur(Xt){this.isEditing=!1}editorDivInput(Xt){this.parent.div.classList.toggle("freeTextEditing",this.isEmpty())}disableEditing(){this.editorDiv.setAttribute("role","comment"),this.editorDiv.removeAttribute("aria-multiline")}enableEditing(){this.editorDiv.setAttribute("role","textbox"),this.editorDiv.setAttribute("aria-multiline",!0)}render(){if(this.div)return this.div;let Xt,Ut;this.width&&(Xt=this.x,Ut=this.y),super.render(),this.editorDiv=document.createElement("div"),this.editorDiv.className="internal",this.editorDiv.setAttribute("id",bt(this,R)),this.enableEditing(),f.AnnotationEditor._l10nPromise.get("editor_free_text2_aria_label").then(Ht=>{var Pt;return(Pt=this.editorDiv)==null?void 0:Pt.setAttribute("aria-label",Ht)}),f.AnnotationEditor._l10nPromise.get("free_text2_default_content").then(Ht=>{var Pt;return(Pt=this.editorDiv)==null?void 0:Pt.setAttribute("default-content",Ht)}),this.editorDiv.contentEditable=!0;const{style:Vt}=this.editorDiv;if(Vt.fontSize=`calc(${bt(this,j)}px * var(--scale-factor))`,Vt.color=bt(this,v),this.div.append(this.editorDiv),this.overlayDiv=document.createElement("div"),this.overlayDiv.classList.add("overlay","enabled"),this.div.append(this.overlayDiv),(0,p.bindEvents)(this,this.div,["dblclick","keydown"]),this.width){const[Ht,Pt]=this.parentDimensions;if(this.annotationElementId){const{position:at}=bt(this,I);let[S,w]=this.getInitialTranslation();[S,w]=this.pageTranslationToScreen(S,w);const[X,J]=this.pageDimensions,[H,et]=this.pageTranslation;let lt,Mt;switch(this.rotation){case 0:lt=Xt+(at[0]-H)/X,Mt=Ut+this.height-(at[1]-et)/J;break;case 90:lt=Xt+(at[0]-H)/X,Mt=Ut-(at[1]-et)/J,[S,w]=[w,-S];break;case 180:lt=Xt-this.width+(at[0]-H)/X,Mt=Ut-(at[1]-et)/J,[S,w]=[-S,-w];break;case 270:lt=Xt+(at[0]-H-this.height*J)/X,Mt=Ut+(at[1]-et-this.width*X)/J,[S,w]=[-w,S];break}this.setAt(lt*Ht,Mt*Pt,S,w)}else this.setAt(Xt*Ht,Ut*Pt,this.width*Ht,this.height*Pt);nl(this,P,He).call(this),this._isDraggable=!0,this.editorDiv.contentEditable=!1}else this._isDraggable=!1,this.editorDiv.contentEditable=!0;return this.div}get contentDiv(){return this.editorDiv}static deserialize(Xt,Ut,Vt){let Ht=null;if(Xt instanceof B.FreeTextAnnotationElement){const{data:{defaultAppearanceData:{fontSize:at,fontColor:S},rect:w,rotation:X,id:J},textContent:H,textPosition:et,parent:{page:{pageNumber:lt}}}=Xt;if(!H||H.length===0)return null;Ht=Xt={annotationType:M.AnnotationEditorType.FREETEXT,color:Array.from(S),fontSize:at,value:H.join(`
|
||
`),position:et,pageIndex:lt-1,rect:w,rotation:X,id:J,deleted:!1}}const Pt=super.deserialize(Xt,Ut,Vt);return ul(Pt,j,Xt.fontSize),ul(Pt,v,M.Util.makeHexColor(...Xt.color)),ul(Pt,Q,Xt.value),Pt.annotationElementId=Xt.id||null,ul(Pt,I,Ht),Pt}serialize(Xt=!1){if(this.isEmpty())return null;if(this.deleted)return{pageIndex:this.pageIndex,id:this.annotationElementId,deleted:!0};const Ut=Nt._internalPadding*this.parentScale,Vt=this.getRect(Ut,Ut),Ht=f.AnnotationEditor._colorManager.convert(this.isAttachedToDOM?getComputedStyle(this.editorDiv).color:bt(this,v)),Pt={annotationType:M.AnnotationEditorType.FREETEXT,color:Ht,fontSize:bt(this,j),value:bt(this,Q),pageIndex:this.pageIndex,rect:Vt,rotation:this.rotation,structTreeParentId:this._structTreeParentId};return Xt?Pt:this.annotationElementId&&!nl(this,dt,ys).call(this,Pt)?null:(Pt.id=this.annotationElementId,Pt)}};F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakSet,Xs=function(Xt){const Ut=Ht=>{this.editorDiv.style.fontSize=`calc(${Ht}px * var(--scale-factor))`,this.translate(0,-(Ht-bt(this,j))*this.parentScale),ul(this,j,Ht),nl(this,_,ce).call(this)},Vt=bt(this,j);this.addCommands({cmd:()=>{Ut(Xt)},undo:()=>{Ut(Vt)},mustExec:!0,type:M.AnnotationEditorParamsType.FREETEXT_SIZE,overwriteIfSameType:!0,keepUndo:!0})},U=new WeakSet,Ys=function(Xt){const Ut=bt(this,v);this.addCommands({cmd:()=>{ul(this,v,this.editorDiv.style.color=Xt)},undo:()=>{ul(this,v,this.editorDiv.style.color=Ut)},mustExec:!0,type:M.AnnotationEditorParamsType.FREETEXT_COLOR,overwriteIfSameType:!0,keepUndo:!0})},u=new WeakSet,ps=function(){const Xt=this.editorDiv.getElementsByTagName("div");if(Xt.length===0)return this.editorDiv.innerText;const Ut=[];for(const Vt of Xt)Ut.push(Vt.innerText.replace(/\r\n?|\n/,""));return Ut.join(`
|
||
`)},_=new WeakSet,ce=function(){const[Xt,Ut]=this.parentDimensions;let Vt;if(this.isAttachedToDOM)Vt=this.div.getBoundingClientRect();else{const{currentLayer:Ht,div:Pt}=this,at=Pt.style.display;Pt.style.display="hidden",Ht.div.append(this.div),Vt=Pt.getBoundingClientRect(),Pt.remove(),Pt.style.display=at}this.rotation%180===this.parentRotation%180?(this.width=Vt.width/Xt,this.height=Vt.height/Ut):(this.width=Vt.height/Xt,this.height=Vt.width/Ut),this.fixAndSetPosition()},P=new WeakSet,He=function(){if(this.editorDiv.replaceChildren(),!!bt(this,Q))for(const Xt of bt(this,Q).split(`
|
||
`)){const Ut=document.createElement("div");Ut.append(Xt?document.createTextNode(Xt):document.createElement("br")),this.editorDiv.append(Ut)}},dt=new WeakSet,ys=function(Xt){const{value:Ut,fontSize:Vt,color:Ht,rect:Pt,pageIndex:at}=bt(this,I);return Xt.value!==Ut||Xt.fontSize!==Vt||Xt.rect.some((S,w)=>Math.abs(S-Pt[w])>=1)||Xt.color.some((S,w)=>S!==Ht[w])||Xt.pageIndex!==at},xt=new WeakSet,Qe=function(Xt=!1){if(!this.annotationElementId)return;if(nl(this,_,ce).call(this),!Xt&&(this.width===0||this.height===0)){setTimeout(()=>nl(this,xt,Qe).call(this,!0),0);return}const Ut=Nt._internalPadding*this.parentScale;bt(this,I).rect=this.getRect(Ut,Ut)},Dl(Nt,"_freeTextDefaultContent",""),Dl(Nt,"_internalPadding",0),Dl(Nt,"_defaultColor",null),Dl(Nt,"_defaultFontSize",10),Dl(Nt,"_type","freetext");let O=Nt;r.FreeTextEditor=O},(st,r,h)=>{var w,J,Hl,et,Ts,Mt,Rt,gt,Ot,Dt,qt,vt,dl,ol,il,_t,Ft,wt,pt,Ct,el,cl,Ml,Ls,Xl,Ge,Vl,fe,yl,Be,ot,ut,Tt,jt,Jt,Lt,Yt,Ae,$t,tl,bl,Bt,Vs,hl,_e;Object.defineProperty(r,"__esModule",{value:!0}),r.StampAnnotationElement=r.InkAnnotationElement=r.FreeTextAnnotationElement=r.AnnotationLayer=void 0;var M=h(1),p=h(6),f=h(3),B=h(30),O=h(31),F=h(32);const L=1e3,g=9,q=new WeakSet;function v(Wl){return{width:Wl[2]-Wl[0],height:Wl[3]-Wl[1]}}class Q{static create(nt){switch(nt.data.annotationType){case M.AnnotationType.LINK:return new j(nt);case M.AnnotationType.TEXT:return new I(nt);case M.AnnotationType.WIDGET:switch(nt.data.fieldType){case"Tx":return new C(nt);case"Btn":return nt.data.radioButton?new u(nt):nt.data.checkBox?new K(nt):new m(nt);case"Ch":return new _(nt);case"Sig":return new U(nt)}return new k(nt);case M.AnnotationType.POPUP:return new $(nt);case M.AnnotationType.FREETEXT:return new Zt(nt);case M.AnnotationType.LINE:return new dt(nt);case M.AnnotationType.SQUARE:return new It(nt);case M.AnnotationType.CIRCLE:return new xt(nt);case M.AnnotationType.POLYLINE:return new it(nt);case M.AnnotationType.CARET:return new zt(nt);case M.AnnotationType.INK:return new Gt(nt);case M.AnnotationType.POLYGON:return new Nt(nt);case M.AnnotationType.HIGHLIGHT:return new Xt(nt);case M.AnnotationType.UNDERLINE:return new Ut(nt);case M.AnnotationType.SQUIGGLY:return new Vt(nt);case M.AnnotationType.STRIKEOUT:return new Ht(nt);case M.AnnotationType.STAMP:return new Pt(nt);case M.AnnotationType.FILEATTACHMENT:return new at(nt);default:return new R(nt)}}}const X=class X{constructor(nt,{isRenderable:T=!1,ignoreBorder:ct=!1,createQuadrilaterals:Wt=!1}={}){ll(this,w,!1);this.isRenderable=T,this.data=nt.data,this.layer=nt.layer,this.linkService=nt.linkService,this.downloadManager=nt.downloadManager,this.imageResourcesPath=nt.imageResourcesPath,this.renderForms=nt.renderForms,this.svgFactory=nt.svgFactory,this.annotationStorage=nt.annotationStorage,this.enableScripting=nt.enableScripting,this.hasJSActions=nt.hasJSActions,this._fieldObjects=nt.fieldObjects,this.parent=nt.parent,T&&(this.container=this._createContainer(ct)),Wt&&this._createQuadrilaterals()}static _hasPopupData({titleObj:nt,contentsObj:T,richText:ct}){return!!(nt!=null&&nt.str||T!=null&&T.str||ct!=null&&ct.str)}get hasPopupData(){return X._hasPopupData(this.data)}_createContainer(nt){const{data:T,parent:{page:ct,viewport:Wt}}=this,yt=document.createElement("section");yt.setAttribute("data-annotation-id",T.id),this instanceof k||(yt.tabIndex=L),yt.style.zIndex=this.parent.zIndex++,this.data.popupRef&&yt.setAttribute("aria-haspopup","dialog"),T.noRotate&&yt.classList.add("norotate");const{pageWidth:kt,pageHeight:Et,pageX:sl,pageY:ml}=Wt.rawDims;if(!T.rect||this instanceof $){const{rotation:pl}=T;return!T.hasOwnCanvas&&pl!==0&&this.setRotation(pl,yt),yt}const{width:al,height:zl}=v(T.rect),Gl=M.Util.normalizeRect([T.rect[0],ct.view[3]-T.rect[1]+ct.view[1],T.rect[2],ct.view[3]-T.rect[3]+ct.view[1]]);if(!nt&&T.borderStyle.width>0){yt.style.borderWidth=`${T.borderStyle.width}px`;const pl=T.borderStyle.horizontalCornerRadius,Rl=T.borderStyle.verticalCornerRadius;if(pl>0||Rl>0){const xl=`calc(${pl}px * var(--scale-factor)) / calc(${Rl}px * var(--scale-factor))`;yt.style.borderRadius=xl}else if(this instanceof u){const xl=`calc(${al}px * var(--scale-factor)) / calc(${zl}px * var(--scale-factor))`;yt.style.borderRadius=xl}switch(T.borderStyle.style){case M.AnnotationBorderStyleType.SOLID:yt.style.borderStyle="solid";break;case M.AnnotationBorderStyleType.DASHED:yt.style.borderStyle="dashed";break;case M.AnnotationBorderStyleType.BEVELED:(0,M.warn)("Unimplemented border style: beveled");break;case M.AnnotationBorderStyleType.INSET:(0,M.warn)("Unimplemented border style: inset");break;case M.AnnotationBorderStyleType.UNDERLINE:yt.style.borderBottomStyle="solid";break}const wl=T.borderColor||null;wl?(ul(this,w,!0),yt.style.borderColor=M.Util.makeHexColor(wl[0]|0,wl[1]|0,wl[2]|0)):yt.style.borderWidth=0}yt.style.left=`${100*(Gl[0]-sl)/kt}%`,yt.style.top=`${100*(Gl[1]-ml)/Et}%`;const{rotation:Nl}=T;return T.hasOwnCanvas||Nl===0?(yt.style.width=`${100*al/kt}%`,yt.style.height=`${100*zl/Et}%`):this.setRotation(Nl,yt),yt}setRotation(nt,T=this.container){if(!this.data.rect)return;const{pageWidth:ct,pageHeight:Wt}=this.parent.viewport.rawDims,{width:yt,height:kt}=v(this.data.rect);let Et,sl;nt%180===0?(Et=100*yt/ct,sl=100*kt/Wt):(Et=100*kt/ct,sl=100*yt/Wt),T.style.width=`${Et}%`,T.style.height=`${sl}%`,T.setAttribute("data-main-rotation",(360-nt)%360)}get _commonActions(){const nt=(T,ct,Wt)=>{const yt=Wt.detail[T],kt=yt[0],Et=yt.slice(1);Wt.target.style[ct]=B.ColorConverters[`${kt}_HTML`](Et),this.annotationStorage.setValue(this.data.id,{[ct]:B.ColorConverters[`${kt}_rgb`](Et)})};return(0,M.shadow)(this,"_commonActions",{display:T=>{const{display:ct}=T.detail,Wt=ct%2===1;this.container.style.visibility=Wt?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noView:Wt,noPrint:ct===1||ct===2})},print:T=>{this.annotationStorage.setValue(this.data.id,{noPrint:!T.detail.print})},hidden:T=>{const{hidden:ct}=T.detail;this.container.style.visibility=ct?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noPrint:ct,noView:ct})},focus:T=>{setTimeout(()=>T.target.focus({preventScroll:!1}),0)},userName:T=>{T.target.title=T.detail.userName},readonly:T=>{T.target.disabled=T.detail.readonly},required:T=>{this._setRequired(T.target,T.detail.required)},bgColor:T=>{nt("bgColor","backgroundColor",T)},fillColor:T=>{nt("fillColor","backgroundColor",T)},fgColor:T=>{nt("fgColor","color",T)},textColor:T=>{nt("textColor","color",T)},borderColor:T=>{nt("borderColor","borderColor",T)},strokeColor:T=>{nt("strokeColor","borderColor",T)},rotation:T=>{const ct=T.detail.rotation;this.setRotation(ct),this.annotationStorage.setValue(this.data.id,{rotation:ct})}})}_dispatchEventFromSandbox(nt,T){const ct=this._commonActions;for(const Wt of Object.keys(T.detail)){const yt=nt[Wt]||ct[Wt];yt==null||yt(T)}}_setDefaultPropertiesFromJS(nt){if(!this.enableScripting)return;const T=this.annotationStorage.getRawValue(this.data.id);if(!T)return;const ct=this._commonActions;for(const[Wt,yt]of Object.entries(T)){const kt=ct[Wt];if(kt){const Et={detail:{[Wt]:yt},target:nt};kt(Et),delete T[Wt]}}}_createQuadrilaterals(){if(!this.container)return;const{quadPoints:nt}=this.data;if(!nt)return;const[T,ct,Wt,yt]=this.data.rect;if(nt.length===1){const[,{x:Rl,y:wl},{x:xl,y:gl}]=nt[0];if(Wt===Rl&&yt===wl&&T===xl&&ct===gl)return}const{style:kt}=this.container;let Et;if(bt(this,w)){const{borderColor:Rl,borderWidth:wl}=kt;kt.borderWidth=0,Et=["url('data:image/svg+xml;utf8,",'<svg xmlns="http://www.w3.org/2000/svg"',' preserveAspectRatio="none" viewBox="0 0 1 1">',`<g fill="transparent" stroke="${Rl}" stroke-width="${wl}">`],this.container.classList.add("hasBorder")}const sl=Wt-T,ml=yt-ct,{svgFactory:al}=this,zl=al.createElement("svg");zl.classList.add("quadrilateralsContainer"),zl.setAttribute("width",0),zl.setAttribute("height",0);const Gl=al.createElement("defs");zl.append(Gl);const Nl=al.createElement("clipPath"),pl=`clippath_${this.data.id}`;Nl.setAttribute("id",pl),Nl.setAttribute("clipPathUnits","objectBoundingBox"),Gl.append(Nl);for(const[,{x:Rl,y:wl},{x:xl,y:gl}]of nt){const kl=al.createElement("rect"),jl=(xl-T)/sl,Fl=(yt-wl)/ml,Cl=(Rl-xl)/sl,ql=(wl-gl)/ml;kl.setAttribute("x",jl),kl.setAttribute("y",Fl),kl.setAttribute("width",Cl),kl.setAttribute("height",ql),Nl.append(kl),Et==null||Et.push(`<rect vector-effect="non-scaling-stroke" x="${jl}" y="${Fl}" width="${Cl}" height="${ql}"/>`)}bt(this,w)&&(Et.push("</g></svg>')"),kt.backgroundImage=Et.join("")),this.container.append(zl),this.container.style.clipPath=`url(#${pl})`}_createPopup(){const{container:nt,data:T}=this;nt.setAttribute("aria-haspopup","dialog");const ct=new $({data:{color:T.color,titleObj:T.titleObj,modificationDate:T.modificationDate,contentsObj:T.contentsObj,richText:T.richText,parentRect:T.rect,borderStyle:0,id:`popup_${T.id}`,rotation:T.rotation},parent:this.parent,elements:[this]});this.parent.div.append(ct.render())}render(){(0,M.unreachable)("Abstract method `AnnotationElement.render` called")}_getElementsByName(nt,T=null){const ct=[];if(this._fieldObjects){const Wt=this._fieldObjects[nt];if(Wt)for(const{page:yt,id:kt,exportValues:Et}of Wt){if(yt===-1||kt===T)continue;const sl=typeof Et=="string"?Et:null,ml=document.querySelector(`[data-element-id="${kt}"]`);if(ml&&!q.has(ml)){(0,M.warn)(`_getElementsByName - element not allowed: ${kt}`);continue}ct.push({id:kt,exportValue:sl,domElement:ml})}return ct}for(const Wt of document.getElementsByName(nt)){const{exportValue:yt}=Wt,kt=Wt.getAttribute("data-element-id");kt!==T&&q.has(Wt)&&ct.push({id:kt,exportValue:yt,domElement:Wt})}return ct}show(){var nt;this.container&&(this.container.hidden=!1),(nt=this.popup)==null||nt.maybeShow()}hide(){var nt;this.container&&(this.container.hidden=!0),(nt=this.popup)==null||nt.forceHide()}getElementsToTriggerPopup(){return this.container}addHighlightArea(){const nt=this.getElementsToTriggerPopup();if(Array.isArray(nt))for(const T of nt)T.classList.add("highlightArea");else nt.classList.add("highlightArea")}_editOnDoubleClick(){const{annotationEditorType:nt,data:{id:T}}=this;this.container.addEventListener("dblclick",()=>{var ct;(ct=this.linkService.eventBus)==null||ct.dispatch("switchannotationeditormode",{source:this,mode:nt,editId:T})})}};w=new WeakMap;let R=X;class j extends R{constructor(T,ct=null){super(T,{isRenderable:!0,ignoreBorder:!!(ct!=null&&ct.ignoreBorder),createQuadrilaterals:!0});ll(this,J);ll(this,et);this.isTooltipOnly=T.data.isTooltipOnly}render(){const{data:T,linkService:ct}=this,Wt=document.createElement("a");Wt.setAttribute("data-element-id",T.id);let yt=!1;return T.url?(ct.addLinkAttributes(Wt,T.url,T.newWindow),yt=!0):T.action?(this._bindNamedAction(Wt,T.action),yt=!0):T.attachment?(this._bindAttachment(Wt,T.attachment),yt=!0):T.setOCGState?(nl(this,et,Ts).call(this,Wt,T.setOCGState),yt=!0):T.dest?(this._bindLink(Wt,T.dest),yt=!0):(T.actions&&(T.actions.Action||T.actions["Mouse Up"]||T.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(Wt,T),yt=!0),T.resetForm?(this._bindResetFormAction(Wt,T.resetForm),yt=!0):this.isTooltipOnly&&!yt&&(this._bindLink(Wt,""),yt=!0)),this.container.classList.add("linkAnnotation"),yt&&this.container.append(Wt),this.container}_bindLink(T,ct){T.href=this.linkService.getDestinationHash(ct),T.onclick=()=>(ct&&this.linkService.goToDestination(ct),!1),(ct||ct==="")&&nl(this,J,Hl).call(this)}_bindNamedAction(T,ct){T.href=this.linkService.getAnchorUrl(""),T.onclick=()=>(this.linkService.executeNamedAction(ct),!1),nl(this,J,Hl).call(this)}_bindAttachment(T,ct){T.href=this.linkService.getAnchorUrl(""),T.onclick=()=>{var Wt;return(Wt=this.downloadManager)==null||Wt.openOrDownloadData(this.container,ct.content,ct.filename),!1},nl(this,J,Hl).call(this)}_bindJSAction(T,ct){T.href=this.linkService.getAnchorUrl("");const Wt=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]);for(const yt of Object.keys(ct.actions)){const kt=Wt.get(yt);kt&&(T[kt]=()=>{var Et;return(Et=this.linkService.eventBus)==null||Et.dispatch("dispatcheventinsandbox",{source:this,detail:{id:ct.id,name:yt}}),!1})}T.onclick||(T.onclick=()=>!1),nl(this,J,Hl).call(this)}_bindResetFormAction(T,ct){const Wt=T.onclick;if(Wt||(T.href=this.linkService.getAnchorUrl("")),nl(this,J,Hl).call(this),!this._fieldObjects){(0,M.warn)('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'),Wt||(T.onclick=()=>!1);return}T.onclick=()=>{var zl;Wt==null||Wt();const{fields:yt,refs:kt,include:Et}=ct,sl=[];if(yt.length!==0||kt.length!==0){const Gl=new Set(kt);for(const Nl of yt){const pl=this._fieldObjects[Nl]||[];for(const{id:Rl}of pl)Gl.add(Rl)}for(const Nl of Object.values(this._fieldObjects))for(const pl of Nl)Gl.has(pl.id)===Et&&sl.push(pl)}else for(const Gl of Object.values(this._fieldObjects))sl.push(...Gl);const ml=this.annotationStorage,al=[];for(const Gl of sl){const{id:Nl}=Gl;switch(al.push(Nl),Gl.type){case"text":{const Rl=Gl.defaultValue||"";ml.setValue(Nl,{value:Rl});break}case"checkbox":case"radiobutton":{const Rl=Gl.defaultValue===Gl.exportValues;ml.setValue(Nl,{value:Rl});break}case"combobox":case"listbox":{const Rl=Gl.defaultValue||"";ml.setValue(Nl,{value:Rl});break}default:continue}const pl=document.querySelector(`[data-element-id="${Nl}"]`);if(pl){if(!q.has(pl)){(0,M.warn)(`_bindResetFormAction - element not allowed: ${Nl}`);continue}}else continue;pl.dispatchEvent(new Event("resetform"))}return this.enableScripting&&((zl=this.linkService.eventBus)==null||zl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:"app",ids:al,name:"ResetForm"}})),!1}}}J=new WeakSet,Hl=function(){this.container.setAttribute("data-internal-link","")},et=new WeakSet,Ts=function(T,ct){T.href=this.linkService.getAnchorUrl(""),T.onclick=()=>(this.linkService.executeSetOCGState(ct),!1),nl(this,J,Hl).call(this)};class I extends R{constructor(nt){super(nt,{isRenderable:!0})}render(){this.container.classList.add("textAnnotation");const nt=document.createElement("img");return nt.src=this.imageResourcesPath+"annotation-"+this.data.name.toLowerCase()+".svg",nt.alt="[{{type}} Annotation]",nt.dataset.l10nId="text_annotation_type",nt.dataset.l10nArgs=JSON.stringify({type:this.data.name}),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.append(nt),this.container}}class k extends R{render(){return this.data.alternativeText&&(this.container.title=this.data.alternativeText),this.container}showElementAndHideCanvas(nt){var T;this.data.hasOwnCanvas&&(((T=nt.previousSibling)==null?void 0:T.nodeName)==="CANVAS"&&(nt.previousSibling.hidden=!0),nt.hidden=!1)}_getKeyModifier(nt){const{isWin:T,isMac:ct}=M.FeatureTest.platform;return T&&nt.ctrlKey||ct&&nt.metaKey}_setEventListener(nt,T,ct,Wt,yt){ct.includes("mouse")?nt.addEventListener(ct,kt=>{var Et;(Et=this.linkService.eventBus)==null||Et.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:Wt,value:yt(kt),shift:kt.shiftKey,modifier:this._getKeyModifier(kt)}})}):nt.addEventListener(ct,kt=>{var Et;if(ct==="blur"){if(!T.focused||!kt.relatedTarget)return;T.focused=!1}else if(ct==="focus"){if(T.focused)return;T.focused=!0}yt&&((Et=this.linkService.eventBus)==null||Et.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:Wt,value:yt(kt)}}))})}_setEventListeners(nt,T,ct,Wt){var yt,kt,Et;for(const[sl,ml]of ct)(ml==="Action"||(yt=this.data.actions)!=null&&yt[ml])&&((ml==="Focus"||ml==="Blur")&&(T||(T={focused:!1})),this._setEventListener(nt,T,sl,ml,Wt),ml==="Focus"&&!((kt=this.data.actions)!=null&&kt.Blur)?this._setEventListener(nt,T,"blur","Blur",null):ml==="Blur"&&!((Et=this.data.actions)!=null&&Et.Focus)&&this._setEventListener(nt,T,"focus","Focus",null))}_setBackgroundColor(nt){const T=this.data.backgroundColor||null;nt.style.backgroundColor=T===null?"transparent":M.Util.makeHexColor(T[0],T[1],T[2])}_setTextStyle(nt){const T=["left","center","right"],{fontColor:ct}=this.data.defaultAppearanceData,Wt=this.data.defaultAppearanceData.fontSize||g,yt=nt.style;let kt;const Et=2,sl=ml=>Math.round(10*ml)/10;if(this.data.multiLine){const ml=Math.abs(this.data.rect[3]-this.data.rect[1]-Et),al=Math.round(ml/(M.LINE_FACTOR*Wt))||1,zl=ml/al;kt=Math.min(Wt,sl(zl/M.LINE_FACTOR))}else{const ml=Math.abs(this.data.rect[3]-this.data.rect[1]-Et);kt=Math.min(Wt,sl(ml/M.LINE_FACTOR))}yt.fontSize=`calc(${kt}px * var(--scale-factor))`,yt.color=M.Util.makeHexColor(ct[0],ct[1],ct[2]),this.data.textAlignment!==null&&(yt.textAlign=T[this.data.textAlignment])}_setRequired(nt,T){T?nt.setAttribute("required",!0):nt.removeAttribute("required"),nt.setAttribute("aria-required",T)}}class C extends k{constructor(nt){const T=nt.renderForms||!nt.data.hasAppearance&&!!nt.data.fieldValue;super(nt,{isRenderable:T})}setPropertyOnSiblings(nt,T,ct,Wt){const yt=this.annotationStorage;for(const kt of this._getElementsByName(nt.name,nt.id))kt.domElement&&(kt.domElement[T]=ct),yt.setValue(kt.id,{[Wt]:ct})}render(){var Wt,yt;const nt=this.annotationStorage,T=this.data.id;this.container.classList.add("textWidgetAnnotation");let ct=null;if(this.renderForms){const kt=nt.getValue(T,{value:this.data.fieldValue});let Et=kt.value||"";const sl=nt.getValue(T,{charLimit:this.data.maxLen}).charLimit;sl&&Et.length>sl&&(Et=Et.slice(0,sl));let ml=kt.formattedValue||((Wt=this.data.textContent)==null?void 0:Wt.join(`
|
||
`))||null;ml&&this.data.comb&&(ml=ml.replaceAll(/\s+/g,""));const al={userValue:Et,formattedValue:ml,lastCommittedValue:null,commitKey:1,focused:!1};this.data.multiLine?(ct=document.createElement("textarea"),ct.textContent=ml!=null?ml:Et,this.data.doNotScroll&&(ct.style.overflowY="hidden")):(ct=document.createElement("input"),ct.type="text",ct.setAttribute("value",ml!=null?ml:Et),this.data.doNotScroll&&(ct.style.overflowX="hidden")),this.data.hasOwnCanvas&&(ct.hidden=!0),q.add(ct),ct.setAttribute("data-element-id",T),ct.disabled=this.data.readOnly,ct.name=this.data.fieldName,ct.tabIndex=L,this._setRequired(ct,this.data.required),sl&&(ct.maxLength=sl),ct.addEventListener("input",Gl=>{nt.setValue(T,{value:Gl.target.value}),this.setPropertyOnSiblings(ct,"value",Gl.target.value,"value"),al.formattedValue=null}),ct.addEventListener("resetform",Gl=>{var pl;const Nl=(pl=this.data.defaultFieldValue)!=null?pl:"";ct.value=al.userValue=Nl,al.formattedValue=null});let zl=Gl=>{const{formattedValue:Nl}=al;Nl!=null&&(Gl.target.value=Nl),Gl.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){ct.addEventListener("focus",Nl=>{if(al.focused)return;const{target:pl}=Nl;al.userValue&&(pl.value=al.userValue),al.lastCommittedValue=pl.value,al.commitKey=1,al.focused=!0}),ct.addEventListener("updatefromsandbox",Nl=>{this.showElementAndHideCanvas(Nl.target);const pl={value(Rl){var wl;al.userValue=(wl=Rl.detail.value)!=null?wl:"",nt.setValue(T,{value:al.userValue.toString()}),Rl.target.value=al.userValue},formattedValue(Rl){const{formattedValue:wl}=Rl.detail;al.formattedValue=wl,wl!=null&&Rl.target!==document.activeElement&&(Rl.target.value=wl),nt.setValue(T,{formattedValue:wl})},selRange(Rl){Rl.target.setSelectionRange(...Rl.detail.selRange)},charLimit:Rl=>{var kl;const{charLimit:wl}=Rl.detail,{target:xl}=Rl;if(wl===0){xl.removeAttribute("maxLength");return}xl.setAttribute("maxLength",wl);let gl=al.userValue;!gl||gl.length<=wl||(gl=gl.slice(0,wl),xl.value=al.userValue=gl,nt.setValue(T,{value:gl}),(kl=this.linkService.eventBus)==null||kl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:T,name:"Keystroke",value:gl,willCommit:!0,commitKey:1,selStart:xl.selectionStart,selEnd:xl.selectionEnd}}))}};this._dispatchEventFromSandbox(pl,Nl)}),ct.addEventListener("keydown",Nl=>{var wl;al.commitKey=1;let pl=-1;if(Nl.key==="Escape"?pl=0:Nl.key==="Enter"&&!this.data.multiLine?pl=2:Nl.key==="Tab"&&(al.commitKey=3),pl===-1)return;const{value:Rl}=Nl.target;al.lastCommittedValue!==Rl&&(al.lastCommittedValue=Rl,al.userValue=Rl,(wl=this.linkService.eventBus)==null||wl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:T,name:"Keystroke",value:Rl,willCommit:!0,commitKey:pl,selStart:Nl.target.selectionStart,selEnd:Nl.target.selectionEnd}}))});const Gl=zl;zl=null,ct.addEventListener("blur",Nl=>{var Rl;if(!al.focused||!Nl.relatedTarget)return;al.focused=!1;const{value:pl}=Nl.target;al.userValue=pl,al.lastCommittedValue!==pl&&((Rl=this.linkService.eventBus)==null||Rl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:T,name:"Keystroke",value:pl,willCommit:!0,commitKey:al.commitKey,selStart:Nl.target.selectionStart,selEnd:Nl.target.selectionEnd}})),Gl(Nl)}),(yt=this.data.actions)!=null&&yt.Keystroke&&ct.addEventListener("beforeinput",Nl=>{var Fl;al.lastCommittedValue=null;const{data:pl,target:Rl}=Nl,{value:wl,selectionStart:xl,selectionEnd:gl}=Rl;let kl=xl,jl=gl;switch(Nl.inputType){case"deleteWordBackward":{const Cl=wl.substring(0,xl).match(/\w*[^\w]*$/);Cl&&(kl-=Cl[0].length);break}case"deleteWordForward":{const Cl=wl.substring(xl).match(/^[^\w]*\w*/);Cl&&(jl+=Cl[0].length);break}case"deleteContentBackward":xl===gl&&(kl-=1);break;case"deleteContentForward":xl===gl&&(jl+=1);break}Nl.preventDefault(),(Fl=this.linkService.eventBus)==null||Fl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:T,name:"Keystroke",value:wl,change:pl||"",willCommit:!1,selStart:kl,selEnd:jl}})}),this._setEventListeners(ct,al,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],Nl=>Nl.target.value)}if(zl&&ct.addEventListener("blur",zl),this.data.comb){const Nl=(this.data.rect[2]-this.data.rect[0])/sl;ct.classList.add("comb"),ct.style.letterSpacing=`calc(${Nl}px * var(--scale-factor) - 1ch)`}}else ct=document.createElement("div"),ct.textContent=this.data.fieldValue,ct.style.verticalAlign="middle",ct.style.display="table-cell";return this._setTextStyle(ct),this._setBackgroundColor(ct),this._setDefaultPropertiesFromJS(ct),this.container.append(ct),this.container}}class U extends k{constructor(nt){super(nt,{isRenderable:!!nt.data.hasOwnCanvas})}}class K extends k{constructor(nt){super(nt,{isRenderable:nt.renderForms})}render(){const nt=this.annotationStorage,T=this.data,ct=T.id;let Wt=nt.getValue(ct,{value:T.exportValue===T.fieldValue}).value;typeof Wt=="string"&&(Wt=Wt!=="Off",nt.setValue(ct,{value:Wt})),this.container.classList.add("buttonWidgetAnnotation","checkBox");const yt=document.createElement("input");return q.add(yt),yt.setAttribute("data-element-id",ct),yt.disabled=T.readOnly,this._setRequired(yt,this.data.required),yt.type="checkbox",yt.name=T.fieldName,Wt&&yt.setAttribute("checked",!0),yt.setAttribute("exportValue",T.exportValue),yt.tabIndex=L,yt.addEventListener("change",kt=>{const{name:Et,checked:sl}=kt.target;for(const ml of this._getElementsByName(Et,ct)){const al=sl&&ml.exportValue===T.exportValue;ml.domElement&&(ml.domElement.checked=al),nt.setValue(ml.id,{value:al})}nt.setValue(ct,{value:sl})}),yt.addEventListener("resetform",kt=>{const Et=T.defaultFieldValue||"Off";kt.target.checked=Et===T.exportValue}),this.enableScripting&&this.hasJSActions&&(yt.addEventListener("updatefromsandbox",kt=>{const Et={value(sl){sl.target.checked=sl.detail.value!=="Off",nt.setValue(ct,{value:sl.target.checked})}};this._dispatchEventFromSandbox(Et,kt)}),this._setEventListeners(yt,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],kt=>kt.target.checked)),this._setBackgroundColor(yt),this._setDefaultPropertiesFromJS(yt),this.container.append(yt),this.container}}class u extends k{constructor(nt){super(nt,{isRenderable:nt.renderForms})}render(){this.container.classList.add("buttonWidgetAnnotation","radioButton");const nt=this.annotationStorage,T=this.data,ct=T.id;let Wt=nt.getValue(ct,{value:T.fieldValue===T.buttonValue}).value;typeof Wt=="string"&&(Wt=Wt!==T.buttonValue,nt.setValue(ct,{value:Wt}));const yt=document.createElement("input");if(q.add(yt),yt.setAttribute("data-element-id",ct),yt.disabled=T.readOnly,this._setRequired(yt,this.data.required),yt.type="radio",yt.name=T.fieldName,Wt&&yt.setAttribute("checked",!0),yt.tabIndex=L,yt.addEventListener("change",kt=>{const{name:Et,checked:sl}=kt.target;for(const ml of this._getElementsByName(Et,ct))nt.setValue(ml.id,{value:!1});nt.setValue(ct,{value:sl})}),yt.addEventListener("resetform",kt=>{const Et=T.defaultFieldValue;kt.target.checked=Et!=null&&Et===T.buttonValue}),this.enableScripting&&this.hasJSActions){const kt=T.buttonValue;yt.addEventListener("updatefromsandbox",Et=>{const sl={value:ml=>{const al=kt===ml.detail.value;for(const zl of this._getElementsByName(ml.target.name)){const Gl=al&&zl.id===ct;zl.domElement&&(zl.domElement.checked=Gl),nt.setValue(zl.id,{value:Gl})}}};this._dispatchEventFromSandbox(sl,Et)}),this._setEventListeners(yt,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],Et=>Et.target.checked)}return this._setBackgroundColor(yt),this._setDefaultPropertiesFromJS(yt),this.container.append(yt),this.container}}class m extends j{constructor(nt){super(nt,{ignoreBorder:nt.data.hasAppearance})}render(){const nt=super.render();nt.classList.add("buttonWidgetAnnotation","pushButton"),this.data.alternativeText&&(nt.title=this.data.alternativeText);const T=nt.lastChild;return this.enableScripting&&this.hasJSActions&&T&&(this._setDefaultPropertiesFromJS(T),T.addEventListener("updatefromsandbox",ct=>{this._dispatchEventFromSandbox({},ct)})),nt}}class _ extends k{constructor(nt){super(nt,{isRenderable:nt.renderForms})}render(){this.container.classList.add("choiceWidgetAnnotation");const nt=this.annotationStorage,T=this.data.id,ct=nt.getValue(T,{value:this.data.fieldValue}),Wt=document.createElement("select");q.add(Wt),Wt.setAttribute("data-element-id",T),Wt.disabled=this.data.readOnly,this._setRequired(Wt,this.data.required),Wt.name=this.data.fieldName,Wt.tabIndex=L;let yt=this.data.combo&&this.data.options.length>0;this.data.combo||(Wt.size=this.data.options.length,this.data.multiSelect&&(Wt.multiple=!0)),Wt.addEventListener("resetform",al=>{const zl=this.data.defaultFieldValue;for(const Gl of Wt.options)Gl.selected=Gl.value===zl});for(const al of this.data.options){const zl=document.createElement("option");zl.textContent=al.displayValue,zl.value=al.exportValue,ct.value.includes(al.exportValue)&&(zl.setAttribute("selected",!0),yt=!1),Wt.append(zl)}let kt=null;if(yt){const al=document.createElement("option");al.value=" ",al.setAttribute("hidden",!0),al.setAttribute("selected",!0),Wt.prepend(al),kt=()=>{al.remove(),Wt.removeEventListener("input",kt),kt=null},Wt.addEventListener("input",kt)}const Et=al=>{const zl=al?"value":"textContent",{options:Gl,multiple:Nl}=Wt;return Nl?Array.prototype.filter.call(Gl,pl=>pl.selected).map(pl=>pl[zl]):Gl.selectedIndex===-1?null:Gl[Gl.selectedIndex][zl]};let sl=Et(!1);const ml=al=>{const zl=al.target.options;return Array.prototype.map.call(zl,Gl=>({displayValue:Gl.textContent,exportValue:Gl.value}))};return this.enableScripting&&this.hasJSActions?(Wt.addEventListener("updatefromsandbox",al=>{const zl={value(Gl){kt==null||kt();const Nl=Gl.detail.value,pl=new Set(Array.isArray(Nl)?Nl:[Nl]);for(const Rl of Wt.options)Rl.selected=pl.has(Rl.value);nt.setValue(T,{value:Et(!0)}),sl=Et(!1)},multipleSelection(Gl){Wt.multiple=!0},remove(Gl){const Nl=Wt.options,pl=Gl.detail.remove;Nl[pl].selected=!1,Wt.remove(pl),Nl.length>0&&Array.prototype.findIndex.call(Nl,wl=>wl.selected)===-1&&(Nl[0].selected=!0),nt.setValue(T,{value:Et(!0),items:ml(Gl)}),sl=Et(!1)},clear(Gl){for(;Wt.length!==0;)Wt.remove(0);nt.setValue(T,{value:null,items:[]}),sl=Et(!1)},insert(Gl){const{index:Nl,displayValue:pl,exportValue:Rl}=Gl.detail.insert,wl=Wt.children[Nl],xl=document.createElement("option");xl.textContent=pl,xl.value=Rl,wl?wl.before(xl):Wt.append(xl),nt.setValue(T,{value:Et(!0),items:ml(Gl)}),sl=Et(!1)},items(Gl){const{items:Nl}=Gl.detail;for(;Wt.length!==0;)Wt.remove(0);for(const pl of Nl){const{displayValue:Rl,exportValue:wl}=pl,xl=document.createElement("option");xl.textContent=Rl,xl.value=wl,Wt.append(xl)}Wt.options.length>0&&(Wt.options[0].selected=!0),nt.setValue(T,{value:Et(!0),items:ml(Gl)}),sl=Et(!1)},indices(Gl){const Nl=new Set(Gl.detail.indices);for(const pl of Gl.target.options)pl.selected=Nl.has(pl.index);nt.setValue(T,{value:Et(!0)}),sl=Et(!1)},editable(Gl){Gl.target.disabled=!Gl.detail.editable}};this._dispatchEventFromSandbox(zl,al)}),Wt.addEventListener("input",al=>{var Gl;const zl=Et(!0);nt.setValue(T,{value:zl}),al.preventDefault(),(Gl=this.linkService.eventBus)==null||Gl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:T,name:"Keystroke",value:sl,changeEx:zl,willCommit:!1,commitKey:1,keyDown:!1}})}),this._setEventListeners(Wt,null,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"],["input","Validate"]],al=>al.target.value)):Wt.addEventListener("input",function(al){nt.setValue(T,{value:Et(!0)})}),this.data.combo&&this._setTextStyle(Wt),this._setBackgroundColor(Wt),this._setDefaultPropertiesFromJS(Wt),this.container.append(Wt),this.container}}class $ extends R{constructor(nt){const{data:T,elements:ct}=nt;super(nt,{isRenderable:R._hasPopupData(T)}),this.elements=ct}render(){this.container.classList.add("popupAnnotation");const nt=new P({container:this.container,color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText,rect:this.data.rect,parentRect:this.data.parentRect||null,parent:this.parent,elements:this.elements,open:this.data.open}),T=[];for(const ct of this.elements)ct.popup=nt,T.push(ct.data.id),ct.addHighlightArea();return this.container.setAttribute("aria-controls",T.map(ct=>`${M.AnnotationPrefix}${ct}`).join(",")),this.container}}class P{constructor({container:nt,color:T,elements:ct,titleObj:Wt,modificationDate:yt,contentsObj:kt,richText:Et,parent:sl,rect:ml,parentRect:al,open:zl}){ll(this,Ml);ll(this,Xl);ll(this,Vl);ll(this,yl);ll(this,Mt,null);ll(this,Rt,nl(this,Ml,Ls).bind(this));ll(this,gt,nl(this,yl,Be).bind(this));ll(this,Ot,nl(this,Vl,fe).bind(this));ll(this,Dt,nl(this,Xl,Ge).bind(this));ll(this,qt,null);ll(this,vt,null);ll(this,dl,null);ll(this,ol,null);ll(this,il,null);ll(this,_t,null);ll(this,Ft,!1);ll(this,wt,null);ll(this,pt,null);ll(this,Ct,null);ll(this,el,null);ll(this,cl,!1);var Nl;ul(this,vt,nt),ul(this,el,Wt),ul(this,dl,kt),ul(this,Ct,Et),ul(this,il,sl),ul(this,qt,T),ul(this,pt,ml),ul(this,_t,al),ul(this,ol,ct);const Gl=p.PDFDateString.toDateObject(yt);Gl&&ul(this,Mt,sl.l10n.get("annotation_date_string",{date:Gl.toLocaleDateString(),time:Gl.toLocaleTimeString()})),this.trigger=ct.flatMap(pl=>pl.getElementsToTriggerPopup());for(const pl of this.trigger)pl.addEventListener("click",bt(this,Dt)),pl.addEventListener("mouseenter",bt(this,Ot)),pl.addEventListener("mouseleave",bt(this,gt)),pl.classList.add("popupTriggerArea");for(const pl of ct)(Nl=pl.container)==null||Nl.addEventListener("keydown",bt(this,Rt));bt(this,vt).hidden=!0,zl&&nl(this,Xl,Ge).call(this)}render(){if(bt(this,wt))return;const{page:{view:nt},viewport:{rawDims:{pageWidth:T,pageHeight:ct,pageX:Wt,pageY:yt}}}=bt(this,il),kt=ul(this,wt,document.createElement("div"));if(kt.className="popup",bt(this,qt)){const kl=kt.style.outlineColor=M.Util.makeHexColor(...bt(this,qt));CSS.supports("background-color","color-mix(in srgb, red 30%, white)")?kt.style.backgroundColor=`color-mix(in srgb, ${kl} 30%, white)`:kt.style.backgroundColor=M.Util.makeHexColor(...bt(this,qt).map(Fl=>Math.floor(.7*(255-Fl)+Fl)))}const Et=document.createElement("span");Et.className="header";const sl=document.createElement("h1");if(Et.append(sl),{dir:sl.dir,str:sl.textContent}=bt(this,el),kt.append(Et),bt(this,Mt)){const kl=document.createElement("span");kl.classList.add("popupDate"),bt(this,Mt).then(jl=>{kl.textContent=jl}),Et.append(kl)}const ml=bt(this,dl),al=bt(this,Ct);if(al!=null&&al.str&&(!(ml!=null&&ml.str)||ml.str===al.str))F.XfaLayer.render({xfaHtml:al.html,intent:"richText",div:kt}),kt.lastChild.classList.add("richText","popupContent");else{const kl=this._formatContents(ml);kt.append(kl)}let zl=!!bt(this,_t),Gl=zl?bt(this,_t):bt(this,pt);for(const kl of bt(this,ol))if(!Gl||M.Util.intersect(kl.data.rect,Gl)!==null){Gl=kl.data.rect,zl=!0;break}const Nl=M.Util.normalizeRect([Gl[0],nt[3]-Gl[1]+nt[1],Gl[2],nt[3]-Gl[3]+nt[1]]),Rl=zl?Gl[2]-Gl[0]+5:0,wl=Nl[0]+Rl,xl=Nl[1],{style:gl}=bt(this,vt);gl.left=`${100*(wl-Wt)/T}%`,gl.top=`${100*(xl-yt)/ct}%`,bt(this,vt).append(kt)}_formatContents({str:nt,dir:T}){const ct=document.createElement("p");ct.classList.add("popupContent"),ct.dir=T;const Wt=nt.split(/(?:\r\n?|\n)/);for(let yt=0,kt=Wt.length;yt<kt;++yt){const Et=Wt[yt];ct.append(document.createTextNode(Et)),yt<kt-1&&ct.append(document.createElement("br"))}return ct}forceHide(){ul(this,cl,this.isVisible),bt(this,cl)&&(bt(this,vt).hidden=!0)}maybeShow(){bt(this,cl)&&(ul(this,cl,!1),bt(this,vt).hidden=!1)}get isVisible(){return bt(this,vt).hidden===!1}}Mt=new WeakMap,Rt=new WeakMap,gt=new WeakMap,Ot=new WeakMap,Dt=new WeakMap,qt=new WeakMap,vt=new WeakMap,dl=new WeakMap,ol=new WeakMap,il=new WeakMap,_t=new WeakMap,Ft=new WeakMap,wt=new WeakMap,pt=new WeakMap,Ct=new WeakMap,el=new WeakMap,cl=new WeakMap,Ml=new WeakSet,Ls=function(nt){nt.altKey||nt.shiftKey||nt.ctrlKey||nt.metaKey||(nt.key==="Enter"||nt.key==="Escape"&&bt(this,Ft))&&nl(this,Xl,Ge).call(this)},Xl=new WeakSet,Ge=function(){ul(this,Ft,!bt(this,Ft)),bt(this,Ft)?(nl(this,Vl,fe).call(this),bt(this,vt).addEventListener("click",bt(this,Dt)),bt(this,vt).addEventListener("keydown",bt(this,Rt))):(nl(this,yl,Be).call(this),bt(this,vt).removeEventListener("click",bt(this,Dt)),bt(this,vt).removeEventListener("keydown",bt(this,Rt)))},Vl=new WeakSet,fe=function(){bt(this,wt)||this.render(),this.isVisible?bt(this,Ft)&&bt(this,vt).classList.add("focused"):(bt(this,vt).hidden=!1,bt(this,vt).style.zIndex=parseInt(bt(this,vt).style.zIndex)+1e3)},yl=new WeakSet,Be=function(){bt(this,vt).classList.remove("focused"),!(bt(this,Ft)||!this.isVisible)&&(bt(this,vt).hidden=!0,bt(this,vt).style.zIndex=parseInt(bt(this,vt).style.zIndex)-1e3)};class Zt extends R{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0}),this.textContent=nt.data.textContent,this.textPosition=nt.data.textPosition,this.annotationEditorType=M.AnnotationEditorType.FREETEXT}render(){if(this.container.classList.add("freeTextAnnotation"),this.textContent){const nt=document.createElement("div");nt.classList.add("annotationTextContent"),nt.setAttribute("role","comment");for(const T of this.textContent){const ct=document.createElement("span");ct.textContent=T,nt.append(ct)}this.container.append(nt)}return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this._editOnDoubleClick(),this.container}}r.FreeTextAnnotationElement=Zt;class dt extends R{constructor(T){super(T,{isRenderable:!0,ignoreBorder:!0});ll(this,ot,null)}render(){this.container.classList.add("lineAnnotation");const T=this.data,{width:ct,height:Wt}=v(T.rect),yt=this.svgFactory.create(ct,Wt,!0),kt=ul(this,ot,this.svgFactory.createElement("svg:line"));return kt.setAttribute("x1",T.rect[2]-T.lineCoordinates[0]),kt.setAttribute("y1",T.rect[3]-T.lineCoordinates[1]),kt.setAttribute("x2",T.rect[2]-T.lineCoordinates[2]),kt.setAttribute("y2",T.rect[3]-T.lineCoordinates[3]),kt.setAttribute("stroke-width",T.borderStyle.width||1),kt.setAttribute("stroke","transparent"),kt.setAttribute("fill","transparent"),yt.append(kt),this.container.append(yt),!T.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return bt(this,ot)}addHighlightArea(){this.container.classList.add("highlightArea")}}ot=new WeakMap;class It extends R{constructor(T){super(T,{isRenderable:!0,ignoreBorder:!0});ll(this,ut,null)}render(){this.container.classList.add("squareAnnotation");const T=this.data,{width:ct,height:Wt}=v(T.rect),yt=this.svgFactory.create(ct,Wt,!0),kt=T.borderStyle.width,Et=ul(this,ut,this.svgFactory.createElement("svg:rect"));return Et.setAttribute("x",kt/2),Et.setAttribute("y",kt/2),Et.setAttribute("width",ct-kt),Et.setAttribute("height",Wt-kt),Et.setAttribute("stroke-width",kt||1),Et.setAttribute("stroke","transparent"),Et.setAttribute("fill","transparent"),yt.append(Et),this.container.append(yt),!T.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return bt(this,ut)}addHighlightArea(){this.container.classList.add("highlightArea")}}ut=new WeakMap;class xt extends R{constructor(T){super(T,{isRenderable:!0,ignoreBorder:!0});ll(this,Tt,null)}render(){this.container.classList.add("circleAnnotation");const T=this.data,{width:ct,height:Wt}=v(T.rect),yt=this.svgFactory.create(ct,Wt,!0),kt=T.borderStyle.width,Et=ul(this,Tt,this.svgFactory.createElement("svg:ellipse"));return Et.setAttribute("cx",ct/2),Et.setAttribute("cy",Wt/2),Et.setAttribute("rx",ct/2-kt/2),Et.setAttribute("ry",Wt/2-kt/2),Et.setAttribute("stroke-width",kt||1),Et.setAttribute("stroke","transparent"),Et.setAttribute("fill","transparent"),yt.append(Et),this.container.append(yt),!T.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return bt(this,Tt)}addHighlightArea(){this.container.classList.add("highlightArea")}}Tt=new WeakMap;class it extends R{constructor(T){super(T,{isRenderable:!0,ignoreBorder:!0});ll(this,jt,null);this.containerClassName="polylineAnnotation",this.svgElementName="svg:polyline"}render(){this.container.classList.add(this.containerClassName);const T=this.data,{width:ct,height:Wt}=v(T.rect),yt=this.svgFactory.create(ct,Wt,!0);let kt=[];for(const sl of T.vertices){const ml=sl.x-T.rect[0],al=T.rect[3]-sl.y;kt.push(ml+","+al)}kt=kt.join(" ");const Et=ul(this,jt,this.svgFactory.createElement(this.svgElementName));return Et.setAttribute("points",kt),Et.setAttribute("stroke-width",T.borderStyle.width||1),Et.setAttribute("stroke","transparent"),Et.setAttribute("fill","transparent"),yt.append(Et),this.container.append(yt),!T.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return bt(this,jt)}addHighlightArea(){this.container.classList.add("highlightArea")}}jt=new WeakMap;class Nt extends it{constructor(nt){super(nt),this.containerClassName="polygonAnnotation",this.svgElementName="svg:polygon"}}class zt extends R{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0})}render(){return this.container.classList.add("caretAnnotation"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container}}class Gt extends R{constructor(T){super(T,{isRenderable:!0,ignoreBorder:!0});ll(this,Jt,[]);this.containerClassName="inkAnnotation",this.svgElementName="svg:polyline",this.annotationEditorType=M.AnnotationEditorType.INK}render(){this.container.classList.add(this.containerClassName);const T=this.data,{width:ct,height:Wt}=v(T.rect),yt=this.svgFactory.create(ct,Wt,!0);for(const kt of T.inkLists){let Et=[];for(const ml of kt){const al=ml.x-T.rect[0],zl=T.rect[3]-ml.y;Et.push(`${al},${zl}`)}Et=Et.join(" ");const sl=this.svgFactory.createElement(this.svgElementName);bt(this,Jt).push(sl),sl.setAttribute("points",Et),sl.setAttribute("stroke-width",T.borderStyle.width||1),sl.setAttribute("stroke","transparent"),sl.setAttribute("fill","transparent"),!T.popupRef&&this.hasPopupData&&this._createPopup(),yt.append(sl)}return this.container.append(yt),this.container}getElementsToTriggerPopup(){return bt(this,Jt)}addHighlightArea(){this.container.classList.add("highlightArea")}}Jt=new WeakMap,r.InkAnnotationElement=Gt;class Xt extends R{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("highlightAnnotation"),this.container}}class Ut extends R{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("underlineAnnotation"),this.container}}class Vt extends R{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("squigglyAnnotation"),this.container}}class Ht extends R{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("strikeoutAnnotation"),this.container}}class Pt extends R{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0})}render(){return this.container.classList.add("stampAnnotation"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container}}r.StampAnnotationElement=Pt;class at extends R{constructor(T){var yt;super(T,{isRenderable:!0});ll(this,Yt);ll(this,Lt,null);const{filename:ct,content:Wt}=this.data.file;this.filename=(0,p.getFilenameFromUrl)(ct,!0),this.content=Wt,(yt=this.linkService.eventBus)==null||yt.dispatch("fileattachmentannotation",{source:this,filename:ct,content:Wt})}render(){this.container.classList.add("fileAttachmentAnnotation");const{container:T,data:ct}=this;let Wt;ct.hasAppearance||ct.fillAlpha===0?Wt=document.createElement("div"):(Wt=document.createElement("img"),Wt.src=`${this.imageResourcesPath}annotation-${/paperclip/i.test(ct.name)?"paperclip":"pushpin"}.svg`,ct.fillAlpha&&ct.fillAlpha<1&&(Wt.style=`filter: opacity(${Math.round(ct.fillAlpha*100)}%);`)),Wt.addEventListener("dblclick",nl(this,Yt,Ae).bind(this)),ul(this,Lt,Wt);const{isMac:yt}=M.FeatureTest.platform;return T.addEventListener("keydown",kt=>{kt.key==="Enter"&&(yt?kt.metaKey:kt.ctrlKey)&&nl(this,Yt,Ae).call(this)}),!ct.popupRef&&this.hasPopupData?this._createPopup():Wt.classList.add("popupTriggerArea"),T.append(Wt),T}getElementsToTriggerPopup(){return bt(this,Lt)}addHighlightArea(){this.container.classList.add("highlightArea")}}Lt=new WeakMap,Yt=new WeakSet,Ae=function(){var T;(T=this.downloadManager)==null||T.openOrDownloadData(this.container,this.content,this.filename)};class S{constructor({div:nt,accessibilityManager:T,annotationCanvasMap:ct,l10n:Wt,page:yt,viewport:kt}){ll(this,Bt);ll(this,hl);ll(this,$t,null);ll(this,tl,null);ll(this,bl,new Map);this.div=nt,ul(this,$t,T),ul(this,tl,ct),this.l10n=Wt,this.page=yt,this.viewport=kt,this.zIndex=0,this.l10n||(this.l10n=O.NullL10n)}render(nt){return Sl(this,null,function*(){const{annotations:T}=nt,ct=this.div;(0,p.setLayerDimensions)(ct,this.viewport);const Wt=new Map,yt={data:null,layer:ct,linkService:nt.linkService,downloadManager:nt.downloadManager,imageResourcesPath:nt.imageResourcesPath||"",renderForms:nt.renderForms!==!1,svgFactory:new p.DOMSVGFactory,annotationStorage:nt.annotationStorage||new f.AnnotationStorage,enableScripting:nt.enableScripting===!0,hasJSActions:nt.hasJSActions,fieldObjects:nt.fieldObjects,parent:this,elements:null};for(const kt of T){if(kt.noHTML)continue;const Et=kt.annotationType===M.AnnotationType.POPUP;if(Et){const al=Wt.get(kt.id);if(!al)continue;yt.elements=al}else{const{width:al,height:zl}=v(kt.rect);if(al<=0||zl<=0)continue}yt.data=kt;const sl=Q.create(yt);if(!sl.isRenderable)continue;if(!Et&&kt.popupRef){const al=Wt.get(kt.popupRef);al?al.push(sl):Wt.set(kt.popupRef,[sl])}sl.annotationEditorType>0&&bt(this,bl).set(sl.data.id,sl);const ml=sl.render();kt.hidden&&(ml.style.visibility="hidden"),nl(this,Bt,Vs).call(this,ml,kt.id)}nl(this,hl,_e).call(this),yield this.l10n.translate(ct)})}update({viewport:nt}){const T=this.div;this.viewport=nt,(0,p.setLayerDimensions)(T,{rotation:nt.rotation}),nl(this,hl,_e).call(this),T.hidden=!1}getEditableAnnotations(){return Array.from(bt(this,bl).values())}getEditableAnnotation(nt){return bt(this,bl).get(nt)}}$t=new WeakMap,tl=new WeakMap,bl=new WeakMap,Bt=new WeakSet,Vs=function(nt,T){var Wt;const ct=nt.firstChild||nt;ct.id=`${M.AnnotationPrefix}${T}`,this.div.append(nt),(Wt=bt(this,$t))==null||Wt.moveElementInDOM(this.div,nt,ct,!1)},hl=new WeakSet,_e=function(){if(!bt(this,tl))return;const nt=this.div;for(const[T,ct]of bt(this,tl)){const Wt=nt.querySelector(`[data-annotation-id="${T}"]`);if(!Wt)continue;const{firstChild:yt}=Wt;yt?yt.nodeName==="CANVAS"?yt.replaceWith(ct):yt.before(ct):Wt.append(ct)}bt(this,tl).clear()},r.AnnotationLayer=S},(st,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.ColorConverters=void 0;function h(f){return Math.floor(Math.max(0,Math.min(1,f))*255).toString(16).padStart(2,"0")}function M(f){return Math.max(0,Math.min(255,255*f))}class p{static CMYK_G([B,O,F,L]){return["G",1-Math.min(1,.3*B+.59*F+.11*O+L)]}static G_CMYK([B]){return["CMYK",0,0,0,1-B]}static G_RGB([B]){return["RGB",B,B,B]}static G_rgb([B]){return B=M(B),[B,B,B]}static G_HTML([B]){const O=h(B);return`#${O}${O}${O}`}static RGB_G([B,O,F]){return["G",.3*B+.59*O+.11*F]}static RGB_rgb(B){return B.map(M)}static RGB_HTML(B){return`#${B.map(h).join("")}`}static T_HTML(){return"#00000000"}static T_rgb(){return[null]}static CMYK_RGB([B,O,F,L]){return["RGB",1-Math.min(1,B+L),1-Math.min(1,F+L),1-Math.min(1,O+L)]}static CMYK_rgb([B,O,F,L]){return[M(1-Math.min(1,B+L)),M(1-Math.min(1,F+L)),M(1-Math.min(1,O+L))]}static CMYK_HTML(B){const O=this.CMYK_RGB(B).slice(1);return this.RGB_HTML(O)}static RGB_CMYK([B,O,F]){const L=1-B,g=1-O,q=1-F,v=Math.min(L,g,q);return["CMYK",L,g,q,v]}}r.ColorConverters=p},(st,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.NullL10n=void 0,r.getL10nFallback=M;const h={of_pages:"of {{pagesCount}}",page_of_pages:"({{pageNumber}} of {{pagesCount}})",document_properties_kb:"{{size_kb}} KB ({{size_b}} bytes)",document_properties_mb:"{{size_mb}} MB ({{size_b}} bytes)",document_properties_date_string:"{{date}}, {{time}}",document_properties_page_size_unit_inches:"in",document_properties_page_size_unit_millimeters:"mm",document_properties_page_size_orientation_portrait:"portrait",document_properties_page_size_orientation_landscape:"landscape",document_properties_page_size_name_a3:"A3",document_properties_page_size_name_a4:"A4",document_properties_page_size_name_letter:"Letter",document_properties_page_size_name_legal:"Legal",document_properties_page_size_dimension_string:"{{width}} × {{height}} {{unit}} ({{orientation}})",document_properties_page_size_dimension_name_string:"{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})",document_properties_linearized_yes:"Yes",document_properties_linearized_no:"No",additional_layers:"Additional Layers",page_landmark:"Page {{page}}",thumb_page_title:"Page {{page}}",thumb_page_canvas:"Thumbnail of Page {{page}}",find_reached_top:"Reached top of document, continued from bottom",find_reached_bottom:"Reached end of document, continued from top","find_match_count[one]":"{{current}} of {{total}} match","find_match_count[other]":"{{current}} of {{total}} matches","find_match_count_limit[one]":"More than {{limit}} match","find_match_count_limit[other]":"More than {{limit}} matches",find_not_found:"Phrase not found",page_scale_width:"Page Width",page_scale_fit:"Page Fit",page_scale_auto:"Automatic Zoom",page_scale_actual:"Actual Size",page_scale_percent:"{{scale}}%",loading_error:"An error occurred while loading the PDF.",invalid_file_error:"Invalid or corrupted PDF file.",missing_file_error:"Missing PDF file.",unexpected_response_error:"Unexpected server response.",rendering_error:"An error occurred while rendering the page.",annotation_date_string:"{{date}}, {{time}}",printing_not_supported:"Warning: Printing is not fully supported by this browser.",printing_not_ready:"Warning: The PDF is not fully loaded for printing.",web_fonts_disabled:"Web fonts are disabled: unable to use embedded PDF fonts.",free_text2_default_content:"Start typing…",editor_free_text2_aria_label:"Text Editor",editor_ink2_aria_label:"Draw Editor",editor_ink_canvas_aria_label:"User-created image",editor_alt_text_button_label:"Alt text",editor_alt_text_edit_button_label:"Edit alt text",editor_alt_text_decorative_tooltip:"Marked as decorative"};h.print_progress_percent="{{progress}}%";function M(O,F){switch(O){case"find_match_count":O=`find_match_count[${F.total===1?"one":"other"}]`;break;case"find_match_count_limit":O=`find_match_count_limit[${F.limit===1?"one":"other"}]`;break}return h[O]||""}function p(O,F){return F?O.replaceAll(/\{\{\s*(\w+)\s*\}\}/g,(L,g)=>g in F?F[g]:"{{"+g+"}}"):O}const f={getLanguage(){return Sl(this,null,function*(){return"en-us"})},getDirection(){return Sl(this,null,function*(){return"ltr"})},get(g){return Sl(this,arguments,function*(O,F=null,L=M(O,F)){return p(L,F)})},translate(O){return Sl(this,null,function*(){})}};r.NullL10n=f},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.XfaLayer=void 0;var M=h(25);class p{static setupStorage(B,O,F,L,g){const q=L.getValue(O,{value:null});switch(F.name){case"textarea":if(q.value!==null&&(B.textContent=q.value),g==="print")break;B.addEventListener("input",v=>{L.setValue(O,{value:v.target.value})});break;case"input":if(F.attributes.type==="radio"||F.attributes.type==="checkbox"){if(q.value===F.attributes.xfaOn?B.setAttribute("checked",!0):q.value===F.attributes.xfaOff&&B.removeAttribute("checked"),g==="print")break;B.addEventListener("change",v=>{L.setValue(O,{value:v.target.checked?v.target.getAttribute("xfaOn"):v.target.getAttribute("xfaOff")})})}else{if(q.value!==null&&B.setAttribute("value",q.value),g==="print")break;B.addEventListener("input",v=>{L.setValue(O,{value:v.target.value})})}break;case"select":if(q.value!==null){B.setAttribute("value",q.value);for(const v of F.children)v.attributes.value===q.value?v.attributes.selected=!0:v.attributes.hasOwnProperty("selected")&&delete v.attributes.selected}B.addEventListener("input",v=>{const Q=v.target.options,R=Q.selectedIndex===-1?"":Q[Q.selectedIndex].value;L.setValue(O,{value:R})});break}}static setAttributes({html:B,element:O,storage:F=null,intent:L,linkService:g}){const{attributes:q}=O,v=B instanceof HTMLAnchorElement;q.type==="radio"&&(q.name=`${q.name}-${L}`);for(const[Q,R]of Object.entries(q))if(R!=null)switch(Q){case"class":R.length&&B.setAttribute(Q,R.join(" "));break;case"dataId":break;case"id":B.setAttribute("data-element-id",R);break;case"style":Object.assign(B.style,R);break;case"textContent":B.textContent=R;break;default:(!v||Q!=="href"&&Q!=="newWindow")&&B.setAttribute(Q,R)}v&&g.addLinkAttributes(B,q.href,q.newWindow),F&&q.dataId&&this.setupStorage(B,q.dataId,O,F)}static render(B){var j;const O=B.annotationStorage,F=B.linkService,L=B.xfaHtml,g=B.intent||"display",q=document.createElement(L.name);L.attributes&&this.setAttributes({html:q,element:L,intent:g,linkService:F});const v=[[L,-1,q]],Q=B.div;if(Q.append(q),B.viewport){const I=`matrix(${B.viewport.transform.join(",")})`;Q.style.transform=I}g!=="richText"&&Q.setAttribute("class","xfaLayer xfaFont");const R=[];for(;v.length>0;){const[I,k,C]=v.at(-1);if(k+1===I.children.length){v.pop();continue}const U=I.children[++v.at(-1)[1]];if(U===null)continue;const{name:K}=U;if(K==="#text"){const m=document.createTextNode(U.value);R.push(m),C.append(m);continue}const u=(j=U==null?void 0:U.attributes)!=null&&j.xmlns?document.createElementNS(U.attributes.xmlns,K):document.createElement(K);if(C.append(u),U.attributes&&this.setAttributes({html:u,element:U,storage:O,intent:g,linkService:F}),U.children&&U.children.length>0)v.push([U,-1,u]);else if(U.value){const m=document.createTextNode(U.value);M.XfaText.shouldBuildText(K)&&R.push(m),u.append(m)}}for(const I of Q.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))I.setAttribute("readOnly",!0);return{textDivs:R}}static update(B){const O=`matrix(${B.viewport.transform.join(",")})`;B.div.style.transform=O,B.div.hidden=!1}}r.XfaLayer=p},(st,r,h)=>{var L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,Is,P,zs,dt,Rs,xt,Ss,Nt,qe,Gt,ws,Ut,$e,Ht,xs,at,ks,w,gs,J,Ds,et,js,Mt,Pl,gt,ts,Dt,Me,vt,re,ol,Al,_t,ls,wt,Ne,Ct,Cs,cl,es,Yl,Fs,Tl,Js,Ll,ss,Qt,Xe,ut,_l;Object.defineProperty(r,"__esModule",{value:!0}),r.InkEditor=void 0;var M=h(1),p=h(4),f=h(29),B=h(6),O=h(5);const jt=class jt extends p.AnnotationEditor{constructor(Yt){super(vl(El({},Yt),{name:"inkEditor"}));ll(this,_);ll(this,P);ll(this,dt);ll(this,xt);ll(this,Nt);ll(this,Gt);ll(this,Ut);ll(this,Ht);ll(this,at);ll(this,w);ll(this,J);ll(this,et);ll(this,Mt);ll(this,gt);ll(this,Dt);ll(this,vt);ll(this,ol);ll(this,_t);ll(this,wt);ll(this,Tl);ll(this,Ll);ll(this,Qt);ll(this,ut);ll(this,L,0);ll(this,g,0);ll(this,q,this.canvasPointermove.bind(this));ll(this,v,this.canvasPointerleave.bind(this));ll(this,Q,this.canvasPointerup.bind(this));ll(this,R,this.canvasPointerdown.bind(this));ll(this,j,new Path2D);ll(this,I,!1);ll(this,k,!1);ll(this,C,!1);ll(this,U,null);ll(this,K,0);ll(this,u,0);ll(this,m,null);this.color=Yt.color||null,this.thickness=Yt.thickness||null,this.opacity=Yt.opacity||null,this.paths=[],this.bezierPath2D=[],this.allRawPaths=[],this.currentPath=[],this.scaleFactor=1,this.translationX=this.translationY=0,this.x=0,this.y=0,this._willKeepAspectRatio=!0}static initialize(Yt){p.AnnotationEditor.initialize(Yt,{strings:["editor_ink_canvas_aria_label","editor_ink2_aria_label"]})}static updateDefaultParams(Yt,Kt){switch(Yt){case M.AnnotationEditorParamsType.INK_THICKNESS:jt._defaultThickness=Kt;break;case M.AnnotationEditorParamsType.INK_COLOR:jt._defaultColor=Kt;break;case M.AnnotationEditorParamsType.INK_OPACITY:jt._defaultOpacity=Kt/100;break}}updateParams(Yt,Kt){switch(Yt){case M.AnnotationEditorParamsType.INK_THICKNESS:nl(this,_,Is).call(this,Kt);break;case M.AnnotationEditorParamsType.INK_COLOR:nl(this,P,zs).call(this,Kt);break;case M.AnnotationEditorParamsType.INK_OPACITY:nl(this,dt,Rs).call(this,Kt);break}}static get defaultPropertiesToUpdate(){return[[M.AnnotationEditorParamsType.INK_THICKNESS,jt._defaultThickness],[M.AnnotationEditorParamsType.INK_COLOR,jt._defaultColor||p.AnnotationEditor._defaultLineColor],[M.AnnotationEditorParamsType.INK_OPACITY,Math.round(jt._defaultOpacity*100)]]}get propertiesToUpdate(){var Yt;return[[M.AnnotationEditorParamsType.INK_THICKNESS,this.thickness||jt._defaultThickness],[M.AnnotationEditorParamsType.INK_COLOR,this.color||jt._defaultColor||p.AnnotationEditor._defaultLineColor],[M.AnnotationEditorParamsType.INK_OPACITY,Math.round(100*((Yt=this.opacity)!=null?Yt:jt._defaultOpacity))]]}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(this.canvas||(nl(this,Dt,Me).call(this),nl(this,vt,re).call(this)),this.isAttachedToDOM||(this.parent.add(this),nl(this,ol,Al).call(this)),nl(this,ut,_l).call(this)))}remove(){this.canvas!==null&&(this.isEmpty()||this.commit(),this.canvas.width=this.canvas.height=0,this.canvas.remove(),this.canvas=null,bt(this,U).disconnect(),ul(this,U,null),super.remove())}setParent(Yt){!this.parent&&Yt?this._uiManager.removeShouldRescale(this):this.parent&&Yt===null&&this._uiManager.addShouldRescale(this),super.setParent(Yt)}onScaleChanging(){const[Yt,Kt]=this.parentDimensions,$t=this.width*Yt,tl=this.height*Kt;this.setDimensions($t,tl)}enableEditMode(){bt(this,I)||this.canvas===null||(super.enableEditMode(),this._isDraggable=!1,this.canvas.addEventListener("pointerdown",bt(this,R)))}disableEditMode(){!this.isInEditMode()||this.canvas===null||(super.disableEditMode(),this._isDraggable=!this.isEmpty(),this.div.classList.remove("editing"),this.canvas.removeEventListener("pointerdown",bt(this,R)))}onceAdded(){this._isDraggable=!this.isEmpty()}isEmpty(){return this.paths.length===0||this.paths.length===1&&this.paths[0].length===0}commit(){bt(this,I)||(super.commit(),this.isEditing=!1,this.disableEditMode(),this.setInForeground(),ul(this,I,!0),this.div.classList.add("disabled"),nl(this,ut,_l).call(this,!0),this.makeResizable(),this.parent.addInkEditorIfNeeded(!0),this.moveInDOM(),this.div.focus({preventScroll:!0}))}focusin(Yt){this._focusEventsAllowed&&(super.focusin(Yt),this.enableEditMode())}canvasPointerdown(Yt){Yt.button!==0||!this.isInEditMode()||bt(this,I)||(this.setInForeground(),Yt.preventDefault(),Yt.type!=="mouse"&&this.div.focus(),nl(this,Gt,ws).call(this,Yt.offsetX,Yt.offsetY))}canvasPointermove(Yt){Yt.preventDefault(),nl(this,Ut,$e).call(this,Yt.offsetX,Yt.offsetY)}canvasPointerup(Yt){Yt.preventDefault(),nl(this,gt,ts).call(this,Yt)}canvasPointerleave(Yt){nl(this,gt,ts).call(this,Yt)}get isResizable(){return!this.isEmpty()&&bt(this,I)}render(){if(this.div)return this.div;let Yt,Kt;this.width&&(Yt=this.x,Kt=this.y),super.render(),p.AnnotationEditor._l10nPromise.get("editor_ink2_aria_label").then(rl=>{var hl;return(hl=this.div)==null?void 0:hl.setAttribute("aria-label",rl)});const[$t,tl,bl,Bt]=nl(this,xt,Ss).call(this);if(this.setAt($t,tl,0,0),this.setDims(bl,Bt),nl(this,Dt,Me).call(this),this.width){const[rl,hl]=this.parentDimensions;this.setAspectRatio(this.width*rl,this.height*hl),this.setAt(Yt*rl,Kt*hl,this.width*rl,this.height*hl),ul(this,C,!0),nl(this,ol,Al).call(this),this.setDims(this.width*rl,this.height*hl),nl(this,Mt,Pl).call(this),this.div.classList.add("disabled")}else this.div.classList.add("editing"),this.enableEditMode();return nl(this,vt,re).call(this),this.div}setDimensions(Yt,Kt){const $t=Math.round(Yt),tl=Math.round(Kt);if(bt(this,K)===$t&&bt(this,u)===tl)return;ul(this,K,$t),ul(this,u,tl),this.canvas.style.visibility="hidden";const[bl,Bt]=this.parentDimensions;this.width=Yt/bl,this.height=Kt/Bt,this.fixAndSetPosition(),bt(this,I)&&nl(this,_t,ls).call(this,Yt,Kt),nl(this,ol,Al).call(this),nl(this,Mt,Pl).call(this),this.canvas.style.visibility="visible",this.fixDims()}static deserialize(Yt,Kt,$t){var yt,kt,Et;if(Yt instanceof f.InkAnnotationElement)return null;const tl=super.deserialize(Yt,Kt,$t);tl.thickness=Yt.thickness,tl.color=M.Util.makeHexColor(...Yt.color),tl.opacity=Yt.opacity;const[bl,Bt]=tl.pageDimensions,rl=tl.width*bl,hl=tl.height*Bt,Il=tl.parentScale,Wl=Yt.thickness/2;ul(tl,I,!0),ul(tl,K,Math.round(rl)),ul(tl,u,Math.round(hl));const{paths:nt,rect:T,rotation:ct}=Yt;for(let{bezier:sl}of nt){sl=nl(yt=jt,Yl,Fs).call(yt,sl,T,ct);const ml=[];tl.paths.push(ml);let al=Il*(sl[0]-Wl),zl=Il*(sl[1]-Wl);for(let Nl=2,pl=sl.length;Nl<pl;Nl+=6){const Rl=Il*(sl[Nl]-Wl),wl=Il*(sl[Nl+1]-Wl),xl=Il*(sl[Nl+2]-Wl),gl=Il*(sl[Nl+3]-Wl),kl=Il*(sl[Nl+4]-Wl),jl=Il*(sl[Nl+5]-Wl);ml.push([[al,zl],[Rl,wl],[xl,gl],[kl,jl]]),al=kl,zl=jl}const Gl=nl(this,Ct,Cs).call(this,ml);tl.bezierPath2D.push(Gl)}const Wt=nl(kt=tl,Ll,ss).call(kt);return ul(tl,g,Math.max(p.AnnotationEditor.MIN_SIZE,Wt[2]-Wt[0])),ul(tl,L,Math.max(p.AnnotationEditor.MIN_SIZE,Wt[3]-Wt[1])),nl(Et=tl,_t,ls).call(Et,rl,hl),tl}serialize(){if(this.isEmpty())return null;const Yt=this.getRect(0,0),Kt=p.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);return{annotationType:M.AnnotationEditorType.INK,color:Kt,thickness:this.thickness,opacity:this.opacity,paths:nl(this,Tl,Js).call(this,this.scaleFactor/this.parentScale,this.translationX,this.translationY,Yt),pageIndex:this.pageIndex,rect:Yt,rotation:this.rotation,structTreeParentId:this._structTreeParentId}}};L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakMap,K=new WeakMap,u=new WeakMap,m=new WeakMap,_=new WeakSet,Is=function(Yt){const Kt=this.thickness;this.addCommands({cmd:()=>{this.thickness=Yt,nl(this,ut,_l).call(this)},undo:()=>{this.thickness=Kt,nl(this,ut,_l).call(this)},mustExec:!0,type:M.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})},P=new WeakSet,zs=function(Yt){const Kt=this.color;this.addCommands({cmd:()=>{this.color=Yt,nl(this,Mt,Pl).call(this)},undo:()=>{this.color=Kt,nl(this,Mt,Pl).call(this)},mustExec:!0,type:M.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})},dt=new WeakSet,Rs=function(Yt){Yt/=100;const Kt=this.opacity;this.addCommands({cmd:()=>{this.opacity=Yt,nl(this,Mt,Pl).call(this)},undo:()=>{this.opacity=Kt,nl(this,Mt,Pl).call(this)},mustExec:!0,type:M.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})},xt=new WeakSet,Ss=function(){const{parentRotation:Yt,parentDimensions:[Kt,$t]}=this;switch(Yt){case 90:return[0,$t,$t,Kt];case 180:return[Kt,$t,Kt,$t];case 270:return[Kt,0,$t,Kt];default:return[0,0,Kt,$t]}},Nt=new WeakSet,qe=function(){const{ctx:Yt,color:Kt,opacity:$t,thickness:tl,parentScale:bl,scaleFactor:Bt}=this;Yt.lineWidth=tl*bl/Bt,Yt.lineCap="round",Yt.lineJoin="round",Yt.miterLimit=10,Yt.strokeStyle=`${Kt}${(0,O.opacityToHex)($t)}`},Gt=new WeakSet,ws=function(Yt,Kt){var $t;this.canvas.addEventListener("contextmenu",B.noContextMenu),this.canvas.addEventListener("pointerleave",bt(this,v)),this.canvas.addEventListener("pointermove",bt(this,q)),this.canvas.addEventListener("pointerup",bt(this,Q)),this.canvas.removeEventListener("pointerdown",bt(this,R)),this.isEditing=!0,bt(this,C)||(ul(this,C,!0),nl(this,ol,Al).call(this),this.thickness||(this.thickness=jt._defaultThickness),this.color||(this.color=jt._defaultColor||p.AnnotationEditor._defaultLineColor),($t=this.opacity)!=null||(this.opacity=jt._defaultOpacity)),this.currentPath.push([Yt,Kt]),ul(this,k,!1),nl(this,Nt,qe).call(this),ul(this,m,()=>{nl(this,w,gs).call(this),bt(this,m)&&window.requestAnimationFrame(bt(this,m))}),window.requestAnimationFrame(bt(this,m))},Ut=new WeakSet,$e=function(Yt,Kt){const[$t,tl]=this.currentPath.at(-1);if(this.currentPath.length>1&&Yt===$t&&Kt===tl)return;const bl=this.currentPath;let Bt=bt(this,j);if(bl.push([Yt,Kt]),ul(this,k,!0),bl.length<=2){Bt.moveTo(...bl[0]),Bt.lineTo(Yt,Kt);return}bl.length===3&&(ul(this,j,Bt=new Path2D),Bt.moveTo(...bl[0])),nl(this,J,Ds).call(this,Bt,...bl.at(-3),...bl.at(-2),Yt,Kt)},Ht=new WeakSet,xs=function(){if(this.currentPath.length===0)return;const Yt=this.currentPath.at(-1);bt(this,j).lineTo(...Yt)},at=new WeakSet,ks=function(Yt,Kt){ul(this,m,null),Yt=Math.min(Math.max(Yt,0),this.canvas.width),Kt=Math.min(Math.max(Kt,0),this.canvas.height),nl(this,Ut,$e).call(this,Yt,Kt),nl(this,Ht,xs).call(this);let $t;if(this.currentPath.length!==1)$t=nl(this,et,js).call(this);else{const hl=[Yt,Kt];$t=[[hl,hl.slice(),hl.slice(),hl]]}const tl=bt(this,j),bl=this.currentPath;this.currentPath=[],ul(this,j,new Path2D);const Bt=()=>{this.allRawPaths.push(bl),this.paths.push($t),this.bezierPath2D.push(tl),this.rebuild()},rl=()=>{this.allRawPaths.pop(),this.paths.pop(),this.bezierPath2D.pop(),this.paths.length===0?this.remove():(this.canvas||(nl(this,Dt,Me).call(this),nl(this,vt,re).call(this)),nl(this,ut,_l).call(this))};this.addCommands({cmd:Bt,undo:rl,mustExec:!0})},w=new WeakSet,gs=function(){if(!bt(this,k))return;ul(this,k,!1);const Yt=Math.ceil(this.thickness*this.parentScale),Kt=this.currentPath.slice(-3),$t=Kt.map(Bt=>Bt[0]),tl=Kt.map(Bt=>Bt[1]);Math.min(...$t)-Yt,Math.max(...$t)+Yt,Math.min(...tl)-Yt,Math.max(...tl)+Yt;const{ctx:bl}=this;bl.save(),bl.clearRect(0,0,this.canvas.width,this.canvas.height);for(const Bt of this.bezierPath2D)bl.stroke(Bt);bl.stroke(bt(this,j)),bl.restore()},J=new WeakSet,Ds=function(Yt,Kt,$t,tl,bl,Bt,rl){const hl=(Kt+tl)/2,Il=($t+bl)/2,Wl=(tl+Bt)/2,nt=(bl+rl)/2;Yt.bezierCurveTo(hl+2*(tl-hl)/3,Il+2*(bl-Il)/3,Wl+2*(tl-Wl)/3,nt+2*(bl-nt)/3,Wl,nt)},et=new WeakSet,js=function(){const Yt=this.currentPath;if(Yt.length<=2)return[[Yt[0],Yt[0],Yt.at(-1),Yt.at(-1)]];const Kt=[];let $t,[tl,bl]=Yt[0];for($t=1;$t<Yt.length-2;$t++){const[T,ct]=Yt[$t],[Wt,yt]=Yt[$t+1],kt=(T+Wt)/2,Et=(ct+yt)/2,sl=[tl+2*(T-tl)/3,bl+2*(ct-bl)/3],ml=[kt+2*(T-kt)/3,Et+2*(ct-Et)/3];Kt.push([[tl,bl],sl,ml,[kt,Et]]),[tl,bl]=[kt,Et]}const[Bt,rl]=Yt[$t],[hl,Il]=Yt[$t+1],Wl=[tl+2*(Bt-tl)/3,bl+2*(rl-bl)/3],nt=[hl+2*(Bt-hl)/3,Il+2*(rl-Il)/3];return Kt.push([[tl,bl],Wl,nt,[hl,Il]]),Kt},Mt=new WeakSet,Pl=function(){if(this.isEmpty()){nl(this,wt,Ne).call(this);return}nl(this,Nt,qe).call(this);const{canvas:Yt,ctx:Kt}=this;Kt.setTransform(1,0,0,1,0,0),Kt.clearRect(0,0,Yt.width,Yt.height),nl(this,wt,Ne).call(this);for(const $t of this.bezierPath2D)Kt.stroke($t)},gt=new WeakSet,ts=function(Yt){this.canvas.removeEventListener("pointerleave",bt(this,v)),this.canvas.removeEventListener("pointermove",bt(this,q)),this.canvas.removeEventListener("pointerup",bt(this,Q)),this.canvas.addEventListener("pointerdown",bt(this,R)),setTimeout(()=>{this.canvas.removeEventListener("contextmenu",B.noContextMenu)},10),nl(this,at,ks).call(this,Yt.offsetX,Yt.offsetY),this.addToAnnotationStorage(),this.setInBackground()},Dt=new WeakSet,Me=function(){this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",p.AnnotationEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(Yt=>{var Kt;return(Kt=this.canvas)==null?void 0:Kt.setAttribute("aria-label",Yt)}),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")},vt=new WeakSet,re=function(){ul(this,U,new ResizeObserver(Yt=>{const Kt=Yt[0].contentRect;Kt.width&&Kt.height&&this.setDimensions(Kt.width,Kt.height)})),bt(this,U).observe(this.div)},ol=new WeakSet,Al=function(){if(!bt(this,C))return;const[Yt,Kt]=this.parentDimensions;this.canvas.width=Math.ceil(this.width*Yt),this.canvas.height=Math.ceil(this.height*Kt),nl(this,wt,Ne).call(this)},_t=new WeakSet,ls=function(Yt,Kt){const $t=nl(this,Qt,Xe).call(this),tl=(Yt-$t)/bt(this,g),bl=(Kt-$t)/bt(this,L);this.scaleFactor=Math.min(tl,bl)},wt=new WeakSet,Ne=function(){const Yt=nl(this,Qt,Xe).call(this)/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+Yt,this.translationY*this.scaleFactor+Yt)},Ct=new WeakSet,Cs=function(Yt){const Kt=new Path2D;for(let $t=0,tl=Yt.length;$t<tl;$t++){const[bl,Bt,rl,hl]=Yt[$t];$t===0&&Kt.moveTo(...bl),Kt.bezierCurveTo(Bt[0],Bt[1],rl[0],rl[1],hl[0],hl[1])}return Kt},cl=new WeakSet,es=function(Yt,Kt,$t){const[tl,bl,Bt,rl]=Kt;switch($t){case 0:for(let hl=0,Il=Yt.length;hl<Il;hl+=2)Yt[hl]+=tl,Yt[hl+1]=rl-Yt[hl+1];break;case 90:for(let hl=0,Il=Yt.length;hl<Il;hl+=2){const Wl=Yt[hl];Yt[hl]=Yt[hl+1]+tl,Yt[hl+1]=Wl+bl}break;case 180:for(let hl=0,Il=Yt.length;hl<Il;hl+=2)Yt[hl]=Bt-Yt[hl],Yt[hl+1]+=bl;break;case 270:for(let hl=0,Il=Yt.length;hl<Il;hl+=2){const Wl=Yt[hl];Yt[hl]=Bt-Yt[hl+1],Yt[hl+1]=rl-Wl}break;default:throw new Error("Invalid rotation")}return Yt},Yl=new WeakSet,Fs=function(Yt,Kt,$t){const[tl,bl,Bt,rl]=Kt;switch($t){case 0:for(let hl=0,Il=Yt.length;hl<Il;hl+=2)Yt[hl]-=tl,Yt[hl+1]=rl-Yt[hl+1];break;case 90:for(let hl=0,Il=Yt.length;hl<Il;hl+=2){const Wl=Yt[hl];Yt[hl]=Yt[hl+1]-bl,Yt[hl+1]=Wl-tl}break;case 180:for(let hl=0,Il=Yt.length;hl<Il;hl+=2)Yt[hl]=Bt-Yt[hl],Yt[hl+1]-=bl;break;case 270:for(let hl=0,Il=Yt.length;hl<Il;hl+=2){const Wl=Yt[hl];Yt[hl]=rl-Yt[hl+1],Yt[hl+1]=Bt-Wl}break;default:throw new Error("Invalid rotation")}return Yt},Tl=new WeakSet,Js=function(Yt,Kt,$t,tl){var Il,Wl;const bl=[],Bt=this.thickness/2,rl=Yt*Kt+Bt,hl=Yt*$t+Bt;for(const nt of this.paths){const T=[],ct=[];for(let Wt=0,yt=nt.length;Wt<yt;Wt++){const[kt,Et,sl,ml]=nt[Wt],al=Yt*kt[0]+rl,zl=Yt*kt[1]+hl,Gl=Yt*Et[0]+rl,Nl=Yt*Et[1]+hl,pl=Yt*sl[0]+rl,Rl=Yt*sl[1]+hl,wl=Yt*ml[0]+rl,xl=Yt*ml[1]+hl;Wt===0&&(T.push(al,zl),ct.push(al,zl)),T.push(Gl,Nl,pl,Rl,wl,xl),ct.push(Gl,Nl),Wt===yt-1&&ct.push(wl,xl)}bl.push({bezier:nl(Il=jt,cl,es).call(Il,T,tl,this.rotation),points:nl(Wl=jt,cl,es).call(Wl,ct,tl,this.rotation)})}return bl},Ll=new WeakSet,ss=function(){let Yt=1/0,Kt=-1/0,$t=1/0,tl=-1/0;for(const bl of this.paths)for(const[Bt,rl,hl,Il]of bl){const Wl=M.Util.bezierBoundingBox(...Bt,...rl,...hl,...Il);Yt=Math.min(Yt,Wl[0]),$t=Math.min($t,Wl[1]),Kt=Math.max(Kt,Wl[2]),tl=Math.max(tl,Wl[3])}return[Yt,$t,Kt,tl]},Qt=new WeakSet,Xe=function(){return bt(this,I)?Math.ceil(this.thickness*this.parentScale):0},ut=new WeakSet,_l=function(Yt=!1){if(this.isEmpty())return;if(!bt(this,I)){nl(this,Mt,Pl).call(this);return}const Kt=nl(this,Ll,ss).call(this),$t=nl(this,Qt,Xe).call(this);ul(this,g,Math.max(p.AnnotationEditor.MIN_SIZE,Kt[2]-Kt[0])),ul(this,L,Math.max(p.AnnotationEditor.MIN_SIZE,Kt[3]-Kt[1]));const tl=Math.ceil($t+bt(this,g)*this.scaleFactor),bl=Math.ceil($t+bt(this,L)*this.scaleFactor),[Bt,rl]=this.parentDimensions;this.width=tl/Bt,this.height=bl/rl,this.setAspectRatio(tl,bl);const hl=this.translationX,Il=this.translationY;this.translationX=-Kt[0],this.translationY=-Kt[1],nl(this,ol,Al).call(this),nl(this,Mt,Pl).call(this),ul(this,K,tl),ul(this,u,bl),this.setDims(tl,bl);const Wl=Yt?$t/this.scaleFactor/2:0;this.translate(hl-this.translationX-Wl,Il-this.translationY-Wl)},ll(jt,Ct),ll(jt,cl),ll(jt,Yl),Dl(jt,"_defaultColor",null),Dl(jt,"_defaultOpacity",1),Dl(jt,"_defaultThickness",1),Dl(jt,"_type","ink");let F=jt;r.InkEditor=F},(st,r,h)=>{var F,L,g,q,v,Q,R,j,I,k,C,de,K,ae,m,Ye,$,is,Zt,Os,It,Us,it,cs,zt,pe,Xt,Es;Object.defineProperty(r,"__esModule",{value:!0}),r.StampEditor=void 0;var M=h(1),p=h(4),f=h(6),B=h(29);const Vt=class Vt extends p.AnnotationEditor{constructor(at){super(vl(El({},at),{name:"stampEditor"}));ll(this,C);ll(this,K);ll(this,m);ll(this,$);ll(this,Zt);ll(this,It);ll(this,it);ll(this,zt);ll(this,Xt);ll(this,F,null);ll(this,L,null);ll(this,g,null);ll(this,q,null);ll(this,v,null);ll(this,Q,null);ll(this,R,null);ll(this,j,null);ll(this,I,!1);ll(this,k,!1);ul(this,q,at.bitmapUrl),ul(this,v,at.bitmapFile)}static initialize(at){p.AnnotationEditor.initialize(at)}static get supportedTypes(){const at=["apng","avif","bmp","gif","jpeg","png","svg+xml","webp","x-icon"];return(0,M.shadow)(this,"supportedTypes",at.map(S=>`image/${S}`))}static get supportedTypesStr(){return(0,M.shadow)(this,"supportedTypesStr",this.supportedTypes.join(","))}static isHandlingMimeForPasting(at){return this.supportedTypes.includes(at)}static paste(at,S){S.pasteEditor(M.AnnotationEditorType.STAMP,{bitmapFile:at.getAsFile()})}remove(){var at,S;bt(this,L)&&(ul(this,F,null),this._uiManager.imageManager.deleteId(bt(this,L)),(at=bt(this,Q))==null||at.remove(),ul(this,Q,null),(S=bt(this,R))==null||S.disconnect(),ul(this,R,null)),super.remove()}rebuild(){if(!this.parent){bt(this,L)&&nl(this,m,Ye).call(this);return}super.rebuild(),this.div!==null&&(bt(this,L)&&nl(this,m,Ye).call(this),this.isAttachedToDOM||this.parent.add(this))}onceAdded(){this._isDraggable=!0,this.div.focus()}isEmpty(){return!(bt(this,g)||bt(this,F)||bt(this,q)||bt(this,v))}get isResizable(){return!0}render(){if(this.div)return this.div;let at,S;if(this.width&&(at=this.x,S=this.y),super.render(),this.div.hidden=!0,bt(this,F)?nl(this,$,is).call(this):nl(this,m,Ye).call(this),this.width){const[w,X]=this.parentDimensions;this.setAt(at*w,S*X,this.width*w,this.height*X)}return this.div}static deserialize(at,S,w){if(at instanceof B.StampAnnotationElement)return null;const X=super.deserialize(at,S,w),{rect:J,bitmapUrl:H,bitmapId:et,isSvg:lt,accessibilityData:Mt}=at;et&&w.imageManager.isValidId(et)?ul(X,L,et):ul(X,q,H),ul(X,I,lt);const[Rt,gt]=X.pageDimensions;return X.width=(J[2]-J[0])/Rt,X.height=(J[3]-J[1])/gt,Mt&&(X.altTextData=Mt),X}serialize(at=!1,S=null){if(this.isEmpty())return null;const w={annotationType:M.AnnotationEditorType.STAMP,bitmapId:bt(this,L),pageIndex:this.pageIndex,rect:this.getRect(0,0),rotation:this.rotation,isSvg:bt(this,I),structTreeParentId:this._structTreeParentId};if(at)return w.bitmapUrl=nl(this,zt,pe).call(this,!0),w.accessibilityData=this.altTextData,w;const{decorative:X,altText:J}=this.altTextData;if(!X&&J&&(w.accessibilityData={type:"Figure",alt:J}),S===null)return w;S.stamps||(S.stamps=new Map);const H=bt(this,I)?(w.rect[2]-w.rect[0])*(w.rect[3]-w.rect[1]):null;if(!S.stamps.has(bt(this,L)))S.stamps.set(bt(this,L),{area:H,serialized:w}),w.bitmap=nl(this,zt,pe).call(this,!1);else if(bt(this,I)){const et=S.stamps.get(bt(this,L));H>et.area&&(et.area=H,et.serialized.bitmap.close(),et.serialized.bitmap=nl(this,zt,pe).call(this,!1))}return w}};F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakSet,de=function(at,S=!1){if(!at){this.remove();return}ul(this,F,at.bitmap),S||(ul(this,L,at.id),ul(this,I,at.isSvg)),nl(this,$,is).call(this)},K=new WeakSet,ae=function(){ul(this,g,null),this._uiManager.enableWaiting(!1),bt(this,Q)&&this.div.focus()},m=new WeakSet,Ye=function(){if(bt(this,L)){this._uiManager.enableWaiting(!0),this._uiManager.imageManager.getFromId(bt(this,L)).then(S=>nl(this,C,de).call(this,S,!0)).finally(()=>nl(this,K,ae).call(this));return}if(bt(this,q)){const S=bt(this,q);ul(this,q,null),this._uiManager.enableWaiting(!0),ul(this,g,this._uiManager.imageManager.getFromUrl(S).then(w=>nl(this,C,de).call(this,w)).finally(()=>nl(this,K,ae).call(this)));return}if(bt(this,v)){const S=bt(this,v);ul(this,v,null),this._uiManager.enableWaiting(!0),ul(this,g,this._uiManager.imageManager.getFromFile(S).then(w=>nl(this,C,de).call(this,w)).finally(()=>nl(this,K,ae).call(this)));return}const at=document.createElement("input");at.type="file",at.accept=Vt.supportedTypesStr,ul(this,g,new Promise(S=>{at.addEventListener("change",()=>Sl(this,null,function*(){if(!at.files||at.files.length===0)this.remove();else{this._uiManager.enableWaiting(!0);const w=yield this._uiManager.imageManager.getFromFile(at.files[0]);nl(this,C,de).call(this,w)}S()})),at.addEventListener("cancel",()=>{this.remove(),S()})}).finally(()=>nl(this,K,ae).call(this))),at.click()},$=new WeakSet,is=function(){const{div:at}=this;let{width:S,height:w}=bt(this,F);const[X,J]=this.pageDimensions,H=.75;if(this.width)S=this.width*X,w=this.height*J;else if(S>H*X||w>H*J){const Rt=Math.min(H*X/S,H*J/w);S*=Rt,w*=Rt}const[et,lt]=this.parentDimensions;this.setDims(S*et/X,w*lt/J),this._uiManager.enableWaiting(!1);const Mt=ul(this,Q,document.createElement("canvas"));at.append(Mt),at.hidden=!1,nl(this,it,cs).call(this,S,w),nl(this,Xt,Es).call(this),bt(this,k)||(this.parent.addUndoableEditor(this),ul(this,k,!0)),this._uiManager._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",subtype:this.editorType,data:{action:"inserted_image"}}}),this.addAltTextButton()},Zt=new WeakSet,Os=function(at,S){var H;const[w,X]=this.parentDimensions;this.width=at/w,this.height=S/X,this.setDims(at,S),(H=this._initialOptions)!=null&&H.isCentered?this.center():this.fixAndSetPosition(),this._initialOptions=null,bt(this,j)!==null&&clearTimeout(bt(this,j)),ul(this,j,setTimeout(()=>{ul(this,j,null),nl(this,it,cs).call(this,at,S)},200))},It=new WeakSet,Us=function(at,S){const{width:w,height:X}=bt(this,F);let J=w,H=X,et=bt(this,F);for(;J>2*at||H>2*S;){const lt=J,Mt=H;J>2*at&&(J=J>=16384?Math.floor(J/2)-1:Math.ceil(J/2)),H>2*S&&(H=H>=16384?Math.floor(H/2)-1:Math.ceil(H/2));const Rt=new OffscreenCanvas(J,H);Rt.getContext("2d").drawImage(et,0,0,lt,Mt,0,0,J,H),et=Rt.transferToImageBitmap()}return et},it=new WeakSet,cs=function(at,S){at=Math.ceil(at),S=Math.ceil(S);const w=bt(this,Q);if(!w||w.width===at&&w.height===S)return;w.width=at,w.height=S;const X=bt(this,I)?bt(this,F):nl(this,It,Us).call(this,at,S),J=w.getContext("2d");J.filter=this._uiManager.hcmFilter,J.drawImage(X,0,0,X.width,X.height,0,0,at,S)},zt=new WeakSet,pe=function(at){if(at){if(bt(this,I)){const X=this._uiManager.imageManager.getSvgUrl(bt(this,L));if(X)return X}const S=document.createElement("canvas");return{width:S.width,height:S.height}=bt(this,F),S.getContext("2d").drawImage(bt(this,F),0,0),S.toDataURL()}if(bt(this,I)){const[S,w]=this.pageDimensions,X=Math.round(this.width*S*f.PixelsPerInch.PDF_TO_CSS_UNITS),J=Math.round(this.height*w*f.PixelsPerInch.PDF_TO_CSS_UNITS),H=new OffscreenCanvas(X,J);return H.getContext("2d").drawImage(bt(this,F),0,0,bt(this,F).width,bt(this,F).height,0,0,X,J),H.transferToImageBitmap()}return structuredClone(bt(this,F))},Xt=new WeakSet,Es=function(){ul(this,R,new ResizeObserver(at=>{const S=at[0].contentRect;S.width&&S.height&&nl(this,Zt,Os).call(this,S.width,S.height)})),bt(this,R).observe(this.div)},Dl(Vt,"_type","stamp");let O=Vt;r.StampEditor=O}],__webpack_module_cache__={};function __w_pdfjs_require__(st){var r=__webpack_module_cache__[st];if(r!==void 0)return r.exports;var h=__webpack_module_cache__[st]={exports:{}};return __webpack_modules__[st](h,h.exports,__w_pdfjs_require__),h.exports}var __webpack_exports__={};return(()=>{var st=__webpack_exports__;Object.defineProperty(st,"__esModule",{value:!0}),Object.defineProperty(st,"AbortException",{enumerable:!0,get:function(){return r.AbortException}}),Object.defineProperty(st,"AnnotationEditorLayer",{enumerable:!0,get:function(){return f.AnnotationEditorLayer}}),Object.defineProperty(st,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return r.AnnotationEditorParamsType}}),Object.defineProperty(st,"AnnotationEditorType",{enumerable:!0,get:function(){return r.AnnotationEditorType}}),Object.defineProperty(st,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return B.AnnotationEditorUIManager}}),Object.defineProperty(st,"AnnotationLayer",{enumerable:!0,get:function(){return O.AnnotationLayer}}),Object.defineProperty(st,"AnnotationMode",{enumerable:!0,get:function(){return r.AnnotationMode}}),Object.defineProperty(st,"CMapCompressionType",{enumerable:!0,get:function(){return r.CMapCompressionType}}),Object.defineProperty(st,"DOMSVGFactory",{enumerable:!0,get:function(){return M.DOMSVGFactory}}),Object.defineProperty(st,"FeatureTest",{enumerable:!0,get:function(){return r.FeatureTest}}),Object.defineProperty(st,"GlobalWorkerOptions",{enumerable:!0,get:function(){return F.GlobalWorkerOptions}}),Object.defineProperty(st,"ImageKind",{enumerable:!0,get:function(){return r.ImageKind}}),Object.defineProperty(st,"InvalidPDFException",{enumerable:!0,get:function(){return r.InvalidPDFException}}),Object.defineProperty(st,"MissingPDFException",{enumerable:!0,get:function(){return r.MissingPDFException}}),Object.defineProperty(st,"OPS",{enumerable:!0,get:function(){return r.OPS}}),Object.defineProperty(st,"PDFDataRangeTransport",{enumerable:!0,get:function(){return h.PDFDataRangeTransport}}),Object.defineProperty(st,"PDFDateString",{enumerable:!0,get:function(){return M.PDFDateString}}),Object.defineProperty(st,"PDFWorker",{enumerable:!0,get:function(){return h.PDFWorker}}),Object.defineProperty(st,"PasswordResponses",{enumerable:!0,get:function(){return r.PasswordResponses}}),Object.defineProperty(st,"PermissionFlag",{enumerable:!0,get:function(){return r.PermissionFlag}}),Object.defineProperty(st,"PixelsPerInch",{enumerable:!0,get:function(){return M.PixelsPerInch}}),Object.defineProperty(st,"PromiseCapability",{enumerable:!0,get:function(){return r.PromiseCapability}}),Object.defineProperty(st,"RenderingCancelledException",{enumerable:!0,get:function(){return M.RenderingCancelledException}}),Object.defineProperty(st,"SVGGraphics",{enumerable:!0,get:function(){return h.SVGGraphics}}),Object.defineProperty(st,"UnexpectedResponseException",{enumerable:!0,get:function(){return r.UnexpectedResponseException}}),Object.defineProperty(st,"Util",{enumerable:!0,get:function(){return r.Util}}),Object.defineProperty(st,"VerbosityLevel",{enumerable:!0,get:function(){return r.VerbosityLevel}}),Object.defineProperty(st,"XfaLayer",{enumerable:!0,get:function(){return L.XfaLayer}}),Object.defineProperty(st,"build",{enumerable:!0,get:function(){return h.build}}),Object.defineProperty(st,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return r.createValidAbsoluteUrl}}),Object.defineProperty(st,"getDocument",{enumerable:!0,get:function(){return h.getDocument}}),Object.defineProperty(st,"getFilenameFromUrl",{enumerable:!0,get:function(){return M.getFilenameFromUrl}}),Object.defineProperty(st,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return M.getPdfFilenameFromUrl}}),Object.defineProperty(st,"getXfaPageViewport",{enumerable:!0,get:function(){return M.getXfaPageViewport}}),Object.defineProperty(st,"isDataScheme",{enumerable:!0,get:function(){return M.isDataScheme}}),Object.defineProperty(st,"isPdfFile",{enumerable:!0,get:function(){return M.isPdfFile}}),Object.defineProperty(st,"loadScript",{enumerable:!0,get:function(){return M.loadScript}}),Object.defineProperty(st,"noContextMenu",{enumerable:!0,get:function(){return M.noContextMenu}}),Object.defineProperty(st,"normalizeUnicode",{enumerable:!0,get:function(){return r.normalizeUnicode}}),Object.defineProperty(st,"renderTextLayer",{enumerable:!0,get:function(){return p.renderTextLayer}}),Object.defineProperty(st,"setLayerDimensions",{enumerable:!0,get:function(){return M.setLayerDimensions}}),Object.defineProperty(st,"shadow",{enumerable:!0,get:function(){return r.shadow}}),Object.defineProperty(st,"updateTextLayer",{enumerable:!0,get:function(){return p.updateTextLayer}}),Object.defineProperty(st,"version",{enumerable:!0,get:function(){return h.version}});var r=__w_pdfjs_require__(1),h=__w_pdfjs_require__(2),M=__w_pdfjs_require__(6),p=__w_pdfjs_require__(26),f=__w_pdfjs_require__(27),B=__w_pdfjs_require__(5),O=__w_pdfjs_require__(29),F=__w_pdfjs_require__(14),L=__w_pdfjs_require__(32)})(),__webpack_exports__})())})(pdf$1);var pdfExports$1=pdf$1.exports,ZZ=Object.defineProperty,sZ=(st,r,h)=>r in st?ZZ(st,r,{enumerable:!0,configurable:!0,writable:!0,value:h}):st[r]=h,tt=(st,r,h)=>(sZ(st,typeof r!="symbol"?r+"":r,h),h),ft=(st,r,h)=>{if(!r.has(st))throw TypeError("Cannot "+h)},t=(st,r,h)=>(ft(st,r,"read from private field"),h?h.call(st):r.get(st)),E=(st,r,h)=>{if(r.has(st))throw TypeError("Cannot add the same private member more than once");r instanceof WeakSet?r.add(st):r.set(st,h)},Zl=(st,r,h,M)=>(ft(st,r,"write to private field"),M?M.call(st,h):r.set(st,h),h),mt=(st,r,h,M)=>({set _(p){Zl(st,r,p,h)},get _(){return t(st,r,M)}}),A=(st,r,h)=>(ft(st,r,"access private method"),h),commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getAugmentedNamespace(st){if(st.__esModule)return st;var r=st.default;if(typeof r=="function"){var h=function M(){return this instanceof M?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)};h.prototype=r.prototype}else h={};return Object.defineProperty(h,"__esModule",{value:!0}),Object.keys(st).forEach(function(M){var p=Object.getOwnPropertyDescriptor(st,M);Object.defineProperty(h,M,p.get?p:{enumerable:!0,get:function(){return st[M]}})}),h}function commonjsRequire(st){throw new Error('Could not dynamically require "'+st+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var pdf={exports:{}};const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$6=getAugmentedNamespace(__viteBrowserExternal$1);var path2dPolyfill_esm={},hasRequiredPath2dPolyfill_esm;function requirePath2dPolyfill_esm(){if(hasRequiredPath2dPolyfill_esm)return path2dPolyfill_esm;hasRequiredPath2dPolyfill_esm=1;function st(R,j,I){if(I||arguments.length===2)for(var k=0,C=j.length,U;k<C;k++)(U||!(k in j))&&(U||(U=Array.prototype.slice.call(j,0,k)),U[k]=j[k]);return R.concat(U||Array.prototype.slice.call(j))}var r={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},h=/([astvzqmhlc])([^astvzqmhlc]*)/gi,M=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;function p(R){var j=R.match(M);return j?j.map(Number):[]}function f(R){var j=[],I=String(R).trim();return I[0]!=="M"&&I[0]!=="m"||I.replace(h,function(k,C,U){var K=p(U),u=C.toLowerCase(),m=C;if(u==="m"&&K.length>2&&(j.push(st([m],K.splice(0,2),!0)),u="l",m=m==="m"?"l":"L"),K.length<r[u])return"";for(j.push(st([m],K.splice(0,r[u]),!0));K.length>=r[u]&&K.length&&r[u];)j.push(st([m],K.splice(0,r[u]),!0));return""}),j}function B(R,j){var I=R.x*Math.cos(j)-R.y*Math.sin(j),k=R.y*Math.cos(j)+R.x*Math.sin(j);R.x=I,R.y=k}function O(R,j,I){R.x+=j,R.y+=I}function F(R,j){R.x*=j,R.y*=j}var L=function(){function R(j){var I;this.commands=[],j&&j instanceof R?(I=this.commands).push.apply(I,j.commands):j&&(this.commands=f(j))}return R.prototype.addPath=function(j){var I;j&&j instanceof R&&(I=this.commands).push.apply(I,j.commands)},R.prototype.moveTo=function(j,I){this.commands.push(["M",j,I])},R.prototype.lineTo=function(j,I){this.commands.push(["L",j,I])},R.prototype.arc=function(j,I,k,C,U,K){this.commands.push(["AC",j,I,k,C,U,!!K])},R.prototype.arcTo=function(j,I,k,C,U){this.commands.push(["AT",j,I,k,C,U])},R.prototype.ellipse=function(j,I,k,C,U,K,u,m){this.commands.push(["E",j,I,k,C,U,K,u,!!m])},R.prototype.closePath=function(){this.commands.push(["Z"])},R.prototype.bezierCurveTo=function(j,I,k,C,U,K){this.commands.push(["C",j,I,k,C,U,K])},R.prototype.quadraticCurveTo=function(j,I,k,C){this.commands.push(["Q",j,I,k,C])},R.prototype.rect=function(j,I,k,C){this.commands.push(["R",j,I,k,C])},R.prototype.roundRect=function(j,I,k,C,U){typeof U>"u"?this.commands.push(["RR",j,I,k,C,0]):this.commands.push(["RR",j,I,k,C,U])},R}();function g(R,j){var I=0,k=0,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt,Ut,Vt,Ht,Pt,at=null,S=null,w=null,X=null,J=null,H=null;R.beginPath();for(var et=0;et<j.length;++et){Ut=j[et][0],Ut!=="S"&&Ut!=="s"&&Ut!=="C"&&Ut!=="c"&&(at=null,S=null),Ut!=="T"&&Ut!=="t"&&Ut!=="Q"&&Ut!=="q"&&(w=null,X=null);var lt=void 0;switch(Ut){case"m":case"M":lt=j[et],Ut==="m"?(I+=lt[1],k+=lt[2]):(I=lt[1],k=lt[2]),(Ut==="M"||!J)&&(J={x:I,y:k}),R.moveTo(I,k);break;case"l":lt=j[et],I+=lt[1],k+=lt[2],R.lineTo(I,k);break;case"L":lt=j[et],I=lt[1],k=lt[2],R.lineTo(I,k);break;case"H":lt=j[et],I=lt[1],R.lineTo(I,k);break;case"h":lt=j[et],I+=lt[1],R.lineTo(I,k);break;case"V":lt=j[et],k=lt[1],R.lineTo(I,k);break;case"v":lt=j[et],k+=lt[1],R.lineTo(I,k);break;case"a":case"A":if(lt=j[et],H===null)throw new Error("This should never happen");Ut==="a"?(I+=lt[6],k+=lt[7]):(I=lt[6],k=lt[7]),Nt=lt[1],zt=lt[2],$=lt[3]*Math.PI/180,K=!!lt[4],u=!!lt[5],m={x:I,y:k},_={x:(H.x-m.x)/2,y:(H.y-m.y)/2},B(_,-$),P=_.x*_.x/(Nt*Nt)+_.y*_.y/(zt*zt),P>1&&(P=Math.sqrt(P),Nt*=P,zt*=P),Vt={x:Nt*_.y/zt,y:-(zt*_.x)/Nt},Zt=Nt*Nt*zt*zt,dt=Nt*Nt*_.y*_.y+zt*zt*_.x*_.x,u!==K?F(Vt,Math.sqrt((Zt-dt)/dt)||0):F(Vt,-Math.sqrt((Zt-dt)/dt)||0),U=Math.atan2((_.y-Vt.y)/zt,(_.x-Vt.x)/Nt),C=Math.atan2(-(_.y+Vt.y)/zt,-(_.x+Vt.x)/Nt),B(Vt,$),O(Vt,(m.x+H.x)/2,(m.y+H.y)/2),R.save(),R.translate(Vt.x,Vt.y),R.rotate($),R.scale(Nt,zt),R.arc(0,0,1,U,C,!u),R.restore();break;case"C":lt=j[et],at=lt[3],S=lt[4],I=lt[5],k=lt[6],R.bezierCurveTo(lt[1],lt[2],at,S,I,k);break;case"c":lt=j[et],R.bezierCurveTo(lt[1]+I,lt[2]+k,lt[3]+I,lt[4]+k,lt[5]+I,lt[6]+k),at=lt[3]+I,S=lt[4]+k,I+=lt[5],k+=lt[6];break;case"S":lt=j[et],(at===null||S===null)&&(at=I,S=k),R.bezierCurveTo(2*I-at,2*k-S,lt[1],lt[2],lt[3],lt[4]),at=lt[1],S=lt[2],I=lt[3],k=lt[4];break;case"s":lt=j[et],(at===null||S===null)&&(at=I,S=k),R.bezierCurveTo(2*I-at,2*k-S,lt[1]+I,lt[2]+k,lt[3]+I,lt[4]+k),at=lt[1]+I,S=lt[2]+k,I+=lt[3],k+=lt[4];break;case"Q":lt=j[et],w=lt[1],X=lt[2],I=lt[3],k=lt[4],R.quadraticCurveTo(w,X,I,k);break;case"q":lt=j[et],w=lt[1]+I,X=lt[2]+k,I+=lt[3],k+=lt[4],R.quadraticCurveTo(w,X,I,k);break;case"T":lt=j[et],(w===null||X===null)&&(w=I,X=k),w=2*I-w,X=2*k-X,I=lt[1],k=lt[2],R.quadraticCurveTo(w,X,I,k);break;case"t":lt=j[et],(w===null||X===null)&&(w=I,X=k),w=2*I-w,X=2*k-X,I+=lt[1],k+=lt[2],R.quadraticCurveTo(w,X,I,k);break;case"z":case"Z":J&&(I=J.x,k=J.y),J=null,R.closePath();break;case"AC":lt=j[et],I=lt[1],k=lt[2],it=lt[3],U=lt[4],C=lt[5],Ht=lt[6],R.arc(I,k,it,U,C,Ht);break;case"AT":lt=j[et],It=lt[1],xt=lt[2],I=lt[3],k=lt[4],it=lt[5],R.arcTo(It,xt,I,k,it);break;case"E":lt=j[et],I=lt[1],k=lt[2],Nt=lt[3],zt=lt[4],$=lt[5],U=lt[6],C=lt[7],Ht=lt[8],R.save(),R.translate(I,k),R.rotate($),R.scale(Nt,zt),R.arc(0,0,1,U,C,Ht),R.restore();break;case"R":lt=j[et],I=lt[1],k=lt[2],Gt=lt[3],Xt=lt[4],J={x:I,y:k},R.rect(I,k,Gt,Xt);break;case"RR":lt=j[et],I=lt[1],k=lt[2],Gt=lt[3],Xt=lt[4],Pt=lt[5],J={x:I,y:k},R.roundRect(I,k,Gt,Xt,Pt);break}H?(H.x=I,H.y=k):H={x:I,y:k}}}function q(R){if(!(!R||!R.CanvasRenderingContext2D||R.Path2D)){var j=R.CanvasRenderingContext2D,I=j.prototype.fill,k=j.prototype.stroke,C=j.prototype.isPointInPath;j.prototype.fill=function(){for(var U=[],K=0;K<arguments.length;K++)U[K]=arguments[K];if(U[0]instanceof L){var u=U[0],m=U[1]||"nonzero";g(this,u.commands),I.apply(this,[m])}else{var m=U[0]||"nonzero";return I.apply(this,[m])}},j.prototype.stroke=function(U){U&&g(this,U.commands),k.apply(this)},j.prototype.isPointInPath=function(){for(var U=[],K=0;K<arguments.length;K++)U[K]=arguments[K];if(U[0]instanceof L){var u=U[0],m=U[1],_=U[2],$=U[3]||"nonzero";return g(this,u.commands),C.apply(this,[m,_,$])}else return C.apply(this,U)},R.Path2D=L}}function v(R,j,I,k,C){var U=this;if(C===void 0&&(C=0),typeof C=="number"&&(C=[C]),Array.isArray(C)){if(C.length===0||C.length>4)throw new RangeError("Failed to execute 'roundRect' on '".concat(this.constructor.name,"': ").concat(C.length," radii provided. Between one and four radii are necessary."));C.forEach(function(P){if(P<0)throw new RangeError("Failed to execute 'roundRect' on '".concat(U.constructor.name,"': Radius value ").concat(P," is negative."))})}else return;if(C.length===1&&C[0]===0)return this.rect(R,j,I,k);var K=Math.min(I,k)/2,u,m,_,$=u=m=_=Math.min(K,C[0]);C.length===2&&(u=_=Math.min(K,C[1])),C.length===3&&(u=_=Math.min(K,C[1]),m=Math.min(K,C[2])),C.length===4&&(u=Math.min(K,C[1]),m=Math.min(K,C[2]),_=Math.min(K,C[3])),this.moveTo(R,j+k-_),this.arcTo(R,j,R+$,j,$),this.arcTo(R+I,j,R+I,j+u,u),this.arcTo(R+I,j+k,R+I-m,j+k,m),this.arcTo(R,j+k,R,j+k-_,_),this.moveTo(R,j)}function Q(R){if(!(!R||!R.CanvasRenderingContext2D)){var j=R.CanvasRenderingContext2D,I=R.Path2D;j&&!j.prototype.roundRect&&(j.prototype.roundRect=v),I&&!I.prototype.roundRect&&(I.prototype.roundRect=v)}}return q(window),Q(window),path2dPolyfill_esm}(function(module,exports){(function(st,r){module.exports=st.pdfjsLib=r()})(globalThis,()=>(()=>{var __webpack_modules__=[,(st,r,h)=>{var M;Object.defineProperty(r,"__esModule",{value:!0}),r.VerbosityLevel=r.Util=r.UnknownErrorException=r.UnexpectedResponseException=r.TextRenderingMode=r.RenderingIntentFlag=r.PromiseCapability=r.PermissionFlag=r.PasswordResponses=r.PasswordException=r.PageActionEventType=r.OPS=r.MissingPDFException=r.MAX_IMAGE_SIZE_TO_CACHE=r.LINE_FACTOR=r.LINE_DESCENT_FACTOR=r.InvalidPDFException=r.ImageKind=r.IDENTITY_MATRIX=r.FormatError=r.FeatureTest=r.FONT_IDENTITY_MATRIX=r.DocumentActionEventType=r.CMapCompressionType=r.BaseException=r.BASELINE_FACTOR=r.AnnotationType=r.AnnotationReplyType=r.AnnotationPrefix=r.AnnotationMode=r.AnnotationFlag=r.AnnotationFieldFlag=r.AnnotationEditorType=r.AnnotationEditorPrefix=r.AnnotationEditorParamsType=r.AnnotationBorderStyleType=r.AnnotationActionEventType=r.AbortException=void 0,r.assert=Ht,r.bytesToString=gt,r.createValidAbsoluteUrl=at,r.getModificationDate=Yl,r.getUuid=yl,r.getVerbosityLevel=Gt,r.info=Xt,r.isArrayBuffer=cl,r.isArrayEqual=Ml,r.isNodeJS=void 0,r.normalizeUnicode=Ll,r.objectFromMap=vt,r.objectSize=qt,r.setVerbosityLevel=zt,r.shadow=S,r.string32=Dt,r.stringToBytes=Ot,r.stringToPDFString=pt,r.stringToUTF8String=Ct,r.unreachable=Vt,r.utf8StringToString=el,r.warn=Ut,h(2),h(84),h(86),h(87),h(89),h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123);const p=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser");r.isNodeJS=p;const f=[1,0,0,1,0,0];r.IDENTITY_MATRIX=f;const B=[.001,0,0,.001,0,0];r.FONT_IDENTITY_MATRIX=B;const O=1e7;r.MAX_IMAGE_SIZE_TO_CACHE=O;const F=1.35;r.LINE_FACTOR=F;const L=.35;r.LINE_DESCENT_FACTOR=L;const g=L/F;r.BASELINE_FACTOR=g;const q={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,OPLIST:256};r.RenderingIntentFlag=q;const v={DISABLE:0,ENABLE:1,ENABLE_FORMS:2,ENABLE_STORAGE:3};r.AnnotationMode=v;const Q="pdfjs_internal_editor_";r.AnnotationEditorPrefix=Q;const R={DISABLE:-1,NONE:0,FREETEXT:3,STAMP:13,INK:15};r.AnnotationEditorType=R;const j={RESIZE:1,CREATE:2,FREETEXT_SIZE:11,FREETEXT_COLOR:12,FREETEXT_OPACITY:13,INK_COLOR:21,INK_THICKNESS:22,INK_OPACITY:23};r.AnnotationEditorParamsType=j;const I={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048};r.PermissionFlag=I;const k={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4};r.TextRenderingMode=k;const C={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3};r.ImageKind=C;const U={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26};r.AnnotationType=U;const K={GROUP:"Group",REPLY:"R"};r.AnnotationReplyType=K;const u={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512};r.AnnotationFlag=u;const m={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864};r.AnnotationFieldFlag=m;const _={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};r.AnnotationBorderStyleType=_;const $={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"};r.AnnotationActionEventType=$;const P={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"};r.DocumentActionEventType=P;const Zt={O:"PageOpen",C:"PageClose"};r.PageActionEventType=Zt;const dt={ERRORS:0,WARNINGS:1,INFOS:5};r.VerbosityLevel=dt;const It={NONE:0,BINARY:1};r.CMapCompressionType=It;const xt={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91};r.OPS=xt;const it={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};r.PasswordResponses=it;let Nt=dt.WARNINGS;function zt(ot){Number.isInteger(ot)&&(Nt=ot)}function Gt(){return Nt}function Xt(ot){Nt>=dt.INFOS&&console.log(`Info: ${ot}`)}function Ut(ot){Nt>=dt.WARNINGS&&console.log(`Warning: ${ot}`)}function Vt(ot){throw new Error(ot)}function Ht(ot,ut){ot||Vt(ut)}function Pt(ot){switch(ot==null?void 0:ot.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function at(ot){let ut=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,Tt=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null;if(!ot)return null;try{if(Tt&&typeof ot=="string"){if(Tt.addDefaultProtocol&&ot.startsWith("www.")){const Jt=ot.match(/\./g);(Jt==null?void 0:Jt.length)>=2&&(ot=`http://${ot}`)}if(Tt.tryConvertEncoding)try{ot=Ct(ot)}catch(Jt){}}const jt=ut?new URL(ot,ut):new URL(ot);if(Pt(jt))return jt}catch(jt){}return null}function S(ot,ut,Tt){let jt=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;return Object.defineProperty(ot,ut,{value:Tt,enumerable:!jt,configurable:!0,writable:!1}),Tt}const w=function(){function ot(ut,Tt){this.constructor===ot&&Vt("Cannot initialize BaseException."),this.message=ut,this.name=Tt}return ot.prototype=new Error,ot.constructor=ot,ot}();r.BaseException=w;class X extends w{constructor(ut,Tt){super(ut,"PasswordException"),this.code=Tt}}r.PasswordException=X;class J extends w{constructor(ut,Tt){super(ut,"UnknownErrorException"),this.details=Tt}}r.UnknownErrorException=J;class H extends w{constructor(ut){super(ut,"InvalidPDFException")}}r.InvalidPDFException=H;class et extends w{constructor(ut){super(ut,"MissingPDFException")}}r.MissingPDFException=et;class lt extends w{constructor(ut,Tt){super(ut,"UnexpectedResponseException"),this.status=Tt}}r.UnexpectedResponseException=lt;class Mt extends w{constructor(ut){super(ut,"FormatError")}}r.FormatError=Mt;class Rt extends w{constructor(ut){super(ut,"AbortException")}}r.AbortException=Rt;function gt(ot){(typeof ot!="object"||(ot==null?void 0:ot.length)===void 0)&&Vt("Invalid argument for bytesToString");const ut=ot.length,Tt=8192;if(ut<Tt)return String.fromCharCode.apply(null,ot);const jt=[];for(let Jt=0;Jt<ut;Jt+=Tt){const Lt=Math.min(Jt+Tt,ut),Yt=ot.subarray(Jt,Lt);jt.push(String.fromCharCode.apply(null,Yt))}return jt.join("")}function Ot(ot){typeof ot!="string"&&Vt("Invalid argument for stringToBytes");const ut=ot.length,Tt=new Uint8Array(ut);for(let jt=0;jt<ut;++jt)Tt[jt]=ot.charCodeAt(jt)&255;return Tt}function Dt(ot){return String.fromCharCode(ot>>24&255,ot>>16&255,ot>>8&255,ot&255)}function qt(ot){return Object.keys(ot).length}function vt(ot){const ut=Object.create(null);for(const[Tt,jt]of ot)ut[Tt]=jt;return ut}function dl(){const ot=new Uint8Array(4);return ot[0]=1,new Uint32Array(ot.buffer,0,1)[0]===1}function ol(){try{return new Function(""),!0}catch(ot){return!1}}class il{static get isLittleEndian(){return S(this,"isLittleEndian",dl())}static get isEvalSupported(){return S(this,"isEvalSupported",ol())}static get isOffscreenCanvasSupported(){return S(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas<"u")}static get platform(){return typeof navigator>"u"?S(this,"platform",{isWin:!1,isMac:!1}):S(this,"platform",{isWin:navigator.platform.includes("Win"),isMac:navigator.platform.includes("Mac")})}static get isCSSRoundSupported(){var ut,Tt;return S(this,"isCSSRoundSupported",(Tt=(ut=globalThis.CSS)==null?void 0:ut.supports)==null?void 0:Tt.call(ut,"width: round(1.5px, 1px)"))}}r.FeatureTest=il;const _t=[...Array(256).keys()].map(ot=>ot.toString(16).padStart(2,"0"));class Ft{static makeHexColor(ut,Tt,jt){return`#${_t[ut]}${_t[Tt]}${_t[jt]}`}static scaleMinMax(ut,Tt){let jt;ut[0]?(ut[0]<0&&(jt=Tt[0],Tt[0]=Tt[1],Tt[1]=jt),Tt[0]*=ut[0],Tt[1]*=ut[0],ut[3]<0&&(jt=Tt[2],Tt[2]=Tt[3],Tt[3]=jt),Tt[2]*=ut[3],Tt[3]*=ut[3]):(jt=Tt[0],Tt[0]=Tt[2],Tt[2]=jt,jt=Tt[1],Tt[1]=Tt[3],Tt[3]=jt,ut[1]<0&&(jt=Tt[2],Tt[2]=Tt[3],Tt[3]=jt),Tt[2]*=ut[1],Tt[3]*=ut[1],ut[2]<0&&(jt=Tt[0],Tt[0]=Tt[1],Tt[1]=jt),Tt[0]*=ut[2],Tt[1]*=ut[2]),Tt[0]+=ut[4],Tt[1]+=ut[4],Tt[2]+=ut[5],Tt[3]+=ut[5]}static transform(ut,Tt){return[ut[0]*Tt[0]+ut[2]*Tt[1],ut[1]*Tt[0]+ut[3]*Tt[1],ut[0]*Tt[2]+ut[2]*Tt[3],ut[1]*Tt[2]+ut[3]*Tt[3],ut[0]*Tt[4]+ut[2]*Tt[5]+ut[4],ut[1]*Tt[4]+ut[3]*Tt[5]+ut[5]]}static applyTransform(ut,Tt){const jt=ut[0]*Tt[0]+ut[1]*Tt[2]+Tt[4],Jt=ut[0]*Tt[1]+ut[1]*Tt[3]+Tt[5];return[jt,Jt]}static applyInverseTransform(ut,Tt){const jt=Tt[0]*Tt[3]-Tt[1]*Tt[2],Jt=(ut[0]*Tt[3]-ut[1]*Tt[2]+Tt[2]*Tt[5]-Tt[4]*Tt[3])/jt,Lt=(-ut[0]*Tt[1]+ut[1]*Tt[0]+Tt[4]*Tt[1]-Tt[5]*Tt[0])/jt;return[Jt,Lt]}static getAxialAlignedBoundingBox(ut,Tt){const jt=this.applyTransform(ut,Tt),Jt=this.applyTransform(ut.slice(2,4),Tt),Lt=this.applyTransform([ut[0],ut[3]],Tt),Yt=this.applyTransform([ut[2],ut[1]],Tt);return[Math.min(jt[0],Jt[0],Lt[0],Yt[0]),Math.min(jt[1],Jt[1],Lt[1],Yt[1]),Math.max(jt[0],Jt[0],Lt[0],Yt[0]),Math.max(jt[1],Jt[1],Lt[1],Yt[1])]}static inverseTransform(ut){const Tt=ut[0]*ut[3]-ut[1]*ut[2];return[ut[3]/Tt,-ut[1]/Tt,-ut[2]/Tt,ut[0]/Tt,(ut[2]*ut[5]-ut[4]*ut[3])/Tt,(ut[4]*ut[1]-ut[5]*ut[0])/Tt]}static singularValueDecompose2dScale(ut){const Tt=[ut[0],ut[2],ut[1],ut[3]],jt=ut[0]*Tt[0]+ut[1]*Tt[2],Jt=ut[0]*Tt[1]+ut[1]*Tt[3],Lt=ut[2]*Tt[0]+ut[3]*Tt[2],Yt=ut[2]*Tt[1]+ut[3]*Tt[3],Kt=(jt+Yt)/2,$t=Math.sqrt($l(jt+Yt,2)-4*(jt*Yt-Lt*Jt))/2,tl=Kt+$t||1,bl=Kt-$t||1;return[Math.sqrt(tl),Math.sqrt(bl)]}static normalizeRect(ut){const Tt=ut.slice(0);return ut[0]>ut[2]&&(Tt[0]=ut[2],Tt[2]=ut[0]),ut[1]>ut[3]&&(Tt[1]=ut[3],Tt[3]=ut[1]),Tt}static intersect(ut,Tt){const jt=Math.max(Math.min(ut[0],ut[2]),Math.min(Tt[0],Tt[2])),Jt=Math.min(Math.max(ut[0],ut[2]),Math.max(Tt[0],Tt[2]));if(jt>Jt)return null;const Lt=Math.max(Math.min(ut[1],ut[3]),Math.min(Tt[1],Tt[3])),Yt=Math.min(Math.max(ut[1],ut[3]),Math.max(Tt[1],Tt[3]));return Lt>Yt?null:[jt,Lt,Jt,Yt]}static bezierBoundingBox(ut,Tt,jt,Jt,Lt,Yt,Kt,$t){const tl=[],bl=[[],[]];let Bt,rl,hl,Il,Wl,nt,T,ct;for(let Et=0;Et<2;++Et){if(Et===0?(rl=6*ut-12*jt+6*Lt,Bt=-3*ut+9*jt-9*Lt+3*Kt,hl=3*jt-3*ut):(rl=6*Tt-12*Jt+6*Yt,Bt=-3*Tt+9*Jt-9*Yt+3*$t,hl=3*Jt-3*Tt),Math.abs(Bt)<1e-12){if(Math.abs(rl)<1e-12)continue;Il=-hl/rl,0<Il&&Il<1&&tl.push(Il);continue}T=rl*rl-4*hl*Bt,ct=Math.sqrt(T),!(T<0)&&(Wl=(-rl+ct)/(2*Bt),0<Wl&&Wl<1&&tl.push(Wl),nt=(-rl-ct)/(2*Bt),0<nt&&nt<1&&tl.push(nt))}let Wt=tl.length,yt;const kt=Wt;for(;Wt--;)Il=tl[Wt],yt=1-Il,bl[0][Wt]=yt*yt*yt*ut+3*yt*yt*Il*jt+3*yt*Il*Il*Lt+Il*Il*Il*Kt,bl[1][Wt]=yt*yt*yt*Tt+3*yt*yt*Il*Jt+3*yt*Il*Il*Yt+Il*Il*Il*$t;return bl[0][kt]=ut,bl[1][kt]=Tt,bl[0][kt+1]=Kt,bl[1][kt+1]=$t,bl[0].length=bl[1].length=kt+2,[Math.min(...bl[0]),Math.min(...bl[1]),Math.max(...bl[0]),Math.max(...bl[1])]}}r.Util=Ft;const wt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function pt(ot){if(ot[0]>="ï"){let Tt;if(ot[0]==="þ"&&ot[1]==="ÿ"?Tt="utf-16be":ot[0]==="ÿ"&&ot[1]==="þ"?Tt="utf-16le":ot[0]==="ï"&&ot[1]==="»"&&ot[2]==="¿"&&(Tt="utf-8"),Tt)try{const jt=new TextDecoder(Tt,{fatal:!0}),Jt=Ot(ot);return jt.decode(Jt)}catch(jt){Ut(`stringToPDFString: "${jt}".`)}}const ut=[];for(let Tt=0,jt=ot.length;Tt<jt;Tt++){const Jt=wt[ot.charCodeAt(Tt)];ut.push(Jt?String.fromCharCode(Jt):ot.charAt(Tt))}return ut.join("")}function Ct(ot){return decodeURIComponent(escape(ot))}function el(ot){return unescape(encodeURIComponent(ot))}function cl(ot){return typeof ot=="object"&&(ot==null?void 0:ot.byteLength)!==void 0}function Ml(ot,ut){if(ot.length!==ut.length)return!1;for(let Tt=0,jt=ot.length;Tt<jt;Tt++)if(ot[Tt]!==ut[Tt])return!1;return!0}function Yl(){let ot=arguments.length>0&&arguments[0]!==void 0?arguments[0]:new Date;return[ot.getUTCFullYear().toString(),(ot.getUTCMonth()+1).toString().padStart(2,"0"),ot.getUTCDate().toString().padStart(2,"0"),ot.getUTCHours().toString().padStart(2,"0"),ot.getUTCMinutes().toString().padStart(2,"0"),ot.getUTCSeconds().toString().padStart(2,"0")].join("")}class Xl{constructor(){E(this,M,!1),this.promise=new Promise((ut,Tt)=>{this.resolve=jt=>{Zl(this,M,!0),ut(jt)},this.reject=jt=>{Zl(this,M,!0),Tt(jt)}})}get settled(){return t(this,M)}}M=new WeakMap,r.PromiseCapability=Xl;let Tl=null,Vl=null;function Ll(ot){return Tl||(Tl=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu,Vl=new Map([["ſt","ſt"]])),ot.replaceAll(Tl,(ut,Tt,jt)=>Tt?Tt.normalize("NFKC"):Vl.get(jt))}function yl(){if(typeof crypto<"u"&&typeof(crypto==null?void 0:crypto.randomUUID)=="function")return crypto.randomUUID();const ot=new Uint8Array(32);if(typeof crypto<"u"&&typeof(crypto==null?void 0:crypto.getRandomValues)=="function")crypto.getRandomValues(ot);else for(let ut=0;ut<32;ut++)ot[ut]=Math.floor(Math.random()*255);return gt(ot)}const Qt="pdfjs_internal_id_";r.AnnotationPrefix=Qt},(st,r,h)=>{var M=h(3),p=h(4),f=h(69),B=h(70),O="WebAssembly",F=p[O],L=Error("e",{cause:7}).cause!==7,g=function(v,Q){var R={};R[v]=B(v,Q,L),M({global:!0,constructor:!0,arity:1,forced:L},R)},q=function(v,Q){if(F&&F[v]){var R={};R[v]=B(O+"."+v,Q,L),M({target:O,stat:!0,constructor:!0,arity:1,forced:L},R)}};g("Error",function(v){return function(Q){return f(v,this,arguments)}}),g("EvalError",function(v){return function(Q){return f(v,this,arguments)}}),g("RangeError",function(v){return function(Q){return f(v,this,arguments)}}),g("ReferenceError",function(v){return function(Q){return f(v,this,arguments)}}),g("SyntaxError",function(v){return function(Q){return f(v,this,arguments)}}),g("TypeError",function(v){return function(Q){return f(v,this,arguments)}}),g("URIError",function(v){return function(Q){return f(v,this,arguments)}}),q("CompileError",function(v){return function(Q){return f(v,this,arguments)}}),q("LinkError",function(v){return function(Q){return f(v,this,arguments)}}),q("RuntimeError",function(v){return function(Q){return f(v,this,arguments)}})},(st,r,h)=>{var M=h(4),p=h(5).f,f=h(44),B=h(48),O=h(38),F=h(56),L=h(68);st.exports=function(g,q){var v=g.target,Q=g.global,R=g.stat,j,I,k,C,U,K;if(Q?I=M:R?I=M[v]||O(v,{}):I=(M[v]||{}).prototype,I)for(k in q){if(U=q[k],g.dontCallGetSet?(K=p(I,k),C=K&&K.value):C=I[k],j=L(Q?k:v+(R?".":"#")+k,g.forced),!j&&C!==void 0){if(typeof U==typeof C)continue;F(U,C)}(g.sham||C&&C.sham)&&f(U,"sham",!0),B(I,k,U,g)}}},function(st){var r=function(h){return h&&h.Math===Math&&h};st.exports=r(typeof globalThis=="object"&&globalThis)||r(typeof window=="object"&&window)||r(typeof self=="object"&&self)||r(typeof commonjsGlobal=="object"&&commonjsGlobal)||function(){return this}()||this||Function("return this")()},(st,r,h)=>{var M=h(6),p=h(8),f=h(10),B=h(11),O=h(12),F=h(18),L=h(39),g=h(42),q=Object.getOwnPropertyDescriptor;r.f=M?q:function(v,Q){if(v=O(v),Q=F(Q),g)try{return q(v,Q)}catch(R){}if(L(v,Q))return B(!p(f.f,v,Q),v[Q])}},(st,r,h)=>{var M=h(7);st.exports=!M(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})},st=>{st.exports=function(r){try{return!!r()}catch(h){return!0}}},(st,r,h)=>{var M=h(9),p=Function.prototype.call;st.exports=M?p.bind(p):function(){return p.apply(p,arguments)}},(st,r,h)=>{var M=h(7);st.exports=!M(function(){var p=function(){}.bind();return typeof p!="function"||p.hasOwnProperty("prototype")})},(st,r)=>{var h={}.propertyIsEnumerable,M=Object.getOwnPropertyDescriptor,p=M&&!h.call({1:2},1);r.f=p?function(f){var B=M(this,f);return!!B&&B.enumerable}:h},st=>{st.exports=function(r,h){return{enumerable:!(r&1),configurable:!(r&2),writable:!(r&4),value:h}}},(st,r,h)=>{var M=h(13),p=h(16);st.exports=function(f){return M(p(f))}},(st,r,h)=>{var M=h(14),p=h(7),f=h(15),B=Object,O=M("".split);st.exports=p(function(){return!B("z").propertyIsEnumerable(0)})?function(F){return f(F)==="String"?O(F,""):B(F)}:B},(st,r,h)=>{var M=h(9),p=Function.prototype,f=p.call,B=M&&p.bind.bind(f,f);st.exports=M?B:function(O){return function(){return f.apply(O,arguments)}}},(st,r,h)=>{var M=h(14),p=M({}.toString),f=M("".slice);st.exports=function(B){return f(p(B),8,-1)}},(st,r,h)=>{var M=h(17),p=TypeError;st.exports=function(f){if(M(f))throw p("Can't call method on "+f);return f}},st=>{st.exports=function(r){return r==null}},(st,r,h)=>{var M=h(19),p=h(23);st.exports=function(f){var B=M(f,"string");return p(B)?B:B+""}},(st,r,h)=>{var M=h(8),p=h(20),f=h(23),B=h(30),O=h(33),F=h(34),L=TypeError,g=F("toPrimitive");st.exports=function(q,v){if(!p(q)||f(q))return q;var Q=B(q,g),R;if(Q){if(v===void 0&&(v="default"),R=M(Q,q,v),!p(R)||f(R))return R;throw L("Can't convert object to primitive value")}return v===void 0&&(v="number"),O(q,v)}},(st,r,h)=>{var M=h(21),p=h(22),f=p.all;st.exports=p.IS_HTMLDDA?function(B){return typeof B=="object"?B!==null:M(B)||B===f}:function(B){return typeof B=="object"?B!==null:M(B)}},(st,r,h)=>{var M=h(22),p=M.all;st.exports=M.IS_HTMLDDA?function(f){return typeof f=="function"||f===p}:function(f){return typeof f=="function"}},st=>{var r=typeof document=="object"&&document.all,h=typeof r>"u"&&r!==void 0;st.exports={all:r,IS_HTMLDDA:h}},(st,r,h)=>{var M=h(24),p=h(21),f=h(25),B=h(26),O=Object;st.exports=B?function(F){return typeof F=="symbol"}:function(F){var L=M("Symbol");return p(L)&&f(L.prototype,O(F))}},(st,r,h)=>{var M=h(4),p=h(21),f=function(B){return p(B)?B:void 0};st.exports=function(B,O){return arguments.length<2?f(M[B]):M[B]&&M[B][O]}},(st,r,h)=>{var M=h(14);st.exports=M({}.isPrototypeOf)},(st,r,h)=>{var M=h(27);st.exports=M&&!Symbol.sham&&typeof Symbol.iterator=="symbol"},(st,r,h)=>{var M=h(28),p=h(7),f=h(4),B=f.String;st.exports=!!Object.getOwnPropertySymbols&&!p(function(){var O=Symbol("symbol detection");return!B(O)||!(Object(O)instanceof Symbol)||!Symbol.sham&&M&&M<41})},(st,r,h)=>{var M=h(4),p=h(29),f=M.process,B=M.Deno,O=f&&f.versions||B&&B.version,F=O&&O.v8,L,g;F&&(L=F.split("."),g=L[0]>0&&L[0]<4?1:+(L[0]+L[1])),!g&&p&&(L=p.match(/Edge\/(\d+)/),(!L||L[1]>=74)&&(L=p.match(/Chrome\/(\d+)/),L&&(g=+L[1]))),st.exports=g},st=>{st.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},(st,r,h)=>{var M=h(31),p=h(17);st.exports=function(f,B){var O=f[B];return p(O)?void 0:M(O)}},(st,r,h)=>{var M=h(21),p=h(32),f=TypeError;st.exports=function(B){if(M(B))return B;throw f(p(B)+" is not a function")}},st=>{var r=String;st.exports=function(h){try{return r(h)}catch(M){return"Object"}}},(st,r,h)=>{var M=h(8),p=h(21),f=h(20),B=TypeError;st.exports=function(O,F){var L,g;if(F==="string"&&p(L=O.toString)&&!f(g=M(L,O))||p(L=O.valueOf)&&!f(g=M(L,O))||F!=="string"&&p(L=O.toString)&&!f(g=M(L,O)))return g;throw B("Can't convert object to primitive value")}},(st,r,h)=>{var M=h(4),p=h(35),f=h(39),B=h(41),O=h(27),F=h(26),L=M.Symbol,g=p("wks"),q=F?L.for||L:L&&L.withoutSetter||B;st.exports=function(v){return f(g,v)||(g[v]=O&&f(L,v)?L[v]:q("Symbol."+v)),g[v]}},(st,r,h)=>{var M=h(36),p=h(37);(st.exports=function(f,B){return p[f]||(p[f]=B!==void 0?B:{})})("versions",[]).push({version:"3.32.2",mode:M?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.2/LICENSE",source:"https://github.com/zloirock/core-js"})},st=>{st.exports=!1},(st,r,h)=>{var M=h(4),p=h(38),f="__core-js_shared__",B=M[f]||p(f,{});st.exports=B},(st,r,h)=>{var M=h(4),p=Object.defineProperty;st.exports=function(f,B){try{p(M,f,{value:B,configurable:!0,writable:!0})}catch(O){M[f]=B}return B}},(st,r,h)=>{var M=h(14),p=h(40),f=M({}.hasOwnProperty);st.exports=Object.hasOwn||function(B,O){return f(p(B),O)}},(st,r,h)=>{var M=h(16),p=Object;st.exports=function(f){return p(M(f))}},(st,r,h)=>{var M=h(14),p=0,f=Math.random(),B=M(1 .toString);st.exports=function(O){return"Symbol("+(O===void 0?"":O)+")_"+B(++p+f,36)}},(st,r,h)=>{var M=h(6),p=h(7),f=h(43);st.exports=!M&&!p(function(){return Object.defineProperty(f("div"),"a",{get:function(){return 7}}).a!==7})},(st,r,h)=>{var M=h(4),p=h(20),f=M.document,B=p(f)&&p(f.createElement);st.exports=function(O){return B?f.createElement(O):{}}},(st,r,h)=>{var M=h(6),p=h(45),f=h(11);st.exports=M?function(B,O,F){return p.f(B,O,f(1,F))}:function(B,O,F){return B[O]=F,B}},(st,r,h)=>{var M=h(6),p=h(42),f=h(46),B=h(47),O=h(18),F=TypeError,L=Object.defineProperty,g=Object.getOwnPropertyDescriptor,q="enumerable",v="configurable",Q="writable";r.f=M?f?function(R,j,I){if(B(R),j=O(j),B(I),typeof R=="function"&&j==="prototype"&&"value"in I&&Q in I&&!I[Q]){var k=g(R,j);k&&k[Q]&&(R[j]=I.value,I={configurable:v in I?I[v]:k[v],enumerable:q in I?I[q]:k[q],writable:!1})}return L(R,j,I)}:L:function(R,j,I){if(B(R),j=O(j),B(I),p)try{return L(R,j,I)}catch(k){}if("get"in I||"set"in I)throw F("Accessors not supported");return"value"in I&&(R[j]=I.value),R}},(st,r,h)=>{var M=h(6),p=h(7);st.exports=M&&p(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})},(st,r,h)=>{var M=h(20),p=String,f=TypeError;st.exports=function(B){if(M(B))return B;throw f(p(B)+" is not an object")}},(st,r,h)=>{var M=h(21),p=h(45),f=h(49),B=h(38);st.exports=function(O,F,L,g){g||(g={});var q=g.enumerable,v=g.name!==void 0?g.name:F;if(M(L)&&f(L,v,g),g.global)q?O[F]=L:B(F,L);else{try{g.unsafe?O[F]&&(q=!0):delete O[F]}catch(Q){}q?O[F]=L:p.f(O,F,{value:L,enumerable:!1,configurable:!g.nonConfigurable,writable:!g.nonWritable})}return O}},(st,r,h)=>{var M=h(14),p=h(7),f=h(21),B=h(39),O=h(6),F=h(50).CONFIGURABLE,L=h(51),g=h(52),q=g.enforce,v=g.get,Q=String,R=Object.defineProperty,j=M("".slice),I=M("".replace),k=M([].join),C=O&&!p(function(){return R(function(){},"length",{value:8}).length!==8}),U=String(String).split("String"),K=st.exports=function(u,m,_){j(Q(m),0,7)==="Symbol("&&(m="["+I(Q(m),/^Symbol\(([^)]*)\)/,"$1")+"]"),_&&_.getter&&(m="get "+m),_&&_.setter&&(m="set "+m),(!B(u,"name")||F&&u.name!==m)&&(O?R(u,"name",{value:m,configurable:!0}):u.name=m),C&&_&&B(_,"arity")&&u.length!==_.arity&&R(u,"length",{value:_.arity});try{_&&B(_,"constructor")&&_.constructor?O&&R(u,"prototype",{writable:!1}):u.prototype&&(u.prototype=void 0)}catch(P){}var $=q(u);return B($,"source")||($.source=k(U,typeof m=="string"?m:"")),u};Function.prototype.toString=K(function(){return f(this)&&v(this).source||L(this)},"toString")},(st,r,h)=>{var M=h(6),p=h(39),f=Function.prototype,B=M&&Object.getOwnPropertyDescriptor,O=p(f,"name"),F=O&&function(){}.name==="something",L=O&&(!M||M&&B(f,"name").configurable);st.exports={EXISTS:O,PROPER:F,CONFIGURABLE:L}},(st,r,h)=>{var M=h(14),p=h(21),f=h(37),B=M(Function.toString);p(f.inspectSource)||(f.inspectSource=function(O){return B(O)}),st.exports=f.inspectSource},(st,r,h)=>{var M=h(53),p=h(4),f=h(20),B=h(44),O=h(39),F=h(37),L=h(54),g=h(55),q="Object already initialized",v=p.TypeError,Q=p.WeakMap,R,j,I,k=function(u){return I(u)?j(u):R(u,{})},C=function(u){return function(m){var _;if(!f(m)||(_=j(m)).type!==u)throw v("Incompatible receiver, "+u+" required");return _}};if(M||F.state){var U=F.state||(F.state=new Q);U.get=U.get,U.has=U.has,U.set=U.set,R=function(u,m){if(U.has(u))throw v(q);return m.facade=u,U.set(u,m),m},j=function(u){return U.get(u)||{}},I=function(u){return U.has(u)}}else{var K=L("state");g[K]=!0,R=function(u,m){if(O(u,K))throw v(q);return m.facade=u,B(u,K,m),m},j=function(u){return O(u,K)?u[K]:{}},I=function(u){return O(u,K)}}st.exports={set:R,get:j,has:I,enforce:k,getterFor:C}},(st,r,h)=>{var M=h(4),p=h(21),f=M.WeakMap;st.exports=p(f)&&/native code/.test(String(f))},(st,r,h)=>{var M=h(35),p=h(41),f=M("keys");st.exports=function(B){return f[B]||(f[B]=p(B))}},st=>{st.exports={}},(st,r,h)=>{var M=h(39),p=h(57),f=h(5),B=h(45);st.exports=function(O,F,L){for(var g=p(F),q=B.f,v=f.f,Q=0;Q<g.length;Q++){var R=g[Q];!M(O,R)&&!(L&&M(L,R))&&q(O,R,v(F,R))}}},(st,r,h)=>{var M=h(24),p=h(14),f=h(58),B=h(67),O=h(47),F=p([].concat);st.exports=M("Reflect","ownKeys")||function(L){var g=f.f(O(L)),q=B.f;return q?F(g,q(L)):g}},(st,r,h)=>{var M=h(59),p=h(66),f=p.concat("length","prototype");r.f=Object.getOwnPropertyNames||function(B){return M(B,f)}},(st,r,h)=>{var M=h(14),p=h(39),f=h(12),B=h(60).indexOf,O=h(55),F=M([].push);st.exports=function(L,g){var q=f(L),v=0,Q=[],R;for(R in q)!p(O,R)&&p(q,R)&&F(Q,R);for(;g.length>v;)p(q,R=g[v++])&&(~B(Q,R)||F(Q,R));return Q}},(st,r,h)=>{var M=h(12),p=h(61),f=h(64),B=function(O){return function(F,L,g){var q=M(F),v=f(q),Q=p(g,v),R;if(O&&L!==L){for(;v>Q;)if(R=q[Q++],R!==R)return!0}else for(;v>Q;Q++)if((O||Q in q)&&q[Q]===L)return O||Q||0;return!O&&-1}};st.exports={includes:B(!0),indexOf:B(!1)}},(st,r,h)=>{var M=h(62),p=Math.max,f=Math.min;st.exports=function(B,O){var F=M(B);return F<0?p(F+O,0):f(F,O)}},(st,r,h)=>{var M=h(63);st.exports=function(p){var f=+p;return f!==f||f===0?0:M(f)}},st=>{var r=Math.ceil,h=Math.floor;st.exports=Math.trunc||function(M){var p=+M;return(p>0?h:r)(p)}},(st,r,h)=>{var M=h(65);st.exports=function(p){return M(p.length)}},(st,r,h)=>{var M=h(62),p=Math.min;st.exports=function(f){return f>0?p(M(f),9007199254740991):0}},st=>{st.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(st,r)=>{r.f=Object.getOwnPropertySymbols},(st,r,h)=>{var M=h(7),p=h(21),f=/#|\.prototype\./,B=function(q,v){var Q=F[O(q)];return Q===g?!0:Q===L?!1:p(v)?M(v):!!v},O=B.normalize=function(q){return String(q).replace(f,".").toLowerCase()},F=B.data={},L=B.NATIVE="N",g=B.POLYFILL="P";st.exports=B},(st,r,h)=>{var M=h(9),p=Function.prototype,f=p.apply,B=p.call;st.exports=typeof Reflect=="object"&&Reflect.apply||(M?B.bind(f):function(){return B.apply(f,arguments)})},(st,r,h)=>{var M=h(24),p=h(39),f=h(44),B=h(25),O=h(71),F=h(56),L=h(74),g=h(75),q=h(76),v=h(80),Q=h(81),R=h(6),j=h(36);st.exports=function(I,k,C,U){var K="stackTraceLimit",u=U?2:1,m=I.split("."),_=m[m.length-1],$=M.apply(null,m);if($){var P=$.prototype;if(!j&&p(P,"cause")&&delete P.cause,!C)return $;var Zt=M("Error"),dt=k(function(It,xt){var it=q(U?xt:It,void 0),Nt=U?new $(It):new $;return it!==void 0&&f(Nt,"message",it),Q(Nt,dt,Nt.stack,2),this&&B(P,this)&&g(Nt,this,dt),arguments.length>u&&v(Nt,arguments[u]),Nt});if(dt.prototype=P,_!=="Error"?O?O(dt,Zt):F(dt,Zt,{name:!0}):R&&K in $&&(L(dt,$,K),L(dt,$,"prepareStackTrace")),F(dt,$),!j)try{P.name!==_&&f(P,"name",_),P.constructor=dt}catch(It){}return dt}}},(st,r,h)=>{var M=h(72),p=h(47),f=h(73);st.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var B=!1,O={},F;try{F=M(Object.prototype,"__proto__","set"),F(O,[]),B=O instanceof Array}catch(L){}return function(L,g){return p(L),f(g),B?F(L,g):L.__proto__=g,L}}():void 0)},(st,r,h)=>{var M=h(14),p=h(31);st.exports=function(f,B,O){try{return M(p(Object.getOwnPropertyDescriptor(f,B)[O]))}catch(F){}}},(st,r,h)=>{var M=h(21),p=String,f=TypeError;st.exports=function(B){if(typeof B=="object"||M(B))return B;throw f("Can't set "+p(B)+" as a prototype")}},(st,r,h)=>{var M=h(45).f;st.exports=function(p,f,B){B in p||M(p,B,{configurable:!0,get:function(){return f[B]},set:function(O){f[B]=O}})}},(st,r,h)=>{var M=h(21),p=h(20),f=h(71);st.exports=function(B,O,F){var L,g;return f&&M(L=O.constructor)&&L!==F&&p(g=L.prototype)&&g!==F.prototype&&f(B,g),B}},(st,r,h)=>{var M=h(77);st.exports=function(p,f){return p===void 0?arguments.length<2?"":f:M(p)}},(st,r,h)=>{var M=h(78),p=String;st.exports=function(f){if(M(f)==="Symbol")throw TypeError("Cannot convert a Symbol value to a string");return p(f)}},(st,r,h)=>{var M=h(79),p=h(21),f=h(15),B=h(34),O=B("toStringTag"),F=Object,L=f(function(){return arguments}())==="Arguments",g=function(q,v){try{return q[v]}catch(Q){}};st.exports=M?f:function(q){var v,Q,R;return q===void 0?"Undefined":q===null?"Null":typeof(Q=g(v=F(q),O))=="string"?Q:L?f(v):(R=f(v))==="Object"&&p(v.callee)?"Arguments":R}},(st,r,h)=>{var M=h(34),p=M("toStringTag"),f={};f[p]="z",st.exports=String(f)==="[object z]"},(st,r,h)=>{var M=h(20),p=h(44);st.exports=function(f,B){M(B)&&"cause"in B&&p(f,"cause",B.cause)}},(st,r,h)=>{var M=h(44),p=h(82),f=h(83),B=Error.captureStackTrace;st.exports=function(O,F,L,g){f&&(B?B(O,F):M(O,"stack",p(L,g)))}},(st,r,h)=>{var M=h(14),p=Error,f=M("".replace),B=function(L){return String(p(L).stack)}("zxcasd"),O=/\n\s*at [^:]*:[^\n]*/,F=O.test(B);st.exports=function(L,g){if(F&&typeof L=="string"&&!p.prepareStackTrace)for(;g--;)L=f(L,O,"");return L}},(st,r,h)=>{var M=h(7),p=h(11);st.exports=!M(function(){var f=Error("a");return"stack"in f?(Object.defineProperty(f,"stack",p(1,7)),f.stack!==7):!0})},(st,r,h)=>{var M=h(48),p=h(14),f=h(77),B=h(85),O=URLSearchParams,F=O.prototype,L=p(F.append),g=p(F.delete),q=p(F.forEach),v=p([].push),Q=new O("a=1&a=2&b=3");Q.delete("a",1),Q.delete("b",void 0),Q+""!="a=2"&&M(F,"delete",function(R){var j=arguments.length,I=j<2?void 0:arguments[1];if(j&&I===void 0)return g(this,R);var k=[];q(this,function(P,Zt){v(k,{key:Zt,value:P})}),B(j,1);for(var C=f(R),U=f(I),K=0,u=0,m=!1,_=k.length,$;K<_;)$=k[K++],m||$.key===C?(m=!0,g(this,$.key)):u++;for(;u<_;)$=k[u++],$.key===C&&$.value===U||L(this,$.key,$.value)},{enumerable:!0,unsafe:!0})},st=>{var r=TypeError;st.exports=function(h,M){if(h<M)throw r("Not enough arguments");return h}},(st,r,h)=>{var M=h(48),p=h(14),f=h(77),B=h(85),O=URLSearchParams,F=O.prototype,L=p(F.getAll),g=p(F.has),q=new O("a=1");(q.has("a",2)||!q.has("a",void 0))&&M(F,"has",function(v){var Q=arguments.length,R=Q<2?void 0:arguments[1];if(Q&&R===void 0)return g(this,v);var j=L(this,v);B(Q,1);for(var I=f(R),k=0;k<j.length;)if(j[k++]===I)return!0;return!1},{enumerable:!0,unsafe:!0})},(st,r,h)=>{var M=h(6),p=h(14),f=h(88),B=URLSearchParams.prototype,O=p(B.forEach);M&&!("size"in B)&&f(B,"size",{get:function(){var F=0;return O(this,function(){F++}),F},configurable:!0,enumerable:!0})},(st,r,h)=>{var M=h(49),p=h(45);st.exports=function(f,B,O){return O.get&&M(O.get,B,{getter:!0}),O.set&&M(O.set,B,{setter:!0}),p.f(f,B,O)}},(st,r,h)=>{var M=h(3),p=h(40),f=h(64),B=h(90),O=h(92),F=h(7),L=F(function(){return[].push.call({length:4294967296},1)!==4294967297}),g=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(v){return v instanceof TypeError}},q=L||!g();M({target:"Array",proto:!0,arity:1,forced:q},{push:function(v){var Q=p(this),R=f(Q),j=arguments.length;O(R+j);for(var I=0;I<j;I++)Q[R]=arguments[I],R++;return B(Q,R),R}})},(st,r,h)=>{var M=h(6),p=h(91),f=TypeError,B=Object.getOwnPropertyDescriptor,O=M&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(F){return F instanceof TypeError}}();st.exports=O?function(F,L){if(p(F)&&!B(F,"length").writable)throw f("Cannot set read only .length");return F.length=L}:function(F,L){return F.length=L}},(st,r,h)=>{var M=h(15);st.exports=Array.isArray||function(p){return M(p)==="Array"}},st=>{var r=TypeError,h=9007199254740991;st.exports=function(M){if(M>h)throw r("Maximum allowed index exceeded");return M}},(st,r,h)=>{var M=h(94),p=h(98).findLast,f=M.aTypedArray,B=M.exportTypedArrayMethod;B("findLast",function(O){return p(f(this),O,arguments.length>1?arguments[1]:void 0)})},(st,r,h)=>{var M=h(95),p=h(6),f=h(4),B=h(21),O=h(20),F=h(39),L=h(78),g=h(32),q=h(44),v=h(48),Q=h(88),R=h(25),j=h(96),I=h(71),k=h(34),C=h(41),U=h(52),K=U.enforce,u=U.get,m=f.Int8Array,_=m&&m.prototype,$=f.Uint8ClampedArray,P=$&&$.prototype,Zt=m&&j(m),dt=_&&j(_),It=Object.prototype,xt=f.TypeError,it=k("toStringTag"),Nt=C("TYPED_ARRAY_TAG"),zt="TypedArrayConstructor",Gt=M&&!!I&&L(f.opera)!=="Opera",Xt=!1,Ut,Vt,Ht,Pt={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},at={BigInt64Array:8,BigUint64Array:8},S=function(Mt){if(!O(Mt))return!1;var Rt=L(Mt);return Rt==="DataView"||F(Pt,Rt)||F(at,Rt)},w=function(Mt){var Rt=j(Mt);if(O(Rt)){var gt=u(Rt);return gt&&F(gt,zt)?gt[zt]:w(Rt)}},X=function(Mt){if(!O(Mt))return!1;var Rt=L(Mt);return F(Pt,Rt)||F(at,Rt)},J=function(Mt){if(X(Mt))return Mt;throw xt("Target is not a typed array")},H=function(Mt){if(B(Mt)&&(!I||R(Zt,Mt)))return Mt;throw xt(g(Mt)+" is not a typed array constructor")},et=function(Mt,Rt,gt,Ot){if(p){if(gt)for(var Dt in Pt){var qt=f[Dt];if(qt&&F(qt.prototype,Mt))try{delete qt.prototype[Mt]}catch(vt){try{qt.prototype[Mt]=Rt}catch(dl){}}}(!dt[Mt]||gt)&&v(dt,Mt,gt?Rt:Gt&&_[Mt]||Rt,Ot)}},lt=function(Mt,Rt,gt){var Ot,Dt;if(p){if(I){if(gt){for(Ot in Pt)if(Dt=f[Ot],Dt&&F(Dt,Mt))try{delete Dt[Mt]}catch(qt){}}if(!Zt[Mt]||gt)try{return v(Zt,Mt,gt?Rt:Gt&&Zt[Mt]||Rt)}catch(qt){}else return}for(Ot in Pt)Dt=f[Ot],Dt&&(!Dt[Mt]||gt)&&v(Dt,Mt,Rt)}};for(Ut in Pt)Vt=f[Ut],Ht=Vt&&Vt.prototype,Ht?K(Ht)[zt]=Vt:Gt=!1;for(Ut in at)Vt=f[Ut],Ht=Vt&&Vt.prototype,Ht&&(K(Ht)[zt]=Vt);if((!Gt||!B(Zt)||Zt===Function.prototype)&&(Zt=function(){throw xt("Incorrect invocation")},Gt))for(Ut in Pt)f[Ut]&&I(f[Ut],Zt);if((!Gt||!dt||dt===It)&&(dt=Zt.prototype,Gt))for(Ut in Pt)f[Ut]&&I(f[Ut].prototype,dt);if(Gt&&j(P)!==dt&&I(P,dt),p&&!F(dt,it)){Xt=!0,Q(dt,it,{configurable:!0,get:function(){return O(this)?this[Nt]:void 0}});for(Ut in Pt)f[Ut]&&q(f[Ut],Nt,Ut)}st.exports={NATIVE_ARRAY_BUFFER_VIEWS:Gt,TYPED_ARRAY_TAG:Xt&&Nt,aTypedArray:J,aTypedArrayConstructor:H,exportTypedArrayMethod:et,exportTypedArrayStaticMethod:lt,getTypedArrayConstructor:w,isView:S,isTypedArray:X,TypedArray:Zt,TypedArrayPrototype:dt}},st=>{st.exports=typeof ArrayBuffer<"u"&&typeof DataView<"u"},(st,r,h)=>{var M=h(39),p=h(21),f=h(40),B=h(54),O=h(97),F=B("IE_PROTO"),L=Object,g=L.prototype;st.exports=O?L.getPrototypeOf:function(q){var v=f(q);if(M(v,F))return v[F];var Q=v.constructor;return p(Q)&&v instanceof Q?Q.prototype:v instanceof L?g:null}},(st,r,h)=>{var M=h(7);st.exports=!M(function(){function p(){}return p.prototype.constructor=null,Object.getPrototypeOf(new p)!==p.prototype})},(st,r,h)=>{var M=h(99),p=h(13),f=h(40),B=h(64),O=function(F){var L=F===1;return function(g,q,v){for(var Q=f(g),R=p(Q),j=M(q,v),I=B(R),k,C;I-- >0;)if(k=R[I],C=j(k,I,Q),C)switch(F){case 0:return k;case 1:return I}return L?-1:void 0}};st.exports={findLast:O(0),findLastIndex:O(1)}},(st,r,h)=>{var M=h(100),p=h(31),f=h(9),B=M(M.bind);st.exports=function(O,F){return p(O),F===void 0?O:f?B(O,F):function(){return O.apply(F,arguments)}}},(st,r,h)=>{var M=h(15),p=h(14);st.exports=function(f){if(M(f)==="Function")return p(f)}},(st,r,h)=>{var M=h(94),p=h(98).findLastIndex,f=M.aTypedArray,B=M.exportTypedArrayMethod;B("findLastIndex",function(O){return p(f(this),O,arguments.length>1?arguments[1]:void 0)})},(st,r,h)=>{var M=h(4),p=h(8),f=h(94),B=h(64),O=h(103),F=h(40),L=h(7),g=M.RangeError,q=M.Int8Array,v=q&&q.prototype,Q=v&&v.set,R=f.aTypedArray,j=f.exportTypedArrayMethod,I=!L(function(){var C=new Uint8ClampedArray(2);return p(Q,C,{length:1,0:3},1),C[1]!==3}),k=I&&f.NATIVE_ARRAY_BUFFER_VIEWS&&L(function(){var C=new q(2);return C.set(1),C.set("2",1),C[0]!==0||C[1]!==2});j("set",function(C){R(this);var U=O(arguments.length>1?arguments[1]:void 0,1),K=F(C);if(I)return p(Q,this,K,U);var u=this.length,m=B(K),_=0;if(m+U>u)throw g("Wrong length");for(;_<m;)this[U+_]=K[_++]},!I||k)},(st,r,h)=>{var M=h(104),p=RangeError;st.exports=function(f,B){var O=M(f);if(O%B)throw p("Wrong offset");return O}},(st,r,h)=>{var M=h(62),p=RangeError;st.exports=function(f){var B=M(f);if(B<0)throw p("The argument can't be less than 0");return B}},(st,r,h)=>{var M=h(106),p=h(94),f=p.aTypedArray,B=p.exportTypedArrayMethod,O=p.getTypedArrayConstructor;B("toReversed",function(){return M(f(this),O(this))})},(st,r,h)=>{var M=h(64);st.exports=function(p,f){for(var B=M(p),O=new f(B),F=0;F<B;F++)O[F]=p[B-F-1];return O}},(st,r,h)=>{var M=h(94),p=h(14),f=h(31),B=h(108),O=M.aTypedArray,F=M.getTypedArrayConstructor,L=M.exportTypedArrayMethod,g=p(M.TypedArrayPrototype.sort);L("toSorted",function(q){q!==void 0&&f(q);var v=O(this),Q=B(F(v),v);return g(Q,q)})},(st,r,h)=>{var M=h(64);st.exports=function(p,f){for(var B=0,O=M(f),F=new p(O);O>B;)F[B]=f[B++];return F}},(st,r,h)=>{var M=h(110),p=h(94),f=h(111),B=h(62),O=h(112),F=p.aTypedArray,L=p.getTypedArrayConstructor,g=p.exportTypedArrayMethod,q=!!function(){try{new Int8Array(1).with(2,{valueOf:function(){throw 8}})}catch(v){return v===8}}();g("with",function(v,Q){var R=F(this),j=B(v),I=f(R)?O(Q):+Q;return M(R,L(R),j,I)},!q)},(st,r,h)=>{var M=h(64),p=h(62),f=RangeError;st.exports=function(B,O,F,L){var g=M(B),q=p(F),v=q<0?g+q:q;if(v>=g||v<0)throw f("Incorrect index");for(var Q=new O(g),R=0;R<g;R++)Q[R]=R===v?L:B[R];return Q}},(st,r,h)=>{var M=h(78);st.exports=function(p){var f=M(p);return f==="BigInt64Array"||f==="BigUint64Array"}},(st,r,h)=>{var M=h(19),p=TypeError;st.exports=function(f){var B=M(f,"number");if(typeof B=="number")throw p("Can't convert number to bigint");return BigInt(B)}},(st,r,h)=>{var M=h(6),p=h(88),f=h(114),B=ArrayBuffer.prototype;M&&!("detached"in B)&&p(B,"detached",{configurable:!0,get:function(){return f(this)}})},(st,r,h)=>{var M=h(14),p=h(115),f=M(ArrayBuffer.prototype.slice);st.exports=function(B){if(p(B)!==0)return!1;try{return f(B,0,0),!1}catch(O){return!0}}},(st,r,h)=>{var M=h(72),p=h(15),f=TypeError;st.exports=M(ArrayBuffer.prototype,"byteLength","get")||function(B){if(p(B)!=="ArrayBuffer")throw f("ArrayBuffer expected");return B.byteLength}},(st,r,h)=>{var M=h(3),p=h(117);p&&M({target:"ArrayBuffer",proto:!0},{transfer:function(){return p(this,arguments.length?arguments[0]:void 0,!0)}})},(st,r,h)=>{var M=h(4),p=h(14),f=h(72),B=h(118),O=h(114),F=h(115),L=h(119),g=M.TypeError,q=M.structuredClone,v=M.ArrayBuffer,Q=M.DataView,R=Math.min,j=v.prototype,I=Q.prototype,k=p(j.slice),C=f(j,"resizable","get"),U=f(j,"maxByteLength","get"),K=p(I.getInt8),u=p(I.setInt8);st.exports=L&&function(m,_,$){var P=F(m),Zt=_===void 0?P:B(_),dt=!C||!C(m);if(O(m))throw g("ArrayBuffer is detached");var It=q(m,{transfer:[m]});if(P===Zt&&($||dt))return It;if(P>=Zt&&(!$||dt))return k(It,0,Zt);for(var xt=$&&!dt&&U?{maxByteLength:U(It)}:void 0,it=new v(Zt,xt),Nt=new Q(It),zt=new Q(it),Gt=R(Zt,P),Xt=0;Xt<Gt;Xt++)u(zt,Xt,K(Nt,Xt));return it}},(st,r,h)=>{var M=h(62),p=h(65),f=RangeError;st.exports=function(B){if(B===void 0)return 0;var O=M(B),F=p(O);if(O!==F)throw f("Wrong length or index");return F}},(st,r,h)=>{var M=h(4),p=h(7),f=h(28),B=h(120),O=h(121),F=h(122),L=M.structuredClone;st.exports=!!L&&!p(function(){if(O&&f>92||F&&f>94||B&&f>97)return!1;var g=new ArrayBuffer(8),q=L(g,{transfer:[g]});return g.byteLength!==0||q.byteLength!==8})},(st,r,h)=>{var M=h(121),p=h(122);st.exports=!M&&!p&&typeof window=="object"&&typeof document=="object"},st=>{st.exports=typeof Deno=="object"&&Deno&&typeof Deno.version=="object"},(st,r,h)=>{var M=h(4),p=h(15);st.exports=p(M.process)==="process"},(st,r,h)=>{var M=h(3),p=h(117);p&&M({target:"ArrayBuffer",proto:!0},{transferToFixedLength:function(){return p(this,arguments.length?arguments[0]:void 0,!1)}})},(__unused_webpack_module,exports,__w_pdfjs_require__)=>{var D,l,c,n,ht,V,St,Y,e,i,x,o,G,s,b,a,rt,N,W,At,Z,d;Object.defineProperty(exports,"__esModule",{value:!0}),exports.RenderTask=exports.PDFWorkerUtil=exports.PDFWorker=exports.PDFPageProxy=exports.PDFDocumentProxy=exports.PDFDocumentLoadingTask=exports.PDFDataRangeTransport=exports.LoopbackPort=exports.DefaultStandardFontDataFactory=exports.DefaultFilterFactory=exports.DefaultCanvasFactory=exports.DefaultCMapReaderFactory=void 0,Object.defineProperty(exports,"SVGGraphics",{enumerable:!0,get:function(){return _displaySvg.SVGGraphics}}),exports.build=void 0,exports.getDocument=getDocument,exports.version=void 0,__w_pdfjs_require__(84),__w_pdfjs_require__(86),__w_pdfjs_require__(87),__w_pdfjs_require__(2),__w_pdfjs_require__(93),__w_pdfjs_require__(101),__w_pdfjs_require__(102),__w_pdfjs_require__(105),__w_pdfjs_require__(107),__w_pdfjs_require__(109),__w_pdfjs_require__(113),__w_pdfjs_require__(116),__w_pdfjs_require__(123),__w_pdfjs_require__(89),__w_pdfjs_require__(125),__w_pdfjs_require__(136),__w_pdfjs_require__(138),__w_pdfjs_require__(141),__w_pdfjs_require__(143),__w_pdfjs_require__(145),__w_pdfjs_require__(147),__w_pdfjs_require__(149),__w_pdfjs_require__(152);var _util=__w_pdfjs_require__(1),_annotation_storage=__w_pdfjs_require__(163),_display_utils=__w_pdfjs_require__(168),_font_loader=__w_pdfjs_require__(171),_displayNode_utils=__w_pdfjs_require__(172),_canvas=__w_pdfjs_require__(173),_worker_options=__w_pdfjs_require__(176),_message_handler=__w_pdfjs_require__(177),_metadata=__w_pdfjs_require__(178),_optional_content_config=__w_pdfjs_require__(179),_transport_stream=__w_pdfjs_require__(180),_displayFetch_stream=__w_pdfjs_require__(181),_displayNetwork=__w_pdfjs_require__(184),_displayNode_stream=__w_pdfjs_require__(185),_displaySvg=__w_pdfjs_require__(186),_xfa_text=__w_pdfjs_require__(194);const DEFAULT_RANGE_CHUNK_SIZE=65536,RENDERING_CANCELLED_TIMEOUT=100,DELAYED_CLEANUP_TIMEOUT=5e3,DefaultCanvasFactory=_util.isNodeJS?_displayNode_utils.NodeCanvasFactory:_display_utils.DOMCanvasFactory;exports.DefaultCanvasFactory=DefaultCanvasFactory;const DefaultCMapReaderFactory=_util.isNodeJS?_displayNode_utils.NodeCMapReaderFactory:_display_utils.DOMCMapReaderFactory;exports.DefaultCMapReaderFactory=DefaultCMapReaderFactory;const DefaultFilterFactory=_util.isNodeJS?_displayNode_utils.NodeFilterFactory:_display_utils.DOMFilterFactory;exports.DefaultFilterFactory=DefaultFilterFactory;const DefaultStandardFontDataFactory=_util.isNodeJS?_displayNode_utils.NodeStandardFontDataFactory:_display_utils.DOMStandardFontDataFactory;exports.DefaultStandardFontDataFactory=DefaultStandardFontDataFactory;function getDocument(st){var S,w;if(typeof st=="string"||st instanceof URL?st={url:st}:(0,_util.isArrayBuffer)(st)&&(st={data:st}),typeof st!="object")throw new Error("Invalid parameter in getDocument, need parameter object.");if(!st.url&&!st.data&&!st.range)throw new Error("Invalid parameter object: need either .data, .range or .url");const r=new PDFDocumentLoadingTask,{docId:h}=r,M=st.url?getUrlProp(st.url):null,p=st.data?getDataProp(st.data):null,f=st.httpHeaders||null,B=st.withCredentials===!0,O=(S=st.password)!=null?S:null,F=st.range instanceof PDFDataRangeTransport?st.range:null,L=Number.isInteger(st.rangeChunkSize)&&st.rangeChunkSize>0?st.rangeChunkSize:DEFAULT_RANGE_CHUNK_SIZE;let g=st.worker instanceof PDFWorker?st.worker:null;const q=st.verbosity,v=typeof st.docBaseUrl=="string"&&!(0,_display_utils.isDataScheme)(st.docBaseUrl)?st.docBaseUrl:null,Q=typeof st.cMapUrl=="string"?st.cMapUrl:null,R=st.cMapPacked!==!1,j=st.CMapReaderFactory||DefaultCMapReaderFactory,I=typeof st.standardFontDataUrl=="string"?st.standardFontDataUrl:null,k=st.StandardFontDataFactory||DefaultStandardFontDataFactory,C=st.stopAtErrors!==!0,U=Number.isInteger(st.maxImageSize)&&st.maxImageSize>-1?st.maxImageSize:-1,K=st.isEvalSupported!==!1,u=typeof st.isOffscreenCanvasSupported=="boolean"?st.isOffscreenCanvasSupported:!_util.isNodeJS,m=Number.isInteger(st.canvasMaxAreaInBytes)?st.canvasMaxAreaInBytes:-1,_=typeof st.disableFontFace=="boolean"?st.disableFontFace:_util.isNodeJS,$=st.fontExtraProperties===!0,P=st.enableXfa===!0,Zt=st.ownerDocument||globalThis.document,dt=st.disableRange===!0,It=st.disableStream===!0,xt=st.disableAutoFetch===!0,it=st.pdfBug===!0,Nt=F?F.length:(w=st.length)!=null?w:NaN,zt=typeof st.useSystemFonts=="boolean"?st.useSystemFonts:!_util.isNodeJS&&!_,Gt=typeof st.useWorkerFetch=="boolean"?st.useWorkerFetch:j===_display_utils.DOMCMapReaderFactory&&k===_display_utils.DOMStandardFontDataFactory&&Q&&I&&(0,_display_utils.isValidFetchUrl)(Q,document.baseURI)&&(0,_display_utils.isValidFetchUrl)(I,document.baseURI),Xt=st.canvasFactory||new DefaultCanvasFactory({ownerDocument:Zt}),Ut=st.filterFactory||new DefaultFilterFactory({docId:h,ownerDocument:Zt}),Vt=null;(0,_util.setVerbosityLevel)(q);const Ht={canvasFactory:Xt,filterFactory:Ut};if(Gt||(Ht.cMapReaderFactory=new j({baseUrl:Q,isCompressed:R}),Ht.standardFontDataFactory=new k({baseUrl:I})),!g){const X={verbosity:q,port:_worker_options.GlobalWorkerOptions.workerPort};g=X.port?PDFWorker.fromPort(X):new PDFWorker(X),r._worker=g}const Pt={docId:h,apiVersion:"3.11.174",data:p,password:O,disableAutoFetch:xt,rangeChunkSize:L,length:Nt,docBaseUrl:v,enableXfa:P,evaluatorOptions:{maxImageSize:U,disableFontFace:_,ignoreErrors:C,isEvalSupported:K,isOffscreenCanvasSupported:u,canvasMaxAreaInBytes:m,fontExtraProperties:$,useSystemFonts:zt,cMapUrl:Gt?Q:null,standardFontDataUrl:Gt?I:null}},at={ignoreErrors:C,isEvalSupported:K,disableFontFace:_,fontExtraProperties:$,enableXfa:P,ownerDocument:Zt,disableAutoFetch:xt,pdfBug:it,styleElement:Vt};return g.promise.then(function(){if(r.destroyed)throw new Error("Loading aborted");const X=_fetchDocument(g,Pt),J=new Promise(function(H){let et;F?et=new _transport_stream.PDFDataTransportStream({length:Nt,initialData:F.initialData,progressiveDone:F.progressiveDone,contentDispositionFilename:F.contentDispositionFilename,disableRange:dt,disableStream:It},F):p||(et=(lt=>_util.isNodeJS?new _displayNode_stream.PDFNodeStream(lt):(0,_display_utils.isValidFetchUrl)(lt.url)?new _displayFetch_stream.PDFFetchStream(lt):new _displayNetwork.PDFNetworkStream(lt))({url:M,length:Nt,httpHeaders:f,withCredentials:B,rangeChunkSize:L,disableRange:dt,disableStream:It})),H(et)});return Promise.all([X,J]).then(function(H){let[et,lt]=H;if(r.destroyed)throw new Error("Loading aborted");const Mt=new _message_handler.MessageHandler(h,et,g.port),Rt=new WorkerTransport(Mt,r,lt,at,Ht);r._transport=Rt,Mt.send("Ready",null)})}).catch(r._capability.reject),r}function _fetchDocument(st,r){return Sl(this,null,function*(){if(st.destroyed)throw new Error("Worker was destroyed");const h=yield st.messageHandler.sendWithPromise("GetDocRequest",r,r.data?[r.data.buffer]:null);if(st.destroyed)throw new Error("Worker was destroyed");return h})}function getUrlProp(st){if(st instanceof URL)return st.href;try{return new URL(st,window.location).href}catch(r){if(_util.isNodeJS&&typeof st=="string")return st}throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.")}function getDataProp(st){if(_util.isNodeJS&&typeof Buffer<"u"&&st instanceof Buffer)throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");if(st instanceof Uint8Array&&st.byteLength===st.buffer.byteLength)return st;if(typeof st=="string")return(0,_util.stringToBytes)(st);if(typeof st=="object"&&!isNaN(st==null?void 0:st.length)||(0,_util.isArrayBuffer)(st))return new Uint8Array(st);throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.")}const y=class Ks{constructor(){this._capability=new _util.PromiseCapability,this._transport=null,this._worker=null,this.docId=`d${mt(Ks,D)._++}`,this.destroyed=!1,this.onPassword=null,this.onProgress=null}get promise(){return this._capability.promise}destroy(){return Sl(this,null,function*(){var r,h,M;this.destroyed=!0;try{(r=this._worker)!=null&&r.port&&(this._worker._pendingDestroy=!0),yield(h=this._transport)==null?void 0:h.destroy()}catch(p){throw(M=this._worker)!=null&&M.port&&delete this._worker._pendingDestroy,p}this._transport=null,this._worker&&(this._worker.destroy(),this._worker=null)})}};D=new WeakMap,E(y,D,0);let PDFDocumentLoadingTask=y;exports.PDFDocumentLoadingTask=PDFDocumentLoadingTask;class PDFDataRangeTransport{constructor(r,h){let M=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,p=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;this.length=r,this.initialData=h,this.progressiveDone=M,this.contentDispositionFilename=p,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._progressiveDoneListeners=[],this._readyCapability=new _util.PromiseCapability}addRangeListener(r){this._rangeListeners.push(r)}addProgressListener(r){this._progressListeners.push(r)}addProgressiveReadListener(r){this._progressiveReadListeners.push(r)}addProgressiveDoneListener(r){this._progressiveDoneListeners.push(r)}onDataRange(r,h){for(const M of this._rangeListeners)M(r,h)}onDataProgress(r,h){this._readyCapability.promise.then(()=>{for(const M of this._progressListeners)M(r,h)})}onDataProgressiveRead(r){this._readyCapability.promise.then(()=>{for(const h of this._progressiveReadListeners)h(r)})}onDataProgressiveDone(){this._readyCapability.promise.then(()=>{for(const r of this._progressiveDoneListeners)r()})}transportReady(){this._readyCapability.resolve()}requestDataRange(r,h){(0,_util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange")}abort(){}}exports.PDFDataRangeTransport=PDFDataRangeTransport;class PDFDocumentProxy{constructor(r,h){this._pdfInfo=r,this._transport=h,Object.defineProperty(this,"getJavaScript",{value:()=>((0,_display_utils.deprecated)("`PDFDocumentProxy.getJavaScript`, please use `PDFDocumentProxy.getJSActions` instead."),this.getJSActions().then(M=>{if(!M)return M;const p=[];for(const f in M)p.push(...M[f]);return p}))})}get annotationStorage(){return this._transport.annotationStorage}get filterFactory(){return this._transport.filterFactory}get numPages(){return this._pdfInfo.numPages}get fingerprints(){return this._pdfInfo.fingerprints}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}get allXfaHtml(){return this._transport._htmlForXfa}getPage(r){return this._transport.getPage(r)}getPageIndex(r){return this._transport.getPageIndex(r)}getDestinations(){return this._transport.getDestinations()}getDestination(r){return this._transport.getDestination(r)}getPageLabels(){return this._transport.getPageLabels()}getPageLayout(){return this._transport.getPageLayout()}getPageMode(){return this._transport.getPageMode()}getViewerPreferences(){return this._transport.getViewerPreferences()}getOpenAction(){return this._transport.getOpenAction()}getAttachments(){return this._transport.getAttachments()}getJSActions(){return this._transport.getDocJSActions()}getOutline(){return this._transport.getOutline()}getOptionalContentConfig(){return this._transport.getOptionalContentConfig()}getPermissions(){return this._transport.getPermissions()}getMetadata(){return this._transport.getMetadata()}getMarkInfo(){return this._transport.getMarkInfo()}getData(){return this._transport.getData()}saveDocument(){return this._transport.saveDocument()}getDownloadInfo(){return this._transport.downloadInfoCapability.promise}cleanup(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;return this._transport.startCleanup(r||this.isPureXfa)}destroy(){return this.loadingTask.destroy()}get loadingParams(){return this._transport.loadingParams}get loadingTask(){return this._transport.loadingTask}getFieldObjects(){return this._transport.getFieldObjects()}hasJSActions(){return this._transport.hasJSActions()}getCalculationOrderIds(){return this._transport.getCalculationOrderIds()}}exports.PDFDocumentProxy=PDFDocumentProxy;class PDFPageProxy{constructor(r,h,M){E(this,n),E(this,V),E(this,l,null),E(this,c,!1);let p=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;this._pageIndex=r,this._pageInfo=h,this._transport=M,this._stats=p?new _display_utils.StatTimer:null,this._pdfBug=p,this.commonObjs=M.commonObjs,this.objs=new PDFObjects,this._maybeCleanupAfterRender=!1,this._intentStates=new Map,this.destroyed=!1}get pageNumber(){return this._pageIndex+1}get rotate(){return this._pageInfo.rotate}get ref(){return this._pageInfo.ref}get userUnit(){return this._pageInfo.userUnit}get view(){return this._pageInfo.view}getViewport(){let{scale:r,rotation:h=this.rotate,offsetX:M=0,offsetY:p=0,dontFlip:f=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return new _display_utils.PageViewport({viewBox:this.view,scale:r,rotation:h,offsetX:M,offsetY:p,dontFlip:f})}getAnnotations(){let{intent:r="display"}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};const h=this._transport.getRenderingIntent(r);return this._transport.getAnnotations(this._pageIndex,h.renderingIntent)}getJSActions(){return this._transport.getPageJSActions(this._pageIndex)}get filterFactory(){return this._transport.filterFactory}get isPureXfa(){return(0,_util.shadow)(this,"isPureXfa",!!this._transport._htmlForXfa)}getXfa(){return Sl(this,null,function*(){var r;return((r=this._transport._htmlForXfa)==null?void 0:r.children[this._pageIndex])||null})}render(r){var h,M;let{canvasContext:p,viewport:f,intent:B="display",annotationMode:O=_util.AnnotationMode.ENABLE,transform:F=null,background:L=null,optionalContentConfigPromise:g=null,annotationCanvasMap:q=null,pageColors:v=null,printAnnotationStorage:Q=null}=r;(h=this._stats)==null||h.time("Overall");const R=this._transport.getRenderingIntent(B,O,Q);Zl(this,c,!1),A(this,V,St).call(this),g||(g=this._transport.getOptionalContentConfig());let j=this._intentStates.get(R.cacheKey);j||(j=Object.create(null),this._intentStates.set(R.cacheKey,j)),j.streamReaderCancelTimeout&&(clearTimeout(j.streamReaderCancelTimeout),j.streamReaderCancelTimeout=null);const I=!!(R.renderingIntent&_util.RenderingIntentFlag.PRINT);j.displayReadyCapability||(j.displayReadyCapability=new _util.PromiseCapability,j.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(M=this._stats)==null||M.time("Page Request"),this._pumpOperatorList(R));const k=K=>{var u,m;j.renderTasks.delete(C),(this._maybeCleanupAfterRender||I)&&Zl(this,c,!0),A(this,n,ht).call(this,!I),K?(C.capability.reject(K),this._abortOperatorList({intentState:j,reason:K instanceof Error?K:new Error(K)})):C.capability.resolve(),(u=this._stats)==null||u.timeEnd("Rendering"),(m=this._stats)==null||m.timeEnd("Overall")},C=new InternalRenderTask({callback:k,params:{canvasContext:p,viewport:f,transform:F,background:L},objs:this.objs,commonObjs:this.commonObjs,annotationCanvasMap:q,operatorList:j.operatorList,pageIndex:this._pageIndex,canvasFactory:this._transport.canvasFactory,filterFactory:this._transport.filterFactory,useRequestAnimationFrame:!I,pdfBug:this._pdfBug,pageColors:v});(j.renderTasks||(j.renderTasks=new Set)).add(C);const U=C.task;return Promise.all([j.displayReadyCapability.promise,g]).then(K=>{var u;let[m,_]=K;if(this.destroyed){k();return}(u=this._stats)==null||u.time("Rendering"),C.initializeGraphics({transparency:m,optionalContentConfig:_}),C.operatorListChanged()}).catch(k),U}getOperatorList(){var r;let{intent:h="display",annotationMode:M=_util.AnnotationMode.ENABLE,printAnnotationStorage:p=null}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};function f(){O.operatorList.lastChunk&&(O.opListReadCapability.resolve(O.operatorList),O.renderTasks.delete(F))}const B=this._transport.getRenderingIntent(h,M,p,!0);let O=this._intentStates.get(B.cacheKey);O||(O=Object.create(null),this._intentStates.set(B.cacheKey,O));let F;return O.opListReadCapability||(F=Object.create(null),F.operatorListChanged=f,O.opListReadCapability=new _util.PromiseCapability,(O.renderTasks||(O.renderTasks=new Set)).add(F),O.operatorList={fnArray:[],argsArray:[],lastChunk:!1,separateAnnots:null},(r=this._stats)==null||r.time("Page Request"),this._pumpOperatorList(B)),O.opListReadCapability.promise}streamTextContent(){let{includeMarkedContent:r=!1,disableNormalization:h=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return this._transport.messageHandler.sendWithStream("GetTextContent",{pageIndex:this._pageIndex,includeMarkedContent:r===!0,disableNormalization:h===!0},{highWaterMark:100,size(p){return p.items.length}})}getTextContent(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this._transport._htmlForXfa)return this.getXfa().then(M=>_xfa_text.XfaText.textContent(M));const h=this.streamTextContent(r);return new Promise(function(M,p){function f(){B.read().then(function(F){let{value:L,done:g}=F;if(g){M(O);return}Object.assign(O.styles,L.styles),O.items.push(...L.items),f()},p)}const B=h.getReader(),O={items:[],styles:Object.create(null)};f()})}getStructTree(){return this._transport.getStructTree(this._pageIndex)}_destroy(){this.destroyed=!0;const r=[];for(const h of this._intentStates.values())if(this._abortOperatorList({intentState:h,reason:new Error("Page was destroyed."),force:!0}),!h.opListReadCapability)for(const M of h.renderTasks)r.push(M.completed),M.cancel();return this.objs.clear(),Zl(this,c,!1),A(this,V,St).call(this),Promise.all(r)}cleanup(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;Zl(this,c,!0);const h=A(this,n,ht).call(this,!1);return r&&h&&this._stats&&(this._stats=new _display_utils.StatTimer),h}_startRenderPage(r,h){var M,p;const f=this._intentStates.get(h);f&&((M=this._stats)==null||M.timeEnd("Page Request"),(p=f.displayReadyCapability)==null||p.resolve(r))}_renderPageChunk(r,h){for(let M=0,p=r.length;M<p;M++)h.operatorList.fnArray.push(r.fnArray[M]),h.operatorList.argsArray.push(r.argsArray[M]);h.operatorList.lastChunk=r.lastChunk,h.operatorList.separateAnnots=r.separateAnnots;for(const M of h.renderTasks)M.operatorListChanged();r.lastChunk&&A(this,n,ht).call(this,!0)}_pumpOperatorList(r){let{renderingIntent:h,cacheKey:M,annotationStorageSerializable:p}=r;const{map:f,transfers:B}=p,O=this._transport.messageHandler.sendWithStream("GetOperatorList",{pageIndex:this._pageIndex,intent:h,cacheKey:M,annotationStorage:f},B).getReader(),F=this._intentStates.get(M);F.streamReader=O;const L=()=>{O.read().then(g=>{let{value:q,done:v}=g;if(v){F.streamReader=null;return}this._transport.destroyed||(this._renderPageChunk(q,F),L())},g=>{if(F.streamReader=null,!this._transport.destroyed){if(F.operatorList){F.operatorList.lastChunk=!0;for(const q of F.renderTasks)q.operatorListChanged();A(this,n,ht).call(this,!0)}if(F.displayReadyCapability)F.displayReadyCapability.reject(g);else if(F.opListReadCapability)F.opListReadCapability.reject(g);else throw g}})};L()}_abortOperatorList(r){let{intentState:h,reason:M,force:p=!1}=r;if(h.streamReader){if(h.streamReaderCancelTimeout&&(clearTimeout(h.streamReaderCancelTimeout),h.streamReaderCancelTimeout=null),!p){if(h.renderTasks.size>0)return;if(M instanceof _display_utils.RenderingCancelledException){let f=RENDERING_CANCELLED_TIMEOUT;M.extraDelay>0&&M.extraDelay<1e3&&(f+=M.extraDelay),h.streamReaderCancelTimeout=setTimeout(()=>{h.streamReaderCancelTimeout=null,this._abortOperatorList({intentState:h,reason:M,force:!0})},f);return}}if(h.streamReader.cancel(new _util.AbortException(M.message)).catch(()=>{}),h.streamReader=null,!this._transport.destroyed){for(const[f,B]of this._intentStates)if(B===h){this._intentStates.delete(f);break}this.cleanup()}}}get stats(){return this._stats}}l=new WeakMap,c=new WeakMap,n=new WeakSet,ht=function(){let st=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(A(this,V,St).call(this),!t(this,c)||this.destroyed)return!1;if(st)return Zl(this,l,setTimeout(()=>{Zl(this,l,null),A(this,n,ht).call(this,!1)},DELAYED_CLEANUP_TIMEOUT)),!1;for(const{renderTasks:r,operatorList:h}of this._intentStates.values())if(r.size>0||!h.lastChunk)return!1;return this._intentStates.clear(),this.objs.clear(),Zl(this,c,!1),!0},V=new WeakSet,St=function(){t(this,l)&&(clearTimeout(t(this,l)),Zl(this,l,null))},exports.PDFPageProxy=PDFPageProxy;class LoopbackPort{constructor(){E(this,Y,new Set),E(this,e,Promise.resolve())}postMessage(r,h){const M={data:structuredClone(r,null)};t(this,e).then(()=>{for(const p of t(this,Y))p.call(this,M)})}addEventListener(r,h){t(this,Y).add(h)}removeEventListener(r,h){t(this,Y).delete(h)}terminate(){t(this,Y).clear()}}Y=new WeakMap,e=new WeakMap,exports.LoopbackPort=LoopbackPort;const PDFWorkerUtil={isWorkerDisabled:!1,fallbackWorkerSrc:null,fakeWorkerId:0};exports.PDFWorkerUtil=PDFWorkerUtil;{if(_util.isNodeJS&&typeof commonjsRequire=="function")PDFWorkerUtil.isWorkerDisabled=!0,PDFWorkerUtil.fallbackWorkerSrc="./pdf.worker.js";else if(typeof document=="object"){const st=(i=document==null?void 0:document.currentScript)==null?void 0:i.src;st&&(PDFWorkerUtil.fallbackWorkerSrc=st.replace(/(\.(?:min\.)?js)(\?.*)?$/i,".worker$1$2"))}PDFWorkerUtil.isSameOrigin=function(st,r){let h;try{if(h=new URL(st),!h.origin||h.origin==="null")return!1}catch(p){return!1}const M=new URL(r,h);return h.origin===M.origin},PDFWorkerUtil.createCDNWrapper=function(st){const r=`importScripts("${st}");`;return URL.createObjectURL(new Blob([r]))}}const _PDFWorker=class __PDFWorker{constructor(){var st;let{name:r=null,port:h=null,verbosity:M=(0,_util.getVerbosityLevel)()}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.name=r,this.destroyed=!1,this.verbosity=M,this._readyCapability=new _util.PromiseCapability,this._port=null,this._webWorker=null,this._messageHandler=null,h){if((st=t(__PDFWorker,x))!=null&&st.has(h))throw new Error("Cannot use more than one PDFWorker per port.");(t(__PDFWorker,x)||Zl(__PDFWorker,x,new WeakMap)).set(h,this),this._initializeFromPort(h);return}this._initialize()}get promise(){return this._readyCapability.promise}get port(){return this._port}get messageHandler(){return this._messageHandler}_initializeFromPort(st){this._port=st,this._messageHandler=new _message_handler.MessageHandler("main","worker",st),this._messageHandler.on("ready",function(){}),this._readyCapability.resolve(),this._messageHandler.send("configure",{verbosity:this.verbosity})}_initialize(){if(!PDFWorkerUtil.isWorkerDisabled&&!__PDFWorker._mainThreadWorkerMessageHandler){let{workerSrc:st}=__PDFWorker;try{PDFWorkerUtil.isSameOrigin(window.location.href,st)||(st=PDFWorkerUtil.createCDNWrapper(new URL(st,window.location).href));const r=new Worker(st),h=new _message_handler.MessageHandler("main","worker",r),M=()=>{r.removeEventListener("error",p),h.destroy(),r.terminate(),this.destroyed?this._readyCapability.reject(new Error("Worker was destroyed")):this._setupFakeWorker()},p=()=>{this._webWorker||M()};r.addEventListener("error",p),h.on("test",B=>{if(r.removeEventListener("error",p),this.destroyed){M();return}B?(this._messageHandler=h,this._port=r,this._webWorker=r,this._readyCapability.resolve(),h.send("configure",{verbosity:this.verbosity})):(this._setupFakeWorker(),h.destroy(),r.terminate())}),h.on("ready",B=>{if(r.removeEventListener("error",p),this.destroyed){M();return}try{f()}catch(O){this._setupFakeWorker()}});const f=()=>{const B=new Uint8Array;h.send("test",B,[B.buffer])};f();return}catch(r){(0,_util.info)("The worker has been disabled.")}}this._setupFakeWorker()}_setupFakeWorker(){PDFWorkerUtil.isWorkerDisabled||((0,_util.warn)("Setting up fake worker."),PDFWorkerUtil.isWorkerDisabled=!0),__PDFWorker._setupFakeWorkerGlobal.then(st=>{if(this.destroyed){this._readyCapability.reject(new Error("Worker was destroyed"));return}const r=new LoopbackPort;this._port=r;const h=`fake${PDFWorkerUtil.fakeWorkerId++}`,M=new _message_handler.MessageHandler(h+"_worker",h,r);st.setup(M,r);const p=new _message_handler.MessageHandler(h,h+"_worker",r);this._messageHandler=p,this._readyCapability.resolve(),p.send("configure",{verbosity:this.verbosity})}).catch(st=>{this._readyCapability.reject(new Error(`Setting up fake worker failed: "${st.message}".`))})}destroy(){var st;this.destroyed=!0,this._webWorker&&(this._webWorker.terminate(),this._webWorker=null),(st=t(__PDFWorker,x))==null||st.delete(this._port),this._port=null,this._messageHandler&&(this._messageHandler.destroy(),this._messageHandler=null)}static fromPort(st){var r;if(!(st!=null&&st.port))throw new Error("PDFWorker.fromPort - invalid method signature.");const h=(r=t(this,x))==null?void 0:r.get(st.port);if(h){if(h._pendingDestroy)throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.");return h}return new __PDFWorker(st)}static get workerSrc(){if(_worker_options.GlobalWorkerOptions.workerSrc)return _worker_options.GlobalWorkerOptions.workerSrc;if(PDFWorkerUtil.fallbackWorkerSrc!==null)return _util.isNodeJS||(0,_display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'),PDFWorkerUtil.fallbackWorkerSrc;throw new Error('No "GlobalWorkerOptions.workerSrc" specified.')}static get _mainThreadWorkerMessageHandler(){var st;try{return((st=globalThis.pdfjsWorker)==null?void 0:st.WorkerMessageHandler)||null}catch(r){return null}}static get _setupFakeWorkerGlobal(){const loader=()=>Sl(this,null,function*(){const mainWorkerMessageHandler=this._mainThreadWorkerMessageHandler;if(mainWorkerMessageHandler)return mainWorkerMessageHandler;if(_util.isNodeJS&&typeof commonjsRequire=="function"){const worker=eval("require")(this.workerSrc);return worker.WorkerMessageHandler}return yield(0,_display_utils.loadScript)(this.workerSrc),window.pdfjsWorker.WorkerMessageHandler});return(0,_util.shadow)(this,"_setupFakeWorkerGlobal",loader())}};x=new WeakMap,E(_PDFWorker,x,void 0);let PDFWorker=_PDFWorker;exports.PDFWorker=PDFWorker;class WorkerTransport{constructor(r,h,M,p,f){E(this,a),E(this,o,new Map),E(this,G,new Map),E(this,s,new Map),E(this,b,null),this.messageHandler=r,this.loadingTask=h,this.commonObjs=new PDFObjects,this.fontLoader=new _font_loader.FontLoader({ownerDocument:p.ownerDocument,styleElement:p.styleElement}),this._params=p,this.canvasFactory=f.canvasFactory,this.filterFactory=f.filterFactory,this.cMapReaderFactory=f.cMapReaderFactory,this.standardFontDataFactory=f.standardFontDataFactory,this.destroyed=!1,this.destroyCapability=null,this._networkStream=M,this._fullReader=null,this._lastProgress=null,this.downloadInfoCapability=new _util.PromiseCapability,this.setupMessageHandler()}get annotationStorage(){return(0,_util.shadow)(this,"annotationStorage",new _annotation_storage.AnnotationStorage)}getRenderingIntent(r){let h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:_util.AnnotationMode.ENABLE,M=arguments.length>2&&arguments[2]!==void 0?arguments[2]:null,p=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,f=_util.RenderingIntentFlag.DISPLAY,B=_annotation_storage.SerializableEmpty;switch(r){case"any":f=_util.RenderingIntentFlag.ANY;break;case"display":break;case"print":f=_util.RenderingIntentFlag.PRINT;break;default:(0,_util.warn)(`getRenderingIntent - invalid intent: ${r}`)}switch(h){case _util.AnnotationMode.DISABLE:f+=_util.RenderingIntentFlag.ANNOTATIONS_DISABLE;break;case _util.AnnotationMode.ENABLE:break;case _util.AnnotationMode.ENABLE_FORMS:f+=_util.RenderingIntentFlag.ANNOTATIONS_FORMS;break;case _util.AnnotationMode.ENABLE_STORAGE:f+=_util.RenderingIntentFlag.ANNOTATIONS_STORAGE,B=(f&_util.RenderingIntentFlag.PRINT&&M instanceof _annotation_storage.PrintAnnotationStorage?M:this.annotationStorage).serializable;break;default:(0,_util.warn)(`getRenderingIntent - invalid annotationMode: ${h}`)}return p&&(f+=_util.RenderingIntentFlag.OPLIST),{renderingIntent:f,cacheKey:`${f}_${B.hash}`,annotationStorageSerializable:B}}destroy(){var r;if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=new _util.PromiseCapability,(r=t(this,b))==null||r.reject(new Error("Worker was destroyed during onPassword callback"));const h=[];for(const p of t(this,G).values())h.push(p._destroy());t(this,G).clear(),t(this,s).clear(),this.hasOwnProperty("annotationStorage")&&this.annotationStorage.resetModified();const M=this.messageHandler.sendWithPromise("Terminate",null);return h.push(M),Promise.all(h).then(()=>{var p;this.commonObjs.clear(),this.fontLoader.clear(),t(this,o).clear(),this.filterFactory.destroy(),(p=this._networkStream)==null||p.cancelAllRequests(new _util.AbortException("Worker was terminated.")),this.messageHandler&&(this.messageHandler.destroy(),this.messageHandler=null),this.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise}setupMessageHandler(){const{messageHandler:r,loadingTask:h}=this;r.on("GetReader",(M,p)=>{(0,_util.assert)(this._networkStream,"GetReader - no `IPDFStream` instance available."),this._fullReader=this._networkStream.getFullReader(),this._fullReader.onProgress=f=>{this._lastProgress={loaded:f.loaded,total:f.total}},p.onPull=()=>{this._fullReader.read().then(function(f){let{value:B,done:O}=f;if(O){p.close();return}(0,_util.assert)(B instanceof ArrayBuffer,"GetReader - expected an ArrayBuffer."),p.enqueue(new Uint8Array(B),1,[B])}).catch(f=>{p.error(f)})},p.onCancel=f=>{this._fullReader.cancel(f),p.ready.catch(B=>{if(!this.destroyed)throw B})}}),r.on("ReaderHeadersReady",M=>{const p=new _util.PromiseCapability,f=this._fullReader;return f.headersReady.then(()=>{var B;(!f.isStreamingSupported||!f.isRangeSupported)&&(this._lastProgress&&((B=h.onProgress)==null||B.call(h,this._lastProgress)),f.onProgress=O=>{var F;(F=h.onProgress)==null||F.call(h,{loaded:O.loaded,total:O.total})}),p.resolve({isStreamingSupported:f.isStreamingSupported,isRangeSupported:f.isRangeSupported,contentLength:f.contentLength})},p.reject),p.promise}),r.on("GetRangeReader",(M,p)=>{(0,_util.assert)(this._networkStream,"GetRangeReader - no `IPDFStream` instance available.");const f=this._networkStream.getRangeReader(M.begin,M.end);if(!f){p.close();return}p.onPull=()=>{f.read().then(function(B){let{value:O,done:F}=B;if(F){p.close();return}(0,_util.assert)(O instanceof ArrayBuffer,"GetRangeReader - expected an ArrayBuffer."),p.enqueue(new Uint8Array(O),1,[O])}).catch(B=>{p.error(B)})},p.onCancel=B=>{f.cancel(B),p.ready.catch(O=>{if(!this.destroyed)throw O})}}),r.on("GetDoc",M=>{let{pdfInfo:p}=M;this._numPages=p.numPages,this._htmlForXfa=p.htmlForXfa,delete p.htmlForXfa,h._capability.resolve(new PDFDocumentProxy(p,this))}),r.on("DocException",function(M){let p;switch(M.name){case"PasswordException":p=new _util.PasswordException(M.message,M.code);break;case"InvalidPDFException":p=new _util.InvalidPDFException(M.message);break;case"MissingPDFException":p=new _util.MissingPDFException(M.message);break;case"UnexpectedResponseException":p=new _util.UnexpectedResponseException(M.message,M.status);break;case"UnknownErrorException":p=new _util.UnknownErrorException(M.message,M.details);break;default:(0,_util.unreachable)("DocException - expected a valid Error.")}h._capability.reject(p)}),r.on("PasswordRequest",M=>{if(Zl(this,b,new _util.PromiseCapability),h.onPassword){const p=f=>{f instanceof Error?t(this,b).reject(f):t(this,b).resolve({password:f})};try{h.onPassword(p,M.code)}catch(f){t(this,b).reject(f)}}else t(this,b).reject(new _util.PasswordException(M.message,M.code));return t(this,b).promise}),r.on("DataLoaded",M=>{var p;(p=h.onProgress)==null||p.call(h,{loaded:M.length,total:M.length}),this.downloadInfoCapability.resolve(M)}),r.on("StartRenderPage",M=>{this.destroyed||t(this,G).get(M.pageIndex)._startRenderPage(M.transparency,M.cacheKey)}),r.on("commonobj",M=>{var p;let[f,B,O]=M;if(!this.destroyed&&!this.commonObjs.has(f))switch(B){case"Font":const F=this._params;if("error"in O){const q=O.error;(0,_util.warn)(`Error during font loading: ${q}`),this.commonObjs.resolve(f,q);break}const L=F.pdfBug&&(p=globalThis.FontInspector)!=null&&p.enabled?(q,v)=>globalThis.FontInspector.fontAdded(q,v):null,g=new _font_loader.FontFaceObject(O,{isEvalSupported:F.isEvalSupported,disableFontFace:F.disableFontFace,ignoreErrors:F.ignoreErrors,inspectFont:L});this.fontLoader.bind(g).catch(q=>r.sendWithPromise("FontFallback",{id:f})).finally(()=>{!F.fontExtraProperties&&g.data&&(g.data=null),this.commonObjs.resolve(f,g)});break;case"FontPath":case"Image":case"Pattern":this.commonObjs.resolve(f,O);break;default:throw new Error(`Got unknown common object type ${B}`)}}),r.on("obj",M=>{var p;let[f,B,O,F]=M;if(this.destroyed)return;const L=t(this,G).get(B);if(!L.objs.has(f))switch(O){case"Image":if(L.objs.resolve(f,F),F){let g;if(F.bitmap){const{width:q,height:v}=F;g=q*v*4}else g=((p=F.data)==null?void 0:p.length)||0;g>_util.MAX_IMAGE_SIZE_TO_CACHE&&(L._maybeCleanupAfterRender=!0)}break;case"Pattern":L.objs.resolve(f,F);break;default:throw new Error(`Got unknown object type ${O}`)}}),r.on("DocProgress",M=>{var p;this.destroyed||(p=h.onProgress)==null||p.call(h,{loaded:M.loaded,total:M.total})}),r.on("FetchBuiltInCMap",M=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.cMapReaderFactory?this.cMapReaderFactory.fetch(M):Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."))),r.on("FetchStandardFontData",M=>this.destroyed?Promise.reject(new Error("Worker was destroyed.")):this.standardFontDataFactory?this.standardFontDataFactory.fetch(M):Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")))}getData(){return this.messageHandler.sendWithPromise("GetData",null)}saveDocument(){var p;var r;this.annotationStorage.size<=0&&(0,_util.warn)("saveDocument called while `annotationStorage` is empty, please use the getData-method instead.");const{map:h,transfers:M}=this.annotationStorage.serializable;return this.messageHandler.sendWithPromise("SaveDocument",{isPureXfa:!!this._htmlForXfa,numPages:this._numPages,annotationStorage:h,filename:(p=(r=this._fullReader)==null?void 0:r.filename)!=null?p:null},M).finally(()=>{this.annotationStorage.resetModified()})}getPage(r){if(!Number.isInteger(r)||r<=0||r>this._numPages)return Promise.reject(new Error("Invalid page request."));const h=r-1,M=t(this,s).get(h);if(M)return M;const p=this.messageHandler.sendWithPromise("GetPage",{pageIndex:h}).then(f=>{if(this.destroyed)throw new Error("Transport destroyed");const B=new PDFPageProxy(h,f,this,this._params.pdfBug);return t(this,G).set(h,B),B});return t(this,s).set(h,p),p}getPageIndex(r){return typeof r!="object"||r===null||!Number.isInteger(r.num)||r.num<0||!Number.isInteger(r.gen)||r.gen<0?Promise.reject(new Error("Invalid pageIndex request.")):this.messageHandler.sendWithPromise("GetPageIndex",{num:r.num,gen:r.gen})}getAnnotations(r,h){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:r,intent:h})}getFieldObjects(){return A(this,a,rt).call(this,"GetFieldObjects")}hasJSActions(){return A(this,a,rt).call(this,"HasJSActions")}getCalculationOrderIds(){return this.messageHandler.sendWithPromise("GetCalculationOrderIds",null)}getDestinations(){return this.messageHandler.sendWithPromise("GetDestinations",null)}getDestination(r){return typeof r!="string"?Promise.reject(new Error("Invalid destination request.")):this.messageHandler.sendWithPromise("GetDestination",{id:r})}getPageLabels(){return this.messageHandler.sendWithPromise("GetPageLabels",null)}getPageLayout(){return this.messageHandler.sendWithPromise("GetPageLayout",null)}getPageMode(){return this.messageHandler.sendWithPromise("GetPageMode",null)}getViewerPreferences(){return this.messageHandler.sendWithPromise("GetViewerPreferences",null)}getOpenAction(){return this.messageHandler.sendWithPromise("GetOpenAction",null)}getAttachments(){return this.messageHandler.sendWithPromise("GetAttachments",null)}getDocJSActions(){return A(this,a,rt).call(this,"GetDocJSActions")}getPageJSActions(r){return this.messageHandler.sendWithPromise("GetPageJSActions",{pageIndex:r})}getStructTree(r){return this.messageHandler.sendWithPromise("GetStructTree",{pageIndex:r})}getOutline(){return this.messageHandler.sendWithPromise("GetOutline",null)}getOptionalContentConfig(){return this.messageHandler.sendWithPromise("GetOptionalContentConfig",null).then(r=>new _optional_content_config.OptionalContentConfig(r))}getPermissions(){return this.messageHandler.sendWithPromise("GetPermissions",null)}getMetadata(){const r="GetMetadata",h=t(this,o).get(r);if(h)return h;const M=this.messageHandler.sendWithPromise(r,null).then(p=>{var O,F;var f,B;return{info:p[0],metadata:p[1]?new _metadata.Metadata(p[1]):null,contentDispositionFilename:(O=(f=this._fullReader)==null?void 0:f.filename)!=null?O:null,contentLength:(F=(B=this._fullReader)==null?void 0:B.contentLength)!=null?F:null}});return t(this,o).set(r,M),M}getMarkInfo(){return this.messageHandler.sendWithPromise("GetMarkInfo",null)}startCleanup(){return Sl(this,arguments,function*(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(!this.destroyed){yield this.messageHandler.sendWithPromise("Cleanup",null);for(const h of t(this,G).values())if(!h.cleanup())throw new Error(`startCleanup: Page ${h.pageNumber} is currently rendering.`);this.commonObjs.clear(),r||this.fontLoader.clear(),t(this,o).clear(),this.filterFactory.destroy(!0)}})}get loadingParams(){const{disableAutoFetch:r,enableXfa:h}=this._params;return(0,_util.shadow)(this,"loadingParams",{disableAutoFetch:r,enableXfa:h})}}o=new WeakMap,G=new WeakMap,s=new WeakMap,b=new WeakMap,a=new WeakSet,rt=function(st){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;const h=t(this,o).get(st);if(h)return h;const M=this.messageHandler.sendWithPromise(st,r);return t(this,o).set(st,M),M};class PDFObjects{constructor(){E(this,W),E(this,N,Object.create(null))}get(r){let h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(h){const p=A(this,W,At).call(this,r);return p.capability.promise.then(()=>h(p.data)),null}const M=t(this,N)[r];if(!(M!=null&&M.capability.settled))throw new Error(`Requesting object that isn't resolved yet ${r}.`);return M.data}has(r){const h=t(this,N)[r];return(h==null?void 0:h.capability.settled)||!1}resolve(r){let h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;const M=A(this,W,At).call(this,r);M.data=h,M.capability.resolve()}clear(){var r;for(const h in t(this,N)){const{data:M}=t(this,N)[h];(r=M==null?void 0:M.bitmap)==null||r.close()}Zl(this,N,Object.create(null))}}N=new WeakMap,W=new WeakSet,At=function(st){var r;return(r=t(this,N))[st]||(r[st]={capability:new _util.PromiseCapability,data:null})};class RenderTask{constructor(r){E(this,Z,null),Zl(this,Z,r),this.onContinue=null}get promise(){return t(this,Z).capability.promise}cancel(){let r=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;t(this,Z).cancel(null,r)}get separateAnnots(){const{separateAnnots:r}=t(this,Z).operatorList;if(!r)return!1;const{annotationCanvasMap:h}=t(this,Z);return r.form||r.canvas&&(h==null?void 0:h.size)>0}}Z=new WeakMap,exports.RenderTask=RenderTask;const z=class ne{constructor(r){let{callback:h,params:M,objs:p,commonObjs:f,annotationCanvasMap:B,operatorList:O,pageIndex:F,canvasFactory:L,filterFactory:g,useRequestAnimationFrame:q=!1,pdfBug:v=!1,pageColors:Q=null}=r;this.callback=h,this.params=M,this.objs=p,this.commonObjs=f,this.annotationCanvasMap=B,this.operatorListIdx=null,this.operatorList=O,this._pageIndex=F,this.canvasFactory=L,this.filterFactory=g,this._pdfBug=v,this.pageColors=Q,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this._useRequestAnimationFrame=q===!0&&typeof window<"u",this.cancelled=!1,this.capability=new _util.PromiseCapability,this.task=new RenderTask(this),this._cancelBound=this.cancel.bind(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this),this._canvas=M.canvasContext.canvas}get completed(){return this.capability.promise.catch(function(){})}initializeGraphics(r){var h,M;let{transparency:p=!1,optionalContentConfig:f}=r;if(this.cancelled)return;if(this._canvas){if(t(ne,d).has(this._canvas))throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");t(ne,d).add(this._canvas)}this._pdfBug&&(h=globalThis.StepperManager)!=null&&h.enabled&&(this.stepper=globalThis.StepperManager.create(this._pageIndex),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());const{canvasContext:B,viewport:O,transform:F,background:L}=this.params;this.gfx=new _canvas.CanvasGraphics(B,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:f},this.annotationCanvasMap,this.pageColors),this.gfx.beginDrawing({transform:F,viewport:O,transparency:p,background:L}),this.operatorListIdx=0,this.graphicsReady=!0,(M=this.graphicsReadyCallback)==null||M.call(this)}cancel(){var r;let h=arguments.length>0&&arguments[0]!==void 0?arguments[0]:null,M=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;this.running=!1,this.cancelled=!0,(r=this.gfx)==null||r.endDrawing(),t(ne,d).delete(this._canvas),this.callback(h||new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex+1}`,M))}operatorListChanged(){var r;if(!this.graphicsReady){this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound);return}(r=this.stepper)==null||r.updateOperatorList(this.operatorList),!this.running&&this._continue()}_continue(){this.running=!0,!this.cancelled&&(this.task.onContinue?this.task.onContinue(this._scheduleNextBound):this._scheduleNext())}_scheduleNext(){this._useRequestAnimationFrame?window.requestAnimationFrame(()=>{this._nextBound().catch(this._cancelBound)}):Promise.resolve().then(this._nextBound).catch(this._cancelBound)}_next(){return Sl(this,null,function*(){this.cancelled||(this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),t(ne,d).delete(this._canvas),this.callback())))})}};d=new WeakMap,E(z,d,new WeakSet);let InternalRenderTask=z;const version="3.11.174";exports.version=version;const build="ce8716743";exports.build=build},(st,r,h)=>{var M=h(3),p=h(126),f=h(135);M({target:"Set",proto:!0,real:!0,forced:!f("difference")},{difference:p})},(st,r,h)=>{var M=h(127),p=h(128),f=h(129),B=h(132),O=h(133),F=h(130),L=h(131),g=p.has,q=p.remove;st.exports=function(v){var Q=M(this),R=O(v),j=f(Q);return B(Q)<=R.size?F(Q,function(I){R.includes(I)&&q(j,I)}):L(R.getIterator(),function(I){g(Q,I)&&q(j,I)}),j}},(st,r,h)=>{var M=h(128).has;st.exports=function(p){return M(p),p}},(st,r,h)=>{var M=h(14),p=Set.prototype;st.exports={Set,add:M(p.add),has:M(p.has),remove:M(p.delete),proto:p}},(st,r,h)=>{var M=h(128),p=h(130),f=M.Set,B=M.add;st.exports=function(O){var F=new f;return p(O,function(L){B(F,L)}),F}},(st,r,h)=>{var M=h(14),p=h(131),f=h(128),B=f.Set,O=f.proto,F=M(O.forEach),L=M(O.keys),g=L(new B).next;st.exports=function(q,v,Q){return Q?p({iterator:L(q),next:g},v):F(q,v)}},(st,r,h)=>{var M=h(8);st.exports=function(p,f,B){for(var O=B?p:p.iterator,F=p.next,L,g;!(L=M(F,O)).done;)if(g=f(L.value),g!==void 0)return g}},(st,r,h)=>{var M=h(72),p=h(128);st.exports=M(p.proto,"size","get")||function(f){return f.size}},(st,r,h)=>{var M=h(31),p=h(47),f=h(8),B=h(62),O=h(134),F="Invalid size",L=RangeError,g=TypeError,q=Math.max,v=function(Q,R,j,I){this.set=Q,this.size=R,this.has=j,this.keys=I};v.prototype={getIterator:function(){return O(p(f(this.keys,this.set)))},includes:function(Q){return f(this.has,this.set,Q)}},st.exports=function(Q){p(Q);var R=+Q.size;if(R!==R)throw g(F);var j=B(R);if(j<0)throw L(F);return new v(Q,q(j,0),M(Q.has),M(Q.keys))}},st=>{st.exports=function(r){return{iterator:r,next:r.next,done:!1}}},(st,r,h)=>{var M=h(24),p=function(f){return{size:f,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}};st.exports=function(f){var B=M("Set");try{new B()[f](p(0));try{return new B()[f](p(-1)),!1}catch(O){return!0}}catch(O){return!1}}},(st,r,h)=>{var M=h(3),p=h(7),f=h(137),B=h(135),O=!B("intersection")||p(function(){return Array.from(new Set([1,2,3]).intersection(new Set([3,2])))!=="3,2"});M({target:"Set",proto:!0,real:!0,forced:O},{intersection:f})},(st,r,h)=>{var M=h(127),p=h(128),f=h(132),B=h(133),O=h(130),F=h(131),L=p.Set,g=p.add,q=p.has;st.exports=function(v){var Q=M(this),R=B(v),j=new L;return f(Q)>R.size?F(R.getIterator(),function(I){q(Q,I)&&g(j,I)}):O(Q,function(I){R.includes(I)&&g(j,I)}),j}},(st,r,h)=>{var M=h(3),p=h(139),f=h(135);M({target:"Set",proto:!0,real:!0,forced:!f("isDisjointFrom")},{isDisjointFrom:p})},(st,r,h)=>{var M=h(127),p=h(128).has,f=h(132),B=h(133),O=h(130),F=h(131),L=h(140);st.exports=function(g){var q=M(this),v=B(g);if(f(q)<=v.size)return O(q,function(R){if(v.includes(R))return!1},!0)!==!1;var Q=v.getIterator();return F(Q,function(R){if(p(q,R))return L(Q,"normal",!1)})!==!1}},(st,r,h)=>{var M=h(8),p=h(47),f=h(30);st.exports=function(B,O,F){var L,g;p(B);try{if(L=f(B,"return"),!L){if(O==="throw")throw F;return F}L=M(L,B)}catch(q){g=!0,L=q}if(O==="throw")throw F;if(g)throw L;return p(L),F}},(st,r,h)=>{var M=h(3),p=h(142),f=h(135);M({target:"Set",proto:!0,real:!0,forced:!f("isSubsetOf")},{isSubsetOf:p})},(st,r,h)=>{var M=h(127),p=h(132),f=h(130),B=h(133);st.exports=function(O){var F=M(this),L=B(O);return p(F)>L.size?!1:f(F,function(g){if(!L.includes(g))return!1},!0)!==!1}},(st,r,h)=>{var M=h(3),p=h(144),f=h(135);M({target:"Set",proto:!0,real:!0,forced:!f("isSupersetOf")},{isSupersetOf:p})},(st,r,h)=>{var M=h(127),p=h(128).has,f=h(132),B=h(133),O=h(131),F=h(140);st.exports=function(L){var g=M(this),q=B(L);if(f(g)<q.size)return!1;var v=q.getIterator();return O(v,function(Q){if(!p(g,Q))return F(v,"normal",!1)})!==!1}},(st,r,h)=>{var M=h(3),p=h(146),f=h(135);M({target:"Set",proto:!0,real:!0,forced:!f("symmetricDifference")},{symmetricDifference:p})},(st,r,h)=>{var M=h(127),p=h(128),f=h(129),B=h(133),O=h(131),F=p.add,L=p.has,g=p.remove;st.exports=function(q){var v=M(this),Q=B(q).getIterator(),R=f(v);return O(Q,function(j){L(v,j)?g(R,j):F(R,j)}),R}},(st,r,h)=>{var M=h(3),p=h(148),f=h(135);M({target:"Set",proto:!0,real:!0,forced:!f("union")},{union:p})},(st,r,h)=>{var M=h(127),p=h(128).add,f=h(129),B=h(133),O=h(131);st.exports=function(F){var L=M(this),g=B(F).getIterator(),q=f(L);return O(g,function(v){p(q,v)}),q}},(st,r,h)=>{var M=h(3),p=h(4),f=h(24),B=h(11),O=h(45).f,F=h(39),L=h(150),g=h(75),q=h(76),v=h(151),Q=h(82),R=h(6),j=h(36),I="DOMException",k=f("Error"),C=f(I),U=function(){L(this,K);var Nt=arguments.length,zt=q(Nt<1?void 0:arguments[0]),Gt=q(Nt<2?void 0:arguments[1],"Error"),Xt=new C(zt,Gt),Ut=k(zt);return Ut.name=I,O(Xt,"stack",B(1,Q(Ut.stack,1))),g(Xt,this,U),Xt},K=U.prototype=C.prototype,u="stack"in k(I),m="stack"in new C(1,2),_=C&&R&&Object.getOwnPropertyDescriptor(p,I),$=!!_&&!(_.writable&&_.configurable),P=u&&!$&&!m;M({global:!0,constructor:!0,forced:j||P},{DOMException:P?U:C});var Zt=f(I),dt=Zt.prototype;if(dt.constructor!==Zt){j||O(dt,"constructor",B(1,Zt));for(var It in v)if(F(v,It)){var xt=v[It],it=xt.s;F(Zt,it)||O(Zt,it,B(6,xt.c))}}},(st,r,h)=>{var M=h(25),p=TypeError;st.exports=function(f,B){if(M(B,f))return f;throw p("Incorrect invocation")}},st=>{st.exports={IndexSizeError:{s:"INDEX_SIZE_ERR",c:1,m:1},DOMStringSizeError:{s:"DOMSTRING_SIZE_ERR",c:2,m:0},HierarchyRequestError:{s:"HIERARCHY_REQUEST_ERR",c:3,m:1},WrongDocumentError:{s:"WRONG_DOCUMENT_ERR",c:4,m:1},InvalidCharacterError:{s:"INVALID_CHARACTER_ERR",c:5,m:1},NoDataAllowedError:{s:"NO_DATA_ALLOWED_ERR",c:6,m:0},NoModificationAllowedError:{s:"NO_MODIFICATION_ALLOWED_ERR",c:7,m:1},NotFoundError:{s:"NOT_FOUND_ERR",c:8,m:1},NotSupportedError:{s:"NOT_SUPPORTED_ERR",c:9,m:1},InUseAttributeError:{s:"INUSE_ATTRIBUTE_ERR",c:10,m:1},InvalidStateError:{s:"INVALID_STATE_ERR",c:11,m:1},SyntaxError:{s:"SYNTAX_ERR",c:12,m:1},InvalidModificationError:{s:"INVALID_MODIFICATION_ERR",c:13,m:1},NamespaceError:{s:"NAMESPACE_ERR",c:14,m:1},InvalidAccessError:{s:"INVALID_ACCESS_ERR",c:15,m:1},ValidationError:{s:"VALIDATION_ERR",c:16,m:0},TypeMismatchError:{s:"TYPE_MISMATCH_ERR",c:17,m:1},SecurityError:{s:"SECURITY_ERR",c:18,m:1},NetworkError:{s:"NETWORK_ERR",c:19,m:1},AbortError:{s:"ABORT_ERR",c:20,m:1},URLMismatchError:{s:"URL_MISMATCH_ERR",c:21,m:1},QuotaExceededError:{s:"QUOTA_EXCEEDED_ERR",c:22,m:1},TimeoutError:{s:"TIMEOUT_ERR",c:23,m:1},InvalidNodeTypeError:{s:"INVALID_NODE_TYPE_ERR",c:24,m:1},DataCloneError:{s:"DATA_CLONE_ERR",c:25,m:1}}},(st,r,h)=>{var M=h(36),p=h(3),f=h(4),B=h(24),O=h(14),F=h(7),L=h(41),g=h(21),q=h(153),v=h(17),Q=h(20),R=h(23),j=h(154),I=h(47),k=h(78),C=h(39),U=h(159),K=h(44),u=h(64),m=h(85),_=h(160),$=h(162),P=h(128),Zt=h(83),dt=h(119),It=f.Object,xt=f.Array,it=f.Date,Nt=f.Error,zt=f.EvalError,Gt=f.RangeError,Xt=f.ReferenceError,Ut=f.SyntaxError,Vt=f.TypeError,Ht=f.URIError,Pt=f.PerformanceMark,at=f.WebAssembly,S=at&&at.CompileError||Nt,w=at&&at.LinkError||Nt,X=at&&at.RuntimeError||Nt,J=B("DOMException"),H=$.Map,et=$.has,lt=$.get,Mt=$.set,Rt=P.Set,gt=P.add,Ot=B("Object","keys"),Dt=O([].push),qt=O((!0).valueOf),vt=O(1 .valueOf),dl=O("".valueOf),ol=O(it.prototype.getTime),il=L("structuredClone"),_t="DataCloneError",Ft="Transferring",wt=function(Lt){return!F(function(){var Yt=new f.Set([7]),Kt=Lt(Yt),$t=Lt(It(7));return Kt===Yt||!Kt.has(7)||typeof $t!="object"||+$t!=7})&&Lt},pt=function(Lt,Yt){return!F(function(){var Kt=new Yt,$t=Lt({a:Kt,b:Kt});return!($t&&$t.a===$t.b&&$t.a instanceof Yt&&$t.a.stack===Kt.stack)})},Ct=function(Lt){return!F(function(){var Yt=Lt(new f.AggregateError([1],il,{cause:3}));return Yt.name!=="AggregateError"||Yt.errors[0]!==1||Yt.message!==il||Yt.cause!==3})},el=f.structuredClone,cl=M||!pt(el,Nt)||!pt(el,J)||!Ct(el),Ml=!el&&wt(function(Lt){return new Pt(il,{detail:Lt}).detail}),Yl=wt(el)||Ml,Xl=function(Lt){throw new J("Uncloneable type: "+Lt,_t)},Tl=function(Lt,Yt){throw new J((Yt||"Cloning")+" of "+Lt+" cannot be properly polyfilled in this engine",_t)},Vl=function(Lt,Yt){return Yl||Tl(Yt),Yl(Lt)},Ll=function(){var Lt;try{Lt=new f.DataTransfer}catch(Yt){try{Lt=new f.ClipboardEvent("").clipboardData}catch(Kt){}}return Lt&&Lt.items&&Lt.files?Lt:null},yl=function(Lt,Yt,Kt){if(et(Yt,Lt))return lt(Yt,Lt);var $t=Kt||k(Lt),tl,bl,Bt,rl,hl,Il;if($t==="SharedArrayBuffer")Yl?tl=Yl(Lt):tl=Lt;else{var Wl=f.DataView;!Wl&&typeof Lt.slice!="function"&&Tl("ArrayBuffer");try{if(typeof Lt.slice=="function"&&!Lt.resizable)tl=Lt.slice(0);else for(bl=Lt.byteLength,Bt=("maxByteLength"in Lt)?{maxByteLength:Lt.maxByteLength}:void 0,tl=new ArrayBuffer(bl,Bt),rl=new Wl(Lt),hl=new Wl(tl),Il=0;Il<bl;Il++)hl.setUint8(Il,rl.getUint8(Il))}catch(nt){throw new J("ArrayBuffer is detached",_t)}}return Mt(Yt,Lt,tl),tl},Qt=function(Lt,Yt,Kt,$t,tl){var bl=f[Yt];return Q(bl)||Tl(Yt),new bl(yl(Lt.buffer,tl),Kt,$t)},ot=function(Lt,Yt,Kt){this.object=Lt,this.type=Yt,this.metadata=Kt},ut=function(Lt,Yt,Kt){if(R(Lt)&&Xl("Symbol"),!Q(Lt))return Lt;if(Yt){if(et(Yt,Lt))return lt(Yt,Lt)}else Yt=new H;var $t=k(Lt),tl,bl,Bt,rl,hl,Il,Wl,nt;switch($t){case"Array":Bt=xt(u(Lt));break;case"Object":Bt={};break;case"Map":Bt=new H;break;case"Set":Bt=new Rt;break;case"RegExp":Bt=new RegExp(Lt.source,_(Lt));break;case"Error":switch(bl=Lt.name,bl){case"AggregateError":Bt=B("AggregateError")([]);break;case"EvalError":Bt=zt();break;case"RangeError":Bt=Gt();break;case"ReferenceError":Bt=Xt();break;case"SyntaxError":Bt=Ut();break;case"TypeError":Bt=Vt();break;case"URIError":Bt=Ht();break;case"CompileError":Bt=S();break;case"LinkError":Bt=w();break;case"RuntimeError":Bt=X();break;default:Bt=Nt()}break;case"DOMException":Bt=new J(Lt.message,Lt.name);break;case"ArrayBuffer":case"SharedArrayBuffer":Bt=Kt?new ot(Lt,$t):yl(Lt,Yt,$t);break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float16Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":Il=$t==="DataView"?Lt.byteLength:Lt.length,Bt=Kt?new ot(Lt,$t,{offset:Lt.byteOffset,length:Il}):Qt(Lt,$t,Lt.byteOffset,Il,Yt);break;case"DOMQuad":try{Bt=new DOMQuad(ut(Lt.p1,Yt,Kt),ut(Lt.p2,Yt,Kt),ut(Lt.p3,Yt,Kt),ut(Lt.p4,Yt,Kt))}catch(T){Bt=Vl(Lt,$t)}break;case"File":if(Yl)try{Bt=Yl(Lt),k(Bt)!==$t&&(Bt=void 0)}catch(T){}if(!Bt)try{Bt=new File([Lt],Lt.name,Lt)}catch(T){}Bt||Tl($t);break;case"FileList":if(rl=Ll(),rl){for(hl=0,Il=u(Lt);hl<Il;hl++)rl.items.add(ut(Lt[hl],Yt,Kt));Bt=rl.files}else Bt=Vl(Lt,$t);break;case"ImageData":try{Bt=new ImageData(ut(Lt.data,Yt,Kt),Lt.width,Lt.height,{colorSpace:Lt.colorSpace})}catch(T){Bt=Vl(Lt,$t)}break;default:if(Yl)Bt=Yl(Lt);else switch($t){case"BigInt":Bt=It(Lt.valueOf());break;case"Boolean":Bt=It(qt(Lt));break;case"Number":Bt=It(vt(Lt));break;case"String":Bt=It(dl(Lt));break;case"Date":Bt=new it(ol(Lt));break;case"Blob":try{Bt=Lt.slice(0,Lt.size,Lt.type)}catch(T){Tl($t)}break;case"DOMPoint":case"DOMPointReadOnly":tl=f[$t];try{Bt=tl.fromPoint?tl.fromPoint(Lt):new tl(Lt.x,Lt.y,Lt.z,Lt.w)}catch(T){Tl($t)}break;case"DOMRect":case"DOMRectReadOnly":tl=f[$t];try{Bt=tl.fromRect?tl.fromRect(Lt):new tl(Lt.x,Lt.y,Lt.width,Lt.height)}catch(T){Tl($t)}break;case"DOMMatrix":case"DOMMatrixReadOnly":tl=f[$t];try{Bt=tl.fromMatrix?tl.fromMatrix(Lt):new tl(Lt)}catch(T){Tl($t)}break;case"AudioData":case"VideoFrame":g(Lt.clone)||Tl($t);try{Bt=Lt.clone()}catch(T){Xl($t)}break;case"CropTarget":case"CryptoKey":case"FileSystemDirectoryHandle":case"FileSystemFileHandle":case"FileSystemHandle":case"GPUCompilationInfo":case"GPUCompilationMessage":case"ImageBitmap":case"RTCCertificate":case"WebAssembly.Module":Tl($t);default:Xl($t)}}switch(Mt(Yt,Lt,Bt),$t){case"Array":case"Object":for(Wl=Ot(Lt),hl=0,Il=u(Wl);hl<Il;hl++)nt=Wl[hl],U(Bt,nt,ut(Lt[nt],Yt,Kt));break;case"Map":Lt.forEach(function(T,ct){Mt(Bt,ut(ct,Yt,Kt),ut(T,Yt,Kt))});break;case"Set":Lt.forEach(function(T){gt(Bt,ut(T,Yt,Kt))});break;case"Error":K(Bt,"message",ut(Lt.message,Yt,Kt)),C(Lt,"cause")&&K(Bt,"cause",ut(Lt.cause,Yt,Kt)),bl==="AggregateError"&&(Bt.errors=ut(Lt.errors,Yt,Kt));case"DOMException":Zt&&K(Bt,"stack",ut(Lt.stack,Yt,Kt))}return Bt},Tt=function(Lt,Yt){if(!Q(Lt))return Lt;if(et(Yt,Lt))return lt(Yt,Lt);var Kt,$t,tl,bl,Bt,rl,hl,Il;if(Lt instanceof ot)switch(Kt=Lt.type,$t=Lt.object,Kt){case"ArrayBuffer":case"SharedArrayBuffer":Il=yl($t,Yt,Kt);break;case"DataView":case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float16Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":tl=Lt.metadata,Il=Qt($t,Kt,tl.offset,tl.length,Yt)}else switch(k(Lt)){case"Array":case"Object":for(rl=Ot(Lt),bl=0,Bt=u(rl);bl<Bt;bl++)hl=rl[bl],Lt[hl]=Tt(Lt[hl],Yt);break;case"Map":Il=new H,Lt.forEach(function(Wl,nt){Mt(Il,Tt(nt,Yt),Tt(Wl,Yt))});break;case"Set":Il=new Rt,Lt.forEach(function(Wl){gt(Il,Tt(Wl,Yt))});break;case"Error":Lt.message=Tt(Lt.message,Yt),C(Lt,"cause")&&(Lt.cause=Tt(Lt.cause,Yt)),Lt.name==="AggregateError"&&(Lt.errors=Tt(Lt.errors,Yt));case"DOMException":Zt&&(Lt.stack=Tt(Lt.stack,Yt))}return Mt(Yt,Lt,Il||Lt),Il||Lt},jt=function(Lt,Yt){if(!Q(Lt))throw Vt("Transfer option cannot be converted to a sequence");var Kt=[];j(Lt,function(T){Dt(Kt,I(T))});for(var $t=0,tl=u(Kt),bl=[],Bt,rl,hl,Il,Wl,nt;$t<tl;){if(Bt=Kt[$t++],rl=k(Bt),rl==="ArrayBuffer"){Dt(bl,Bt);continue}if(et(Yt,Bt))throw new J("Duplicate transferable",_t);if(dt)Il=el(Bt,{transfer:[Bt]});else switch(rl){case"ImageBitmap":hl=f.OffscreenCanvas,q(hl)||Tl(rl,Ft);try{Wl=new hl(Bt.width,Bt.height),nt=Wl.getContext("bitmaprenderer"),nt.transferFromImageBitmap(Bt),Il=Wl.transferToImageBitmap()}catch(T){}break;case"AudioData":case"VideoFrame":(!g(Bt.clone)||!g(Bt.close))&&Tl(rl,Ft);try{Il=Bt.clone(),Bt.close()}catch(T){}break;case"MediaSourceHandle":case"MessagePort":case"OffscreenCanvas":case"ReadableStream":case"TransformStream":case"WritableStream":Tl(rl,Ft)}if(Il===void 0)throw new J("This object cannot be transferred: "+rl,_t);Mt(Yt,Bt,Il)}return bl},Jt=function(Lt,Yt){for(var Kt=0,$t=u(Lt),tl,bl;Kt<$t;){if(tl=Lt[Kt++],et(Yt,tl))throw new J("Duplicate transferable",_t);dt?bl=el(tl,{transfer:[tl]}):(g(tl.transfer)||Tl("ArrayBuffer",Ft),bl=tl.transfer()),Mt(Yt,tl,bl)}};p({global:!0,enumerable:!0,sham:!dt,forced:cl},{structuredClone:function(Lt){var Yt=m(arguments.length,1)>1&&!v(arguments[1])?I(arguments[1]):void 0,Kt=Yt?Yt.transfer:void 0,$t=!1,tl,bl;Kt!==void 0&&(tl=new H,bl=jt(Kt,tl),$t=!!u(bl));var Bt=ut(Lt,tl,$t);return $t&&(tl=new H,Jt(Kt,tl),Bt=Tt(Bt,tl)),Bt}})},(st,r,h)=>{var M=h(14),p=h(7),f=h(21),B=h(78),O=h(24),F=h(51),L=function(){},g=[],q=O("Reflect","construct"),v=/^\s*(?:class|function)\b/,Q=M(v.exec),R=!v.exec(L),j=function(k){if(!f(k))return!1;try{return q(L,g,k),!0}catch(C){return!1}},I=function(k){if(!f(k))return!1;switch(B(k)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return R||!!Q(v,F(k))}catch(C){return!0}};I.sham=!0,st.exports=!q||p(function(){var k;return j(j.call)||!j(Object)||!j(function(){k=!0})||k})?I:j},(st,r,h)=>{var M=h(99),p=h(8),f=h(47),B=h(32),O=h(155),F=h(64),L=h(25),g=h(157),q=h(158),v=h(140),Q=TypeError,R=function(I,k){this.stopped=I,this.result=k},j=R.prototype;st.exports=function(I,k,C){var U=C&&C.that,K=!!(C&&C.AS_ENTRIES),u=!!(C&&C.IS_RECORD),m=!!(C&&C.IS_ITERATOR),_=!!(C&&C.INTERRUPTED),$=M(k,U),P,Zt,dt,It,xt,it,Nt,zt=function(Xt){return P&&v(P,"normal",Xt),new R(!0,Xt)},Gt=function(Xt){return K?(f(Xt),_?$(Xt[0],Xt[1],zt):$(Xt[0],Xt[1])):_?$(Xt,zt):$(Xt)};if(u)P=I.iterator;else if(m)P=I;else{if(Zt=q(I),!Zt)throw Q(B(I)+" is not iterable");if(O(Zt)){for(dt=0,It=F(I);It>dt;dt++)if(xt=Gt(I[dt]),xt&&L(j,xt))return xt;return new R(!1)}P=g(I,Zt)}for(it=u?I.next:P.next;!(Nt=p(it,P)).done;){try{xt=Gt(Nt.value)}catch(Xt){v(P,"throw",Xt)}if(typeof xt=="object"&&xt&&L(j,xt))return xt}return new R(!1)}},(st,r,h)=>{var M=h(34),p=h(156),f=M("iterator"),B=Array.prototype;st.exports=function(O){return O!==void 0&&(p.Array===O||B[f]===O)}},st=>{st.exports={}},(st,r,h)=>{var M=h(8),p=h(31),f=h(47),B=h(32),O=h(158),F=TypeError;st.exports=function(L,g){var q=arguments.length<2?O(L):g;if(p(q))return f(M(q,L));throw F(B(L)+" is not iterable")}},(st,r,h)=>{var M=h(78),p=h(30),f=h(17),B=h(156),O=h(34),F=O("iterator");st.exports=function(L){if(!f(L))return p(L,F)||p(L,"@@iterator")||B[M(L)]}},(st,r,h)=>{var M=h(18),p=h(45),f=h(11);st.exports=function(B,O,F){var L=M(O);L in B?p.f(B,L,f(0,F)):B[L]=F}},(st,r,h)=>{var M=h(8),p=h(39),f=h(25),B=h(161),O=RegExp.prototype;st.exports=function(F){var L=F.flags;return L===void 0&&!("flags"in O)&&!p(F,"flags")&&f(O,F)?M(B,F):L}},(st,r,h)=>{var M=h(47);st.exports=function(){var p=M(this),f="";return p.hasIndices&&(f+="d"),p.global&&(f+="g"),p.ignoreCase&&(f+="i"),p.multiline&&(f+="m"),p.dotAll&&(f+="s"),p.unicode&&(f+="u"),p.unicodeSets&&(f+="v"),p.sticky&&(f+="y"),f}},(st,r,h)=>{var M=h(14),p=Map.prototype;st.exports={Map,set:M(p.set),get:M(p.get),has:M(p.has),remove:M(p.delete),proto:p}},(st,r,h)=>{var M,p,f,B,O;Object.defineProperty(r,"__esModule",{value:!0}),r.SerializableEmpty=r.PrintAnnotationStorage=r.AnnotationStorage=void 0,h(89),h(149),h(152);var F=h(1),L=h(164),g=h(170);const q=Object.freeze({map:null,hash:"",transfers:void 0});r.SerializableEmpty=q;class v{constructor(){E(this,f),E(this,M,!1),E(this,p,new Map),this.onSetModified=null,this.onResetModified=null,this.onAnnotationEditor=null}getValue(j,I){const k=t(this,p).get(j);return k===void 0?I:Object.assign(I,k)}getRawValue(j){return t(this,p).get(j)}remove(j){if(t(this,p).delete(j),t(this,p).size===0&&this.resetModified(),typeof this.onAnnotationEditor=="function"){for(const I of t(this,p).values())if(I instanceof L.AnnotationEditor)return;this.onAnnotationEditor(null)}}setValue(j,I){const k=t(this,p).get(j);let C=!1;if(k!==void 0)for(const[U,K]of Object.entries(I))k[U]!==K&&(C=!0,k[U]=K);else C=!0,t(this,p).set(j,I);C&&A(this,f,B).call(this),I instanceof L.AnnotationEditor&&typeof this.onAnnotationEditor=="function"&&this.onAnnotationEditor(I.constructor._type)}has(j){return t(this,p).has(j)}getAll(){return t(this,p).size>0?(0,F.objectFromMap)(t(this,p)):null}setAll(j){for(const[I,k]of Object.entries(j))this.setValue(I,k)}get size(){return t(this,p).size}resetModified(){t(this,M)&&(Zl(this,M,!1),typeof this.onResetModified=="function"&&this.onResetModified())}get print(){return new Q(this)}get serializable(){if(t(this,p).size===0)return q;const j=new Map,I=new g.MurmurHash3_64,k=[],C=Object.create(null);let U=!1;for(const[K,u]of t(this,p)){const m=u instanceof L.AnnotationEditor?u.serialize(!1,C):u;m&&(j.set(K,m),I.update(`${K}:${JSON.stringify(m)}`),U||(U=!!m.bitmap))}if(U)for(const K of j.values())K.bitmap&&k.push(K.bitmap);return j.size>0?{map:j,hash:I.hexdigest(),transfers:k}:q}}M=new WeakMap,p=new WeakMap,f=new WeakSet,B=function(){t(this,M)||(Zl(this,M,!0),typeof this.onSetModified=="function"&&this.onSetModified())},r.AnnotationStorage=v;class Q extends v{constructor(j){super(),E(this,O,void 0);const{map:I,hash:k,transfers:C}=j.serializable,U=structuredClone(I,null);Zl(this,O,{map:U,hash:k,transfers:C})}get print(){(0,F.unreachable)("Should not call PrintAnnotationStorage.print")}get serializable(){return t(this,O)}}O=new WeakMap,r.PrintAnnotationStorage=Q},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt;Object.defineProperty(r,"__esModule",{value:!0}),r.AnnotationEditor=void 0,h(89),h(2);var Ut=h(165),Vt=h(1),Ht=h(168);const Pt=class Jl{constructor(X){E(this,k),E(this,U),E(this,_),E(this,P),E(this,dt),E(this,xt),E(this,Nt),E(this,Gt),E(this,M,""),E(this,p,!1),E(this,f,null),E(this,B,null),E(this,O,null),E(this,F,!1),E(this,L,null),E(this,g,this.focusin.bind(this)),E(this,q,this.focusout.bind(this)),E(this,v,!1),E(this,Q,!1),E(this,R,!1),tt(this,"_initialOptions",Object.create(null)),tt(this,"_uiManager",null),tt(this,"_focusEventsAllowed",!0),tt(this,"_l10nPromise",null),E(this,j,!1),E(this,I,Jl._zIndex++),this.constructor===Jl&&(0,Vt.unreachable)("Cannot initialize AnnotationEditor."),this.parent=X.parent,this.id=X.id,this.width=this.height=null,this.pageIndex=X.parent.pageIndex,this.name=X.name,this.div=null,this._uiManager=X.uiManager,this.annotationElementId=null,this._willKeepAspectRatio=!1,this._initialOptions.isCentered=X.isCentered,this._structTreeParentId=null;const{rotation:J,rawDims:{pageWidth:H,pageHeight:et,pageX:lt,pageY:Mt}}=this.parent.viewport;this.rotation=J,this.pageRotation=(360+J-this._uiManager.viewParameters.rotation)%360,this.pageDimensions=[H,et],this.pageTranslation=[lt,Mt];const[Rt,gt]=this.parentDimensions;this.x=X.x/Rt,this.y=X.y/gt,this.isAttachedToDOM=!1,this.deleted=!1}get editorType(){return Object.getPrototypeOf(this).constructor._type}static get _defaultLineColor(){return(0,Vt.shadow)(this,"_defaultLineColor",this._colorManager.getHexCode("CanvasText"))}static deleteAnnotationElement(X){const J=new S({id:X.parent.getNextId(),parent:X.parent,uiManager:X._uiManager});J.annotationElementId=X.annotationElementId,J.deleted=!0,J._uiManager.addToAnnotationStorage(J)}static initialize(X){let J=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(Jl._l10nPromise||(Jl._l10nPromise=new Map(["editor_alt_text_button_label","editor_alt_text_edit_button_label","editor_alt_text_decorative_tooltip"].map(et=>[et,X.get(et)]))),J!=null&&J.strings)for(const et of J.strings)Jl._l10nPromise.set(et,X.get(et));if(Jl._borderLineWidth!==-1)return;const H=getComputedStyle(document.documentElement);Jl._borderLineWidth=parseFloat(H.getPropertyValue("--outline-width"))||0}static updateDefaultParams(X,J){}static get defaultPropertiesToUpdate(){return[]}static isHandlingMimeForPasting(X){return!1}static paste(X,J){(0,Vt.unreachable)("Not implemented")}get propertiesToUpdate(){return[]}get _isDraggable(){return t(this,j)}set _isDraggable(X){var J;Zl(this,j,X),(J=this.div)==null||J.classList.toggle("draggable",X)}center(){const[X,J]=this.pageDimensions;switch(this.parentRotation){case 90:this.x-=this.height*J/(X*2),this.y+=this.width*X/(J*2);break;case 180:this.x+=this.width/2,this.y+=this.height/2;break;case 270:this.x+=this.height*J/(X*2),this.y-=this.width*X/(J*2);break;default:this.x-=this.width/2,this.y-=this.height/2;break}this.fixAndSetPosition()}addCommands(X){this._uiManager.addCommands(X)}get currentLayer(){return this._uiManager.currentLayer}setInBackground(){this.div.style.zIndex=0}setInForeground(){this.div.style.zIndex=t(this,I)}setParent(X){X!==null&&(this.pageIndex=X.pageIndex,this.pageDimensions=X.pageDimensions),this.parent=X}focusin(X){this._focusEventsAllowed&&(t(this,v)?Zl(this,v,!1):this.parent.setSelected(this))}focusout(X){var J;if(!this._focusEventsAllowed||!this.isAttachedToDOM)return;const H=X.relatedTarget;H!=null&&H.closest(`#${this.id}`)||(X.preventDefault(),(J=this.parent)!=null&&J.isMultipleSelection||this.commitOrRemove())}commitOrRemove(){this.isEmpty()?this.remove():this.commit()}commit(){this.addToAnnotationStorage()}addToAnnotationStorage(){this._uiManager.addToAnnotationStorage(this)}setAt(X,J,H,et){const[lt,Mt]=this.parentDimensions;[H,et]=this.screenToPageTranslation(H,et),this.x=(X+H)/lt,this.y=(J+et)/Mt,this.fixAndSetPosition()}translate(X,J){A(this,k,C).call(this,this.parentDimensions,X,J)}translateInPage(X,J){A(this,k,C).call(this,this.pageDimensions,X,J),this.div.scrollIntoView({block:"nearest"})}drag(X,J){const[H,et]=this.parentDimensions;if(this.x+=X/H,this.y+=J/et,this.parent&&(this.x<0||this.x>1||this.y<0||this.y>1)){const{x:Ot,y:Dt}=this.div.getBoundingClientRect();this.parent.findNewParent(this,Ot,Dt)&&(this.x-=Math.floor(this.x),this.y-=Math.floor(this.y))}let{x:lt,y:Mt}=this;const[Rt,gt]=A(this,U,K).call(this);lt+=Rt,Mt+=gt,this.div.style.left=`${(100*lt).toFixed(2)}%`,this.div.style.top=`${(100*Mt).toFixed(2)}%`,this.div.scrollIntoView({block:"nearest"})}fixAndSetPosition(){const[X,J]=this.pageDimensions;let{x:H,y:et,width:lt,height:Mt}=this;switch(lt*=X,Mt*=J,H*=X,et*=J,this.rotation){case 0:H=Math.max(0,Math.min(X-lt,H)),et=Math.max(0,Math.min(J-Mt,et));break;case 90:H=Math.max(0,Math.min(X-Mt,H)),et=Math.min(J,Math.max(lt,et));break;case 180:H=Math.min(X,Math.max(lt,H)),et=Math.min(J,Math.max(Mt,et));break;case 270:H=Math.min(X,Math.max(Mt,H)),et=Math.max(0,Math.min(J-lt,et));break}this.x=H/=X,this.y=et/=J;const[Rt,gt]=A(this,U,K).call(this);H+=Rt,et+=gt;const{style:Ot}=this.div;Ot.left=`${(100*H).toFixed(2)}%`,Ot.top=`${(100*et).toFixed(2)}%`,this.moveInDOM()}screenToPageTranslation(X,J){var H;return A(H=Jl,u,m).call(H,X,J,this.parentRotation)}pageTranslationToScreen(X,J){var H;return A(H=Jl,u,m).call(H,X,J,360-this.parentRotation)}get parentScale(){return this._uiManager.viewParameters.realScale}get parentRotation(){return(this._uiManager.viewParameters.rotation+this.pageRotation)%360}get parentDimensions(){const{parentScale:X,pageDimensions:[J,H]}=this,et=J*X,lt=H*X;return Vt.FeatureTest.isCSSRoundSupported?[Math.round(et),Math.round(lt)]:[et,lt]}setDims(X,J){var H;const[et,lt]=this.parentDimensions;this.div.style.width=`${(100*X/et).toFixed(2)}%`,t(this,F)||(this.div.style.height=`${(100*J/lt).toFixed(2)}%`),(H=t(this,f))==null||H.classList.toggle("small",X<Jl.SMALL_EDITOR_SIZE||J<Jl.SMALL_EDITOR_SIZE)}fixDims(){const{style:X}=this.div,{height:J,width:H}=X,et=H.endsWith("%"),lt=!t(this,F)&&J.endsWith("%");if(et&<)return;const[Mt,Rt]=this.parentDimensions;et||(X.width=`${(100*parseFloat(H)/Mt).toFixed(2)}%`),!t(this,F)&&!lt&&(X.height=`${(100*parseFloat(J)/Rt).toFixed(2)}%`)}getInitialTranslation(){return[0,0]}addAltTextButton(){return Sl(this,null,function*(){if(t(this,f))return;const X=Zl(this,f,document.createElement("button"));X.className="altText";const J=yield Jl._l10nPromise.get("editor_alt_text_button_label");X.textContent=J,X.setAttribute("aria-label",J),X.tabIndex="0",X.addEventListener("contextmenu",Ht.noContextMenu),X.addEventListener("pointerdown",H=>H.stopPropagation()),X.addEventListener("click",H=>{H.preventDefault(),this._uiManager.editAltText(this)},{capture:!0}),X.addEventListener("keydown",H=>{H.target===X&&H.key==="Enter"&&(H.preventDefault(),this._uiManager.editAltText(this))}),A(this,Nt,zt).call(this),this.div.append(X),Jl.SMALL_EDITOR_SIZE||(Jl.SMALL_EDITOR_SIZE=Math.min(128,Math.round(X.getBoundingClientRect().width*1.4)))})}getClientDimensions(){return this.div.getBoundingClientRect()}get altTextData(){return{altText:t(this,M),decorative:t(this,p)}}set altTextData(X){let{altText:J,decorative:H}=X;t(this,M)===J&&t(this,p)===H||(Zl(this,M,J),Zl(this,p,H),A(this,Nt,zt).call(this))}render(){this.div=document.createElement("div"),this.div.setAttribute("data-editor-rotation",(360-this.rotation)%360),this.div.className=this.name,this.div.setAttribute("id",this.id),this.div.setAttribute("tabIndex",0),this.setInForeground(),this.div.addEventListener("focusin",t(this,g)),this.div.addEventListener("focusout",t(this,q));const[X,J]=this.parentDimensions;this.parentRotation%180!==0&&(this.div.style.maxWidth=`${(100*J/X).toFixed(2)}%`,this.div.style.maxHeight=`${(100*X/J).toFixed(2)}%`);const[H,et]=this.getInitialTranslation();return this.translate(H,et),(0,Ut.bindEvents)(this,this.div,["pointerdown"]),this.div}pointerdown(X){const{isMac:J}=Vt.FeatureTest.platform;if(X.button!==0||X.ctrlKey&&J){X.preventDefault();return}Zl(this,v,!0),A(this,Gt,Xt).call(this,X)}moveInDOM(){var X;(X=this.parent)==null||X.moveEditorInDOM(this)}_setParentAndPosition(X,J,H){X.changeParent(this),this.x=J,this.y=H,this.fixAndSetPosition()}getRect(X,J){const H=this.parentScale,[et,lt]=this.pageDimensions,[Mt,Rt]=this.pageTranslation,gt=X/H,Ot=J/H,Dt=this.x*et,qt=this.y*lt,vt=this.width*et,dl=this.height*lt;switch(this.rotation){case 0:return[Dt+gt+Mt,lt-qt-Ot-dl+Rt,Dt+gt+vt+Mt,lt-qt-Ot+Rt];case 90:return[Dt+Ot+Mt,lt-qt+gt+Rt,Dt+Ot+dl+Mt,lt-qt+gt+vt+Rt];case 180:return[Dt-gt-vt+Mt,lt-qt+Ot+Rt,Dt-gt+Mt,lt-qt+Ot+dl+Rt];case 270:return[Dt-Ot-dl+Mt,lt-qt-gt-vt+Rt,Dt-Ot+Mt,lt-qt-gt+Rt];default:throw new Error("Invalid rotation")}}getRectInCurrentCoords(X,J){const[H,et,lt,Mt]=X,Rt=lt-H,gt=Mt-et;switch(this.rotation){case 0:return[H,J-Mt,Rt,gt];case 90:return[H,J-et,gt,Rt];case 180:return[lt,J-et,Rt,gt];case 270:return[lt,J-Mt,gt,Rt];default:throw new Error("Invalid rotation")}}onceAdded(){}isEmpty(){return!1}enableEditMode(){Zl(this,R,!0)}disableEditMode(){Zl(this,R,!1)}isInEditMode(){return t(this,R)}shouldGetKeyboardEvents(){return!1}needsToBeRebuilt(){return this.div&&!this.isAttachedToDOM}rebuild(){var X,J;(X=this.div)==null||X.addEventListener("focusin",t(this,g)),(J=this.div)==null||J.addEventListener("focusout",t(this,q))}serialize(){(0,Vt.unreachable)("An editor must be serializable")}static deserialize(X,J,H){const et=new this.prototype.constructor({parent:J,id:J.getNextId(),uiManager:H});et.rotation=X.rotation;const[lt,Mt]=et.pageDimensions,[Rt,gt,Ot,Dt]=et.getRectInCurrentCoords(X.rect,Mt);return et.x=Rt/lt,et.y=gt/Mt,et.width=Ot/lt,et.height=Dt/Mt,et}remove(){var X;this.div.removeEventListener("focusin",t(this,g)),this.div.removeEventListener("focusout",t(this,q)),this.isEmpty()||this.commit(),this.parent?this.parent.remove(this):this._uiManager.removeEditor(this),(X=t(this,f))==null||X.remove(),Zl(this,f,null),Zl(this,B,null)}get isResizable(){return!1}makeResizable(){this.isResizable&&(A(this,P,Zt).call(this),t(this,L).classList.remove("hidden"))}select(){var X;this.makeResizable(),(X=this.div)==null||X.classList.add("selectedEditor")}unselect(){var X,J,H;(X=t(this,L))==null||X.classList.add("hidden"),(J=this.div)==null||J.classList.remove("selectedEditor"),(H=this.div)!=null&&H.contains(document.activeElement)&&this._uiManager.currentLayer.div.focus()}updateParams(X,J){}disableEditing(){t(this,f)&&(t(this,f).hidden=!0)}enableEditing(){t(this,f)&&(t(this,f).hidden=!1)}enterInEditMode(){}get contentDiv(){return this.div}get isEditing(){return t(this,Q)}set isEditing(X){Zl(this,Q,X),this.parent&&(X?(this.parent.setSelected(this),this.parent.setActiveEditor(this)):this.parent.setActiveEditor(null))}setAspectRatio(X,J){Zl(this,F,!0);const H=X/J,{style:et}=this.div;et.aspectRatio=H,et.height="auto"}static get MIN_SIZE(){return 16}};M=new WeakMap,p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakMap,F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakSet,C=function(w,X,J){let[H,et]=w;[X,J]=this.screenToPageTranslation(X,J),this.x+=X/H,this.y+=J/et,this.fixAndSetPosition()},U=new WeakSet,K=function(){const[w,X]=this.parentDimensions,{_borderLineWidth:J}=Pt,H=J/w,et=J/X;switch(this.rotation){case 90:return[-H,et];case 180:return[H,et];case 270:return[H,-et];default:return[-H,-et]}},u=new WeakSet,m=function(w,X,J){switch(J){case 90:return[X,-w];case 180:return[-w,-X];case 270:return[-X,w];default:return[w,X]}},_=new WeakSet,$=function(w){switch(w){case 90:{const[X,J]=this.pageDimensions;return[0,-X/J,J/X,0]}case 180:return[-1,0,0,-1];case 270:{const[X,J]=this.pageDimensions;return[0,X/J,-J/X,0]}default:return[1,0,0,1]}},P=new WeakSet,Zt=function(){if(t(this,L))return;Zl(this,L,document.createElement("div")),t(this,L).classList.add("resizers");const w=["topLeft","topRight","bottomRight","bottomLeft"];this._willKeepAspectRatio||w.push("topMiddle","middleRight","bottomMiddle","middleLeft");for(const X of w){const J=document.createElement("div");t(this,L).append(J),J.classList.add("resizer",X),J.addEventListener("pointerdown",A(this,dt,It).bind(this,X)),J.addEventListener("contextmenu",Ht.noContextMenu)}this.div.prepend(t(this,L))},dt=new WeakSet,It=function(w,X){X.preventDefault();const{isMac:J}=Vt.FeatureTest.platform;if(X.button!==0||X.ctrlKey&&J)return;const H=A(this,xt,it).bind(this,w),et=this._isDraggable;this._isDraggable=!1;const lt={passive:!0,capture:!0};window.addEventListener("pointermove",H,lt);const Mt=this.x,Rt=this.y,gt=this.width,Ot=this.height,Dt=this.parent.div.style.cursor,qt=this.div.style.cursor;this.div.style.cursor=this.parent.div.style.cursor=window.getComputedStyle(X.target).cursor;const vt=()=>{this._isDraggable=et,window.removeEventListener("pointerup",vt),window.removeEventListener("blur",vt),window.removeEventListener("pointermove",H,lt),this.parent.div.style.cursor=Dt,this.div.style.cursor=qt;const dl=this.x,ol=this.y,il=this.width,_t=this.height;dl===Mt&&ol===Rt&&il===gt&&_t===Ot||this.addCommands({cmd:()=>{this.width=il,this.height=_t,this.x=dl,this.y=ol;const[Ft,wt]=this.parentDimensions;this.setDims(Ft*il,wt*_t),this.fixAndSetPosition()},undo:()=>{this.width=gt,this.height=Ot,this.x=Mt,this.y=Rt;const[Ft,wt]=this.parentDimensions;this.setDims(Ft*gt,wt*Ot),this.fixAndSetPosition()},mustExec:!0})};window.addEventListener("pointerup",vt),window.addEventListener("blur",vt)},xt=new WeakSet,it=function(w,X){const[J,H]=this.parentDimensions,et=this.x,lt=this.y,Mt=this.width,Rt=this.height,gt=Pt.MIN_SIZE/J,Ot=Pt.MIN_SIZE/H,Dt=ut=>Math.round(ut*1e4)/1e4,qt=A(this,_,$).call(this,this.rotation),vt=(ut,Tt)=>[qt[0]*ut+qt[2]*Tt,qt[1]*ut+qt[3]*Tt],dl=A(this,_,$).call(this,360-this.rotation),ol=(ut,Tt)=>[dl[0]*ut+dl[2]*Tt,dl[1]*ut+dl[3]*Tt];let il,_t,Ft=!1,wt=!1;switch(w){case"topLeft":Ft=!0,il=(ut,Tt)=>[0,0],_t=(ut,Tt)=>[ut,Tt];break;case"topMiddle":il=(ut,Tt)=>[ut/2,0],_t=(ut,Tt)=>[ut/2,Tt];break;case"topRight":Ft=!0,il=(ut,Tt)=>[ut,0],_t=(ut,Tt)=>[0,Tt];break;case"middleRight":wt=!0,il=(ut,Tt)=>[ut,Tt/2],_t=(ut,Tt)=>[0,Tt/2];break;case"bottomRight":Ft=!0,il=(ut,Tt)=>[ut,Tt],_t=(ut,Tt)=>[0,0];break;case"bottomMiddle":il=(ut,Tt)=>[ut/2,Tt],_t=(ut,Tt)=>[ut/2,0];break;case"bottomLeft":Ft=!0,il=(ut,Tt)=>[0,Tt],_t=(ut,Tt)=>[ut,0];break;case"middleLeft":wt=!0,il=(ut,Tt)=>[0,Tt/2],_t=(ut,Tt)=>[ut,Tt/2];break}const pt=il(Mt,Rt),Ct=_t(Mt,Rt);let el=vt(...Ct);const cl=Dt(et+el[0]),Ml=Dt(lt+el[1]);let Yl=1,Xl=1,[Tl,Vl]=this.screenToPageTranslation(X.movementX,X.movementY);if([Tl,Vl]=ol(Tl/J,Vl/H),Ft){const ut=Math.hypot(Mt,Rt);Yl=Xl=Math.max(Math.min(Math.hypot(Ct[0]-pt[0]-Tl,Ct[1]-pt[1]-Vl)/ut,1/Mt,1/Rt),gt/Mt,Ot/Rt)}else wt?Yl=Math.max(gt,Math.min(1,Math.abs(Ct[0]-pt[0]-Tl)))/Mt:Xl=Math.max(Ot,Math.min(1,Math.abs(Ct[1]-pt[1]-Vl)))/Rt;const Ll=Dt(Mt*Yl),yl=Dt(Rt*Xl);el=vt(..._t(Ll,yl));const Qt=cl-el[0],ot=Ml-el[1];this.width=Ll,this.height=yl,this.x=Qt,this.y=ot,this.setDims(J*Ll,H*yl),this.fixAndSetPosition()},Nt=new WeakSet,zt=function(){return Sl(this,null,function*(){var w;const X=t(this,f);if(!X)return;if(!t(this,M)&&!t(this,p)){X.classList.remove("done"),(w=t(this,B))==null||w.remove();return}Pt._l10nPromise.get("editor_alt_text_edit_button_label").then(H=>{X.setAttribute("aria-label",H)});let J=t(this,B);if(!J){Zl(this,B,J=document.createElement("span")),J.className="tooltip",J.setAttribute("role","tooltip");const H=J.id=`alt-text-tooltip-${this.id}`;X.setAttribute("aria-describedby",H);const et=100;X.addEventListener("mouseenter",()=>{Zl(this,O,setTimeout(()=>{Zl(this,O,null),t(this,B).classList.add("show"),this._uiManager._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",subtype:this.editorType,data:{action:"alt_text_tooltip"}}})},et))}),X.addEventListener("mouseleave",()=>{var lt;clearTimeout(t(this,O)),Zl(this,O,null),(lt=t(this,B))==null||lt.classList.remove("show")})}X.classList.add("done"),J.innerText=t(this,p)?yield Pt._l10nPromise.get("editor_alt_text_decorative_tooltip"):t(this,M),J.parentNode||X.append(J)})},Gt=new WeakSet,Xt=function(w){if(!this._isDraggable)return;const X=this._uiManager.isSelected(this);this._uiManager.setUpDragSession();let J,H;X&&(J={passive:!0,capture:!0},H=lt=>{const[Mt,Rt]=this.screenToPageTranslation(lt.movementX,lt.movementY);this._uiManager.dragSelectedEditors(Mt,Rt)},window.addEventListener("pointermove",H,J));const et=()=>{if(window.removeEventListener("pointerup",et),window.removeEventListener("blur",et),X&&window.removeEventListener("pointermove",H,J),Zl(this,v,!1),!this._uiManager.endDragSession()){const{isMac:lt}=Vt.FeatureTest.platform;w.ctrlKey&&!lt||w.shiftKey||w.metaKey&<?this.parent.toggleSelected(this):this.parent.setSelected(this)}};window.addEventListener("pointerup",et),window.addEventListener("blur",et)},E(Pt,u),tt(Pt,"_borderLineWidth",-1),tt(Pt,"_colorManager",new Ut.ColorManager),tt(Pt,"_zIndex",1),tt(Pt,"SMALL_EDITOR_SIZE",0);let at=Pt;r.AnnotationEditor=at;class S extends at{constructor(X){super(X),this.annotationElementId=X.annotationElementId,this.deleted=!0}serialize(){return{id:this.annotationElementId,deleted:!0,pageIndex:this.pageIndex}}}},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt,Ut,Vt,Ht,Pt,at,S,w,X,J,H,et,lt,Mt,Rt,gt,Ot,Dt,qt,vt,dl,ol,il,_t,Ft,wt,pt,Ct,el,cl,Ml,Yl,Xl,Tl,Vl,Ll,yl,Qt,ot,ut,Tt;Object.defineProperty(r,"__esModule",{value:!0}),r.KeyboardManager=r.CommandManager=r.ColorManager=r.AnnotationEditorUIManager=void 0,r.bindEvents=Lt,r.opacityToHex=Yt,h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123),h(2),h(89),h(125),h(136),h(138),h(141),h(143),h(145),h(147),h(166);var jt=h(1),Jt=h(168);function Lt(nt,T,ct){for(const Wt of ct)T.addEventListener(Wt,nt[Wt].bind(nt))}function Yt(nt){return Math.round(Math.min(255,Math.max(1,255*nt))).toString(16).padStart(2,"0")}class Kt{constructor(){E(this,M,0)}getId(){return`${jt.AnnotationEditorPrefix}${mt(this,M)._++}`}}M=new WeakMap;const $t=class{constructor(){E(this,O),E(this,p,(0,jt.getUuid)()),E(this,f,0),E(this,B,null)}static get _isSVGFittingCanvas(){const T='data:image/svg+xml;charset=UTF-8,<svg viewBox="0 0 1 1" width="1" height="1" xmlns="http://www.w3.org/2000/svg"><rect width="1" height="1" style="fill:red;"/></svg>',ct=new OffscreenCanvas(1,3).getContext("2d"),Wt=new Image;Wt.src=T;const yt=Wt.decode().then(()=>(ct.drawImage(Wt,0,0,1,1,0,0,1,3),new Uint32Array(ct.getImageData(0,0,1,1).data.buffer)[0]===0));return(0,jt.shadow)(this,"_isSVGFittingCanvas",yt)}getFromFile(T){return Sl(this,null,function*(){const{lastModified:ct,name:Wt,size:yt,type:kt}=T;return A(this,O,F).call(this,`${ct}_${Wt}_${yt}_${kt}`,T)})}getFromUrl(T){return Sl(this,null,function*(){return A(this,O,F).call(this,T,T)})}getFromId(T){return Sl(this,null,function*(){t(this,B)||Zl(this,B,new Map);const ct=t(this,B).get(T);return ct?ct.bitmap?(ct.refCounter+=1,ct):ct.file?this.getFromFile(ct.file):this.getFromUrl(ct.url):null})}getSvgUrl(T){const ct=t(this,B).get(T);return ct!=null&&ct.isSvg?ct.svgUrl:null}deleteId(T){t(this,B)||Zl(this,B,new Map);const ct=t(this,B).get(T);ct&&(ct.refCounter-=1,ct.refCounter===0&&(ct.bitmap=null))}isValidId(T){return T.startsWith(`image_${t(this,p)}_`)}};p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakSet,F=function(nt,T){return Sl(this,null,function*(){t(this,B)||Zl(this,B,new Map);let ct=t(this,B).get(nt);if(ct===null)return null;if(ct!=null&&ct.bitmap)return ct.refCounter+=1,ct;try{ct||(ct={bitmap:null,id:`image_${t(this,p)}_${mt(this,f)._++}`,refCounter:0,isSvg:!1});let Wt;if(typeof T=="string"){ct.url=T;const yt=yield fetch(T);if(!yt.ok)throw new Error(yt.statusText);Wt=yield yt.blob()}else Wt=ct.file=T;if(Wt.type==="image/svg+xml"){const yt=$t._isSVGFittingCanvas,kt=new FileReader,Et=new Image,sl=new Promise((ml,al)=>{Et.onload=()=>{ct.bitmap=Et,ct.isSvg=!0,ml()},kt.onload=()=>Sl(this,null,function*(){const zl=ct.svgUrl=kt.result;Et.src=(yield yt)?`${zl}#svgView(preserveAspectRatio(none))`:zl}),Et.onerror=kt.onerror=al});kt.readAsDataURL(Wt),yield sl}else ct.bitmap=yield createImageBitmap(Wt);ct.refCounter=1}catch(Wt){console.error(Wt),ct=null}return t(this,B).set(nt,ct),ct&&t(this,B).set(ct.id,ct),ct})};let tl=$t;class bl{constructor(){E(this,L,[]),E(this,g,!1),E(this,q,void 0),E(this,v,-1);let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:128;Zl(this,q,T)}add(T){let{cmd:ct,undo:Wt,mustExec:yt,type:kt=NaN,overwriteIfSameType:Et=!1,keepUndo:sl=!1}=T;if(yt&&ct(),t(this,g))return;const ml={cmd:ct,undo:Wt,type:kt};if(t(this,v)===-1){t(this,L).length>0&&(t(this,L).length=0),Zl(this,v,0),t(this,L).push(ml);return}if(Et&&t(this,L)[t(this,v)].type===kt){sl&&(ml.undo=t(this,L)[t(this,v)].undo),t(this,L)[t(this,v)]=ml;return}const al=t(this,v)+1;al===t(this,q)?t(this,L).splice(0,1):(Zl(this,v,al),al<t(this,L).length&&t(this,L).splice(al)),t(this,L).push(ml)}undo(){t(this,v)!==-1&&(Zl(this,g,!0),t(this,L)[t(this,v)].undo(),Zl(this,g,!1),Zl(this,v,t(this,v)-1))}redo(){t(this,v)<t(this,L).length-1&&(Zl(this,v,t(this,v)+1),Zl(this,g,!0),t(this,L)[t(this,v)].cmd(),Zl(this,g,!1))}hasSomethingToUndo(){return t(this,v)!==-1}hasSomethingToRedo(){return t(this,v)<t(this,L).length-1}destroy(){Zl(this,L,null)}}L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,r.CommandManager=bl;class Bt{constructor(T){E(this,Q),this.buffer=[],this.callbacks=new Map,this.allKeys=new Set;const{isMac:ct}=jt.FeatureTest.platform;for(const[Wt,yt,kt={}]of T)for(const Et of Wt){const sl=Et.startsWith("mac+");ct&&sl?(this.callbacks.set(Et.slice(4),{callback:yt,options:kt}),this.allKeys.add(Et.split("+").at(-1))):!ct&&!sl&&(this.callbacks.set(Et,{callback:yt,options:kt}),this.allKeys.add(Et.split("+").at(-1)))}}exec(T,ct){if(!this.allKeys.has(ct.key))return;const Wt=this.callbacks.get(A(this,Q,R).call(this,ct));if(!Wt)return;const{callback:yt,options:{bubbles:kt=!1,args:Et=[],checker:sl=null}}=Wt;sl&&!sl(T,ct)||(yt.bind(T,...Et)(),kt||(ct.stopPropagation(),ct.preventDefault()))}}Q=new WeakSet,R=function(nt){nt.altKey&&this.buffer.push("alt"),nt.ctrlKey&&this.buffer.push("ctrl"),nt.metaKey&&this.buffer.push("meta"),nt.shiftKey&&this.buffer.push("shift"),this.buffer.push(nt.key);const T=this.buffer.join("+");return this.buffer.length=0,T},r.KeyboardManager=Bt;const rl=class vs{get _colors(){const T=new Map([["CanvasText",null],["Canvas",null]]);return(0,Jt.getColorValues)(T),(0,jt.shadow)(this,"_colors",T)}convert(T){const ct=(0,Jt.getRGB)(T);if(!window.matchMedia("(forced-colors: active)").matches)return ct;for(const[Wt,yt]of this._colors)if(yt.every((kt,Et)=>kt===ct[Et]))return vs._colorsMapping.get(Wt);return ct}getHexCode(T){const ct=this._colors.get(T);return ct?jt.Util.makeHexColor(...ct):T}};tt(rl,"_colorsMapping",new Map([["CanvasText",[0,0,0]],["Canvas",[255,255,255]]]));let hl=rl;r.ColorManager=hl;const Il=class ds{constructor(T,ct,Wt,yt,kt,Et){E(this,gt),E(this,Dt),E(this,vt),E(this,ol),E(this,_t),E(this,wt),E(this,Ct),E(this,cl),E(this,Yl),E(this,Tl),E(this,Ll),E(this,Qt),E(this,ut),E(this,j,null),E(this,I,new Map),E(this,k,new Map),E(this,C,null),E(this,U,null),E(this,K,new bl),E(this,u,0),E(this,m,new Set),E(this,_,null),E(this,$,null),E(this,P,new Set),E(this,Zt,null),E(this,dt,new Kt),E(this,It,!1),E(this,xt,!1),E(this,it,null),E(this,Nt,jt.AnnotationEditorType.NONE),E(this,zt,new Set),E(this,Gt,null),E(this,Xt,this.blur.bind(this)),E(this,Ut,this.focus.bind(this)),E(this,Vt,this.copy.bind(this)),E(this,Ht,this.cut.bind(this)),E(this,Pt,this.paste.bind(this)),E(this,at,this.keydown.bind(this)),E(this,S,this.onEditingAction.bind(this)),E(this,w,this.onPageChanging.bind(this)),E(this,X,this.onScaleChanging.bind(this)),E(this,J,this.onRotationChanging.bind(this)),E(this,H,{isEditing:!1,isEmpty:!0,hasSomethingToUndo:!1,hasSomethingToRedo:!1,hasSelectedEditor:!1}),E(this,et,[0,0]),E(this,lt,null),E(this,Mt,null),E(this,Rt,null),Zl(this,Mt,T),Zl(this,Rt,ct),Zl(this,C,Wt),this._eventBus=yt,this._eventBus._on("editingaction",t(this,S)),this._eventBus._on("pagechanging",t(this,w)),this._eventBus._on("scalechanging",t(this,X)),this._eventBus._on("rotationchanging",t(this,J)),Zl(this,U,kt.annotationStorage),Zl(this,Zt,kt.filterFactory),Zl(this,Gt,Et),this.viewParameters={realScale:Jt.PixelsPerInch.PDF_TO_CSS_UNITS,rotation:0}}static get _keyboardManager(){const T=ds.prototype,ct=kt=>{const{activeElement:Et}=document;return Et&&t(kt,Mt).contains(Et)&&kt.hasSomethingToControl()},Wt=this.TRANSLATE_SMALL,yt=this.TRANSLATE_BIG;return(0,jt.shadow)(this,"_keyboardManager",new Bt([[["ctrl+a","mac+meta+a"],T.selectAll],[["ctrl+z","mac+meta+z"],T.undo],[["ctrl+y","ctrl+shift+z","mac+meta+shift+z","ctrl+shift+Z","mac+meta+shift+Z"],T.redo],[["Backspace","alt+Backspace","ctrl+Backspace","shift+Backspace","mac+Backspace","mac+alt+Backspace","mac+ctrl+Backspace","Delete","ctrl+Delete","shift+Delete","mac+Delete"],T.delete],[["Escape","mac+Escape"],T.unselectAll],[["ArrowLeft","mac+ArrowLeft"],T.translateSelectedEditors,{args:[-Wt,0],checker:ct}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],T.translateSelectedEditors,{args:[-yt,0],checker:ct}],[["ArrowRight","mac+ArrowRight"],T.translateSelectedEditors,{args:[Wt,0],checker:ct}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],T.translateSelectedEditors,{args:[yt,0],checker:ct}],[["ArrowUp","mac+ArrowUp"],T.translateSelectedEditors,{args:[0,-Wt],checker:ct}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],T.translateSelectedEditors,{args:[0,-yt],checker:ct}],[["ArrowDown","mac+ArrowDown"],T.translateSelectedEditors,{args:[0,Wt],checker:ct}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],T.translateSelectedEditors,{args:[0,yt],checker:ct}]]))}destroy(){A(this,ol,il).call(this),A(this,Dt,qt).call(this),this._eventBus._off("editingaction",t(this,S)),this._eventBus._off("pagechanging",t(this,w)),this._eventBus._off("scalechanging",t(this,X)),this._eventBus._off("rotationchanging",t(this,J));for(const T of t(this,k).values())T.destroy();t(this,k).clear(),t(this,I).clear(),t(this,P).clear(),Zl(this,j,null),t(this,zt).clear(),t(this,K).destroy(),t(this,C).destroy()}get hcmFilter(){return(0,jt.shadow)(this,"hcmFilter",t(this,Gt)?t(this,Zt).addHCMFilter(t(this,Gt).foreground,t(this,Gt).background):"none")}get direction(){return(0,jt.shadow)(this,"direction",getComputedStyle(t(this,Mt)).direction)}editAltText(T){var ct;(ct=t(this,C))==null||ct.editAltText(this,T)}onPageChanging(T){let{pageNumber:ct}=T;Zl(this,u,ct-1)}focusMainContainer(){t(this,Mt).focus()}findParent(T,ct){for(const Wt of t(this,k).values()){const{x:yt,y:kt,width:Et,height:sl}=Wt.div.getBoundingClientRect();if(T>=yt&&T<=yt+Et&&ct>=kt&&ct<=kt+sl)return Wt}return null}disableUserSelect(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;t(this,Rt).classList.toggle("noUserSelect",T)}addShouldRescale(T){t(this,P).add(T)}removeShouldRescale(T){t(this,P).delete(T)}onScaleChanging(T){let{scale:ct}=T;this.commitOrRemove(),this.viewParameters.realScale=ct*Jt.PixelsPerInch.PDF_TO_CSS_UNITS;for(const Wt of t(this,P))Wt.onScaleChanging()}onRotationChanging(T){let{pagesRotation:ct}=T;this.commitOrRemove(),this.viewParameters.rotation=ct}addToAnnotationStorage(T){!T.isEmpty()&&t(this,U)&&!t(this,U).has(T.id)&&t(this,U).setValue(T.id,T)}blur(){if(!this.hasSelection)return;const{activeElement:T}=document;for(const ct of t(this,zt))if(ct.div.contains(T)){Zl(this,it,[ct,T]),ct._focusEventsAllowed=!1;break}}focus(){if(!t(this,it))return;const[T,ct]=t(this,it);Zl(this,it,null),ct.addEventListener("focusin",()=>{T._focusEventsAllowed=!0},{once:!0}),ct.focus()}addEditListeners(){A(this,vt,dl).call(this),A(this,_t,Ft).call(this)}removeEditListeners(){A(this,ol,il).call(this),A(this,wt,pt).call(this)}copy(T){var ct;if(T.preventDefault(),(ct=t(this,j))==null||ct.commitOrRemove(),!this.hasSelection)return;const Wt=[];for(const yt of t(this,zt)){const kt=yt.serialize(!0);kt&&Wt.push(kt)}Wt.length!==0&&T.clipboardData.setData("application/pdfjs",JSON.stringify(Wt))}cut(T){this.copy(T),this.delete()}paste(T){T.preventDefault();const{clipboardData:ct}=T;for(const kt of ct.items)for(const Et of t(this,$))if(Et.isHandlingMimeForPasting(kt.type)){Et.paste(kt,this.currentLayer);return}let Wt=ct.getData("application/pdfjs");if(!Wt)return;try{Wt=JSON.parse(Wt)}catch(kt){(0,jt.warn)(`paste: "${kt.message}".`);return}if(!Array.isArray(Wt))return;this.unselectAll();const yt=this.currentLayer;try{const kt=[];for(const ml of Wt){const al=yt.deserialize(ml);if(!al)return;kt.push(al)}const Et=()=>{for(const ml of kt)A(this,Ll,yl).call(this,ml);A(this,ut,Tt).call(this,kt)},sl=()=>{for(const ml of kt)ml.remove()};this.addCommands({cmd:Et,undo:sl,mustExec:!0})}catch(kt){(0,jt.warn)(`paste: "${kt.message}".`)}}keydown(T){var ct;(ct=this.getActive())!=null&&ct.shouldGetKeyboardEvents()||ds._keyboardManager.exec(this,T)}onEditingAction(T){["undo","redo","delete","selectAll"].includes(T.name)&&this[T.name]()}setEditingState(T){T?(A(this,gt,Ot).call(this),A(this,vt,dl).call(this),A(this,_t,Ft).call(this),A(this,Ct,el).call(this,{isEditing:t(this,Nt)!==jt.AnnotationEditorType.NONE,isEmpty:A(this,Qt,ot).call(this),hasSomethingToUndo:t(this,K).hasSomethingToUndo(),hasSomethingToRedo:t(this,K).hasSomethingToRedo(),hasSelectedEditor:!1})):(A(this,Dt,qt).call(this),A(this,ol,il).call(this),A(this,wt,pt).call(this),A(this,Ct,el).call(this,{isEditing:!1}),this.disableUserSelect(!1))}registerEditorTypes(T){if(!t(this,$)){Zl(this,$,T);for(const ct of t(this,$))A(this,cl,Ml).call(this,ct.defaultPropertiesToUpdate)}}getId(){return t(this,dt).getId()}get currentLayer(){return t(this,k).get(t(this,u))}getLayer(T){return t(this,k).get(T)}get currentPageIndex(){return t(this,u)}addLayer(T){t(this,k).set(T.pageIndex,T),t(this,It)?T.enable():T.disable()}removeLayer(T){t(this,k).delete(T.pageIndex)}updateMode(T){let ct=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(t(this,Nt)!==T){if(Zl(this,Nt,T),T===jt.AnnotationEditorType.NONE){this.setEditingState(!1),A(this,Tl,Vl).call(this);return}this.setEditingState(!0),A(this,Yl,Xl).call(this),this.unselectAll();for(const Wt of t(this,k).values())Wt.updateMode(T);if(ct){for(const Wt of t(this,I).values())if(Wt.annotationElementId===ct){this.setSelected(Wt),Wt.enterInEditMode();break}}}}updateToolbar(T){T!==t(this,Nt)&&this._eventBus.dispatch("switchannotationeditormode",{source:this,mode:T})}updateParams(T,ct){if(t(this,$)){if(T===jt.AnnotationEditorParamsType.CREATE){this.currentLayer.addNewEditor(T);return}for(const Wt of t(this,zt))Wt.updateParams(T,ct);for(const Wt of t(this,$))Wt.updateDefaultParams(T,ct)}}enableWaiting(){let T=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(t(this,xt)!==T){Zl(this,xt,T);for(const ct of t(this,k).values())T?ct.disableClick():ct.enableClick(),ct.div.classList.toggle("waiting",T)}}getEditors(T){const ct=[];for(const Wt of t(this,I).values())Wt.pageIndex===T&&ct.push(Wt);return ct}getEditor(T){return t(this,I).get(T)}addEditor(T){t(this,I).set(T.id,T)}removeEditor(T){var ct;t(this,I).delete(T.id),this.unselect(T),(!T.annotationElementId||!t(this,m).has(T.annotationElementId))&&((ct=t(this,U))==null||ct.remove(T.id))}addDeletedAnnotationElement(T){t(this,m).add(T.annotationElementId),T.deleted=!0}isDeletedAnnotationElement(T){return t(this,m).has(T)}removeDeletedAnnotationElement(T){t(this,m).delete(T.annotationElementId),T.deleted=!1}setActiveEditor(T){t(this,j)!==T&&(Zl(this,j,T),T&&A(this,cl,Ml).call(this,T.propertiesToUpdate))}toggleSelected(T){if(t(this,zt).has(T)){t(this,zt).delete(T),T.unselect(),A(this,Ct,el).call(this,{hasSelectedEditor:this.hasSelection});return}t(this,zt).add(T),T.select(),A(this,cl,Ml).call(this,T.propertiesToUpdate),A(this,Ct,el).call(this,{hasSelectedEditor:!0})}setSelected(T){for(const ct of t(this,zt))ct!==T&&ct.unselect();t(this,zt).clear(),t(this,zt).add(T),T.select(),A(this,cl,Ml).call(this,T.propertiesToUpdate),A(this,Ct,el).call(this,{hasSelectedEditor:!0})}isSelected(T){return t(this,zt).has(T)}unselect(T){T.unselect(),t(this,zt).delete(T),A(this,Ct,el).call(this,{hasSelectedEditor:this.hasSelection})}get hasSelection(){return t(this,zt).size!==0}undo(){t(this,K).undo(),A(this,Ct,el).call(this,{hasSomethingToUndo:t(this,K).hasSomethingToUndo(),hasSomethingToRedo:!0,isEmpty:A(this,Qt,ot).call(this)})}redo(){t(this,K).redo(),A(this,Ct,el).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:t(this,K).hasSomethingToRedo(),isEmpty:A(this,Qt,ot).call(this)})}addCommands(T){t(this,K).add(T),A(this,Ct,el).call(this,{hasSomethingToUndo:!0,hasSomethingToRedo:!1,isEmpty:A(this,Qt,ot).call(this)})}delete(){if(this.commitOrRemove(),!this.hasSelection)return;const T=[...t(this,zt)],ct=()=>{for(const yt of T)yt.remove()},Wt=()=>{for(const yt of T)A(this,Ll,yl).call(this,yt)};this.addCommands({cmd:ct,undo:Wt,mustExec:!0})}commitOrRemove(){var T;(T=t(this,j))==null||T.commitOrRemove()}hasSomethingToControl(){return t(this,j)||this.hasSelection}selectAll(){for(const T of t(this,zt))T.commit();A(this,ut,Tt).call(this,t(this,I).values())}unselectAll(){if(t(this,j)){t(this,j).commitOrRemove();return}if(this.hasSelection){for(const T of t(this,zt))T.unselect();t(this,zt).clear(),A(this,Ct,el).call(this,{hasSelectedEditor:!1})}}translateSelectedEditors(T,ct){if(arguments.length>2&&arguments[2]!==void 0&&arguments[2]||this.commitOrRemove(),!this.hasSelection)return;t(this,et)[0]+=T,t(this,et)[1]+=ct;const[Wt,yt]=t(this,et),kt=[...t(this,zt)];t(this,lt)&&clearTimeout(t(this,lt)),Zl(this,lt,setTimeout(()=>{Zl(this,lt,null),t(this,et)[0]=t(this,et)[1]=0,this.addCommands({cmd:()=>{for(const sl of kt)t(this,I).has(sl.id)&&sl.translateInPage(Wt,yt)},undo:()=>{for(const sl of kt)t(this,I).has(sl.id)&&sl.translateInPage(-Wt,-yt)},mustExec:!1})},1e3));for(const sl of kt)sl.translateInPage(T,ct)}setUpDragSession(){if(this.hasSelection){this.disableUserSelect(!0),Zl(this,_,new Map);for(const T of t(this,zt))t(this,_).set(T,{savedX:T.x,savedY:T.y,savedPageIndex:T.pageIndex,newX:0,newY:0,newPageIndex:-1})}}endDragSession(){if(!t(this,_))return!1;this.disableUserSelect(!1);const T=t(this,_);Zl(this,_,null);let ct=!1;for(const[{x:yt,y:kt,pageIndex:Et},sl]of T)sl.newX=yt,sl.newY=kt,sl.newPageIndex=Et,ct||(ct=yt!==sl.savedX||kt!==sl.savedY||Et!==sl.savedPageIndex);if(!ct)return!1;const Wt=(yt,kt,Et,sl)=>{if(t(this,I).has(yt.id)){const ml=t(this,k).get(sl);ml?yt._setParentAndPosition(ml,kt,Et):(yt.pageIndex=sl,yt.x=kt,yt.y=Et)}};return this.addCommands({cmd:()=>{for(const[yt,{newX:kt,newY:Et,newPageIndex:sl}]of T)Wt(yt,kt,Et,sl)},undo:()=>{for(const[yt,{savedX:kt,savedY:Et,savedPageIndex:sl}]of T)Wt(yt,kt,Et,sl)},mustExec:!0}),!0}dragSelectedEditors(T,ct){if(t(this,_))for(const Wt of t(this,_).keys())Wt.drag(T,ct)}rebuild(T){if(T.parent===null){const ct=this.getLayer(T.pageIndex);ct?(ct.changeParent(T),ct.addOrRebuild(T)):(this.addEditor(T),this.addToAnnotationStorage(T),T.rebuild())}else T.parent.addOrRebuild(T)}isActive(T){return t(this,j)===T}getActive(){return t(this,j)}getMode(){return t(this,Nt)}get imageManager(){return(0,jt.shadow)(this,"imageManager",new tl)}};j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakMap,K=new WeakMap,u=new WeakMap,m=new WeakMap,_=new WeakMap,$=new WeakMap,P=new WeakMap,Zt=new WeakMap,dt=new WeakMap,It=new WeakMap,xt=new WeakMap,it=new WeakMap,Nt=new WeakMap,zt=new WeakMap,Gt=new WeakMap,Xt=new WeakMap,Ut=new WeakMap,Vt=new WeakMap,Ht=new WeakMap,Pt=new WeakMap,at=new WeakMap,S=new WeakMap,w=new WeakMap,X=new WeakMap,J=new WeakMap,H=new WeakMap,et=new WeakMap,lt=new WeakMap,Mt=new WeakMap,Rt=new WeakMap,gt=new WeakSet,Ot=function(){window.addEventListener("focus",t(this,Ut)),window.addEventListener("blur",t(this,Xt))},Dt=new WeakSet,qt=function(){window.removeEventListener("focus",t(this,Ut)),window.removeEventListener("blur",t(this,Xt))},vt=new WeakSet,dl=function(){window.addEventListener("keydown",t(this,at),{capture:!0})},ol=new WeakSet,il=function(){window.removeEventListener("keydown",t(this,at),{capture:!0})},_t=new WeakSet,Ft=function(){document.addEventListener("copy",t(this,Vt)),document.addEventListener("cut",t(this,Ht)),document.addEventListener("paste",t(this,Pt))},wt=new WeakSet,pt=function(){document.removeEventListener("copy",t(this,Vt)),document.removeEventListener("cut",t(this,Ht)),document.removeEventListener("paste",t(this,Pt))},Ct=new WeakSet,el=function(nt){Object.entries(nt).some(T=>{let[ct,Wt]=T;return t(this,H)[ct]!==Wt})&&this._eventBus.dispatch("annotationeditorstateschanged",{source:this,details:Object.assign(t(this,H),nt)})},cl=new WeakSet,Ml=function(nt){this._eventBus.dispatch("annotationeditorparamschanged",{source:this,details:nt})},Yl=new WeakSet,Xl=function(){if(!t(this,It)){Zl(this,It,!0);for(const nt of t(this,k).values())nt.enable()}},Tl=new WeakSet,Vl=function(){if(this.unselectAll(),t(this,It)){Zl(this,It,!1);for(const nt of t(this,k).values())nt.disable()}},Ll=new WeakSet,yl=function(nt){const T=t(this,k).get(nt.pageIndex);T?T.addOrRebuild(nt):this.addEditor(nt)},Qt=new WeakSet,ot=function(){if(t(this,I).size===0)return!0;if(t(this,I).size===1)for(const nt of t(this,I).values())return nt.isEmpty();return!1},ut=new WeakSet,Tt=function(nt){t(this,zt).clear();for(const T of nt)T.isEmpty()||(t(this,zt).add(T),T.select());A(this,Ct,el).call(this,{hasSelectedEditor:!0})},tt(Il,"TRANSLATE_SMALL",1),tt(Il,"TRANSLATE_BIG",10);let Wl=Il;r.AnnotationEditorUIManager=Wl},(st,r,h)=>{var M=h(3),p=h(6),f=h(4),B=h(24),O=h(14),F=h(8),L=h(21),g=h(20),q=h(91),v=h(39),Q=h(77),R=h(64),j=h(159),I=h(7),k=h(167),C=h(27),U=f.JSON,K=f.Number,u=f.SyntaxError,m=U&&U.parse,_=B("Object","keys"),$=Object.getOwnPropertyDescriptor,P=O("".charAt),Zt=O("".slice),dt=O(/./.exec),It=O([].push),xt=/^\d$/,it=/^[1-9]$/,Nt=/^(?:-|\d)$/,zt=/^[\t\n\r ]$/,Gt=0,Xt=1,Ut=function(X,J){X=Q(X);var H=new at(X,0),et=H.parse(),lt=et.value,Mt=H.skip(zt,et.end);if(Mt<X.length)throw u('Unexpected extra character: "'+P(X,Mt)+'" after the parsed data at: '+Mt);return L(J)?Vt({"":lt},"",J,et):lt},Vt=function(X,J,H,et){var lt=X[J],Mt=et&<===et.value,Rt=Mt&&typeof et.source=="string"?{source:et.source}:{},gt,Ot,Dt,qt,vt;if(g(lt)){var dl=q(lt),ol=Mt?et.nodes:dl?[]:{};if(dl)for(gt=ol.length,Dt=R(lt),qt=0;qt<Dt;qt++)Ht(lt,qt,Vt(lt,""+qt,H,qt<gt?ol[qt]:void 0));else for(Ot=_(lt),Dt=R(Ot),qt=0;qt<Dt;qt++)vt=Ot[qt],Ht(lt,vt,Vt(lt,vt,H,v(ol,vt)?ol[vt]:void 0))}return F(H,X,J,lt,Rt)},Ht=function(X,J,H){if(p){var et=$(X,J);if(et&&!et.configurable)return}H===void 0?delete X[J]:j(X,J,H)},Pt=function(X,J,H,et){this.value=X,this.end=J,this.source=H,this.nodes=et},at=function(X,J){this.source=X,this.index=J};at.prototype={fork:function(X){return new at(this.source,X)},parse:function(){var X=this.source,J=this.skip(zt,this.index),H=this.fork(J),et=P(X,J);if(dt(Nt,et))return H.number();switch(et){case"{":return H.object();case"[":return H.array();case'"':return H.string();case"t":return H.keyword(!0);case"f":return H.keyword(!1);case"n":return H.keyword(null)}throw u('Unexpected character: "'+et+'" at: '+J)},node:function(X,J,H,et,lt){return new Pt(J,et,X?null:Zt(this.source,H,et),lt)},object:function(){for(var X=this.source,J=this.index+1,H=!1,et={},lt={};J<X.length;){if(J=this.until(['"',"}"],J),P(X,J)==="}"&&!H){J++;break}var Mt=this.fork(J).string(),Rt=Mt.value;J=Mt.end,J=this.until([":"],J)+1,J=this.skip(zt,J),Mt=this.fork(J).parse(),j(lt,Rt,Mt),j(et,Rt,Mt.value),J=this.until([",","}"],Mt.end);var gt=P(X,J);if(gt===",")H=!0,J++;else if(gt==="}"){J++;break}}return this.node(Xt,et,this.index,J,lt)},array:function(){for(var X=this.source,J=this.index+1,H=!1,et=[],lt=[];J<X.length;){if(J=this.skip(zt,J),P(X,J)==="]"&&!H){J++;break}var Mt=this.fork(J).parse();if(It(lt,Mt),It(et,Mt.value),J=this.until([",","]"],Mt.end),P(X,J)===",")H=!0,J++;else if(P(X,J)==="]"){J++;break}}return this.node(Xt,et,this.index,J,lt)},string:function(){var X=this.index,J=k(this.source,this.index+1);return this.node(Gt,J.value,X,J.end)},number:function(){var X=this.source,J=this.index,H=J;if(P(X,H)==="-"&&H++,P(X,H)==="0")H++;else if(dt(it,P(X,H)))H=this.skip(xt,++H);else throw u("Failed to parse number at: "+H);if(P(X,H)==="."&&(H=this.skip(xt,++H)),P(X,H)==="e"||P(X,H)==="E"){H++,(P(X,H)==="+"||P(X,H)==="-")&&H++;var et=H;if(H=this.skip(xt,H),et===H)throw u("Failed to parse number's exponent value at: "+H)}return this.node(Gt,K(Zt(X,J,H)),J,H)},keyword:function(X){var J=""+X,H=this.index,et=H+J.length;if(Zt(this.source,H,et)!==J)throw u("Failed to parse value at: "+H);return this.node(Gt,X,H,et)},skip:function(X,J){for(var H=this.source;J<H.length&&dt(X,P(H,J));J++);return J},until:function(X,J){J=this.skip(zt,J);for(var H=P(this.source,J),et=0;et<X.length;et++)if(X[et]===H)return J;throw u('Unexpected character: "'+H+'" at: '+J)}};var S=I(function(){var X="9007199254740993",J;return m(X,function(H,et,lt){J=lt.source}),J!==X}),w=C&&!I(function(){return 1/m("-0 ")!==-1/0});M({target:"JSON",stat:!0,forced:S},{parse:function(X,J){return w&&!L(J)?m(X):Ut(X,J)}})},(st,r,h)=>{var M=h(14),p=h(39),f=SyntaxError,B=parseInt,O=String.fromCharCode,F=M("".charAt),L=M("".slice),g=M(/./.exec),q={'\\"':'"',"\\\\":"\\","\\/":"/","\\b":"\b","\\f":"\f","\\n":`
|
||
`,"\\r":"\r","\\t":" "},v=/^[\da-f]{4}$/i,Q=/^[\u0000-\u001F]$/;st.exports=function(R,j){for(var I=!0,k="";j<R.length;){var C=F(R,j);if(C==="\\"){var U=L(R,j,j+2);if(p(q,U))k+=q[U],j+=2;else if(U==="\\u"){j+=2;var K=L(R,j,j+4);if(!g(v,K))throw f("Bad Unicode escape at: "+j);k+=O(B(K,16)),j+=4}else throw f('Unknown escape sequence: "'+U+'"')}else if(C==='"'){I=!1,j++;break}else{if(g(Q,C))throw f("Bad control character in string literal at: "+j);k+=C,j++}}if(I)throw f("Unterminated string at: "+j);return{value:k,end:j}}},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt;Object.defineProperty(r,"__esModule",{value:!0}),r.StatTimer=r.RenderingCancelledException=r.PixelsPerInch=r.PageViewport=r.PDFDateString=r.DOMStandardFontDataFactory=r.DOMSVGFactory=r.DOMFilterFactory=r.DOMCanvasFactory=r.DOMCMapReaderFactory=void 0,r.deprecated=gt,r.getColorValues=dl,r.getCurrentTransform=ol,r.getCurrentTransformInverse=il,r.getFilenameFromUrl=J,r.getPdfFilenameFromUrl=H,r.getRGB=vt,r.getXfaPageViewport=qt,r.isDataScheme=w,r.isPdfFile=X,r.isValidFetchUrl=lt,r.loadScript=Rt,r.noContextMenu=Mt,r.setLayerDimensions=_t,h(2),h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123),h(89),h(84),h(86),h(87);var It=h(169),xt=h(1);const it="http://www.w3.org/2000/svg",Nt=class{};tt(Nt,"CSS",96),tt(Nt,"PDF",72),tt(Nt,"PDF_TO_CSS_UNITS",Nt.CSS/Nt.PDF);let zt=Nt;r.PixelsPerInch=zt;class Gt extends It.BaseFilterFactory{constructor(){let{docId:wt,ownerDocument:pt=globalThis.document}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),E(this,R),E(this,I),E(this,C),E(this,K),E(this,m),E(this,$),E(this,Zt),E(this,M,void 0),E(this,p,void 0),E(this,f,void 0),E(this,B,void 0),E(this,O,void 0),E(this,F,void 0),E(this,L,void 0),E(this,g,void 0),E(this,q,void 0),E(this,v,void 0),E(this,Q,0),Zl(this,f,wt),Zl(this,B,pt)}addFilter(wt){if(!wt)return"none";let pt=t(this,R,j).get(wt);if(pt)return pt;let Ct,el,cl,Ml;if(wt.length===1){const Vl=wt[0],Ll=new Array(256);for(let yl=0;yl<256;yl++)Ll[yl]=Vl[yl]/255;Ml=Ct=el=cl=Ll.join(",")}else{const[Vl,Ll,yl]=wt,Qt=new Array(256),ot=new Array(256),ut=new Array(256);for(let Tt=0;Tt<256;Tt++)Qt[Tt]=Vl[Tt]/255,ot[Tt]=Ll[Tt]/255,ut[Tt]=yl[Tt]/255;Ct=Qt.join(","),el=ot.join(","),cl=ut.join(","),Ml=`${Ct}${el}${cl}`}if(pt=t(this,R,j).get(Ml),pt)return t(this,R,j).set(wt,pt),pt;const Yl=`g_${t(this,f)}_transfer_map_${mt(this,Q)._++}`,Xl=`url(#${Yl})`;t(this,R,j).set(wt,Xl),t(this,R,j).set(Ml,Xl);const Tl=A(this,K,u).call(this,Yl);return A(this,$,P).call(this,Ct,el,cl,Tl),Xl}addHCMFilter(wt,pt){var Ct;const el=`${wt}-${pt}`;if(t(this,F)===el)return t(this,L);if(Zl(this,F,el),Zl(this,L,"none"),(Ct=t(this,O))==null||Ct.remove(),!wt||!pt)return t(this,L);const cl=A(this,Zt,dt).call(this,wt);wt=xt.Util.makeHexColor(...cl);const Ml=A(this,Zt,dt).call(this,pt);if(pt=xt.Util.makeHexColor(...Ml),t(this,I,k).style.color="",wt==="#000000"&&pt==="#ffffff"||wt===pt)return t(this,L);const Yl=new Array(256);for(let yl=0;yl<=255;yl++){const Qt=yl/255;Yl[yl]=Qt<=.03928?Qt/12.92:$l((Qt+.055)/1.055,2.4)}const Xl=Yl.join(","),Tl=`g_${t(this,f)}_hcm_filter`,Vl=Zl(this,g,A(this,K,u).call(this,Tl));A(this,$,P).call(this,Xl,Xl,Xl,Vl),A(this,C,U).call(this,Vl);const Ll=(yl,Qt)=>{const ot=cl[yl]/255,ut=Ml[yl]/255,Tt=new Array(Qt+1);for(let jt=0;jt<=Qt;jt++)Tt[jt]=ot+jt/Qt*(ut-ot);return Tt.join(",")};return A(this,$,P).call(this,Ll(0,5),Ll(1,5),Ll(2,5),Vl),Zl(this,L,`url(#${Tl})`),t(this,L)}addHighlightHCMFilter(wt,pt,Ct,el){var cl;const Ml=`${wt}-${pt}-${Ct}-${el}`;if(t(this,q)===Ml)return t(this,v);if(Zl(this,q,Ml),Zl(this,v,"none"),(cl=t(this,g))==null||cl.remove(),!wt||!pt)return t(this,v);const[Yl,Xl]=[wt,pt].map(A(this,Zt,dt).bind(this));let Tl=Math.round(.2126*Yl[0]+.7152*Yl[1]+.0722*Yl[2]),Vl=Math.round(.2126*Xl[0]+.7152*Xl[1]+.0722*Xl[2]),[Ll,yl]=[Ct,el].map(A(this,Zt,dt).bind(this));Vl<Tl&&([Tl,Vl,Ll,yl]=[Vl,Tl,yl,Ll]),t(this,I,k).style.color="";const Qt=(Tt,jt,Jt)=>{const Lt=new Array(256),Yt=(Vl-Tl)/Jt,Kt=Tt/255,$t=(jt-Tt)/(255*Jt);let tl=0;for(let bl=0;bl<=Jt;bl++){const Bt=Math.round(Tl+bl*Yt),rl=Kt+bl*$t;for(let hl=tl;hl<=Bt;hl++)Lt[hl]=rl;tl=Bt+1}for(let bl=tl;bl<256;bl++)Lt[bl]=Lt[tl-1];return Lt.join(",")},ot=`g_${t(this,f)}_hcm_highlight_filter`,ut=Zl(this,g,A(this,K,u).call(this,ot));return A(this,C,U).call(this,ut),A(this,$,P).call(this,Qt(Ll[0],yl[0],5),Qt(Ll[1],yl[1],5),Qt(Ll[2],yl[2],5),ut),Zl(this,v,`url(#${ot})`),t(this,v)}destroy(){arguments.length>0&&arguments[0]!==void 0&&arguments[0]&&(t(this,L)||t(this,v))||(t(this,p)&&(t(this,p).parentNode.parentNode.remove(),Zl(this,p,null)),t(this,M)&&(t(this,M).clear(),Zl(this,M,null)),Zl(this,Q,0))}}M=new WeakMap,p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakMap,F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakSet,j=function(){return t(this,M)||Zl(this,M,new Map)},I=new WeakSet,k=function(){if(!t(this,p)){const Ft=t(this,B).createElement("div"),{style:wt}=Ft;wt.visibility="hidden",wt.contain="strict",wt.width=wt.height=0,wt.position="absolute",wt.top=wt.left=0,wt.zIndex=-1;const pt=t(this,B).createElementNS(it,"svg");pt.setAttribute("width",0),pt.setAttribute("height",0),Zl(this,p,t(this,B).createElementNS(it,"defs")),Ft.append(pt),pt.append(t(this,p)),t(this,B).body.append(Ft)}return t(this,p)},C=new WeakSet,U=function(Ft){const wt=t(this,B).createElementNS(it,"feColorMatrix");wt.setAttribute("type","matrix"),wt.setAttribute("values","0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"),Ft.append(wt)},K=new WeakSet,u=function(Ft){const wt=t(this,B).createElementNS(it,"filter");return wt.setAttribute("color-interpolation-filters","sRGB"),wt.setAttribute("id",Ft),t(this,I,k).append(wt),wt},m=new WeakSet,_=function(Ft,wt,pt){const Ct=t(this,B).createElementNS(it,wt);Ct.setAttribute("type","discrete"),Ct.setAttribute("tableValues",pt),Ft.append(Ct)},$=new WeakSet,P=function(Ft,wt,pt,Ct){const el=t(this,B).createElementNS(it,"feComponentTransfer");Ct.append(el),A(this,m,_).call(this,el,"feFuncR",Ft),A(this,m,_).call(this,el,"feFuncG",wt),A(this,m,_).call(this,el,"feFuncB",pt)},Zt=new WeakSet,dt=function(Ft){return t(this,I,k).style.color=Ft,vt(getComputedStyle(t(this,I,k)).getPropertyValue("color"))},r.DOMFilterFactory=Gt;class Xt extends It.BaseCanvasFactory{constructor(){let{ownerDocument:wt=globalThis.document}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};super(),this._document=wt}_createCanvas(wt,pt){const Ct=this._document.createElement("canvas");return Ct.width=wt,Ct.height=pt,Ct}}r.DOMCanvasFactory=Xt;function Ut(wt){return Sl(this,arguments,function*(Ft){let pt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(lt(Ft,document.baseURI)){const Ct=yield fetch(Ft);if(!Ct.ok)throw new Error(Ct.statusText);return pt?new Uint8Array(yield Ct.arrayBuffer()):(0,xt.stringToBytes)(yield Ct.text())}return new Promise((Ct,el)=>{const cl=new XMLHttpRequest;cl.open("GET",Ft,!0),pt&&(cl.responseType="arraybuffer"),cl.onreadystatechange=()=>{if(cl.readyState===XMLHttpRequest.DONE){if(cl.status===200||cl.status===0){let Ml;if(pt&&cl.response?Ml=new Uint8Array(cl.response):!pt&&cl.responseText&&(Ml=(0,xt.stringToBytes)(cl.responseText)),Ml){Ct(Ml);return}}el(new Error(cl.statusText))}},cl.send(null)})})}class Vt extends It.BaseCMapReaderFactory{_fetchData(wt,pt){return Ut(wt,this.isCompressed).then(Ct=>({cMapData:Ct,compressionType:pt}))}}r.DOMCMapReaderFactory=Vt;class Ht extends It.BaseStandardFontDataFactory{_fetchData(wt){return Ut(wt,!0)}}r.DOMStandardFontDataFactory=Ht;class Pt extends It.BaseSVGFactory{_createSVG(wt){return document.createElementNS(it,wt)}}r.DOMSVGFactory=Pt;class at{constructor(wt){let{viewBox:pt,scale:Ct,rotation:el,offsetX:cl=0,offsetY:Ml=0,dontFlip:Yl=!1}=wt;this.viewBox=pt,this.scale=Ct,this.rotation=el,this.offsetX=cl,this.offsetY=Ml;const Xl=(pt[2]+pt[0])/2,Tl=(pt[3]+pt[1])/2;let Vl,Ll,yl,Qt;switch(el%=360,el<0&&(el+=360),el){case 180:Vl=-1,Ll=0,yl=0,Qt=1;break;case 90:Vl=0,Ll=1,yl=1,Qt=0;break;case 270:Vl=0,Ll=-1,yl=-1,Qt=0;break;case 0:Vl=1,Ll=0,yl=0,Qt=-1;break;default:throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.")}Yl&&(yl=-yl,Qt=-Qt);let ot,ut,Tt,jt;Vl===0?(ot=Math.abs(Tl-pt[1])*Ct+cl,ut=Math.abs(Xl-pt[0])*Ct+Ml,Tt=(pt[3]-pt[1])*Ct,jt=(pt[2]-pt[0])*Ct):(ot=Math.abs(Xl-pt[0])*Ct+cl,ut=Math.abs(Tl-pt[1])*Ct+Ml,Tt=(pt[2]-pt[0])*Ct,jt=(pt[3]-pt[1])*Ct),this.transform=[Vl*Ct,Ll*Ct,yl*Ct,Qt*Ct,ot-Vl*Ct*Xl-yl*Ct*Tl,ut-Ll*Ct*Xl-Qt*Ct*Tl],this.width=Tt,this.height=jt}get rawDims(){const{viewBox:wt}=this;return(0,xt.shadow)(this,"rawDims",{pageWidth:wt[2]-wt[0],pageHeight:wt[3]-wt[1],pageX:wt[0],pageY:wt[1]})}clone(){let{scale:wt=this.scale,rotation:pt=this.rotation,offsetX:Ct=this.offsetX,offsetY:el=this.offsetY,dontFlip:cl=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return new at({viewBox:this.viewBox.slice(),scale:wt,rotation:pt,offsetX:Ct,offsetY:el,dontFlip:cl})}convertToViewportPoint(wt,pt){return xt.Util.applyTransform([wt,pt],this.transform)}convertToViewportRectangle(wt){const pt=xt.Util.applyTransform([wt[0],wt[1]],this.transform),Ct=xt.Util.applyTransform([wt[2],wt[3]],this.transform);return[pt[0],pt[1],Ct[0],Ct[1]]}convertToPdfPoint(wt,pt){return xt.Util.applyInverseTransform([wt,pt],this.transform)}}r.PageViewport=at;class S extends xt.BaseException{constructor(wt){let pt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;super(wt,"RenderingCancelledException"),this.extraDelay=pt}}r.RenderingCancelledException=S;function w(Ft){const wt=Ft.length;let pt=0;for(;pt<wt&&Ft[pt].trim()==="";)pt++;return Ft.substring(pt,pt+5).toLowerCase()==="data:"}function X(Ft){return typeof Ft=="string"&&/\.pdf$/i.test(Ft)}function J(Ft){return arguments.length>1&&arguments[1]!==void 0&&arguments[1]||([Ft]=Ft.split(/[#?]/,1)),Ft.substring(Ft.lastIndexOf("/")+1)}function H(Ft){let wt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"document.pdf";if(typeof Ft!="string")return wt;if(w(Ft))return(0,xt.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'),wt;const pt=/^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/,Ct=/[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i,el=pt.exec(Ft);let cl=Ct.exec(el[1])||Ct.exec(el[2])||Ct.exec(el[3]);if(cl&&(cl=cl[0],cl.includes("%")))try{cl=Ct.exec(decodeURIComponent(cl))[0]}catch(Ml){}return cl||wt}class et{constructor(){tt(this,"started",Object.create(null)),tt(this,"times",[])}time(wt){wt in this.started&&(0,xt.warn)(`Timer is already running for ${wt}`),this.started[wt]=Date.now()}timeEnd(wt){wt in this.started||(0,xt.warn)(`Timer has not been started for ${wt}`),this.times.push({name:wt,start:this.started[wt],end:Date.now()}),delete this.started[wt]}toString(){const wt=[];let pt=0;for(const{name:Ct}of this.times)pt=Math.max(Ct.length,pt);for(const{name:Ct,start:el,end:cl}of this.times)wt.push(`${Ct.padEnd(pt)} ${cl-el}ms
|
||
`);return wt.join("")}}r.StatTimer=et;function lt(Ft,wt){try{const{protocol:pt}=wt?new URL(Ft,wt):new URL(Ft);return pt==="http:"||pt==="https:"}catch(pt){return!1}}function Mt(Ft){Ft.preventDefault()}function Rt(Ft){let wt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return new Promise((pt,Ct)=>{const el=document.createElement("script");el.src=Ft,el.onload=function(cl){wt&&el.remove(),pt(cl)},el.onerror=function(){Ct(new Error(`Cannot load script at: ${el.src}`))},(document.head||document.documentElement).append(el)})}function gt(Ft){console.log("Deprecated API usage: "+Ft)}let Ot;class Dt{static toDateObject(wt){if(!wt||typeof wt!="string")return null;Ot||(Ot=new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));const pt=Ot.exec(wt);if(!pt)return null;const Ct=parseInt(pt[1],10);let el=parseInt(pt[2],10);el=el>=1&&el<=12?el-1:0;let cl=parseInt(pt[3],10);cl=cl>=1&&cl<=31?cl:1;let Ml=parseInt(pt[4],10);Ml=Ml>=0&&Ml<=23?Ml:0;let Yl=parseInt(pt[5],10);Yl=Yl>=0&&Yl<=59?Yl:0;let Xl=parseInt(pt[6],10);Xl=Xl>=0&&Xl<=59?Xl:0;const Tl=pt[7]||"Z";let Vl=parseInt(pt[8],10);Vl=Vl>=0&&Vl<=23?Vl:0;let Ll=parseInt(pt[9],10)||0;return Ll=Ll>=0&&Ll<=59?Ll:0,Tl==="-"?(Ml+=Vl,Yl+=Ll):Tl==="+"&&(Ml-=Vl,Yl-=Ll),new Date(Date.UTC(Ct,el,cl,Ml,Yl,Xl))}}r.PDFDateString=Dt;function qt(Ft,wt){let{scale:pt=1,rotation:Ct=0}=wt;const{width:el,height:cl}=Ft.attributes.style,Ml=[0,0,parseInt(el),parseInt(cl)];return new at({viewBox:Ml,scale:pt,rotation:Ct})}function vt(Ft){if(Ft.startsWith("#")){const wt=parseInt(Ft.slice(1),16);return[(wt&16711680)>>16,(wt&65280)>>8,wt&255]}return Ft.startsWith("rgb(")?Ft.slice(4,-1).split(",").map(wt=>parseInt(wt)):Ft.startsWith("rgba(")?Ft.slice(5,-1).split(",").map(wt=>parseInt(wt)).slice(0,3):((0,xt.warn)(`Not a valid color format: "${Ft}"`),[0,0,0])}function dl(Ft){const wt=document.createElement("span");wt.style.visibility="hidden",document.body.append(wt);for(const pt of Ft.keys()){wt.style.color=pt;const Ct=window.getComputedStyle(wt).color;Ft.set(pt,vt(Ct))}wt.remove()}function ol(Ft){const{a:wt,b:pt,c:Ct,d:el,e:cl,f:Ml}=Ft.getTransform();return[wt,pt,Ct,el,cl,Ml]}function il(Ft){const{a:wt,b:pt,c:Ct,d:el,e:cl,f:Ml}=Ft.getTransform().invertSelf();return[wt,pt,Ct,el,cl,Ml]}function _t(Ft,wt){let pt=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,Ct=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0;if(wt instanceof at){const{pageWidth:el,pageHeight:cl}=wt.rawDims,{style:Ml}=Ft,Yl=xt.FeatureTest.isCSSRoundSupported,Xl=`var(--scale-factor) * ${el}px`,Tl=`var(--scale-factor) * ${cl}px`,Vl=Yl?`round(${Xl}, 1px)`:`calc(${Xl})`,Ll=Yl?`round(${Tl}, 1px)`:`calc(${Tl})`;!pt||wt.rotation%180===0?(Ml.width=Vl,Ml.height=Ll):(Ml.width=Ll,Ml.height=Vl)}Ct&&Ft.setAttribute("data-main-rotation",wt.rotation)}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.BaseStandardFontDataFactory=r.BaseSVGFactory=r.BaseFilterFactory=r.BaseCanvasFactory=r.BaseCMapReaderFactory=void 0,h(2);var M=h(1);class p{constructor(){this.constructor===p&&(0,M.unreachable)("Cannot initialize BaseFilterFactory.")}addFilter(g){return"none"}addHCMFilter(g,q){return"none"}addHighlightHCMFilter(g,q,v,Q){return"none"}destroy(){}}r.BaseFilterFactory=p;class f{constructor(){this.constructor===f&&(0,M.unreachable)("Cannot initialize BaseCanvasFactory.")}create(g,q){if(g<=0||q<=0)throw new Error("Invalid canvas size");const v=this._createCanvas(g,q);return{canvas:v,context:v.getContext("2d")}}reset(g,q,v){if(!g.canvas)throw new Error("Canvas is not specified");if(q<=0||v<=0)throw new Error("Invalid canvas size");g.canvas.width=q,g.canvas.height=v}destroy(g){if(!g.canvas)throw new Error("Canvas is not specified");g.canvas.width=0,g.canvas.height=0,g.canvas=null,g.context=null}_createCanvas(g,q){(0,M.unreachable)("Abstract method `_createCanvas` called.")}}r.BaseCanvasFactory=f;class B{constructor(g){let{baseUrl:q=null,isCompressed:v=!0}=g;this.constructor===B&&(0,M.unreachable)("Cannot initialize BaseCMapReaderFactory."),this.baseUrl=q,this.isCompressed=v}fetch(g){return Sl(this,null,function*(){let{name:q}=g;if(!this.baseUrl)throw new Error('The CMap "baseUrl" parameter must be specified, ensure that the "cMapUrl" and "cMapPacked" API parameters are provided.');if(!q)throw new Error("CMap name must be specified.");const v=this.baseUrl+q+(this.isCompressed?".bcmap":""),Q=this.isCompressed?M.CMapCompressionType.BINARY:M.CMapCompressionType.NONE;return this._fetchData(v,Q).catch(R=>{throw new Error(`Unable to load ${this.isCompressed?"binary ":""}CMap at: ${v}`)})})}_fetchData(g,q){(0,M.unreachable)("Abstract method `_fetchData` called.")}}r.BaseCMapReaderFactory=B;class O{constructor(g){let{baseUrl:q=null}=g;this.constructor===O&&(0,M.unreachable)("Cannot initialize BaseStandardFontDataFactory."),this.baseUrl=q}fetch(g){return Sl(this,null,function*(){let{filename:q}=g;if(!this.baseUrl)throw new Error('The standard font "baseUrl" parameter must be specified, ensure that the "standardFontDataUrl" API parameter is provided.');if(!q)throw new Error("Font filename must be specified.");const v=`${this.baseUrl}${q}`;return this._fetchData(v).catch(Q=>{throw new Error(`Unable to load font data at: ${v}`)})})}_fetchData(g){(0,M.unreachable)("Abstract method `_fetchData` called.")}}r.BaseStandardFontDataFactory=O;class F{constructor(){this.constructor===F&&(0,M.unreachable)("Cannot initialize BaseSVGFactory.")}create(g,q){let v=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(g<=0||q<=0)throw new Error("Invalid SVG dimensions");const Q=this._createSVG("svg:svg");return Q.setAttribute("version","1.1"),v||(Q.setAttribute("width",`${g}px`),Q.setAttribute("height",`${q}px`)),Q.setAttribute("preserveAspectRatio","none"),Q.setAttribute("viewBox",`0 0 ${g} ${q}`),Q}createElement(g){if(typeof g!="string")throw new Error("Invalid SVG element type");return this._createSVG(g)}_createSVG(g){(0,M.unreachable)("Abstract method `_createSVG` called.")}}r.BaseSVGFactory=F},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.MurmurHash3_64=void 0,h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123),h(2);var M=h(1);const p=3285377520,f=4294901760,B=65535;class O{constructor(L){this.h1=L?L&4294967295:p,this.h2=L?L&4294967295:p}update(L){let g,q;if(typeof L=="string"){g=new Uint8Array(L.length*2),q=0;for(let _=0,$=L.length;_<$;_++){const P=L.charCodeAt(_);P<=255?g[q++]=P:(g[q++]=P>>>8,g[q++]=P&255)}}else if((0,M.isArrayBuffer)(L))g=L.slice(),q=g.byteLength;else throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");const v=q>>2,Q=q-v*4,R=new Uint32Array(g.buffer,0,v);let j=0,I=0,k=this.h1,C=this.h2;const U=3432918353,K=461845907,u=U&B,m=K&B;for(let _=0;_<v;_++)_&1?(j=R[_],j=j*U&f|j*u&B,j=j<<15|j>>>17,j=j*K&f|j*m&B,k^=j,k=k<<13|k>>>19,k=k*5+3864292196):(I=R[_],I=I*U&f|I*u&B,I=I<<15|I>>>17,I=I*K&f|I*m&B,C^=I,C=C<<13|C>>>19,C=C*5+3864292196);switch(j=0,Q){case 3:j^=g[v*4+2]<<16;case 2:j^=g[v*4+1]<<8;case 1:j^=g[v*4],j=j*U&f|j*u&B,j=j<<15|j>>>17,j=j*K&f|j*m&B,v&1?k^=j:C^=j}this.h1=k,this.h2=C}hexdigest(){let L=this.h1,g=this.h2;return L^=g>>>1,L=L*3981806797&f|L*36045&B,g=g*4283543511&f|((g<<16|L>>>16)*2950163797&f)>>>16,L^=g>>>1,L=L*444984403&f|L*60499&B,g=g*3301882366&f|((g<<16|L>>>16)*3120437893&f)>>>16,L^=g>>>1,(L>>>0).toString(16).padStart(8,"0")+(g>>>0).toString(16).padStart(8,"0")}}r.MurmurHash3_64=O},(st,r,h)=>{var M;Object.defineProperty(r,"__esModule",{value:!0}),r.FontLoader=r.FontFaceObject=void 0,h(125),h(136),h(138),h(141),h(143),h(145),h(147),h(89),h(149);var p=h(1);class f{constructor(F){E(this,M,new Set);let{ownerDocument:L=globalThis.document,styleElement:g=null}=F;this._document=L,this.nativeFontFaces=new Set,this.styleElement=null,this.loadingRequests=[],this.loadTestFontId=0}addNativeFontFace(F){this.nativeFontFaces.add(F),this._document.fonts.add(F)}removeNativeFontFace(F){this.nativeFontFaces.delete(F),this._document.fonts.delete(F)}insertRule(F){this.styleElement||(this.styleElement=this._document.createElement("style"),this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));const L=this.styleElement.sheet;L.insertRule(F,L.cssRules.length)}clear(){for(const F of this.nativeFontFaces)this._document.fonts.delete(F);this.nativeFontFaces.clear(),t(this,M).clear(),this.styleElement&&(this.styleElement.remove(),this.styleElement=null)}loadSystemFont(F){return Sl(this,null,function*(){if(!(!F||t(this,M).has(F.loadedName))){if((0,p.assert)(!this.disableFontFace,"loadSystemFont shouldn't be called when `disableFontFace` is set."),this.isFontLoadingAPISupported){const{loadedName:L,src:g,style:q}=F,v=new FontFace(L,g,q);this.addNativeFontFace(v);try{yield v.load(),t(this,M).add(L)}catch(Q){(0,p.warn)(`Cannot load system font: ${F.baseFontName}, installing it could help to improve PDF rendering.`),this.removeNativeFontFace(v)}return}(0,p.unreachable)("Not implemented: loadSystemFont without the Font Loading API.")}})}bind(F){return Sl(this,null,function*(){if(F.attached||F.missingFile&&!F.systemFontInfo)return;if(F.attached=!0,F.systemFontInfo){yield this.loadSystemFont(F.systemFontInfo);return}if(this.isFontLoadingAPISupported){const g=F.createNativeFontFace();if(g){this.addNativeFontFace(g);try{yield g.loaded}catch(q){throw(0,p.warn)(`Failed to load font '${g.family}': '${q}'.`),F.disableFontFace=!0,q}}return}const L=F.createFontFaceRule();if(L){if(this.insertRule(L),this.isSyncFontLoadingSupported)return;yield new Promise(g=>{const q=this._queueLoadingCallback(g);this._prepareFontLoadEvent(F,q)})}})}get isFontLoadingAPISupported(){var F;const L=!!((F=this._document)!=null&&F.fonts);return(0,p.shadow)(this,"isFontLoadingAPISupported",L)}get isSyncFontLoadingSupported(){let F=!1;return(p.isNodeJS||typeof navigator<"u"&&/Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent))&&(F=!0),(0,p.shadow)(this,"isSyncFontLoadingSupported",F)}_queueLoadingCallback(F){function L(){for((0,p.assert)(!q.done,"completeRequest() cannot be called twice."),q.done=!0;g.length>0&&g[0].done;){const v=g.shift();setTimeout(v.callback,0)}}const{loadingRequests:g}=this,q={done:!1,complete:L,callback:F};return g.push(q),q}get _loadTestFont(){const F=atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");return(0,p.shadow)(this,"_loadTestFont",F)}_prepareFontLoadEvent(F,L){function g(Zt,dt){return Zt.charCodeAt(dt)<<24|Zt.charCodeAt(dt+1)<<16|Zt.charCodeAt(dt+2)<<8|Zt.charCodeAt(dt+3)&255}function q(Zt,dt,It,xt){const it=Zt.substring(0,dt),Nt=Zt.substring(dt+It);return it+xt+Nt}let v,Q;const R=this._document.createElement("canvas");R.width=1,R.height=1;const j=R.getContext("2d");let I=0;function k(Zt,dt){if(++I>30){(0,p.warn)("Load test font never loaded."),dt();return}if(j.font="30px "+Zt,j.fillText(".",0,20),j.getImageData(0,0,1,1).data[3]>0){dt();return}setTimeout(k.bind(null,Zt,dt))}const C=`lt${Date.now()}${this.loadTestFontId++}`;let U=this._loadTestFont;U=q(U,976,C.length,C);const K=16,u=1482184792;let m=g(U,K);for(v=0,Q=C.length-3;v<Q;v+=4)m=m-u+g(C,v)|0;v<C.length&&(m=m-u+g(C+"XXX",v)|0),U=q(U,K,4,(0,p.string32)(m));const _=`url(data:font/opentype;base64,${btoa(U)});`,$=`@font-face {font-family:"${C}";src:${_}}`;this.insertRule($);const P=this._document.createElement("div");P.style.visibility="hidden",P.style.width=P.style.height="10px",P.style.position="absolute",P.style.top=P.style.left="0px";for(const Zt of[F.loadedName,C]){const dt=this._document.createElement("span");dt.textContent="Hi",dt.style.fontFamily=Zt,P.append(dt)}this._document.body.append(P),k(C,()=>{P.remove(),L.complete()})}}M=new WeakMap,r.FontLoader=f;class B{constructor(F,L){let{isEvalSupported:g=!0,disableFontFace:q=!1,ignoreErrors:v=!1,inspectFont:Q=null}=L;this.compiledGlyphs=Object.create(null);for(const R in F)this[R]=F[R];this.isEvalSupported=g!==!1,this.disableFontFace=q===!0,this.ignoreErrors=v===!0,this._inspectFont=Q}createNativeFontFace(){var F;if(!this.data||this.disableFontFace)return null;let L;if(!this.cssFontInfo)L=new FontFace(this.loadedName,this.data,{});else{const g={weight:this.cssFontInfo.fontWeight};this.cssFontInfo.italicAngle&&(g.style=`oblique ${this.cssFontInfo.italicAngle}deg`),L=new FontFace(this.cssFontInfo.fontFamily,this.data,g)}return(F=this._inspectFont)==null||F.call(this,this),L}createFontFaceRule(){var F;if(!this.data||this.disableFontFace)return null;const L=(0,p.bytesToString)(this.data),g=`url(data:${this.mimetype};base64,${btoa(L)});`;let q;if(!this.cssFontInfo)q=`@font-face {font-family:"${this.loadedName}";src:${g}}`;else{let v=`font-weight: ${this.cssFontInfo.fontWeight};`;this.cssFontInfo.italicAngle&&(v+=`font-style: oblique ${this.cssFontInfo.italicAngle}deg;`),q=`@font-face {font-family:"${this.cssFontInfo.fontFamily}";${v}src:${g}}`}return(F=this._inspectFont)==null||F.call(this,this,g),q}getPathGenerator(F,L){if(this.compiledGlyphs[L]!==void 0)return this.compiledGlyphs[L];let g;try{g=F.get(this.loadedName+"_path_"+L)}catch(q){if(!this.ignoreErrors)throw q;return(0,p.warn)(`getPathGenerator - ignoring character: "${q}".`),this.compiledGlyphs[L]=function(v,Q){}}if(this.isEvalSupported&&p.FeatureTest.isEvalSupported){const q=[];for(const v of g){const Q=v.args!==void 0?v.args.join(","):"";q.push("c.",v.cmd,"(",Q,`);
|
||
`)}return this.compiledGlyphs[L]=new Function("c","size",q.join(""))}return this.compiledGlyphs[L]=function(q,v){for(const Q of g)Q.cmd==="scale"&&(Q.args=[v,-v]),q[Q.cmd].apply(q,Q.args)}}}r.FontFaceObject=B},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.NodeStandardFontDataFactory=r.NodeFilterFactory=r.NodeCanvasFactory=r.NodeCMapReaderFactory=void 0,h(2),h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123);var M=h(169),p=h(1);(function(){if(!(globalThis.DOMMatrix||!p.isNodeJS))try{globalThis.DOMMatrix=require$$6.DOMMatrix}catch(g){(0,p.warn)(`Cannot polyfill \`DOMMatrix\`, rendering may be broken: "${g}".`)}})(),function(){if(!(globalThis.Path2D||!p.isNodeJS))try{const{CanvasRenderingContext2D:g}=require$$6,{polyfillPath2D:q}=requirePath2dPolyfill_esm();globalThis.CanvasRenderingContext2D=g,q(globalThis)}catch(g){(0,p.warn)(`Cannot polyfill \`Path2D\`, rendering may be broken: "${g}".`)}}();const f=function(g){return new Promise((q,v)=>{require$$6.readFile(g,(Q,R)=>{if(Q||!R){v(new Error(Q));return}q(new Uint8Array(R))})})};class B extends M.BaseFilterFactory{}r.NodeFilterFactory=B;class O extends M.BaseCanvasFactory{_createCanvas(q,v){return require$$6.createCanvas(q,v)}}r.NodeCanvasFactory=O;class F extends M.BaseCMapReaderFactory{_fetchData(q,v){return f(q).then(Q=>({cMapData:Q,compressionType:v}))}}r.NodeCMapReaderFactory=F;class L extends M.BaseStandardFontDataFactory{_fetchData(q){return f(q)}}r.NodeStandardFontDataFactory=L},(st,r,h)=>{var M,p,f,B;Object.defineProperty(r,"__esModule",{value:!0}),r.CanvasGraphics=void 0,h(2),h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123),h(89);var O=h(1),F=h(168),L=h(174),g=h(175);const q=16,v=100,Q=4096,R=15,j=10,I=1e3,k=16;function C(at,S){if(at._removeMirroring)throw new Error("Context is already forwarding operations.");at.__originalSave=at.save,at.__originalRestore=at.restore,at.__originalRotate=at.rotate,at.__originalScale=at.scale,at.__originalTranslate=at.translate,at.__originalTransform=at.transform,at.__originalSetTransform=at.setTransform,at.__originalResetTransform=at.resetTransform,at.__originalClip=at.clip,at.__originalMoveTo=at.moveTo,at.__originalLineTo=at.lineTo,at.__originalBezierCurveTo=at.bezierCurveTo,at.__originalRect=at.rect,at.__originalClosePath=at.closePath,at.__originalBeginPath=at.beginPath,at._removeMirroring=()=>{at.save=at.__originalSave,at.restore=at.__originalRestore,at.rotate=at.__originalRotate,at.scale=at.__originalScale,at.translate=at.__originalTranslate,at.transform=at.__originalTransform,at.setTransform=at.__originalSetTransform,at.resetTransform=at.__originalResetTransform,at.clip=at.__originalClip,at.moveTo=at.__originalMoveTo,at.lineTo=at.__originalLineTo,at.bezierCurveTo=at.__originalBezierCurveTo,at.rect=at.__originalRect,at.closePath=at.__originalClosePath,at.beginPath=at.__originalBeginPath,delete at._removeMirroring},at.save=function(){S.save(),this.__originalSave()},at.restore=function(){S.restore(),this.__originalRestore()},at.translate=function(w,X){S.translate(w,X),this.__originalTranslate(w,X)},at.scale=function(w,X){S.scale(w,X),this.__originalScale(w,X)},at.transform=function(w,X,J,H,et,lt){S.transform(w,X,J,H,et,lt),this.__originalTransform(w,X,J,H,et,lt)},at.setTransform=function(w,X,J,H,et,lt){S.setTransform(w,X,J,H,et,lt),this.__originalSetTransform(w,X,J,H,et,lt)},at.resetTransform=function(){S.resetTransform(),this.__originalResetTransform()},at.rotate=function(w){S.rotate(w),this.__originalRotate(w)},at.clip=function(w){S.clip(w),this.__originalClip(w)},at.moveTo=function(w,X){S.moveTo(w,X),this.__originalMoveTo(w,X)},at.lineTo=function(w,X){S.lineTo(w,X),this.__originalLineTo(w,X)},at.bezierCurveTo=function(w,X,J,H,et,lt){S.bezierCurveTo(w,X,J,H,et,lt),this.__originalBezierCurveTo(w,X,J,H,et,lt)},at.rect=function(w,X,J,H){S.rect(w,X,J,H),this.__originalRect(w,X,J,H)},at.closePath=function(){S.closePath(),this.__originalClosePath()},at.beginPath=function(){S.beginPath(),this.__originalBeginPath()}}class U{constructor(S){this.canvasFactory=S,this.cache=Object.create(null)}getCanvas(S,w,X){let J;return this.cache[S]!==void 0?(J=this.cache[S],this.canvasFactory.reset(J,w,X)):(J=this.canvasFactory.create(w,X),this.cache[S]=J),J}delete(S){delete this.cache[S]}clear(){for(const S in this.cache){const w=this.cache[S];this.canvasFactory.destroy(w),delete this.cache[S]}}}function K(at,S,w,X,J,H,et,lt,Mt,Rt){const[gt,Ot,Dt,qt,vt,dl]=(0,F.getCurrentTransform)(at);if(Ot===0&&Dt===0){const _t=et*gt+vt,Ft=Math.round(_t),wt=lt*qt+dl,pt=Math.round(wt),Ct=(et+Mt)*gt+vt,el=Math.abs(Math.round(Ct)-Ft)||1,cl=(lt+Rt)*qt+dl,Ml=Math.abs(Math.round(cl)-pt)||1;return at.setTransform(Math.sign(gt),0,0,Math.sign(qt),Ft,pt),at.drawImage(S,w,X,J,H,0,0,el,Ml),at.setTransform(gt,Ot,Dt,qt,vt,dl),[el,Ml]}if(gt===0&&qt===0){const _t=lt*Dt+vt,Ft=Math.round(_t),wt=et*Ot+dl,pt=Math.round(wt),Ct=(lt+Rt)*Dt+vt,el=Math.abs(Math.round(Ct)-Ft)||1,cl=(et+Mt)*Ot+dl,Ml=Math.abs(Math.round(cl)-pt)||1;return at.setTransform(0,Math.sign(Ot),Math.sign(Dt),0,Ft,pt),at.drawImage(S,w,X,J,H,0,0,Ml,el),at.setTransform(gt,Ot,Dt,qt,vt,dl),[Ml,el]}at.drawImage(S,w,X,J,H,et,lt,Mt,Rt);const ol=Math.hypot(gt,Ot),il=Math.hypot(Dt,qt);return[ol*Mt,il*Rt]}function u(at){const{width:S,height:w}=at;if(S>I||w>I)return null;const X=1e3,J=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),H=S+1;let et=new Uint8Array(H*(w+1)),lt,Mt,Rt;const gt=S+7&-8;let Ot=new Uint8Array(gt*w),Dt=0;for(const ol of at.data){let il=128;for(;il>0;)Ot[Dt++]=ol&il?0:255,il>>=1}let qt=0;for(Dt=0,Ot[Dt]!==0&&(et[0]=1,++qt),Mt=1;Mt<S;Mt++)Ot[Dt]!==Ot[Dt+1]&&(et[Mt]=Ot[Dt]?2:1,++qt),Dt++;for(Ot[Dt]!==0&&(et[Mt]=2,++qt),lt=1;lt<w;lt++){Dt=lt*gt,Rt=lt*H,Ot[Dt-gt]!==Ot[Dt]&&(et[Rt]=Ot[Dt]?1:8,++qt);let ol=(Ot[Dt]?4:0)+(Ot[Dt-gt]?8:0);for(Mt=1;Mt<S;Mt++)ol=(ol>>2)+(Ot[Dt+1]?4:0)+(Ot[Dt-gt+1]?8:0),J[ol]&&(et[Rt+Mt]=J[ol],++qt),Dt++;if(Ot[Dt-gt]!==Ot[Dt]&&(et[Rt+Mt]=Ot[Dt]?2:4,++qt),qt>X)return null}for(Dt=gt*(w-1),Rt=lt*H,Ot[Dt]!==0&&(et[Rt]=8,++qt),Mt=1;Mt<S;Mt++)Ot[Dt]!==Ot[Dt+1]&&(et[Rt+Mt]=Ot[Dt]?4:8,++qt),Dt++;if(Ot[Dt]!==0&&(et[Rt+Mt]=4,++qt),qt>X)return null;const vt=new Int32Array([0,H,-1,0,-H,0,0,0,1]),dl=new Path2D;for(lt=0;qt&<<=w;lt++){let ol=lt*H;const il=ol+S;for(;ol<il&&!et[ol];)ol++;if(ol===il)continue;dl.moveTo(ol%H,lt);const _t=ol;let Ft=et[ol];do{const wt=vt[Ft];do ol+=wt;while(!et[ol]);const pt=et[ol];pt!==5&&pt!==10?(Ft=pt,et[ol]=0):(Ft=pt&51*Ft>>4,et[ol]&=Ft>>2|Ft<<2),dl.lineTo(ol%H,ol/H|0),et[ol]||--qt}while(_t!==ol);--lt}return Ot=null,et=null,function(ol){ol.save(),ol.scale(1/S,-1/w),ol.translate(0,-w),ol.fill(dl),ol.beginPath(),ol.restore()}}class m{constructor(S,w){this.alphaIsShape=!1,this.fontSize=0,this.fontSizeScale=1,this.textMatrix=O.IDENTITY_MATRIX,this.textMatrixScale=1,this.fontMatrix=O.FONT_IDENTITY_MATRIX,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRenderingMode=O.TextRenderingMode.FILL,this.textRise=0,this.fillColor="#000000",this.strokeColor="#000000",this.patternFill=!1,this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.activeSMask=null,this.transferMaps="none",this.startNewPathAndClipBox([0,0,S,w])}clone(){const S=Object.create(this);return S.clipBox=this.clipBox.slice(),S}setCurrentPoint(S,w){this.x=S,this.y=w}updatePathMinMax(S,w,X){[w,X]=O.Util.applyTransform([w,X],S),this.minX=Math.min(this.minX,w),this.minY=Math.min(this.minY,X),this.maxX=Math.max(this.maxX,w),this.maxY=Math.max(this.maxY,X)}updateRectMinMax(S,w){const X=O.Util.applyTransform(w,S),J=O.Util.applyTransform(w.slice(2),S);this.minX=Math.min(this.minX,X[0],J[0]),this.minY=Math.min(this.minY,X[1],J[1]),this.maxX=Math.max(this.maxX,X[0],J[0]),this.maxY=Math.max(this.maxY,X[1],J[1])}updateScalingPathMinMax(S,w){O.Util.scaleMinMax(S,w),this.minX=Math.min(this.minX,w[0]),this.maxX=Math.max(this.maxX,w[1]),this.minY=Math.min(this.minY,w[2]),this.maxY=Math.max(this.maxY,w[3])}updateCurvePathMinMax(S,w,X,J,H,et,lt,Mt,Rt,gt){const Ot=O.Util.bezierBoundingBox(w,X,J,H,et,lt,Mt,Rt);if(gt){gt[0]=Math.min(gt[0],Ot[0],Ot[2]),gt[1]=Math.max(gt[1],Ot[0],Ot[2]),gt[2]=Math.min(gt[2],Ot[1],Ot[3]),gt[3]=Math.max(gt[3],Ot[1],Ot[3]);return}this.updateRectMinMax(S,Ot)}getPathBoundingBox(){let S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L.PathType.FILL,w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;const X=[this.minX,this.minY,this.maxX,this.maxY];if(S===L.PathType.STROKE){w||(0,O.unreachable)("Stroke bounding box must include transform.");const J=O.Util.singularValueDecompose2dScale(w),H=J[0]*this.lineWidth/2,et=J[1]*this.lineWidth/2;X[0]-=H,X[1]-=et,X[2]+=H,X[3]+=et}return X}updateClipFromPath(){const S=O.Util.intersect(this.clipBox,this.getPathBoundingBox());this.startNewPathAndClipBox(S||[0,0,0,0])}isEmptyClip(){return this.minX===1/0}startNewPathAndClipBox(S){this.clipBox=S,this.minX=1/0,this.minY=1/0,this.maxX=0,this.maxY=0}getClippedPathBoundingBox(){let S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L.PathType.FILL,w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return O.Util.intersect(this.clipBox,this.getPathBoundingBox(S,w))}}function _(at,S){if(typeof ImageData<"u"&&S instanceof ImageData){at.putImageData(S,0,0);return}const w=S.height,X=S.width,J=w%k,H=(w-J)/k,et=J===0?H:H+1,lt=at.createImageData(X,k);let Mt=0,Rt;const gt=S.data,Ot=lt.data;let Dt,qt,vt,dl;if(S.kind===O.ImageKind.GRAYSCALE_1BPP){const ol=gt.byteLength,il=new Uint32Array(Ot.buffer,0,Ot.byteLength>>2),_t=il.length,Ft=X+7>>3,wt=4294967295,pt=O.FeatureTest.isLittleEndian?4278190080:255;for(Dt=0;Dt<et;Dt++){for(vt=Dt<H?k:J,Rt=0,qt=0;qt<vt;qt++){const Ct=ol-Mt;let el=0;const cl=Ct>Ft?X:Ct*8-7,Ml=cl&-8;let Yl=0,Xl=0;for(;el<Ml;el+=8)Xl=gt[Mt++],il[Rt++]=Xl&128?wt:pt,il[Rt++]=Xl&64?wt:pt,il[Rt++]=Xl&32?wt:pt,il[Rt++]=Xl&16?wt:pt,il[Rt++]=Xl&8?wt:pt,il[Rt++]=Xl&4?wt:pt,il[Rt++]=Xl&2?wt:pt,il[Rt++]=Xl&1?wt:pt;for(;el<cl;el++)Yl===0&&(Xl=gt[Mt++],Yl=128),il[Rt++]=Xl&Yl?wt:pt,Yl>>=1}for(;Rt<_t;)il[Rt++]=0;at.putImageData(lt,0,Dt*k)}}else if(S.kind===O.ImageKind.RGBA_32BPP){for(qt=0,dl=X*k*4,Dt=0;Dt<H;Dt++)Ot.set(gt.subarray(Mt,Mt+dl)),Mt+=dl,at.putImageData(lt,0,qt),qt+=k;Dt<et&&(dl=X*J*4,Ot.set(gt.subarray(Mt,Mt+dl)),at.putImageData(lt,0,qt))}else if(S.kind===O.ImageKind.RGB_24BPP)for(vt=k,dl=X*vt,Dt=0;Dt<et;Dt++){for(Dt>=H&&(vt=J,dl=X*vt),Rt=0,qt=dl;qt--;)Ot[Rt++]=gt[Mt++],Ot[Rt++]=gt[Mt++],Ot[Rt++]=gt[Mt++],Ot[Rt++]=255;at.putImageData(lt,0,Dt*k)}else throw new Error(`bad image kind: ${S.kind}`)}function $(at,S){if(S.bitmap){at.drawImage(S.bitmap,0,0);return}const w=S.height,X=S.width,J=w%k,H=(w-J)/k,et=J===0?H:H+1,lt=at.createImageData(X,k);let Mt=0;const Rt=S.data,gt=lt.data;for(let Ot=0;Ot<et;Ot++){const Dt=Ot<H?k:J;({srcPos:Mt}=(0,g.convertBlackAndWhiteToRGBA)({src:Rt,srcPos:Mt,dest:gt,width:X,height:Dt,nonBlackColor:0})),at.putImageData(lt,0,Ot*k)}}function P(at,S){const w=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font","filter"];for(const X of w)at[X]!==void 0&&(S[X]=at[X]);at.setLineDash!==void 0&&(S.setLineDash(at.getLineDash()),S.lineDashOffset=at.lineDashOffset)}function Zt(at){if(at.strokeStyle=at.fillStyle="#000000",at.fillRule="nonzero",at.globalAlpha=1,at.lineWidth=1,at.lineCap="butt",at.lineJoin="miter",at.miterLimit=10,at.globalCompositeOperation="source-over",at.font="10px sans-serif",at.setLineDash!==void 0&&(at.setLineDash([]),at.lineDashOffset=0),!O.isNodeJS){const{filter:S}=at;S!=="none"&&S!==""&&(at.filter="none")}}function dt(at,S,w,X){const J=at.length;for(let H=3;H<J;H+=4){const et=at[H];if(et===0)at[H-3]=S,at[H-2]=w,at[H-1]=X;else if(et<255){const lt=255-et;at[H-3]=at[H-3]*et+S*lt>>8,at[H-2]=at[H-2]*et+w*lt>>8,at[H-1]=at[H-1]*et+X*lt>>8}}}function It(at,S,w){const X=at.length,J=1/255;for(let H=3;H<X;H+=4){const et=w?w[at[H]]:at[H];S[H]=S[H]*et*J|0}}function xt(at,S,w){const X=at.length;for(let J=3;J<X;J+=4){const H=at[J-3]*77+at[J-2]*152+at[J-1]*28;S[J]=w?S[J]*w[H>>8]>>8:S[J]*H>>16}}function it(at,S,w,X,J,H,et,lt,Mt,Rt,gt){const Ot=!!H,Dt=Ot?H[0]:0,qt=Ot?H[1]:0,vt=Ot?H[2]:0,dl=J==="Luminosity"?xt:It,ol=Math.min(X,Math.ceil(1048576/w));for(let il=0;il<X;il+=ol){const _t=Math.min(ol,X-il),Ft=at.getImageData(lt-Rt,il+(Mt-gt),w,_t),wt=S.getImageData(lt,il+Mt,w,_t);Ot&&dt(Ft.data,Dt,qt,vt),dl(Ft.data,wt.data,et),S.putImageData(wt,lt,il+Mt)}}function Nt(at,S,w,X){const J=X[0],H=X[1],et=X[2]-J,lt=X[3]-H;et===0||lt===0||(it(S.context,w,et,lt,S.subtype,S.backdrop,S.transferMap,J,H,S.offsetX,S.offsetY),at.save(),at.globalAlpha=1,at.globalCompositeOperation="source-over",at.setTransform(1,0,0,1,0,0),at.drawImage(w.canvas,0,0),at.restore())}function zt(at,S){const w=O.Util.singularValueDecompose2dScale(at);w[0]=Math.fround(w[0]),w[1]=Math.fround(w[1]);const X=Math.fround((globalThis.devicePixelRatio||1)*F.PixelsPerInch.PDF_TO_CSS_UNITS);return S!==void 0?S:w[0]<=X||w[1]<=X}const Gt=["butt","round","square"],Xt=["miter","round","bevel"],Ut={},Vt={},Ht=class Ps{constructor(S,w,X,J,H,et,lt,Mt){E(this,M),E(this,f);let{optionalContentConfig:Rt,markedContentStack:gt=null}=et;this.ctx=S,this.current=new m(this.ctx.canvas.width,this.ctx.canvas.height),this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=w,this.objs=X,this.canvasFactory=J,this.filterFactory=H,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,this.suspendedCtx=null,this.contentVisible=!0,this.markedContentStack=gt||[],this.optionalContentConfig=Rt,this.cachedCanvases=new U(this.canvasFactory),this.cachedPatterns=new Map,this.annotationCanvasMap=lt,this.viewportScale=1,this.outputScaleX=1,this.outputScaleY=1,this.pageColors=Mt,this._cachedScaleForStroking=[-1,0],this._cachedGetSinglePixelWidth=null,this._cachedBitmapsMap=new Map}getObject(S){let w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return typeof S=="string"?S.startsWith("g_")?this.commonObjs.get(S):this.objs.get(S):w}beginDrawing(S){let{transform:w,viewport:X,transparency:J=!1,background:H=null}=S;const et=this.ctx.canvas.width,lt=this.ctx.canvas.height,Mt=this.ctx.fillStyle;if(this.ctx.fillStyle=H||"#ffffff",this.ctx.fillRect(0,0,et,lt),this.ctx.fillStyle=Mt,J){const Rt=this.cachedCanvases.getCanvas("transparent",et,lt);this.compositeCtx=this.ctx,this.transparentCanvas=Rt.canvas,this.ctx=Rt.context,this.ctx.save(),this.ctx.transform(...(0,F.getCurrentTransform)(this.compositeCtx))}this.ctx.save(),Zt(this.ctx),w&&(this.ctx.transform(...w),this.outputScaleX=w[0],this.outputScaleY=w[0]),this.ctx.transform(...X.transform),this.viewportScale=X.scale,this.baseTransform=(0,F.getCurrentTransform)(this.ctx)}executeOperatorList(S,w,X,J){const H=S.argsArray,et=S.fnArray;let lt=w||0;const Mt=H.length;if(Mt===lt)return lt;const Rt=Mt-lt>j&&typeof X=="function",gt=Rt?Date.now()+R:0;let Ot=0;const Dt=this.commonObjs,qt=this.objs;let vt;for(;;){if(J!==void 0&<===J.nextBreakPoint)return J.breakIt(lt,X),lt;if(vt=et[lt],vt!==O.OPS.dependency)this[vt].apply(this,H[lt]);else for(const dl of H[lt]){const ol=dl.startsWith("g_")?Dt:qt;if(!ol.has(dl))return ol.get(dl,X),lt}if(lt++,lt===Mt)return lt;if(Rt&&++Ot>j){if(Date.now()>gt)return X(),lt;Ot=0}}}endDrawing(){A(this,M,p).call(this),this.cachedCanvases.clear(),this.cachedPatterns.clear();for(const S of this._cachedBitmapsMap.values()){for(const w of S.values())typeof HTMLCanvasElement<"u"&&w instanceof HTMLCanvasElement&&(w.width=w.height=0);S.clear()}this._cachedBitmapsMap.clear(),A(this,f,B).call(this)}_scaleImage(S,w){const X=S.width,J=S.height;let H=Math.max(Math.hypot(w[0],w[1]),1),et=Math.max(Math.hypot(w[2],w[3]),1),lt=X,Mt=J,Rt="prescale1",gt,Ot;for(;H>2&<>1||et>2&&Mt>1;){let Dt=lt,qt=Mt;H>2&<>1&&(Dt=lt>=16384?Math.floor(lt/2)-1||1:Math.ceil(lt/2),H/=lt/Dt),et>2&&Mt>1&&(qt=Mt>=16384?Math.floor(Mt/2)-1||1:Math.ceil(Mt)/2,et/=Mt/qt),gt=this.cachedCanvases.getCanvas(Rt,Dt,qt),Ot=gt.context,Ot.clearRect(0,0,Dt,qt),Ot.drawImage(S,0,0,lt,Mt,0,0,Dt,qt),S=gt.canvas,lt=Dt,Mt=qt,Rt=Rt==="prescale1"?"prescale2":"prescale1"}return{img:S,paintWidth:lt,paintHeight:Mt}}_createMaskCanvas(S){const w=this.ctx,{width:X,height:J}=S,H=this.current.fillColor,et=this.current.patternFill,lt=(0,F.getCurrentTransform)(w);let Mt,Rt,gt,Ot;if((S.bitmap||S.data)&&S.count>1){const el=S.bitmap||S.data.buffer;Rt=JSON.stringify(et?lt:[lt.slice(0,4),H]),Mt=this._cachedBitmapsMap.get(el),Mt||(Mt=new Map,this._cachedBitmapsMap.set(el,Mt));const cl=Mt.get(Rt);if(cl&&!et){const Ml=Math.round(Math.min(lt[0],lt[2])+lt[4]),Yl=Math.round(Math.min(lt[1],lt[3])+lt[5]);return{canvas:cl,offsetX:Ml,offsetY:Yl}}gt=cl}gt||(Ot=this.cachedCanvases.getCanvas("maskCanvas",X,J),$(Ot.context,S));let Dt=O.Util.transform(lt,[1/X,0,0,-1/J,0,0]);Dt=O.Util.transform(Dt,[1,0,0,1,0,-J]);const qt=O.Util.applyTransform([0,0],Dt),vt=O.Util.applyTransform([X,J],Dt),dl=O.Util.normalizeRect([qt[0],qt[1],vt[0],vt[1]]),ol=Math.round(dl[2]-dl[0])||1,il=Math.round(dl[3]-dl[1])||1,_t=this.cachedCanvases.getCanvas("fillCanvas",ol,il),Ft=_t.context,wt=Math.min(qt[0],vt[0]),pt=Math.min(qt[1],vt[1]);Ft.translate(-wt,-pt),Ft.transform(...Dt),gt||(gt=this._scaleImage(Ot.canvas,(0,F.getCurrentTransformInverse)(Ft)),gt=gt.img,Mt&&et&&Mt.set(Rt,gt)),Ft.imageSmoothingEnabled=zt((0,F.getCurrentTransform)(Ft),S.interpolate),K(Ft,gt,0,0,gt.width,gt.height,0,0,X,J),Ft.globalCompositeOperation="source-in";const Ct=O.Util.transform((0,F.getCurrentTransformInverse)(Ft),[1,0,0,1,-wt,-pt]);return Ft.fillStyle=et?H.getPattern(w,this,Ct,L.PathType.FILL):H,Ft.fillRect(0,0,X,J),Mt&&!et&&(this.cachedCanvases.delete("fillCanvas"),Mt.set(Rt,_t.canvas)),{canvas:_t.canvas,offsetX:Math.round(wt),offsetY:Math.round(pt)}}setLineWidth(S){S!==this.current.lineWidth&&(this._cachedScaleForStroking[0]=-1),this.current.lineWidth=S,this.ctx.lineWidth=S}setLineCap(S){this.ctx.lineCap=Gt[S]}setLineJoin(S){this.ctx.lineJoin=Xt[S]}setMiterLimit(S){this.ctx.miterLimit=S}setDash(S,w){const X=this.ctx;X.setLineDash!==void 0&&(X.setLineDash(S),X.lineDashOffset=w)}setRenderingIntent(S){}setFlatness(S){}setGState(S){for(const[w,X]of S)switch(w){case"LW":this.setLineWidth(X);break;case"LC":this.setLineCap(X);break;case"LJ":this.setLineJoin(X);break;case"ML":this.setMiterLimit(X);break;case"D":this.setDash(X[0],X[1]);break;case"RI":this.setRenderingIntent(X);break;case"FL":this.setFlatness(X);break;case"Font":this.setFont(X[0],X[1]);break;case"CA":this.current.strokeAlpha=X;break;case"ca":this.current.fillAlpha=X,this.ctx.globalAlpha=X;break;case"BM":this.ctx.globalCompositeOperation=X;break;case"SMask":this.current.activeSMask=X?this.tempSMask:null,this.tempSMask=null,this.checkSMaskState();break;case"TR":this.ctx.filter=this.current.transferMaps=this.filterFactory.addFilter(X);break}}get inSMaskMode(){return!!this.suspendedCtx}checkSMaskState(){const S=this.inSMaskMode;this.current.activeSMask&&!S?this.beginSMaskMode():!this.current.activeSMask&&S&&this.endSMaskMode()}beginSMaskMode(){if(this.inSMaskMode)throw new Error("beginSMaskMode called while already in smask mode");const S=this.ctx.canvas.width,w=this.ctx.canvas.height,X="smaskGroupAt"+this.groupLevel,J=this.cachedCanvases.getCanvas(X,S,w);this.suspendedCtx=this.ctx,this.ctx=J.context;const H=this.ctx;H.setTransform(...(0,F.getCurrentTransform)(this.suspendedCtx)),P(this.suspendedCtx,H),C(H,this.suspendedCtx),this.setGState([["BM","source-over"],["ca",1],["CA",1]])}endSMaskMode(){if(!this.inSMaskMode)throw new Error("endSMaskMode called while not in smask mode");this.ctx._removeMirroring(),P(this.ctx,this.suspendedCtx),this.ctx=this.suspendedCtx,this.suspendedCtx=null}compose(S){if(!this.current.activeSMask)return;S?(S[0]=Math.floor(S[0]),S[1]=Math.floor(S[1]),S[2]=Math.ceil(S[2]),S[3]=Math.ceil(S[3])):S=[0,0,this.ctx.canvas.width,this.ctx.canvas.height];const w=this.current.activeSMask,X=this.suspendedCtx;Nt(X,w,this.ctx,S),this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.clearRect(0,0,this.ctx.canvas.width,this.ctx.canvas.height),this.ctx.restore()}save(){this.inSMaskMode?(P(this.ctx,this.suspendedCtx),this.suspendedCtx.save()):this.ctx.save();const S=this.current;this.stateStack.push(S),this.current=S.clone()}restore(){this.stateStack.length===0&&this.inSMaskMode&&this.endSMaskMode(),this.stateStack.length!==0&&(this.current=this.stateStack.pop(),this.inSMaskMode?(this.suspendedCtx.restore(),P(this.suspendedCtx,this.ctx)):this.ctx.restore(),this.checkSMaskState(),this.pendingClip=null,this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null)}transform(S,w,X,J,H,et){this.ctx.transform(S,w,X,J,H,et),this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null}constructPath(S,w,X){const J=this.ctx,H=this.current;let et=H.x,lt=H.y,Mt,Rt;const gt=(0,F.getCurrentTransform)(J),Ot=gt[0]===0&>[3]===0||gt[1]===0&>[2]===0,Dt=Ot?X.slice(0):null;for(let qt=0,vt=0,dl=S.length;qt<dl;qt++)switch(S[qt]|0){case O.OPS.rectangle:et=w[vt++],lt=w[vt++];const ol=w[vt++],il=w[vt++],_t=et+ol,Ft=lt+il;J.moveTo(et,lt),ol===0||il===0?J.lineTo(_t,Ft):(J.lineTo(_t,lt),J.lineTo(_t,Ft),J.lineTo(et,Ft)),Ot||H.updateRectMinMax(gt,[et,lt,_t,Ft]),J.closePath();break;case O.OPS.moveTo:et=w[vt++],lt=w[vt++],J.moveTo(et,lt),Ot||H.updatePathMinMax(gt,et,lt);break;case O.OPS.lineTo:et=w[vt++],lt=w[vt++],J.lineTo(et,lt),Ot||H.updatePathMinMax(gt,et,lt);break;case O.OPS.curveTo:Mt=et,Rt=lt,et=w[vt+4],lt=w[vt+5],J.bezierCurveTo(w[vt],w[vt+1],w[vt+2],w[vt+3],et,lt),H.updateCurvePathMinMax(gt,Mt,Rt,w[vt],w[vt+1],w[vt+2],w[vt+3],et,lt,Dt),vt+=6;break;case O.OPS.curveTo2:Mt=et,Rt=lt,J.bezierCurveTo(et,lt,w[vt],w[vt+1],w[vt+2],w[vt+3]),H.updateCurvePathMinMax(gt,Mt,Rt,et,lt,w[vt],w[vt+1],w[vt+2],w[vt+3],Dt),et=w[vt+2],lt=w[vt+3],vt+=4;break;case O.OPS.curveTo3:Mt=et,Rt=lt,et=w[vt+2],lt=w[vt+3],J.bezierCurveTo(w[vt],w[vt+1],et,lt,et,lt),H.updateCurvePathMinMax(gt,Mt,Rt,w[vt],w[vt+1],et,lt,et,lt,Dt),vt+=4;break;case O.OPS.closePath:J.closePath();break}Ot&&H.updateScalingPathMinMax(gt,Dt),H.setCurrentPoint(et,lt)}closePath(){this.ctx.closePath()}stroke(){let S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;const w=this.ctx,X=this.current.strokeColor;w.globalAlpha=this.current.strokeAlpha,this.contentVisible&&(typeof X=="object"&&X!=null&&X.getPattern?(w.save(),w.strokeStyle=X.getPattern(w,this,(0,F.getCurrentTransformInverse)(w),L.PathType.STROKE),this.rescaleAndStroke(!1),w.restore()):this.rescaleAndStroke(!0)),S&&this.consumePath(this.current.getClippedPathBoundingBox()),w.globalAlpha=this.current.fillAlpha}closeStroke(){this.closePath(),this.stroke()}fill(){let S=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0;const w=this.ctx,X=this.current.fillColor,J=this.current.patternFill;let H=!1;J&&(w.save(),w.fillStyle=X.getPattern(w,this,(0,F.getCurrentTransformInverse)(w),L.PathType.FILL),H=!0);const et=this.current.getClippedPathBoundingBox();this.contentVisible&&et!==null&&(this.pendingEOFill?(w.fill("evenodd"),this.pendingEOFill=!1):w.fill()),H&&w.restore(),S&&this.consumePath(et)}eoFill(){this.pendingEOFill=!0,this.fill()}fillStroke(){this.fill(!1),this.stroke(!1),this.consumePath()}eoFillStroke(){this.pendingEOFill=!0,this.fillStroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()}endPath(){this.consumePath()}clip(){this.pendingClip=Ut}eoClip(){this.pendingClip=Vt}beginText(){this.current.textMatrix=O.IDENTITY_MATRIX,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}endText(){const S=this.pendingTextPaths,w=this.ctx;if(S===void 0){w.beginPath();return}w.save(),w.beginPath();for(const X of S)w.setTransform(...X.transform),w.translate(X.x,X.y),X.addToPath(w,X.fontSize);w.restore(),w.clip(),w.beginPath(),delete this.pendingTextPaths}setCharSpacing(S){this.current.charSpacing=S}setWordSpacing(S){this.current.wordSpacing=S}setHScale(S){this.current.textHScale=S/100}setLeading(S){this.current.leading=-S}setFont(S,w){var X;const J=this.commonObjs.get(S),H=this.current;if(!J)throw new Error(`Can't find font for ${S}`);if(H.fontMatrix=J.fontMatrix||O.FONT_IDENTITY_MATRIX,(H.fontMatrix[0]===0||H.fontMatrix[3]===0)&&(0,O.warn)("Invalid font matrix for font "+S),w<0?(w=-w,H.fontDirection=-1):H.fontDirection=1,this.current.font=J,this.current.fontSize=w,J.isType3Font)return;const et=J.loadedName||"sans-serif",lt=((X=J.systemFontInfo)==null?void 0:X.css)||`"${et}", ${J.fallbackName}`;let Mt="normal";J.black?Mt="900":J.bold&&(Mt="bold");const Rt=J.italic?"italic":"normal";let gt=w;w<q?gt=q:w>v&&(gt=v),this.current.fontSizeScale=w/gt,this.ctx.font=`${Rt} ${Mt} ${gt}px ${lt}`}setTextRenderingMode(S){this.current.textRenderingMode=S}setTextRise(S){this.current.textRise=S}moveText(S,w){this.current.x=this.current.lineX+=S,this.current.y=this.current.lineY+=w}setLeadingMoveText(S,w){this.setLeading(-w),this.moveText(S,w)}setTextMatrix(S,w,X,J,H,et){this.current.textMatrix=[S,w,X,J,H,et],this.current.textMatrixScale=Math.hypot(S,w),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0}nextLine(){this.moveText(0,this.current.leading)}paintChar(S,w,X,J){const H=this.ctx,et=this.current,lt=et.font,Mt=et.textRenderingMode,Rt=et.fontSize/et.fontSizeScale,gt=Mt&O.TextRenderingMode.FILL_STROKE_MASK,Ot=!!(Mt&O.TextRenderingMode.ADD_TO_PATH_FLAG),Dt=et.patternFill&&!lt.missingFile;let qt;(lt.disableFontFace||Ot||Dt)&&(qt=lt.getPathGenerator(this.commonObjs,S)),lt.disableFontFace||Dt?(H.save(),H.translate(w,X),H.beginPath(),qt(H,Rt),J&&H.setTransform(...J),(gt===O.TextRenderingMode.FILL||gt===O.TextRenderingMode.FILL_STROKE)&&H.fill(),(gt===O.TextRenderingMode.STROKE||gt===O.TextRenderingMode.FILL_STROKE)&&H.stroke(),H.restore()):((gt===O.TextRenderingMode.FILL||gt===O.TextRenderingMode.FILL_STROKE)&&H.fillText(S,w,X),(gt===O.TextRenderingMode.STROKE||gt===O.TextRenderingMode.FILL_STROKE)&&H.strokeText(S,w,X)),Ot&&(this.pendingTextPaths||(this.pendingTextPaths=[])).push({transform:(0,F.getCurrentTransform)(H),x:w,y:X,fontSize:Rt,addToPath:qt})}get isFontSubpixelAAEnabled(){const{context:S}=this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled",10,10);S.scale(1.5,1),S.fillText("I",0,10);const w=S.getImageData(0,0,10,10).data;let X=!1;for(let J=3;J<w.length;J+=4)if(w[J]>0&&w[J]<255){X=!0;break}return(0,O.shadow)(this,"isFontSubpixelAAEnabled",X)}showText(S){const w=this.current,X=w.font;if(X.isType3Font)return this.showType3Text(S);const J=w.fontSize;if(J===0)return;const H=this.ctx,et=w.fontSizeScale,lt=w.charSpacing,Mt=w.wordSpacing,Rt=w.fontDirection,gt=w.textHScale*Rt,Ot=S.length,Dt=X.vertical,qt=Dt?1:-1,vt=X.defaultVMetrics,dl=J*w.fontMatrix[0],ol=w.textRenderingMode===O.TextRenderingMode.FILL&&!X.disableFontFace&&!w.patternFill;H.save(),H.transform(...w.textMatrix),H.translate(w.x,w.y+w.textRise),Rt>0?H.scale(gt,-1):H.scale(gt,1);let il;if(w.patternFill){H.save();const Ct=w.fillColor.getPattern(H,this,(0,F.getCurrentTransformInverse)(H),L.PathType.FILL);il=(0,F.getCurrentTransform)(H),H.restore(),H.fillStyle=Ct}let _t=w.lineWidth;const Ft=w.textMatrixScale;if(Ft===0||_t===0){const Ct=w.textRenderingMode&O.TextRenderingMode.FILL_STROKE_MASK;(Ct===O.TextRenderingMode.STROKE||Ct===O.TextRenderingMode.FILL_STROKE)&&(_t=this.getSinglePixelWidth())}else _t/=Ft;if(et!==1&&(H.scale(et,et),_t/=et),H.lineWidth=_t,X.isInvalidPDFjsFont){const Ct=[];let el=0;for(const cl of S)Ct.push(cl.unicode),el+=cl.width;H.fillText(Ct.join(""),0,0),w.x+=el*dl*gt,H.restore(),this.compose();return}let wt=0,pt;for(pt=0;pt<Ot;++pt){const Ct=S[pt];if(typeof Ct=="number"){wt+=qt*Ct*J/1e3;continue}let el=!1;const cl=(Ct.isSpace?Mt:0)+lt,Ml=Ct.fontChar,Yl=Ct.accent;let Xl,Tl,Vl=Ct.width;if(Dt){const yl=Ct.vmetric||vt,Qt=-(Ct.vmetric?yl[1]:Vl*.5)*dl,ot=yl[2]*dl;Vl=yl?-yl[0]:Vl,Xl=Qt/et,Tl=(wt+ot)/et}else Xl=wt/et,Tl=0;if(X.remeasure&&Vl>0){const yl=H.measureText(Ml).width*1e3/J*et;if(Vl<yl&&this.isFontSubpixelAAEnabled){const Qt=Vl/yl;el=!0,H.save(),H.scale(Qt,1),Xl/=Qt}else Vl!==yl&&(Xl+=(Vl-yl)/2e3*J/et)}if(this.contentVisible&&(Ct.isInFont||X.missingFile)){if(ol&&!Yl)H.fillText(Ml,Xl,Tl);else if(this.paintChar(Ml,Xl,Tl,il),Yl){const yl=Xl+J*Yl.offset.x/et,Qt=Tl-J*Yl.offset.y/et;this.paintChar(Yl.fontChar,yl,Qt,il)}}const Ll=Dt?Vl*dl-cl*Rt:Vl*dl+cl*Rt;wt+=Ll,el&&H.restore()}Dt?w.y-=wt:w.x+=wt*gt,H.restore(),this.compose()}showType3Text(S){const w=this.ctx,X=this.current,J=X.font,H=X.fontSize,et=X.fontDirection,lt=J.vertical?1:-1,Mt=X.charSpacing,Rt=X.wordSpacing,gt=X.textHScale*et,Ot=X.fontMatrix||O.FONT_IDENTITY_MATRIX,Dt=S.length,qt=X.textRenderingMode===O.TextRenderingMode.INVISIBLE;let vt,dl,ol,il;if(!(qt||H===0)){for(this._cachedScaleForStroking[0]=-1,this._cachedGetSinglePixelWidth=null,w.save(),w.transform(...X.textMatrix),w.translate(X.x,X.y),w.scale(gt,et),vt=0;vt<Dt;++vt){if(dl=S[vt],typeof dl=="number"){il=lt*dl*H/1e3,this.ctx.translate(il,0),X.x+=il*gt;continue}const _t=(dl.isSpace?Rt:0)+Mt,Ft=J.charProcOperatorList[dl.operatorListId];if(!Ft){(0,O.warn)(`Type3 character "${dl.operatorListId}" is not available.`);continue}this.contentVisible&&(this.processingType3=dl,this.save(),w.scale(H,H),w.transform(...Ot),this.executeOperatorList(Ft),this.restore()),ol=O.Util.applyTransform([dl.width,0],Ot)[0]*H+_t,w.translate(ol,0),X.x+=ol*gt}w.restore(),this.processingType3=null}}setCharWidth(S,w){}setCharWidthAndBounds(S,w,X,J,H,et){this.ctx.rect(X,J,H-X,et-J),this.ctx.clip(),this.endPath()}getColorN_Pattern(S){let w;if(S[0]==="TilingPattern"){const X=S[1],J=this.baseTransform||(0,F.getCurrentTransform)(this.ctx),H={createCanvasGraphics:et=>new Ps(et,this.commonObjs,this.objs,this.canvasFactory,this.filterFactory,{optionalContentConfig:this.optionalContentConfig,markedContentStack:this.markedContentStack})};w=new L.TilingPattern(S,X,this.ctx,H,J)}else w=this._getPattern(S[1],S[2]);return w}setStrokeColorN(){this.current.strokeColor=this.getColorN_Pattern(arguments)}setFillColorN(){this.current.fillColor=this.getColorN_Pattern(arguments),this.current.patternFill=!0}setStrokeRGBColor(S,w,X){const J=O.Util.makeHexColor(S,w,X);this.ctx.strokeStyle=J,this.current.strokeColor=J}setFillRGBColor(S,w,X){const J=O.Util.makeHexColor(S,w,X);this.ctx.fillStyle=J,this.current.fillColor=J,this.current.patternFill=!1}_getPattern(S){let w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,X;return this.cachedPatterns.has(S)?X=this.cachedPatterns.get(S):(X=(0,L.getShadingPattern)(this.getObject(S)),this.cachedPatterns.set(S,X)),w&&(X.matrix=w),X}shadingFill(S){if(!this.contentVisible)return;const w=this.ctx;this.save();const X=this._getPattern(S);w.fillStyle=X.getPattern(w,this,(0,F.getCurrentTransformInverse)(w),L.PathType.SHADING);const J=(0,F.getCurrentTransformInverse)(w);if(J){const{width:H,height:et}=w.canvas,[lt,Mt,Rt,gt]=O.Util.getAxialAlignedBoundingBox([0,0,H,et],J);this.ctx.fillRect(lt,Mt,Rt-lt,gt-Mt)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.compose(this.current.getClippedPathBoundingBox()),this.restore()}beginInlineImage(){(0,O.unreachable)("Should not call beginInlineImage")}beginImageData(){(0,O.unreachable)("Should not call beginImageData")}paintFormXObjectBegin(S,w){if(this.contentVisible&&(this.save(),this.baseTransformStack.push(this.baseTransform),Array.isArray(S)&&S.length===6&&this.transform(...S),this.baseTransform=(0,F.getCurrentTransform)(this.ctx),w)){const X=w[2]-w[0],J=w[3]-w[1];this.ctx.rect(w[0],w[1],X,J),this.current.updateRectMinMax((0,F.getCurrentTransform)(this.ctx),w),this.clip(),this.endPath()}}paintFormXObjectEnd(){this.contentVisible&&(this.restore(),this.baseTransform=this.baseTransformStack.pop())}beginGroup(S){if(!this.contentVisible)return;this.save(),this.inSMaskMode&&(this.endSMaskMode(),this.current.activeSMask=null);const w=this.ctx;S.isolated||(0,O.info)("TODO: Support non-isolated groups."),S.knockout&&(0,O.warn)("Knockout groups not supported.");const X=(0,F.getCurrentTransform)(w);if(S.matrix&&w.transform(...S.matrix),!S.bbox)throw new Error("Bounding box is required.");let J=O.Util.getAxialAlignedBoundingBox(S.bbox,(0,F.getCurrentTransform)(w));const H=[0,0,w.canvas.width,w.canvas.height];J=O.Util.intersect(J,H)||[0,0,0,0];const et=Math.floor(J[0]),lt=Math.floor(J[1]);let Mt=Math.max(Math.ceil(J[2])-et,1),Rt=Math.max(Math.ceil(J[3])-lt,1),gt=1,Ot=1;Mt>Q&&(gt=Mt/Q,Mt=Q),Rt>Q&&(Ot=Rt/Q,Rt=Q),this.current.startNewPathAndClipBox([0,0,Mt,Rt]);let Dt="groupAt"+this.groupLevel;S.smask&&(Dt+="_smask_"+this.smaskCounter++%2);const qt=this.cachedCanvases.getCanvas(Dt,Mt,Rt),vt=qt.context;vt.scale(1/gt,1/Ot),vt.translate(-et,-lt),vt.transform(...X),S.smask?this.smaskStack.push({canvas:qt.canvas,context:vt,offsetX:et,offsetY:lt,scaleX:gt,scaleY:Ot,subtype:S.smask.subtype,backdrop:S.smask.backdrop,transferMap:S.smask.transferMap||null,startTransformInverse:null}):(w.setTransform(1,0,0,1,0,0),w.translate(et,lt),w.scale(gt,Ot),w.save()),P(w,vt),this.ctx=vt,this.setGState([["BM","source-over"],["ca",1],["CA",1]]),this.groupStack.push(w),this.groupLevel++}endGroup(S){if(!this.contentVisible)return;this.groupLevel--;const w=this.ctx,X=this.groupStack.pop();if(this.ctx=X,this.ctx.imageSmoothingEnabled=!1,S.smask)this.tempSMask=this.smaskStack.pop(),this.restore();else{this.ctx.restore();const J=(0,F.getCurrentTransform)(this.ctx);this.restore(),this.ctx.save(),this.ctx.setTransform(...J);const H=O.Util.getAxialAlignedBoundingBox([0,0,w.canvas.width,w.canvas.height],J);this.ctx.drawImage(w.canvas,0,0),this.ctx.restore(),this.compose(H)}}beginAnnotation(S,w,X,J,H){if(A(this,M,p).call(this),Zt(this.ctx),this.ctx.save(),this.save(),this.baseTransform&&this.ctx.setTransform(...this.baseTransform),Array.isArray(w)&&w.length===4){const et=w[2]-w[0],lt=w[3]-w[1];if(H&&this.annotationCanvasMap){X=X.slice(),X[4]-=w[0],X[5]-=w[1],w=w.slice(),w[0]=w[1]=0,w[2]=et,w[3]=lt;const[Mt,Rt]=O.Util.singularValueDecompose2dScale((0,F.getCurrentTransform)(this.ctx)),{viewportScale:gt}=this,Ot=Math.ceil(et*this.outputScaleX*gt),Dt=Math.ceil(lt*this.outputScaleY*gt);this.annotationCanvas=this.canvasFactory.create(Ot,Dt);const{canvas:qt,context:vt}=this.annotationCanvas;this.annotationCanvasMap.set(S,qt),this.annotationCanvas.savedCtx=this.ctx,this.ctx=vt,this.ctx.save(),this.ctx.setTransform(Mt,0,0,-Rt,0,lt*Rt),Zt(this.ctx)}else Zt(this.ctx),this.ctx.rect(w[0],w[1],et,lt),this.ctx.clip(),this.endPath()}this.current=new m(this.ctx.canvas.width,this.ctx.canvas.height),this.transform(...X),this.transform(...J)}endAnnotation(){this.annotationCanvas&&(this.ctx.restore(),A(this,f,B).call(this),this.ctx=this.annotationCanvas.savedCtx,delete this.annotationCanvas.savedCtx,delete this.annotationCanvas)}paintImageMaskXObject(S){if(!this.contentVisible)return;const w=S.count;S=this.getObject(S.data,S),S.count=w;const X=this.ctx,J=this.processingType3;if(J&&(J.compiled===void 0&&(J.compiled=u(S)),J.compiled)){J.compiled(X);return}const H=this._createMaskCanvas(S),et=H.canvas;X.save(),X.setTransform(1,0,0,1,0,0),X.drawImage(et,H.offsetX,H.offsetY),X.restore(),this.compose()}paintImageMaskXObjectRepeat(S,w){let X=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,J=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,H=arguments.length>4?arguments[4]:void 0,et=arguments.length>5?arguments[5]:void 0;if(!this.contentVisible)return;S=this.getObject(S.data,S);const lt=this.ctx;lt.save();const Mt=(0,F.getCurrentTransform)(lt);lt.transform(w,X,J,H,0,0);const Rt=this._createMaskCanvas(S);lt.setTransform(1,0,0,1,Rt.offsetX-Mt[4],Rt.offsetY-Mt[5]);for(let gt=0,Ot=et.length;gt<Ot;gt+=2){const Dt=O.Util.transform(Mt,[w,X,J,H,et[gt],et[gt+1]]),[qt,vt]=O.Util.applyTransform([0,0],Dt);lt.drawImage(Rt.canvas,qt,vt)}lt.restore(),this.compose()}paintImageMaskXObjectGroup(S){if(!this.contentVisible)return;const w=this.ctx,X=this.current.fillColor,J=this.current.patternFill;for(const H of S){const{data:et,width:lt,height:Mt,transform:Rt}=H,gt=this.cachedCanvases.getCanvas("maskCanvas",lt,Mt),Ot=gt.context;Ot.save();const Dt=this.getObject(et,H);$(Ot,Dt),Ot.globalCompositeOperation="source-in",Ot.fillStyle=J?X.getPattern(Ot,this,(0,F.getCurrentTransformInverse)(w),L.PathType.FILL):X,Ot.fillRect(0,0,lt,Mt),Ot.restore(),w.save(),w.transform(...Rt),w.scale(1,-1),K(w,gt.canvas,0,0,lt,Mt,0,-1,1,1),w.restore()}this.compose()}paintImageXObject(S){if(!this.contentVisible)return;const w=this.getObject(S);if(!w){(0,O.warn)("Dependent image isn't ready yet");return}this.paintInlineImageXObject(w)}paintImageXObjectRepeat(S,w,X,J){if(!this.contentVisible)return;const H=this.getObject(S);if(!H){(0,O.warn)("Dependent image isn't ready yet");return}const et=H.width,lt=H.height,Mt=[];for(let Rt=0,gt=J.length;Rt<gt;Rt+=2)Mt.push({transform:[w,0,0,X,J[Rt],J[Rt+1]],x:0,y:0,w:et,h:lt});this.paintInlineImageXObjectGroup(H,Mt)}applyTransferMapsToCanvas(S){return this.current.transferMaps!=="none"&&(S.filter=this.current.transferMaps,S.drawImage(S.canvas,0,0),S.filter="none"),S.canvas}applyTransferMapsToBitmap(S){if(this.current.transferMaps==="none")return S.bitmap;const{bitmap:w,width:X,height:J}=S,H=this.cachedCanvases.getCanvas("inlineImage",X,J),et=H.context;return et.filter=this.current.transferMaps,et.drawImage(w,0,0),et.filter="none",H.canvas}paintInlineImageXObject(S){if(!this.contentVisible)return;const w=S.width,X=S.height,J=this.ctx;if(this.save(),!O.isNodeJS){const{filter:lt}=J;lt!=="none"&<!==""&&(J.filter="none")}J.scale(1/w,-1/X);let H;if(S.bitmap)H=this.applyTransferMapsToBitmap(S);else if(typeof HTMLElement=="function"&&S instanceof HTMLElement||!S.data)H=S;else{const lt=this.cachedCanvases.getCanvas("inlineImage",w,X).context;_(lt,S),H=this.applyTransferMapsToCanvas(lt)}const et=this._scaleImage(H,(0,F.getCurrentTransformInverse)(J));J.imageSmoothingEnabled=zt((0,F.getCurrentTransform)(J),S.interpolate),K(J,et.img,0,0,et.paintWidth,et.paintHeight,0,-X,w,X),this.compose(),this.restore()}paintInlineImageXObjectGroup(S,w){if(!this.contentVisible)return;const X=this.ctx;let J;if(S.bitmap)J=S.bitmap;else{const H=S.width,et=S.height,lt=this.cachedCanvases.getCanvas("inlineImage",H,et).context;_(lt,S),J=this.applyTransferMapsToCanvas(lt)}for(const H of w)X.save(),X.transform(...H.transform),X.scale(1,-1),K(X,J,H.x,H.y,H.w,H.h,0,-1,1,1),X.restore();this.compose()}paintSolidColorImageMask(){this.contentVisible&&(this.ctx.fillRect(0,0,1,1),this.compose())}markPoint(S){}markPointProps(S,w){}beginMarkedContent(S){this.markedContentStack.push({visible:!0})}beginMarkedContentProps(S,w){S==="OC"?this.markedContentStack.push({visible:this.optionalContentConfig.isVisible(w)}):this.markedContentStack.push({visible:!0}),this.contentVisible=this.isContentVisible()}endMarkedContent(){this.markedContentStack.pop(),this.contentVisible=this.isContentVisible()}beginCompat(){}endCompat(){}consumePath(S){const w=this.current.isEmptyClip();this.pendingClip&&this.current.updateClipFromPath(),this.pendingClip||this.compose(S);const X=this.ctx;this.pendingClip&&(w||(this.pendingClip===Vt?X.clip("evenodd"):X.clip()),this.pendingClip=null),this.current.startNewPathAndClipBox(this.current.clipBox),X.beginPath()}getSinglePixelWidth(){if(!this._cachedGetSinglePixelWidth){const S=(0,F.getCurrentTransform)(this.ctx);if(S[1]===0&&S[2]===0)this._cachedGetSinglePixelWidth=1/Math.min(Math.abs(S[0]),Math.abs(S[3]));else{const w=Math.abs(S[0]*S[3]-S[2]*S[1]),X=Math.hypot(S[0],S[2]),J=Math.hypot(S[1],S[3]);this._cachedGetSinglePixelWidth=Math.max(X,J)/w}}return this._cachedGetSinglePixelWidth}getScaleForStroking(){if(this._cachedScaleForStroking[0]===-1){const{lineWidth:S}=this.current,{a:w,b:X,c:J,d:H}=this.ctx.getTransform();let et,lt;if(X===0&&J===0){const Mt=Math.abs(w),Rt=Math.abs(H);if(Mt===Rt)if(S===0)et=lt=1/Mt;else{const gt=Mt*S;et=lt=gt<1?1/gt:1}else if(S===0)et=1/Mt,lt=1/Rt;else{const gt=Mt*S,Ot=Rt*S;et=gt<1?1/gt:1,lt=Ot<1?1/Ot:1}}else{const Mt=Math.abs(w*H-X*J),Rt=Math.hypot(w,X),gt=Math.hypot(J,H);if(S===0)et=gt/Mt,lt=Rt/Mt;else{const Ot=S*Mt;et=gt>Ot?gt/Ot:1,lt=Rt>Ot?Rt/Ot:1}}this._cachedScaleForStroking[0]=et,this._cachedScaleForStroking[1]=lt}return this._cachedScaleForStroking}rescaleAndStroke(S){const{ctx:w}=this,{lineWidth:X}=this.current,[J,H]=this.getScaleForStroking();if(w.lineWidth=X||1,J===1&&H===1){w.stroke();return}const et=w.getLineDash();if(S&&w.save(),w.scale(J,H),et.length>0){const lt=Math.max(J,H);w.setLineDash(et.map(Mt=>Mt/lt)),w.lineDashOffset/=lt}w.stroke(),S&&w.restore()}isContentVisible(){for(let S=this.markedContentStack.length-1;S>=0;S--)if(!this.markedContentStack[S].visible)return!1;return!0}};M=new WeakSet,p=function(){for(;this.stateStack.length||this.inSMaskMode;)this.restore();this.ctx.restore(),this.transparentCanvas&&(this.ctx=this.compositeCtx,this.ctx.save(),this.ctx.setTransform(1,0,0,1,0,0),this.ctx.drawImage(this.transparentCanvas,0,0),this.ctx.restore(),this.transparentCanvas=null)},f=new WeakSet,B=function(){if(this.pageColors){const at=this.filterFactory.addHCMFilter(this.pageColors.foreground,this.pageColors.background);if(at!=="none"){const S=this.ctx.filter;this.ctx.filter=at,this.ctx.drawImage(this.ctx.canvas,0,0),this.ctx.filter=S}}};let Pt=Ht;r.CanvasGraphics=Pt;for(const at in O.OPS)Pt.prototype[at]!==void 0&&(Pt.prototype[O.OPS[at]]=Pt.prototype[at])},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.TilingPattern=r.PathType=void 0,r.getShadingPattern=Q,h(2);var M=h(1),p=h(168);const f={FILL:"Fill",STROKE:"Stroke",SHADING:"Shading"};r.PathType=f;function B(k,C){if(!C)return;const U=C[2]-C[0],K=C[3]-C[1],u=new Path2D;u.rect(C[0],C[1],U,K),k.clip(u)}class O{constructor(){this.constructor===O&&(0,M.unreachable)("Cannot initialize BaseShadingPattern.")}getPattern(){(0,M.unreachable)("Abstract method `getPattern` called.")}}class F extends O{constructor(C){super(),this._type=C[1],this._bbox=C[2],this._colorStops=C[3],this._p0=C[4],this._p1=C[5],this._r0=C[6],this._r1=C[7],this.matrix=null}_createGradient(C){let U;this._type==="axial"?U=C.createLinearGradient(this._p0[0],this._p0[1],this._p1[0],this._p1[1]):this._type==="radial"&&(U=C.createRadialGradient(this._p0[0],this._p0[1],this._r0,this._p1[0],this._p1[1],this._r1));for(const K of this._colorStops)U.addColorStop(K[0],K[1]);return U}getPattern(C,U,K,u){let m;if(u===f.STROKE||u===f.FILL){const _=U.current.getClippedPathBoundingBox(u,(0,p.getCurrentTransform)(C))||[0,0,0,0],$=Math.ceil(_[2]-_[0])||1,P=Math.ceil(_[3]-_[1])||1,Zt=U.cachedCanvases.getCanvas("pattern",$,P,!0),dt=Zt.context;dt.clearRect(0,0,dt.canvas.width,dt.canvas.height),dt.beginPath(),dt.rect(0,0,dt.canvas.width,dt.canvas.height),dt.translate(-_[0],-_[1]),K=M.Util.transform(K,[1,0,0,1,_[0],_[1]]),dt.transform(...U.baseTransform),this.matrix&&dt.transform(...this.matrix),B(dt,this._bbox),dt.fillStyle=this._createGradient(dt),dt.fill(),m=C.createPattern(Zt.canvas,"no-repeat");const It=new DOMMatrix(K);m.setTransform(It)}else B(C,this._bbox),m=this._createGradient(C);return m}}function L(k,C,U,K,u,m,_,$){const P=C.coords,Zt=C.colors,dt=k.data,It=k.width*4;let xt;P[U+1]>P[K+1]&&(xt=U,U=K,K=xt,xt=m,m=_,_=xt),P[K+1]>P[u+1]&&(xt=K,K=u,u=xt,xt=_,_=$,$=xt),P[U+1]>P[K+1]&&(xt=U,U=K,K=xt,xt=m,m=_,_=xt);const it=(P[U]+C.offsetX)*C.scaleX,Nt=(P[U+1]+C.offsetY)*C.scaleY,zt=(P[K]+C.offsetX)*C.scaleX,Gt=(P[K+1]+C.offsetY)*C.scaleY,Xt=(P[u]+C.offsetX)*C.scaleX,Ut=(P[u+1]+C.offsetY)*C.scaleY;if(Nt>=Ut)return;const Vt=Zt[m],Ht=Zt[m+1],Pt=Zt[m+2],at=Zt[_],S=Zt[_+1],w=Zt[_+2],X=Zt[$],J=Zt[$+1],H=Zt[$+2],et=Math.round(Nt),lt=Math.round(Ut);let Mt,Rt,gt,Ot,Dt,qt,vt,dl;for(let ol=et;ol<=lt;ol++){if(ol<Gt){const pt=ol<Nt?0:(Nt-ol)/(Nt-Gt);Mt=it-(it-zt)*pt,Rt=Vt-(Vt-at)*pt,gt=Ht-(Ht-S)*pt,Ot=Pt-(Pt-w)*pt}else{let pt;ol>Ut?pt=1:Gt===Ut?pt=0:pt=(Gt-ol)/(Gt-Ut),Mt=zt-(zt-Xt)*pt,Rt=at-(at-X)*pt,gt=S-(S-J)*pt,Ot=w-(w-H)*pt}let il;ol<Nt?il=0:ol>Ut?il=1:il=(Nt-ol)/(Nt-Ut),Dt=it-(it-Xt)*il,qt=Vt-(Vt-X)*il,vt=Ht-(Ht-J)*il,dl=Pt-(Pt-H)*il;const _t=Math.round(Math.min(Mt,Dt)),Ft=Math.round(Math.max(Mt,Dt));let wt=It*ol+_t*4;for(let pt=_t;pt<=Ft;pt++)il=(Mt-pt)/(Mt-Dt),il<0?il=0:il>1&&(il=1),dt[wt++]=Rt-(Rt-qt)*il|0,dt[wt++]=gt-(gt-vt)*il|0,dt[wt++]=Ot-(Ot-dl)*il|0,dt[wt++]=255}}function g(k,C,U){const K=C.coords,u=C.colors;let m,_;switch(C.type){case"lattice":const $=C.verticesPerRow,P=Math.floor(K.length/$)-1,Zt=$-1;for(m=0;m<P;m++){let dt=m*$;for(let It=0;It<Zt;It++,dt++)L(k,U,K[dt],K[dt+1],K[dt+$],u[dt],u[dt+1],u[dt+$]),L(k,U,K[dt+$+1],K[dt+1],K[dt+$],u[dt+$+1],u[dt+1],u[dt+$])}break;case"triangles":for(m=0,_=K.length;m<_;m+=3)L(k,U,K[m],K[m+1],K[m+2],u[m],u[m+1],u[m+2]);break;default:throw new Error("illegal figure")}}class q extends O{constructor(C){super(),this._coords=C[2],this._colors=C[3],this._figures=C[4],this._bounds=C[5],this._bbox=C[7],this._background=C[8],this.matrix=null}_createMeshCanvas(C,U,K){const u=Math.floor(this._bounds[0]),m=Math.floor(this._bounds[1]),_=Math.ceil(this._bounds[2])-u,$=Math.ceil(this._bounds[3])-m,P=Math.min(Math.ceil(Math.abs(_*C[0]*1.1)),3e3),Zt=Math.min(Math.ceil(Math.abs($*C[1]*1.1)),3e3),dt=_/P,It=$/Zt,xt={coords:this._coords,colors:this._colors,offsetX:-u,offsetY:-m,scaleX:1/dt,scaleY:1/It},it=P+2*2,Nt=Zt+2*2,zt=K.getCanvas("mesh",it,Nt,!1),Gt=zt.context,Xt=Gt.createImageData(P,Zt);if(U){const Ut=Xt.data;for(let Vt=0,Ht=Ut.length;Vt<Ht;Vt+=4)Ut[Vt]=U[0],Ut[Vt+1]=U[1],Ut[Vt+2]=U[2],Ut[Vt+3]=255}for(const Ut of this._figures)g(Xt,Ut,xt);return Gt.putImageData(Xt,2,2),{canvas:zt.canvas,offsetX:u-2*dt,offsetY:m-2*It,scaleX:dt,scaleY:It}}getPattern(C,U,K,u){B(C,this._bbox);let m;if(u===f.SHADING)m=M.Util.singularValueDecompose2dScale((0,p.getCurrentTransform)(C));else if(m=M.Util.singularValueDecompose2dScale(U.baseTransform),this.matrix){const $=M.Util.singularValueDecompose2dScale(this.matrix);m=[m[0]*$[0],m[1]*$[1]]}const _=this._createMeshCanvas(m,u===f.SHADING?null:this._background,U.cachedCanvases);return u!==f.SHADING&&(C.setTransform(...U.baseTransform),this.matrix&&C.transform(...this.matrix)),C.translate(_.offsetX,_.offsetY),C.scale(_.scaleX,_.scaleY),C.createPattern(_.canvas,"no-repeat")}}class v extends O{getPattern(){return"hotpink"}}function Q(k){switch(k[0]){case"RadialAxial":return new F(k);case"Mesh":return new q(k);case"Dummy":return new v}throw new Error(`Unknown IR type: ${k[0]}`)}const R={COLORED:1,UNCOLORED:2},j=class Hs{constructor(C,U,K,u,m){this.operatorList=C[2],this.matrix=C[3]||[1,0,0,1,0,0],this.bbox=C[4],this.xstep=C[5],this.ystep=C[6],this.paintType=C[7],this.tilingType=C[8],this.color=U,this.ctx=K,this.canvasGraphicsFactory=u,this.baseTransform=m}createPatternCanvas(C){const U=this.operatorList,K=this.bbox,u=this.xstep,m=this.ystep,_=this.paintType,$=this.tilingType,P=this.color,Zt=this.canvasGraphicsFactory;(0,M.info)("TilingType: "+$);const dt=K[0],It=K[1],xt=K[2],it=K[3],Nt=M.Util.singularValueDecompose2dScale(this.matrix),zt=M.Util.singularValueDecompose2dScale(this.baseTransform),Gt=[Nt[0]*zt[0],Nt[1]*zt[1]],Xt=this.getSizeAndScale(u,this.ctx.canvas.width,Gt[0]),Ut=this.getSizeAndScale(m,this.ctx.canvas.height,Gt[1]),Vt=C.cachedCanvases.getCanvas("pattern",Xt.size,Ut.size,!0),Ht=Vt.context,Pt=Zt.createCanvasGraphics(Ht);Pt.groupLevel=C.groupLevel,this.setFillAndStrokeStyleToContext(Pt,_,P);let at=dt,S=It,w=xt,X=it;return dt<0&&(at=0,w+=Math.abs(dt)),It<0&&(S=0,X+=Math.abs(It)),Ht.translate(-(Xt.scale*at),-(Ut.scale*S)),Pt.transform(Xt.scale,0,0,Ut.scale,0,0),Ht.save(),this.clipBbox(Pt,at,S,w,X),Pt.baseTransform=(0,p.getCurrentTransform)(Pt.ctx),Pt.executeOperatorList(U),Pt.endDrawing(),{canvas:Vt.canvas,scaleX:Xt.scale,scaleY:Ut.scale,offsetX:at,offsetY:S}}getSizeAndScale(C,U,K){C=Math.abs(C);const u=Math.max(Hs.MAX_PATTERN_SIZE,U);let m=Math.ceil(C*K);return m>=u?m=u:K=m/C,{scale:K,size:m}}clipBbox(C,U,K,u,m){const _=u-U,$=m-K;C.ctx.rect(U,K,_,$),C.current.updateRectMinMax((0,p.getCurrentTransform)(C.ctx),[U,K,u,m]),C.clip(),C.endPath()}setFillAndStrokeStyleToContext(C,U,K){const u=C.ctx,m=C.current;switch(U){case R.COLORED:const _=this.ctx;u.fillStyle=_.fillStyle,u.strokeStyle=_.strokeStyle,m.fillColor=_.fillStyle,m.strokeColor=_.strokeStyle;break;case R.UNCOLORED:const $=M.Util.makeHexColor(K[0],K[1],K[2]);u.fillStyle=$,u.strokeStyle=$,m.fillColor=$,m.strokeColor=$;break;default:throw new M.FormatError(`Unsupported paint type: ${U}`)}}getPattern(C,U,K,u){let m=K;u!==f.SHADING&&(m=M.Util.transform(m,U.baseTransform),this.matrix&&(m=M.Util.transform(m,this.matrix)));const _=this.createPatternCanvas(U);let $=new DOMMatrix(m);$=$.translate(_.offsetX,_.offsetY),$=$.scale(1/_.scaleX,1/_.scaleY);const P=C.createPattern(_.canvas,"repeat");return P.setTransform($),P}};tt(j,"MAX_PATTERN_SIZE",3e3);let I=j;r.TilingPattern=I},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.convertBlackAndWhiteToRGBA=f,r.convertToRGBA=p,r.grayToRGBA=O,h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123);var M=h(1);function p(F){switch(F.kind){case M.ImageKind.GRAYSCALE_1BPP:return f(F);case M.ImageKind.RGB_24BPP:return B(F)}return null}function f(F){let{src:L,srcPos:g=0,dest:q,width:v,height:Q,nonBlackColor:R=4294967295,inverseDecode:j=!1}=F;const I=M.FeatureTest.isLittleEndian?4278190080:255,[k,C]=j?[R,I]:[I,R],U=v>>3,K=v&7,u=L.length;q=new Uint32Array(q.buffer);let m=0;for(let _=0;_<Q;_++){for(const P=g+U;g<P;g++){const Zt=g<u?L[g]:255;q[m++]=Zt&128?C:k,q[m++]=Zt&64?C:k,q[m++]=Zt&32?C:k,q[m++]=Zt&16?C:k,q[m++]=Zt&8?C:k,q[m++]=Zt&4?C:k,q[m++]=Zt&2?C:k,q[m++]=Zt&1?C:k}if(K===0)continue;const $=g<u?L[g++]:255;for(let P=0;P<K;P++)q[m++]=$&1<<7-P?C:k}return{srcPos:g,destPos:m}}function B(F){let{src:L,srcPos:g=0,dest:q,destPos:v=0,width:Q,height:R}=F,j=0;const I=L.length>>2,k=new Uint32Array(L.buffer,g,I);if(M.FeatureTest.isLittleEndian){for(;j<I-2;j+=3,v+=4){const C=k[j],U=k[j+1],K=k[j+2];q[v]=C|4278190080,q[v+1]=C>>>24|U<<8|4278190080,q[v+2]=U>>>16|K<<16|4278190080,q[v+3]=K>>>8|4278190080}for(let C=j*4,U=L.length;C<U;C+=3)q[v++]=L[C]|L[C+1]<<8|L[C+2]<<16|4278190080}else{for(;j<I-2;j+=3,v+=4){const C=k[j],U=k[j+1],K=k[j+2];q[v]=C|255,q[v+1]=C<<24|U>>>8|255,q[v+2]=U<<16|K>>>16|255,q[v+3]=K<<8|255}for(let C=j*4,U=L.length;C<U;C+=3)q[v++]=L[C]<<24|L[C+1]<<16|L[C+2]<<8|255}return{srcPos:g,destPos:v}}function O(F,L){if(M.FeatureTest.isLittleEndian)for(let g=0,q=F.length;g<q;g++)L[g]=F[g]*65793|4278190080;else for(let g=0,q=F.length;g<q;g++)L[g]=F[g]*16843008|255}},(st,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.GlobalWorkerOptions=void 0;const h=Object.create(null);r.GlobalWorkerOptions=h,h.workerPort=null,h.workerSrc=""},(st,r,h)=>{var M,p,f,B,O,F;Object.defineProperty(r,"__esModule",{value:!0}),r.MessageHandler=void 0,h(2);var L=h(1);const g={UNKNOWN:0,DATA:1,ERROR:2},q={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function v(R){switch(R instanceof Error||typeof R=="object"&&R!==null||(0,L.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'),R.name){case"AbortException":return new L.AbortException(R.message);case"MissingPDFException":return new L.MissingPDFException(R.message);case"PasswordException":return new L.PasswordException(R.message,R.code);case"UnexpectedResponseException":return new L.UnexpectedResponseException(R.message,R.status);case"UnknownErrorException":return new L.UnknownErrorException(R.message,R.details);default:return new L.UnknownErrorException(R.message,R.toString())}}class Q{constructor(j,I,k){E(this,M),E(this,f),E(this,O),this.sourceName=j,this.targetName=I,this.comObj=k,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),this._onComObjOnMessage=C=>{const U=C.data;if(U.targetName!==this.sourceName)return;if(U.stream){A(this,f,B).call(this,U);return}if(U.callback){const u=U.callbackId,m=this.callbackCapabilities[u];if(!m)throw new Error(`Cannot resolve callback ${u}`);if(delete this.callbackCapabilities[u],U.callback===g.DATA)m.resolve(U.data);else if(U.callback===g.ERROR)m.reject(v(U.reason));else throw new Error("Unexpected callback case");return}const K=this.actionHandler[U.action];if(!K)throw new Error(`Unknown action from worker: ${U.action}`);if(U.callbackId){const u=this.sourceName,m=U.sourceName;new Promise(function(_){_(K(U.data))}).then(function(_){k.postMessage({sourceName:u,targetName:m,callback:g.DATA,callbackId:U.callbackId,data:_})},function(_){k.postMessage({sourceName:u,targetName:m,callback:g.ERROR,callbackId:U.callbackId,reason:v(_)})});return}if(U.streamId){A(this,M,p).call(this,U);return}K(U.data)},k.addEventListener("message",this._onComObjOnMessage)}on(j,I){const k=this.actionHandler;if(k[j])throw new Error(`There is already an actionName called "${j}"`);k[j]=I}send(j,I,k){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:j,data:I},k)}sendWithPromise(j,I,k){const C=this.callbackId++,U=new L.PromiseCapability;this.callbackCapabilities[C]=U;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:j,callbackId:C,data:I},k)}catch(K){U.reject(K)}return U.promise}sendWithStream(j,I,k,C){const U=this.streamId++,K=this.sourceName,u=this.targetName,m=this.comObj;return new ReadableStream({start:_=>{const $=new L.PromiseCapability;return this.streamControllers[U]={controller:_,startCall:$,pullCall:null,cancelCall:null,isClosed:!1},m.postMessage({sourceName:K,targetName:u,action:j,streamId:U,data:I,desiredSize:_.desiredSize},C),$.promise},pull:_=>{const $=new L.PromiseCapability;return this.streamControllers[U].pullCall=$,m.postMessage({sourceName:K,targetName:u,stream:q.PULL,streamId:U,desiredSize:_.desiredSize}),$.promise},cancel:_=>{(0,L.assert)(_ instanceof Error,"cancel must have a valid reason");const $=new L.PromiseCapability;return this.streamControllers[U].cancelCall=$,this.streamControllers[U].isClosed=!0,m.postMessage({sourceName:K,targetName:u,stream:q.CANCEL,streamId:U,reason:v(_)}),$.promise}},k)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}}M=new WeakSet,p=function(R){const j=R.streamId,I=this.sourceName,k=R.sourceName,C=this.comObj,U=this,K=this.actionHandler[R.action],u={enqueue(m){let _=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,$=arguments.length>2?arguments[2]:void 0;if(this.isCancelled)return;const P=this.desiredSize;this.desiredSize-=_,P>0&&this.desiredSize<=0&&(this.sinkCapability=new L.PromiseCapability,this.ready=this.sinkCapability.promise),C.postMessage({sourceName:I,targetName:k,stream:q.ENQUEUE,streamId:j,chunk:m},$)},close(){this.isCancelled||(this.isCancelled=!0,C.postMessage({sourceName:I,targetName:k,stream:q.CLOSE,streamId:j}),delete U.streamSinks[j])},error(m){(0,L.assert)(m instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,C.postMessage({sourceName:I,targetName:k,stream:q.ERROR,streamId:j,reason:v(m)}))},sinkCapability:new L.PromiseCapability,onPull:null,onCancel:null,isCancelled:!1,desiredSize:R.desiredSize,ready:null};u.sinkCapability.resolve(),u.ready=u.sinkCapability.promise,this.streamSinks[j]=u,new Promise(function(m){m(K(R.data,u))}).then(function(){C.postMessage({sourceName:I,targetName:k,stream:q.START_COMPLETE,streamId:j,success:!0})},function(m){C.postMessage({sourceName:I,targetName:k,stream:q.START_COMPLETE,streamId:j,reason:v(m)})})},f=new WeakSet,B=function(R){const j=R.streamId,I=this.sourceName,k=R.sourceName,C=this.comObj,U=this.streamControllers[j],K=this.streamSinks[j];switch(R.stream){case q.START_COMPLETE:R.success?U.startCall.resolve():U.startCall.reject(v(R.reason));break;case q.PULL_COMPLETE:R.success?U.pullCall.resolve():U.pullCall.reject(v(R.reason));break;case q.PULL:if(!K){C.postMessage({sourceName:I,targetName:k,stream:q.PULL_COMPLETE,streamId:j,success:!0});break}K.desiredSize<=0&&R.desiredSize>0&&K.sinkCapability.resolve(),K.desiredSize=R.desiredSize,new Promise(function(u){var m;u((m=K.onPull)==null?void 0:m.call(K))}).then(function(){C.postMessage({sourceName:I,targetName:k,stream:q.PULL_COMPLETE,streamId:j,success:!0})},function(u){C.postMessage({sourceName:I,targetName:k,stream:q.PULL_COMPLETE,streamId:j,reason:v(u)})});break;case q.ENQUEUE:if((0,L.assert)(U,"enqueue should have stream controller"),U.isClosed)break;U.controller.enqueue(R.chunk);break;case q.CLOSE:if((0,L.assert)(U,"close should have stream controller"),U.isClosed)break;U.isClosed=!0,U.controller.close(),A(this,O,F).call(this,U,j);break;case q.ERROR:(0,L.assert)(U,"error should have stream controller"),U.controller.error(v(R.reason)),A(this,O,F).call(this,U,j);break;case q.CANCEL_COMPLETE:R.success?U.cancelCall.resolve():U.cancelCall.reject(v(R.reason)),A(this,O,F).call(this,U,j);break;case q.CANCEL:if(!K)break;new Promise(function(u){var m;u((m=K.onCancel)==null?void 0:m.call(K,v(R.reason)))}).then(function(){C.postMessage({sourceName:I,targetName:k,stream:q.CANCEL_COMPLETE,streamId:j,success:!0})},function(u){C.postMessage({sourceName:I,targetName:k,stream:q.CANCEL_COMPLETE,streamId:j,reason:v(u)})}),K.sinkCapability.reject(v(R.reason)),K.isCancelled=!0,delete this.streamSinks[j];break;default:throw new Error("Unexpected stream case")}},O=new WeakSet,F=function(R,j){return Sl(this,null,function*(){var I,k,C;yield Promise.allSettled([(I=R.startCall)==null?void 0:I.promise,(k=R.pullCall)==null?void 0:k.promise,(C=R.cancelCall)==null?void 0:C.promise]),delete this.streamControllers[j]})},r.MessageHandler=Q},(st,r,h)=>{var M,p;Object.defineProperty(r,"__esModule",{value:!0}),r.Metadata=void 0;var f=h(1);class B{constructor(F){E(this,M,void 0),E(this,p,void 0);let{parsedData:L,rawData:g}=F;Zl(this,M,L),Zl(this,p,g)}getRaw(){return t(this,p)}get(F){var L;return(L=t(this,M).get(F))!=null?L:null}getAll(){return(0,f.objectFromMap)(t(this,M))}has(F){return t(this,M).has(F)}}M=new WeakMap,p=new WeakMap,r.Metadata=B},(st,r,h)=>{var M,p,f,B,O,F,L;Object.defineProperty(r,"__esModule",{value:!0}),r.OptionalContentConfig=void 0;var g=h(1),q=h(170);const v=Symbol("INTERNAL");class Q{constructor(I,k){E(this,M,!0),this.name=I,this.intent=k}get visible(){return t(this,M)}_setVisible(I,k){I!==v&&(0,g.unreachable)("Internal method `_setVisible` called."),Zl(this,M,k)}}M=new WeakMap;class R{constructor(I){if(E(this,F),E(this,p,null),E(this,f,new Map),E(this,B,null),E(this,O,null),this.name=null,this.creator=null,I!==null){this.name=I.name,this.creator=I.creator,Zl(this,O,I.order);for(const k of I.groups)t(this,f).set(k.id,new Q(k.name,k.intent));if(I.baseState==="OFF")for(const k of t(this,f).values())k._setVisible(v,!1);for(const k of I.on)t(this,f).get(k)._setVisible(v,!0);for(const k of I.off)t(this,f).get(k)._setVisible(v,!1);Zl(this,B,this.getHash())}}isVisible(I){if(t(this,f).size===0)return!0;if(!I)return(0,g.warn)("Optional content group not defined."),!0;if(I.type==="OCG")return t(this,f).has(I.id)?t(this,f).get(I.id).visible:((0,g.warn)(`Optional content group not found: ${I.id}`),!0);if(I.type==="OCMD"){if(I.expression)return A(this,F,L).call(this,I.expression);if(!I.policy||I.policy==="AnyOn"){for(const k of I.ids){if(!t(this,f).has(k))return(0,g.warn)(`Optional content group not found: ${k}`),!0;if(t(this,f).get(k).visible)return!0}return!1}else if(I.policy==="AllOn"){for(const k of I.ids){if(!t(this,f).has(k))return(0,g.warn)(`Optional content group not found: ${k}`),!0;if(!t(this,f).get(k).visible)return!1}return!0}else if(I.policy==="AnyOff"){for(const k of I.ids){if(!t(this,f).has(k))return(0,g.warn)(`Optional content group not found: ${k}`),!0;if(!t(this,f).get(k).visible)return!0}return!1}else if(I.policy==="AllOff"){for(const k of I.ids){if(!t(this,f).has(k))return(0,g.warn)(`Optional content group not found: ${k}`),!0;if(t(this,f).get(k).visible)return!1}return!0}return(0,g.warn)(`Unknown optional content policy ${I.policy}.`),!0}return(0,g.warn)(`Unknown group type ${I.type}.`),!0}setVisibility(I){let k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;if(!t(this,f).has(I)){(0,g.warn)(`Optional content group not found: ${I}`);return}t(this,f).get(I)._setVisible(v,!!k),Zl(this,p,null)}get hasInitialVisibility(){return t(this,B)===null||this.getHash()===t(this,B)}getOrder(){return t(this,f).size?t(this,O)?t(this,O).slice():[...t(this,f).keys()]:null}getGroups(){return t(this,f).size>0?(0,g.objectFromMap)(t(this,f)):null}getGroup(I){return t(this,f).get(I)||null}getHash(){if(t(this,p)!==null)return t(this,p);const I=new q.MurmurHash3_64;for(const[k,C]of t(this,f))I.update(`${k}:${C.visible}`);return Zl(this,p,I.hexdigest())}}p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakMap,F=new WeakSet,L=function(j){const I=j.length;if(I<2)return!0;const k=j[0];for(let C=1;C<I;C++){const U=j[C];let K;if(Array.isArray(U))K=A(this,F,L).call(this,U);else if(t(this,f).has(U))K=t(this,f).get(U).visible;else return(0,g.warn)(`Optional content group not found: ${U}`),!0;switch(k){case"And":if(!K)return!1;break;case"Or":if(K)return!0;break;case"Not":return!K;default:return!0}}return k==="And"},r.OptionalContentConfig=R},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFDataTransportStream=void 0,h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123),h(89);var M=h(1),p=h(168);class f{constructor(L,g){let{length:q,initialData:v,progressiveDone:Q=!1,contentDispositionFilename:R=null,disableRange:j=!1,disableStream:I=!1}=L;if((0,M.assert)(g,'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'),this._queuedChunks=[],this._progressiveDone=Q,this._contentDispositionFilename=R,(v==null?void 0:v.length)>0){const k=v instanceof Uint8Array&&v.byteLength===v.buffer.byteLength?v.buffer:new Uint8Array(v).buffer;this._queuedChunks.push(k)}this._pdfDataRangeTransport=g,this._isStreamingSupported=!I,this._isRangeSupported=!j,this._contentLength=q,this._fullRequestReader=null,this._rangeReaders=[],this._pdfDataRangeTransport.addRangeListener((k,C)=>{this._onReceiveData({begin:k,chunk:C})}),this._pdfDataRangeTransport.addProgressListener((k,C)=>{this._onProgress({loaded:k,total:C})}),this._pdfDataRangeTransport.addProgressiveReadListener(k=>{this._onReceiveData({chunk:k})}),this._pdfDataRangeTransport.addProgressiveDoneListener(()=>{this._onProgressiveDone()}),this._pdfDataRangeTransport.transportReady()}_onReceiveData(L){let{begin:g,chunk:q}=L;const v=q instanceof Uint8Array&&q.byteLength===q.buffer.byteLength?q.buffer:new Uint8Array(q).buffer;if(g===void 0)this._fullRequestReader?this._fullRequestReader._enqueue(v):this._queuedChunks.push(v);else{const Q=this._rangeReaders.some(function(R){return R._begin!==g?!1:(R._enqueue(v),!0)});(0,M.assert)(Q,"_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.")}}get _progressiveDataLength(){var g;var L;return(g=(L=this._fullRequestReader)==null?void 0:L._loaded)!=null?g:0}_onProgress(L){var g,q,v,Q;L.total===void 0?(q=(g=this._rangeReaders[0])==null?void 0:g.onProgress)==null||q.call(g,{loaded:L.loaded}):(Q=(v=this._fullRequestReader)==null?void 0:v.onProgress)==null||Q.call(v,{loaded:L.loaded,total:L.total})}_onProgressiveDone(){var L;(L=this._fullRequestReader)==null||L.progressiveDone(),this._progressiveDone=!0}_removeRangeReader(L){const g=this._rangeReaders.indexOf(L);g>=0&&this._rangeReaders.splice(g,1)}getFullReader(){(0,M.assert)(!this._fullRequestReader,"PDFDataTransportStream.getFullReader can only be called once.");const L=this._queuedChunks;return this._queuedChunks=null,new B(this,L,this._progressiveDone,this._contentDispositionFilename)}getRangeReader(L,g){if(g<=this._progressiveDataLength)return null;const q=new O(this,L,g);return this._pdfDataRangeTransport.requestDataRange(L,g),this._rangeReaders.push(q),q}cancelAllRequests(L){var g;(g=this._fullRequestReader)==null||g.cancel(L);for(const q of this._rangeReaders.slice(0))q.cancel(L);this._pdfDataRangeTransport.abort()}}r.PDFDataTransportStream=f;class B{constructor(L,g){let q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,v=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;this._stream=L,this._done=q||!1,this._filename=(0,p.isPdfFile)(v)?v:null,this._queuedChunks=g||[],this._loaded=0;for(const Q of this._queuedChunks)this._loaded+=Q.byteLength;this._requests=[],this._headersReady=Promise.resolve(),L._fullRequestReader=this,this.onProgress=null}_enqueue(L){this._done||(this._requests.length>0?this._requests.shift().resolve({value:L,done:!1}):this._queuedChunks.push(L),this._loaded+=L.byteLength)}get headersReady(){return this._headersReady}get filename(){return this._filename}get isRangeSupported(){return this._stream._isRangeSupported}get isStreamingSupported(){return this._stream._isStreamingSupported}get contentLength(){return this._stream._contentLength}read(){return Sl(this,null,function*(){if(this._queuedChunks.length>0)return{value:this._queuedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const L=new M.PromiseCapability;return this._requests.push(L),L.promise})}cancel(L){this._done=!0;for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0}progressiveDone(){this._done||(this._done=!0)}}class O{constructor(L,g,q){this._stream=L,this._begin=g,this._end=q,this._queuedChunk=null,this._requests=[],this._done=!1,this.onProgress=null}_enqueue(L){if(!this._done){if(this._requests.length===0)this._queuedChunk=L;else{this._requests.shift().resolve({value:L,done:!1});for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0}this._done=!0,this._stream._removeRangeReader(this)}}get isStreamingSupported(){return!1}read(){return Sl(this,null,function*(){if(this._queuedChunk){const g=this._queuedChunk;return this._queuedChunk=null,{value:g,done:!1}}if(this._done)return{value:void 0,done:!0};const L=new M.PromiseCapability;return this._requests.push(L),L.promise})}cancel(L){this._done=!0;for(const g of this._requests)g.resolve({value:void 0,done:!0});this._requests.length=0,this._stream._removeRangeReader(this)}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFFetchStream=void 0,h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123),h(89);var M=h(1),p=h(182);function f(q,v,Q){return{method:"GET",headers:q,signal:Q.signal,mode:"cors",credentials:v?"include":"same-origin",redirect:"follow"}}function B(q){const v=new Headers;for(const Q in q){const R=q[Q];R!==void 0&&v.append(Q,R)}return v}function O(q){return q instanceof Uint8Array?q.buffer:q instanceof ArrayBuffer?q:((0,M.warn)(`getArrayBuffer - unexpected data format: ${q}`),new Uint8Array(q).buffer)}class F{constructor(v){this.source=v,this.isHttp=/^https?:/i.test(v.url),this.httpHeaders=this.isHttp&&v.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var Q;var v;return(Q=(v=this._fullRequestReader)==null?void 0:v._loaded)!=null?Q:0}getFullReader(){return(0,M.assert)(!this._fullRequestReader,"PDFFetchStream.getFullReader can only be called once."),this._fullRequestReader=new L(this),this._fullRequestReader}getRangeReader(v,Q){if(Q<=this._progressiveDataLength)return null;const R=new g(this,v,Q);return this._rangeRequestReaders.push(R),R}cancelAllRequests(v){var Q;(Q=this._fullRequestReader)==null||Q.cancel(v);for(const R of this._rangeRequestReaders.slice(0))R.cancel(v)}}r.PDFFetchStream=F;class L{constructor(v){this._stream=v,this._reader=null,this._loaded=0,this._filename=null;const Q=v.source;this._withCredentials=Q.withCredentials||!1,this._contentLength=Q.length,this._headersCapability=new M.PromiseCapability,this._disableRange=Q.disableRange||!1,this._rangeChunkSize=Q.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._abortController=new AbortController,this._isStreamingSupported=!Q.disableStream,this._isRangeSupported=!Q.disableRange,this._headers=B(this._stream.httpHeaders);const R=Q.url;fetch(R,f(this._headers,this._withCredentials,this._abortController)).then(j=>{if(!(0,p.validateResponseStatus)(j.status))throw(0,p.createResponseStatusError)(j.status,R);this._reader=j.body.getReader(),this._headersCapability.resolve();const I=U=>j.headers.get(U),{allowRangeRequests:k,suggestedLength:C}=(0,p.validateRangeRequestCapabilities)({getResponseHeader:I,isHttp:this._stream.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=k,this._contentLength=C||this._contentLength,this._filename=(0,p.extractFilenameFromHeader)(I),!this._isStreamingSupported&&this._isRangeSupported&&this.cancel(new M.AbortException("Streaming is disabled."))}).catch(this._headersCapability.reject),this.onProgress=null}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var v;yield this._headersCapability.promise;const{value:Q,done:R}=yield this._reader.read();return R?{value:Q,done:R}:(this._loaded+=Q.byteLength,(v=this.onProgress)==null||v.call(this,{loaded:this._loaded,total:this._contentLength}),{value:O(Q),done:!1})})}cancel(v){var Q;(Q=this._reader)==null||Q.cancel(v),this._abortController.abort()}}class g{constructor(v,Q,R){this._stream=v,this._reader=null,this._loaded=0;const j=v.source;this._withCredentials=j.withCredentials||!1,this._readCapability=new M.PromiseCapability,this._isStreamingSupported=!j.disableStream,this._abortController=new AbortController,this._headers=B(this._stream.httpHeaders),this._headers.append("Range",`bytes=${Q}-${R-1}`);const I=j.url;fetch(I,f(this._headers,this._withCredentials,this._abortController)).then(k=>{if(!(0,p.validateResponseStatus)(k.status))throw(0,p.createResponseStatusError)(k.status,I);this._readCapability.resolve(),this._reader=k.body.getReader()}).catch(this._readCapability.reject),this.onProgress=null}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var v;yield this._readCapability.promise;const{value:Q,done:R}=yield this._reader.read();return R?{value:Q,done:R}:(this._loaded+=Q.byteLength,(v=this.onProgress)==null||v.call(this,{loaded:this._loaded}),{value:O(Q),done:!1})})}cancel(v){var Q;(Q=this._reader)==null||Q.cancel(v),this._abortController.abort()}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.createResponseStatusError=F,r.extractFilenameFromHeader=O,r.validateRangeRequestCapabilities=B,r.validateResponseStatus=L;var M=h(1),p=h(183),f=h(168);function B(g){let{getResponseHeader:q,isHttp:v,rangeChunkSize:Q,disableRange:R}=g;const j={allowRangeRequests:!1,suggestedLength:void 0},I=parseInt(q("Content-Length"),10);return!Number.isInteger(I)||(j.suggestedLength=I,I<=2*Q)||R||!v||q("Accept-Ranges")!=="bytes"||(q("Content-Encoding")||"identity")!=="identity"||(j.allowRangeRequests=!0),j}function O(g){const q=g("Content-Disposition");if(q){let v=(0,p.getFilenameFromContentDispositionHeader)(q);if(v.includes("%"))try{v=decodeURIComponent(v)}catch(Q){}if((0,f.isPdfFile)(v))return v}return null}function F(g,q){return g===404||g===0&&q.startsWith("file:")?new M.MissingPDFException('Missing PDF "'+q+'".'):new M.UnexpectedResponseException(`Unexpected server response (${g}) while retrieving PDF "${q}".`,g)}function L(g){return g===200||g===206}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.getFilenameFromContentDispositionHeader=p,h(89),h(149);var M=h(1);function p(f){let B=!0,O=F("filename\\*","i").exec(f);if(O){O=O[1];let j=v(O);return j=unescape(j),j=Q(j),j=R(j),g(j)}if(O=q(f),O){const j=R(O);return g(j)}if(O=F("filename","i").exec(f),O){O=O[1];let j=v(O);return j=R(j),g(j)}function F(j,I){return new RegExp("(?:^|;)\\s*"+j+'\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)',I)}function L(j,I){if(j){if(!/^[\x00-\xFF]+$/.test(I))return I;try{const k=new TextDecoder(j,{fatal:!0}),C=(0,M.stringToBytes)(I);I=k.decode(C),B=!1}catch(k){}}return I}function g(j){return B&&/[\x80-\xff]/.test(j)&&(j=L("utf-8",j),B&&(j=L("iso-8859-1",j))),j}function q(j){const I=[];let k;const C=F("filename\\*((?!0\\d)\\d+)(\\*?)","ig");for(;(k=C.exec(j))!==null;){let[,K,u,m]=k;if(K=parseInt(K,10),K in I){if(K===0)break;continue}I[K]=[u,m]}const U=[];for(let K=0;K<I.length&&K in I;++K){let[u,m]=I[K];m=v(m),u&&(m=unescape(m),K===0&&(m=Q(m))),U.push(m)}return U.join("")}function v(j){if(j.startsWith('"')){const I=j.slice(1).split('\\"');for(let k=0;k<I.length;++k){const C=I[k].indexOf('"');C!==-1&&(I[k]=I[k].slice(0,C),I.length=k+1),I[k]=I[k].replaceAll(/\\(.)/g,"$1")}j=I.join('"')}return j}function Q(j){const I=j.indexOf("'");if(I===-1)return j;const k=j.slice(0,I),C=j.slice(I+1).replace(/^[^']*'/,"");return L(k,C)}function R(j){return!j.startsWith("=?")||/[\x00-\x19\x80-\xff]/.test(j)?j:j.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g,function(I,k,C,U){if(C==="q"||C==="Q")return U=U.replaceAll("_"," "),U=U.replaceAll(/=([0-9a-fA-F]{2})/g,function(K,u){return String.fromCharCode(parseInt(u,16))}),L(k,U);try{U=atob(U)}catch(K){}return L(k,U)})}return""}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFNetworkStream=void 0,h(89);var M=h(1),p=h(182);const f=200,B=206;function O(v){const Q=v.response;return typeof Q!="string"?Q:(0,M.stringToBytes)(Q).buffer}class F{constructor(Q){let R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.url=Q,this.isHttp=/^https?:/i.test(Q),this.httpHeaders=this.isHttp&&R.httpHeaders||Object.create(null),this.withCredentials=R.withCredentials||!1,this.currXhrId=0,this.pendingRequests=Object.create(null)}requestRange(Q,R,j){const I={begin:Q,end:R};for(const k in j)I[k]=j[k];return this.request(I)}requestFull(Q){return this.request(Q)}request(Q){const R=new XMLHttpRequest,j=this.currXhrId++,I=this.pendingRequests[j]={xhr:R};R.open("GET",this.url),R.withCredentials=this.withCredentials;for(const k in this.httpHeaders){const C=this.httpHeaders[k];C!==void 0&&R.setRequestHeader(k,C)}return this.isHttp&&"begin"in Q&&"end"in Q?(R.setRequestHeader("Range",`bytes=${Q.begin}-${Q.end-1}`),I.expectedStatus=B):I.expectedStatus=f,R.responseType="arraybuffer",Q.onError&&(R.onerror=function(k){Q.onError(R.status)}),R.onreadystatechange=this.onStateChange.bind(this,j),R.onprogress=this.onProgress.bind(this,j),I.onHeadersReceived=Q.onHeadersReceived,I.onDone=Q.onDone,I.onError=Q.onError,I.onProgress=Q.onProgress,R.send(null),j}onProgress(Q,R){var j;const I=this.pendingRequests[Q];I&&((j=I.onProgress)==null||j.call(I,R))}onStateChange(Q,R){var j,I,k;const C=this.pendingRequests[Q];if(!C)return;const U=C.xhr;if(U.readyState>=2&&C.onHeadersReceived&&(C.onHeadersReceived(),delete C.onHeadersReceived),U.readyState!==4||!(Q in this.pendingRequests))return;if(delete this.pendingRequests[Q],U.status===0&&this.isHttp){(j=C.onError)==null||j.call(C,U.status);return}const K=U.status||f;if(!(K===f&&C.expectedStatus===B)&&K!==C.expectedStatus){(I=C.onError)==null||I.call(C,U.status);return}const u=O(U);if(K===B){const m=U.getResponseHeader("Content-Range"),_=/bytes (\d+)-(\d+)\/(\d+)/.exec(m);C.onDone({begin:parseInt(_[1],10),chunk:u})}else u?C.onDone({begin:0,chunk:u}):(k=C.onError)==null||k.call(C,U.status)}getRequestXhr(Q){return this.pendingRequests[Q].xhr}isPendingRequest(Q){return Q in this.pendingRequests}abortRequest(Q){const R=this.pendingRequests[Q].xhr;delete this.pendingRequests[Q],R.abort()}}class L{constructor(Q){this._source=Q,this._manager=new F(Q.url,{httpHeaders:Q.httpHeaders,withCredentials:Q.withCredentials}),this._rangeChunkSize=Q.rangeChunkSize,this._fullRequestReader=null,this._rangeRequestReaders=[]}_onRangeRequestReaderClosed(Q){const R=this._rangeRequestReaders.indexOf(Q);R>=0&&this._rangeRequestReaders.splice(R,1)}getFullReader(){return(0,M.assert)(!this._fullRequestReader,"PDFNetworkStream.getFullReader can only be called once."),this._fullRequestReader=new g(this._manager,this._source),this._fullRequestReader}getRangeReader(Q,R){const j=new q(this._manager,Q,R);return j.onClosed=this._onRangeRequestReaderClosed.bind(this),this._rangeRequestReaders.push(j),j}cancelAllRequests(Q){var R;(R=this._fullRequestReader)==null||R.cancel(Q);for(const j of this._rangeRequestReaders.slice(0))j.cancel(Q)}}r.PDFNetworkStream=L;class g{constructor(Q,R){this._manager=Q;const j={onHeadersReceived:this._onHeadersReceived.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=R.url,this._fullRequestId=Q.requestFull(j),this._headersReceivedCapability=new M.PromiseCapability,this._disableRange=R.disableRange||!1,this._contentLength=R.length,this._rangeChunkSize=R.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!1,this._isRangeSupported=!1,this._cachedChunks=[],this._requests=[],this._done=!1,this._storedError=void 0,this._filename=null,this.onProgress=null}_onHeadersReceived(){const Q=this._fullRequestId,R=this._manager.getRequestXhr(Q),j=C=>R.getResponseHeader(C),{allowRangeRequests:I,suggestedLength:k}=(0,p.validateRangeRequestCapabilities)({getResponseHeader:j,isHttp:this._manager.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});I&&(this._isRangeSupported=!0),this._contentLength=k||this._contentLength,this._filename=(0,p.extractFilenameFromHeader)(j),this._isRangeSupported&&this._manager.abortRequest(Q),this._headersReceivedCapability.resolve()}_onDone(Q){if(Q&&(this._requests.length>0?this._requests.shift().resolve({value:Q.chunk,done:!1}):this._cachedChunks.push(Q.chunk)),this._done=!0,!(this._cachedChunks.length>0)){for(const R of this._requests)R.resolve({value:void 0,done:!0});this._requests.length=0}}_onError(Q){this._storedError=(0,p.createResponseStatusError)(Q,this._url),this._headersReceivedCapability.reject(this._storedError);for(const R of this._requests)R.reject(this._storedError);this._requests.length=0,this._cachedChunks.length=0}_onProgress(Q){var R;(R=this.onProgress)==null||R.call(this,{loaded:Q.loaded,total:Q.lengthComputable?Q.total:this._contentLength})}get filename(){return this._filename}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}get contentLength(){return this._contentLength}get headersReady(){return this._headersReceivedCapability.promise}read(){return Sl(this,null,function*(){if(this._storedError)throw this._storedError;if(this._cachedChunks.length>0)return{value:this._cachedChunks.shift(),done:!1};if(this._done)return{value:void 0,done:!0};const Q=new M.PromiseCapability;return this._requests.push(Q),Q.promise})}cancel(Q){this._done=!0,this._headersReceivedCapability.reject(Q);for(const R of this._requests)R.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._fullRequestId)&&this._manager.abortRequest(this._fullRequestId),this._fullRequestReader=null}}class q{constructor(Q,R,j){this._manager=Q;const I={onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=Q.url,this._requestId=Q.requestRange(R,j,I),this._requests=[],this._queuedChunk=null,this._done=!1,this._storedError=void 0,this.onProgress=null,this.onClosed=null}_close(){var Q;(Q=this.onClosed)==null||Q.call(this,this)}_onDone(Q){const R=Q.chunk;this._requests.length>0?this._requests.shift().resolve({value:R,done:!1}):this._queuedChunk=R,this._done=!0;for(const j of this._requests)j.resolve({value:void 0,done:!0});this._requests.length=0,this._close()}_onError(Q){this._storedError=(0,p.createResponseStatusError)(Q,this._url);for(const R of this._requests)R.reject(this._storedError);this._requests.length=0,this._queuedChunk=null}_onProgress(Q){var R;this.isStreamingSupported||(R=this.onProgress)==null||R.call(this,{loaded:Q.loaded})}get isStreamingSupported(){return!1}read(){return Sl(this,null,function*(){if(this._storedError)throw this._storedError;if(this._queuedChunk!==null){const R=this._queuedChunk;return this._queuedChunk=null,{value:R,done:!1}}if(this._done)return{value:void 0,done:!0};const Q=new M.PromiseCapability;return this._requests.push(Q),Q.promise})}cancel(Q){this._done=!0;for(const R of this._requests)R.resolve({value:void 0,done:!0});this._requests.length=0,this._manager.isPendingRequest(this._requestId)&&this._manager.abortRequest(this._requestId),this._close()}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.PDFNodeStream=void 0,h(89),h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123);var M=h(1),p=h(182);const f=/^file:\/\/\/[a-zA-Z]:\//;function B(j){const I=require$$6,k=I.parse(j);return k.protocol==="file:"||k.host?k:/^[a-z]:[/\\]/i.test(j)?I.parse(`file:///${j}`):(k.host||(k.protocol="file:"),k)}class O{constructor(I){this.source=I,this.url=B(I.url),this.isHttp=this.url.protocol==="http:"||this.url.protocol==="https:",this.isFsUrl=this.url.protocol==="file:",this.httpHeaders=this.isHttp&&I.httpHeaders||{},this._fullRequestReader=null,this._rangeRequestReaders=[]}get _progressiveDataLength(){var k;var I;return(k=(I=this._fullRequestReader)==null?void 0:I._loaded)!=null?k:0}getFullReader(){return(0,M.assert)(!this._fullRequestReader,"PDFNodeStream.getFullReader can only be called once."),this._fullRequestReader=this.isFsUrl?new Q(this):new q(this),this._fullRequestReader}getRangeReader(I,k){if(k<=this._progressiveDataLength)return null;const C=this.isFsUrl?new R(this,I,k):new v(this,I,k);return this._rangeRequestReaders.push(C),C}cancelAllRequests(I){var k;(k=this._fullRequestReader)==null||k.cancel(I);for(const C of this._rangeRequestReaders.slice(0))C.cancel(I)}}r.PDFNodeStream=O;class F{constructor(I){this._url=I.url,this._done=!1,this._storedError=null,this.onProgress=null;const k=I.source;this._contentLength=k.length,this._loaded=0,this._filename=null,this._disableRange=k.disableRange||!1,this._rangeChunkSize=k.rangeChunkSize,!this._rangeChunkSize&&!this._disableRange&&(this._disableRange=!0),this._isStreamingSupported=!k.disableStream,this._isRangeSupported=!k.disableRange,this._readableStream=null,this._readCapability=new M.PromiseCapability,this._headersCapability=new M.PromiseCapability}get headersReady(){return this._headersCapability.promise}get filename(){return this._filename}get contentLength(){return this._contentLength}get isRangeSupported(){return this._isRangeSupported}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var I;if(yield this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const k=this._readableStream.read();return k===null?(this._readCapability=new M.PromiseCapability,this.read()):(this._loaded+=k.length,(I=this.onProgress)==null||I.call(this,{loaded:this._loaded,total:this._contentLength}),{value:new Uint8Array(k).buffer,done:!1})})}cancel(I){if(!this._readableStream){this._error(I);return}this._readableStream.destroy(I)}_error(I){this._storedError=I,this._readCapability.resolve()}_setReadableStream(I){this._readableStream=I,I.on("readable",()=>{this._readCapability.resolve()}),I.on("end",()=>{I.destroy(),this._done=!0,this._readCapability.resolve()}),I.on("error",k=>{this._error(k)}),!this._isStreamingSupported&&this._isRangeSupported&&this._error(new M.AbortException("streaming is disabled")),this._storedError&&this._readableStream.destroy(this._storedError)}}class L{constructor(I){this._url=I.url,this._done=!1,this._storedError=null,this.onProgress=null,this._loaded=0,this._readableStream=null,this._readCapability=new M.PromiseCapability;const k=I.source;this._isStreamingSupported=!k.disableStream}get isStreamingSupported(){return this._isStreamingSupported}read(){return Sl(this,null,function*(){var I;if(yield this._readCapability.promise,this._done)return{value:void 0,done:!0};if(this._storedError)throw this._storedError;const k=this._readableStream.read();return k===null?(this._readCapability=new M.PromiseCapability,this.read()):(this._loaded+=k.length,(I=this.onProgress)==null||I.call(this,{loaded:this._loaded}),{value:new Uint8Array(k).buffer,done:!1})})}cancel(I){if(!this._readableStream){this._error(I);return}this._readableStream.destroy(I)}_error(I){this._storedError=I,this._readCapability.resolve()}_setReadableStream(I){this._readableStream=I,I.on("readable",()=>{this._readCapability.resolve()}),I.on("end",()=>{I.destroy(),this._done=!0,this._readCapability.resolve()}),I.on("error",k=>{this._error(k)}),this._storedError&&this._readableStream.destroy(this._storedError)}}function g(j,I){return{protocol:j.protocol,auth:j.auth,host:j.hostname,port:j.port,path:j.path,method:"GET",headers:I}}class q extends F{constructor(I){super(I);const k=C=>{if(C.statusCode===404){const m=new M.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=m,this._headersCapability.reject(m);return}this._headersCapability.resolve(),this._setReadableStream(C);const U=m=>this._readableStream.headers[m.toLowerCase()],{allowRangeRequests:K,suggestedLength:u}=(0,p.validateRangeRequestCapabilities)({getResponseHeader:U,isHttp:I.isHttp,rangeChunkSize:this._rangeChunkSize,disableRange:this._disableRange});this._isRangeSupported=K,this._contentLength=u||this._contentLength,this._filename=(0,p.extractFilenameFromHeader)(U)};if(this._request=null,this._url.protocol==="http:"){const C=require$$6;this._request=C.request(g(this._url,I.httpHeaders),k)}else{const C=require$$6;this._request=C.request(g(this._url,I.httpHeaders),k)}this._request.on("error",C=>{this._storedError=C,this._headersCapability.reject(C)}),this._request.end()}}class v extends L{constructor(I,k,C){super(I),this._httpHeaders={};for(const K in I.httpHeaders){const u=I.httpHeaders[K];u!==void 0&&(this._httpHeaders[K]=u)}this._httpHeaders.Range=`bytes=${k}-${C-1}`;const U=K=>{if(K.statusCode===404){const u=new M.MissingPDFException(`Missing PDF "${this._url}".`);this._storedError=u;return}this._setReadableStream(K)};if(this._request=null,this._url.protocol==="http:"){const K=require$$6;this._request=K.request(g(this._url,this._httpHeaders),U)}else{const K=require$$6;this._request=K.request(g(this._url,this._httpHeaders),U)}this._request.on("error",K=>{this._storedError=K}),this._request.end()}}class Q extends F{constructor(I){super(I);let k=decodeURIComponent(this._url.path);f.test(this._url.href)&&(k=k.replace(/^\//,""));const C=require$$6;C.lstat(k,(U,K)=>{if(U){U.code==="ENOENT"&&(U=new M.MissingPDFException(`Missing PDF "${k}".`)),this._storedError=U,this._headersCapability.reject(U);return}this._contentLength=K.size,this._setReadableStream(C.createReadStream(k)),this._headersCapability.resolve()})}}class R extends L{constructor(I,k,C){super(I);let U=decodeURIComponent(this._url.path);f.test(this._url.href)&&(U=U.replace(/^\//,""));const K=require$$6;this._setReadableStream(K.createReadStream(U,{start:k,end:C-1}))}}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.SVGGraphics=void 0,h(84),h(86),h(87),h(93),h(101),h(102),h(105),h(107),h(109),h(113),h(116),h(123),h(2),h(89),h(187);var M=h(168),p=h(1);const f={fontStyle:"normal",fontWeight:"normal",fillColor:"#000000"},B="http://www.w3.org/XML/1998/namespace",O="http://www.w3.org/1999/xlink",F=["butt","round","square"],L=["miter","round","bevel"],g=function(K){let u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"",m=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(URL.createObjectURL&&typeof Blob<"u"&&!m)return URL.createObjectURL(new Blob([K],{type:u}));const _="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";let $=`data:${u};base64,`;for(let P=0,Zt=K.length;P<Zt;P+=3){const dt=K[P]&255,It=K[P+1]&255,xt=K[P+2]&255,it=dt>>2,Nt=(dt&3)<<4|It>>4,zt=P+1<Zt?(It&15)<<2|xt>>6:64,Gt=P+2<Zt?xt&63:64;$+=_[it]+_[Nt]+_[zt]+_[Gt]}return $},q=function(){const K=new Uint8Array([137,80,78,71,13,10,26,10]),u=12,m=new Int32Array(256);for(let xt=0;xt<256;xt++){let it=xt;for(let Nt=0;Nt<8;Nt++)it=it&1?3988292384^it>>1&2147483647:it>>1&2147483647;m[xt]=it}function _(xt,it,Nt){let zt=-1;for(let Gt=it;Gt<Nt;Gt++){const Xt=(zt^xt[Gt])&255,Ut=m[Xt];zt=zt>>>8^Ut}return zt^-1}function $(xt,it,Nt,zt){let Gt=zt;const Xt=it.length;Nt[Gt]=Xt>>24&255,Nt[Gt+1]=Xt>>16&255,Nt[Gt+2]=Xt>>8&255,Nt[Gt+3]=Xt&255,Gt+=4,Nt[Gt]=xt.charCodeAt(0)&255,Nt[Gt+1]=xt.charCodeAt(1)&255,Nt[Gt+2]=xt.charCodeAt(2)&255,Nt[Gt+3]=xt.charCodeAt(3)&255,Gt+=4,Nt.set(it,Gt),Gt+=it.length;const Ut=_(Nt,zt+4,Gt);Nt[Gt]=Ut>>24&255,Nt[Gt+1]=Ut>>16&255,Nt[Gt+2]=Ut>>8&255,Nt[Gt+3]=Ut&255}function P(xt,it,Nt){let zt=1,Gt=0;for(let Xt=it;Xt<Nt;++Xt)zt=(zt+(xt[Xt]&255))%65521,Gt=(Gt+zt)%65521;return Gt<<16|zt}function Zt(xt){if(!p.isNodeJS)return dt(xt);try{const it=parseInt(process.versions.node)>=8?xt:Buffer.from(xt),Nt=require$$6.deflateSync(it,{level:9});return Nt instanceof Uint8Array?Nt:new Uint8Array(Nt)}catch(it){(0,p.warn)("Not compressing PNG because zlib.deflateSync is unavailable: "+it)}return dt(xt)}function dt(xt){let it=xt.length;const Nt=65535,zt=Math.ceil(it/Nt),Gt=new Uint8Array(2+it+zt*5+4);let Xt=0;Gt[Xt++]=120,Gt[Xt++]=156;let Ut=0;for(;it>Nt;)Gt[Xt++]=0,Gt[Xt++]=255,Gt[Xt++]=255,Gt[Xt++]=0,Gt[Xt++]=0,Gt.set(xt.subarray(Ut,Ut+Nt),Xt),Xt+=Nt,Ut+=Nt,it-=Nt;Gt[Xt++]=1,Gt[Xt++]=it&255,Gt[Xt++]=it>>8&255,Gt[Xt++]=~it&65535&255,Gt[Xt++]=(~it&65535)>>8&255,Gt.set(xt.subarray(Ut),Xt),Xt+=xt.length-Ut;const Vt=P(xt,0,xt.length);return Gt[Xt++]=Vt>>24&255,Gt[Xt++]=Vt>>16&255,Gt[Xt++]=Vt>>8&255,Gt[Xt++]=Vt&255,Gt}function It(xt,it,Nt,zt){const Gt=xt.width,Xt=xt.height;let Ut,Vt,Ht;const Pt=xt.data;switch(it){case p.ImageKind.GRAYSCALE_1BPP:Vt=0,Ut=1,Ht=Gt+7>>3;break;case p.ImageKind.RGB_24BPP:Vt=2,Ut=8,Ht=Gt*3;break;case p.ImageKind.RGBA_32BPP:Vt=6,Ut=8,Ht=Gt*4;break;default:throw new Error("invalid format")}const at=new Uint8Array((1+Ht)*Xt);let S=0,w=0;for(let Mt=0;Mt<Xt;++Mt)at[S++]=0,at.set(Pt.subarray(w,w+Ht),S),w+=Ht,S+=Ht;if(it===p.ImageKind.GRAYSCALE_1BPP&&zt){S=0;for(let Mt=0;Mt<Xt;Mt++){S++;for(let Rt=0;Rt<Ht;Rt++)at[S++]^=255}}const X=new Uint8Array([Gt>>24&255,Gt>>16&255,Gt>>8&255,Gt&255,Xt>>24&255,Xt>>16&255,Xt>>8&255,Xt&255,Ut,Vt,0,0,0]),J=Zt(at),H=K.length+u*3+X.length+J.length,et=new Uint8Array(H);let lt=0;return et.set(K,lt),lt+=K.length,$("IHDR",X,et,lt),lt+=u+X.length,$("IDATA",J,et,lt),lt+=u+J.length,$("IEND",new Uint8Array(0),et,lt),g(et,"image/png",Nt)}return function(xt,it,Nt){const zt=xt.kind===void 0?p.ImageKind.GRAYSCALE_1BPP:xt.kind;return It(xt,zt,it,Nt)}}();class v{constructor(){this.fontSizeScale=1,this.fontWeight=f.fontWeight,this.fontSize=0,this.textMatrix=p.IDENTITY_MATRIX,this.fontMatrix=p.FONT_IDENTITY_MATRIX,this.leading=0,this.textRenderingMode=p.TextRenderingMode.FILL,this.textMatrixScale=1,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=f.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.activeClipUrl=null,this.clipGroup=null,this.maskId=""}clone(){return Object.create(this)}setCurrentPoint(u,m){this.x=u,this.y=m}}function Q(K){let u=[];const m=[];for(const _ of K){if(_.fn==="save"){u.push({fnId:92,fn:"group",items:[]}),m.push(u),u=u.at(-1).items;continue}_.fn==="restore"?u=m.pop():u.push(_)}return u}function R(K){if(Number.isInteger(K))return K.toString();const u=K.toFixed(10);let m=u.length-1;if(u[m]!=="0")return u;do m--;while(u[m]==="0");return u.substring(0,u[m]==="."?m:m+1)}function j(K){if(K[4]===0&&K[5]===0){if(K[1]===0&&K[2]===0)return K[0]===1&&K[3]===1?"":`scale(${R(K[0])} ${R(K[3])})`;if(K[0]===K[3]&&K[1]===-K[2]){const u=Math.acos(K[0])*180/Math.PI;return`rotate(${R(u)})`}}else if(K[0]===1&&K[1]===0&&K[2]===0&&K[3]===1)return`translate(${R(K[4])} ${R(K[5])})`;return`matrix(${R(K[0])} ${R(K[1])} ${R(K[2])} ${R(K[3])} ${R(K[4])} ${R(K[5])})`}let I=0,k=0,C=0;class U{constructor(u,m){let _=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;(0,M.deprecated)("The SVG back-end is no longer maintained and *may* be removed in the future."),this.svgFactory=new M.DOMSVGFactory,this.current=new v,this.transformMatrix=p.IDENTITY_MATRIX,this.transformStack=[],this.extraStack=[],this.commonObjs=u,this.objs=m,this.pendingClip=null,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts=Object.create(null),this.cssStyle=null,this.forceDataSchema=!!_,this._operatorIdMapping=[];for(const $ in p.OPS)this._operatorIdMapping[p.OPS[$]]=$}getObject(u){let m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return typeof u=="string"?u.startsWith("g_")?this.commonObjs.get(u):this.objs.get(u):m}save(){this.transformStack.push(this.transformMatrix);const u=this.current;this.extraStack.push(u),this.current=u.clone()}restore(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.pendingClip=null,this.tgrp=null}group(u){this.save(),this.executeOpTree(u),this.restore()}loadDependencies(u){const m=u.fnArray,_=u.argsArray;for(let $=0,P=m.length;$<P;$++)if(m[$]===p.OPS.dependency)for(const Zt of _[$]){const dt=Zt.startsWith("g_")?this.commonObjs:this.objs,It=new Promise(xt=>{dt.get(Zt,xt)});this.current.dependencies.push(It)}return Promise.all(this.current.dependencies)}transform(u,m,_,$,P,Zt){const dt=[u,m,_,$,P,Zt];this.transformMatrix=p.Util.transform(this.transformMatrix,dt),this.tgrp=null}getSVG(u,m){this.viewport=m;const _=this._initialize(m);return this.loadDependencies(u).then(()=>(this.transformMatrix=p.IDENTITY_MATRIX,this.executeOpTree(this.convertOpList(u)),_))}convertOpList(u){const m=this._operatorIdMapping,_=u.argsArray,$=u.fnArray,P=[];for(let Zt=0,dt=$.length;Zt<dt;Zt++){const It=$[Zt];P.push({fnId:It,fn:m[It],args:_[Zt]})}return Q(P)}executeOpTree(u){for(const m of u){const _=m.fn,$=m.fnId,P=m.args;switch($|0){case p.OPS.beginText:this.beginText();break;case p.OPS.dependency:break;case p.OPS.setLeading:this.setLeading(P);break;case p.OPS.setLeadingMoveText:this.setLeadingMoveText(P[0],P[1]);break;case p.OPS.setFont:this.setFont(P);break;case p.OPS.showText:this.showText(P[0]);break;case p.OPS.showSpacedText:this.showText(P[0]);break;case p.OPS.endText:this.endText();break;case p.OPS.moveText:this.moveText(P[0],P[1]);break;case p.OPS.setCharSpacing:this.setCharSpacing(P[0]);break;case p.OPS.setWordSpacing:this.setWordSpacing(P[0]);break;case p.OPS.setHScale:this.setHScale(P[0]);break;case p.OPS.setTextMatrix:this.setTextMatrix(P[0],P[1],P[2],P[3],P[4],P[5]);break;case p.OPS.setTextRise:this.setTextRise(P[0]);break;case p.OPS.setTextRenderingMode:this.setTextRenderingMode(P[0]);break;case p.OPS.setLineWidth:this.setLineWidth(P[0]);break;case p.OPS.setLineJoin:this.setLineJoin(P[0]);break;case p.OPS.setLineCap:this.setLineCap(P[0]);break;case p.OPS.setMiterLimit:this.setMiterLimit(P[0]);break;case p.OPS.setFillRGBColor:this.setFillRGBColor(P[0],P[1],P[2]);break;case p.OPS.setStrokeRGBColor:this.setStrokeRGBColor(P[0],P[1],P[2]);break;case p.OPS.setStrokeColorN:this.setStrokeColorN(P);break;case p.OPS.setFillColorN:this.setFillColorN(P);break;case p.OPS.shadingFill:this.shadingFill(P[0]);break;case p.OPS.setDash:this.setDash(P[0],P[1]);break;case p.OPS.setRenderingIntent:this.setRenderingIntent(P[0]);break;case p.OPS.setFlatness:this.setFlatness(P[0]);break;case p.OPS.setGState:this.setGState(P[0]);break;case p.OPS.fill:this.fill();break;case p.OPS.eoFill:this.eoFill();break;case p.OPS.stroke:this.stroke();break;case p.OPS.fillStroke:this.fillStroke();break;case p.OPS.eoFillStroke:this.eoFillStroke();break;case p.OPS.clip:this.clip("nonzero");break;case p.OPS.eoClip:this.clip("evenodd");break;case p.OPS.paintSolidColorImageMask:this.paintSolidColorImageMask();break;case p.OPS.paintImageXObject:this.paintImageXObject(P[0]);break;case p.OPS.paintInlineImageXObject:this.paintInlineImageXObject(P[0]);break;case p.OPS.paintImageMaskXObject:this.paintImageMaskXObject(P[0]);break;case p.OPS.paintFormXObjectBegin:this.paintFormXObjectBegin(P[0],P[1]);break;case p.OPS.paintFormXObjectEnd:this.paintFormXObjectEnd();break;case p.OPS.closePath:this.closePath();break;case p.OPS.closeStroke:this.closeStroke();break;case p.OPS.closeFillStroke:this.closeFillStroke();break;case p.OPS.closeEOFillStroke:this.closeEOFillStroke();break;case p.OPS.nextLine:this.nextLine();break;case p.OPS.transform:this.transform(P[0],P[1],P[2],P[3],P[4],P[5]);break;case p.OPS.constructPath:this.constructPath(P[0],P[1]);break;case p.OPS.endPath:this.endPath();break;case 92:this.group(m.items);break;default:(0,p.warn)(`Unimplemented operator ${_}`);break}}}setWordSpacing(u){this.current.wordSpacing=u}setCharSpacing(u){this.current.charSpacing=u}nextLine(){this.moveText(0,this.current.leading)}setTextMatrix(u,m,_,$,P,Zt){const dt=this.current;dt.textMatrix=dt.lineMatrix=[u,m,_,$,P,Zt],dt.textMatrixScale=Math.hypot(u,m),dt.x=dt.lineX=0,dt.y=dt.lineY=0,dt.xcoords=[],dt.ycoords=[],dt.tspan=this.svgFactory.createElement("svg:tspan"),dt.tspan.setAttributeNS(null,"font-family",dt.fontFamily),dt.tspan.setAttributeNS(null,"font-size",`${R(dt.fontSize)}px`),dt.tspan.setAttributeNS(null,"y",R(-dt.y)),dt.txtElement=this.svgFactory.createElement("svg:text"),dt.txtElement.append(dt.tspan)}beginText(){const u=this.current;u.x=u.lineX=0,u.y=u.lineY=0,u.textMatrix=p.IDENTITY_MATRIX,u.lineMatrix=p.IDENTITY_MATRIX,u.textMatrixScale=1,u.tspan=this.svgFactory.createElement("svg:tspan"),u.txtElement=this.svgFactory.createElement("svg:text"),u.txtgrp=this.svgFactory.createElement("svg:g"),u.xcoords=[],u.ycoords=[]}moveText(u,m){const _=this.current;_.x=_.lineX+=u,_.y=_.lineY+=m,_.xcoords=[],_.ycoords=[],_.tspan=this.svgFactory.createElement("svg:tspan"),_.tspan.setAttributeNS(null,"font-family",_.fontFamily),_.tspan.setAttributeNS(null,"font-size",`${R(_.fontSize)}px`),_.tspan.setAttributeNS(null,"y",R(-_.y))}showText(u){const m=this.current,_=m.font,$=m.fontSize;if($===0)return;const P=m.fontSizeScale,Zt=m.charSpacing,dt=m.wordSpacing,It=m.fontDirection,xt=m.textHScale*It,it=_.vertical,Nt=it?1:-1,zt=_.defaultVMetrics,Gt=$*m.fontMatrix[0];let Xt=0;for(const Ht of u){if(Ht===null){Xt+=It*dt;continue}else if(typeof Ht=="number"){Xt+=Nt*Ht*$/1e3;continue}const Pt=(Ht.isSpace?dt:0)+Zt,at=Ht.fontChar;let S,w,X=Ht.width;if(it){let H;const et=Ht.vmetric||zt;H=Ht.vmetric?et[1]:X*.5,H=-H*Gt;const lt=et[2]*Gt;X=et?-et[0]:X,S=H/P,w=(Xt+lt)/P}else S=Xt/P,w=0;(Ht.isInFont||_.missingFile)&&(m.xcoords.push(m.x+S),it&&m.ycoords.push(-m.y+w),m.tspan.textContent+=at);const J=it?X*Gt-Pt*It:X*Gt+Pt*It;Xt+=J}m.tspan.setAttributeNS(null,"x",m.xcoords.map(R).join(" ")),it?m.tspan.setAttributeNS(null,"y",m.ycoords.map(R).join(" ")):m.tspan.setAttributeNS(null,"y",R(-m.y)),it?m.y-=Xt:m.x+=Xt*xt,m.tspan.setAttributeNS(null,"font-family",m.fontFamily),m.tspan.setAttributeNS(null,"font-size",`${R(m.fontSize)}px`),m.fontStyle!==f.fontStyle&&m.tspan.setAttributeNS(null,"font-style",m.fontStyle),m.fontWeight!==f.fontWeight&&m.tspan.setAttributeNS(null,"font-weight",m.fontWeight);const Ut=m.textRenderingMode&p.TextRenderingMode.FILL_STROKE_MASK;if(Ut===p.TextRenderingMode.FILL||Ut===p.TextRenderingMode.FILL_STROKE?(m.fillColor!==f.fillColor&&m.tspan.setAttributeNS(null,"fill",m.fillColor),m.fillAlpha<1&&m.tspan.setAttributeNS(null,"fill-opacity",m.fillAlpha)):m.textRenderingMode===p.TextRenderingMode.ADD_TO_PATH?m.tspan.setAttributeNS(null,"fill","transparent"):m.tspan.setAttributeNS(null,"fill","none"),Ut===p.TextRenderingMode.STROKE||Ut===p.TextRenderingMode.FILL_STROKE){const Ht=1/(m.textMatrixScale||1);this._setStrokeAttributes(m.tspan,Ht)}let Vt=m.textMatrix;m.textRise!==0&&(Vt=Vt.slice(),Vt[5]+=m.textRise),m.txtElement.setAttributeNS(null,"transform",`${j(Vt)} scale(${R(xt)}, -1)`),m.txtElement.setAttributeNS(B,"xml:space","preserve"),m.txtElement.append(m.tspan),m.txtgrp.append(m.txtElement),this._ensureTransformGroup().append(m.txtElement)}setLeadingMoveText(u,m){this.setLeading(-m),this.moveText(u,m)}addFontStyle(u){if(!u.data)throw new Error('addFontStyle: No font data available, ensure that the "fontExtraProperties" API parameter is set.');this.cssStyle||(this.cssStyle=this.svgFactory.createElement("svg:style"),this.cssStyle.setAttributeNS(null,"type","text/css"),this.defs.append(this.cssStyle));const m=g(u.data,u.mimetype,this.forceDataSchema);this.cssStyle.textContent+=`@font-face { font-family: "${u.loadedName}"; src: url(${m}); }
|
||
`}setFont(u){const m=this.current,_=this.commonObjs.get(u[0]);let $=u[1];m.font=_,this.embedFonts&&!_.missingFile&&!this.embeddedFonts[_.loadedName]&&(this.addFontStyle(_),this.embeddedFonts[_.loadedName]=_),m.fontMatrix=_.fontMatrix||p.FONT_IDENTITY_MATRIX;let P="normal";_.black?P="900":_.bold&&(P="bold");const Zt=_.italic?"italic":"normal";$<0?($=-$,m.fontDirection=-1):m.fontDirection=1,m.fontSize=$,m.fontFamily=_.loadedName,m.fontWeight=P,m.fontStyle=Zt,m.tspan=this.svgFactory.createElement("svg:tspan"),m.tspan.setAttributeNS(null,"y",R(-m.y)),m.xcoords=[],m.ycoords=[]}endText(){var u;const m=this.current;m.textRenderingMode&p.TextRenderingMode.ADD_TO_PATH_FLAG&&(u=m.txtElement)!=null&&u.hasChildNodes()&&(m.element=m.txtElement,this.clip("nonzero"),this.endPath())}setLineWidth(u){u>0&&(this.current.lineWidth=u)}setLineCap(u){this.current.lineCap=F[u]}setLineJoin(u){this.current.lineJoin=L[u]}setMiterLimit(u){this.current.miterLimit=u}setStrokeAlpha(u){this.current.strokeAlpha=u}setStrokeRGBColor(u,m,_){this.current.strokeColor=p.Util.makeHexColor(u,m,_)}setFillAlpha(u){this.current.fillAlpha=u}setFillRGBColor(u,m,_){this.current.fillColor=p.Util.makeHexColor(u,m,_),this.current.tspan=this.svgFactory.createElement("svg:tspan"),this.current.xcoords=[],this.current.ycoords=[]}setStrokeColorN(u){this.current.strokeColor=this._makeColorN_Pattern(u)}setFillColorN(u){this.current.fillColor=this._makeColorN_Pattern(u)}shadingFill(u){const{width:m,height:_}=this.viewport,$=p.Util.inverseTransform(this.transformMatrix),[P,Zt,dt,It]=p.Util.getAxialAlignedBoundingBox([0,0,m,_],$),xt=this.svgFactory.createElement("svg:rect");xt.setAttributeNS(null,"x",P),xt.setAttributeNS(null,"y",Zt),xt.setAttributeNS(null,"width",dt-P),xt.setAttributeNS(null,"height",It-Zt),xt.setAttributeNS(null,"fill",this._makeShadingPattern(u)),this.current.fillAlpha<1&&xt.setAttributeNS(null,"fill-opacity",this.current.fillAlpha),this._ensureTransformGroup().append(xt)}_makeColorN_Pattern(u){return u[0]==="TilingPattern"?this._makeTilingPattern(u):this._makeShadingPattern(u)}_makeTilingPattern(u){const m=u[1],_=u[2],$=u[3]||p.IDENTITY_MATRIX,[P,Zt,dt,It]=u[4],xt=u[5],it=u[6],Nt=u[7],zt=`shading${C++}`,[Gt,Xt,Ut,Vt]=p.Util.normalizeRect([...p.Util.applyTransform([P,Zt],$),...p.Util.applyTransform([dt,It],$)]),[Ht,Pt]=p.Util.singularValueDecompose2dScale($),at=xt*Ht,S=it*Pt,w=this.svgFactory.createElement("svg:pattern");w.setAttributeNS(null,"id",zt),w.setAttributeNS(null,"patternUnits","userSpaceOnUse"),w.setAttributeNS(null,"width",at),w.setAttributeNS(null,"height",S),w.setAttributeNS(null,"x",`${Gt}`),w.setAttributeNS(null,"y",`${Xt}`);const X=this.svg,J=this.transformMatrix,H=this.current.fillColor,et=this.current.strokeColor,lt=this.svgFactory.create(Ut-Gt,Vt-Xt);if(this.svg=lt,this.transformMatrix=$,Nt===2){const Mt=p.Util.makeHexColor(...m);this.current.fillColor=Mt,this.current.strokeColor=Mt}return this.executeOpTree(this.convertOpList(_)),this.svg=X,this.transformMatrix=J,this.current.fillColor=H,this.current.strokeColor=et,w.append(lt.childNodes[0]),this.defs.append(w),`url(#${zt})`}_makeShadingPattern(u){switch(typeof u=="string"&&(u=this.objs.get(u)),u[0]){case"RadialAxial":const m=`shading${C++}`,_=u[3];let $;switch(u[1]){case"axial":const P=u[4],Zt=u[5];$=this.svgFactory.createElement("svg:linearGradient"),$.setAttributeNS(null,"id",m),$.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),$.setAttributeNS(null,"x1",P[0]),$.setAttributeNS(null,"y1",P[1]),$.setAttributeNS(null,"x2",Zt[0]),$.setAttributeNS(null,"y2",Zt[1]);break;case"radial":const dt=u[4],It=u[5],xt=u[6],it=u[7];$=this.svgFactory.createElement("svg:radialGradient"),$.setAttributeNS(null,"id",m),$.setAttributeNS(null,"gradientUnits","userSpaceOnUse"),$.setAttributeNS(null,"cx",It[0]),$.setAttributeNS(null,"cy",It[1]),$.setAttributeNS(null,"r",it),$.setAttributeNS(null,"fx",dt[0]),$.setAttributeNS(null,"fy",dt[1]),$.setAttributeNS(null,"fr",xt);break;default:throw new Error(`Unknown RadialAxial type: ${u[1]}`)}for(const P of _){const Zt=this.svgFactory.createElement("svg:stop");Zt.setAttributeNS(null,"offset",P[0]),Zt.setAttributeNS(null,"stop-color",P[1]),$.append(Zt)}return this.defs.append($),`url(#${m})`;case"Mesh":return(0,p.warn)("Unimplemented pattern Mesh"),null;case"Dummy":return"hotpink";default:throw new Error(`Unknown IR type: ${u[0]}`)}}setDash(u,m){this.current.dashArray=u,this.current.dashPhase=m}constructPath(u,m){const _=this.current;let $=_.x,P=_.y,Zt=[],dt=0;for(const It of u)switch(It|0){case p.OPS.rectangle:$=m[dt++],P=m[dt++];const xt=m[dt++],it=m[dt++],Nt=$+xt,zt=P+it;Zt.push("M",R($),R(P),"L",R(Nt),R(P),"L",R(Nt),R(zt),"L",R($),R(zt),"Z");break;case p.OPS.moveTo:$=m[dt++],P=m[dt++],Zt.push("M",R($),R(P));break;case p.OPS.lineTo:$=m[dt++],P=m[dt++],Zt.push("L",R($),R(P));break;case p.OPS.curveTo:$=m[dt+4],P=m[dt+5],Zt.push("C",R(m[dt]),R(m[dt+1]),R(m[dt+2]),R(m[dt+3]),R($),R(P)),dt+=6;break;case p.OPS.curveTo2:Zt.push("C",R($),R(P),R(m[dt]),R(m[dt+1]),R(m[dt+2]),R(m[dt+3])),$=m[dt+2],P=m[dt+3],dt+=4;break;case p.OPS.curveTo3:$=m[dt+2],P=m[dt+3],Zt.push("C",R(m[dt]),R(m[dt+1]),R($),R(P),R($),R(P)),dt+=4;break;case p.OPS.closePath:Zt.push("Z");break}Zt=Zt.join(" "),_.path&&u.length>0&&u[0]!==p.OPS.rectangle&&u[0]!==p.OPS.moveTo?Zt=_.path.getAttributeNS(null,"d")+Zt:(_.path=this.svgFactory.createElement("svg:path"),this._ensureTransformGroup().append(_.path)),_.path.setAttributeNS(null,"d",Zt),_.path.setAttributeNS(null,"fill","none"),_.element=_.path,_.setCurrentPoint($,P)}endPath(){const u=this.current;if(u.path=null,!this.pendingClip)return;if(!u.element){this.pendingClip=null;return}const m=`clippath${I++}`,_=this.svgFactory.createElement("svg:clipPath");_.setAttributeNS(null,"id",m),_.setAttributeNS(null,"transform",j(this.transformMatrix));const $=u.element.cloneNode(!0);if(this.pendingClip==="evenodd"?$.setAttributeNS(null,"clip-rule","evenodd"):$.setAttributeNS(null,"clip-rule","nonzero"),this.pendingClip=null,_.append($),this.defs.append(_),u.activeClipUrl){u.clipGroup=null;for(const P of this.extraStack)P.clipGroup=null;_.setAttributeNS(null,"clip-path",u.activeClipUrl)}u.activeClipUrl=`url(#${m})`,this.tgrp=null}clip(u){this.pendingClip=u}closePath(){const u=this.current;if(u.path){const m=`${u.path.getAttributeNS(null,"d")}Z`;u.path.setAttributeNS(null,"d",m)}}setLeading(u){this.current.leading=-u}setTextRise(u){this.current.textRise=u}setTextRenderingMode(u){this.current.textRenderingMode=u}setHScale(u){this.current.textHScale=u/100}setRenderingIntent(u){}setFlatness(u){}setGState(u){for(const[m,_]of u)switch(m){case"LW":this.setLineWidth(_);break;case"LC":this.setLineCap(_);break;case"LJ":this.setLineJoin(_);break;case"ML":this.setMiterLimit(_);break;case"D":this.setDash(_[0],_[1]);break;case"RI":this.setRenderingIntent(_);break;case"FL":this.setFlatness(_);break;case"Font":this.setFont(_);break;case"CA":this.setStrokeAlpha(_);break;case"ca":this.setFillAlpha(_);break;default:(0,p.warn)(`Unimplemented graphic state operator ${m}`);break}}fill(){const u=this.current;u.element&&(u.element.setAttributeNS(null,"fill",u.fillColor),u.element.setAttributeNS(null,"fill-opacity",u.fillAlpha),this.endPath())}stroke(){const u=this.current;u.element&&(this._setStrokeAttributes(u.element),u.element.setAttributeNS(null,"fill","none"),this.endPath())}_setStrokeAttributes(u){let m=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;const _=this.current;let $=_.dashArray;m!==1&&$.length>0&&($=$.map(function(P){return m*P})),u.setAttributeNS(null,"stroke",_.strokeColor),u.setAttributeNS(null,"stroke-opacity",_.strokeAlpha),u.setAttributeNS(null,"stroke-miterlimit",R(_.miterLimit)),u.setAttributeNS(null,"stroke-linecap",_.lineCap),u.setAttributeNS(null,"stroke-linejoin",_.lineJoin),u.setAttributeNS(null,"stroke-width",R(m*_.lineWidth)+"px"),u.setAttributeNS(null,"stroke-dasharray",$.map(R).join(" ")),u.setAttributeNS(null,"stroke-dashoffset",R(m*_.dashPhase)+"px")}eoFill(){var u;(u=this.current.element)==null||u.setAttributeNS(null,"fill-rule","evenodd"),this.fill()}fillStroke(){this.stroke(),this.fill()}eoFillStroke(){var u;(u=this.current.element)==null||u.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()}closeStroke(){this.closePath(),this.stroke()}closeFillStroke(){this.closePath(),this.fillStroke()}closeEOFillStroke(){this.closePath(),this.eoFillStroke()}paintSolidColorImageMask(){const u=this.svgFactory.createElement("svg:rect");u.setAttributeNS(null,"x","0"),u.setAttributeNS(null,"y","0"),u.setAttributeNS(null,"width","1px"),u.setAttributeNS(null,"height","1px"),u.setAttributeNS(null,"fill",this.current.fillColor),this._ensureTransformGroup().append(u)}paintImageXObject(u){const m=this.getObject(u);if(!m){(0,p.warn)(`Dependent image with object ID ${u} is not ready yet`);return}this.paintInlineImageXObject(m)}paintInlineImageXObject(u,m){const _=u.width,$=u.height,P=q(u,this.forceDataSchema,!!m),Zt=this.svgFactory.createElement("svg:rect");Zt.setAttributeNS(null,"x","0"),Zt.setAttributeNS(null,"y","0"),Zt.setAttributeNS(null,"width",R(_)),Zt.setAttributeNS(null,"height",R($)),this.current.element=Zt,this.clip("nonzero");const dt=this.svgFactory.createElement("svg:image");dt.setAttributeNS(O,"xlink:href",P),dt.setAttributeNS(null,"x","0"),dt.setAttributeNS(null,"y",R(-$)),dt.setAttributeNS(null,"width",R(_)+"px"),dt.setAttributeNS(null,"height",R($)+"px"),dt.setAttributeNS(null,"transform",`scale(${R(1/_)} ${R(-1/$)})`),m?m.append(dt):this._ensureTransformGroup().append(dt)}paintImageMaskXObject(u){const m=this.getObject(u.data,u);if(m.bitmap){(0,p.warn)("paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the `isOffscreenCanvasSupported` API parameter is disabled.");return}const _=this.current,$=m.width,P=m.height,Zt=_.fillColor;_.maskId=`mask${k++}`;const dt=this.svgFactory.createElement("svg:mask");dt.setAttributeNS(null,"id",_.maskId);const It=this.svgFactory.createElement("svg:rect");It.setAttributeNS(null,"x","0"),It.setAttributeNS(null,"y","0"),It.setAttributeNS(null,"width",R($)),It.setAttributeNS(null,"height",R(P)),It.setAttributeNS(null,"fill",Zt),It.setAttributeNS(null,"mask",`url(#${_.maskId})`),this.defs.append(dt),this._ensureTransformGroup().append(It),this.paintInlineImageXObject(m,dt)}paintFormXObjectBegin(u,m){if(Array.isArray(u)&&u.length===6&&this.transform(u[0],u[1],u[2],u[3],u[4],u[5]),m){const _=m[2]-m[0],$=m[3]-m[1],P=this.svgFactory.createElement("svg:rect");P.setAttributeNS(null,"x",m[0]),P.setAttributeNS(null,"y",m[1]),P.setAttributeNS(null,"width",R(_)),P.setAttributeNS(null,"height",R($)),this.current.element=P,this.clip("nonzero"),this.endPath()}}paintFormXObjectEnd(){}_initialize(u){const m=this.svgFactory.create(u.width,u.height),_=this.svgFactory.createElement("svg:defs");m.append(_),this.defs=_;const $=this.svgFactory.createElement("svg:g");return $.setAttributeNS(null,"transform",j(u.transform)),m.append($),this.svg=$,m}_ensureClipGroup(){if(!this.current.clipGroup){const u=this.svgFactory.createElement("svg:g");u.setAttributeNS(null,"clip-path",this.current.activeClipUrl),this.svg.append(u),this.current.clipGroup=u}return this.current.clipGroup}_ensureTransformGroup(){return this.tgrp||(this.tgrp=this.svgFactory.createElement("svg:g"),this.tgrp.setAttributeNS(null,"transform",j(this.transformMatrix)),this.current.activeClipUrl?this._ensureClipGroup().append(this.tgrp):this.svg.append(this.tgrp)),this.tgrp}}r.SVGGraphics=U},(st,r,h)=>{var M=h(3),p=h(188),f=h(193);M({target:"Array",proto:!0},{group:function(B){var O=arguments.length>1?arguments[1]:void 0;return p(this,B,O)}}),f("group")},(st,r,h)=>{var M=h(99),p=h(14),f=h(13),B=h(40),O=h(18),F=h(64),L=h(189),g=h(108),q=Array,v=p([].push);st.exports=function(Q,R,j,I){for(var k=B(Q),C=f(k),U=M(R,j),K=L(null),u=F(C),m=0,_,$,P;u>m;m++)P=C[m],$=O(U(P,m,k)),$ in K?v(K[$],P):K[$]=[P];if(I&&(_=I(k),_!==q))for($ in K)K[$]=g(_,K[$]);return K}},(st,r,h)=>{var M=h(47),p=h(190),f=h(66),B=h(55),O=h(192),F=h(43),L=h(54),g=">",q="<",v="prototype",Q="script",R=L("IE_PROTO"),j=function(){},I=function(u){return q+Q+g+u+q+"/"+Q+g},k=function(u){u.write(I("")),u.close();var m=u.parentWindow.Object;return u=null,m},C=function(){var u=F("iframe"),m="java"+Q+":",_;return u.style.display="none",O.appendChild(u),u.src=String(m),_=u.contentWindow.document,_.open(),_.write(I("document.F=Object")),_.close(),_.F},U,K=function(){try{U=new ActiveXObject("htmlfile")}catch(m){}K=typeof document<"u"?document.domain&&U?k(U):C():k(U);for(var u=f.length;u--;)delete K[v][f[u]];return K()};B[R]=!0,st.exports=Object.create||function(u,m){var _;return u!==null?(j[v]=M(u),_=new j,j[v]=null,_[R]=u):_=K(),m===void 0?_:p.f(_,m)}},(st,r,h)=>{var M=h(6),p=h(46),f=h(45),B=h(47),O=h(12),F=h(191);r.f=M&&!p?Object.defineProperties:function(L,g){B(L);for(var q=O(g),v=F(g),Q=v.length,R=0,j;Q>R;)f.f(L,j=v[R++],q[j]);return L}},(st,r,h)=>{var M=h(59),p=h(66);st.exports=Object.keys||function(f){return M(f,p)}},(st,r,h)=>{var M=h(24);st.exports=M("document","documentElement")},(st,r,h)=>{var M=h(34),p=h(189),f=h(45).f,B=M("unscopables"),O=Array.prototype;O[B]===void 0&&f(O,B,{configurable:!0,value:p(null)}),st.exports=function(F){O[B][F]=!0}},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.XfaText=void 0,h(89);class M{static textContent(f){const B=[],O={items:B,styles:Object.create(null)};function F(L){var g;if(!L)return;let q=null;const v=L.name;if(v==="#text")q=L.value;else if(M.shouldBuildText(v))(g=L==null?void 0:L.attributes)!=null&&g.textContent?q=L.attributes.textContent:L.value&&(q=L.value);else return;if(q!==null&&B.push({str:q}),!!L.children)for(const Q of L.children)F(Q)}return F(f),O}static shouldBuildText(f){return!(f==="textarea"||f==="input"||f==="option"||f==="select")}}r.XfaText=M},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.TextLayerRenderTask=void 0,r.renderTextLayer=j,r.updateTextLayer=I,h(89),h(2);var M=h(1),p=h(168);const f=1e5,B=30,O=.8,F=new Map;function L(k,C){let U;if(C&&M.FeatureTest.isOffscreenCanvasSupported)U=new OffscreenCanvas(k,k).getContext("2d",{alpha:!1});else{const K=document.createElement("canvas");K.width=K.height=k,U=K.getContext("2d",{alpha:!1})}return U}function g(k,C){const U=F.get(k);if(U)return U;const K=L(B,C);K.font=`${B}px ${k}`;const u=K.measureText("");let m=u.fontBoundingBoxAscent,_=Math.abs(u.fontBoundingBoxDescent);if(m){const P=m/(m+_);return F.set(k,P),K.canvas.width=K.canvas.height=0,P}K.strokeStyle="red",K.clearRect(0,0,B,B),K.strokeText("g",0,0);let $=K.getImageData(0,0,B,B).data;_=0;for(let P=$.length-1-3;P>=0;P-=4)if($[P]>0){_=Math.ceil(P/4/B);break}K.clearRect(0,0,B,B),K.strokeText("A",0,B),$=K.getImageData(0,0,B,B).data,m=0;for(let P=0,Zt=$.length;P<Zt;P+=4)if($[P]>0){m=B-Math.floor(P/4/B);break}if(K.canvas.width=K.canvas.height=0,m){const P=m/(m+_);return F.set(k,P),P}return F.set(k,O),O}function q(k,C,U){const K=document.createElement("span"),u={angle:0,canvasWidth:0,hasText:C.str!=="",hasEOL:C.hasEOL,fontSize:0};k._textDivs.push(K);const m=M.Util.transform(k._transform,C.transform);let _=Math.atan2(m[1],m[0]);const $=U[C.fontName];$.vertical&&(_+=Math.PI/2);const P=Math.hypot(m[2],m[3]),Zt=P*g($.fontFamily,k._isOffscreenCanvasSupported);let dt,It;_===0?(dt=m[4],It=m[5]-Zt):(dt=m[4]+Zt*Math.sin(_),It=m[5]-Zt*Math.cos(_));const xt="calc(var(--scale-factor)*",it=K.style;k._container===k._rootContainer?(it.left=`${(100*dt/k._pageWidth).toFixed(2)}%`,it.top=`${(100*It/k._pageHeight).toFixed(2)}%`):(it.left=`${xt}${dt.toFixed(2)}px)`,it.top=`${xt}${It.toFixed(2)}px)`),it.fontSize=`${xt}${P.toFixed(2)}px)`,it.fontFamily=$.fontFamily,u.fontSize=P,K.setAttribute("role","presentation"),K.textContent=C.str,K.dir=C.dir,k._fontInspectorEnabled&&(K.dataset.fontName=C.fontName),_!==0&&(u.angle=_*(180/Math.PI));let Nt=!1;if(C.str.length>1)Nt=!0;else if(C.str!==" "&&C.transform[0]!==C.transform[3]){const zt=Math.abs(C.transform[0]),Gt=Math.abs(C.transform[3]);zt!==Gt&&Math.max(zt,Gt)/Math.min(zt,Gt)>1.5&&(Nt=!0)}Nt&&(u.canvasWidth=$.vertical?C.height:C.width),k._textDivProperties.set(K,u),k._isReadableStream&&k._layoutText(K)}function v(k){const{div:C,scale:U,properties:K,ctx:u,prevFontSize:m,prevFontFamily:_}=k,{style:$}=C;let P="";if(K.canvasWidth!==0&&K.hasText){const{fontFamily:Zt}=$,{canvasWidth:dt,fontSize:It}=K;(m!==It||_!==Zt)&&(u.font=`${It*U}px ${Zt}`,k.prevFontSize=It,k.prevFontFamily=Zt);const{width:xt}=u.measureText(C.textContent);xt>0&&(P=`scaleX(${dt*U/xt})`)}K.angle!==0&&(P=`rotate(${K.angle}deg) ${P}`),P.length>0&&($.transform=P)}function Q(k){if(k._canceled)return;const C=k._textDivs,U=k._capability;if(C.length>f){U.resolve();return}if(!k._isReadableStream)for(const K of C)k._layoutText(K);U.resolve()}class R{constructor(C){var U;let{textContentSource:K,container:u,viewport:m,textDivs:_,textDivProperties:$,textContentItemsStr:P,isOffscreenCanvasSupported:Zt}=C;this._textContentSource=K,this._isReadableStream=K instanceof ReadableStream,this._container=this._rootContainer=u,this._textDivs=_||[],this._textContentItemsStr=P||[],this._isOffscreenCanvasSupported=Zt,this._fontInspectorEnabled=!!((U=globalThis.FontInspector)!=null&&U.enabled),this._reader=null,this._textDivProperties=$||new WeakMap,this._canceled=!1,this._capability=new M.PromiseCapability,this._layoutTextParams={prevFontSize:null,prevFontFamily:null,div:null,scale:m.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:L(0,Zt)};const{pageWidth:dt,pageHeight:It,pageX:xt,pageY:it}=m.rawDims;this._transform=[1,0,0,-1,-xt,it+It],this._pageWidth=dt,this._pageHeight=It,(0,p.setLayerDimensions)(u,m),this._capability.promise.finally(()=>{this._layoutTextParams=null}).catch(()=>{})}get promise(){return this._capability.promise}cancel(){this._canceled=!0,this._reader&&(this._reader.cancel(new M.AbortException("TextLayer task cancelled.")).catch(()=>{}),this._reader=null),this._capability.reject(new M.AbortException("TextLayer task cancelled."))}_processItems(C,U){for(const K of C){if(K.str===void 0){if(K.type==="beginMarkedContentProps"||K.type==="beginMarkedContent"){const u=this._container;this._container=document.createElement("span"),this._container.classList.add("markedContent"),K.id!==null&&this._container.setAttribute("id",`${K.id}`),u.append(this._container)}else K.type==="endMarkedContent"&&(this._container=this._container.parentNode);continue}this._textContentItemsStr.push(K.str),q(this,K,U)}}_layoutText(C){const U=this._layoutTextParams.properties=this._textDivProperties.get(C);if(this._layoutTextParams.div=C,v(this._layoutTextParams),U.hasText&&this._container.append(C),U.hasEOL){const K=document.createElement("br");K.setAttribute("role","presentation"),this._container.append(K)}}_render(){const C=new M.PromiseCapability;let U=Object.create(null);if(this._isReadableStream){const K=()=>{this._reader.read().then(u=>{let{value:m,done:_}=u;if(_){C.resolve();return}Object.assign(U,m.styles),this._processItems(m.items,U),K()},C.reject)};this._reader=this._textContentSource.getReader(),K()}else if(this._textContentSource){const{items:K,styles:u}=this._textContentSource;this._processItems(K,u),C.resolve()}else throw new Error('No "textContentSource" parameter specified.');C.promise.then(()=>{U=null,Q(this)},this._capability.reject)}}r.TextLayerRenderTask=R;function j(k){!k.textContentSource&&(k.textContent||k.textContentStream)&&((0,p.deprecated)("The TextLayerRender `textContent`/`textContentStream` parameters will be removed in the future, please use `textContentSource` instead."),k.textContentSource=k.textContent||k.textContentStream);const{container:C,viewport:U}=k,K=getComputedStyle(C),u=K.getPropertyValue("visibility"),m=parseFloat(K.getPropertyValue("--scale-factor"));u==="visible"&&(!m||Math.abs(m-U.scale)>1e-5)&&console.error("The `--scale-factor` CSS-variable must be set, to the same value as `viewport.scale`, either on the `container`-element itself or higher up in the DOM.");const _=new R(k);return _._render(),_}function I(k){let{container:C,viewport:U,textDivs:K,textDivProperties:u,isOffscreenCanvasSupported:m,mustRotate:_=!0,mustRescale:$=!0}=k;if(_&&(0,p.setLayerDimensions)(C,{rotation:U.rotation}),$){const P=L(0,m),Zt={prevFontSize:null,prevFontFamily:null,div:null,scale:U.scale*(globalThis.devicePixelRatio||1),properties:null,ctx:P};for(const dt of K)Zt.properties=u.get(dt),Zt.div=dt,v(Zt)}}},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K;Object.defineProperty(r,"__esModule",{value:!0}),r.AnnotationEditorLayer=void 0,h(125),h(136),h(138),h(141),h(143),h(145),h(147);var u=h(1),m=h(164),_=h(197),$=h(202),P=h(168),Zt=h(203);const dt=class as{constructor(it){E(this,Q),E(this,j),E(this,k),E(this,U),E(this,M,void 0),E(this,p,!1),E(this,f,null),E(this,B,this.pointerup.bind(this)),E(this,O,this.pointerdown.bind(this)),E(this,F,new Map),E(this,L,!1),E(this,g,!1),E(this,q,!1),E(this,v,void 0);let{uiManager:Nt,pageIndex:zt,div:Gt,accessibilityManager:Xt,annotationLayer:Ut,viewport:Vt,l10n:Ht}=it;const Pt=[_.FreeTextEditor,$.InkEditor,Zt.StampEditor];if(!as._initialized){as._initialized=!0;for(const at of Pt)at.initialize(Ht)}Nt.registerEditorTypes(Pt),Zl(this,v,Nt),this.pageIndex=zt,this.div=Gt,Zl(this,M,Xt),Zl(this,f,Ut),this.viewport=Vt,t(this,v).addLayer(this)}get isEmpty(){return t(this,F).size===0}updateToolbar(it){t(this,v).updateToolbar(it)}updateMode(){let it=arguments.length>0&&arguments[0]!==void 0?arguments[0]:t(this,v).getMode();A(this,U,K).call(this),it===u.AnnotationEditorType.INK?(this.addInkEditorIfNeeded(!1),this.disableClick()):this.enableClick(),it!==u.AnnotationEditorType.NONE&&(this.div.classList.toggle("freeTextEditing",it===u.AnnotationEditorType.FREETEXT),this.div.classList.toggle("inkEditing",it===u.AnnotationEditorType.INK),this.div.classList.toggle("stampEditing",it===u.AnnotationEditorType.STAMP),this.div.hidden=!1)}addInkEditorIfNeeded(it){if(!(!it&&t(this,v).getMode()!==u.AnnotationEditorType.INK)){if(!it){for(const Nt of t(this,F).values())if(Nt.isEmpty()){Nt.setInBackground();return}}A(this,j,I).call(this,{offsetX:0,offsetY:0},!1).setInBackground()}}setEditingState(it){t(this,v).setEditingState(it)}addCommands(it){t(this,v).addCommands(it)}enable(){this.div.style.pointerEvents="auto";const it=new Set;for(const zt of t(this,F).values())zt.enableEditing(),zt.annotationElementId&&it.add(zt.annotationElementId);if(!t(this,f))return;const Nt=t(this,f).getEditableAnnotations();for(const zt of Nt){if(zt.hide(),t(this,v).isDeletedAnnotationElement(zt.data.id)||it.has(zt.data.id))continue;const Gt=this.deserialize(zt);Gt&&(this.addOrRebuild(Gt),Gt.enableEditing())}}disable(){var it;Zl(this,q,!0),this.div.style.pointerEvents="none";const Nt=new Set;for(const zt of t(this,F).values()){if(zt.disableEditing(),!zt.annotationElementId||zt.serialize()!==null){Nt.add(zt.annotationElementId);continue}(it=this.getEditableAnnotation(zt.annotationElementId))==null||it.show(),zt.remove()}if(t(this,f)){const zt=t(this,f).getEditableAnnotations();for(const Gt of zt){const{id:Xt}=Gt.data;Nt.has(Xt)||t(this,v).isDeletedAnnotationElement(Xt)||Gt.show()}}A(this,U,K).call(this),this.isEmpty&&(this.div.hidden=!0),Zl(this,q,!1)}getEditableAnnotation(it){var Nt;return((Nt=t(this,f))==null?void 0:Nt.getEditableAnnotation(it))||null}setActiveEditor(it){t(this,v).getActive()!==it&&t(this,v).setActiveEditor(it)}enableClick(){this.div.addEventListener("pointerdown",t(this,O)),this.div.addEventListener("pointerup",t(this,B))}disableClick(){this.div.removeEventListener("pointerdown",t(this,O)),this.div.removeEventListener("pointerup",t(this,B))}attach(it){t(this,F).set(it.id,it);const{annotationElementId:Nt}=it;Nt&&t(this,v).isDeletedAnnotationElement(Nt)&&t(this,v).removeDeletedAnnotationElement(it)}detach(it){var Nt;t(this,F).delete(it.id),(Nt=t(this,M))==null||Nt.removePointerInTextLayer(it.contentDiv),!t(this,q)&&it.annotationElementId&&t(this,v).addDeletedAnnotationElement(it)}remove(it){this.detach(it),t(this,v).removeEditor(it),it.div.contains(document.activeElement)&&setTimeout(()=>{t(this,v).focusMainContainer()},0),it.div.remove(),it.isAttachedToDOM=!1,t(this,g)||this.addInkEditorIfNeeded(!1)}changeParent(it){var Nt;it.parent!==this&&(it.annotationElementId&&(t(this,v).addDeletedAnnotationElement(it.annotationElementId),m.AnnotationEditor.deleteAnnotationElement(it),it.annotationElementId=null),this.attach(it),(Nt=it.parent)==null||Nt.detach(it),it.setParent(this),it.div&&it.isAttachedToDOM&&(it.div.remove(),this.div.append(it.div)))}add(it){if(this.changeParent(it),t(this,v).addEditor(it),this.attach(it),!it.isAttachedToDOM){const Nt=it.render();this.div.append(Nt),it.isAttachedToDOM=!0}it.fixAndSetPosition(),it.onceAdded(),t(this,v).addToAnnotationStorage(it)}moveEditorInDOM(it){var Nt;if(!it.isAttachedToDOM)return;const{activeElement:zt}=document;it.div.contains(zt)&&(it._focusEventsAllowed=!1,setTimeout(()=>{it.div.contains(document.activeElement)?it._focusEventsAllowed=!0:(it.div.addEventListener("focusin",()=>{it._focusEventsAllowed=!0},{once:!0}),zt.focus())},0)),it._structTreeParentId=(Nt=t(this,M))==null?void 0:Nt.moveElementInDOM(this.div,it.div,it.contentDiv,!0)}addOrRebuild(it){it.needsToBeRebuilt()?it.rebuild():this.add(it)}addUndoableEditor(it){const Nt=()=>it._uiManager.rebuild(it),zt=()=>{it.remove()};this.addCommands({cmd:Nt,undo:zt,mustExec:!1})}getNextId(){return t(this,v).getId()}pasteEditor(it,Nt){t(this,v).updateToolbar(it),t(this,v).updateMode(it);const{offsetX:zt,offsetY:Gt}=A(this,k,C).call(this),Xt=this.getNextId(),Ut=A(this,Q,R).call(this,El({parent:this,id:Xt,x:zt,y:Gt,uiManager:t(this,v),isCentered:!0},Nt));Ut&&this.add(Ut)}deserialize(it){var Nt;switch((Nt=it.annotationType)!=null?Nt:it.annotationEditorType){case u.AnnotationEditorType.FREETEXT:return _.FreeTextEditor.deserialize(it,this,t(this,v));case u.AnnotationEditorType.INK:return $.InkEditor.deserialize(it,this,t(this,v));case u.AnnotationEditorType.STAMP:return Zt.StampEditor.deserialize(it,this,t(this,v))}return null}addNewEditor(){A(this,j,I).call(this,A(this,k,C).call(this),!0)}setSelected(it){t(this,v).setSelected(it)}toggleSelected(it){t(this,v).toggleSelected(it)}isSelected(it){return t(this,v).isSelected(it)}unselect(it){t(this,v).unselect(it)}pointerup(it){const{isMac:Nt}=u.FeatureTest.platform;if(!(it.button!==0||it.ctrlKey&&Nt)&&it.target===this.div&&t(this,L)){if(Zl(this,L,!1),!t(this,p)){Zl(this,p,!0);return}if(t(this,v).getMode()===u.AnnotationEditorType.STAMP){t(this,v).unselectAll();return}A(this,j,I).call(this,it,!1)}}pointerdown(it){if(t(this,L)){Zl(this,L,!1);return}const{isMac:Nt}=u.FeatureTest.platform;if(it.button!==0||it.ctrlKey&&Nt||it.target!==this.div)return;Zl(this,L,!0);const zt=t(this,v).getActive();Zl(this,p,!zt||zt.isEmpty())}findNewParent(it,Nt,zt){const Gt=t(this,v).findParent(Nt,zt);return Gt===null||Gt===this?!1:(Gt.changeParent(it),!0)}destroy(){var it,Nt;((it=t(this,v).getActive())==null?void 0:it.parent)===this&&(t(this,v).commitOrRemove(),t(this,v).setActiveEditor(null));for(const zt of t(this,F).values())(Nt=t(this,M))==null||Nt.removePointerInTextLayer(zt.contentDiv),zt.setParent(null),zt.isAttachedToDOM=!1,zt.div.remove();this.div=null,t(this,F).clear(),t(this,v).removeLayer(this)}render(it){let{viewport:Nt}=it;this.viewport=Nt,(0,P.setLayerDimensions)(this.div,Nt);for(const zt of t(this,v).getEditors(this.pageIndex))this.add(zt);this.updateMode()}update(it){let{viewport:Nt}=it;t(this,v).commitOrRemove(),this.viewport=Nt,(0,P.setLayerDimensions)(this.div,{rotation:Nt.rotation}),this.updateMode()}get pageDimensions(){const{pageWidth:it,pageHeight:Nt}=this.viewport.rawDims;return[it,Nt]}};M=new WeakMap,p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakMap,F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakSet,R=function(xt){switch(t(this,v).getMode()){case u.AnnotationEditorType.FREETEXT:return new _.FreeTextEditor(xt);case u.AnnotationEditorType.INK:return new $.InkEditor(xt);case u.AnnotationEditorType.STAMP:return new Zt.StampEditor(xt)}return null},j=new WeakSet,I=function(xt,it){const Nt=this.getNextId(),zt=A(this,Q,R).call(this,{parent:this,id:Nt,x:xt.offsetX,y:xt.offsetY,uiManager:t(this,v),isCentered:it});return zt&&this.add(zt),zt},k=new WeakSet,C=function(){const{x:xt,y:it,width:Nt,height:zt}=this.div.getBoundingClientRect(),Gt=Math.max(0,xt),Xt=Math.max(0,it),Ut=Math.min(window.innerWidth,xt+Nt),Vt=Math.min(window.innerHeight,it+zt),Ht=(Gt+Ut)/2-xt,Pt=(Xt+Vt)/2-it,[at,S]=this.viewport.rotation%180===0?[Ht,Pt]:[Pt,Ht];return{offsetX:at,offsetY:S}},U=new WeakSet,K=function(){Zl(this,g,!0);for(const xt of t(this,F).values())xt.isEmpty()&&xt.remove();Zl(this,g,!1)},tt(dt,"_initialized",!1);let It=dt;r.AnnotationEditorLayer=It},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P;Object.defineProperty(r,"__esModule",{value:!0}),r.FreeTextEditor=void 0,h(89);var Zt=h(1),dt=h(165),It=h(164),xt=h(198);const it=class Ul extends It.AnnotationEditor{constructor(Gt){super(vl(El({},Gt),{name:"freeTextEditor"})),E(this,v),E(this,R),E(this,I),E(this,C),E(this,K),E(this,m),E(this,$),E(this,M,this.editorDivBlur.bind(this)),E(this,p,this.editorDivFocus.bind(this)),E(this,f,this.editorDivInput.bind(this)),E(this,B,this.editorDivKeydown.bind(this)),E(this,O,void 0),E(this,F,""),E(this,L,`${this.id}-editor`),E(this,g,void 0),E(this,q,null),Zl(this,O,Gt.color||Ul._defaultColor||It.AnnotationEditor._defaultLineColor),Zl(this,g,Gt.fontSize||Ul._defaultFontSize)}static get _keyboardManager(){const Gt=Ul.prototype,Xt=Ht=>Ht.isEmpty(),Ut=dt.AnnotationEditorUIManager.TRANSLATE_SMALL,Vt=dt.AnnotationEditorUIManager.TRANSLATE_BIG;return(0,Zt.shadow)(this,"_keyboardManager",new dt.KeyboardManager([[["ctrl+s","mac+meta+s","ctrl+p","mac+meta+p"],Gt.commitOrRemove,{bubbles:!0}],[["ctrl+Enter","mac+meta+Enter","Escape","mac+Escape"],Gt.commitOrRemove],[["ArrowLeft","mac+ArrowLeft"],Gt._translateEmpty,{args:[-Ut,0],checker:Xt}],[["ctrl+ArrowLeft","mac+shift+ArrowLeft"],Gt._translateEmpty,{args:[-Vt,0],checker:Xt}],[["ArrowRight","mac+ArrowRight"],Gt._translateEmpty,{args:[Ut,0],checker:Xt}],[["ctrl+ArrowRight","mac+shift+ArrowRight"],Gt._translateEmpty,{args:[Vt,0],checker:Xt}],[["ArrowUp","mac+ArrowUp"],Gt._translateEmpty,{args:[0,-Ut],checker:Xt}],[["ctrl+ArrowUp","mac+shift+ArrowUp"],Gt._translateEmpty,{args:[0,-Vt],checker:Xt}],[["ArrowDown","mac+ArrowDown"],Gt._translateEmpty,{args:[0,Ut],checker:Xt}],[["ctrl+ArrowDown","mac+shift+ArrowDown"],Gt._translateEmpty,{args:[0,Vt],checker:Xt}]]))}static initialize(Gt){It.AnnotationEditor.initialize(Gt,{strings:["free_text2_default_content","editor_free_text2_aria_label"]});const Xt=getComputedStyle(document.documentElement);this._internalPadding=parseFloat(Xt.getPropertyValue("--freetext-padding"))}static updateDefaultParams(Gt,Xt){switch(Gt){case Zt.AnnotationEditorParamsType.FREETEXT_SIZE:Ul._defaultFontSize=Xt;break;case Zt.AnnotationEditorParamsType.FREETEXT_COLOR:Ul._defaultColor=Xt;break}}updateParams(Gt,Xt){switch(Gt){case Zt.AnnotationEditorParamsType.FREETEXT_SIZE:A(this,v,Q).call(this,Xt);break;case Zt.AnnotationEditorParamsType.FREETEXT_COLOR:A(this,R,j).call(this,Xt);break}}static get defaultPropertiesToUpdate(){return[[Zt.AnnotationEditorParamsType.FREETEXT_SIZE,Ul._defaultFontSize],[Zt.AnnotationEditorParamsType.FREETEXT_COLOR,Ul._defaultColor||It.AnnotationEditor._defaultLineColor]]}get propertiesToUpdate(){return[[Zt.AnnotationEditorParamsType.FREETEXT_SIZE,t(this,g)],[Zt.AnnotationEditorParamsType.FREETEXT_COLOR,t(this,O)]]}_translateEmpty(Gt,Xt){this._uiManager.translateSelectedEditors(Gt,Xt,!0)}getInitialTranslation(){const Gt=this.parentScale;return[-Ul._internalPadding*Gt,-(Ul._internalPadding+t(this,g))*Gt]}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(this.isAttachedToDOM||this.parent.add(this)))}enableEditMode(){this.isInEditMode()||(this.parent.setEditingState(!1),this.parent.updateToolbar(Zt.AnnotationEditorType.FREETEXT),super.enableEditMode(),this.overlayDiv.classList.remove("enabled"),this.editorDiv.contentEditable=!0,this._isDraggable=!1,this.div.removeAttribute("aria-activedescendant"),this.editorDiv.addEventListener("keydown",t(this,B)),this.editorDiv.addEventListener("focus",t(this,p)),this.editorDiv.addEventListener("blur",t(this,M)),this.editorDiv.addEventListener("input",t(this,f)))}disableEditMode(){this.isInEditMode()&&(this.parent.setEditingState(!0),super.disableEditMode(),this.overlayDiv.classList.add("enabled"),this.editorDiv.contentEditable=!1,this.div.setAttribute("aria-activedescendant",t(this,L)),this._isDraggable=!0,this.editorDiv.removeEventListener("keydown",t(this,B)),this.editorDiv.removeEventListener("focus",t(this,p)),this.editorDiv.removeEventListener("blur",t(this,M)),this.editorDiv.removeEventListener("input",t(this,f)),this.div.focus({preventScroll:!0}),this.isEditing=!1,this.parent.div.classList.add("freeTextEditing"))}focusin(Gt){this._focusEventsAllowed&&(super.focusin(Gt),Gt.target!==this.editorDiv&&this.editorDiv.focus())}onceAdded(){var Gt;if(this.width){A(this,$,P).call(this);return}this.enableEditMode(),this.editorDiv.focus(),(Gt=this._initialOptions)!=null&&Gt.isCentered&&this.center(),this._initialOptions=null}isEmpty(){return!this.editorDiv||this.editorDiv.innerText.trim()===""}remove(){this.isEditing=!1,this.parent&&(this.parent.setEditingState(!0),this.parent.div.classList.add("freeTextEditing")),super.remove()}commit(){if(!this.isInEditMode())return;super.commit(),this.disableEditMode();const Gt=t(this,F),Xt=Zl(this,F,A(this,I,k).call(this).trimEnd());if(Gt===Xt)return;const Ut=Vt=>{if(Zl(this,F,Vt),!Vt){this.remove();return}A(this,K,u).call(this),this._uiManager.rebuild(this),A(this,C,U).call(this)};this.addCommands({cmd:()=>{Ut(Xt)},undo:()=>{Ut(Gt)},mustExec:!1}),A(this,C,U).call(this)}shouldGetKeyboardEvents(){return this.isInEditMode()}enterInEditMode(){this.enableEditMode(),this.editorDiv.focus()}dblclick(Gt){this.enterInEditMode()}keydown(Gt){Gt.target===this.div&&Gt.key==="Enter"&&(this.enterInEditMode(),Gt.preventDefault())}editorDivKeydown(Gt){Ul._keyboardManager.exec(this,Gt)}editorDivFocus(Gt){this.isEditing=!0}editorDivBlur(Gt){this.isEditing=!1}editorDivInput(Gt){this.parent.div.classList.toggle("freeTextEditing",this.isEmpty())}disableEditing(){this.editorDiv.setAttribute("role","comment"),this.editorDiv.removeAttribute("aria-multiline")}enableEditing(){this.editorDiv.setAttribute("role","textbox"),this.editorDiv.setAttribute("aria-multiline",!0)}render(){if(this.div)return this.div;let Gt,Xt;this.width&&(Gt=this.x,Xt=this.y),super.render(),this.editorDiv=document.createElement("div"),this.editorDiv.className="internal",this.editorDiv.setAttribute("id",t(this,L)),this.enableEditing(),It.AnnotationEditor._l10nPromise.get("editor_free_text2_aria_label").then(Vt=>{var Ht;return(Ht=this.editorDiv)==null?void 0:Ht.setAttribute("aria-label",Vt)}),It.AnnotationEditor._l10nPromise.get("free_text2_default_content").then(Vt=>{var Ht;return(Ht=this.editorDiv)==null?void 0:Ht.setAttribute("default-content",Vt)}),this.editorDiv.contentEditable=!0;const{style:Ut}=this.editorDiv;if(Ut.fontSize=`calc(${t(this,g)}px * var(--scale-factor))`,Ut.color=t(this,O),this.div.append(this.editorDiv),this.overlayDiv=document.createElement("div"),this.overlayDiv.classList.add("overlay","enabled"),this.div.append(this.overlayDiv),(0,dt.bindEvents)(this,this.div,["dblclick","keydown"]),this.width){const[Vt,Ht]=this.parentDimensions;if(this.annotationElementId){const{position:Pt}=t(this,q);let[at,S]=this.getInitialTranslation();[at,S]=this.pageTranslationToScreen(at,S);const[w,X]=this.pageDimensions,[J,H]=this.pageTranslation;let et,lt;switch(this.rotation){case 0:et=Gt+(Pt[0]-J)/w,lt=Xt+this.height-(Pt[1]-H)/X;break;case 90:et=Gt+(Pt[0]-J)/w,lt=Xt-(Pt[1]-H)/X,[at,S]=[S,-at];break;case 180:et=Gt-this.width+(Pt[0]-J)/w,lt=Xt-(Pt[1]-H)/X,[at,S]=[-at,-S];break;case 270:et=Gt+(Pt[0]-J-this.height*X)/w,lt=Xt+(Pt[1]-H-this.width*w)/X,[at,S]=[-S,at];break}this.setAt(et*Vt,lt*Ht,at,S)}else this.setAt(Gt*Vt,Xt*Ht,this.width*Vt,this.height*Ht);A(this,K,u).call(this),this._isDraggable=!0,this.editorDiv.contentEditable=!1}else this._isDraggable=!1,this.editorDiv.contentEditable=!0;return this.div}get contentDiv(){return this.editorDiv}static deserialize(Gt,Xt,Ut){let Vt=null;if(Gt instanceof xt.FreeTextAnnotationElement){const{data:{defaultAppearanceData:{fontSize:Pt,fontColor:at},rect:S,rotation:w,id:X},textContent:J,textPosition:H,parent:{page:{pageNumber:et}}}=Gt;if(!J||J.length===0)return null;Vt=Gt={annotationType:Zt.AnnotationEditorType.FREETEXT,color:Array.from(at),fontSize:Pt,value:J.join(`
|
||
`),position:H,pageIndex:et-1,rect:S,rotation:w,id:X,deleted:!1}}const Ht=super.deserialize(Gt,Xt,Ut);return Zl(Ht,g,Gt.fontSize),Zl(Ht,O,Zt.Util.makeHexColor(...Gt.color)),Zl(Ht,F,Gt.value),Ht.annotationElementId=Gt.id||null,Zl(Ht,q,Vt),Ht}serialize(){let Gt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(this.isEmpty())return null;if(this.deleted)return{pageIndex:this.pageIndex,id:this.annotationElementId,deleted:!0};const Xt=Ul._internalPadding*this.parentScale,Ut=this.getRect(Xt,Xt),Vt=It.AnnotationEditor._colorManager.convert(this.isAttachedToDOM?getComputedStyle(this.editorDiv).color:t(this,O)),Ht={annotationType:Zt.AnnotationEditorType.FREETEXT,color:Vt,fontSize:t(this,g),value:t(this,F),pageIndex:this.pageIndex,rect:Ut,rotation:this.rotation,structTreeParentId:this._structTreeParentId};return Gt?Ht:this.annotationElementId&&!A(this,m,_).call(this,Ht)?null:(Ht.id=this.annotationElementId,Ht)}};M=new WeakMap,p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakMap,F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakSet,Q=function(zt){const Gt=Ut=>{this.editorDiv.style.fontSize=`calc(${Ut}px * var(--scale-factor))`,this.translate(0,-(Ut-t(this,g))*this.parentScale),Zl(this,g,Ut),A(this,C,U).call(this)},Xt=t(this,g);this.addCommands({cmd:()=>{Gt(zt)},undo:()=>{Gt(Xt)},mustExec:!0,type:Zt.AnnotationEditorParamsType.FREETEXT_SIZE,overwriteIfSameType:!0,keepUndo:!0})},R=new WeakSet,j=function(zt){const Gt=t(this,O);this.addCommands({cmd:()=>{Zl(this,O,this.editorDiv.style.color=zt)},undo:()=>{Zl(this,O,this.editorDiv.style.color=Gt)},mustExec:!0,type:Zt.AnnotationEditorParamsType.FREETEXT_COLOR,overwriteIfSameType:!0,keepUndo:!0})},I=new WeakSet,k=function(){const zt=this.editorDiv.getElementsByTagName("div");if(zt.length===0)return this.editorDiv.innerText;const Gt=[];for(const Xt of zt)Gt.push(Xt.innerText.replace(/\r\n?|\n/,""));return Gt.join(`
|
||
`)},C=new WeakSet,U=function(){const[zt,Gt]=this.parentDimensions;let Xt;if(this.isAttachedToDOM)Xt=this.div.getBoundingClientRect();else{const{currentLayer:Ut,div:Vt}=this,Ht=Vt.style.display;Vt.style.display="hidden",Ut.div.append(this.div),Xt=Vt.getBoundingClientRect(),Vt.remove(),Vt.style.display=Ht}this.rotation%180===this.parentRotation%180?(this.width=Xt.width/zt,this.height=Xt.height/Gt):(this.width=Xt.height/zt,this.height=Xt.width/Gt),this.fixAndSetPosition()},K=new WeakSet,u=function(){if(this.editorDiv.replaceChildren(),!!t(this,F))for(const zt of t(this,F).split(`
|
||
`)){const Gt=document.createElement("div");Gt.append(zt?document.createTextNode(zt):document.createElement("br")),this.editorDiv.append(Gt)}},m=new WeakSet,_=function(zt){const{value:Gt,fontSize:Xt,color:Ut,rect:Vt,pageIndex:Ht}=t(this,q);return zt.value!==Gt||zt.fontSize!==Xt||zt.rect.some((Pt,at)=>Math.abs(Pt-Vt[at])>=1)||zt.color.some((Pt,at)=>Pt!==Ut[at])||zt.pageIndex!==Ht},$=new WeakSet,P=function(){let zt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(!this.annotationElementId)return;if(A(this,C,U).call(this),!zt&&(this.width===0||this.height===0)){setTimeout(()=>A(this,$,P).call(this,!0),0);return}const Gt=it._internalPadding*this.parentScale;t(this,q).rect=this.getRect(Gt,Gt)},tt(it,"_freeTextDefaultContent",""),tt(it,"_internalPadding",0),tt(it,"_defaultColor",null),tt(it,"_defaultFontSize",10),tt(it,"_type","freetext");let Nt=it;r.FreeTextEditor=Nt},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt,Ut,Vt,Ht,Pt,at,S,w,X,J,H,et,lt,Mt;Object.defineProperty(r,"__esModule",{value:!0}),r.StampAnnotationElement=r.InkAnnotationElement=r.FreeTextAnnotationElement=r.AnnotationLayer=void 0,h(89),h(125),h(136),h(138),h(141),h(143),h(145),h(147);var Rt=h(1),gt=h(168),Ot=h(163),Dt=h(199),qt=h(200),vt=h(201);const dl=1e3,ol=9,il=new WeakSet;function _t(Wl){return{width:Wl[2]-Wl[0],height:Wl[3]-Wl[1]}}class Ft{static create(nt){switch(nt.data.annotationType){case Rt.AnnotationType.LINK:return new Ct(nt);case Rt.AnnotationType.TEXT:return new el(nt);case Rt.AnnotationType.WIDGET:switch(nt.data.fieldType){case"Tx":return new Ml(nt);case"Btn":return nt.data.radioButton?new Tl(nt):nt.data.checkBox?new Xl(nt):new Vl(nt);case"Ch":return new Ll(nt);case"Sig":return new Yl(nt)}return new cl(nt);case Rt.AnnotationType.POPUP:return new yl(nt);case Rt.AnnotationType.FREETEXT:return new ot(nt);case Rt.AnnotationType.LINE:return new ut(nt);case Rt.AnnotationType.SQUARE:return new Tt(nt);case Rt.AnnotationType.CIRCLE:return new jt(nt);case Rt.AnnotationType.POLYLINE:return new Jt(nt);case Rt.AnnotationType.CARET:return new Yt(nt);case Rt.AnnotationType.INK:return new Kt(nt);case Rt.AnnotationType.POLYGON:return new Lt(nt);case Rt.AnnotationType.HIGHLIGHT:return new $t(nt);case Rt.AnnotationType.UNDERLINE:return new tl(nt);case Rt.AnnotationType.SQUIGGLY:return new bl(nt);case Rt.AnnotationType.STRIKEOUT:return new Bt(nt);case Rt.AnnotationType.STAMP:return new rl(nt);case Rt.AnnotationType.FILEATTACHMENT:return new hl(nt);default:return new pt(nt)}}}const wt=class Qs{constructor(nt){E(this,M,!1);let{isRenderable:T=!1,ignoreBorder:ct=!1,createQuadrilaterals:Wt=!1}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.isRenderable=T,this.data=nt.data,this.layer=nt.layer,this.linkService=nt.linkService,this.downloadManager=nt.downloadManager,this.imageResourcesPath=nt.imageResourcesPath,this.renderForms=nt.renderForms,this.svgFactory=nt.svgFactory,this.annotationStorage=nt.annotationStorage,this.enableScripting=nt.enableScripting,this.hasJSActions=nt.hasJSActions,this._fieldObjects=nt.fieldObjects,this.parent=nt.parent,T&&(this.container=this._createContainer(ct)),Wt&&this._createQuadrilaterals()}static _hasPopupData(nt){let{titleObj:T,contentsObj:ct,richText:Wt}=nt;return!!(T!=null&&T.str||ct!=null&&ct.str||Wt!=null&&Wt.str)}get hasPopupData(){return Qs._hasPopupData(this.data)}_createContainer(nt){const{data:T,parent:{page:ct,viewport:Wt}}=this,yt=document.createElement("section");yt.setAttribute("data-annotation-id",T.id),this instanceof cl||(yt.tabIndex=dl),yt.style.zIndex=this.parent.zIndex++,this.data.popupRef&&yt.setAttribute("aria-haspopup","dialog"),T.noRotate&&yt.classList.add("norotate");const{pageWidth:kt,pageHeight:Et,pageX:sl,pageY:ml}=Wt.rawDims;if(!T.rect||this instanceof yl){const{rotation:pl}=T;return!T.hasOwnCanvas&&pl!==0&&this.setRotation(pl,yt),yt}const{width:al,height:zl}=_t(T.rect),Gl=Rt.Util.normalizeRect([T.rect[0],ct.view[3]-T.rect[1]+ct.view[1],T.rect[2],ct.view[3]-T.rect[3]+ct.view[1]]);if(!nt&&T.borderStyle.width>0){yt.style.borderWidth=`${T.borderStyle.width}px`;const pl=T.borderStyle.horizontalCornerRadius,Rl=T.borderStyle.verticalCornerRadius;if(pl>0||Rl>0){const xl=`calc(${pl}px * var(--scale-factor)) / calc(${Rl}px * var(--scale-factor))`;yt.style.borderRadius=xl}else if(this instanceof Tl){const xl=`calc(${al}px * var(--scale-factor)) / calc(${zl}px * var(--scale-factor))`;yt.style.borderRadius=xl}switch(T.borderStyle.style){case Rt.AnnotationBorderStyleType.SOLID:yt.style.borderStyle="solid";break;case Rt.AnnotationBorderStyleType.DASHED:yt.style.borderStyle="dashed";break;case Rt.AnnotationBorderStyleType.BEVELED:(0,Rt.warn)("Unimplemented border style: beveled");break;case Rt.AnnotationBorderStyleType.INSET:(0,Rt.warn)("Unimplemented border style: inset");break;case Rt.AnnotationBorderStyleType.UNDERLINE:yt.style.borderBottomStyle="solid";break}const wl=T.borderColor||null;wl?(Zl(this,M,!0),yt.style.borderColor=Rt.Util.makeHexColor(wl[0]|0,wl[1]|0,wl[2]|0)):yt.style.borderWidth=0}yt.style.left=`${100*(Gl[0]-sl)/kt}%`,yt.style.top=`${100*(Gl[1]-ml)/Et}%`;const{rotation:Nl}=T;return T.hasOwnCanvas||Nl===0?(yt.style.width=`${100*al/kt}%`,yt.style.height=`${100*zl/Et}%`):this.setRotation(Nl,yt),yt}setRotation(nt){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:this.container;if(!this.data.rect)return;const{pageWidth:ct,pageHeight:Wt}=this.parent.viewport.rawDims,{width:yt,height:kt}=_t(this.data.rect);let Et,sl;nt%180===0?(Et=100*yt/ct,sl=100*kt/Wt):(Et=100*kt/ct,sl=100*yt/Wt),T.style.width=`${Et}%`,T.style.height=`${sl}%`,T.setAttribute("data-main-rotation",(360-nt)%360)}get _commonActions(){const nt=(T,ct,Wt)=>{const yt=Wt.detail[T],kt=yt[0],Et=yt.slice(1);Wt.target.style[ct]=Dt.ColorConverters[`${kt}_HTML`](Et),this.annotationStorage.setValue(this.data.id,{[ct]:Dt.ColorConverters[`${kt}_rgb`](Et)})};return(0,Rt.shadow)(this,"_commonActions",{display:T=>{const{display:ct}=T.detail,Wt=ct%2===1;this.container.style.visibility=Wt?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noView:Wt,noPrint:ct===1||ct===2})},print:T=>{this.annotationStorage.setValue(this.data.id,{noPrint:!T.detail.print})},hidden:T=>{const{hidden:ct}=T.detail;this.container.style.visibility=ct?"hidden":"visible",this.annotationStorage.setValue(this.data.id,{noPrint:ct,noView:ct})},focus:T=>{setTimeout(()=>T.target.focus({preventScroll:!1}),0)},userName:T=>{T.target.title=T.detail.userName},readonly:T=>{T.target.disabled=T.detail.readonly},required:T=>{this._setRequired(T.target,T.detail.required)},bgColor:T=>{nt("bgColor","backgroundColor",T)},fillColor:T=>{nt("fillColor","backgroundColor",T)},fgColor:T=>{nt("fgColor","color",T)},textColor:T=>{nt("textColor","color",T)},borderColor:T=>{nt("borderColor","borderColor",T)},strokeColor:T=>{nt("strokeColor","borderColor",T)},rotation:T=>{const ct=T.detail.rotation;this.setRotation(ct),this.annotationStorage.setValue(this.data.id,{rotation:ct})}})}_dispatchEventFromSandbox(nt,T){const ct=this._commonActions;for(const Wt of Object.keys(T.detail)){const yt=nt[Wt]||ct[Wt];yt==null||yt(T)}}_setDefaultPropertiesFromJS(nt){if(!this.enableScripting)return;const T=this.annotationStorage.getRawValue(this.data.id);if(!T)return;const ct=this._commonActions;for(const[Wt,yt]of Object.entries(T)){const kt=ct[Wt];if(kt){const Et={detail:{[Wt]:yt},target:nt};kt(Et),delete T[Wt]}}}_createQuadrilaterals(){if(!this.container)return;const{quadPoints:nt}=this.data;if(!nt)return;const[T,ct,Wt,yt]=this.data.rect;if(nt.length===1){const[,{x:Rl,y:wl},{x:xl,y:gl}]=nt[0];if(Wt===Rl&&yt===wl&&T===xl&&ct===gl)return}const{style:kt}=this.container;let Et;if(t(this,M)){const{borderColor:Rl,borderWidth:wl}=kt;kt.borderWidth=0,Et=["url('data:image/svg+xml;utf8,",'<svg xmlns="http://www.w3.org/2000/svg"',' preserveAspectRatio="none" viewBox="0 0 1 1">',`<g fill="transparent" stroke="${Rl}" stroke-width="${wl}">`],this.container.classList.add("hasBorder")}const sl=Wt-T,ml=yt-ct,{svgFactory:al}=this,zl=al.createElement("svg");zl.classList.add("quadrilateralsContainer"),zl.setAttribute("width",0),zl.setAttribute("height",0);const Gl=al.createElement("defs");zl.append(Gl);const Nl=al.createElement("clipPath"),pl=`clippath_${this.data.id}`;Nl.setAttribute("id",pl),Nl.setAttribute("clipPathUnits","objectBoundingBox"),Gl.append(Nl);for(const[,{x:Rl,y:wl},{x:xl,y:gl}]of nt){const kl=al.createElement("rect"),jl=(xl-T)/sl,Fl=(yt-wl)/ml,Cl=(Rl-xl)/sl,ql=(wl-gl)/ml;kl.setAttribute("x",jl),kl.setAttribute("y",Fl),kl.setAttribute("width",Cl),kl.setAttribute("height",ql),Nl.append(kl),Et==null||Et.push(`<rect vector-effect="non-scaling-stroke" x="${jl}" y="${Fl}" width="${Cl}" height="${ql}"/>`)}t(this,M)&&(Et.push("</g></svg>')"),kt.backgroundImage=Et.join("")),this.container.append(zl),this.container.style.clipPath=`url(#${pl})`}_createPopup(){const{container:nt,data:T}=this;nt.setAttribute("aria-haspopup","dialog");const ct=new yl({data:{color:T.color,titleObj:T.titleObj,modificationDate:T.modificationDate,contentsObj:T.contentsObj,richText:T.richText,parentRect:T.rect,borderStyle:0,id:`popup_${T.id}`,rotation:T.rotation},parent:this.parent,elements:[this]});this.parent.div.append(ct.render())}render(){(0,Rt.unreachable)("Abstract method `AnnotationElement.render` called")}_getElementsByName(nt){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;const ct=[];if(this._fieldObjects){const Wt=this._fieldObjects[nt];if(Wt)for(const{page:yt,id:kt,exportValues:Et}of Wt){if(yt===-1||kt===T)continue;const sl=typeof Et=="string"?Et:null,ml=document.querySelector(`[data-element-id="${kt}"]`);if(ml&&!il.has(ml)){(0,Rt.warn)(`_getElementsByName - element not allowed: ${kt}`);continue}ct.push({id:kt,exportValue:sl,domElement:ml})}return ct}for(const Wt of document.getElementsByName(nt)){const{exportValue:yt}=Wt,kt=Wt.getAttribute("data-element-id");kt!==T&&il.has(Wt)&&ct.push({id:kt,exportValue:yt,domElement:Wt})}return ct}show(){var nt;this.container&&(this.container.hidden=!1),(nt=this.popup)==null||nt.maybeShow()}hide(){var nt;this.container&&(this.container.hidden=!0),(nt=this.popup)==null||nt.forceHide()}getElementsToTriggerPopup(){return this.container}addHighlightArea(){const nt=this.getElementsToTriggerPopup();if(Array.isArray(nt))for(const T of nt)T.classList.add("highlightArea");else nt.classList.add("highlightArea")}_editOnDoubleClick(){const{annotationEditorType:nt,data:{id:T}}=this;this.container.addEventListener("dblclick",()=>{var ct;(ct=this.linkService.eventBus)==null||ct.dispatch("switchannotationeditormode",{source:this,mode:nt,editId:T})})}};M=new WeakMap;let pt=wt;class Ct extends pt{constructor(nt){let T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;super(nt,{isRenderable:!0,ignoreBorder:!!(T!=null&&T.ignoreBorder),createQuadrilaterals:!0}),E(this,p),E(this,B),this.isTooltipOnly=nt.data.isTooltipOnly}render(){const{data:nt,linkService:T}=this,ct=document.createElement("a");ct.setAttribute("data-element-id",nt.id);let Wt=!1;return nt.url?(T.addLinkAttributes(ct,nt.url,nt.newWindow),Wt=!0):nt.action?(this._bindNamedAction(ct,nt.action),Wt=!0):nt.attachment?(this._bindAttachment(ct,nt.attachment),Wt=!0):nt.setOCGState?(A(this,B,O).call(this,ct,nt.setOCGState),Wt=!0):nt.dest?(this._bindLink(ct,nt.dest),Wt=!0):(nt.actions&&(nt.actions.Action||nt.actions["Mouse Up"]||nt.actions["Mouse Down"])&&this.enableScripting&&this.hasJSActions&&(this._bindJSAction(ct,nt),Wt=!0),nt.resetForm?(this._bindResetFormAction(ct,nt.resetForm),Wt=!0):this.isTooltipOnly&&!Wt&&(this._bindLink(ct,""),Wt=!0)),this.container.classList.add("linkAnnotation"),Wt&&this.container.append(ct),this.container}_bindLink(nt,T){nt.href=this.linkService.getDestinationHash(T),nt.onclick=()=>(T&&this.linkService.goToDestination(T),!1),(T||T==="")&&A(this,p,f).call(this)}_bindNamedAction(nt,T){nt.href=this.linkService.getAnchorUrl(""),nt.onclick=()=>(this.linkService.executeNamedAction(T),!1),A(this,p,f).call(this)}_bindAttachment(nt,T){nt.href=this.linkService.getAnchorUrl(""),nt.onclick=()=>{var ct;return(ct=this.downloadManager)==null||ct.openOrDownloadData(this.container,T.content,T.filename),!1},A(this,p,f).call(this)}_bindJSAction(nt,T){nt.href=this.linkService.getAnchorUrl("");const ct=new Map([["Action","onclick"],["Mouse Up","onmouseup"],["Mouse Down","onmousedown"]]);for(const Wt of Object.keys(T.actions)){const yt=ct.get(Wt);yt&&(nt[yt]=()=>{var kt;return(kt=this.linkService.eventBus)==null||kt.dispatch("dispatcheventinsandbox",{source:this,detail:{id:T.id,name:Wt}}),!1})}nt.onclick||(nt.onclick=()=>!1),A(this,p,f).call(this)}_bindResetFormAction(nt,T){const ct=nt.onclick;if(ct||(nt.href=this.linkService.getAnchorUrl("")),A(this,p,f).call(this),!this._fieldObjects){(0,Rt.warn)('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'),ct||(nt.onclick=()=>!1);return}nt.onclick=()=>{var Wt;ct==null||ct();const{fields:yt,refs:kt,include:Et}=T,sl=[];if(yt.length!==0||kt.length!==0){const zl=new Set(kt);for(const Gl of yt){const Nl=this._fieldObjects[Gl]||[];for(const{id:pl}of Nl)zl.add(pl)}for(const Gl of Object.values(this._fieldObjects))for(const Nl of Gl)zl.has(Nl.id)===Et&&sl.push(Nl)}else for(const zl of Object.values(this._fieldObjects))sl.push(...zl);const ml=this.annotationStorage,al=[];for(const zl of sl){const{id:Gl}=zl;switch(al.push(Gl),zl.type){case"text":{const pl=zl.defaultValue||"";ml.setValue(Gl,{value:pl});break}case"checkbox":case"radiobutton":{const pl=zl.defaultValue===zl.exportValues;ml.setValue(Gl,{value:pl});break}case"combobox":case"listbox":{const pl=zl.defaultValue||"";ml.setValue(Gl,{value:pl});break}default:continue}const Nl=document.querySelector(`[data-element-id="${Gl}"]`);if(Nl){if(!il.has(Nl)){(0,Rt.warn)(`_bindResetFormAction - element not allowed: ${Gl}`);continue}}else continue;Nl.dispatchEvent(new Event("resetform"))}return this.enableScripting&&((Wt=this.linkService.eventBus)==null||Wt.dispatch("dispatcheventinsandbox",{source:this,detail:{id:"app",ids:al,name:"ResetForm"}})),!1}}}p=new WeakSet,f=function(){this.container.setAttribute("data-internal-link","")},B=new WeakSet,O=function(Wl,nt){Wl.href=this.linkService.getAnchorUrl(""),Wl.onclick=()=>(this.linkService.executeSetOCGState(nt),!1),A(this,p,f).call(this)};class el extends pt{constructor(nt){super(nt,{isRenderable:!0})}render(){this.container.classList.add("textAnnotation");const nt=document.createElement("img");return nt.src=this.imageResourcesPath+"annotation-"+this.data.name.toLowerCase()+".svg",nt.alt="[{{type}} Annotation]",nt.dataset.l10nId="text_annotation_type",nt.dataset.l10nArgs=JSON.stringify({type:this.data.name}),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.append(nt),this.container}}class cl extends pt{render(){return this.data.alternativeText&&(this.container.title=this.data.alternativeText),this.container}showElementAndHideCanvas(nt){var T;this.data.hasOwnCanvas&&(((T=nt.previousSibling)==null?void 0:T.nodeName)==="CANVAS"&&(nt.previousSibling.hidden=!0),nt.hidden=!1)}_getKeyModifier(nt){const{isWin:T,isMac:ct}=Rt.FeatureTest.platform;return T&&nt.ctrlKey||ct&&nt.metaKey}_setEventListener(nt,T,ct,Wt,yt){ct.includes("mouse")?nt.addEventListener(ct,kt=>{var Et;(Et=this.linkService.eventBus)==null||Et.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:Wt,value:yt(kt),shift:kt.shiftKey,modifier:this._getKeyModifier(kt)}})}):nt.addEventListener(ct,kt=>{var Et;if(ct==="blur"){if(!T.focused||!kt.relatedTarget)return;T.focused=!1}else if(ct==="focus"){if(T.focused)return;T.focused=!0}yt&&((Et=this.linkService.eventBus)==null||Et.dispatch("dispatcheventinsandbox",{source:this,detail:{id:this.data.id,name:Wt,value:yt(kt)}}))})}_setEventListeners(nt,T,ct,Wt){var yt,kt,Et;for(const[sl,ml]of ct)(ml==="Action"||(yt=this.data.actions)!=null&&yt[ml])&&((ml==="Focus"||ml==="Blur")&&(T||(T={focused:!1})),this._setEventListener(nt,T,sl,ml,Wt),ml==="Focus"&&!((kt=this.data.actions)!=null&&kt.Blur)?this._setEventListener(nt,T,"blur","Blur",null):ml==="Blur"&&!((Et=this.data.actions)!=null&&Et.Focus)&&this._setEventListener(nt,T,"focus","Focus",null))}_setBackgroundColor(nt){const T=this.data.backgroundColor||null;nt.style.backgroundColor=T===null?"transparent":Rt.Util.makeHexColor(T[0],T[1],T[2])}_setTextStyle(nt){const T=["left","center","right"],{fontColor:ct}=this.data.defaultAppearanceData,Wt=this.data.defaultAppearanceData.fontSize||ol,yt=nt.style;let kt;const Et=2,sl=ml=>Math.round(10*ml)/10;if(this.data.multiLine){const ml=Math.abs(this.data.rect[3]-this.data.rect[1]-Et),al=Math.round(ml/(Rt.LINE_FACTOR*Wt))||1,zl=ml/al;kt=Math.min(Wt,sl(zl/Rt.LINE_FACTOR))}else{const ml=Math.abs(this.data.rect[3]-this.data.rect[1]-Et);kt=Math.min(Wt,sl(ml/Rt.LINE_FACTOR))}yt.fontSize=`calc(${kt}px * var(--scale-factor))`,yt.color=Rt.Util.makeHexColor(ct[0],ct[1],ct[2]),this.data.textAlignment!==null&&(yt.textAlign=T[this.data.textAlignment])}_setRequired(nt,T){T?nt.setAttribute("required",!0):nt.removeAttribute("required"),nt.setAttribute("aria-required",T)}}class Ml extends cl{constructor(nt){const T=nt.renderForms||!nt.data.hasAppearance&&!!nt.data.fieldValue;super(nt,{isRenderable:T})}setPropertyOnSiblings(nt,T,ct,Wt){const yt=this.annotationStorage;for(const kt of this._getElementsByName(nt.name,nt.id))kt.domElement&&(kt.domElement[T]=ct),yt.setValue(kt.id,{[Wt]:ct})}render(){var nt,T;const ct=this.annotationStorage,Wt=this.data.id;this.container.classList.add("textWidgetAnnotation");let yt=null;if(this.renderForms){const kt=ct.getValue(Wt,{value:this.data.fieldValue});let Et=kt.value||"";const sl=ct.getValue(Wt,{charLimit:this.data.maxLen}).charLimit;sl&&Et.length>sl&&(Et=Et.slice(0,sl));let ml=kt.formattedValue||((nt=this.data.textContent)==null?void 0:nt.join(`
|
||
`))||null;ml&&this.data.comb&&(ml=ml.replaceAll(/\s+/g,""));const al={userValue:Et,formattedValue:ml,lastCommittedValue:null,commitKey:1,focused:!1};this.data.multiLine?(yt=document.createElement("textarea"),yt.textContent=ml!=null?ml:Et,this.data.doNotScroll&&(yt.style.overflowY="hidden")):(yt=document.createElement("input"),yt.type="text",yt.setAttribute("value",ml!=null?ml:Et),this.data.doNotScroll&&(yt.style.overflowX="hidden")),this.data.hasOwnCanvas&&(yt.hidden=!0),il.add(yt),yt.setAttribute("data-element-id",Wt),yt.disabled=this.data.readOnly,yt.name=this.data.fieldName,yt.tabIndex=dl,this._setRequired(yt,this.data.required),sl&&(yt.maxLength=sl),yt.addEventListener("input",Gl=>{ct.setValue(Wt,{value:Gl.target.value}),this.setPropertyOnSiblings(yt,"value",Gl.target.value,"value"),al.formattedValue=null}),yt.addEventListener("resetform",Gl=>{var pl;const Nl=(pl=this.data.defaultFieldValue)!=null?pl:"";yt.value=al.userValue=Nl,al.formattedValue=null});let zl=Gl=>{const{formattedValue:Nl}=al;Nl!=null&&(Gl.target.value=Nl),Gl.target.scrollLeft=0};if(this.enableScripting&&this.hasJSActions){yt.addEventListener("focus",Nl=>{if(al.focused)return;const{target:pl}=Nl;al.userValue&&(pl.value=al.userValue),al.lastCommittedValue=pl.value,al.commitKey=1,al.focused=!0}),yt.addEventListener("updatefromsandbox",Nl=>{this.showElementAndHideCanvas(Nl.target);const pl={value(Rl){var wl;al.userValue=(wl=Rl.detail.value)!=null?wl:"",ct.setValue(Wt,{value:al.userValue.toString()}),Rl.target.value=al.userValue},formattedValue(Rl){const{formattedValue:wl}=Rl.detail;al.formattedValue=wl,wl!=null&&Rl.target!==document.activeElement&&(Rl.target.value=wl),ct.setValue(Wt,{formattedValue:wl})},selRange(Rl){Rl.target.setSelectionRange(...Rl.detail.selRange)},charLimit:Rl=>{var wl;const{charLimit:xl}=Rl.detail,{target:gl}=Rl;if(xl===0){gl.removeAttribute("maxLength");return}gl.setAttribute("maxLength",xl);let kl=al.userValue;!kl||kl.length<=xl||(kl=kl.slice(0,xl),gl.value=al.userValue=kl,ct.setValue(Wt,{value:kl}),(wl=this.linkService.eventBus)==null||wl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Wt,name:"Keystroke",value:kl,willCommit:!0,commitKey:1,selStart:gl.selectionStart,selEnd:gl.selectionEnd}}))}};this._dispatchEventFromSandbox(pl,Nl)}),yt.addEventListener("keydown",Nl=>{var pl;al.commitKey=1;let Rl=-1;if(Nl.key==="Escape"?Rl=0:Nl.key==="Enter"&&!this.data.multiLine?Rl=2:Nl.key==="Tab"&&(al.commitKey=3),Rl===-1)return;const{value:wl}=Nl.target;al.lastCommittedValue!==wl&&(al.lastCommittedValue=wl,al.userValue=wl,(pl=this.linkService.eventBus)==null||pl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Wt,name:"Keystroke",value:wl,willCommit:!0,commitKey:Rl,selStart:Nl.target.selectionStart,selEnd:Nl.target.selectionEnd}}))});const Gl=zl;zl=null,yt.addEventListener("blur",Nl=>{var pl;if(!al.focused||!Nl.relatedTarget)return;al.focused=!1;const{value:Rl}=Nl.target;al.userValue=Rl,al.lastCommittedValue!==Rl&&((pl=this.linkService.eventBus)==null||pl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Wt,name:"Keystroke",value:Rl,willCommit:!0,commitKey:al.commitKey,selStart:Nl.target.selectionStart,selEnd:Nl.target.selectionEnd}})),Gl(Nl)}),(T=this.data.actions)!=null&&T.Keystroke&&yt.addEventListener("beforeinput",Nl=>{var pl;al.lastCommittedValue=null;const{data:Rl,target:wl}=Nl,{value:xl,selectionStart:gl,selectionEnd:kl}=wl;let jl=gl,Fl=kl;switch(Nl.inputType){case"deleteWordBackward":{const Cl=xl.substring(0,gl).match(/\w*[^\w]*$/);Cl&&(jl-=Cl[0].length);break}case"deleteWordForward":{const Cl=xl.substring(gl).match(/^[^\w]*\w*/);Cl&&(Fl+=Cl[0].length);break}case"deleteContentBackward":gl===kl&&(jl-=1);break;case"deleteContentForward":gl===kl&&(Fl+=1);break}Nl.preventDefault(),(pl=this.linkService.eventBus)==null||pl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:Wt,name:"Keystroke",value:xl,change:Rl||"",willCommit:!1,selStart:jl,selEnd:Fl}})}),this._setEventListeners(yt,al,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],Nl=>Nl.target.value)}if(zl&&yt.addEventListener("blur",zl),this.data.comb){const Gl=(this.data.rect[2]-this.data.rect[0])/sl;yt.classList.add("comb"),yt.style.letterSpacing=`calc(${Gl}px * var(--scale-factor) - 1ch)`}}else yt=document.createElement("div"),yt.textContent=this.data.fieldValue,yt.style.verticalAlign="middle",yt.style.display="table-cell";return this._setTextStyle(yt),this._setBackgroundColor(yt),this._setDefaultPropertiesFromJS(yt),this.container.append(yt),this.container}}class Yl extends cl{constructor(nt){super(nt,{isRenderable:!!nt.data.hasOwnCanvas})}}class Xl extends cl{constructor(nt){super(nt,{isRenderable:nt.renderForms})}render(){const nt=this.annotationStorage,T=this.data,ct=T.id;let Wt=nt.getValue(ct,{value:T.exportValue===T.fieldValue}).value;typeof Wt=="string"&&(Wt=Wt!=="Off",nt.setValue(ct,{value:Wt})),this.container.classList.add("buttonWidgetAnnotation","checkBox");const yt=document.createElement("input");return il.add(yt),yt.setAttribute("data-element-id",ct),yt.disabled=T.readOnly,this._setRequired(yt,this.data.required),yt.type="checkbox",yt.name=T.fieldName,Wt&&yt.setAttribute("checked",!0),yt.setAttribute("exportValue",T.exportValue),yt.tabIndex=dl,yt.addEventListener("change",kt=>{const{name:Et,checked:sl}=kt.target;for(const ml of this._getElementsByName(Et,ct)){const al=sl&&ml.exportValue===T.exportValue;ml.domElement&&(ml.domElement.checked=al),nt.setValue(ml.id,{value:al})}nt.setValue(ct,{value:sl})}),yt.addEventListener("resetform",kt=>{const Et=T.defaultFieldValue||"Off";kt.target.checked=Et===T.exportValue}),this.enableScripting&&this.hasJSActions&&(yt.addEventListener("updatefromsandbox",kt=>{const Et={value(sl){sl.target.checked=sl.detail.value!=="Off",nt.setValue(ct,{value:sl.target.checked})}};this._dispatchEventFromSandbox(Et,kt)}),this._setEventListeners(yt,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],kt=>kt.target.checked)),this._setBackgroundColor(yt),this._setDefaultPropertiesFromJS(yt),this.container.append(yt),this.container}}class Tl extends cl{constructor(nt){super(nt,{isRenderable:nt.renderForms})}render(){this.container.classList.add("buttonWidgetAnnotation","radioButton");const nt=this.annotationStorage,T=this.data,ct=T.id;let Wt=nt.getValue(ct,{value:T.fieldValue===T.buttonValue}).value;typeof Wt=="string"&&(Wt=Wt!==T.buttonValue,nt.setValue(ct,{value:Wt}));const yt=document.createElement("input");if(il.add(yt),yt.setAttribute("data-element-id",ct),yt.disabled=T.readOnly,this._setRequired(yt,this.data.required),yt.type="radio",yt.name=T.fieldName,Wt&&yt.setAttribute("checked",!0),yt.tabIndex=dl,yt.addEventListener("change",kt=>{const{name:Et,checked:sl}=kt.target;for(const ml of this._getElementsByName(Et,ct))nt.setValue(ml.id,{value:!1});nt.setValue(ct,{value:sl})}),yt.addEventListener("resetform",kt=>{const Et=T.defaultFieldValue;kt.target.checked=Et!=null&&Et===T.buttonValue}),this.enableScripting&&this.hasJSActions){const kt=T.buttonValue;yt.addEventListener("updatefromsandbox",Et=>{const sl={value:ml=>{const al=kt===ml.detail.value;for(const zl of this._getElementsByName(ml.target.name)){const Gl=al&&zl.id===ct;zl.domElement&&(zl.domElement.checked=Gl),nt.setValue(zl.id,{value:Gl})}}};this._dispatchEventFromSandbox(sl,Et)}),this._setEventListeners(yt,null,[["change","Validate"],["change","Action"],["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"]],Et=>Et.target.checked)}return this._setBackgroundColor(yt),this._setDefaultPropertiesFromJS(yt),this.container.append(yt),this.container}}class Vl extends Ct{constructor(nt){super(nt,{ignoreBorder:nt.data.hasAppearance})}render(){const nt=super.render();nt.classList.add("buttonWidgetAnnotation","pushButton"),this.data.alternativeText&&(nt.title=this.data.alternativeText);const T=nt.lastChild;return this.enableScripting&&this.hasJSActions&&T&&(this._setDefaultPropertiesFromJS(T),T.addEventListener("updatefromsandbox",ct=>{this._dispatchEventFromSandbox({},ct)})),nt}}class Ll extends cl{constructor(nt){super(nt,{isRenderable:nt.renderForms})}render(){this.container.classList.add("choiceWidgetAnnotation");const nt=this.annotationStorage,T=this.data.id,ct=nt.getValue(T,{value:this.data.fieldValue}),Wt=document.createElement("select");il.add(Wt),Wt.setAttribute("data-element-id",T),Wt.disabled=this.data.readOnly,this._setRequired(Wt,this.data.required),Wt.name=this.data.fieldName,Wt.tabIndex=dl;let yt=this.data.combo&&this.data.options.length>0;this.data.combo||(Wt.size=this.data.options.length,this.data.multiSelect&&(Wt.multiple=!0)),Wt.addEventListener("resetform",al=>{const zl=this.data.defaultFieldValue;for(const Gl of Wt.options)Gl.selected=Gl.value===zl});for(const al of this.data.options){const zl=document.createElement("option");zl.textContent=al.displayValue,zl.value=al.exportValue,ct.value.includes(al.exportValue)&&(zl.setAttribute("selected",!0),yt=!1),Wt.append(zl)}let kt=null;if(yt){const al=document.createElement("option");al.value=" ",al.setAttribute("hidden",!0),al.setAttribute("selected",!0),Wt.prepend(al),kt=()=>{al.remove(),Wt.removeEventListener("input",kt),kt=null},Wt.addEventListener("input",kt)}const Et=al=>{const zl=al?"value":"textContent",{options:Gl,multiple:Nl}=Wt;return Nl?Array.prototype.filter.call(Gl,pl=>pl.selected).map(pl=>pl[zl]):Gl.selectedIndex===-1?null:Gl[Gl.selectedIndex][zl]};let sl=Et(!1);const ml=al=>{const zl=al.target.options;return Array.prototype.map.call(zl,Gl=>({displayValue:Gl.textContent,exportValue:Gl.value}))};return this.enableScripting&&this.hasJSActions?(Wt.addEventListener("updatefromsandbox",al=>{const zl={value(Gl){kt==null||kt();const Nl=Gl.detail.value,pl=new Set(Array.isArray(Nl)?Nl:[Nl]);for(const Rl of Wt.options)Rl.selected=pl.has(Rl.value);nt.setValue(T,{value:Et(!0)}),sl=Et(!1)},multipleSelection(Gl){Wt.multiple=!0},remove(Gl){const Nl=Wt.options,pl=Gl.detail.remove;Nl[pl].selected=!1,Wt.remove(pl),Nl.length>0&&Array.prototype.findIndex.call(Nl,Rl=>Rl.selected)===-1&&(Nl[0].selected=!0),nt.setValue(T,{value:Et(!0),items:ml(Gl)}),sl=Et(!1)},clear(Gl){for(;Wt.length!==0;)Wt.remove(0);nt.setValue(T,{value:null,items:[]}),sl=Et(!1)},insert(Gl){const{index:Nl,displayValue:pl,exportValue:Rl}=Gl.detail.insert,wl=Wt.children[Nl],xl=document.createElement("option");xl.textContent=pl,xl.value=Rl,wl?wl.before(xl):Wt.append(xl),nt.setValue(T,{value:Et(!0),items:ml(Gl)}),sl=Et(!1)},items(Gl){const{items:Nl}=Gl.detail;for(;Wt.length!==0;)Wt.remove(0);for(const pl of Nl){const{displayValue:Rl,exportValue:wl}=pl,xl=document.createElement("option");xl.textContent=Rl,xl.value=wl,Wt.append(xl)}Wt.options.length>0&&(Wt.options[0].selected=!0),nt.setValue(T,{value:Et(!0),items:ml(Gl)}),sl=Et(!1)},indices(Gl){const Nl=new Set(Gl.detail.indices);for(const pl of Gl.target.options)pl.selected=Nl.has(pl.index);nt.setValue(T,{value:Et(!0)}),sl=Et(!1)},editable(Gl){Gl.target.disabled=!Gl.detail.editable}};this._dispatchEventFromSandbox(zl,al)}),Wt.addEventListener("input",al=>{var zl;const Gl=Et(!0);nt.setValue(T,{value:Gl}),al.preventDefault(),(zl=this.linkService.eventBus)==null||zl.dispatch("dispatcheventinsandbox",{source:this,detail:{id:T,name:"Keystroke",value:sl,changeEx:Gl,willCommit:!1,commitKey:1,keyDown:!1}})}),this._setEventListeners(Wt,null,[["focus","Focus"],["blur","Blur"],["mousedown","Mouse Down"],["mouseenter","Mouse Enter"],["mouseleave","Mouse Exit"],["mouseup","Mouse Up"],["input","Action"],["input","Validate"]],al=>al.target.value)):Wt.addEventListener("input",function(al){nt.setValue(T,{value:Et(!0)})}),this.data.combo&&this._setTextStyle(Wt),this._setBackgroundColor(Wt),this._setDefaultPropertiesFromJS(Wt),this.container.append(Wt),this.container}}class yl extends pt{constructor(nt){const{data:T,elements:ct}=nt;super(nt,{isRenderable:pt._hasPopupData(T)}),this.elements=ct}render(){this.container.classList.add("popupAnnotation");const nt=new Qt({container:this.container,color:this.data.color,titleObj:this.data.titleObj,modificationDate:this.data.modificationDate,contentsObj:this.data.contentsObj,richText:this.data.richText,rect:this.data.rect,parentRect:this.data.parentRect||null,parent:this.parent,elements:this.elements,open:this.data.open}),T=[];for(const ct of this.elements)ct.popup=nt,T.push(ct.data.id),ct.addHighlightArea();return this.container.setAttribute("aria-controls",T.map(ct=>`${Rt.AnnotationPrefix}${ct}`).join(",")),this.container}}class Qt{constructor(nt){E(this,P),E(this,dt),E(this,xt),E(this,Nt),E(this,F,null),E(this,L,A(this,P,Zt).bind(this)),E(this,g,A(this,Nt,zt).bind(this)),E(this,q,A(this,xt,it).bind(this)),E(this,v,A(this,dt,It).bind(this)),E(this,Q,null),E(this,R,null),E(this,j,null),E(this,I,null),E(this,k,null),E(this,C,null),E(this,U,!1),E(this,K,null),E(this,u,null),E(this,m,null),E(this,_,null),E(this,$,!1);var T;let{container:ct,color:Wt,elements:yt,titleObj:kt,modificationDate:Et,contentsObj:sl,richText:ml,parent:al,rect:zl,parentRect:Gl,open:Nl}=nt;Zl(this,R,ct),Zl(this,_,kt),Zl(this,j,sl),Zl(this,m,ml),Zl(this,k,al),Zl(this,Q,Wt),Zl(this,u,zl),Zl(this,C,Gl),Zl(this,I,yt);const pl=gt.PDFDateString.toDateObject(Et);pl&&Zl(this,F,al.l10n.get("annotation_date_string",{date:pl.toLocaleDateString(),time:pl.toLocaleTimeString()})),this.trigger=yt.flatMap(Rl=>Rl.getElementsToTriggerPopup());for(const Rl of this.trigger)Rl.addEventListener("click",t(this,v)),Rl.addEventListener("mouseenter",t(this,q)),Rl.addEventListener("mouseleave",t(this,g)),Rl.classList.add("popupTriggerArea");for(const Rl of yt)(T=Rl.container)==null||T.addEventListener("keydown",t(this,L));t(this,R).hidden=!0,Nl&&A(this,dt,It).call(this)}render(){if(t(this,K))return;const{page:{view:nt},viewport:{rawDims:{pageWidth:T,pageHeight:ct,pageX:Wt,pageY:yt}}}=t(this,k),kt=Zl(this,K,document.createElement("div"));if(kt.className="popup",t(this,Q)){const kl=kt.style.outlineColor=Rt.Util.makeHexColor(...t(this,Q));CSS.supports("background-color","color-mix(in srgb, red 30%, white)")?kt.style.backgroundColor=`color-mix(in srgb, ${kl} 30%, white)`:kt.style.backgroundColor=Rt.Util.makeHexColor(...t(this,Q).map(jl=>Math.floor(.7*(255-jl)+jl)))}const Et=document.createElement("span");Et.className="header";const sl=document.createElement("h1");if(Et.append(sl),{dir:sl.dir,str:sl.textContent}=t(this,_),kt.append(Et),t(this,F)){const kl=document.createElement("span");kl.classList.add("popupDate"),t(this,F).then(jl=>{kl.textContent=jl}),Et.append(kl)}const ml=t(this,j),al=t(this,m);if(al!=null&&al.str&&(!(ml!=null&&ml.str)||ml.str===al.str))vt.XfaLayer.render({xfaHtml:al.html,intent:"richText",div:kt}),kt.lastChild.classList.add("richText","popupContent");else{const kl=this._formatContents(ml);kt.append(kl)}let zl=!!t(this,C),Gl=zl?t(this,C):t(this,u);for(const kl of t(this,I))if(!Gl||Rt.Util.intersect(kl.data.rect,Gl)!==null){Gl=kl.data.rect,zl=!0;break}const Nl=Rt.Util.normalizeRect([Gl[0],nt[3]-Gl[1]+nt[1],Gl[2],nt[3]-Gl[3]+nt[1]]),pl=5,Rl=zl?Gl[2]-Gl[0]+pl:0,wl=Nl[0]+Rl,xl=Nl[1],{style:gl}=t(this,R);gl.left=`${100*(wl-Wt)/T}%`,gl.top=`${100*(xl-yt)/ct}%`,t(this,R).append(kt)}_formatContents(nt){let{str:T,dir:ct}=nt;const Wt=document.createElement("p");Wt.classList.add("popupContent"),Wt.dir=ct;const yt=T.split(/(?:\r\n?|\n)/);for(let kt=0,Et=yt.length;kt<Et;++kt){const sl=yt[kt];Wt.append(document.createTextNode(sl)),kt<Et-1&&Wt.append(document.createElement("br"))}return Wt}forceHide(){Zl(this,$,this.isVisible),t(this,$)&&(t(this,R).hidden=!0)}maybeShow(){t(this,$)&&(Zl(this,$,!1),t(this,R).hidden=!1)}get isVisible(){return t(this,R).hidden===!1}}F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakMap,K=new WeakMap,u=new WeakMap,m=new WeakMap,_=new WeakMap,$=new WeakMap,P=new WeakSet,Zt=function(Wl){Wl.altKey||Wl.shiftKey||Wl.ctrlKey||Wl.metaKey||(Wl.key==="Enter"||Wl.key==="Escape"&&t(this,U))&&A(this,dt,It).call(this)},dt=new WeakSet,It=function(){Zl(this,U,!t(this,U)),t(this,U)?(A(this,xt,it).call(this),t(this,R).addEventListener("click",t(this,v)),t(this,R).addEventListener("keydown",t(this,L))):(A(this,Nt,zt).call(this),t(this,R).removeEventListener("click",t(this,v)),t(this,R).removeEventListener("keydown",t(this,L)))},xt=new WeakSet,it=function(){t(this,K)||this.render(),this.isVisible?t(this,U)&&t(this,R).classList.add("focused"):(t(this,R).hidden=!1,t(this,R).style.zIndex=parseInt(t(this,R).style.zIndex)+1e3)},Nt=new WeakSet,zt=function(){t(this,R).classList.remove("focused"),!(t(this,U)||!this.isVisible)&&(t(this,R).hidden=!0,t(this,R).style.zIndex=parseInt(t(this,R).style.zIndex)-1e3)};class ot extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0}),this.textContent=nt.data.textContent,this.textPosition=nt.data.textPosition,this.annotationEditorType=Rt.AnnotationEditorType.FREETEXT}render(){if(this.container.classList.add("freeTextAnnotation"),this.textContent){const nt=document.createElement("div");nt.classList.add("annotationTextContent"),nt.setAttribute("role","comment");for(const T of this.textContent){const ct=document.createElement("span");ct.textContent=T,nt.append(ct)}this.container.append(nt)}return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this._editOnDoubleClick(),this.container}}r.FreeTextAnnotationElement=ot;class ut extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0}),E(this,Gt,null)}render(){this.container.classList.add("lineAnnotation");const nt=this.data,{width:T,height:ct}=_t(nt.rect),Wt=this.svgFactory.create(T,ct,!0),yt=Zl(this,Gt,this.svgFactory.createElement("svg:line"));return yt.setAttribute("x1",nt.rect[2]-nt.lineCoordinates[0]),yt.setAttribute("y1",nt.rect[3]-nt.lineCoordinates[1]),yt.setAttribute("x2",nt.rect[2]-nt.lineCoordinates[2]),yt.setAttribute("y2",nt.rect[3]-nt.lineCoordinates[3]),yt.setAttribute("stroke-width",nt.borderStyle.width||1),yt.setAttribute("stroke","transparent"),yt.setAttribute("fill","transparent"),Wt.append(yt),this.container.append(Wt),!nt.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return t(this,Gt)}addHighlightArea(){this.container.classList.add("highlightArea")}}Gt=new WeakMap;class Tt extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0}),E(this,Xt,null)}render(){this.container.classList.add("squareAnnotation");const nt=this.data,{width:T,height:ct}=_t(nt.rect),Wt=this.svgFactory.create(T,ct,!0),yt=nt.borderStyle.width,kt=Zl(this,Xt,this.svgFactory.createElement("svg:rect"));return kt.setAttribute("x",yt/2),kt.setAttribute("y",yt/2),kt.setAttribute("width",T-yt),kt.setAttribute("height",ct-yt),kt.setAttribute("stroke-width",yt||1),kt.setAttribute("stroke","transparent"),kt.setAttribute("fill","transparent"),Wt.append(kt),this.container.append(Wt),!nt.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return t(this,Xt)}addHighlightArea(){this.container.classList.add("highlightArea")}}Xt=new WeakMap;class jt extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0}),E(this,Ut,null)}render(){this.container.classList.add("circleAnnotation");const nt=this.data,{width:T,height:ct}=_t(nt.rect),Wt=this.svgFactory.create(T,ct,!0),yt=nt.borderStyle.width,kt=Zl(this,Ut,this.svgFactory.createElement("svg:ellipse"));return kt.setAttribute("cx",T/2),kt.setAttribute("cy",ct/2),kt.setAttribute("rx",T/2-yt/2),kt.setAttribute("ry",ct/2-yt/2),kt.setAttribute("stroke-width",yt||1),kt.setAttribute("stroke","transparent"),kt.setAttribute("fill","transparent"),Wt.append(kt),this.container.append(Wt),!nt.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return t(this,Ut)}addHighlightArea(){this.container.classList.add("highlightArea")}}Ut=new WeakMap;class Jt extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0}),E(this,Vt,null),this.containerClassName="polylineAnnotation",this.svgElementName="svg:polyline"}render(){this.container.classList.add(this.containerClassName);const nt=this.data,{width:T,height:ct}=_t(nt.rect),Wt=this.svgFactory.create(T,ct,!0);let yt=[];for(const Et of nt.vertices){const sl=Et.x-nt.rect[0],ml=nt.rect[3]-Et.y;yt.push(sl+","+ml)}yt=yt.join(" ");const kt=Zl(this,Vt,this.svgFactory.createElement(this.svgElementName));return kt.setAttribute("points",yt),kt.setAttribute("stroke-width",nt.borderStyle.width||1),kt.setAttribute("stroke","transparent"),kt.setAttribute("fill","transparent"),Wt.append(kt),this.container.append(Wt),!nt.popupRef&&this.hasPopupData&&this._createPopup(),this.container}getElementsToTriggerPopup(){return t(this,Vt)}addHighlightArea(){this.container.classList.add("highlightArea")}}Vt=new WeakMap;class Lt extends Jt{constructor(nt){super(nt),this.containerClassName="polygonAnnotation",this.svgElementName="svg:polygon"}}class Yt extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0})}render(){return this.container.classList.add("caretAnnotation"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container}}class Kt extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0}),E(this,Ht,[]),this.containerClassName="inkAnnotation",this.svgElementName="svg:polyline",this.annotationEditorType=Rt.AnnotationEditorType.INK}render(){this.container.classList.add(this.containerClassName);const nt=this.data,{width:T,height:ct}=_t(nt.rect),Wt=this.svgFactory.create(T,ct,!0);for(const yt of nt.inkLists){let kt=[];for(const sl of yt){const ml=sl.x-nt.rect[0],al=nt.rect[3]-sl.y;kt.push(`${ml},${al}`)}kt=kt.join(" ");const Et=this.svgFactory.createElement(this.svgElementName);t(this,Ht).push(Et),Et.setAttribute("points",kt),Et.setAttribute("stroke-width",nt.borderStyle.width||1),Et.setAttribute("stroke","transparent"),Et.setAttribute("fill","transparent"),!nt.popupRef&&this.hasPopupData&&this._createPopup(),Wt.append(Et)}return this.container.append(Wt),this.container}getElementsToTriggerPopup(){return t(this,Ht)}addHighlightArea(){this.container.classList.add("highlightArea")}}Ht=new WeakMap,r.InkAnnotationElement=Kt;class $t extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("highlightAnnotation"),this.container}}class tl extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("underlineAnnotation"),this.container}}class bl extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("squigglyAnnotation"),this.container}}class Bt extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0,createQuadrilaterals:!0})}render(){return!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container.classList.add("strikeoutAnnotation"),this.container}}class rl extends pt{constructor(nt){super(nt,{isRenderable:!0,ignoreBorder:!0})}render(){return this.container.classList.add("stampAnnotation"),!this.data.popupRef&&this.hasPopupData&&this._createPopup(),this.container}}r.StampAnnotationElement=rl;class hl extends pt{constructor(nt){var T;super(nt,{isRenderable:!0}),E(this,at),E(this,Pt,null);const{filename:ct,content:Wt}=this.data.file;this.filename=(0,gt.getFilenameFromUrl)(ct,!0),this.content=Wt,(T=this.linkService.eventBus)==null||T.dispatch("fileattachmentannotation",{source:this,filename:ct,content:Wt})}render(){this.container.classList.add("fileAttachmentAnnotation");const{container:nt,data:T}=this;let ct;T.hasAppearance||T.fillAlpha===0?ct=document.createElement("div"):(ct=document.createElement("img"),ct.src=`${this.imageResourcesPath}annotation-${/paperclip/i.test(T.name)?"paperclip":"pushpin"}.svg`,T.fillAlpha&&T.fillAlpha<1&&(ct.style=`filter: opacity(${Math.round(T.fillAlpha*100)}%);`)),ct.addEventListener("dblclick",A(this,at,S).bind(this)),Zl(this,Pt,ct);const{isMac:Wt}=Rt.FeatureTest.platform;return nt.addEventListener("keydown",yt=>{yt.key==="Enter"&&(Wt?yt.metaKey:yt.ctrlKey)&&A(this,at,S).call(this)}),!T.popupRef&&this.hasPopupData?this._createPopup():ct.classList.add("popupTriggerArea"),nt.append(ct),nt}getElementsToTriggerPopup(){return t(this,Pt)}addHighlightArea(){this.container.classList.add("highlightArea")}}Pt=new WeakMap,at=new WeakSet,S=function(){var Wl;(Wl=this.downloadManager)==null||Wl.openOrDownloadData(this.container,this.content,this.filename)};class Il{constructor(nt){E(this,H),E(this,lt),E(this,w,null),E(this,X,null),E(this,J,new Map);let{div:T,accessibilityManager:ct,annotationCanvasMap:Wt,l10n:yt,page:kt,viewport:Et}=nt;this.div=T,Zl(this,w,ct),Zl(this,X,Wt),this.l10n=yt,this.page=kt,this.viewport=Et,this.zIndex=0,this.l10n||(this.l10n=qt.NullL10n)}render(nt){return Sl(this,null,function*(){const{annotations:T}=nt,ct=this.div;(0,gt.setLayerDimensions)(ct,this.viewport);const Wt=new Map,yt={data:null,layer:ct,linkService:nt.linkService,downloadManager:nt.downloadManager,imageResourcesPath:nt.imageResourcesPath||"",renderForms:nt.renderForms!==!1,svgFactory:new gt.DOMSVGFactory,annotationStorage:nt.annotationStorage||new Ot.AnnotationStorage,enableScripting:nt.enableScripting===!0,hasJSActions:nt.hasJSActions,fieldObjects:nt.fieldObjects,parent:this,elements:null};for(const kt of T){if(kt.noHTML)continue;const Et=kt.annotationType===Rt.AnnotationType.POPUP;if(Et){const al=Wt.get(kt.id);if(!al)continue;yt.elements=al}else{const{width:al,height:zl}=_t(kt.rect);if(al<=0||zl<=0)continue}yt.data=kt;const sl=Ft.create(yt);if(!sl.isRenderable)continue;if(!Et&&kt.popupRef){const al=Wt.get(kt.popupRef);al?al.push(sl):Wt.set(kt.popupRef,[sl])}sl.annotationEditorType>0&&t(this,J).set(sl.data.id,sl);const ml=sl.render();kt.hidden&&(ml.style.visibility="hidden"),A(this,H,et).call(this,ml,kt.id)}A(this,lt,Mt).call(this),yield this.l10n.translate(ct)})}update(nt){let{viewport:T}=nt;const ct=this.div;this.viewport=T,(0,gt.setLayerDimensions)(ct,{rotation:T.rotation}),A(this,lt,Mt).call(this),ct.hidden=!1}getEditableAnnotations(){return Array.from(t(this,J).values())}getEditableAnnotation(nt){return t(this,J).get(nt)}}w=new WeakMap,X=new WeakMap,J=new WeakMap,H=new WeakSet,et=function(Wl,nt){var T;const ct=Wl.firstChild||Wl;ct.id=`${Rt.AnnotationPrefix}${nt}`,this.div.append(Wl),(T=t(this,w))==null||T.moveElementInDOM(this.div,Wl,ct,!1)},lt=new WeakSet,Mt=function(){if(!t(this,X))return;const Wl=this.div;for(const[nt,T]of t(this,X)){const ct=Wl.querySelector(`[data-annotation-id="${nt}"]`);if(!ct)continue;const{firstChild:Wt}=ct;Wt?Wt.nodeName==="CANVAS"?Wt.replaceWith(T):Wt.before(T):ct.append(T)}t(this,X).clear()},r.AnnotationLayer=Il},(st,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.ColorConverters=void 0;function h(f){return Math.floor(Math.max(0,Math.min(1,f))*255).toString(16).padStart(2,"0")}function M(f){return Math.max(0,Math.min(255,255*f))}class p{static CMYK_G(B){let[O,F,L,g]=B;return["G",1-Math.min(1,.3*O+.59*L+.11*F+g)]}static G_CMYK(B){let[O]=B;return["CMYK",0,0,0,1-O]}static G_RGB(B){let[O]=B;return["RGB",O,O,O]}static G_rgb(B){let[O]=B;return O=M(O),[O,O,O]}static G_HTML(B){let[O]=B;const F=h(O);return`#${F}${F}${F}`}static RGB_G(B){let[O,F,L]=B;return["G",.3*O+.59*F+.11*L]}static RGB_rgb(B){return B.map(M)}static RGB_HTML(B){return`#${B.map(h).join("")}`}static T_HTML(){return"#00000000"}static T_rgb(){return[null]}static CMYK_RGB(B){let[O,F,L,g]=B;return["RGB",1-Math.min(1,O+g),1-Math.min(1,L+g),1-Math.min(1,F+g)]}static CMYK_rgb(B){let[O,F,L,g]=B;return[M(1-Math.min(1,O+g)),M(1-Math.min(1,L+g)),M(1-Math.min(1,F+g))]}static CMYK_HTML(B){const O=this.CMYK_RGB(B).slice(1);return this.RGB_HTML(O)}static RGB_CMYK(B){let[O,F,L]=B;const g=1-O,q=1-F,v=1-L,Q=Math.min(g,q,v);return["CMYK",g,q,v,Q]}}r.ColorConverters=p},(st,r)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.NullL10n=void 0,r.getL10nFallback=M;const h={of_pages:"of {{pagesCount}}",page_of_pages:"({{pageNumber}} of {{pagesCount}})",document_properties_kb:"{{size_kb}} KB ({{size_b}} bytes)",document_properties_mb:"{{size_mb}} MB ({{size_b}} bytes)",document_properties_date_string:"{{date}}, {{time}}",document_properties_page_size_unit_inches:"in",document_properties_page_size_unit_millimeters:"mm",document_properties_page_size_orientation_portrait:"portrait",document_properties_page_size_orientation_landscape:"landscape",document_properties_page_size_name_a3:"A3",document_properties_page_size_name_a4:"A4",document_properties_page_size_name_letter:"Letter",document_properties_page_size_name_legal:"Legal",document_properties_page_size_dimension_string:"{{width}} × {{height}} {{unit}} ({{orientation}})",document_properties_page_size_dimension_name_string:"{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})",document_properties_linearized_yes:"Yes",document_properties_linearized_no:"No",additional_layers:"Additional Layers",page_landmark:"Page {{page}}",thumb_page_title:"Page {{page}}",thumb_page_canvas:"Thumbnail of Page {{page}}",find_reached_top:"Reached top of document, continued from bottom",find_reached_bottom:"Reached end of document, continued from top","find_match_count[one]":"{{current}} of {{total}} match","find_match_count[other]":"{{current}} of {{total}} matches","find_match_count_limit[one]":"More than {{limit}} match","find_match_count_limit[other]":"More than {{limit}} matches",find_not_found:"Phrase not found",page_scale_width:"Page Width",page_scale_fit:"Page Fit",page_scale_auto:"Automatic Zoom",page_scale_actual:"Actual Size",page_scale_percent:"{{scale}}%",loading_error:"An error occurred while loading the PDF.",invalid_file_error:"Invalid or corrupted PDF file.",missing_file_error:"Missing PDF file.",unexpected_response_error:"Unexpected server response.",rendering_error:"An error occurred while rendering the page.",annotation_date_string:"{{date}}, {{time}}",printing_not_supported:"Warning: Printing is not fully supported by this browser.",printing_not_ready:"Warning: The PDF is not fully loaded for printing.",web_fonts_disabled:"Web fonts are disabled: unable to use embedded PDF fonts.",free_text2_default_content:"Start typing…",editor_free_text2_aria_label:"Text Editor",editor_ink2_aria_label:"Draw Editor",editor_ink_canvas_aria_label:"User-created image",editor_alt_text_button_label:"Alt text",editor_alt_text_edit_button_label:"Edit alt text",editor_alt_text_decorative_tooltip:"Marked as decorative"};h.print_progress_percent="{{progress}}%";function M(O,F){switch(O){case"find_match_count":O=`find_match_count[${F.total===1?"one":"other"}]`;break;case"find_match_count_limit":O=`find_match_count_limit[${F.limit===1?"one":"other"}]`;break}return h[O]||""}function p(O,F){return F?O.replaceAll(/\{\{\s*(\w+)\s*\}\}/g,(L,g)=>g in F?F[g]:"{{"+g+"}}"):O}const f={getLanguage(){return Sl(this,null,function*(){return"en-us"})},getDirection(){return Sl(this,null,function*(){return"ltr"})},get(F){return Sl(this,arguments,function*(O){let L=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:M(O,L);return p(g,L)})},translate(O){return Sl(this,null,function*(){})}};r.NullL10n=f},(st,r,h)=>{Object.defineProperty(r,"__esModule",{value:!0}),r.XfaLayer=void 0,h(89);var M=h(194);class p{static setupStorage(B,O,F,L,g){const q=L.getValue(O,{value:null});switch(F.name){case"textarea":if(q.value!==null&&(B.textContent=q.value),g==="print")break;B.addEventListener("input",v=>{L.setValue(O,{value:v.target.value})});break;case"input":if(F.attributes.type==="radio"||F.attributes.type==="checkbox"){if(q.value===F.attributes.xfaOn?B.setAttribute("checked",!0):q.value===F.attributes.xfaOff&&B.removeAttribute("checked"),g==="print")break;B.addEventListener("change",v=>{L.setValue(O,{value:v.target.checked?v.target.getAttribute("xfaOn"):v.target.getAttribute("xfaOff")})})}else{if(q.value!==null&&B.setAttribute("value",q.value),g==="print")break;B.addEventListener("input",v=>{L.setValue(O,{value:v.target.value})})}break;case"select":if(q.value!==null){B.setAttribute("value",q.value);for(const v of F.children)v.attributes.value===q.value?v.attributes.selected=!0:v.attributes.hasOwnProperty("selected")&&delete v.attributes.selected}B.addEventListener("input",v=>{const Q=v.target.options,R=Q.selectedIndex===-1?"":Q[Q.selectedIndex].value;L.setValue(O,{value:R})});break}}static setAttributes(B){let{html:O,element:F,storage:L=null,intent:g,linkService:q}=B;const{attributes:v}=F,Q=O instanceof HTMLAnchorElement;v.type==="radio"&&(v.name=`${v.name}-${g}`);for(const[R,j]of Object.entries(v))if(j!=null)switch(R){case"class":j.length&&O.setAttribute(R,j.join(" "));break;case"dataId":break;case"id":O.setAttribute("data-element-id",j);break;case"style":Object.assign(O.style,j);break;case"textContent":O.textContent=j;break;default:(!Q||R!=="href"&&R!=="newWindow")&&O.setAttribute(R,j)}Q&&q.addLinkAttributes(O,v.href,v.newWindow),L&&v.dataId&&this.setupStorage(O,v.dataId,F,L)}static render(B){var O;const F=B.annotationStorage,L=B.linkService,g=B.xfaHtml,q=B.intent||"display",v=document.createElement(g.name);g.attributes&&this.setAttributes({html:v,element:g,intent:q,linkService:L});const Q=[[g,-1,v]],R=B.div;if(R.append(v),B.viewport){const I=`matrix(${B.viewport.transform.join(",")})`;R.style.transform=I}q!=="richText"&&R.setAttribute("class","xfaLayer xfaFont");const j=[];for(;Q.length>0;){const[I,k,C]=Q.at(-1);if(k+1===I.children.length){Q.pop();continue}const U=I.children[++Q.at(-1)[1]];if(U===null)continue;const{name:K}=U;if(K==="#text"){const m=document.createTextNode(U.value);j.push(m),C.append(m);continue}const u=(O=U==null?void 0:U.attributes)!=null&&O.xmlns?document.createElementNS(U.attributes.xmlns,K):document.createElement(K);if(C.append(u),U.attributes&&this.setAttributes({html:u,element:U,storage:F,intent:q,linkService:L}),U.children&&U.children.length>0)Q.push([U,-1,u]);else if(U.value){const m=document.createTextNode(U.value);M.XfaText.shouldBuildText(K)&&j.push(m),u.append(m)}}for(const I of R.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))I.setAttribute("readOnly",!0);return{textDivs:j}}static update(B){const O=`matrix(${B.viewport.transform.join(",")})`;B.div.style.transform=O,B.div.hidden=!1}}r.XfaLayer=p},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt,Ut,Vt,Ht,Pt,at,S,w,X,J,H,et,lt,Mt,Rt,gt,Ot,Dt,qt,vt,dl,ol,il,_t,Ft,wt,pt,Ct,el,cl,Ml,Yl,Xl,Tl,Vl;Object.defineProperty(r,"__esModule",{value:!0}),r.InkEditor=void 0,h(89),h(2);var Ll=h(1),yl=h(164),Qt=h(198),ot=h(168),ut=h(165);const Tt=class Kl extends yl.AnnotationEditor{constructor(Lt){super(vl(El({},Lt),{name:"inkEditor"})),E(this,k),E(this,U),E(this,u),E(this,_),E(this,P),E(this,dt),E(this,xt),E(this,Nt),E(this,Gt),E(this,Ut),E(this,Ht),E(this,at),E(this,w),E(this,J),E(this,et),E(this,Mt),E(this,gt),E(this,Dt),E(this,vt),E(this,Ct),E(this,cl),E(this,Yl),E(this,Tl),E(this,M,0),E(this,p,0),E(this,f,this.canvasPointermove.bind(this)),E(this,B,this.canvasPointerleave.bind(this)),E(this,O,this.canvasPointerup.bind(this)),E(this,F,this.canvasPointerdown.bind(this)),E(this,L,new Path2D),E(this,g,!1),E(this,q,!1),E(this,v,!1),E(this,Q,null),E(this,R,0),E(this,j,0),E(this,I,null),this.color=Lt.color||null,this.thickness=Lt.thickness||null,this.opacity=Lt.opacity||null,this.paths=[],this.bezierPath2D=[],this.allRawPaths=[],this.currentPath=[],this.scaleFactor=1,this.translationX=this.translationY=0,this.x=0,this.y=0,this._willKeepAspectRatio=!0}static initialize(Lt){yl.AnnotationEditor.initialize(Lt,{strings:["editor_ink_canvas_aria_label","editor_ink2_aria_label"]})}static updateDefaultParams(Lt,Yt){switch(Lt){case Ll.AnnotationEditorParamsType.INK_THICKNESS:Kl._defaultThickness=Yt;break;case Ll.AnnotationEditorParamsType.INK_COLOR:Kl._defaultColor=Yt;break;case Ll.AnnotationEditorParamsType.INK_OPACITY:Kl._defaultOpacity=Yt/100;break}}updateParams(Lt,Yt){switch(Lt){case Ll.AnnotationEditorParamsType.INK_THICKNESS:A(this,k,C).call(this,Yt);break;case Ll.AnnotationEditorParamsType.INK_COLOR:A(this,U,K).call(this,Yt);break;case Ll.AnnotationEditorParamsType.INK_OPACITY:A(this,u,m).call(this,Yt);break}}static get defaultPropertiesToUpdate(){return[[Ll.AnnotationEditorParamsType.INK_THICKNESS,Kl._defaultThickness],[Ll.AnnotationEditorParamsType.INK_COLOR,Kl._defaultColor||yl.AnnotationEditor._defaultLineColor],[Ll.AnnotationEditorParamsType.INK_OPACITY,Math.round(Kl._defaultOpacity*100)]]}get propertiesToUpdate(){var Lt;return[[Ll.AnnotationEditorParamsType.INK_THICKNESS,this.thickness||Kl._defaultThickness],[Ll.AnnotationEditorParamsType.INK_COLOR,this.color||Kl._defaultColor||yl.AnnotationEditor._defaultLineColor],[Ll.AnnotationEditorParamsType.INK_OPACITY,Math.round(100*((Lt=this.opacity)!=null?Lt:Kl._defaultOpacity))]]}rebuild(){this.parent&&(super.rebuild(),this.div!==null&&(this.canvas||(A(this,et,lt).call(this),A(this,Mt,Rt).call(this)),this.isAttachedToDOM||(this.parent.add(this),A(this,gt,Ot).call(this)),A(this,Tl,Vl).call(this)))}remove(){this.canvas!==null&&(this.isEmpty()||this.commit(),this.canvas.width=this.canvas.height=0,this.canvas.remove(),this.canvas=null,t(this,Q).disconnect(),Zl(this,Q,null),super.remove())}setParent(Lt){!this.parent&&Lt?this._uiManager.removeShouldRescale(this):this.parent&&Lt===null&&this._uiManager.addShouldRescale(this),super.setParent(Lt)}onScaleChanging(){const[Lt,Yt]=this.parentDimensions,Kt=this.width*Lt,$t=this.height*Yt;this.setDimensions(Kt,$t)}enableEditMode(){t(this,g)||this.canvas===null||(super.enableEditMode(),this._isDraggable=!1,this.canvas.addEventListener("pointerdown",t(this,F)))}disableEditMode(){!this.isInEditMode()||this.canvas===null||(super.disableEditMode(),this._isDraggable=!this.isEmpty(),this.div.classList.remove("editing"),this.canvas.removeEventListener("pointerdown",t(this,F)))}onceAdded(){this._isDraggable=!this.isEmpty()}isEmpty(){return this.paths.length===0||this.paths.length===1&&this.paths[0].length===0}commit(){t(this,g)||(super.commit(),this.isEditing=!1,this.disableEditMode(),this.setInForeground(),Zl(this,g,!0),this.div.classList.add("disabled"),A(this,Tl,Vl).call(this,!0),this.makeResizable(),this.parent.addInkEditorIfNeeded(!0),this.moveInDOM(),this.div.focus({preventScroll:!0}))}focusin(Lt){this._focusEventsAllowed&&(super.focusin(Lt),this.enableEditMode())}canvasPointerdown(Lt){Lt.button!==0||!this.isInEditMode()||t(this,g)||(this.setInForeground(),Lt.preventDefault(),Lt.type!=="mouse"&&this.div.focus(),A(this,dt,It).call(this,Lt.offsetX,Lt.offsetY))}canvasPointermove(Lt){Lt.preventDefault(),A(this,xt,it).call(this,Lt.offsetX,Lt.offsetY)}canvasPointerup(Lt){Lt.preventDefault(),A(this,J,H).call(this,Lt)}canvasPointerleave(Lt){A(this,J,H).call(this,Lt)}get isResizable(){return!this.isEmpty()&&t(this,g)}render(){if(this.div)return this.div;let Lt,Yt;this.width&&(Lt=this.x,Yt=this.y),super.render(),yl.AnnotationEditor._l10nPromise.get("editor_ink2_aria_label").then(Bt=>{var rl;return(rl=this.div)==null?void 0:rl.setAttribute("aria-label",Bt)});const[Kt,$t,tl,bl]=A(this,_,$).call(this);if(this.setAt(Kt,$t,0,0),this.setDims(tl,bl),A(this,et,lt).call(this),this.width){const[Bt,rl]=this.parentDimensions;this.setAspectRatio(this.width*Bt,this.height*rl),this.setAt(Lt*Bt,Yt*rl,this.width*Bt,this.height*rl),Zl(this,v,!0),A(this,gt,Ot).call(this),this.setDims(this.width*Bt,this.height*rl),A(this,w,X).call(this),this.div.classList.add("disabled")}else this.div.classList.add("editing"),this.enableEditMode();return A(this,Mt,Rt).call(this),this.div}setDimensions(Lt,Yt){const Kt=Math.round(Lt),$t=Math.round(Yt);if(t(this,R)===Kt&&t(this,j)===$t)return;Zl(this,R,Kt),Zl(this,j,$t),this.canvas.style.visibility="hidden";const[tl,bl]=this.parentDimensions;this.width=Lt/tl,this.height=Yt/bl,this.fixAndSetPosition(),t(this,g)&&A(this,Dt,qt).call(this,Lt,Yt),A(this,gt,Ot).call(this),A(this,w,X).call(this),this.canvas.style.visibility="visible",this.fixDims()}static deserialize(Lt,Yt,Kt){var $t,tl,bl;if(Lt instanceof Qt.InkAnnotationElement)return null;const Bt=super.deserialize(Lt,Yt,Kt);Bt.thickness=Lt.thickness,Bt.color=Ll.Util.makeHexColor(...Lt.color),Bt.opacity=Lt.opacity;const[rl,hl]=Bt.pageDimensions,Il=Bt.width*rl,Wl=Bt.height*hl,nt=Bt.parentScale,T=Lt.thickness/2;Zl(Bt,g,!0),Zl(Bt,R,Math.round(Il)),Zl(Bt,j,Math.round(Wl));const{paths:ct,rect:Wt,rotation:yt}=Lt;for(let{bezier:Et}of ct){Et=A($t=Kl,wt,pt).call($t,Et,Wt,yt);const sl=[];Bt.paths.push(sl);let ml=nt*(Et[0]-T),al=nt*(Et[1]-T);for(let Gl=2,Nl=Et.length;Gl<Nl;Gl+=6){const pl=nt*(Et[Gl]-T),Rl=nt*(Et[Gl+1]-T),wl=nt*(Et[Gl+2]-T),xl=nt*(Et[Gl+3]-T),gl=nt*(Et[Gl+4]-T),kl=nt*(Et[Gl+5]-T);sl.push([[ml,al],[pl,Rl],[wl,xl],[gl,kl]]),ml=gl,al=kl}const zl=A(this,ol,il).call(this,sl);Bt.bezierPath2D.push(zl)}const kt=A(tl=Bt,cl,Ml).call(tl);return Zl(Bt,p,Math.max(yl.AnnotationEditor.MIN_SIZE,kt[2]-kt[0])),Zl(Bt,M,Math.max(yl.AnnotationEditor.MIN_SIZE,kt[3]-kt[1])),A(bl=Bt,Dt,qt).call(bl,Il,Wl),Bt}serialize(){if(this.isEmpty())return null;const Lt=this.getRect(0,0),Yt=yl.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);return{annotationType:Ll.AnnotationEditorType.INK,color:Yt,thickness:this.thickness,opacity:this.opacity,paths:A(this,Ct,el).call(this,this.scaleFactor/this.parentScale,this.translationX,this.translationY,Lt),pageIndex:this.pageIndex,rect:Lt,rotation:this.rotation,structTreeParentId:this._structTreeParentId}}};M=new WeakMap,p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakMap,F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakSet,C=function(Jt){const Lt=this.thickness;this.addCommands({cmd:()=>{this.thickness=Jt,A(this,Tl,Vl).call(this)},undo:()=>{this.thickness=Lt,A(this,Tl,Vl).call(this)},mustExec:!0,type:Ll.AnnotationEditorParamsType.INK_THICKNESS,overwriteIfSameType:!0,keepUndo:!0})},U=new WeakSet,K=function(Jt){const Lt=this.color;this.addCommands({cmd:()=>{this.color=Jt,A(this,w,X).call(this)},undo:()=>{this.color=Lt,A(this,w,X).call(this)},mustExec:!0,type:Ll.AnnotationEditorParamsType.INK_COLOR,overwriteIfSameType:!0,keepUndo:!0})},u=new WeakSet,m=function(Jt){Jt/=100;const Lt=this.opacity;this.addCommands({cmd:()=>{this.opacity=Jt,A(this,w,X).call(this)},undo:()=>{this.opacity=Lt,A(this,w,X).call(this)},mustExec:!0,type:Ll.AnnotationEditorParamsType.INK_OPACITY,overwriteIfSameType:!0,keepUndo:!0})},_=new WeakSet,$=function(){const{parentRotation:Jt,parentDimensions:[Lt,Yt]}=this;switch(Jt){case 90:return[0,Yt,Yt,Lt];case 180:return[Lt,Yt,Lt,Yt];case 270:return[Lt,0,Yt,Lt];default:return[0,0,Lt,Yt]}},P=new WeakSet,Zt=function(){const{ctx:Jt,color:Lt,opacity:Yt,thickness:Kt,parentScale:$t,scaleFactor:tl}=this;Jt.lineWidth=Kt*$t/tl,Jt.lineCap="round",Jt.lineJoin="round",Jt.miterLimit=10,Jt.strokeStyle=`${Lt}${(0,ut.opacityToHex)(Yt)}`},dt=new WeakSet,It=function(Jt,Lt){var Yt;this.canvas.addEventListener("contextmenu",ot.noContextMenu),this.canvas.addEventListener("pointerleave",t(this,B)),this.canvas.addEventListener("pointermove",t(this,f)),this.canvas.addEventListener("pointerup",t(this,O)),this.canvas.removeEventListener("pointerdown",t(this,F)),this.isEditing=!0,t(this,v)||(Zl(this,v,!0),A(this,gt,Ot).call(this),this.thickness||(this.thickness=Tt._defaultThickness),this.color||(this.color=Tt._defaultColor||yl.AnnotationEditor._defaultLineColor),(Yt=this.opacity)!=null||(this.opacity=Tt._defaultOpacity)),this.currentPath.push([Jt,Lt]),Zl(this,q,!1),A(this,P,Zt).call(this),Zl(this,I,()=>{A(this,Ut,Vt).call(this),t(this,I)&&window.requestAnimationFrame(t(this,I))}),window.requestAnimationFrame(t(this,I))},xt=new WeakSet,it=function(Jt,Lt){const[Yt,Kt]=this.currentPath.at(-1);if(this.currentPath.length>1&&Jt===Yt&&Lt===Kt)return;const $t=this.currentPath;let tl=t(this,L);if($t.push([Jt,Lt]),Zl(this,q,!0),$t.length<=2){tl.moveTo(...$t[0]),tl.lineTo(Jt,Lt);return}$t.length===3&&(Zl(this,L,tl=new Path2D),tl.moveTo(...$t[0])),A(this,Ht,Pt).call(this,tl,...$t.at(-3),...$t.at(-2),Jt,Lt)},Nt=new WeakSet,zt=function(){if(this.currentPath.length===0)return;const Jt=this.currentPath.at(-1);t(this,L).lineTo(...Jt)},Gt=new WeakSet,Xt=function(Jt,Lt){Zl(this,I,null),Jt=Math.min(Math.max(Jt,0),this.canvas.width),Lt=Math.min(Math.max(Lt,0),this.canvas.height),A(this,xt,it).call(this,Jt,Lt),A(this,Nt,zt).call(this);let Yt;if(this.currentPath.length!==1)Yt=A(this,at,S).call(this);else{const Bt=[Jt,Lt];Yt=[[Bt,Bt.slice(),Bt.slice(),Bt]]}const Kt=t(this,L),$t=this.currentPath;this.currentPath=[],Zl(this,L,new Path2D);const tl=()=>{this.allRawPaths.push($t),this.paths.push(Yt),this.bezierPath2D.push(Kt),this.rebuild()},bl=()=>{this.allRawPaths.pop(),this.paths.pop(),this.bezierPath2D.pop(),this.paths.length===0?this.remove():(this.canvas||(A(this,et,lt).call(this),A(this,Mt,Rt).call(this)),A(this,Tl,Vl).call(this))};this.addCommands({cmd:tl,undo:bl,mustExec:!0})},Ut=new WeakSet,Vt=function(){if(!t(this,q))return;Zl(this,q,!1);const Jt=Math.ceil(this.thickness*this.parentScale),Lt=this.currentPath.slice(-3),Yt=Lt.map(tl=>tl[0]),Kt=Lt.map(tl=>tl[1]);Math.min(...Yt)-Jt,Math.max(...Yt)+Jt,Math.min(...Kt)-Jt,Math.max(...Kt)+Jt;const{ctx:$t}=this;$t.save(),$t.clearRect(0,0,this.canvas.width,this.canvas.height);for(const tl of this.bezierPath2D)$t.stroke(tl);$t.stroke(t(this,L)),$t.restore()},Ht=new WeakSet,Pt=function(Jt,Lt,Yt,Kt,$t,tl,bl){const Bt=(Lt+Kt)/2,rl=(Yt+$t)/2,hl=(Kt+tl)/2,Il=($t+bl)/2;Jt.bezierCurveTo(Bt+2*(Kt-Bt)/3,rl+2*($t-rl)/3,hl+2*(Kt-hl)/3,Il+2*($t-Il)/3,hl,Il)},at=new WeakSet,S=function(){const Jt=this.currentPath;if(Jt.length<=2)return[[Jt[0],Jt[0],Jt.at(-1),Jt.at(-1)]];const Lt=[];let Yt,[Kt,$t]=Jt[0];for(Yt=1;Yt<Jt.length-2;Yt++){const[Wl,nt]=Jt[Yt],[T,ct]=Jt[Yt+1],Wt=(Wl+T)/2,yt=(nt+ct)/2,kt=[Kt+2*(Wl-Kt)/3,$t+2*(nt-$t)/3],Et=[Wt+2*(Wl-Wt)/3,yt+2*(nt-yt)/3];Lt.push([[Kt,$t],kt,Et,[Wt,yt]]),[Kt,$t]=[Wt,yt]}const[tl,bl]=Jt[Yt],[Bt,rl]=Jt[Yt+1],hl=[Kt+2*(tl-Kt)/3,$t+2*(bl-$t)/3],Il=[Bt+2*(tl-Bt)/3,rl+2*(bl-rl)/3];return Lt.push([[Kt,$t],hl,Il,[Bt,rl]]),Lt},w=new WeakSet,X=function(){if(this.isEmpty()){A(this,vt,dl).call(this);return}A(this,P,Zt).call(this);const{canvas:Jt,ctx:Lt}=this;Lt.setTransform(1,0,0,1,0,0),Lt.clearRect(0,0,Jt.width,Jt.height),A(this,vt,dl).call(this);for(const Yt of this.bezierPath2D)Lt.stroke(Yt)},J=new WeakSet,H=function(Jt){this.canvas.removeEventListener("pointerleave",t(this,B)),this.canvas.removeEventListener("pointermove",t(this,f)),this.canvas.removeEventListener("pointerup",t(this,O)),this.canvas.addEventListener("pointerdown",t(this,F)),setTimeout(()=>{this.canvas.removeEventListener("contextmenu",ot.noContextMenu)},10),A(this,Gt,Xt).call(this,Jt.offsetX,Jt.offsetY),this.addToAnnotationStorage(),this.setInBackground()},et=new WeakSet,lt=function(){this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=0,this.canvas.className="inkEditorCanvas",yl.AnnotationEditor._l10nPromise.get("editor_ink_canvas_aria_label").then(Jt=>{var Lt;return(Lt=this.canvas)==null?void 0:Lt.setAttribute("aria-label",Jt)}),this.div.append(this.canvas),this.ctx=this.canvas.getContext("2d")},Mt=new WeakSet,Rt=function(){Zl(this,Q,new ResizeObserver(Jt=>{const Lt=Jt[0].contentRect;Lt.width&&Lt.height&&this.setDimensions(Lt.width,Lt.height)})),t(this,Q).observe(this.div)},gt=new WeakSet,Ot=function(){if(!t(this,v))return;const[Jt,Lt]=this.parentDimensions;this.canvas.width=Math.ceil(this.width*Jt),this.canvas.height=Math.ceil(this.height*Lt),A(this,vt,dl).call(this)},Dt=new WeakSet,qt=function(Jt,Lt){const Yt=A(this,Yl,Xl).call(this),Kt=(Jt-Yt)/t(this,p),$t=(Lt-Yt)/t(this,M);this.scaleFactor=Math.min(Kt,$t)},vt=new WeakSet,dl=function(){const Jt=A(this,Yl,Xl).call(this)/2;this.ctx.setTransform(this.scaleFactor,0,0,this.scaleFactor,this.translationX*this.scaleFactor+Jt,this.translationY*this.scaleFactor+Jt)},ol=new WeakSet,il=function(Jt){const Lt=new Path2D;for(let Yt=0,Kt=Jt.length;Yt<Kt;Yt++){const[$t,tl,bl,Bt]=Jt[Yt];Yt===0&&Lt.moveTo(...$t),Lt.bezierCurveTo(tl[0],tl[1],bl[0],bl[1],Bt[0],Bt[1])}return Lt},_t=new WeakSet,Ft=function(Jt,Lt,Yt){const[Kt,$t,tl,bl]=Lt;switch(Yt){case 0:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2)Jt[Bt]+=Kt,Jt[Bt+1]=bl-Jt[Bt+1];break;case 90:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2){const hl=Jt[Bt];Jt[Bt]=Jt[Bt+1]+Kt,Jt[Bt+1]=hl+$t}break;case 180:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2)Jt[Bt]=tl-Jt[Bt],Jt[Bt+1]+=$t;break;case 270:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2){const hl=Jt[Bt];Jt[Bt]=tl-Jt[Bt+1],Jt[Bt+1]=bl-hl}break;default:throw new Error("Invalid rotation")}return Jt},wt=new WeakSet,pt=function(Jt,Lt,Yt){const[Kt,$t,tl,bl]=Lt;switch(Yt){case 0:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2)Jt[Bt]-=Kt,Jt[Bt+1]=bl-Jt[Bt+1];break;case 90:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2){const hl=Jt[Bt];Jt[Bt]=Jt[Bt+1]-$t,Jt[Bt+1]=hl-Kt}break;case 180:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2)Jt[Bt]=tl-Jt[Bt],Jt[Bt+1]-=$t;break;case 270:for(let Bt=0,rl=Jt.length;Bt<rl;Bt+=2){const hl=Jt[Bt];Jt[Bt]=bl-Jt[Bt+1],Jt[Bt+1]=tl-hl}break;default:throw new Error("Invalid rotation")}return Jt},Ct=new WeakSet,el=function(Jt,Lt,Yt,Kt){var $t,tl;const bl=[],Bt=this.thickness/2,rl=Jt*Lt+Bt,hl=Jt*Yt+Bt;for(const Il of this.paths){const Wl=[],nt=[];for(let T=0,ct=Il.length;T<ct;T++){const[Wt,yt,kt,Et]=Il[T],sl=Jt*Wt[0]+rl,ml=Jt*Wt[1]+hl,al=Jt*yt[0]+rl,zl=Jt*yt[1]+hl,Gl=Jt*kt[0]+rl,Nl=Jt*kt[1]+hl,pl=Jt*Et[0]+rl,Rl=Jt*Et[1]+hl;T===0&&(Wl.push(sl,ml),nt.push(sl,ml)),Wl.push(al,zl,Gl,Nl,pl,Rl),nt.push(al,zl),T===ct-1&&nt.push(pl,Rl)}bl.push({bezier:A($t=Tt,_t,Ft).call($t,Wl,Kt,this.rotation),points:A(tl=Tt,_t,Ft).call(tl,nt,Kt,this.rotation)})}return bl},cl=new WeakSet,Ml=function(){let Jt=1/0,Lt=-1/0,Yt=1/0,Kt=-1/0;for(const $t of this.paths)for(const[tl,bl,Bt,rl]of $t){const hl=Ll.Util.bezierBoundingBox(...tl,...bl,...Bt,...rl);Jt=Math.min(Jt,hl[0]),Yt=Math.min(Yt,hl[1]),Lt=Math.max(Lt,hl[2]),Kt=Math.max(Kt,hl[3])}return[Jt,Yt,Lt,Kt]},Yl=new WeakSet,Xl=function(){return t(this,g)?Math.ceil(this.thickness*this.parentScale):0},Tl=new WeakSet,Vl=function(){let Jt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1;if(this.isEmpty())return;if(!t(this,g)){A(this,w,X).call(this);return}const Lt=A(this,cl,Ml).call(this),Yt=A(this,Yl,Xl).call(this);Zl(this,p,Math.max(yl.AnnotationEditor.MIN_SIZE,Lt[2]-Lt[0])),Zl(this,M,Math.max(yl.AnnotationEditor.MIN_SIZE,Lt[3]-Lt[1]));const Kt=Math.ceil(Yt+t(this,p)*this.scaleFactor),$t=Math.ceil(Yt+t(this,M)*this.scaleFactor),[tl,bl]=this.parentDimensions;this.width=Kt/tl,this.height=$t/bl,this.setAspectRatio(Kt,$t);const Bt=this.translationX,rl=this.translationY;this.translationX=-Lt[0],this.translationY=-Lt[1],A(this,gt,Ot).call(this),A(this,w,X).call(this),Zl(this,R,Kt),Zl(this,j,$t),this.setDims(Kt,$t);const hl=Jt?Yt/this.scaleFactor/2:0;this.translate(Bt-this.translationX-hl,rl-this.translationY-hl)},E(Tt,ol),E(Tt,_t),E(Tt,wt),tt(Tt,"_defaultColor",null),tt(Tt,"_defaultOpacity",1),tt(Tt,"_defaultThickness",1),tt(Tt,"_type","ink");let jt=Tt;r.InkEditor=jt},(st,r,h)=>{var M,p,f,B,O,F,L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it;Object.defineProperty(r,"__esModule",{value:!0}),r.StampEditor=void 0,h(149),h(152);var Nt=h(1),zt=h(164),Gt=h(168),Xt=h(198);const Ut=class extends zt.AnnotationEditor{constructor(Pt){super(vl(El({},Pt),{name:"stampEditor"})),E(this,Q),E(this,j),E(this,k),E(this,U),E(this,u),E(this,_),E(this,P),E(this,dt),E(this,xt),E(this,M,null),E(this,p,null),E(this,f,null),E(this,B,null),E(this,O,null),E(this,F,null),E(this,L,null),E(this,g,null),E(this,q,!1),E(this,v,!1),Zl(this,B,Pt.bitmapUrl),Zl(this,O,Pt.bitmapFile)}static initialize(Pt){zt.AnnotationEditor.initialize(Pt)}static get supportedTypes(){const Pt=["apng","avif","bmp","gif","jpeg","png","svg+xml","webp","x-icon"];return(0,Nt.shadow)(this,"supportedTypes",Pt.map(at=>`image/${at}`))}static get supportedTypesStr(){return(0,Nt.shadow)(this,"supportedTypesStr",this.supportedTypes.join(","))}static isHandlingMimeForPasting(Pt){return this.supportedTypes.includes(Pt)}static paste(Pt,at){at.pasteEditor(Nt.AnnotationEditorType.STAMP,{bitmapFile:Pt.getAsFile()})}remove(){var Pt,at;t(this,p)&&(Zl(this,M,null),this._uiManager.imageManager.deleteId(t(this,p)),(Pt=t(this,F))==null||Pt.remove(),Zl(this,F,null),(at=t(this,L))==null||at.disconnect(),Zl(this,L,null)),super.remove()}rebuild(){if(!this.parent){t(this,p)&&A(this,k,C).call(this);return}super.rebuild(),this.div!==null&&(t(this,p)&&A(this,k,C).call(this),this.isAttachedToDOM||this.parent.add(this))}onceAdded(){this._isDraggable=!0,this.div.focus()}isEmpty(){return!(t(this,f)||t(this,M)||t(this,B)||t(this,O))}get isResizable(){return!0}render(){if(this.div)return this.div;let Pt,at;if(this.width&&(Pt=this.x,at=this.y),super.render(),this.div.hidden=!0,t(this,M)?A(this,U,K).call(this):A(this,k,C).call(this),this.width){const[S,w]=this.parentDimensions;this.setAt(Pt*S,at*w,this.width*S,this.height*w)}return this.div}static deserialize(Pt,at,S){if(Pt instanceof Xt.StampAnnotationElement)return null;const w=super.deserialize(Pt,at,S),{rect:X,bitmapUrl:J,bitmapId:H,isSvg:et,accessibilityData:lt}=Pt;H&&S.imageManager.isValidId(H)?Zl(w,p,H):Zl(w,B,J),Zl(w,q,et);const[Mt,Rt]=w.pageDimensions;return w.width=(X[2]-X[0])/Mt,w.height=(X[3]-X[1])/Rt,lt&&(w.altTextData=lt),w}serialize(){let Pt=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,at=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(this.isEmpty())return null;const S={annotationType:Nt.AnnotationEditorType.STAMP,bitmapId:t(this,p),pageIndex:this.pageIndex,rect:this.getRect(0,0),rotation:this.rotation,isSvg:t(this,q),structTreeParentId:this._structTreeParentId};if(Pt)return S.bitmapUrl=A(this,dt,It).call(this,!0),S.accessibilityData=this.altTextData,S;const{decorative:w,altText:X}=this.altTextData;if(!w&&X&&(S.accessibilityData={type:"Figure",alt:X}),at===null)return S;at.stamps||(at.stamps=new Map);const J=t(this,q)?(S.rect[2]-S.rect[0])*(S.rect[3]-S.rect[1]):null;if(!at.stamps.has(t(this,p)))at.stamps.set(t(this,p),{area:J,serialized:S}),S.bitmap=A(this,dt,It).call(this,!1);else if(t(this,q)){const H=at.stamps.get(t(this,p));J>H.area&&(H.area=J,H.serialized.bitmap.close(),H.serialized.bitmap=A(this,dt,It).call(this,!1))}return S}};M=new WeakMap,p=new WeakMap,f=new WeakMap,B=new WeakMap,O=new WeakMap,F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakSet,R=function(Ht){let Pt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!Ht){this.remove();return}Zl(this,M,Ht.bitmap),Pt||(Zl(this,p,Ht.id),Zl(this,q,Ht.isSvg)),A(this,U,K).call(this)},j=new WeakSet,I=function(){Zl(this,f,null),this._uiManager.enableWaiting(!1),t(this,F)&&this.div.focus()},k=new WeakSet,C=function(){if(t(this,p)){this._uiManager.enableWaiting(!0),this._uiManager.imageManager.getFromId(t(this,p)).then(Pt=>A(this,Q,R).call(this,Pt,!0)).finally(()=>A(this,j,I).call(this));return}if(t(this,B)){const Pt=t(this,B);Zl(this,B,null),this._uiManager.enableWaiting(!0),Zl(this,f,this._uiManager.imageManager.getFromUrl(Pt).then(at=>A(this,Q,R).call(this,at)).finally(()=>A(this,j,I).call(this)));return}if(t(this,O)){const Pt=t(this,O);Zl(this,O,null),this._uiManager.enableWaiting(!0),Zl(this,f,this._uiManager.imageManager.getFromFile(Pt).then(at=>A(this,Q,R).call(this,at)).finally(()=>A(this,j,I).call(this)));return}const Ht=document.createElement("input");Ht.type="file",Ht.accept=Ut.supportedTypesStr,Zl(this,f,new Promise(Pt=>{Ht.addEventListener("change",()=>Sl(this,null,function*(){if(!Ht.files||Ht.files.length===0)this.remove();else{this._uiManager.enableWaiting(!0);const at=yield this._uiManager.imageManager.getFromFile(Ht.files[0]);A(this,Q,R).call(this,at)}Pt()})),Ht.addEventListener("cancel",()=>{this.remove(),Pt()})}).finally(()=>A(this,j,I).call(this))),Ht.click()},U=new WeakSet,K=function(){const{div:Ht}=this;let{width:Pt,height:at}=t(this,M);const[S,w]=this.pageDimensions,X=.75;if(this.width)Pt=this.width*S,at=this.height*w;else if(Pt>X*S||at>X*w){const lt=Math.min(X*S/Pt,X*w/at);Pt*=lt,at*=lt}const[J,H]=this.parentDimensions;this.setDims(Pt*J/S,at*H/w),this._uiManager.enableWaiting(!1);const et=Zl(this,F,document.createElement("canvas"));Ht.append(et),Ht.hidden=!1,A(this,P,Zt).call(this,Pt,at),A(this,xt,it).call(this),t(this,v)||(this.parent.addUndoableEditor(this),Zl(this,v,!0)),this._uiManager._eventBus.dispatch("reporttelemetry",{source:this,details:{type:"editing",subtype:this.editorType,data:{action:"inserted_image"}}}),this.addAltTextButton()},u=new WeakSet,m=function(Ht,Pt){var at;const[S,w]=this.parentDimensions;this.width=Ht/S,this.height=Pt/w,this.setDims(Ht,Pt),(at=this._initialOptions)!=null&&at.isCentered?this.center():this.fixAndSetPosition(),this._initialOptions=null,t(this,g)!==null&&clearTimeout(t(this,g)),Zl(this,g,setTimeout(()=>{Zl(this,g,null),A(this,P,Zt).call(this,Ht,Pt)},200))},_=new WeakSet,$=function(Ht,Pt){const{width:at,height:S}=t(this,M);let w=at,X=S,J=t(this,M);for(;w>2*Ht||X>2*Pt;){const H=w,et=X;w>2*Ht&&(w=w>=16384?Math.floor(w/2)-1:Math.ceil(w/2)),X>2*Pt&&(X=X>=16384?Math.floor(X/2)-1:Math.ceil(X/2));const lt=new OffscreenCanvas(w,X);lt.getContext("2d").drawImage(J,0,0,H,et,0,0,w,X),J=lt.transferToImageBitmap()}return J},P=new WeakSet,Zt=function(Ht,Pt){Ht=Math.ceil(Ht),Pt=Math.ceil(Pt);const at=t(this,F);if(!at||at.width===Ht&&at.height===Pt)return;at.width=Ht,at.height=Pt;const S=t(this,q)?t(this,M):A(this,_,$).call(this,Ht,Pt),w=at.getContext("2d");w.filter=this._uiManager.hcmFilter,w.drawImage(S,0,0,S.width,S.height,0,0,Ht,Pt)},dt=new WeakSet,It=function(Ht){if(Ht){if(t(this,q)){const at=this._uiManager.imageManager.getSvgUrl(t(this,p));if(at)return at}const Pt=document.createElement("canvas");return{width:Pt.width,height:Pt.height}=t(this,M),Pt.getContext("2d").drawImage(t(this,M),0,0),Pt.toDataURL()}if(t(this,q)){const[Pt,at]=this.pageDimensions,S=Math.round(this.width*Pt*Gt.PixelsPerInch.PDF_TO_CSS_UNITS),w=Math.round(this.height*at*Gt.PixelsPerInch.PDF_TO_CSS_UNITS),X=new OffscreenCanvas(S,w);return X.getContext("2d").drawImage(t(this,M),0,0,t(this,M).width,t(this,M).height,0,0,S,w),X.transferToImageBitmap()}return structuredClone(t(this,M))},xt=new WeakSet,it=function(){Zl(this,L,new ResizeObserver(Ht=>{const Pt=Ht[0].contentRect;Pt.width&&Pt.height&&A(this,u,m).call(this,Pt.width,Pt.height)})),t(this,L).observe(this.div)},tt(Ut,"_type","stamp");let Vt=Ut;r.StampEditor=Vt}],__webpack_module_cache__={};function __w_pdfjs_require__(st){var r=__webpack_module_cache__[st];if(r!==void 0)return r.exports;var h=__webpack_module_cache__[st]={exports:{}};return __webpack_modules__[st].call(h.exports,h,h.exports,__w_pdfjs_require__),h.exports}var __webpack_exports__={};return(()=>{var st=__webpack_exports__;Object.defineProperty(st,"__esModule",{value:!0}),Object.defineProperty(st,"AbortException",{enumerable:!0,get:function(){return r.AbortException}}),Object.defineProperty(st,"AnnotationEditorLayer",{enumerable:!0,get:function(){return f.AnnotationEditorLayer}}),Object.defineProperty(st,"AnnotationEditorParamsType",{enumerable:!0,get:function(){return r.AnnotationEditorParamsType}}),Object.defineProperty(st,"AnnotationEditorType",{enumerable:!0,get:function(){return r.AnnotationEditorType}}),Object.defineProperty(st,"AnnotationEditorUIManager",{enumerable:!0,get:function(){return B.AnnotationEditorUIManager}}),Object.defineProperty(st,"AnnotationLayer",{enumerable:!0,get:function(){return O.AnnotationLayer}}),Object.defineProperty(st,"AnnotationMode",{enumerable:!0,get:function(){return r.AnnotationMode}}),Object.defineProperty(st,"CMapCompressionType",{enumerable:!0,get:function(){return r.CMapCompressionType}}),Object.defineProperty(st,"DOMSVGFactory",{enumerable:!0,get:function(){return M.DOMSVGFactory}}),Object.defineProperty(st,"FeatureTest",{enumerable:!0,get:function(){return r.FeatureTest}}),Object.defineProperty(st,"GlobalWorkerOptions",{enumerable:!0,get:function(){return F.GlobalWorkerOptions}}),Object.defineProperty(st,"ImageKind",{enumerable:!0,get:function(){return r.ImageKind}}),Object.defineProperty(st,"InvalidPDFException",{enumerable:!0,get:function(){return r.InvalidPDFException}}),Object.defineProperty(st,"MissingPDFException",{enumerable:!0,get:function(){return r.MissingPDFException}}),Object.defineProperty(st,"OPS",{enumerable:!0,get:function(){return r.OPS}}),Object.defineProperty(st,"PDFDataRangeTransport",{enumerable:!0,get:function(){return h.PDFDataRangeTransport}}),Object.defineProperty(st,"PDFDateString",{enumerable:!0,get:function(){return M.PDFDateString}}),Object.defineProperty(st,"PDFWorker",{enumerable:!0,get:function(){return h.PDFWorker}}),Object.defineProperty(st,"PasswordResponses",{enumerable:!0,get:function(){return r.PasswordResponses}}),Object.defineProperty(st,"PermissionFlag",{enumerable:!0,get:function(){return r.PermissionFlag}}),Object.defineProperty(st,"PixelsPerInch",{enumerable:!0,get:function(){return M.PixelsPerInch}}),Object.defineProperty(st,"PromiseCapability",{enumerable:!0,get:function(){return r.PromiseCapability}}),Object.defineProperty(st,"RenderingCancelledException",{enumerable:!0,get:function(){return M.RenderingCancelledException}}),Object.defineProperty(st,"SVGGraphics",{enumerable:!0,get:function(){return h.SVGGraphics}}),Object.defineProperty(st,"UnexpectedResponseException",{enumerable:!0,get:function(){return r.UnexpectedResponseException}}),Object.defineProperty(st,"Util",{enumerable:!0,get:function(){return r.Util}}),Object.defineProperty(st,"VerbosityLevel",{enumerable:!0,get:function(){return r.VerbosityLevel}}),Object.defineProperty(st,"XfaLayer",{enumerable:!0,get:function(){return L.XfaLayer}}),Object.defineProperty(st,"build",{enumerable:!0,get:function(){return h.build}}),Object.defineProperty(st,"createValidAbsoluteUrl",{enumerable:!0,get:function(){return r.createValidAbsoluteUrl}}),Object.defineProperty(st,"getDocument",{enumerable:!0,get:function(){return h.getDocument}}),Object.defineProperty(st,"getFilenameFromUrl",{enumerable:!0,get:function(){return M.getFilenameFromUrl}}),Object.defineProperty(st,"getPdfFilenameFromUrl",{enumerable:!0,get:function(){return M.getPdfFilenameFromUrl}}),Object.defineProperty(st,"getXfaPageViewport",{enumerable:!0,get:function(){return M.getXfaPageViewport}}),Object.defineProperty(st,"isDataScheme",{enumerable:!0,get:function(){return M.isDataScheme}}),Object.defineProperty(st,"isPdfFile",{enumerable:!0,get:function(){return M.isPdfFile}}),Object.defineProperty(st,"loadScript",{enumerable:!0,get:function(){return M.loadScript}}),Object.defineProperty(st,"noContextMenu",{enumerable:!0,get:function(){return M.noContextMenu}}),Object.defineProperty(st,"normalizeUnicode",{enumerable:!0,get:function(){return r.normalizeUnicode}}),Object.defineProperty(st,"renderTextLayer",{enumerable:!0,get:function(){return p.renderTextLayer}}),Object.defineProperty(st,"setLayerDimensions",{enumerable:!0,get:function(){return M.setLayerDimensions}}),Object.defineProperty(st,"shadow",{enumerable:!0,get:function(){return r.shadow}}),Object.defineProperty(st,"updateTextLayer",{enumerable:!0,get:function(){return p.updateTextLayer}}),Object.defineProperty(st,"version",{enumerable:!0,get:function(){return h.version}});var r=__w_pdfjs_require__(1),h=__w_pdfjs_require__(124),M=__w_pdfjs_require__(168),p=__w_pdfjs_require__(195),f=__w_pdfjs_require__(196),B=__w_pdfjs_require__(165),O=__w_pdfjs_require__(198),F=__w_pdfjs_require__(176),L=__w_pdfjs_require__(201)})(),__webpack_exports__})())})(pdf);var pdfExports=pdf.exports;const PdfWorker="data:application/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDIzIE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi8KIWZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lLnBkZmpzV29ya2VyPXQoKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyIixbXSwoKCk9PmUucGRmanNXb3JrZXI9dCgpKSk6Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHNbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPWUucGRmanNXb3JrZXI9dCgpOmVbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPWUucGRmanNXb3JrZXI9dCgpfShnbG9iYWxUaGlzLCgoKT0+KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPVssKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LldvcmtlclRhc2s9dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj12b2lkIDA7YSgyKTthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxMTYpO2EoMTI3KTthKDEyOSk7YSgxMzIpO2EoMTM0KTthKDEzNik7YSgxMzgpO2EoMTQwKTthKDE0NCk7dmFyIHI9YSgxNDUpLG49YSgxNTApLGk9YSgxNTEpLHM9YSgxNTMpLG89YSgxNTcpLGM9YSgyMTkpLGw9YSgyMjQpLGg9YSgyNTgpLHU9YSgyNTkpLGQ9YSgyMjMpO2NsYXNzIFdvcmtlclRhc2t7Y29uc3RydWN0b3IoZSl7dGhpcy5uYW1lPWU7dGhpcy50ZXJtaW5hdGVkPSExO3RoaXMuX2NhcGFiaWxpdHk9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHl9Z2V0IGZpbmlzaGVkKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX1maW5pc2goKXt0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKX10ZXJtaW5hdGUoKXt0aGlzLnRlcm1pbmF0ZWQ9ITB9ZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKHRoaXMudGVybWluYXRlZCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkIil9fXQuV29ya2VyVGFzaz1Xb3JrZXJUYXNrO2NsYXNzIFdvcmtlck1lc3NhZ2VIYW5kbGVye3N0YXRpYyBzZXR1cChlLHQpe2xldCBhPSExO2Uub24oInRlc3QiLChmdW5jdGlvbih0KXtpZighYSl7YT0hMDtlLnNlbmQoInRlc3QiLHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KX19KSk7ZS5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsci5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpO2Uub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbihlKXtyZXR1cm4gV29ya2VyTWVzc2FnZUhhbmRsZXIuY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCl9KSl9c3RhdGljIGNyZWF0ZURvY3VtZW50SGFuZGxlcihlLHQpe2xldCBhLGY9ITEsZz1udWxsO2NvbnN0IHA9bmV3IFNldCxtPSgwLHIuZ2V0VmVyYm9zaXR5TGV2ZWwpKCkse2RvY0lkOmIsYXBpVmVyc2lvbjp5fT1lLHc9IjMuMTEuMTc0IjtpZih5IT09dyl0aHJvdyBuZXcgRXJyb3IoYFRoZSBBUEkgdmVyc2lvbiAiJHt5fSIgZG9lcyBub3QgbWF0Y2ggdGhlIFdvcmtlciB2ZXJzaW9uICIke3d9Ii5gKTtjb25zdCBTPVtdO2Zvcihjb25zdCBlIGluW10pUy5wdXNoKGUpO2lmKFMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGBBcnJheS5wcm90b3R5cGVgIGNvbnRhaW5zIHVuZXhwZWN0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzOiAiK1Muam9pbigiLCAiKSsiOyB0aHVzIGJyZWFraW5nIGUuZy4gYGZvci4uLmluYCBpdGVyYXRpb24gb2YgYEFycmF5YHMuIik7Y29uc3QgeD1iKyJfd29ya2VyIjtsZXQgQz1uZXcgaC5NZXNzYWdlSGFuZGxlcih4LGIsdCk7ZnVuY3Rpb24gZW5zdXJlTm90VGVybWluYXRlZCgpe2lmKGYpdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1mdW5jdGlvbiBzdGFydFdvcmtlclRhc2soZSl7cC5hZGQoZSl9ZnVuY3Rpb24gZmluaXNoV29ya2VyVGFzayhlKXtlLmZpbmlzaCgpO3AuZGVsZXRlKGUpfWFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChlKXthd2FpdCBhLmVuc3VyZURvYygiY2hlY2tIZWFkZXIiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTthd2FpdCBhLmVuc3VyZURvYygicGFyc2UiLFtlXSk7YXdhaXQgYS5lbnN1cmVEb2MoImNoZWNrRmlyc3RQYWdlIixbZV0pO2F3YWl0IGEuZW5zdXJlRG9jKCJjaGVja0xhc3RQYWdlIixbZV0pO2NvbnN0IHQ9YXdhaXQgYS5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2lmKHQpe2NvbnN0IGU9bmV3IFdvcmtlclRhc2soImxvYWRYZmFGb250cyIpO3N0YXJ0V29ya2VyVGFzayhlKTthd2FpdCBQcm9taXNlLmFsbChbYS5sb2FkWGZhRm9udHMoQyxlKS5jYXRjaCgoZT0+e30pKS50aGVuKCgoKT0+ZmluaXNoV29ya2VyVGFzayhlKSkpLGEubG9hZFhmYUltYWdlcygpXSl9Y29uc3RbcixuXT1hd2FpdCBQcm9taXNlLmFsbChbYS5lbnN1cmVEb2MoIm51bVBhZ2VzIiksYS5lbnN1cmVEb2MoImZpbmdlcnByaW50cyIpXSk7cmV0dXJue251bVBhZ2VzOnIsZmluZ2VycHJpbnRzOm4saHRtbEZvclhmYTp0P2F3YWl0IGEuZW5zdXJlRG9jKCJodG1sRm9yWGZhIik6bnVsbH19ZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcihlKXtsZXR7ZGF0YTp0LHBhc3N3b3JkOmEsZGlzYWJsZUF1dG9GZXRjaDppLHJhbmdlQ2h1bmtTaXplOm8sbGVuZ3RoOmMsZG9jQmFzZVVybDpsLGVuYWJsZVhmYTpoLGV2YWx1YXRvck9wdGlvbnM6ZH09ZTtjb25zdCBmPXtzb3VyY2U6bnVsbCxkaXNhYmxlQXV0b0ZldGNoOmksZG9jQmFzZVVybDpsLGRvY0lkOmIsZW5hYmxlWGZhOmgsZXZhbHVhdG9yT3B0aW9uczpkLGhhbmRsZXI6QyxsZW5ndGg6YyxwYXNzd29yZDphLHJhbmdlQ2h1bmtTaXplOm99LHA9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7bGV0IG07aWYodCl7dHJ5e2Yuc291cmNlPXQ7bT1uZXcgcy5Mb2NhbFBkZk1hbmFnZXIoZik7cC5yZXNvbHZlKG0pfWNhdGNoKGUpe3AucmVqZWN0KGUpfXJldHVybiBwLnByb21pc2V9bGV0IHksdz1bXTt0cnl7eT1uZXcgdS5QREZXb3JrZXJTdHJlYW0oQyl9Y2F0Y2goZSl7cC5yZWplY3QoZSk7cmV0dXJuIHAucHJvbWlzZX1jb25zdCBTPXkuZ2V0RnVsbFJlYWRlcigpO1MuaGVhZGVyc1JlYWR5LnRoZW4oKGZ1bmN0aW9uKCl7aWYoUy5pc1JhbmdlU3VwcG9ydGVkKXtmLnNvdXJjZT15O2YubGVuZ3RoPVMuY29udGVudExlbmd0aDtmLmRpc2FibGVBdXRvRmV0Y2h8fD1TLmlzU3RyZWFtaW5nU3VwcG9ydGVkO209bmV3IHMuTmV0d29ya1BkZk1hbmFnZXIoZik7Zm9yKGNvbnN0IGUgb2YgdyltLnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk7dz1bXTtwLnJlc29sdmUobSk7Zz1udWxsfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cC5yZWplY3QoZSk7Zz1udWxsfSkpO2xldCB4PTA7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7Y29uc3QgcmVhZENodW5rPWZ1bmN0aW9uKGUpe2xldHt2YWx1ZTphLGRvbmU6aX09ZTt0cnl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2lmKGkpe218fGZ1bmN0aW9uKCl7Y29uc3QgZT0oMCxuLmFycmF5QnVmZmVyc1RvQnl0ZXMpKHcpO2MmJmUubGVuZ3RoIT09YyYmKDAsci53YXJuKSgicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsIik7dHJ5e2Yuc291cmNlPWU7bT1uZXcgcy5Mb2NhbFBkZk1hbmFnZXIoZik7cC5yZXNvbHZlKG0pfWNhdGNoKGUpe3AucmVqZWN0KGUpfXc9W119KCk7Zz1udWxsO3JldHVybn14Kz1hLmJ5dGVMZW5ndGg7Uy5pc1N0cmVhbWluZ1N1cHBvcnRlZHx8Qy5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp4LHRvdGFsOk1hdGgubWF4KHgsUy5jb250ZW50TGVuZ3RofHwwKX0pO20/bS5zZW5kUHJvZ3Jlc3NpdmVEYXRhKGEpOncucHVzaChhKTtTLnJlYWQoKS50aGVuKHJlYWRDaHVuayx0KX1jYXRjaChlKXt0KGUpfX07Uy5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucmVqZWN0KGUpO2c9bnVsbH0pKTtnPWZ1bmN0aW9uKGUpe3kuY2FuY2VsQWxsUmVxdWVzdHMoZSl9O3JldHVybiBwLnByb21pc2V9Qy5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbYS5lbnN1cmUoZSwicm90YXRlIiksYS5lbnN1cmUoZSwicmVmIiksYS5lbnN1cmUoZSwidXNlclVuaXQiKSxhLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihlKXtsZXRbdCxhLHIsbl09ZTtyZXR1cm57cm90YXRlOnQscmVmOmEsdXNlclVuaXQ6cix2aWV3Om59fSkpfSkpfSkpO0Mub24oIkdldFBhZ2VJbmRleCIsKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9aS5SZWYuZ2V0KGUubnVtLGUuZ2VuKTtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFt0XSl9KSk7Qy5vbigiR2V0RGVzdGluYXRpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiZGVzdGluYXRpb25zIil9KSk7Qy5vbigiR2V0RGVzdGluYXRpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJnZXREZXN0aW5hdGlvbiIsW2UuaWRdKX0pKTtDLm9uKCJHZXRQYWdlTGFiZWxzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygicGFnZUxhYmVscyIpfSkpO0Mub24oIkdldFBhZ2VMYXlvdXQiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTGF5b3V0Iil9KSk7Qy5vbigiR2V0UGFnZU1vZGUiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJwYWdlTW9kZSIpfSkpO0Mub24oIkdldFZpZXdlclByZWZlcmVuY2VzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygidmlld2VyUHJlZmVyZW5jZXMiKX0pKTtDLm9uKCJHZXRPcGVuQWN0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygib3BlbkFjdGlvbiIpfSkpO0Mub24oIkdldEF0dGFjaG1lbnRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKX0pKTtDLm9uKCJHZXREb2NKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKX0pKTtDLm9uKCJHZXRQYWdlSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7bGV0e3BhZ2VJbmRleDp0fT1lO3JldHVybiBhLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlKGUsImpzQWN0aW9ucyIpfSkpfSkpO0Mub24oIkdldE91dGxpbmUiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJkb2N1bWVudE91dGxpbmUiKX0pKTtDLm9uKCJHZXRPcHRpb25hbENvbnRlbnRDb25maWciLChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmVDYXRhbG9nKCJvcHRpb25hbENvbnRlbnRDb25maWciKX0pKTtDLm9uKCJHZXRQZXJtaXNzaW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coInBlcm1pc3Npb25zIil9KSk7Qy5vbigiR2V0TWV0YWRhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2EuZW5zdXJlRG9jKCJkb2N1bWVudEluZm8iKSxhLmVuc3VyZUNhdGFsb2coIm1ldGFkYXRhIildKX0pKTtDLm9uKCJHZXRNYXJrSW5mbyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZUNhdGFsb2coIm1hcmtJbmZvIil9KSk7Qy5vbigiR2V0RGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5ieXRlc30pKX0pKTtDLm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe2xldHtwYWdlSW5kZXg6dCxpbnRlbnQ6cn09ZTtyZXR1cm4gYS5nZXRQYWdlKHQpLnRoZW4oKGZ1bmN0aW9uKGUpe2NvbnN0IGE9bmV3IFdvcmtlclRhc2soYEdldEFubm90YXRpb25zOiBwYWdlICR7dH1gKTtzdGFydFdvcmtlclRhc2soYSk7cmV0dXJuIGUuZ2V0QW5ub3RhdGlvbnNEYXRhKEMsYSxyKS50aGVuKChlPT57ZmluaXNoV29ya2VyVGFzayhhKTtyZXR1cm4gZX0pLChlPT57ZmluaXNoV29ya2VyVGFzayhhKTt0aHJvdyBlfSkpfSkpfSkpO0Mub24oIkdldEZpZWxkT2JqZWN0cyIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmVuc3VyZURvYygiZmllbGRPYmplY3RzIil9KSk7Qy5vbigiSGFzSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJoYXNKU0FjdGlvbnMiKX0pKTtDLm9uKCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEuZW5zdXJlRG9jKCJjYWxjdWxhdGlvbk9yZGVySWRzIil9KSk7Qy5vbigiU2F2ZURvY3VtZW50IiwoYXN5bmMgZnVuY3Rpb24oZSl7bGV0e2lzUHVyZVhmYTp0LG51bVBhZ2VzOnMsYW5ub3RhdGlvblN0b3JhZ2U6YyxmaWxlbmFtZTpofT1lO2NvbnN0IHU9W2EucmVxdWVzdExvYWRlZFN0cmVhbSgpLGEuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxhLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtUmVmIiksYS5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpLGEuZW5zdXJlRG9jKCJ4cmVmIiksYS5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxhLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290IildLGY9W10sZz10P251bGw6KDAsbi5nZXROZXdBbm5vdGF0aW9uc01hcCkoYyksW3AsbSxiLHksdyxTLHhdPWF3YWl0IFByb21pc2UuYWxsKHUpLHY9dy50cmFpbGVyLmdldFJhdygiUm9vdCIpfHxudWxsO2xldCBrO2lmKGcpe3g/YXdhaXQgeC5jYW5VcGRhdGVTdHJ1Y3RUcmVlKHtwZGZNYW5hZ2VyOmEsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6Z30pJiYoaz14KTphd2FpdCBkLlN0cnVjdFRyZWVSb290LmNhbkNyZWF0ZVN0cnVjdHVyZVRyZWUoe2NhdGFsb2dSZWY6dixwZGZNYW5hZ2VyOmEsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6Z30pJiYoaz1udWxsKTtjb25zdCBlPW8uQW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXMoYy52YWx1ZXMoKSx3LGEuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCksdD12b2lkIDA9PT1rP2Y6W107Zm9yKGNvbnN0W3Isbl1vZiBnKXQucHVzaChhLmdldFBhZ2UocikudGhlbigodD0+e2NvbnN0IGE9bmV3IFdvcmtlclRhc2soYFNhdmUgKGVkaXRvcik6IHBhZ2UgJHtyfWApO3JldHVybiB0LnNhdmVOZXdBbm5vdGF0aW9ucyhDLGEsbixlKS5maW5hbGx5KChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soYSl9KSl9KSkpO251bGw9PT1rP2YucHVzaChQcm9taXNlLmFsbCh0KS50aGVuKChhc3luYyBlPT57YXdhaXQgZC5TdHJ1Y3RUcmVlUm9vdC5jcmVhdGVTdHJ1Y3R1cmVUcmVlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTpnLHhyZWY6dyxjYXRhbG9nUmVmOnYscGRmTWFuYWdlcjphLG5ld1JlZnM6ZX0pO3JldHVybiBlfSkpKTprJiZmLnB1c2goUHJvbWlzZS5hbGwodCkudGhlbigoYXN5bmMgZT0+e2F3YWl0IGsudXBkYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZyxwZGZNYW5hZ2VyOmEsbmV3UmVmczplfSk7cmV0dXJuIGV9KSkpfWlmKHQpZi5wdXNoKGEuc2VyaWFsaXplWGZhRGF0YShjKSk7ZWxzZSBmb3IobGV0IGU9MDtlPHM7ZSsrKWYucHVzaChhLmdldFBhZ2UoZSkudGhlbigoZnVuY3Rpb24odCl7Y29uc3QgYT1uZXcgV29ya2VyVGFzayhgU2F2ZTogcGFnZSAke2V9YCk7cmV0dXJuIHQuc2F2ZShDLGEsYykuZmluYWxseSgoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKGEpfSkpfSkpKTtjb25zdCBPPWF3YWl0IFByb21pc2UuYWxsKGYpO2xldCBUPVtdLE09bnVsbDtpZih0KXtNPU9bMF07aWYoIU0pcmV0dXJuIHAuYnl0ZXN9ZWxzZXtUPU8uZmxhdCgyKTtpZigwPT09VC5sZW5ndGgpcmV0dXJuIHAuYnl0ZXN9Y29uc3QgRT1iJiZtIGluc3RhbmNlb2YgaS5EaWN0JiZULnNvbWUoKGU9PmUubmVlZEFwcGVhcmFuY2VzKSksRD1tIGluc3RhbmNlb2YgaS5EaWN0JiZtLmdldCgiWEZBIil8fG51bGw7bGV0IFI9bnVsbCxOPSExO2lmKEFycmF5LmlzQXJyYXkoRCkpe2ZvcihsZXQgZT0wLHQ9RC5sZW5ndGg7ZTx0O2UrPTIpaWYoImRhdGFzZXRzIj09PURbZV0pe1I9RFtlKzFdO049ITB9bnVsbD09PVImJihSPXcuZ2V0TmV3VGVtcG9yYXJ5UmVmKCkpfWVsc2UgRCYmKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgWEZBIHR5cGUuIik7bGV0IEw9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih3LnRyYWlsZXIpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PXcudHJhaWxlci5nZXQoIkluZm8iKXx8bnVsbDt0IGluc3RhbmNlb2YgaS5EaWN0JiZ0LmZvckVhY2goKCh0LGEpPT57InN0cmluZyI9PXR5cGVvZiBhJiYoZVt0XT0oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShhKSl9KSk7TD17cm9vdFJlZjp2LGVuY3J5cHRSZWY6dy50cmFpbGVyLmdldFJhdygiRW5jcnlwdCIpfHxudWxsLG5ld1JlZjp3LmdldE5ld1RlbXBvcmFyeVJlZigpLGluZm9SZWY6dy50cmFpbGVyLmdldFJhdygiSW5mbyIpfHxudWxsLGluZm86ZSxmaWxlSWRzOncudHJhaWxlci5nZXQoIklEIil8fG51bGwsc3RhcnRYUmVmOlM/eTp3Lmxhc3RYUmVmU3RyZWFtUG9zPz95LGZpbGVuYW1lOmh9fXJldHVybigwLGwuaW5jcmVtZW50YWxVcGRhdGUpKHtvcmlnaW5hbERhdGE6cC5ieXRlcyx4cmVmSW5mbzpMLG5ld1JlZnM6VCx4cmVmOncsaGFzWGZhOiEhRCx4ZmFEYXRhc2V0c1JlZjpSLGhhc1hmYURhdGFzZXRzRW50cnk6TixuZWVkQXBwZWFyYW5jZXM6RSxhY3JvRm9ybVJlZjpiLGFjcm9Gb3JtOm0seGZhRGF0YTpNfSkuZmluYWxseSgoKCk9Pnt3LnJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl9KSl9KSk7Qy5vbigiR2V0T3BlcmF0b3JMaXN0IiwoZnVuY3Rpb24oZSx0KXtjb25zdCBuPWUucGFnZUluZGV4O2EuZ2V0UGFnZShuKS50aGVuKChmdW5jdGlvbihhKXtjb25zdCBpPW5ldyBXb3JrZXJUYXNrKGBHZXRPcGVyYXRvckxpc3Q6IHBhZ2UgJHtufWApO3N0YXJ0V29ya2VyVGFzayhpKTtjb25zdCBzPW0+PXIuVmVyYm9zaXR5TGV2ZWwuSU5GT1M/RGF0ZS5ub3coKTowO2EuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOkMsc2luazp0LHRhc2s6aSxpbnRlbnQ6ZS5pbnRlbnQsY2FjaGVLZXk6ZS5jYWNoZUtleSxhbm5vdGF0aW9uU3RvcmFnZTplLmFubm90YXRpb25TdG9yYWdlfSkudGhlbigoZnVuY3Rpb24oZSl7ZmluaXNoV29ya2VyVGFzayhpKTtzJiYoMCxyLmluZm8pKGBwYWdlPSR7bisxfSAtIGdldE9wZXJhdG9yTGlzdDogdGltZT0ke0RhdGUubm93KCktc31tcywgbGVuPSR7ZS5sZW5ndGh9YCk7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soaSk7aS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO0Mub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXtjb25zdHtwYWdlSW5kZXg6bixpbmNsdWRlTWFya2VkQ29udGVudDppLGRpc2FibGVOb3JtYWxpemF0aW9uOnN9PWU7YS5nZXRQYWdlKG4pLnRoZW4oKGZ1bmN0aW9uKGUpe2NvbnN0IGE9bmV3IFdvcmtlclRhc2soIkdldFRleHRDb250ZW50OiBwYWdlICIrbik7c3RhcnRXb3JrZXJUYXNrKGEpO2NvbnN0IG89bT49ci5WZXJib3NpdHlMZXZlbC5JTkZPUz9EYXRlLm5vdygpOjA7ZS5leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6Qyx0YXNrOmEsc2luazp0LGluY2x1ZGVNYXJrZWRDb250ZW50OmksZGlzYWJsZU5vcm1hbGl6YXRpb246c30pLnRoZW4oKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhhKTtvJiYoMCxyLmluZm8pKGBwYWdlPSR7bisxfSAtIGdldFRleHRDb250ZW50OiB0aW1lPWArKERhdGUubm93KCktbykrIm1zIik7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2soYSk7YS50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO0Mub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gYS5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpO0Mub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiBhLmZvbnRGYWxsYmFjayhlLmlkLEMpfSkpO0Mub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gYS5jbGVhbnVwKCEwKX0pKTtDLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXtmPSEwO2NvbnN0IHQ9W107aWYoYSl7YS50ZXJtaW5hdGUobmV3IHIuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Y29uc3QgZT1hLmNsZWFudXAoKTt0LnB1c2goZSk7YT1udWxsfWVsc2UoMCxjLmNsZWFyR2xvYmFsQ2FjaGVzKSgpO2cmJmcobmV3IHIuQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Zm9yKGNvbnN0IGUgb2YgcCl7dC5wdXNoKGUuZmluaXNoZWQpO2UudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7Qy5kZXN0cm95KCk7Qz1udWxsfSkpfSkpO0Mub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHNldHVwRG9jKGUpe2Z1bmN0aW9uIG9uU3VjY2VzcyhlKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7Qy5zZW5kKCJHZXREb2MiLHtwZGZJbmZvOmV9KX1mdW5jdGlvbiBvbkZhaWx1cmUoZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2lmKGUgaW5zdGFuY2VvZiByLlBhc3N3b3JkRXhjZXB0aW9uKXtjb25zdCB0PW5ldyBXb3JrZXJUYXNrKGBQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgJHtlLmNvZGV9YCk7c3RhcnRXb3JrZXJUYXNrKHQpO0Muc2VuZFdpdGhQcm9taXNlKCJQYXNzd29yZFJlcXVlc3QiLGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2xldHtwYXNzd29yZDpyfT1lO2ZpbmlzaFdvcmtlclRhc2sodCk7YS51cGRhdGVQYXNzd29yZChyKTtwZGZNYW5hZ2VyUmVhZHkoKX0pKS5jYXRjaCgoZnVuY3Rpb24oKXtmaW5pc2hXb3JrZXJUYXNrKHQpO0Muc2VuZCgiRG9jRXhjZXB0aW9uIixlKX0pKX1lbHNlIGUgaW5zdGFuY2VvZiByLkludmFsaWRQREZFeGNlcHRpb258fGUgaW5zdGFuY2VvZiByLk1pc3NpbmdQREZFeGNlcHRpb258fGUgaW5zdGFuY2VvZiByLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIHIuVW5rbm93bkVycm9yRXhjZXB0aW9uP0Muc2VuZCgiRG9jRXhjZXB0aW9uIixlKTpDLnNlbmQoIkRvY0V4Y2VwdGlvbiIsbmV3IHIuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpKX1mdW5jdGlvbiBwZGZNYW5hZ2VyUmVhZHkoKXtlbnN1cmVOb3RUZXJtaW5hdGVkKCk7bG9hZERvY3VtZW50KCExKS50aGVuKG9uU3VjY2VzcywoZnVuY3Rpb24oZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2UgaW5zdGFuY2VvZiBuLlhSZWZQYXJzZUV4Y2VwdGlvbj9hLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbigpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtsb2FkRG9jdW1lbnQoITApLnRoZW4ob25TdWNjZXNzLG9uRmFpbHVyZSl9KSk6b25GYWlsdXJlKGUpfSkpfWVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtnZXRQZGZNYW5hZ2VyKGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKGYpe2UudGVybWluYXRlKG5ldyByLkFib3J0RXhjZXB0aW9uKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuIikpO3Rocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIil9YT1lO2EucmVxdWVzdExvYWRlZFN0cmVhbSghMCkudGhlbigoZT0+e0Muc2VuZCgiRGF0YUxvYWRlZCIse2xlbmd0aDplLmJ5dGVzLmJ5dGVMZW5ndGh9KX0pKX0pKS50aGVuKHBkZk1hbmFnZXJSZWFkeSxvbkZhaWx1cmUpfShlKTtlPW51bGx9KSk7cmV0dXJuIHh9c3RhdGljIGluaXRpYWxpemVGcm9tUG9ydChlKXtjb25zdCB0PW5ldyBoLk1lc3NhZ2VIYW5kbGVyKCJ3b3JrZXIiLCJtYWluIixlKTtXb3JrZXJNZXNzYWdlSGFuZGxlci5zZXR1cCh0LGUpO3Quc2VuZCgicmVhZHkiLG51bGwpfX10Lldvcmtlck1lc3NhZ2VIYW5kbGVyPVdvcmtlck1lc3NhZ2VIYW5kbGVyOyJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhci5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZmdW5jdGlvbiBpc01lc3NhZ2VQb3J0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLnBvc3RNZXNzYWdlJiYib25tZXNzYWdlImluIGV9KHNlbGYpJiZXb3JrZXJNZXNzYWdlSGFuZGxlci5pbml0aWFsaXplRnJvbVBvcnQoc2VsZil9LChlLHQsYSk9Pnt2YXIgcj1hKDMpLG49YSg0KSxpPWEoNjkpLHM9YSg3MCksbz0iV2ViQXNzZW1ibHkiLGM9bltvXSxsPTchPT1FcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcj1mdW5jdGlvbihlLHQpe3ZhciBhPXt9O2FbZV09cyhlLHQsbCk7cih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGFyaXR5OjEsZm9yY2VkOmx9LGEpfSxleHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyPWZ1bmN0aW9uKGUsdCl7aWYoYyYmY1tlXSl7dmFyIGE9e307YVtlXT1zKG8rIi4iK2UsdCxsKTtyKHt0YXJnZXQ6byxzdGF0OiEwLGNvbnN0cnVjdG9yOiEwLGFyaXR5OjEsZm9yY2VkOmx9LGEpfX07ZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoIkVycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIEVycm9yKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKTtleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcigiRXZhbEVycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIEV2YWxFcnJvcih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSk7ZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoIlJhbmdlRXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gUmFuZ2VFcnJvcih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSk7ZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoIlJlZmVyZW5jZUVycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKTtleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcigiU3ludGF4RXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gU3ludGF4RXJyb3IodCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpO2V4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCJUeXBlRXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gVHlwZUVycm9yKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKTtleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcigiVVJJRXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IodCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpO2V4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoIkNvbXBpbGVFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiBDb21waWxlRXJyb3IodCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpO2V4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoIkxpbmtFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiBMaW5rRXJyb3IodCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpO2V4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoIlJ1bnRpbWVFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IodCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpfSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoNSkuZixpPWEoNDQpLHM9YSg0OCksbz1hKDM4KSxjPWEoNTYpLGw9YSg2OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGEsaCx1LGQsZixnPWUudGFyZ2V0LHA9ZS5nbG9iYWwsbT1lLnN0YXQ7aWYoYT1wP3I6bT9yW2ddfHxvKGcse30pOihyW2ddfHx7fSkucHJvdG90eXBlKWZvcihoIGluIHQpe2Q9dFtoXTt1PWUuZG9udENhbGxHZXRTZXQ/KGY9bihhLGgpKSYmZi52YWx1ZTphW2hdO2lmKCFsKHA/aDpnKyhtPyIuIjoiIyIpK2gsZS5mb3JjZWQpJiZ2b2lkIDAhPT11KXtpZih0eXBlb2YgZD09dHlwZW9mIHUpY29udGludWU7YyhkLHUpfShlLnNoYW18fHUmJnUuc2hhbSkmJmkoZCwic2hhbSIsITApO3MoYSxoLGQsZSl9fX0sZnVuY3Rpb24oZSl7dmFyIGNoZWNrPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLk1hdGg9PT1NYXRoJiZlfTtlLmV4cG9ydHM9Y2hlY2soIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8Y2hlY2soIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fGNoZWNrKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGNoZWNrKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHx0aGlzfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwoZSx0LGEpPT57dmFyIHI9YSg2KSxuPWEoOCksaT1hKDEwKSxzPWEoMTEpLG89YSgxMiksYz1hKDE4KSxsPWEoMzkpLGg9YSg0MiksdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1yP3U6ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCl7ZT1vKGUpO3Q9Yyh0KTtpZihoKXRyeXtyZXR1cm4gdShlLHQpfWNhdGNoKGUpe31pZihsKGUsdCkpcmV0dXJuIHMoIW4oaS5mLGUsdCksZVt0XSl9fSwoZSx0LGEpPT57dmFyIHI9YSg3KTtlLmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSl9LGU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX19LChlLHQsYSk9Pnt2YXIgcj1hKDkpLG49RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7ZS5leHBvcnRzPXI/bi5iaW5kKG4pOmZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkobixhcmd1bWVudHMpfX0sKGUsdCxhKT0+e3ZhciByPWEoNyk7ZS5leHBvcnRzPSFyKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGV8fGUuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSkpfSwoZSx0KT0+e3ZhciBhPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixuPXImJiFhLmNhbGwoezE6Mn0sMSk7dC5mPW4/ZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoZSl7dmFyIHQ9cih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTphfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sKGUsdCxhKT0+e3ZhciByPWEoMTMpLG49YSgxNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiByKG4oZSkpfX0sKGUsdCxhKT0+e3ZhciByPWEoMTQpLG49YSg3KSxpPWEoMTUpLHM9T2JqZWN0LG89cigiIi5zcGxpdCk7ZS5leHBvcnRzPW4oKGZ1bmN0aW9uKCl7cmV0dXJuIXMoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09PWkoZSk/byhlLCIiKTpzKGUpfTpzfSwoZSx0LGEpPT57dmFyIHI9YSg5KSxuPUZ1bmN0aW9uLnByb3RvdHlwZSxpPW4uY2FsbCxzPXImJm4uYmluZC5iaW5kKGksaSk7ZS5leHBvcnRzPXI/czpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseShlLGFyZ3VtZW50cyl9fX0sKGUsdCxhKT0+e3ZhciByPWEoMTQpLG49cih7fS50b1N0cmluZyksaT1yKCIiLnNsaWNlKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkobihlKSw4LC0xKX19LChlLHQsYSk9Pnt2YXIgcj1hKDE3KSxuPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYocihlKSl0aHJvdyBuKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK2UpO3JldHVybiBlfX0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX19LChlLHQsYSk9Pnt2YXIgcj1hKDE5KSxuPWEoMjMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yKGUsInN0cmluZyIpO3JldHVybiBuKHQpP3Q6dCsiIn19LChlLHQsYSk9Pnt2YXIgcj1hKDgpLG49YSgyMCksaT1hKDIzKSxzPWEoMzApLG89YSgzMyksYz1hKDM0KSxsPVR5cGVFcnJvcixoPWMoInRvUHJpbWl0aXZlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIW4oZSl8fGkoZSkpcmV0dXJuIGU7dmFyIGEsYz1zKGUsaCk7aWYoYyl7dm9pZCAwPT09dCYmKHQ9ImRlZmF1bHQiKTthPXIoYyxlLHQpO2lmKCFuKGEpfHxpKGEpKXJldHVybiBhO3Rocm93IGwoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXZvaWQgMD09PXQmJih0PSJudW1iZXIiKTtyZXR1cm4gbyhlLHQpfX0sKGUsdCxhKT0+e3ZhciByPWEoMjEpLG49YSgyMiksaT1uLmFsbDtlLmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZTpyKGUpfHxlPT09aX06ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOnIoZSl9fSwoZSx0LGEpPT57dmFyIHI9YSgyMiksbj1yLmFsbDtlLmV4cG9ydHM9ci5JU19IVE1MRERBP2Z1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfHxlPT09bn06ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9fSxlPT57dmFyIHQ9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLGE9dm9pZCAwPT09dCYmdm9pZCAwIT09dDtlLmV4cG9ydHM9e2FsbDp0LElTX0hUTUxEREE6YX19LChlLHQsYSk9Pnt2YXIgcj1hKDI0KSxuPWEoMjEpLGk9YSgyNSkscz1hKDI2KSxvPU9iamVjdDtlLmV4cG9ydHM9cz9mdW5jdGlvbihlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3ZhciB0PXIoIlN5bWJvbCIpO3JldHVybiBuKHQpJiZpKHQucHJvdG90eXBlLG8oZSkpfX0sKGUsdCxhKT0+e3ZhciByPWEoNCksbj1hKDIxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhhPXJbZV0sbihhKT9hOnZvaWQgMCk6cltlXSYmcltlXVt0XTt2YXIgYX19LChlLHQsYSk9Pnt2YXIgcj1hKDE0KTtlLmV4cG9ydHM9cih7fS5pc1Byb3RvdHlwZU9mKX0sKGUsdCxhKT0+e3ZhciByPWEoMjcpO2UuZXhwb3J0cz1yJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwoZSx0LGEpPT57dmFyIHI9YSgyOCksbj1hKDcpLGk9YSg0KS5TdHJpbmc7ZS5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIW4oKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIWkoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJnImJnI8NDF9KSl9LChlLHQsYSk9Pnt2YXIgcixuLGk9YSg0KSxzPWEoMjkpLG89aS5wcm9jZXNzLGM9aS5EZW5vLGw9byYmby52ZXJzaW9uc3x8YyYmYy52ZXJzaW9uLGg9bCYmbC52ODtoJiYobj0ocj1oLnNwbGl0KCIuIikpWzBdPjAmJnJbMF08ND8xOisoclswXStyWzFdKSk7IW4mJnMmJighKHI9cy5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fHJbMV0+PTc0KSYmKHI9cy5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKG49K3JbMV0pO2UuZXhwb3J0cz1ufSxlPT57ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCl8fCIifSwoZSx0LGEpPT57dmFyIHI9YSgzMSksbj1hKDE3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgYT1lW3RdO3JldHVybiBuKGEpP3ZvaWQgMDpyKGEpfX0sKGUsdCxhKT0+e3ZhciByPWEoMjEpLG49YSgzMiksaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHIoZSkpcmV0dXJuIGU7dGhyb3cgaShuKGUpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX19LGU9Pnt2YXIgdD1TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaChlKXtyZXR1cm4iT2JqZWN0In19fSwoZSx0LGEpPT57dmFyIHI9YSg4KSxuPWEoMjEpLGk9YSgyMCkscz1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGEsbztpZigic3RyaW5nIj09PXQmJm4oYT1lLnRvU3RyaW5nKSYmIWkobz1yKGEsZSkpKXJldHVybiBvO2lmKG4oYT1lLnZhbHVlT2YpJiYhaShvPXIoYSxlKSkpcmV0dXJuIG87aWYoInN0cmluZyIhPT10JiZuKGE9ZS50b1N0cmluZykmJiFpKG89cihhLGUpKSlyZXR1cm4gbzt0aHJvdyBzKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LChlLHQsYSk9Pnt2YXIgcj1hKDQpLG49YSgzNSksaT1hKDM5KSxzPWEoNDEpLG89YSgyNyksYz1hKDI2KSxsPXIuU3ltYm9sLGg9bigid2tzIiksdT1jP2wuZm9yfHxsOmwmJmwud2l0aG91dFNldHRlcnx8cztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aShoLGUpfHwoaFtlXT1vJiZpKGwsZSk/bFtlXTp1KCJTeW1ib2wuIitlKSk7cmV0dXJuIGhbZV19fSwoZSx0LGEpPT57dmFyIHI9YSgzNiksbj1hKDM3KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5bZV18fChuW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOiIzLjMyLjIiLG1vZGU6cj8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkiLGxpY2Vuc2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzIuMi9MSUNFTlNFIixzb3VyY2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzIn0pfSxlPT57ZS5leHBvcnRzPSExfSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoMzgpLGk9Il9fY29yZS1qc19zaGFyZWRfXyIscz1yW2ldfHxuKGkse30pO2UuZXhwb3J0cz1zfSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7bihyLGUse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2goYSl7cltlXT10fXJldHVybiB0fX0sKGUsdCxhKT0+e3ZhciByPWEoMTQpLG49YSg0MCksaT1yKHt9Lmhhc093blByb3BlcnR5KTtlLmV4cG9ydHM9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24gaGFzT3duKGUsdCl7cmV0dXJuIGkobihlKSx0KX19LChlLHQsYSk9Pnt2YXIgcj1hKDE2KSxuPU9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ocihlKSl9fSwoZSx0LGEpPT57dmFyIHI9YSgxNCksbj0wLGk9TWF0aC5yYW5kb20oKSxzPXIoMS4udG9TdHJpbmcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PWU/IiI6ZSkrIilfIitzKCsrbitpLDM2KX19LChlLHQsYSk9Pnt2YXIgcj1hKDYpLG49YSg3KSxpPWEoNDMpO2UuZXhwb3J0cz0hciYmIW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoaSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoMjApLGk9ci5kb2N1bWVudCxzPW4oaSkmJm4oaS5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHM/aS5jcmVhdGVFbGVtZW50KGUpOnt9fX0sKGUsdCxhKT0+e3ZhciByPWEoNiksbj1hKDQ1KSxpPWEoMTEpO2UuZXhwb3J0cz1yP2Z1bmN0aW9uKGUsdCxhKXtyZXR1cm4gbi5mKGUsdCxpKDEsYSkpfTpmdW5jdGlvbihlLHQsYSl7ZVt0XT1hO3JldHVybiBlfX0sKGUsdCxhKT0+e3ZhciByPWEoNiksbj1hKDQyKSxpPWEoNDYpLHM9YSg0Nyksbz1hKDE4KSxjPVR5cGVFcnJvcixsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdT0iZW51bWVyYWJsZSIsZD0iY29uZmlndXJhYmxlIixmPSJ3cml0YWJsZSI7dC5mPXI/aT9mdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShlLHQsYSl7cyhlKTt0PW8odCk7cyhhKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSYmInByb3RvdHlwZSI9PT10JiYidmFsdWUiaW4gYSYmZiBpbiBhJiYhYVtmXSl7dmFyIHI9aChlLHQpO2lmKHImJnJbZl0pe2VbdF09YS52YWx1ZTthPXtjb25maWd1cmFibGU6ZCBpbiBhP2FbZF06cltkXSxlbnVtZXJhYmxlOnUgaW4gYT9hW3VdOnJbdV0sd3JpdGFibGU6ITF9fX1yZXR1cm4gbChlLHQsYSl9Omw6ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoZSx0LGEpe3MoZSk7dD1vKHQpO3MoYSk7aWYobil0cnl7cmV0dXJuIGwoZSx0LGEpfWNhdGNoKGUpe31pZigiZ2V0ImluIGF8fCJzZXQiaW4gYSl0aHJvdyBjKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCIpOyJ2YWx1ZSJpbiBhJiYoZVt0XT1hLnZhbHVlKTtyZXR1cm4gZX19LChlLHQsYSk9Pnt2YXIgcj1hKDYpLG49YSg3KTtlLmV4cG9ydHM9ciYmbigoZnVuY3Rpb24oKXtyZXR1cm4gNDIhPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSkpfSwoZSx0LGEpPT57dmFyIHI9YSgyMCksbj1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHIoZSkpcmV0dXJuIGU7dGhyb3cgaShuKGUpKyIgaXMgbm90IGFuIG9iamVjdCIpfX0sKGUsdCxhKT0+e3ZhciByPWEoMjEpLG49YSg0NSksaT1hKDQ5KSxzPWEoMzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsYSxvKXtvfHwobz17fSk7dmFyIGM9by5lbnVtZXJhYmxlLGw9dm9pZCAwIT09by5uYW1lP28ubmFtZTp0O3IoYSkmJmkoYSxsLG8pO2lmKG8uZ2xvYmFsKWM/ZVt0XT1hOnModCxhKTtlbHNle3RyeXtvLnVuc2FmZT9lW3RdJiYoYz0hMCk6ZGVsZXRlIGVbdF19Y2F0Y2goZSl7fWM/ZVt0XT1hOm4uZihlLHQse3ZhbHVlOmEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IW8ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFvLm5vbldyaXRhYmxlfSl9cmV0dXJuIGV9fSwoZSx0LGEpPT57dmFyIHI9YSgxNCksbj1hKDcpLGk9YSgyMSkscz1hKDM5KSxvPWEoNiksYz1hKDUwKS5DT05GSUdVUkFCTEUsbD1hKDUxKSxoPWEoNTIpLHU9aC5lbmZvcmNlLGQ9aC5nZXQsZj1TdHJpbmcsZz1PYmplY3QuZGVmaW5lUHJvcGVydHkscD1yKCIiLnNsaWNlKSxtPXIoIiIucmVwbGFjZSksYj1yKFtdLmpvaW4pLHk9byYmIW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1nKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHc9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLFM9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhKXsiU3ltYm9sKCI9PT1wKGYodCksMCw3KSYmKHQ9IlsiK20oZih0KSwvXlN5bWJvbFwoKFteKV0qKVwpLywiJDEiKSsiXSIpO2EmJmEuZ2V0dGVyJiYodD0iZ2V0ICIrdCk7YSYmYS5zZXR0ZXImJih0PSJzZXQgIit0KTsoIXMoZSwibmFtZSIpfHxjJiZlLm5hbWUhPT10KSYmKG8/ZyhlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KTplLm5hbWU9dCk7eSYmYSYmcyhhLCJhcml0eSIpJiZlLmxlbmd0aCE9PWEuYXJpdHkmJmcoZSwibGVuZ3RoIix7dmFsdWU6YS5hcml0eX0pO3RyeXthJiZzKGEsImNvbnN0cnVjdG9yIikmJmEuY29uc3RydWN0b3I/byYmZyhlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOmUucHJvdG90eXBlJiYoZS5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaChlKXt9dmFyIHI9dShlKTtzKHIsInNvdXJjZSIpfHwoci5zb3VyY2U9Yih3LCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSk7cmV0dXJuIGV9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1TKChmdW5jdGlvbiB0b1N0cmluZygpe3JldHVybiBpKHRoaXMpJiZkKHRoaXMpLnNvdXJjZXx8bCh0aGlzKX0pLCJ0b1N0cmluZyIpfSwoZSx0LGEpPT57dmFyIHI9YSg2KSxuPWEoMzkpLGk9RnVuY3Rpb24ucHJvdG90eXBlLHM9ciYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPW4oaSwibmFtZSIpLGM9byYmInNvbWV0aGluZyI9PT1mdW5jdGlvbiBzb21ldGhpbmcoKXt9Lm5hbWUsbD1vJiYoIXJ8fHImJnMoaSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7ZS5leHBvcnRzPXtFWElTVFM6byxQUk9QRVI6YyxDT05GSUdVUkFCTEU6bH19LChlLHQsYSk9Pnt2YXIgcj1hKDE0KSxuPWEoMjEpLGk9YSgzNykscz1yKEZ1bmN0aW9uLnRvU3RyaW5nKTtuKGkuaW5zcGVjdFNvdXJjZSl8fChpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSl9KTtlLmV4cG9ydHM9aS5pbnNwZWN0U291cmNlfSwoZSx0LGEpPT57dmFyIHIsbixpLHM9YSg1Myksbz1hKDQpLGM9YSgyMCksbD1hKDQ0KSxoPWEoMzkpLHU9YSgzNyksZD1hKDU0KSxmPWEoNTUpLGc9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIixwPW8uVHlwZUVycm9yLG09by5XZWFrTWFwO2lmKHN8fHUuc3RhdGUpe3ZhciBiPXUuc3RhdGV8fCh1LnN0YXRlPW5ldyBtKTtiLmdldD1iLmdldDtiLmhhcz1iLmhhcztiLnNldD1iLnNldDtyPWZ1bmN0aW9uKGUsdCl7aWYoYi5oYXMoZSkpdGhyb3cgcChnKTt0LmZhY2FkZT1lO2Iuc2V0KGUsdCk7cmV0dXJuIHR9O249ZnVuY3Rpb24oZSl7cmV0dXJuIGIuZ2V0KGUpfHx7fX07aT1mdW5jdGlvbihlKXtyZXR1cm4gYi5oYXMoZSl9fWVsc2V7dmFyIHk9ZCgic3RhdGUiKTtmW3ldPSEwO3I9ZnVuY3Rpb24oZSx0KXtpZihoKGUseSkpdGhyb3cgcChnKTt0LmZhY2FkZT1lO2woZSx5LHQpO3JldHVybiB0fTtuPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUseSk/ZVt5XTp7fX07aT1mdW5jdGlvbihlKXtyZXR1cm4gaChlLHkpfX1lLmV4cG9ydHM9e3NldDpyLGdldDpuLGhhczppLGVuZm9yY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSk/bihlKTpyKGUse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBhO2lmKCFjKHQpfHwoYT1uKHQpKS50eXBlIT09ZSl0aHJvdyBwKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrZSsiIHJlcXVpcmVkIik7cmV0dXJuIGF9fX19LChlLHQsYSk9Pnt2YXIgcj1hKDQpLG49YSgyMSksaT1yLldlYWtNYXA7ZS5leHBvcnRzPW4oaSkmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoaSkpfSwoZSx0LGEpPT57dmFyIHI9YSgzNSksbj1hKDQxKSxpPXIoImtleXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV18fChpW2VdPW4oZSkpfX0sZT0+e2UuZXhwb3J0cz17fX0sKGUsdCxhKT0+e3ZhciByPWEoMzkpLG49YSg1NyksaT1hKDUpLHM9YSg0NSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhKXtmb3IodmFyIG89bih0KSxjPXMuZixsPWkuZixoPTA7aDxvLmxlbmd0aDtoKyspe3ZhciB1PW9baF07cihlLHUpfHxhJiZyKGEsdSl8fGMoZSx1LGwodCx1KSl9fX0sKGUsdCxhKT0+e3ZhciByPWEoMjQpLG49YSgxNCksaT1hKDU4KSxzPWEoNjcpLG89YSg0NyksYz1uKFtdLmNvbmNhdCk7ZS5leHBvcnRzPXIoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uIG93bktleXMoZSl7dmFyIHQ9aS5mKG8oZSkpLGE9cy5mO3JldHVybiBhP2ModCxhKGUpKTp0fX0sKGUsdCxhKT0+e3ZhciByPWEoNTkpLG49YSg2NikuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoZSl7cmV0dXJuIHIoZSxuKX19LChlLHQsYSk9Pnt2YXIgcj1hKDE0KSxuPWEoMzkpLGk9YSgxMikscz1hKDYwKS5pbmRleE9mLG89YSg1NSksYz1yKFtdLnB1c2gpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBhLHI9aShlKSxsPTAsaD1bXTtmb3IoYSBpbiByKSFuKG8sYSkmJm4ocixhKSYmYyhoLGEpO2Zvcig7dC5sZW5ndGg+bDspbihyLGE9dFtsKytdKSYmKH5zKGgsYSl8fGMoaCxhKSk7cmV0dXJuIGh9fSwoZSx0LGEpPT57dmFyIHI9YSgxMiksbj1hKDYxKSxpPWEoNjQpLGNyZWF0ZU1ldGhvZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxhLHMpe3ZhciBvLGM9cih0KSxsPWkoYyksaD1uKHMsbCk7aWYoZSYmYSE9YSl7Zm9yKDtsPmg7KWlmKChvPWNbaCsrXSkhPW8pcmV0dXJuITB9ZWxzZSBmb3IoO2w+aDtoKyspaWYoKGV8fGggaW4gYykmJmNbaF09PT1hKXJldHVybiBlfHxofHwwO3JldHVybiFlJiYtMX19O2UuZXhwb3J0cz17aW5jbHVkZXM6Y3JlYXRlTWV0aG9kKCEwKSxpbmRleE9mOmNyZWF0ZU1ldGhvZCghMSl9fSwoZSx0LGEpPT57dmFyIHI9YSg2Miksbj1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBhPXIoZSk7cmV0dXJuIGE8MD9uKGErdCwwKTppKGEsdCl9fSwoZSx0LGEpPT57dmFyIHI9YSg2Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PStlO3JldHVybiB0IT10fHwwPT09dD8wOnIodCl9fSxlPT57dmFyIHQ9TWF0aC5jZWlsLGE9TWF0aC5mbG9vcjtlLmV4cG9ydHM9TWF0aC50cnVuY3x8ZnVuY3Rpb24gdHJ1bmMoZSl7dmFyIHI9K2U7cmV0dXJuKHI+MD9hOnQpKHIpfX0sKGUsdCxhKT0+e3ZhciByPWEoNjUpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcihlLmxlbmd0aCl9fSwoZSx0LGEpPT57dmFyIHI9YSg2Miksbj1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9uKHIoZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGU9PntlLmV4cG9ydHM9WyJjb25zdHJ1Y3RvciIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9Mb2NhbGVTdHJpbmciLCJ0b1N0cmluZyIsInZhbHVlT2YiXX0sKGUsdCk9Pnt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sKGUsdCxhKT0+e3ZhciByPWEoNyksbj1hKDIxKSxpPS8jfFwucHJvdG90eXBlXC4vLGlzRm9yY2VkPWZ1bmN0aW9uKGUsdCl7dmFyIGE9b1tzKGUpXTtyZXR1cm4gYT09PWx8fGEhPT1jJiYobih0KT9yKHQpOiEhdCl9LHM9aXNGb3JjZWQubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShpLCIuIikudG9Mb3dlckNhc2UoKX0sbz1pc0ZvcmNlZC5kYXRhPXt9LGM9aXNGb3JjZWQuTkFUSVZFPSJOIixsPWlzRm9yY2VkLlBPTFlGSUxMPSJQIjtlLmV4cG9ydHM9aXNGb3JjZWR9LChlLHQsYSk9Pnt2YXIgcj1hKDkpLG49RnVuY3Rpb24ucHJvdG90eXBlLGk9bi5hcHBseSxzPW4uY2FsbDtlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwocj9zLmJpbmQoaSk6ZnVuY3Rpb24oKXtyZXR1cm4gcy5hcHBseShpLGFyZ3VtZW50cyl9KX0sKGUsdCxhKT0+e3ZhciByPWEoMjQpLG49YSgzOSksaT1hKDQ0KSxzPWEoMjUpLG89YSg3MSksYz1hKDU2KSxsPWEoNzQpLGg9YSg3NSksdT1hKDc2KSxkPWEoODApLGY9YSg4MSksZz1hKDYpLHA9YSgzNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhLG0pe3ZhciBiPSJzdGFja1RyYWNlTGltaXQiLHk9bT8yOjEsdz1lLnNwbGl0KCIuIiksUz13W3cubGVuZ3RoLTFdLHg9ci5hcHBseShudWxsLHcpO2lmKHgpe3ZhciBDPXgucHJvdG90eXBlOyFwJiZuKEMsImNhdXNlIikmJmRlbGV0ZSBDLmNhdXNlO2lmKCFhKXJldHVybiB4O3ZhciB2PXIoIkVycm9yIiksaz10KChmdW5jdGlvbihlLHQpe3ZhciBhPXUobT90OmUsdm9pZCAwKSxyPW0/bmV3IHgoZSk6bmV3IHg7dm9pZCAwIT09YSYmaShyLCJtZXNzYWdlIixhKTtmKHIsayxyLnN0YWNrLDIpO3RoaXMmJnMoQyx0aGlzKSYmaChyLHRoaXMsayk7YXJndW1lbnRzLmxlbmd0aD55JiZkKHIsYXJndW1lbnRzW3ldKTtyZXR1cm4gcn0pKTtrLnByb3RvdHlwZT1DO2lmKCJFcnJvciIhPT1TKW8/byhrLHYpOmMoayx2LHtuYW1lOiEwfSk7ZWxzZSBpZihnJiZiIGluIHgpe2woayx4LGIpO2woayx4LCJwcmVwYXJlU3RhY2tUcmFjZSIpfWMoayx4KTtpZighcCl0cnl7Qy5uYW1lIT09UyYmaShDLCJuYW1lIixTKTtDLmNvbnN0cnVjdG9yPWt9Y2F0Y2goZSl7fXJldHVybiBrfX19LChlLHQsYSk9Pnt2YXIgcj1hKDcyKSxuPWEoNDcpLGk9YSg3Myk7ZS5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciBlLHQ9ITEsYT17fTt0cnl7KGU9cihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkoYSxbXSk7dD1hIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihhLHIpe24oYSk7aShyKTt0P2UoYSxyKTphLl9fcHJvdG9fXz1yO3JldHVybiBhfX0oKTp2b2lkIDApfSwoZSx0LGEpPT57dmFyIHI9YSgxNCksbj1hKDMxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGEpe3RyeXtyZXR1cm4gcihuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KVthXSkpfWNhdGNoKGUpe319fSwoZSx0LGEpPT57dmFyIHI9YSgyMSksbj1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiPT10eXBlb2YgZXx8cihlKSlyZXR1cm4gZTt0aHJvdyBpKCJDYW4ndCBzZXQgIituKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LChlLHQsYSk9Pnt2YXIgcj1hKDQ1KS5mO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsYSl7YSBpbiBlfHxyKGUsYSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W2FdfSxzZXQ6ZnVuY3Rpb24oZSl7dFthXT1lfX0pfX0sKGUsdCxhKT0+e3ZhciByPWEoMjEpLG49YSgyMCksaT1hKDcxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGEpe3ZhciBzLG87aSYmcihzPXQuY29uc3RydWN0b3IpJiZzIT09YSYmbihvPXMucHJvdG90eXBlKSYmbyE9PWEucHJvdG90eXBlJiZpKGUsbyk7cmV0dXJuIGV9fSwoZSx0LGEpPT57dmFyIHI9YSg3Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWU/YXJndW1lbnRzLmxlbmd0aDwyPyIiOnQ6cihlKX19LChlLHQsYSk9Pnt2YXIgcj1hKDc4KSxuPVN0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIlN5bWJvbCI9PT1yKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gbihlKX19LChlLHQsYSk9Pnt2YXIgcj1hKDc5KSxuPWEoMjEpLGk9YSgxNSkscz1hKDM0KSgidG9TdHJpbmdUYWciKSxvPU9iamVjdCxjPSJBcmd1bWVudHMiPT09aShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2UuZXhwb3J0cz1yP2k6ZnVuY3Rpb24oZSl7dmFyIHQsYSxyO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKGE9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1vKGUpLHMpKT9hOmM/aSh0KToiT2JqZWN0Ij09PShyPWkodCkpJiZuKHQuY2FsbGVlKT8iQXJndW1lbnRzIjpyfX0sKGUsdCxhKT0+e3ZhciByPXt9O3JbYSgzNCkoInRvU3RyaW5nVGFnIildPSJ6IjtlLmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKHIpfSwoZSx0LGEpPT57dmFyIHI9YSgyMCksbj1hKDQ0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyKHQpJiYiY2F1c2UiaW4gdCYmbihlLCJjYXVzZSIsdC5jYXVzZSl9fSwoZSx0LGEpPT57dmFyIHI9YSg0NCksbj1hKDgyKSxpPWEoODMpLHM9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhLG8pe2kmJihzP3MoZSx0KTpyKGUsInN0YWNrIixuKGEsbykpKX19LChlLHQsYSk9Pnt2YXIgcj1hKDE0KSxuPUVycm9yLGk9cigiIi5yZXBsYWNlKSxzPVN0cmluZyhuKCJ6eGNhc2QiKS5zdGFjayksbz0vXG5ccyphdCBbXjpdKjpbXlxuXSovLGM9by50ZXN0KHMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGMmJiJzdHJpbmciPT10eXBlb2YgZSYmIW4ucHJlcGFyZVN0YWNrVHJhY2UpZm9yKDt0LS07KWU9aShlLG8sIiIpO3JldHVybiBlfX0sKGUsdCxhKT0+e3ZhciByPWEoNyksbj1hKDExKTtlLmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7dmFyIGU9RXJyb3IoImEiKTtpZighKCJzdGFjayJpbiBlKSlyZXR1cm4hMDtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3RhY2siLG4oMSw3KSk7cmV0dXJuIDchPT1lLnN0YWNrfSkpfSwoZSx0LGEpPT57dmFyIHI9YSg4NSksbj1hKDkwKS5maW5kTGFzdCxpPXIuYVR5cGVkQXJyYXk7KDAsci5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZExhc3QiLChmdW5jdGlvbiBmaW5kTGFzdChlKXtyZXR1cm4gbihpKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwoZSx0LGEpPT57dmFyIHIsbixpLHM9YSg4Niksbz1hKDYpLGM9YSg0KSxsPWEoMjEpLGg9YSgyMCksdT1hKDM5KSxkPWEoNzgpLGY9YSgzMiksZz1hKDQ0KSxwPWEoNDgpLG09YSg4NyksYj1hKDI1KSx5PWEoODgpLHc9YSg3MSksUz1hKDM0KSx4PWEoNDEpLEM9YSg1Miksdj1DLmVuZm9yY2Usaz1DLmdldCxPPWMuSW50OEFycmF5LFQ9TyYmTy5wcm90b3R5cGUsTT1jLlVpbnQ4Q2xhbXBlZEFycmF5LEU9TSYmTS5wcm90b3R5cGUsRD1PJiZ5KE8pLFI9VCYmeShUKSxOPU9iamVjdC5wcm90b3R5cGUsTD1jLlR5cGVFcnJvciwkPVMoInRvU3RyaW5nVGFnIiksXz14KCJUWVBFRF9BUlJBWV9UQUciKSxqPSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFU9cyYmISF3JiYiT3BlcmEiIT09ZChjLm9wZXJhKSxYPSExLEg9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxxPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe3ZhciB0PXkoZSk7aWYoaCh0KSl7dmFyIGE9ayh0KTtyZXR1cm4gYSYmdShhLGopP2Fbal06Z2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKHQpfX0saXNUeXBlZEFycmF5PWZ1bmN0aW9uKGUpe2lmKCFoKGUpKXJldHVybiExO3ZhciB0PWQoZSk7cmV0dXJuIHUoSCx0KXx8dShxLHQpfTtmb3IociBpbiBIKShpPShuPWNbcl0pJiZuLnByb3RvdHlwZSk/dihpKVtqXT1uOlU9ITE7Zm9yKHIgaW4gcSkoaT0obj1jW3JdKSYmbi5wcm90b3R5cGUpJiYodihpKVtqXT1uKTtpZighVXx8IWwoRCl8fEQ9PT1GdW5jdGlvbi5wcm90b3R5cGUpe0Q9ZnVuY3Rpb24gVHlwZWRBcnJheSgpe3Rocm93IEwoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9O2lmKFUpZm9yKHIgaW4gSCljW3JdJiZ3KGNbcl0sRCl9aWYoIVV8fCFSfHxSPT09Til7Uj1ELnByb3RvdHlwZTtpZihVKWZvcihyIGluIEgpY1tyXSYmdyhjW3JdLnByb3RvdHlwZSxSKX1VJiZ5KEUpIT09UiYmdyhFLFIpO2lmKG8mJiF1KFIsJCkpe1g9ITA7bShSLCQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzKT90aGlzW19dOnZvaWQgMH19KTtmb3IociBpbiBIKWNbcl0mJmcoY1tyXSxfLHIpfWUuZXhwb3J0cz17TkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzpVLFRZUEVEX0FSUkFZX1RBRzpYJiZfLGFUeXBlZEFycmF5OmZ1bmN0aW9uKGUpe2lmKGlzVHlwZWRBcnJheShlKSlyZXR1cm4gZTt0aHJvdyBMKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbihlKXtpZihsKGUpJiYoIXd8fGIoRCxlKSkpcmV0dXJuIGU7dGhyb3cgTChmKGUpKyIgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbihlLHQsYSxyKXtpZihvKXtpZihhKWZvcih2YXIgbiBpbiBIKXt2YXIgaT1jW25dO2lmKGkmJnUoaS5wcm90b3R5cGUsZSkpdHJ5e2RlbGV0ZSBpLnByb3RvdHlwZVtlXX1jYXRjaChhKXt0cnl7aS5wcm90b3R5cGVbZV09dH1jYXRjaChlKXt9fX1SW2VdJiYhYXx8cChSLGUsYT90OlUmJlRbZV18fHQscil9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKGUsdCxhKXt2YXIgcixuO2lmKG8pe2lmKHcpe2lmKGEpZm9yKHIgaW4gSClpZigobj1jW3JdKSYmdShuLGUpKXRyeXtkZWxldGUgbltlXX1jYXRjaChlKXt9aWYoRFtlXSYmIWEpcmV0dXJuO3RyeXtyZXR1cm4gcChELGUsYT90OlUmJkRbZV18fHQpfWNhdGNoKGUpe319Zm9yKHIgaW4gSCkhKG49Y1tyXSl8fG5bZV0mJiFhfHxwKG4sZSx0KX19LGdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsaXNWaWV3OmZ1bmN0aW9uIGlzVmlldyhlKXtpZighaChlKSlyZXR1cm4hMTt2YXIgdD1kKGUpO3JldHVybiJEYXRhVmlldyI9PT10fHx1KEgsdCl8fHUocSx0KX0saXNUeXBlZEFycmF5OmlzVHlwZWRBcnJheSxUeXBlZEFycmF5OkQsVHlwZWRBcnJheVByb3RvdHlwZTpSfX0sZT0+e2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYidW5kZWZpbmVkIiE9dHlwZW9mIERhdGFWaWV3fSwoZSx0LGEpPT57dmFyIHI9YSg0OSksbj1hKDQ1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGEpe2EuZ2V0JiZyKGEuZ2V0LHQse2dldHRlcjohMH0pO2Euc2V0JiZyKGEuc2V0LHQse3NldHRlcjohMH0pO3JldHVybiBuLmYoZSx0LGEpfX0sKGUsdCxhKT0+e3ZhciByPWEoMzkpLG49YSgyMSksaT1hKDQwKSxzPWEoNTQpLG89YSg4OSksYz1zKCJJRV9QUk9UTyIpLGw9T2JqZWN0LGg9bC5wcm90b3R5cGU7ZS5leHBvcnRzPW8/bC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXt2YXIgdD1pKGUpO2lmKHIodCxjKSlyZXR1cm4gdFtjXTt2YXIgYT10LmNvbnN0cnVjdG9yO3JldHVybiBuKGEpJiZ0IGluc3RhbmNlb2YgYT9hLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgbD9oOm51bGx9fSwoZSx0LGEpPT57dmFyIHI9YSg3KTtlLmV4cG9ydHM9IXIoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRigpe31GLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsO3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYpIT09Ri5wcm90b3R5cGV9KSl9LChlLHQsYSk9Pnt2YXIgcj1hKDkxKSxuPWEoMTMpLGk9YSg0MCkscz1hKDY0KSxjcmVhdGVNZXRob2Q9ZnVuY3Rpb24oZSl7dmFyIHQ9MT09PWU7cmV0dXJuIGZ1bmN0aW9uKGEsbyxjKXtmb3IodmFyIGwsaD1pKGEpLHU9bihoKSxkPXIobyxjKSxmPXModSk7Zi0tID4wOylpZihkKGw9dVtmXSxmLGgpKXN3aXRjaChlKXtjYXNlIDA6cmV0dXJuIGw7Y2FzZSAxOnJldHVybiBmfXJldHVybiB0Py0xOnZvaWQgMH19O2UuZXhwb3J0cz17ZmluZExhc3Q6Y3JlYXRlTWV0aG9kKDApLGZpbmRMYXN0SW5kZXg6Y3JlYXRlTWV0aG9kKDEpfX0sKGUsdCxhKT0+e3ZhciByPWEoOTIpLG49YSgzMSksaT1hKDkpLHM9cihyLmJpbmQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe24oZSk7cmV0dXJuIHZvaWQgMD09PXQ/ZTppP3MoZSx0KTpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSwoZSx0LGEpPT57dmFyIHI9YSgxNSksbj1hKDE0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIkZ1bmN0aW9uIj09PXIoZSkpcmV0dXJuIG4oZSl9fSwoZSx0LGEpPT57dmFyIHI9YSg4NSksbj1hKDkwKS5maW5kTGFzdEluZGV4LGk9ci5hVHlwZWRBcnJheTsoMCxyLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kTGFzdEluZGV4IiwoZnVuY3Rpb24gZmluZExhc3RJbmRleChlKXtyZXR1cm4gbihpKHRoaXMpLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSkpfSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoOCksaT1hKDg1KSxzPWEoNjQpLG89YSg5NSksYz1hKDQwKSxsPWEoNyksaD1yLlJhbmdlRXJyb3IsdT1yLkludDhBcnJheSxkPXUmJnUucHJvdG90eXBlLGY9ZCYmZC5zZXQsZz1pLmFUeXBlZEFycmF5LHA9aS5leHBvcnRUeXBlZEFycmF5TWV0aG9kLG09IWwoKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDIpO24oZixlLHtsZW5ndGg6MSwwOjN9LDEpO3JldHVybiAzIT09ZVsxXX0pKSxiPW0mJmkuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyYmbCgoZnVuY3Rpb24oKXt2YXIgZT1uZXcgdSgyKTtlLnNldCgxKTtlLnNldCgiMiIsMSk7cmV0dXJuIDAhPT1lWzBdfHwyIT09ZVsxXX0pKTtwKCJzZXQiLChmdW5jdGlvbiBzZXQoZSl7Zyh0aGlzKTt2YXIgdD1vKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDEpLGE9YyhlKTtpZihtKXJldHVybiBuKGYsdGhpcyxhLHQpO3ZhciByPXRoaXMubGVuZ3RoLGk9cyhhKSxsPTA7aWYoaSt0PnIpdGhyb3cgaCgiV3JvbmcgbGVuZ3RoIik7Zm9yKDtsPGk7KXRoaXNbdCtsXT1hW2wrK119KSwhbXx8Yil9LChlLHQsYSk9Pnt2YXIgcj1hKDk2KSxuPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGE9cihlKTtpZihhJXQpdGhyb3cgbigiV3Jvbmcgb2Zmc2V0Iik7cmV0dXJuIGF9fSwoZSx0LGEpPT57dmFyIHI9YSg2Miksbj1SYW5nZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1yKGUpO2lmKHQ8MCl0aHJvdyBuKCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDAiKTtyZXR1cm4gdH19LChlLHQsYSk9Pnt2YXIgcj1hKDk4KSxuPWEoODUpLGk9bi5hVHlwZWRBcnJheSxzPW4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxvPW4uZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yO3MoInRvUmV2ZXJzZWQiLChmdW5jdGlvbiB0b1JldmVyc2VkKCl7cmV0dXJuIHIoaSh0aGlzKSxvKHRoaXMpKX0pKX0sKGUsdCxhKT0+e3ZhciByPWEoNjQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgYT1yKGUpLG49bmV3IHQoYSksaT0wO2k8YTtpKyspbltpXT1lW2EtaS0xXTtyZXR1cm4gbn19LChlLHQsYSk9Pnt2YXIgcj1hKDg1KSxuPWEoMTQpLGk9YSgzMSkscz1hKDEwMCksbz1yLmFUeXBlZEFycmF5LGM9ci5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsbD1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsaD1uKHIuVHlwZWRBcnJheVByb3RvdHlwZS5zb3J0KTtsKCJ0b1NvcnRlZCIsKGZ1bmN0aW9uIHRvU29ydGVkKGUpe3ZvaWQgMCE9PWUmJmkoZSk7dmFyIHQ9byh0aGlzKSxhPXMoYyh0KSx0KTtyZXR1cm4gaChhLGUpfSkpfSwoZSx0LGEpPT57dmFyIHI9YSg2NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBhPTAsbj1yKHQpLGk9bmV3IGUobik7bj5hOylpW2FdPXRbYSsrXTtyZXR1cm4gaX19LChlLHQsYSk9Pnt2YXIgcj1hKDEwMiksbj1hKDg1KSxpPWEoMTAzKSxzPWEoNjIpLG89YSgxMDQpLGM9bi5hVHlwZWRBcnJheSxsPW4uZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yLGg9bi5leHBvcnRUeXBlZEFycmF5TWV0aG9kLHU9ISFmdW5jdGlvbigpe3RyeXtuZXcgSW50OEFycmF5KDEpLndpdGgoMix7dmFsdWVPZjpmdW5jdGlvbigpe3Rocm93IDh9fSl9Y2F0Y2goZSl7cmV0dXJuIDg9PT1lfX0oKTtoKCJ3aXRoIix7d2l0aDpmdW5jdGlvbihlLHQpe3ZhciBhPWModGhpcyksbj1zKGUpLGg9aShhKT9vKHQpOit0O3JldHVybiByKGEsbChhKSxuLGgpfX0ud2l0aCwhdSl9LChlLHQsYSk9Pnt2YXIgcj1hKDY0KSxuPWEoNjIpLGk9UmFuZ2VFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGEscyl7dmFyIG89cihlKSxjPW4oYSksbD1jPDA/bytjOmM7aWYobD49b3x8bDwwKXRocm93IGkoIkluY29ycmVjdCBpbmRleCIpO2Zvcih2YXIgaD1uZXcgdChvKSx1PTA7dTxvO3UrKyloW3VdPXU9PT1sP3M6ZVt1XTtyZXR1cm4gaH19LChlLHQsYSk9Pnt2YXIgcj1hKDc4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKTtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT10fHwiQmlnVWludDY0QXJyYXkiPT09dH19LChlLHQsYSk9Pnt2YXIgcj1hKDE5KSxuPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cihlLCJudW1iZXIiKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbigiQ2FuJ3QgY29udmVydCBudW1iZXIgdG8gYmlnaW50Iik7cmV0dXJuIEJpZ0ludCh0KX19LChlLHQsYSk9Pnt2YXIgcj1hKDYpLG49YSg4NyksaT1hKDEwNikscz1BcnJheUJ1ZmZlci5wcm90b3R5cGU7ciYmISgiZGV0YWNoZWQiaW4gcykmJm4ocywiZGV0YWNoZWQiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uIGRldGFjaGVkKCl7cmV0dXJuIGkodGhpcyl9fSl9LChlLHQsYSk9Pnt2YXIgcj1hKDE0KSxuPWEoMTA3KSxpPXIoQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoMCE9PW4oZSkpcmV0dXJuITE7dHJ5e2koZSwwLDApO3JldHVybiExfWNhdGNoKGUpe3JldHVybiEwfX19LChlLHQsYSk9Pnt2YXIgcj1hKDcyKSxuPWEoMTUpLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1yKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIsImdldCIpfHxmdW5jdGlvbihlKXtpZigiQXJyYXlCdWZmZXIiIT09bihlKSl0aHJvdyBpKCJBcnJheUJ1ZmZlciBleHBlY3RlZCIpO3JldHVybiBlLmJ5dGVMZW5ndGh9fSwoZSx0LGEpPT57dmFyIHI9YSgzKSxuPWEoMTA5KTtuJiZyKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixwcm90bzohMH0se3RyYW5zZmVyOmZ1bmN0aW9uIHRyYW5zZmVyKCl7cmV0dXJuIG4odGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDAsITApfX0pfSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoMTQpLGk9YSg3Mikscz1hKDExMCksbz1hKDEwNiksYz1hKDEwNyksbD1hKDExMSksaD1yLlR5cGVFcnJvcix1PXIuc3RydWN0dXJlZENsb25lLGQ9ci5BcnJheUJ1ZmZlcixmPXIuRGF0YVZpZXcsZz1NYXRoLm1pbixwPWQucHJvdG90eXBlLG09Zi5wcm90b3R5cGUsYj1uKHAuc2xpY2UpLHk9aShwLCJyZXNpemFibGUiLCJnZXQiKSx3PWkocCwibWF4Qnl0ZUxlbmd0aCIsImdldCIpLFM9bihtLmdldEludDgpLHg9bihtLnNldEludDgpO2UuZXhwb3J0cz1sJiZmdW5jdGlvbihlLHQsYSl7dmFyIHI9YyhlKSxuPXZvaWQgMD09PXQ/cjpzKHQpLGk9IXl8fCF5KGUpO2lmKG8oZSkpdGhyb3cgaCgiQXJyYXlCdWZmZXIgaXMgZGV0YWNoZWQiKTt2YXIgbD11KGUse3RyYW5zZmVyOltlXX0pO2lmKHI9PT1uJiYoYXx8aSkpcmV0dXJuIGw7aWYocj49biYmKCFhfHxpKSlyZXR1cm4gYihsLDAsbik7Zm9yKHZhciBwPWEmJiFpJiZ3P3ttYXhCeXRlTGVuZ3RoOncobCl9OnZvaWQgMCxtPW5ldyBkKG4scCksQz1uZXcgZihsKSx2PW5ldyBmKG0pLGs9ZyhuLHIpLE89MDtPPGs7TysrKXgodixPLFMoQyxPKSk7cmV0dXJuIG19fSwoZSx0LGEpPT57dmFyIHI9YSg2Miksbj1hKDY1KSxpPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpcmV0dXJuIDA7dmFyIHQ9cihlKSxhPW4odCk7aWYodCE9PWEpdGhyb3cgaSgiV3JvbmcgbGVuZ3RoIG9yIGluZGV4Iik7cmV0dXJuIGF9fSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoNyksaT1hKDI4KSxzPWEoMTEyKSxvPWEoMTEzKSxjPWEoMTE0KSxsPXIuc3RydWN0dXJlZENsb25lO2UuZXhwb3J0cz0hIWwmJiFuKChmdW5jdGlvbigpe2lmKG8mJmk+OTJ8fGMmJmk+OTR8fHMmJmk+OTcpcmV0dXJuITE7dmFyIGU9bmV3IEFycmF5QnVmZmVyKDgpLHQ9bChlLHt0cmFuc2ZlcjpbZV19KTtyZXR1cm4gMCE9PWUuYnl0ZUxlbmd0aHx8OCE9PXQuYnl0ZUxlbmd0aH0pKX0sKGUsdCxhKT0+e3ZhciByPWEoMTEzKSxuPWEoMTE0KTtlLmV4cG9ydHM9IXImJiFuJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudH0sZT0+e2UuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIERlbm8mJkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9ufSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoMTUpO2UuZXhwb3J0cz0icHJvY2VzcyI9PT1uKHIucHJvY2Vzcyl9LChlLHQsYSk9Pnt2YXIgcj1hKDMpLG49YSgxMDkpO24mJnIoe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwfSx7dHJhbnNmZXJUb0ZpeGVkTGVuZ3RoOmZ1bmN0aW9uIHRyYW5zZmVyVG9GaXhlZExlbmd0aCgpe3JldHVybiBuKHRoaXMsYXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLCExKX19KX0sKGUsdCxhKT0+e3ZhciByPWEoMyksbj1hKDExNyk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFhKDEyNikoImRpZmZlcmVuY2UiKX0se2RpZmZlcmVuY2U6bn0pfSwoZSx0LGEpPT57dmFyIHI9YSgxMTgpLG49YSgxMTkpLGk9YSgxMjApLHM9YSgxMjMpLG89YSgxMjQpLGM9YSgxMjEpLGw9YSgxMjIpLGg9bi5oYXMsdT1uLnJlbW92ZTtlLmV4cG9ydHM9ZnVuY3Rpb24gZGlmZmVyZW5jZShlKXt2YXIgdD1yKHRoaXMpLGE9byhlKSxuPWkodCk7cyh0KTw9YS5zaXplP2ModCwoZnVuY3Rpb24oZSl7YS5pbmNsdWRlcyhlKSYmdShuLGUpfSkpOmwoYS5nZXRJdGVyYXRvcigpLChmdW5jdGlvbihlKXtoKHQsZSkmJnUobixlKX0pKTtyZXR1cm4gbn19LChlLHQsYSk9Pnt2YXIgcj1hKDExOSkuaGFzO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyKGUpO3JldHVybiBlfX0sKGUsdCxhKT0+e3ZhciByPWEoMTQpLG49U2V0LnByb3RvdHlwZTtlLmV4cG9ydHM9e1NldDpTZXQsYWRkOnIobi5hZGQpLGhhczpyKG4uaGFzKSxyZW1vdmU6cihuLmRlbGV0ZSkscHJvdG86bn19LChlLHQsYSk9Pnt2YXIgcj1hKDExOSksbj1hKDEyMSksaT1yLlNldCxzPXIuYWRkO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgaTtuKGUsKGZ1bmN0aW9uKGUpe3ModCxlKX0pKTtyZXR1cm4gdH19LChlLHQsYSk9Pnt2YXIgcj1hKDE0KSxuPWEoMTIyKSxpPWEoMTE5KSxzPWkuU2V0LG89aS5wcm90byxjPXIoby5mb3JFYWNoKSxsPXIoby5rZXlzKSxoPWwobmV3IHMpLm5leHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhKXtyZXR1cm4gYT9uKHtpdGVyYXRvcjpsKGUpLG5leHQ6aH0sdCk6YyhlLHQpfX0sKGUsdCxhKT0+e3ZhciByPWEoOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhKXtmb3IodmFyIG4saSxzPWE/ZTplLml0ZXJhdG9yLG89ZS5uZXh0OyEobj1yKG8scykpLmRvbmU7KWlmKHZvaWQgMCE9PShpPXQobi52YWx1ZSkpKXJldHVybiBpfX0sKGUsdCxhKT0+e3ZhciByPWEoNzIpLG49YSgxMTkpO2UuZXhwb3J0cz1yKG4ucHJvdG8sInNpemUiLCJnZXQiKXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2l6ZX19LChlLHQsYSk9Pnt2YXIgcj1hKDMxKSxuPWEoNDcpLGk9YSg4KSxzPWEoNjIpLG89YSgxMjUpLGM9IkludmFsaWQgc2l6ZSIsbD1SYW5nZUVycm9yLGg9VHlwZUVycm9yLHU9TWF0aC5tYXgsU2V0UmVjb3JkPWZ1bmN0aW9uKGUsdCxhLHIpe3RoaXMuc2V0PWU7dGhpcy5zaXplPXQ7dGhpcy5oYXM9YTt0aGlzLmtleXM9cn07U2V0UmVjb3JkLnByb3RvdHlwZT17Z2V0SXRlcmF0b3I6ZnVuY3Rpb24oKXtyZXR1cm4gbyhuKGkodGhpcy5rZXlzLHRoaXMuc2V0KSkpfSxpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gaSh0aGlzLmhhcyx0aGlzLnNldCxlKX19O2UuZXhwb3J0cz1mdW5jdGlvbihlKXtuKGUpO3ZhciB0PStlLnNpemU7aWYodCE9dCl0aHJvdyBoKGMpO3ZhciBhPXModCk7aWYoYTwwKXRocm93IGwoYyk7cmV0dXJuIG5ldyBTZXRSZWNvcmQoZSx1KGEsMCkscihlLmhhcykscihlLmtleXMpKX19LGU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2l0ZXJhdG9yOmUsbmV4dDplLm5leHQsZG9uZTohMX19fSwoZSx0LGEpPT57dmFyIHI9YSgyNCksY3JlYXRlU2V0TGlrZT1mdW5jdGlvbihlKXtyZXR1cm57c2l6ZTplLGhhczpmdW5jdGlvbigpe3JldHVybiExfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19fX19fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cigiU2V0Iik7dHJ5eyhuZXcgdClbZV0oY3JlYXRlU2V0TGlrZSgwKSk7dHJ5eyhuZXcgdClbZV0oY3JlYXRlU2V0TGlrZSgtMSkpO3JldHVybiExfWNhdGNoKGUpe3JldHVybiEwfX1jYXRjaChlKXtyZXR1cm4hMX19fSwoZSx0LGEpPT57dmFyIHI9YSgzKSxuPWEoNyksaT1hKDEyOCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFhKDEyNikoImludGVyc2VjdGlvbiIpfHxuKChmdW5jdGlvbigpe3JldHVybiIzLDIiIT09QXJyYXkuZnJvbShuZXcgU2V0KFsxLDIsM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLDJdKSkpfSkpfSx7aW50ZXJzZWN0aW9uOml9KX0sKGUsdCxhKT0+e3ZhciByPWEoMTE4KSxuPWEoMTE5KSxpPWEoMTIzKSxzPWEoMTI0KSxvPWEoMTIxKSxjPWEoMTIyKSxsPW4uU2V0LGg9bi5hZGQsdT1uLmhhcztlLmV4cG9ydHM9ZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGUpe3ZhciB0PXIodGhpcyksYT1zKGUpLG49bmV3IGw7aSh0KT5hLnNpemU/YyhhLmdldEl0ZXJhdG9yKCksKGZ1bmN0aW9uKGUpe3UodCxlKSYmaChuLGUpfSkpOm8odCwoZnVuY3Rpb24oZSl7YS5pbmNsdWRlcyhlKSYmaChuLGUpfSkpO3JldHVybiBufX0sKGUsdCxhKT0+e3ZhciByPWEoMyksbj1hKDEzMCk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFhKDEyNikoImlzRGlzam9pbnRGcm9tIil9LHtpc0Rpc2pvaW50RnJvbTpufSl9LChlLHQsYSk9Pnt2YXIgcj1hKDExOCksbj1hKDExOSkuaGFzLGk9YSgxMjMpLHM9YSgxMjQpLG89YSgxMjEpLGM9YSgxMjIpLGw9YSgxMzEpO2UuZXhwb3J0cz1mdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShlKXt2YXIgdD1yKHRoaXMpLGE9cyhlKTtpZihpKHQpPD1hLnNpemUpcmV0dXJuITEhPT1vKHQsKGZ1bmN0aW9uKGUpe2lmKGEuaW5jbHVkZXMoZSkpcmV0dXJuITF9KSwhMCk7dmFyIGg9YS5nZXRJdGVyYXRvcigpO3JldHVybiExIT09YyhoLChmdW5jdGlvbihlKXtpZihuKHQsZSkpcmV0dXJuIGwoaCwibm9ybWFsIiwhMSl9KSl9fSwoZSx0LGEpPT57dmFyIHI9YSg4KSxuPWEoNDcpLGk9YSgzMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxhKXt2YXIgcyxvO24oZSk7dHJ5e2lmKCEocz1pKGUsInJldHVybiIpKSl7aWYoInRocm93Ij09PXQpdGhyb3cgYTtyZXR1cm4gYX1zPXIocyxlKX1jYXRjaChlKXtvPSEwO3M9ZX1pZigidGhyb3ciPT09dCl0aHJvdyBhO2lmKG8pdGhyb3cgcztuKHMpO3JldHVybiBhfX0sKGUsdCxhKT0+e3ZhciByPWEoMyksbj1hKDEzMyk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFhKDEyNikoImlzU3Vic2V0T2YiKX0se2lzU3Vic2V0T2Y6bn0pfSwoZSx0LGEpPT57dmFyIHI9YSgxMTgpLG49YSgxMjMpLGk9YSgxMjEpLHM9YSgxMjQpO2UuZXhwb3J0cz1mdW5jdGlvbiBpc1N1YnNldE9mKGUpe3ZhciB0PXIodGhpcyksYT1zKGUpO3JldHVybiEobih0KT5hLnNpemUpJiYhMSE9PWkodCwoZnVuY3Rpb24oZSl7aWYoIWEuaW5jbHVkZXMoZSkpcmV0dXJuITF9KSwhMCl9fSwoZSx0LGEpPT57dmFyIHI9YSgzKSxuPWEoMTM1KTtyKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWEoMTI2KSgiaXNTdXBlcnNldE9mIil9LHtpc1N1cGVyc2V0T2Y6bn0pfSwoZSx0LGEpPT57dmFyIHI9YSgxMTgpLG49YSgxMTkpLmhhcyxpPWEoMTIzKSxzPWEoMTI0KSxvPWEoMTIyKSxjPWEoMTMxKTtlLmV4cG9ydHM9ZnVuY3Rpb24gaXNTdXBlcnNldE9mKGUpe3ZhciB0PXIodGhpcyksYT1zKGUpO2lmKGkodCk8YS5zaXplKXJldHVybiExO3ZhciBsPWEuZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PW8obCwoZnVuY3Rpb24oZSl7aWYoIW4odCxlKSlyZXR1cm4gYyhsLCJub3JtYWwiLCExKX0pKX19LChlLHQsYSk9Pnt2YXIgcj1hKDMpLG49YSgxMzcpO3Ioe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohYSgxMjYpKCJzeW1tZXRyaWNEaWZmZXJlbmNlIil9LHtzeW1tZXRyaWNEaWZmZXJlbmNlOm59KX0sKGUsdCxhKT0+e3ZhciByPWEoMTE4KSxuPWEoMTE5KSxpPWEoMTIwKSxzPWEoMTI0KSxvPWEoMTIyKSxjPW4uYWRkLGw9bi5oYXMsaD1uLnJlbW92ZTtlLmV4cG9ydHM9ZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShlKXt2YXIgdD1yKHRoaXMpLGE9cyhlKS5nZXRJdGVyYXRvcigpLG49aSh0KTtvKGEsKGZ1bmN0aW9uKGUpe2wodCxlKT9oKG4sZSk6YyhuLGUpfSkpO3JldHVybiBufX0sKGUsdCxhKT0+e3ZhciByPWEoMyksbj1hKDEzOSk7cih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFhKDEyNikoInVuaW9uIil9LHt1bmlvbjpufSl9LChlLHQsYSk9Pnt2YXIgcj1hKDExOCksbj1hKDExOSkuYWRkLGk9YSgxMjApLHM9YSgxMjQpLG89YSgxMjIpO2UuZXhwb3J0cz1mdW5jdGlvbiB1bmlvbihlKXt2YXIgdD1yKHRoaXMpLGE9cyhlKS5nZXRJdGVyYXRvcigpLGM9aSh0KTtvKGEsKGZ1bmN0aW9uKGUpe24oYyxlKX0pKTtyZXR1cm4gY319LChlLHQsYSk9Pnt2YXIgcj1hKDMpLG49YSg0MCksaT1hKDY0KSxzPWEoMTQxKSxvPWEoMTQzKTtyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDphKDcpKChmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3B1c2g6ZnVuY3Rpb24gcHVzaChlKXt2YXIgdD1uKHRoaXMpLGE9aSh0KSxyPWFyZ3VtZW50cy5sZW5ndGg7byhhK3IpO2Zvcih2YXIgYz0wO2M8cjtjKyspe3RbYV09YXJndW1lbnRzW2NdO2ErK31zKHQsYSk7cmV0dXJuIGF9fSl9LChlLHQsYSk9Pnt2YXIgcj1hKDYpLG49YSgxNDIpLGk9VHlwZUVycm9yLHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPXImJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCk7ZS5leHBvcnRzPW8/ZnVuY3Rpb24oZSx0KXtpZihuKGUpJiYhcyhlLCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBpKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIGUubGVuZ3RoPXR9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGVuZ3RoPXR9fSwoZSx0LGEpPT57dmFyIHI9YSgxNSk7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uIGlzQXJyYXkoZSl7cmV0dXJuIkFycmF5Ij09PXIoZSl9fSxlPT57dmFyIHQ9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihlPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgdCgiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIGV9fSwoZSx0LGEpPT57dmFyIHI9YSgzKSxuPWEoNCksaT1hKDg3KSxzPWEoNiksbz1UeXBlRXJyb3IsYz1PYmplY3QuZGVmaW5lUHJvcGVydHksbD1uLnNlbGYhPT1uO3RyeXtpZihzKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sInNlbGYiKTshbCYmaCYmaC5nZXQmJmguZW51bWVyYWJsZXx8aShuLCJzZWxmIix7Z2V0OmZ1bmN0aW9uIHNlbGYoKXtyZXR1cm4gbn0sc2V0OmZ1bmN0aW9uIHNlbGYoZSl7aWYodGhpcyE9PW4pdGhyb3cgbygiSWxsZWdhbCBpbnZvY2F0aW9uIik7YyhuLCJzZWxmIix7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pfWVsc2Ugcih7Z2xvYmFsOiEwLHNpbXBsZTohMCxmb3JjZWQ6bH0se3NlbGY6bn0pfWNhdGNoKGUpe319LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5WZXJib3NpdHlMZXZlbD10LlV0aWw9dC5Vbmtub3duRXJyb3JFeGNlcHRpb249dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249dC5UZXh0UmVuZGVyaW5nTW9kZT10LlJlbmRlcmluZ0ludGVudEZsYWc9dC5Qcm9taXNlQ2FwYWJpbGl0eT10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10LlBhZ2VBY3Rpb25FdmVudFR5cGU9dC5PUFM9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTUFYX0lNQUdFX1NJWkVfVE9fQ0FDSEU9dC5MSU5FX0ZBQ1RPUj10LkxJTkVfREVTQ0VOVF9GQUNUT1I9dC5JbnZhbGlkUERGRXhjZXB0aW9uPXQuSW1hZ2VLaW5kPXQuSURFTlRJVFlfTUFUUklYPXQuRm9ybWF0RXJyb3I9dC5GZWF0dXJlVGVzdD10LkZPTlRfSURFTlRJVFlfTUFUUklYPXQuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGU9dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuQmFzZUV4Y2VwdGlvbj10LkJBU0VMSU5FX0ZBQ1RPUj10LkFubm90YXRpb25UeXBlPXQuQW5ub3RhdGlvblJlcGx5VHlwZT10LkFubm90YXRpb25QcmVmaXg9dC5Bbm5vdGF0aW9uTW9kZT10LkFubm90YXRpb25GbGFnPXQuQW5ub3RhdGlvbkZpZWxkRmxhZz10LkFubm90YXRpb25FZGl0b3JUeXBlPXQuQW5ub3RhdGlvbkVkaXRvclByZWZpeD10LkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT10LkFubm90YXRpb25BY3Rpb25FdmVudFR5cGU9dC5BYm9ydEV4Y2VwdGlvbj12b2lkIDA7dC5hc3NlcnQ9ZnVuY3Rpb24gYXNzZXJ0KGUsdCl7ZXx8dW5yZWFjaGFibGUodCl9O3QuYnl0ZXNUb1N0cmluZz1ieXRlc1RvU3RyaW5nO3QuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybD1mdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKGEmJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoYS5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXtjb25zdCB0PWUubWF0Y2goL1wuL2cpO3Q/Lmxlbmd0aD49MiYmKGU9YGh0dHA6Ly8ke2V9YCl9aWYoYS50cnlDb252ZXJ0RW5jb2RpbmcpdHJ5e2U9c3RyaW5nVG9VVEY4U3RyaW5nKGUpfWNhdGNoe319Y29uc3Qgcj10P25ldyBVUkwoZSx0KTpuZXcgVVJMKGUpO2lmKGZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2woZSl7c3dpdGNoKGU/LnByb3RvY29sKXtjYXNlImh0dHA6IjpjYXNlImh0dHBzOiI6Y2FzZSJmdHA6IjpjYXNlIm1haWx0bzoiOmNhc2UidGVsOiI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHIpKXJldHVybiByfWNhdGNoe31yZXR1cm4gbnVsbH07dC5nZXRNb2RpZmljYXRpb25EYXRlPWZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGUoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IERhdGU7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX07dC5nZXRVdWlkPWZ1bmN0aW9uIGdldFV1aWQoKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0bz8ucmFuZG9tVVVJRClyZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtjb25zdCBlPW5ldyBVaW50OEFycmF5KDMyKTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0bz8uZ2V0UmFuZG9tVmFsdWVzKWNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSk7ZWxzZSBmb3IobGV0IHQ9MDt0PDMyO3QrKyllW3RdPU1hdGguZmxvb3IoMjU1Kk1hdGgucmFuZG9tKCkpO3JldHVybiBieXRlc1RvU3RyaW5nKGUpfTt0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCl7cmV0dXJuIGl9O3QuaW5mbz1mdW5jdGlvbiBpbmZvKGUpe2k+PW4uSU5GT1MmJmNvbnNvbGUubG9nKGBJbmZvOiAke2V9YCl9O3QuaXNBcnJheUJ1ZmZlcj1mdW5jdGlvbiBpc0FycmF5QnVmZmVyKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmdm9pZCAwIT09ZT8uYnl0ZUxlbmd0aH07dC5pc0FycmF5RXF1YWw9ZnVuY3Rpb24gaXNBcnJheUVxdWFsKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspaWYoZVthXSE9PXRbYV0pcmV0dXJuITE7cmV0dXJuITB9O3QuaXNOb2RlSlM9dm9pZCAwO3Qubm9ybWFsaXplVW5pY29kZT1mdW5jdGlvbiBub3JtYWxpemVVbmljb2RlKGUpe2lmKCFsKXtsPS8oW1x1MDBhMFx1MDBiNVx1MDM3ZVx1MGViM1x1MjAwMC1cdTIwMGFcdTIwMmZcdTIxMjZcdWZiMDAtXHVmYjA0XHVmYjA2XHVmYjIwLVx1ZmIzNlx1ZmIzOC1cdWZiM2NcdWZiM2VcdWZiNDAtXHVmYjQxXHVmYjQzLVx1ZmI0NFx1ZmI0Ni1cdWZiYTFcdWZiYTQtXHVmYmE5XHVmYmFlLVx1ZmJiMVx1ZmJkMy1cdWZiZGNcdWZiZGUtXHVmYmU3XHVmYmVhLVx1ZmJmOFx1ZmJmYy1cdWZiZmRcdWZjMDAtXHVmYzVkXHVmYzY0LVx1ZmNmMVx1ZmNmNS1cdWZkM2RcdWZkODhcdWZkZjRcdWZkZmEtXHVmZGZiXHVmZTcxXHVmZTc3XHVmZTc5XHVmZTdiXHVmZTdkXSspfChcdWZiMDUrKS9ndTtoPW5ldyBNYXAoW1si76yFIiwixb90Il1dKX1yZXR1cm4gZS5yZXBsYWNlQWxsKGwsKChlLHQsYSk9PnQ/dC5ub3JtYWxpemUoIk5GS0MiKTpoLmdldChhKSkpfTt0Lm9iamVjdEZyb21NYXA9ZnVuY3Rpb24gb2JqZWN0RnJvbU1hcChlKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W2Escl1vZiBlKXRbYV09cjtyZXR1cm4gdH07dC5vYmplY3RTaXplPWZ1bmN0aW9uIG9iamVjdFNpemUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmxlbmd0aH07dC5zZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYoaT1lKX07dC5zaGFkb3c9c2hhZG93O3Quc3RyaW5nMzI9ZnVuY3Rpb24gc3RyaW5nMzIoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9O3Quc3RyaW5nVG9CeXRlcz1zdHJpbmdUb0J5dGVzO3Quc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24gc3RyaW5nVG9QREZTdHJpbmcoZSl7aWYoZVswXT49IsOvIil7bGV0IHQ7IsO+Ij09PWVbMF0mJiLDvyI9PT1lWzFdP3Q9InV0Zi0xNmJlIjoiw78iPT09ZVswXSYmIsO+Ij09PWVbMV0/dD0idXRmLTE2bGUiOiLDryI9PT1lWzBdJiYiwrsiPT09ZVsxXSYmIsK/Ij09PWVbMl0mJih0PSJ1dGYtOCIpO2lmKHQpdHJ5e2NvbnN0IGE9bmV3IFRleHREZWNvZGVyKHQse2ZhdGFsOiEwfSkscj1zdHJpbmdUb0J5dGVzKGUpO3JldHVybiBhLmRlY29kZShyKX1jYXRjaChlKXt3YXJuKGBzdHJpbmdUb1BERlN0cmluZzogIiR7ZX0iLmApfX1jb25zdCB0PVtdO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1jW2UuY2hhckNvZGVBdChhKV07dC5wdXNoKHI/U3RyaW5nLmZyb21DaGFyQ29kZShyKTplLmNoYXJBdChhKSl9cmV0dXJuIHQuam9pbigiIil9O3Quc3RyaW5nVG9VVEY4U3RyaW5nPXN0cmluZ1RvVVRGOFN0cmluZzt0LnVucmVhY2hhYmxlPXVucmVhY2hhYmxlO3QudXRmOFN0cmluZ1RvU3RyaW5nPWZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhlKXtyZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKX07dC53YXJuPXdhcm47YSgyKTthKDE0Nik7YSgxNDgpO2EoMTQ5KTthKDE0MCk7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO2NvbnN0IHI9ISgib2JqZWN0IiE9dHlwZW9mIHByb2Nlc3N8fHByb2Nlc3MrIiIhPSJbb2JqZWN0IHByb2Nlc3NdInx8cHJvY2Vzcy52ZXJzaW9ucy5ud3x8cHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbiYmcHJvY2Vzcy50eXBlJiYiYnJvd3NlciIhPT1wcm9jZXNzLnR5cGUpO3QuaXNOb2RlSlM9cjt0LklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdO3QuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXTt0Lk1BWF9JTUFHRV9TSVpFX1RPX0NBQ0hFPTFlNzt0LkxJTkVfRkFDVE9SPTEuMzU7dC5MSU5FX0RFU0NFTlRfRkFDVE9SPS4zNTt0LkJBU0VMSU5FX0ZBQ1RPUj0uMjU5MjU5MjU5MjU5MjU5MjQ7dC5SZW5kZXJpbmdJbnRlbnRGbGFnPXtBTlk6MSxESVNQTEFZOjIsUFJJTlQ6NCxTQVZFOjgsQU5OT1RBVElPTlNfRk9STVM6MTYsQU5OT1RBVElPTlNfU1RPUkFHRTozMixBTk5PVEFUSU9OU19ESVNBQkxFOjY0LE9QTElTVDoyNTZ9O3QuQW5ub3RhdGlvbk1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRk9STVM6MixFTkFCTEVfU1RPUkFHRTozfTt0LkFubm90YXRpb25FZGl0b3JQcmVmaXg9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iO3QuQW5ub3RhdGlvbkVkaXRvclR5cGU9e0RJU0FCTEU6LTEsTk9ORTowLEZSRUVURVhUOjMsU1RBTVA6MTMsSU5LOjE1fTt0LkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlPXtSRVNJWkU6MSxDUkVBVEU6MixGUkVFVEVYVF9TSVpFOjExLEZSRUVURVhUX0NPTE9SOjEyLEZSRUVURVhUX09QQUNJVFk6MTMsSU5LX0NPTE9SOjIxLElOS19USElDS05FU1M6MjIsSU5LX09QQUNJVFk6MjN9O3QuUGVybWlzc2lvbkZsYWc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH07dC5UZXh0UmVuZGVyaW5nTW9kZT17RklMTDowLFNUUk9LRToxLEZJTExfU1RST0tFOjIsSU5WSVNJQkxFOjMsRklMTF9BRERfVE9fUEFUSDo0LFNUUk9LRV9BRERfVE9fUEFUSDo1LEZJTExfU1RST0tFX0FERF9UT19QQVRIOjYsQUREX1RPX1BBVEg6NyxGSUxMX1NUUk9LRV9NQVNLOjMsQUREX1RPX1BBVEhfRkxBRzo0fTt0LkltYWdlS2luZD17R1JBWVNDQUxFXzFCUFA6MSxSR0JfMjRCUFA6MixSR0JBXzMyQlBQOjN9O3QuQW5ub3RhdGlvblR5cGU9e1RFWFQ6MSxMSU5LOjIsRlJFRVRFWFQ6MyxMSU5FOjQsU1FVQVJFOjUsQ0lSQ0xFOjYsUE9MWUdPTjo3LFBPTFlMSU5FOjgsSElHSExJR0hUOjksVU5ERVJMSU5FOjEwLFNRVUlHR0xZOjExLFNUUklLRU9VVDoxMixTVEFNUDoxMyxDQVJFVDoxNCxJTks6MTUsUE9QVVA6MTYsRklMRUFUVEFDSE1FTlQ6MTcsU09VTkQ6MTgsTU9WSUU6MTksV0lER0VUOjIwLFNDUkVFTjoyMSxQUklOVEVSTUFSSzoyMixUUkFQTkVUOjIzLFdBVEVSTUFSSzoyNCxUSFJFRUQ6MjUsUkVEQUNUOjI2fTt0LkFubm90YXRpb25SZXBseVR5cGU9e0dST1VQOiJHcm91cCIsUkVQTFk6IlIifTt0LkFubm90YXRpb25GbGFnPXtJTlZJU0lCTEU6MSxISURERU46MixQUklOVDo0LE5PWk9PTTo4LE5PUk9UQVRFOjE2LE5PVklFVzozMixSRUFET05MWTo2NCxMT0NLRUQ6MTI4LFRPR0dMRU5PVklFVzoyNTYsTE9DS0VEQ09OVEVOVFM6NTEyfTt0LkFubm90YXRpb25GaWVsZEZsYWc9e1JFQURPTkxZOjEsUkVRVUlSRUQ6MixOT0VYUE9SVDo0LE1VTFRJTElORTo0MDk2LFBBU1NXT1JEOjgxOTIsTk9UT0dHTEVUT09GRjoxNjM4NCxSQURJTzozMjc2OCxQVVNIQlVUVE9OOjY1NTM2LENPTUJPOjEzMTA3MixFRElUOjI2MjE0NCxTT1JUOjUyNDI4OCxGSUxFU0VMRUNUOjEwNDg1NzYsTVVMVElTRUxFQ1Q6MjA5NzE1MixET05PVFNQRUxMQ0hFQ0s6NDE5NDMwNCxET05PVFNDUk9MTDo4Mzg4NjA4LENPTUI6MTY3NzcyMTYsUklDSFRFWFQ6MzM1NTQ0MzIsUkFESU9TSU5VTklTT046MzM1NTQ0MzIsQ09NTUlUT05TRUxDSEFOR0U6NjcxMDg4NjR9O3QuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZT17U09MSUQ6MSxEQVNIRUQ6MixCRVZFTEVEOjMsSU5TRVQ6NCxVTkRFUkxJTkU6NX07dC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifTt0LkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlPXtXQzoiV2lsbENsb3NlIixXUzoiV2lsbFNhdmUiLERTOiJEaWRTYXZlIixXUDoiV2lsbFByaW50IixEUDoiRGlkUHJpbnQifTt0LlBhZ2VBY3Rpb25FdmVudFR5cGU9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifTtjb25zdCBuPXtFUlJPUlM6MCxXQVJOSU5HUzoxLElORk9TOjV9O3QuVmVyYm9zaXR5TGV2ZWw9bjt0LkNNYXBDb21wcmVzc2lvblR5cGU9e05PTkU6MCxCSU5BUlk6MX07dC5PUFM9e2RlcGVuZGVuY3k6MSxzZXRMaW5lV2lkdGg6MixzZXRMaW5lQ2FwOjMsc2V0TGluZUpvaW46NCxzZXRNaXRlckxpbWl0OjUsc2V0RGFzaDo2LHNldFJlbmRlcmluZ0ludGVudDo3LHNldEZsYXRuZXNzOjgsc2V0R1N0YXRlOjksc2F2ZToxMCxyZXN0b3JlOjExLHRyYW5zZm9ybToxMixtb3ZlVG86MTMsbGluZVRvOjE0LGN1cnZlVG86MTUsY3VydmVUbzI6MTYsY3VydmVUbzM6MTcsY2xvc2VQYXRoOjE4LHJlY3RhbmdsZToxOSxzdHJva2U6MjAsY2xvc2VTdHJva2U6MjEsZmlsbDoyMixlb0ZpbGw6MjMsZmlsbFN0cm9rZToyNCxlb0ZpbGxTdHJva2U6MjUsY2xvc2VGaWxsU3Ryb2tlOjI2LGNsb3NlRU9GaWxsU3Ryb2tlOjI3LGVuZFBhdGg6MjgsY2xpcDoyOSxlb0NsaXA6MzAsYmVnaW5UZXh0OjMxLGVuZFRleHQ6MzIsc2V0Q2hhclNwYWNpbmc6MzMsc2V0V29yZFNwYWNpbmc6MzQsc2V0SFNjYWxlOjM1LHNldExlYWRpbmc6MzYsc2V0Rm9udDozNyxzZXRUZXh0UmVuZGVyaW5nTW9kZTozOCxzZXRUZXh0UmlzZTozOSxtb3ZlVGV4dDo0MCxzZXRMZWFkaW5nTW92ZVRleHQ6NDEsc2V0VGV4dE1hdHJpeDo0MixuZXh0TGluZTo0MyxzaG93VGV4dDo0NCxzaG93U3BhY2VkVGV4dDo0NSxuZXh0TGluZVNob3dUZXh0OjQ2LG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OjQ3LHNldENoYXJXaWR0aDo0OCxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6NDksc2V0U3Ryb2tlQ29sb3JTcGFjZTo1MCxzZXRGaWxsQ29sb3JTcGFjZTo1MSxzZXRTdHJva2VDb2xvcjo1MixzZXRTdHJva2VDb2xvck46NTMsc2V0RmlsbENvbG9yOjU0LHNldEZpbGxDb2xvck46NTUsc2V0U3Ryb2tlR3JheTo1NixzZXRGaWxsR3JheTo1NyxzZXRTdHJva2VSR0JDb2xvcjo1OCxzZXRGaWxsUkdCQ29sb3I6NTksc2V0U3Ryb2tlQ01ZS0NvbG9yOjYwLHNldEZpbGxDTVlLQ29sb3I6NjEsc2hhZGluZ0ZpbGw6NjIsYmVnaW5JbmxpbmVJbWFnZTo2MyxiZWdpbkltYWdlRGF0YTo2NCxlbmRJbmxpbmVJbWFnZTo2NSxwYWludFhPYmplY3Q6NjYsbWFya1BvaW50OjY3LG1hcmtQb2ludFByb3BzOjY4LGJlZ2luTWFya2VkQ29udGVudDo2OSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczo3MCxlbmRNYXJrZWRDb250ZW50OjcxLGJlZ2luQ29tcGF0OjcyLGVuZENvbXBhdDo3MyxwYWludEZvcm1YT2JqZWN0QmVnaW46NzQscGFpbnRGb3JtWE9iamVjdEVuZDo3NSxiZWdpbkdyb3VwOjc2LGVuZEdyb3VwOjc3LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SW1hZ2VNYXNrWE9iamVjdDo4MyxwYWludEltYWdlTWFza1hPYmplY3RHcm91cDo4NCxwYWludEltYWdlWE9iamVjdDo4NSxwYWludElubGluZUltYWdlWE9iamVjdDo4NixwYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOjg3LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0Ojg4LHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDo4OSxwYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6OTAsY29uc3RydWN0UGF0aDo5MX07dC5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTtsZXQgaT1uLldBUk5JTkdTO2Z1bmN0aW9uIHdhcm4oZSl7aT49bi5XQVJOSU5HUyYmY29uc29sZS5sb2coYFdhcm5pbmc6ICR7ZX1gKX1mdW5jdGlvbiB1bnJlYWNoYWJsZShlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gc2hhZG93KGUsdCxhKXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOmEsZW51bWVyYWJsZTohcixjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITF9KTtyZXR1cm4gYX1jb25zdCBzPWZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCl7ZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbihlLHQpe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlRXhjZXB0aW9uJiZ1bnJlYWNoYWJsZSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi4iKTt0aGlzLm1lc3NhZ2U9ZTt0aGlzLm5hbWU9dH1CYXNlRXhjZXB0aW9uLnByb3RvdHlwZT1uZXcgRXJyb3I7QmFzZUV4Y2VwdGlvbi5jb25zdHJ1Y3Rvcj1CYXNlRXhjZXB0aW9uO3JldHVybiBCYXNlRXhjZXB0aW9ufSgpO3QuQmFzZUV4Y2VwdGlvbj1zO3QuUGFzc3dvcmRFeGNlcHRpb249Y2xhc3MgUGFzc3dvcmRFeGNlcHRpb24gZXh0ZW5kcyBze2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiUGFzc3dvcmRFeGNlcHRpb24iKTt0aGlzLmNvZGU9dH19O3QuVW5rbm93bkVycm9yRXhjZXB0aW9uPWNsYXNzIFVua25vd25FcnJvckV4Y2VwdGlvbiBleHRlbmRzIHN7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJVbmtub3duRXJyb3JFeGNlcHRpb24iKTt0aGlzLmRldGFpbHM9dH19O3QuSW52YWxpZFBERkV4Y2VwdGlvbj1jbGFzcyBJbnZhbGlkUERGRXhjZXB0aW9uIGV4dGVuZHMgc3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJJbnZhbGlkUERGRXhjZXB0aW9uIil9fTt0Lk1pc3NpbmdQREZFeGNlcHRpb249Y2xhc3MgTWlzc2luZ1BERkV4Y2VwdGlvbiBleHRlbmRzIHN7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfX07dC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249Y2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgc3tjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIpO3RoaXMuc3RhdHVzPXR9fTt0LkZvcm1hdEVycm9yPWNsYXNzIEZvcm1hdEVycm9yIGV4dGVuZHMgc3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJGb3JtYXRFcnJvciIpfX07dC5BYm9ydEV4Y2VwdGlvbj1jbGFzcyBBYm9ydEV4Y2VwdGlvbiBleHRlbmRzIHN7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiQWJvcnRFeGNlcHRpb24iKX19O2Z1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZ2b2lkIDAhPT1lPy5sZW5ndGh8fHVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7Y29uc3QgdD1lLmxlbmd0aCxhPTgxOTI7aWYodDxhKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Y29uc3Qgcj1bXTtmb3IobGV0IG49MDtuPHQ7bis9YSl7Y29uc3QgaT1NYXRoLm1pbihuK2EsdCkscz1lLnN1YmFycmF5KG4saSk7ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIHIuam9pbigiIil9ZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhlKXsic3RyaW5nIiE9dHlwZW9mIGUmJnVucmVhY2hhYmxlKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBzdHJpbmdUb0J5dGVzIik7Y29uc3QgdD1lLmxlbmd0aCxhPW5ldyBVaW50OEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDsrK3IpYVtyXT0yNTUmZS5jaGFyQ29kZUF0KHIpO3JldHVybiBhfXQuRmVhdHVyZVRlc3Q9Y2xhc3MgRmVhdHVyZVRlc3R7c3RhdGljIGdldCBpc0xpdHRsZUVuZGlhbigpe3JldHVybiBzaGFkb3codGhpcywiaXNMaXR0bGVFbmRpYW4iLGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSg0KTtlWzBdPTE7cmV0dXJuIDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXX0oKSl9c3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCl7dHJ5e25ldyBGdW5jdGlvbigiIik7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpKX1zdGF0aWMgZ2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfXN0YXRpYyBnZXQgcGxhdGZvcm0oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcj9zaGFkb3codGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOnNoYWRvdyh0aGlzLCJwbGF0Zm9ybSIse2lzV2luOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiV2luIiksaXNNYWM6bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJNYWMiKX0pfXN0YXRpYyBnZXQgaXNDU1NSb3VuZFN1cHBvcnRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNDU1NSb3VuZFN1cHBvcnRlZCIsZ2xvYmFsVGhpcy5DU1M/LnN1cHBvcnRzPy4oIndpZHRoOiByb3VuZCgxLjVweCwgMXB4KSIpKX19O2NvbnN0IG89Wy4uLkFycmF5KDI1Nikua2V5cygpXS5tYXAoKGU9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkpO3QuVXRpbD1jbGFzcyBVdGlse3N0YXRpYyBtYWtlSGV4Q29sb3IoZSx0LGEpe3JldHVybmAjJHtvW2VdfSR7b1t0XX0ke29bYV19YH1zdGF0aWMgc2NhbGVNaW5NYXgoZSx0KXtsZXQgYTtpZihlWzBdKXtpZihlWzBdPDApe2E9dFswXTt0WzBdPXRbMV07dFsxXT1hfXRbMF0qPWVbMF07dFsxXSo9ZVswXTtpZihlWzNdPDApe2E9dFsyXTt0WzJdPXRbM107dFszXT1hfXRbMl0qPWVbM107dFszXSo9ZVszXX1lbHNle2E9dFswXTt0WzBdPXRbMl07dFsyXT1hO2E9dFsxXTt0WzFdPXRbM107dFszXT1hO2lmKGVbMV08MCl7YT10WzJdO3RbMl09dFszXTt0WzNdPWF9dFsyXSo9ZVsxXTt0WzNdKj1lWzFdO2lmKGVbMl08MCl7YT10WzBdO3RbMF09dFsxXTt0WzFdPWF9dFswXSo9ZVsyXTt0WzFdKj1lWzJdfXRbMF0rPWVbNF07dFsxXSs9ZVs0XTt0WzJdKz1lWzVdO3RbM10rPWVbNV19c3RhdGljIHRyYW5zZm9ybShlLHQpe3JldHVybltlWzBdKnRbMF0rZVsyXSp0WzFdLGVbMV0qdFswXStlWzNdKnRbMV0sZVswXSp0WzJdK2VbMl0qdFszXSxlWzFdKnRbMl0rZVszXSp0WzNdLGVbMF0qdFs0XStlWzJdKnRbNV0rZVs0XSxlWzFdKnRbNF0rZVszXSp0WzVdK2VbNV1dfXN0YXRpYyBhcHBseVRyYW5zZm9ybShlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX1zdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKGUsdCl7Y29uc3QgYT10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9hLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9hXX1zdGF0aWMgZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goZSx0KXtjb25zdCBhPXRoaXMuYXBwbHlUcmFuc2Zvcm0oZSx0KSxyPXRoaXMuYXBwbHlUcmFuc2Zvcm0oZS5zbGljZSgyLDQpLHQpLG49dGhpcy5hcHBseVRyYW5zZm9ybShbZVswXSxlWzNdXSx0KSxpPXRoaXMuYXBwbHlUcmFuc2Zvcm0oW2VbMl0sZVsxXV0sdCk7cmV0dXJuW01hdGgubWluKGFbMF0sclswXSxuWzBdLGlbMF0pLE1hdGgubWluKGFbMV0sclsxXSxuWzFdLGlbMV0pLE1hdGgubWF4KGFbMF0sclswXSxuWzBdLGlbMF0pLE1hdGgubWF4KGFbMV0sclsxXSxuWzFdLGlbMV0pXX1zdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShlKXtjb25zdCB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX1zdGF0aWMgc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUoZSl7Y29uc3QgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0sYT1lWzBdKnRbMF0rZVsxXSp0WzJdLHI9ZVswXSp0WzFdK2VbMV0qdFszXSxuPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLHM9KGEraSkvMixvPU1hdGguc3FydCgoYStpKSoqMi00KihhKmktbipyKSkvMixjPXMrb3x8MSxsPXMtb3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGMpLE1hdGguc3FydChsKV19c3RhdGljIG5vcm1hbGl6ZVJlY3QoZSl7Y29uc3QgdD1lLnNsaWNlKDApO2lmKGVbMF0+ZVsyXSl7dFswXT1lWzJdO3RbMl09ZVswXX1pZihlWzFdPmVbM10pe3RbMV09ZVszXTt0WzNdPWVbMV19cmV0dXJuIHR9c3RhdGljIGludGVyc2VjdChlLHQpe2NvbnN0IGE9TWF0aC5tYXgoTWF0aC5taW4oZVswXSxlWzJdKSxNYXRoLm1pbih0WzBdLHRbMl0pKSxyPU1hdGgubWluKE1hdGgubWF4KGVbMF0sZVsyXSksTWF0aC5tYXgodFswXSx0WzJdKSk7aWYoYT5yKXJldHVybiBudWxsO2NvbnN0IG49TWF0aC5tYXgoTWF0aC5taW4oZVsxXSxlWzNdKSxNYXRoLm1pbih0WzFdLHRbM10pKSxpPU1hdGgubWluKE1hdGgubWF4KGVbMV0sZVszXSksTWF0aC5tYXgodFsxXSx0WzNdKSk7cmV0dXJuIG4+aT9udWxsOlthLG4scixpXX1zdGF0aWMgYmV6aWVyQm91bmRpbmdCb3goZSx0LGEscixuLGkscyxvKXtjb25zdCBjPVtdLGw9W1tdLFtdXTtsZXQgaCx1LGQsZixnLHAsbSxiO2ZvcihsZXQgbD0wO2w8MjsrK2wpe2lmKDA9PT1sKXt1PTYqZS0xMiphKzYqbjtoPS0zKmUrOSphLTkqbiszKnM7ZD0zKmEtMyplfWVsc2V7dT02KnQtMTIqcis2Kmk7aD0tMyp0Kzkqci05KmkrMypvO2Q9MypyLTMqdH1pZihNYXRoLmFicyhoKTwxZS0xMil7aWYoTWF0aC5hYnModSk8MWUtMTIpY29udGludWU7Zj0tZC91OzA8ZiYmZjwxJiZjLnB1c2goZil9ZWxzZXttPXUqdS00KmQqaDtiPU1hdGguc3FydChtKTtpZighKG08MCkpe2c9KC11K2IpLygyKmgpOzA8ZyYmZzwxJiZjLnB1c2goZyk7cD0oLXUtYikvKDIqaCk7MDxwJiZwPDEmJmMucHVzaChwKX19fWxldCB5LHc9Yy5sZW5ndGg7Y29uc3QgUz13O2Zvcig7dy0tOyl7Zj1jW3ddO3k9MS1mO2xbMF1bd109eSp5KnkqZSszKnkqeSpmKmErMyp5KmYqZipuK2YqZipmKnM7bFsxXVt3XT15KnkqeSp0KzMqeSp5KmYqciszKnkqZipmKmkrZipmKmYqb31sWzBdW1NdPWU7bFsxXVtTXT10O2xbMF1bUysxXT1zO2xbMV1bUysxXT1vO2xbMF0ubGVuZ3RoPWxbMV0ubGVuZ3RoPVMrMjtyZXR1cm5bTWF0aC5taW4oLi4ubFswXSksTWF0aC5taW4oLi4ubFsxXSksTWF0aC5tYXgoLi4ubFswXSksTWF0aC5tYXgoLi4ubFsxXSldfX07Y29uc3QgYz1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNzI4LDcxMSw3MTAsNzI5LDczMyw3MzEsNzMwLDczMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MjI2LDgyMjQsODIyNSw4MjMwLDgyMTIsODIxMSw0MDIsODI2MCw4MjQ5LDgyNTAsODcyMiw4MjQwLDgyMjIsODIyMCw4MjIxLDgyMTYsODIxNyw4MjE4LDg0ODIsNjQyNTcsNjQyNTgsMzIxLDMzOCwzNTIsMzc2LDM4MSwzMDUsMzIyLDMzOSwzNTMsMzgyLDAsODM2NF07ZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX10LlByb21pc2VDYXBhYmlsaXR5PWNsYXNzIFByb21pc2VDYXBhYmlsaXR5eyNlPSExO2NvbnN0cnVjdG9yKCl7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKCgoZSx0KT0+e3RoaXMucmVzb2x2ZT10PT57dGhpcy4jZT0hMDtlKHQpfTt0aGlzLnJlamVjdD1lPT57dGhpcy4jZT0hMDt0KGUpfX0pKX1nZXQgc2V0dGxlZCgpe3JldHVybiB0aGlzLiNlfX07bGV0IGw9bnVsbCxoPW51bGw7dC5Bbm5vdGF0aW9uUHJlZml4PSJwZGZqc19pbnRlcm5hbF9pZF8ifSwoZSx0LGEpPT57dmFyIHI9YSg0OCksbj1hKDE0KSxpPWEoNzcpLHM9YSgxNDcpLG89VVJMU2VhcmNoUGFyYW1zLGM9by5wcm90b3R5cGUsbD1uKGMuYXBwZW5kKSxoPW4oYy5kZWxldGUpLHU9bihjLmZvckVhY2gpLGQ9bihbXS5wdXNoKSxmPW5ldyBvKCJhPTEmYT0yJmI9MyIpO2YuZGVsZXRlKCJhIiwxKTtmLmRlbGV0ZSgiYiIsdm9pZCAwKTtmKyIiIT0iYT0yIiYmcihjLCJkZWxldGUiLChmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGE9dDwyP3ZvaWQgMDphcmd1bWVudHNbMV07aWYodCYmdm9pZCAwPT09YSlyZXR1cm4gaCh0aGlzLGUpO3ZhciByPVtdO3UodGhpcywoZnVuY3Rpb24oZSx0KXtkKHIse2tleTp0LHZhbHVlOmV9KX0pKTtzKHQsMSk7Zm9yKHZhciBuLG89aShlKSxjPWkoYSksZj0wLGc9MCxwPSExLG09ci5sZW5ndGg7ZjxtOyl7bj1yW2YrK107aWYocHx8bi5rZXk9PT1vKXtwPSEwO2godGhpcyxuLmtleSl9ZWxzZSBnKyt9Zm9yKDtnPG07KShuPXJbZysrXSkua2V5PT09byYmbi52YWx1ZT09PWN8fGwodGhpcyxuLmtleSxuLnZhbHVlKX0pLHtlbnVtZXJhYmxlOiEwLHVuc2FmZTohMH0pfSxlPT57dmFyIHQ9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLGEpe2lmKGU8YSl0aHJvdyB0KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiBlfX0sKGUsdCxhKT0+e3ZhciByPWEoNDgpLG49YSgxNCksaT1hKDc3KSxzPWEoMTQ3KSxvPVVSTFNlYXJjaFBhcmFtcyxjPW8ucHJvdG90eXBlLGw9bihjLmdldEFsbCksaD1uKGMuaGFzKSx1PW5ldyBvKCJhPTEiKTshdS5oYXMoImEiLDIpJiZ1LmhhcygiYSIsdm9pZCAwKXx8cihjLCJoYXMiLChmdW5jdGlvbiBoYXMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxhPXQ8Mj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKHQmJnZvaWQgMD09PWEpcmV0dXJuIGgodGhpcyxlKTt2YXIgcj1sKHRoaXMsZSk7cyh0LDEpO2Zvcih2YXIgbj1pKGEpLG89MDtvPHIubGVuZ3RoOylpZihyW28rK109PT1uKXJldHVybiEwO3JldHVybiExfSkse2VudW1lcmFibGU6ITAsdW5zYWZlOiEwfSl9LChlLHQsYSk9Pnt2YXIgcj1hKDYpLG49YSgxNCksaT1hKDg3KSxzPVVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUsbz1uKHMuZm9yRWFjaCk7ciYmISgic2l6ZSJpbiBzKSYmaShzLCJzaXplIix7Z2V0OmZ1bmN0aW9uIHNpemUoKXt2YXIgZT0wO28odGhpcywoZnVuY3Rpb24oKXtlKyt9KSk7cmV0dXJuIGV9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj12b2lkIDA7dC5hcnJheUJ1ZmZlcnNUb0J5dGVzPWZ1bmN0aW9uIGFycmF5QnVmZmVyc1RvQnl0ZXMoZSl7Y29uc3QgdD1lLmxlbmd0aDtpZigwPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7aWYoMT09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KGVbMF0pO2xldCBhPTA7Zm9yKGxldCByPTA7cjx0O3IrKylhKz1lW3JdLmJ5dGVMZW5ndGg7Y29uc3Qgcj1uZXcgVWludDhBcnJheShhKTtsZXQgbj0wO2ZvcihsZXQgYT0wO2E8dDthKyspe2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoZVthXSk7ci5zZXQodCxuKTtuKz10LmJ5dGVMZW5ndGh9cmV0dXJuIHJ9O3QuY29sbGVjdEFjdGlvbnM9ZnVuY3Rpb24gY29sbGVjdEFjdGlvbnMoZSx0LGEpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKSxzPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkFBIixzdG9wV2hlbkZvdW5kOiExfSk7aWYocylmb3IobGV0IHQ9cy5sZW5ndGgtMTt0Pj0wO3QtLSl7Y29uc3Qgcj1zW3RdO2lmKHIgaW5zdGFuY2VvZiBuLkRpY3QpZm9yKGNvbnN0IHQgb2Ygci5nZXRLZXlzKCkpe2NvbnN0IHM9YVt0XTtpZighcyljb250aW51ZTtjb25zdCBvPVtdO19jb2xsZWN0SlMoci5nZXRSYXcodCksZSxvLG5ldyBuLlJlZlNldCk7by5sZW5ndGg+MCYmKGlbc109byl9fWlmKHQuaGFzKCJBIikpe2NvbnN0IGE9W107X2NvbGxlY3RKUyh0LmdldCgiQSIpLGUsYSxuZXcgbi5SZWZTZXQpO2EubGVuZ3RoPjAmJihpLkFjdGlvbj1hKX1yZXR1cm4oMCxyLm9iamVjdFNpemUpKGkpPjA/aTpudWxsfTt0LmVuY29kZVRvWG1sU3RyaW5nPWZ1bmN0aW9uIGVuY29kZVRvWG1sU3RyaW5nKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZS5jb2RlUG9pbnRBdChyKTtpZigzMjw9biYmbjw9MTI2KXtjb25zdCBpPW9bbl07aWYoaSl7YTxyJiZ0LnB1c2goZS5zdWJzdHJpbmcoYSxyKSk7dC5wdXNoKGkpO2E9cisxfX1lbHNle2E8ciYmdC5wdXNoKGUuc3Vic3RyaW5nKGEscikpO3QucHVzaChgJiN4JHtuLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfTtgKTtuPjU1Mjk1JiYobjw1NzM0NHx8bj42NTUzMykmJnIrKzthPXIrMX19aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2E8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhhLGUubGVuZ3RoKSk7cmV0dXJuIHQuam9pbigiIil9O3QuZXNjYXBlUERGTmFtZT1mdW5jdGlvbiBlc2NhcGVQREZOYW1lKGUpe2NvbnN0IHQ9W107bGV0IGE9MDtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHIpO2lmKG48MzN8fG4+MTI2fHwzNT09PW58fDQwPT09bnx8NDE9PT1ufHw2MD09PW58fDYyPT09bnx8OTE9PT1ufHw5Mz09PW58fDEyMz09PW58fDEyNT09PW58fDQ3PT09bnx8Mzc9PT1uKXthPHImJnQucHVzaChlLnN1YnN0cmluZyhhLHIpKTt0LnB1c2goYCMke24udG9TdHJpbmcoMTYpfWApO2E9cisxfX1pZigwPT09dC5sZW5ndGgpcmV0dXJuIGU7YTxlLmxlbmd0aCYmdC5wdXNoKGUuc3Vic3RyaW5nKGEsZS5sZW5ndGgpKTtyZXR1cm4gdC5qb2luKCIiKX07dC5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24gZXNjYXBlU3RyaW5nKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoLyhbKClcXFxuXHJdKS9nLChlPT4iXG4iPT09ZT8iXFxuIjoiXHIiPT09ZT8iXFxyIjpgXFwke2V9YCkpfTt0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eTt0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZSl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dD1PYmplY3QuY3JlYXRlKG51bGwpO2UodCk7ZT1udWxsfXJldHVybiB0fX07dC5nZXROZXdBbm5vdGF0aW9uc01hcD1mdW5jdGlvbiBnZXROZXdBbm5vdGF0aW9uc01hcChlKXtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBNYXA7Zm9yKGNvbnN0W2Esbl1vZiBlKXtpZighYS5zdGFydHNXaXRoKHIuQW5ub3RhdGlvbkVkaXRvclByZWZpeCkpY29udGludWU7bGV0IGU9dC5nZXQobi5wYWdlSW5kZXgpO2lmKCFlKXtlPVtdO3Quc2V0KG4ucGFnZUluZGV4LGUpfWUucHVzaChuKX1yZXR1cm4gdC5zaXplPjA/dDpudWxsfTt0LmdldFJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uIGdldFJvdGF0aW9uTWF0cml4KGUsdCxhKXtzd2l0Y2goZSl7Y2FzZSA5MDpyZXR1cm5bMCwxLC0xLDAsdCwwXTtjYXNlIDE4MDpyZXR1cm5bLTEsMCwwLC0xLHQsYV07Y2FzZSAyNzA6cmV0dXJuWzAsLTEsMSwwLDAsYV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19O3QuaXNBc2NpaT1mdW5jdGlvbiBpc0FzY2lpKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX07dC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMz09PWV8fDEwPT09ZX07dC5sb2cyPWZ1bmN0aW9uIGxvZzIoZSl7aWYoZTw9MClyZXR1cm4gMDtyZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nMihlKSl9O3QubnVtYmVyVG9TdHJpbmc9ZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcoZSl7aWYoTnVtYmVyLmlzSW50ZWdlcihlKSlyZXR1cm4gZS50b1N0cmluZygpO2NvbnN0IHQ9TWF0aC5yb3VuZCgxMDAqZSk7aWYodCUxMDA9PTApcmV0dXJuKHQvMTAwKS50b1N0cmluZygpO2lmKHQlMTA9PTApcmV0dXJuIGUudG9GaXhlZCgxKTtyZXR1cm4gZS50b0ZpeGVkKDIpfTt0LnBhcnNlWEZBUGF0aD1mdW5jdGlvbiBwYXJzZVhGQVBhdGgoZSl7Y29uc3QgdD0vKC4rKVxbKFxkKylcXSQvO3JldHVybiBlLnNwbGl0KCIuIikubWFwKChlPT57Y29uc3QgYT1lLm1hdGNoKHQpO3JldHVybiBhP3tuYW1lOmFbMV0scG9zOnBhcnNlSW50KGFbMl0sMTApfTp7bmFtZTplLHBvczowfX0pKX07dC5yZWFkSW50OD1mdW5jdGlvbiByZWFkSW50OChlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9O3QucmVhZFVpbnQxNj1mdW5jdGlvbiByZWFkVWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfTt0LnJlYWRVaW50MzI9ZnVuY3Rpb24gcmVhZFVpbnQzMihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH07dC5yZWNvdmVySnNVUkw9ZnVuY3Rpb24gcmVjb3ZlckpzVVJMKGUpe2NvbnN0IHQ9bmV3IFJlZ0V4cCgiXlxccyooIitbImFwcC5sYXVuY2hVUkwiLCJ3aW5kb3cub3BlbiIsInhmYS5ob3N0LmdvdG9VUkwiXS5qb2luKCJ8IikucmVwbGFjZUFsbCgiLiIsIlxcLiIpKyIpXFwoKD86J3xcIikoW14nXCJdKikoPzonfFwiKSg/OixcXHMqKFxcdyspXFwpfFxcKSkiLCJpIikuZXhlYyhlKTtpZih0Py5bMl0pe2NvbnN0IGU9dFsyXTtsZXQgYT0hMTsidHJ1ZSI9PT10WzNdJiYiYXBwLmxhdW5jaFVSTCI9PT10WzFdJiYoYT0hMCk7cmV0dXJue3VybDplLG5ld1dpbmRvdzphfX1yZXR1cm4gbnVsbH07dC5zdHJpbmdUb1VURjE2SGV4U3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZIZXhTdHJpbmcoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpO3QucHVzaCgocj4+OCYyNTUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIiksKDI1NSZyKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKX1yZXR1cm4gdC5qb2luKCIiKX07dC5zdHJpbmdUb1VURjE2U3RyaW5nPWZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZTdHJpbmcoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBhPVtdO3QmJmEucHVzaCgiw77DvyIpO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1lLmNoYXJDb2RlQXQodCk7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocj4+OCYyNTUpLFN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JnIpKX1yZXR1cm4gYS5qb2luKCIiKX07dC50b1JvbWFuTnVtZXJhbHM9ZnVuY3Rpb24gdG9Sb21hbk51bWVyYWxzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07KDAsci5hc3NlcnQpKE51bWJlci5pc0ludGVnZXIoZSkmJmU+MCwiVGhlIG51bWJlciBzaG91bGQgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIpO2NvbnN0IGE9W107bGV0IG47Zm9yKDtlPj0xZTM7KXtlLT0xZTM7YS5wdXNoKCJNIil9bj1lLzEwMHwwO2UlPTEwMDthLnB1c2goc1tuXSk7bj1lLzEwfDA7ZSU9MTA7YS5wdXNoKHNbMTArbl0pO2EucHVzaChzWzIwK2VdKTtjb25zdCBpPWEuam9pbigiIik7cmV0dXJuIHQ/aS50b0xvd2VyQ2FzZSgpOml9O3QudmFsaWRhdGVDU1NGb250PWZ1bmN0aW9uIHZhbGlkYXRlQ1NTRm9udChlKXtjb25zdCB0PW5ldyBTZXQoWyIxMDAiLCIyMDAiLCIzMDAiLCI0MDAiLCI1MDAiLCI2MDAiLCI3MDAiLCI4MDAiLCI5MDAiLCIxMDAwIiwibm9ybWFsIiwiYm9sZCIsImJvbGRlciIsImxpZ2h0ZXIiXSkse2ZvbnRGYW1pbHk6YSxmb250V2VpZ2h0OnIsaXRhbGljQW5nbGU6bn09ZTtpZighdmFsaWRhdGVGb250TmFtZShhLCEwKSlyZXR1cm4hMTtjb25zdCBpPXI/ci50b1N0cmluZygpOiIiO2UuZm9udFdlaWdodD10LmhhcyhpKT9pOiI0MDAiO2NvbnN0IHM9cGFyc2VGbG9hdChuKTtlLml0YWxpY0FuZ2xlPWlzTmFOKHMpfHxzPC05MHx8cz45MD8iMTQiOm4udG9TdHJpbmcoKTtyZXR1cm4hMH07dC52YWxpZGF0ZUZvbnROYW1lPXZhbGlkYXRlRm9udE5hbWU7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO2EoMTQwKTthKDExNik7YSgxMjcpO2EoMTI5KTthKDEzMik7YSgxMzQpO2EoMTM2KTthKDEzOCk7YSgyKTt2YXIgcj1hKDE0NSksbj1hKDE1MSksaT1hKDE1Mik7dC5QREZfVkVSU0lPTl9SRUdFWFA9L15bMS05XVwuXGQkLztjbGFzcyBNaXNzaW5nRGF0YUV4Y2VwdGlvbiBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGBNaXNzaW5nIGRhdGEgWyR7ZX0sICR7dH0pYCwiTWlzc2luZ0RhdGFFeGNlcHRpb24iKTt0aGlzLmJlZ2luPWU7dGhpcy5lbmQ9dH19dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj1NaXNzaW5nRGF0YUV4Y2VwdGlvbjtjbGFzcyBQYXJzZXJFT0ZFeGNlcHRpb24gZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiUGFyc2VyRU9GRXhjZXB0aW9uIil9fXQuUGFyc2VyRU9GRXhjZXB0aW9uPVBhcnNlckVPRkV4Y2VwdGlvbjtjbGFzcyBYUmVmRW50cnlFeGNlcHRpb24gZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiWFJlZkVudHJ5RXhjZXB0aW9uIil9fXQuWFJlZkVudHJ5RXhjZXB0aW9uPVhSZWZFbnRyeUV4Y2VwdGlvbjtjbGFzcyBYUmVmUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiWFJlZlBhcnNlRXhjZXB0aW9uIil9fXQuWFJlZlBhcnNlRXhjZXB0aW9uPVhSZWZQYXJzZUV4Y2VwdGlvbjtmdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KGUpe2xldCB0LHtkaWN0OmEsa2V5OnIsZ2V0QXJyYXk6aT0hMSxzdG9wV2hlbkZvdW5kOnM9ITB9PWU7Y29uc3Qgbz1uZXcgbi5SZWZTZXQ7Zm9yKDthIGluc3RhbmNlb2Ygbi5EaWN0JiYoIWEub2JqSWR8fCFvLmhhcyhhLm9iaklkKSk7KXthLm9iaklkJiZvLnB1dChhLm9iaklkKTtjb25zdCBlPWk/YS5nZXRBcnJheShyKTphLmdldChyKTtpZih2b2lkIDAhPT1lKXtpZihzKXJldHVybiBlOyh0fHw9W10pLnB1c2goZSl9YT1hLmdldCgiUGFyZW50Iil9cmV0dXJuIHR9Y29uc3Qgcz1bIiIsIkMiLCJDQyIsIkNDQyIsIkNEIiwiRCIsIkRDIiwiRENDIiwiRENDQyIsIkNNIiwiIiwiWCIsIlhYIiwiWFhYIiwiWEwiLCJMIiwiTFgiLCJMWFgiLCJMWFhYIiwiWEMiLCIiLCJJIiwiSUkiLCJJSUkiLCJJViIsIlYiLCJWSSIsIlZJSSIsIlZJSUkiLCJJWCJdO2Z1bmN0aW9uIF9jb2xsZWN0SlMoZSx0LGEscyl7aWYoIWUpcmV0dXJuO2xldCBvPW51bGw7aWYoZSBpbnN0YW5jZW9mIG4uUmVmKXtpZihzLmhhcyhlKSlyZXR1cm47bz1lO3MucHV0KG8pO2U9dC5mZXRjaChlKX1pZihBcnJheS5pc0FycmF5KGUpKWZvcihjb25zdCByIG9mIGUpX2NvbGxlY3RKUyhyLHQsYSxzKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLkRpY3Qpe2lmKCgwLG4uaXNOYW1lKShlLmdldCgiUyIpLCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9ZS5nZXQoIkpTIik7bGV0IG47dCBpbnN0YW5jZW9mIGkuQmFzZVN0cmVhbT9uPXQuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiB0JiYobj10KTtuJiY9KDAsci5zdHJpbmdUb1BERlN0cmluZykobikucmVwbGFjZUFsbCgiXDAiLCIiKTtuJiZhLnB1c2gobil9X2NvbGxlY3RKUyhlLmdldFJhdygiTmV4dCIpLHQsYSxzKX1vJiZzLnJlbW92ZShvKX1jb25zdCBvPXs2MDoiJmx0OyIsNjI6IiZndDsiLDM4OiImYW1wOyIsMzQ6IiZxdW90OyIsMzk6IiZhcG9zOyJ9O2Z1bmN0aW9uIHZhbGlkYXRlRm9udE5hbWUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBhPS9eKCJ8JykuKigifCcpJC8uZXhlYyhlKTtpZihhJiZhWzFdPT09YVsyXSl7aWYobmV3IFJlZ0V4cChgW15cXFxcXSR7YVsxXX1gKS50ZXN0KGUuc2xpY2UoMSwtMSkpKXt0JiYoMCxyLndhcm4pKGBGb250RmFtaWx5IGNvbnRhaW5zIHVuZXNjYXBlZCAke2FbMV19OiAke2V9LmApO3JldHVybiExfX1lbHNlIGZvcihjb25zdCBhIG9mIGUuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3QoYSl8fCEvXltcdy1cXF0rJC8udGVzdChhKSl7dCYmKDAsci53YXJuKShgRm9udEZhbWlseSBjb250YWlucyBpbnZhbGlkIDxjdXN0b20taWRlbnQ+OiAke2V9LmApO3JldHVybiExfXJldHVybiEwfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwO3QuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24gY2xlYXJQcmltaXRpdmVDYWNoZXMoKXtzPU9iamVjdC5jcmVhdGUobnVsbCk7bz1PYmplY3QuY3JlYXRlKG51bGwpO2M9T2JqZWN0LmNyZWF0ZShudWxsKX07dC5pc0NtZD1mdW5jdGlvbiBpc0NtZChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgQ21kJiYodm9pZCAwPT09dHx8ZS5jbWQ9PT10KX07dC5pc0RpY3Q9ZnVuY3Rpb24gaXNEaWN0KGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBEaWN0JiYodm9pZCAwPT09dHx8aXNOYW1lKGUuZ2V0KCJUeXBlIiksdCkpfTt0LmlzTmFtZT1pc05hbWU7dC5pc1JlZnNFcXVhbD1mdW5jdGlvbiBpc1JlZnNFcXVhbChlLHQpe3JldHVybiBlLm51bT09PXQubnVtJiZlLmdlbj09PXQuZ2VufTthKDE0MCk7YSgxMTYpO2EoMTI3KTthKDEyOSk7YSgxMzIpO2EoMTM0KTthKDEzNik7YSgxMzgpO3ZhciByPWEoMTQ1KTtjb25zdCBuPVN5bWJvbCgiQ0lSQ1VMQVJfUkVGIik7dC5DSVJDVUxBUl9SRUY9bjtjb25zdCBpPVN5bWJvbCgiRU9GIik7dC5FT0Y9aTtsZXQgcz1PYmplY3QuY3JlYXRlKG51bGwpLG89T2JqZWN0LmNyZWF0ZShudWxsKSxjPU9iamVjdC5jcmVhdGUobnVsbCk7Y2xhc3MgTmFtZXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZX1zdGF0aWMgZ2V0KGUpe3JldHVybiBvW2VdfHw9bmV3IE5hbWUoZSl9fXQuTmFtZT1OYW1lO2NsYXNzIENtZHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNtZD1lfXN0YXRpYyBnZXQoZSl7cmV0dXJuIHNbZV18fD1uZXcgQ21kKGUpfX10LkNtZD1DbWQ7Y29uc3QgbD1mdW5jdGlvbiBub25TZXJpYWxpemFibGVDbG9zdXJlKCl7cmV0dXJuIGx9O2NsYXNzIERpY3R7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9tYXA9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLnhyZWY9ZTt0aGlzLm9iaklkPW51bGw7dGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITE7dGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPWx9YXNzaWduWHJlZihlKXt0aGlzLnhyZWY9ZX1nZXQgc2l6ZSgpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aH1nZXQoZSx0LGEpe2xldCByPXRoaXMuX21hcFtlXTtpZih2b2lkIDA9PT1yJiZ2b2lkIDAhPT10KXtyPXRoaXMuX21hcFt0XTt2b2lkIDA9PT1yJiZ2b2lkIDAhPT1hJiYocj10aGlzLl9tYXBbYV0pfXJldHVybiByIGluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoKHIsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pOnJ9YXN5bmMgZ2V0QXN5bmMoZSx0LGEpe2xldCByPXRoaXMuX21hcFtlXTtpZih2b2lkIDA9PT1yJiZ2b2lkIDAhPT10KXtyPXRoaXMuX21hcFt0XTt2b2lkIDA9PT1yJiZ2b2lkIDAhPT1hJiYocj10aGlzLl9tYXBbYV0pfXJldHVybiByIGluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoQXN5bmMocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6cn1nZXRBcnJheShlLHQsYSl7bGV0IHI9dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PXImJnZvaWQgMCE9PXQpe3I9dGhpcy5fbWFwW3RdO3ZvaWQgMD09PXImJnZvaWQgMCE9PWEmJihyPXRoaXMuX21hcFthXSl9ciBpbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmJiYocj10aGlzLnhyZWYuZmV0Y2gocix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpO2lmKEFycmF5LmlzQXJyYXkocikpe3I9ci5zbGljZSgpO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrKylyW2VdaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZiYmKHJbZV09dGhpcy54cmVmLmZldGNoKHJbZV0sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKX1yZXR1cm4gcn1nZXRSYXcoZSl7cmV0dXJuIHRoaXMuX21hcFtlXX1nZXRLZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCl9Z2V0UmF3VmFsdWVzKCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fbWFwKX1zZXQoZSx0KXt0aGlzLl9tYXBbZV09dH1oYXMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1mb3JFYWNoKGUpe2Zvcihjb25zdCB0IGluIHRoaXMuX21hcCllKHQsdGhpcy5nZXQodCkpfXN0YXRpYyBnZXQgZW1wdHkoKXtjb25zdCBlPW5ldyBEaWN0KG51bGwpO2Uuc2V0PShlLHQpPT57KDAsci51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBgc2V0YCBvbiB0aGUgZW1wdHkgZGljdGlvbmFyeS4iKX07cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImVtcHR5IixlKX1zdGF0aWMgbWVyZ2UoZSl7bGV0e3hyZWY6dCxkaWN0QXJyYXk6YSxtZXJnZVN1YkRpY3RzOnI9ITF9PWU7Y29uc3Qgbj1uZXcgRGljdCh0KSxpPW5ldyBNYXA7Zm9yKGNvbnN0IGUgb2YgYSlpZihlIGluc3RhbmNlb2YgRGljdClmb3IoY29uc3RbdCxhXW9mIE9iamVjdC5lbnRyaWVzKGUuX21hcCkpe2xldCBlPWkuZ2V0KHQpO2lmKHZvaWQgMD09PWUpe2U9W107aS5zZXQodCxlKX1lbHNlIGlmKCEociYmYSBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2UucHVzaChhKX1mb3IoY29uc3RbZSxhXW9mIGkpe2lmKDE9PT1hLmxlbmd0aHx8IShhWzBdaW5zdGFuY2VvZiBEaWN0KSl7bi5fbWFwW2VdPWFbMF07Y29udGludWV9Y29uc3Qgcj1uZXcgRGljdCh0KTtmb3IoY29uc3QgZSBvZiBhKWZvcihjb25zdFt0LGFdb2YgT2JqZWN0LmVudHJpZXMoZS5fbWFwKSl2b2lkIDA9PT1yLl9tYXBbdF0mJihyLl9tYXBbdF09YSk7ci5zaXplPjAmJihuLl9tYXBbZV09cil9aS5jbGVhcigpO3JldHVybiBuLnNpemU+MD9uOkRpY3QuZW1wdHl9Y2xvbmUoKXtjb25zdCBlPW5ldyBEaWN0KHRoaXMueHJlZik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5nZXRLZXlzKCkpZS5zZXQodCx0aGlzLmdldFJhdyh0KSk7cmV0dXJuIGV9fXQuRGljdD1EaWN0O2NsYXNzIFJlZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMubnVtPWU7dGhpcy5nZW49dH10b1N0cmluZygpe3JldHVybiAwPT09dGhpcy5nZW4/YCR7dGhpcy5udW19UmA6YCR7dGhpcy5udW19UiR7dGhpcy5nZW59YH1zdGF0aWMgZnJvbVN0cmluZyhlKXtjb25zdCB0PWNbZV07aWYodClyZXR1cm4gdDtjb25zdCBhPS9eKFxkKylSKFxkKikkLy5leGVjKGUpO3JldHVybiBhJiYiMCIhPT1hWzFdP2NbZV09bmV3IFJlZihwYXJzZUludChhWzFdKSxhWzJdP3BhcnNlSW50KGFbMl0pOjApOm51bGx9c3RhdGljIGdldChlLHQpe2NvbnN0IGE9MD09PXQ/YCR7ZX1SYDpgJHtlfVIke3R9YDtyZXR1cm4gY1thXXx8PW5ldyBSZWYoZSx0KX19dC5SZWY9UmVmO2NsYXNzIFJlZlNldHtjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3RoaXMuX3NldD1uZXcgU2V0KGU/Ll9zZXQpfWhhcyhlKXtyZXR1cm4gdGhpcy5fc2V0LmhhcyhlLnRvU3RyaW5nKCkpfXB1dChlKXt0aGlzLl9zZXQuYWRkKGUudG9TdHJpbmcoKSl9cmVtb3ZlKGUpe3RoaXMuX3NldC5kZWxldGUoZS50b1N0cmluZygpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9zZXQudmFsdWVzKCl9Y2xlYXIoKXt0aGlzLl9zZXQuY2xlYXIoKX19dC5SZWZTZXQ9UmVmU2V0O2NsYXNzIFJlZlNldENhY2hle2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9Z2V0KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUudG9TdHJpbmcoKSl9aGFzKGUpe3JldHVybiB0aGlzLl9tYXAuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdCl9cHV0QWxpYXMoZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0aGlzLmdldCh0KSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fXQuUmVmU2V0Q2FjaGU9UmVmU2V0Q2FjaGU7ZnVuY3Rpb24gaXNOYW1lKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBOYW1lJiYodm9pZCAwPT09dHx8ZS5uYW1lPT09dCl9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQmFzZVN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNDUpO2NsYXNzIEJhc2VTdHJlYW17Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09QmFzZVN0cmVhbSYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTdHJlYW0uIil9Z2V0IGxlbmd0aCgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBnZXR0ZXIgYGxlbmd0aGAgYWNjZXNzZWQiKX1nZXQgaXNFbXB0eSgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBnZXR0ZXIgYGlzRW1wdHlgIGFjY2Vzc2VkIil9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJpc0RhdGFMb2FkZWQiLCEwKX1nZXRCeXRlKCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZWAgY2FsbGVkIil9Z2V0Qnl0ZXMoZSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZXNgIGNhbGxlZCIpfXBlZWtCeXRlKCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKTstMSE9PWUmJnRoaXMucG9zLS07cmV0dXJuIGV9cGVla0J5dGVzKGUpe2NvbnN0IHQ9dGhpcy5nZXRCeXRlcyhlKTt0aGlzLnBvcy09dC5sZW5ndGg7cmV0dXJuIHR9Z2V0VWludDE2KCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fWdldEludDMyKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX1nZXRCeXRlUmFuZ2UoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfWdldFN0cmluZyhlKXtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfXNraXAoZSl7dGhpcy5wb3MrPWV8fDF9cmVzZXQoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9bW92ZVN0YXJ0KCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX1tYWtlU3ViU3RyZWFtKGUsdCl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm4gbnVsbH19dC5CYXNlU3RyZWFtPUJhc2VTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OZXR3b3JrUGRmTWFuYWdlcj10LkxvY2FsUGRmTWFuYWdlcj12b2lkIDA7dmFyIHI9YSgxNDUpLG49YSgxNTQpLGk9YSgxNTApLHM9YSgxNTYpLG89YSgxNTUpO2NsYXNzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uc3RydWN0b3I9PT1CYXNlUGRmTWFuYWdlciYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEJhc2VQZGZNYW5hZ2VyLiIpO3RoaXMuX2RvY0Jhc2VVcmw9ZnVuY3Rpb24gcGFyc2VEb2NCYXNlVXJsKGUpe2lmKGUpe2NvbnN0IHQ9KDAsci5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShlKTtpZih0KXJldHVybiB0LmhyZWY7KDAsci53YXJuKShgSW52YWxpZCBhYnNvbHV0ZSBkb2NCYXNlVXJsOiAiJHtlfSIuYCl9cmV0dXJuIG51bGx9KGUuZG9jQmFzZVVybCk7dGhpcy5fZG9jSWQ9ZS5kb2NJZDt0aGlzLl9wYXNzd29yZD1lLnBhc3N3b3JkO3RoaXMuZW5hYmxlWGZhPWUuZW5hYmxlWGZhO2UuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCYmPXIuRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7dGhpcy5ldmFsdWF0b3JPcHRpb25zPWUuZXZhbHVhdG9yT3B0aW9uc31nZXQgZG9jSWQoKXtyZXR1cm4gdGhpcy5fZG9jSWR9Z2V0IHBhc3N3b3JkKCl7cmV0dXJuIHRoaXMuX3Bhc3N3b3JkfWdldCBkb2NCYXNlVXJsKCl7cmV0dXJuIHRoaXMuX2RvY0Jhc2VVcmx9Z2V0IGNhdGFsb2coKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nfWVuc3VyZURvYyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LGUsdCl9ZW5zdXJlWFJlZihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsZSx0KX1lbnN1cmVDYXRhbG9nKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZyxlLHQpfWdldFBhZ2UoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShlKX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soZSx0KX1sb2FkWGZhRm9udHMoZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhRm9udHMoZSx0KX1sb2FkWGZhSW1hZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpfXNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuc2VyaWFsaXplWGZhRGF0YShlKX1jbGVhbnVwKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jbGVhbnVwKGUpfWFzeW5jIGVuc3VyZShlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWQiKX1yZXF1ZXN0UmFuZ2UoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfXJlcXVlc3RMb2FkZWRTdHJlYW0oKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfXVwZGF0ZVBhc3N3b3JkKGUpe3RoaXMuX3Bhc3N3b3JkPWV9dGVybWluYXRlKGUpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fXQuTG9jYWxQZGZNYW5hZ2VyPWNsYXNzIExvY2FsUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9bmV3IG8uU3RyZWFtKGUuc291cmNlKTt0aGlzLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHRoaXMsdCk7dGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUodCl9YXN5bmMgZW5zdXJlKGUsdCxhKXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9cmVxdWVzdFJhbmdlKGUsdCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpfXJlcXVlc3RMb2FkZWRTdHJlYW0oKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX10ZXJtaW5hdGUoZSl7fX07dC5OZXR3b3JrUGRmTWFuYWdlcj1jbGFzcyBOZXR3b3JrUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuc3RyZWFtTWFuYWdlcj1uZXcgbi5DaHVua2VkU3RyZWFtTWFuYWdlcihlLnNvdXJjZSx7bXNnSGFuZGxlcjplLmhhbmRsZXIsbGVuZ3RoOmUubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6ZS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmUucmFuZ2VDaHVua1NpemV9KTt0aGlzLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHRoaXMsdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKX1hc3luYyBlbnN1cmUoZSx0LGEpe3RyeXtjb25zdCByPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseShlLGEpOnJ9Y2F0Y2gocil7aWYoIShyIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgcjthd2FpdCB0aGlzLnJlcXVlc3RSYW5nZShyLmJlZ2luLHIuZW5kKTtyZXR1cm4gdGhpcy5lbnN1cmUoZSx0LGEpfX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfXJlcXVlc3RMb2FkZWRTdHJlYW0oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9dGVybWluYXRlKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2h1bmtlZFN0cmVhbU1hbmFnZXI9dC5DaHVua2VkU3RyZWFtPXZvaWQgMDthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxMTYpO2EoMTI3KTthKDEyOSk7YSgxMzIpO2EoMTM0KTthKDEzNik7YSgxMzgpO2EoMTQwKTthKDIpO3ZhciByPWEoMTUwKSxuPWEoMTQ1KSxpPWEoMTU1KTtjbGFzcyBDaHVua2VkU3RyZWFtIGV4dGVuZHMgaS5TdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKG5ldyBVaW50OEFycmF5KGUpLDAsZSxudWxsKTt0aGlzLmNodW5rU2l6ZT10O3RoaXMuX2xvYWRlZENodW5rcz1uZXcgU2V0O3RoaXMubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpO3RoaXMubWFuYWdlcj1hO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTA7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMX1nZXRNaXNzaW5nQ2h1bmtzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxhPXRoaXMubnVtQ2h1bmtzO3Q8YTsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfWdldCBudW1DaHVua3NMb2FkZWQoKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfW9uUmVjZWl2ZURhdGEoZSx0KXtjb25zdCBhPXRoaXMuY2h1bmtTaXplO2lmKGUlYSE9MCl0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7ZX1gKTtjb25zdCByPWUrdC5ieXRlTGVuZ3RoO2lmKHIlYSE9MCYmciE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgQmFkIGVuZCBvZmZzZXQ6ICR7cn1gKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtjb25zdCBuPU1hdGguZmxvb3IoZS9hKSxpPU1hdGguZmxvb3IoKHItMSkvYSkrMTtmb3IobGV0IGU9bjtlPGk7KytlKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoZSl9b25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGUpe2xldCB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO2NvbnN0IGE9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KTt0Kz1lLmJ5dGVMZW5ndGg7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtjb25zdCByPXQ+PXRoaXMuZW5kP3RoaXMubnVtQ2h1bmtzOk1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7Zm9yKGxldCBlPWE7ZTxyOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfWVuc3VyZUJ5dGUoZSl7aWYoZTx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgci5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX1lbnN1cmVSYW5nZShlLHQpe2lmKGU+PXQpcmV0dXJuO2lmKHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybjtjb25zdCBhPU1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSk7aWYoYT50aGlzLm51bUNodW5rcylyZXR1cm47Y29uc3Qgbj1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKTtmb3IobGV0IGk9YTtpPG47KytpKWlmKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGkpKXRocm93IG5ldyByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsdCl9bmV4dEVtcHR5Q2h1bmsoZSl7Y29uc3QgdD10aGlzLm51bUNodW5rcztmb3IobGV0IGE9MDthPHQ7KythKXtjb25zdCByPShlK2EpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMocikpcmV0dXJuIHJ9cmV0dXJuIG51bGx9aGFzQ2h1bmsoZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7aWYoZT49dGhpcy5lbmQpcmV0dXJuLTE7ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtyZXR1cm4gdGhpcy5ieXRlc1t0aGlzLnBvcysrXX1nZXRCeXRlcyhlKXtjb25zdCB0PXRoaXMuYnl0ZXMsYT10aGlzLnBvcyxyPXRoaXMuZW5kO2lmKCFlKXtyPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEscik7cmV0dXJuIHQuc3ViYXJyYXkoYSxyKX1sZXQgbj1hK2U7bj5yJiYobj1yKTtuPnRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoJiZ0aGlzLmVuc3VyZVJhbmdlKGEsbik7dGhpcy5wb3M9bjtyZXR1cm4gdC5zdWJhcnJheShhLG4pfWdldEJ5dGVSYW5nZShlLHQpe2U8MCYmKGU9MCk7dD50aGlzLmVuZCYmKHQ9dGhpcy5lbmQpO3Q+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoZSx0KTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfW1ha2VTdWJTdHJlYW0oZSx0KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDt0P2UrdD50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShlLGUrdCk6ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtmdW5jdGlvbiBDaHVua2VkU3RyZWFtU3Vic3RyZWFtKCl7fUNodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyk7Q2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5jaHVua1NpemUsdD1NYXRoLmZsb29yKHRoaXMuc3RhcnQvZSksYT1NYXRoLmZsb29yKCh0aGlzLmVuZC0xKS9lKSsxLHI9W107Zm9yKGxldCBlPXQ7ZTxhOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGUpfHxyLnB1c2goZSk7cmV0dXJuIHJ9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0KCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IHI9bmV3IENodW5rZWRTdHJlYW1TdWJzdHJlYW07ci5wb3M9ci5zdGFydD1lO3IuZW5kPWUrdHx8dGhpcy5lbmQ7ci5kaWN0PWE7cmV0dXJuIHJ9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm5bdGhpc119fXQuQ2h1bmtlZFN0cmVhbT1DaHVua2VkU3RyZWFtO3QuQ2h1bmtlZFN0cmVhbU1hbmFnZXI9Y2xhc3MgQ2h1bmtlZFN0cmVhbU1hbmFnZXJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmxlbmd0aD10Lmxlbmd0aDt0aGlzLmNodW5rU2l6ZT10LnJhbmdlQ2h1bmtTaXplO3RoaXMuc3RyZWFtPW5ldyBDaHVua2VkU3RyZWFtKHRoaXMubGVuZ3RoLHRoaXMuY2h1bmtTaXplLHRoaXMpO3RoaXMucGRmTmV0d29ya1N0cmVhbT1lO3RoaXMuZGlzYWJsZUF1dG9GZXRjaD10LmRpc2FibGVBdXRvRmV0Y2g7dGhpcy5tc2dIYW5kbGVyPXQubXNnSGFuZGxlcjt0aGlzLmN1cnJSZXF1ZXN0SWQ9MDt0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3Q9bmV3IE1hcDt0aGlzLl9yZXF1ZXN0c0J5Q2h1bms9bmV3IE1hcDt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdD1uZXcgTWFwO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTA7dGhpcy5hYm9ydGVkPSExO3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHk9bmV3IG4uUHJvbWlzZUNhcGFiaWxpdHl9c2VuZFJlcXVlc3QoZSx0KXtjb25zdCBhPXRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihlLHQpO2EuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fChhLm9uUHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcykpO2xldCBuPVtdLGk9MDtyZXR1cm4gbmV3IFByb21pc2UoKChlLHQpPT57Y29uc3QgcmVhZENodW5rPXM9PntsZXR7dmFsdWU6byxkb25lOmN9PXM7dHJ5e2lmKGMpe2NvbnN0IHQ9KDAsci5hcnJheUJ1ZmZlcnNUb0J5dGVzKShuKTtuPW51bGw7ZSh0KTtyZXR1cm59aSs9by5ieXRlTGVuZ3RoO2EuaXNTdHJlYW1pbmdTdXBwb3J0ZWQmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOml9KTtuLnB1c2gobyk7YS5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9Y2F0Y2goZSl7dChlKX19O2EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfSkpLnRoZW4oKHQ9Pnt0aGlzLmFib3J0ZWR8fHRoaXMub25SZWNlaXZlRGF0YSh7Y2h1bms6dCxiZWdpbjplfSl9KSl9cmVxdWVzdEFsbENodW5rcygpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSkpe2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX1fcmVxdWVzdENodW5rcyhlKXtjb25zdCB0PXRoaXMuY3VyclJlcXVlc3RJZCsrLGE9bmV3IFNldDt0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3Quc2V0KHQsYSk7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLnN0cmVhbS5oYXNDaHVuayh0KXx8YS5hZGQodCk7aWYoMD09PWEuc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgcj1uZXcgbi5Qcm9taXNlQ2FwYWJpbGl0eTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQodCxyKTtjb25zdCBpPVtdO2Zvcihjb25zdCBlIG9mIGEpe2xldCBhPXRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoZSk7aWYoIWEpe2E9W107dGhpcy5fcmVxdWVzdHNCeUNodW5rLnNldChlLGEpO2kucHVzaChlKX1hLnB1c2godCl9aWYoaS5sZW5ndGg+MCl7Y29uc3QgZT10aGlzLmdyb3VwQ2h1bmtzKGkpO2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9dC5iZWdpbkNodW5rKnRoaXMuY2h1bmtTaXplLGE9TWF0aC5taW4odC5lbmRDaHVuayp0aGlzLmNodW5rU2l6ZSx0aGlzLmxlbmd0aCk7dGhpcy5zZW5kUmVxdWVzdChlLGEpLmNhdGNoKHIucmVqZWN0KX19cmV0dXJuIHIucHJvbWlzZS5jYXRjaCgoZT0+e2lmKCF0aGlzLmFib3J0ZWQpdGhyb3cgZX0pKX1nZXRTdHJlYW0oKXtyZXR1cm4gdGhpcy5zdHJlYW19cmVxdWVzdFJhbmdlKGUsdCl7dD1NYXRoLm1pbih0LHRoaXMubGVuZ3RoKTtjb25zdCBhPXRoaXMuZ2V0QmVnaW5DaHVuayhlKSxyPXRoaXMuZ2V0RW5kQ2h1bmsodCksbj1bXTtmb3IobGV0IGU9YTtlPHI7KytlKW4ucHVzaChlKTtyZXR1cm4gdGhpcy5fcmVxdWVzdENodW5rcyhuKX1yZXF1ZXN0UmFuZ2VzKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT10aGlzLmdldEJlZ2luQ2h1bmsoYS5iZWdpbikscj10aGlzLmdldEVuZENodW5rKGEuZW5kKTtmb3IobGV0IGE9ZTthPHI7KythKXQuaW5jbHVkZXMoYSl8fHQucHVzaChhKX10LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUtdH0pKTtyZXR1cm4gdGhpcy5fcmVxdWVzdENodW5rcyh0KX1ncm91cENodW5rcyhlKXtjb25zdCB0PVtdO2xldCBhPS0xLHI9LTE7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7KytuKXtjb25zdCBpPWVbbl07YTwwJiYoYT1pKTtpZihyPj0wJiZyKzEhPT1pKXt0LnB1c2goe2JlZ2luQ2h1bms6YSxlbmRDaHVuazpyKzF9KTthPWl9bisxPT09ZS5sZW5ndGgmJnQucHVzaCh7YmVnaW5DaHVuazphLGVuZENodW5rOmkrMX0pO3I9aX1yZXR1cm4gdH1vblByb2dyZXNzKGUpe3RoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUrZS5sb2FkZWQsdG90YWw6dGhpcy5sZW5ndGh9KX1vblJlY2VpdmVEYXRhKGUpe2NvbnN0IHQ9ZS5jaHVuayxhPXZvaWQgMD09PWUuYmVnaW4scj1hP3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoOmUuYmVnaW4sbj1yK3QuYnl0ZUxlbmd0aCxpPU1hdGguZmxvb3Ioci90aGlzLmNodW5rU2l6ZSkscz1uPHRoaXMubGVuZ3RoP01hdGguZmxvb3Iobi90aGlzLmNodW5rU2l6ZSk6TWF0aC5jZWlsKG4vdGhpcy5jaHVua1NpemUpO2lmKGEpe3RoaXMuc3RyZWFtLm9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YSh0KTt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD1ufWVsc2UgdGhpcy5zdHJlYW0ub25SZWNlaXZlRGF0YShyLHQpO3RoaXMuc3RyZWFtLmlzRGF0YUxvYWRlZCYmdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5yZXNvbHZlKHRoaXMuc3RyZWFtKTtjb25zdCBvPVtdO2ZvcihsZXQgZT1pO2U8czsrK2Upe2NvbnN0IHQ9dGhpcy5fcmVxdWVzdHNCeUNodW5rLmdldChlKTtpZih0KXt0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZGVsZXRlKGUpO2Zvcihjb25zdCBhIG9mIHQpe2NvbnN0IHQ9dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0LmdldChhKTt0LmhhcyhlKSYmdC5kZWxldGUoZSk7dC5zaXplPjB8fG8ucHVzaChhKX19fWlmKCF0aGlzLmRpc2FibGVBdXRvRmV0Y2gmJjA9PT10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuc2l6ZSl7bGV0IGU7aWYoMT09PXRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCl7Y29uc3QgdD10aGlzLnN0cmVhbS5udW1DaHVua3MtMTt0aGlzLnN0cmVhbS5oYXNDaHVuayh0KXx8KGU9dCl9ZWxzZSBlPXRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKHMpO051bWJlci5pc0ludGVnZXIoZSkmJnRoaXMuX3JlcXVlc3RDaHVua3MoW2VdKX1mb3IoY29uc3QgZSBvZiBvKXtjb25zdCB0PXRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LmdldChlKTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5kZWxldGUoZSk7dC5yZXNvbHZlKCl9dGhpcy5tc2dIYW5kbGVyLnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOnRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCp0aGlzLmNodW5rU2l6ZSx0b3RhbDp0aGlzLmxlbmd0aH0pfW9uRXJyb3IoZSl7dGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5yZWplY3QoZSl9Z2V0QmVnaW5DaHVuayhlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKX1nZXRFbmRDaHVuayhlKXtyZXR1cm4gTWF0aC5mbG9vcigoZS0xKS90aGlzLmNodW5rU2l6ZSkrMX1hYm9ydChlKXt0aGlzLmFib3J0ZWQ9ITA7dGhpcy5wZGZOZXR3b3JrU3RyZWFtPy5jYW5jZWxBbGxSZXF1ZXN0cyhlKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSl0LnJlamVjdChlKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RyaW5nU3RyZWFtPXQuU3RyZWFtPXQuTnVsbFN0cmVhbT12b2lkIDA7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO3ZhciByPWEoMTUyKSxuPWEoMTQ1KTtjbGFzcyBTdHJlYW0gZXh0ZW5kcyByLkJhc2VTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEscil7c3VwZXIoKTt0aGlzLmJ5dGVzPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6bmV3IFVpbnQ4QXJyYXkoZSk7dGhpcy5zdGFydD10fHwwO3RoaXMucG9zPXRoaXMuc3RhcnQ7dGhpcy5lbmQ9dCthfHx0aGlzLmJ5dGVzLmxlbmd0aDt0aGlzLmRpY3Q9cn1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhcnR9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubGVuZ3RofWdldEJ5dGUoKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnl0ZXNbdGhpcy5wb3MrK119Z2V0Qnl0ZXMoZSl7Y29uc3QgdD10aGlzLmJ5dGVzLGE9dGhpcy5wb3Mscj10aGlzLmVuZDtpZighZSlyZXR1cm4gdC5zdWJhcnJheShhLHIpO2xldCBuPWErZTtuPnImJihuPXIpO3RoaXMucG9zPW47cmV0dXJuIHQuc3ViYXJyYXkoYSxuKX1nZXRCeXRlUmFuZ2UoZSx0KXtlPDAmJihlPTApO3Q+dGhpcy5lbmQmJih0PXRoaXMuZW5kKTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfXJlc2V0KCl7dGhpcy5wb3M9dGhpcy5zdGFydH1tb3ZlU3RhcnQoKXt0aGlzLnN0YXJ0PXRoaXMucG9zfW1ha2VTdWJTdHJlYW0oZSx0KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtyZXR1cm4gbmV3IFN0cmVhbSh0aGlzLmJ5dGVzLmJ1ZmZlcixlLHQsYSl9fXQuU3RyZWFtPVN0cmVhbTt0LlN0cmluZ1N0cmVhbT1jbGFzcyBTdHJpbmdTdHJlYW0gZXh0ZW5kcyBTdHJlYW17Y29uc3RydWN0b3IoZSl7c3VwZXIoKDAsbi5zdHJpbmdUb0J5dGVzKShlKSl9fTt0Lk51bGxTdHJlYW09Y2xhc3MgTnVsbFN0cmVhbSBleHRlbmRzIFN0cmVhbXtjb25zdHJ1Y3Rvcigpe3N1cGVyKG5ldyBVaW50OEFycmF5KDApKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUGFnZT10LlBERkRvY3VtZW50PXZvaWQgMDthKDIpO2EoMTQwKTthKDExNik7YSgxMjcpO2EoMTI5KTthKDEzMik7YSgxMzQpO2EoMTM2KTthKDEzOCk7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO3ZhciByPWEoMTQ1KSxuPWEoMTU3KSxpPWEoMTUwKSxzPWEoMTUxKSxvPWEoMjAyKSxjPWEoMTUyKSxsPWEoMjI1KSxoPWEoMjE3KSx1PWEoMjE5KSxkPWEoMjU2KSxmPWEoMTY3KSxnPWEoMTU1KSxwPWEoMjI3KSxtPWEoMjE1KSxiPWEoMTY0KSx5PWEoMTY5KSx3PWEoMjIzKSxTPWEoMjI0KSx4PWEoMjI4KSxDPWEoMjU3KTtjb25zdCB2PVswLDAsNjEyLDc5Ml07Y2xhc3MgUGFnZXtjb25zdHJ1Y3RvcihlKXtsZXR7cGRmTWFuYWdlcjp0LHhyZWY6YSxwYWdlSW5kZXg6cixwYWdlRGljdDpuLHJlZjppLGdsb2JhbElkRmFjdG9yeTpzLGZvbnRDYWNoZTpvLGJ1aWx0SW5DTWFwQ2FjaGU6YyxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6bCxnbG9iYWxJbWFnZUNhY2hlOmgsc3lzdGVtRm9udENhY2hlOnUsbm9uQmxlbmRNb2Rlc1NldDpkLHhmYUZhY3Rvcnk6Zn09ZTt0aGlzLnBkZk1hbmFnZXI9dDt0aGlzLnBhZ2VJbmRleD1yO3RoaXMucGFnZURpY3Q9bjt0aGlzLnhyZWY9YTt0aGlzLnJlZj1pO3RoaXMuZm9udENhY2hlPW87dGhpcy5idWlsdEluQ01hcENhY2hlPWM7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9bDt0aGlzLmdsb2JhbEltYWdlQ2FjaGU9aDt0aGlzLnN5c3RlbUZvbnRDYWNoZT11O3RoaXMubm9uQmxlbmRNb2Rlc1NldD1kO3RoaXMuZXZhbHVhdG9yT3B0aW9ucz10LmV2YWx1YXRvck9wdGlvbnM7dGhpcy5yZXNvdXJjZXNQcm9taXNlPW51bGw7dGhpcy54ZmFGYWN0b3J5PWY7Y29uc3QgZz17b2JqOjB9O3RoaXMuX2xvY2FsSWRGYWN0b3J5PWNsYXNzIGV4dGVuZHMgc3tzdGF0aWMgY3JlYXRlT2JqSWQoKXtyZXR1cm5gcCR7cn1fJHsrK2cub2JqfWB9c3RhdGljIGdldFBhZ2VPYmpJZCgpe3JldHVybmBwJHtpLnRvU3RyaW5nKCl9YH19fV9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgYT0oMCxpLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnRoaXMucGFnZURpY3Qsa2V5OmUsZ2V0QXJyYXk6dCxzdG9wV2hlbkZvdW5kOiExfSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/MSE9PWEubGVuZ3RoJiZhWzBdaW5zdGFuY2VvZiBzLkRpY3Q/cy5EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6YX0pOmFbMF06YX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLnBhZ2VEaWN0LmdldEFycmF5KCJDb250ZW50cyIpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBzLkRpY3Q/ZTpzLkRpY3QuZW1wdHkpfV9nZXRCb3VuZGluZ0JveChlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O2xldCB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXt0PXIuVXRpbC5ub3JtYWxpemVSZWN0KHQpO2lmKHRbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxyLndhcm4pKGBFbXB0eSwgb3IgaW52YWxpZCwgLyR7ZX0gZW50cnkuYCl9cmV0dXJuIG51bGx9Z2V0IG1lZGlhQm94KCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8dil9Z2V0IGNyb3BCb3goKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9Z2V0IHVzZXJVbml0KCl7bGV0IGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7KCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9Z2V0IHZpZXcoKXtjb25zdHtjcm9wQm94OmUsbWVkaWFCb3g6dH09dGhpcztpZihlIT09dCYmISgwLHIuaXNBcnJheUVxdWFsKShlLHQpKXtjb25zdCBhPXIuVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihhJiZhWzJdLWFbMF0+MCYmYVszXS1hWzFdPjApcmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInZpZXciLGEpOygwLHIud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX1nZXQgcm90YXRlKCl7bGV0IGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7ZSU5MCE9MD9lPTA6ZT49MzYwP2UlPTM2MDplPDAmJihlPShlJTM2MCszNjApJTM2MCk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInJvdGF0ZSIsZSl9X29uU3ViU3RyZWFtRXJyb3IoZSx0KXtpZighdGhpcy5ldmFsdWF0b3JPcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldENvbnRlbnRTdHJlYW0gLSBpZ25vcmluZyBzdWItc3RyZWFtICgke3R9KTogIiR7ZX0iLmApfWdldENvbnRlbnRTdHJlYW0oKXtyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJjb250ZW50IikudGhlbigoZT0+ZSBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbT9lOkFycmF5LmlzQXJyYXkoZSk/bmV3IHkuU3RyZWFtc1NlcXVlbmNlU3RyZWFtKGUsdGhpcy5fb25TdWJTdHJlYW1FcnJvci5iaW5kKHRoaXMpKTpuZXcgZy5OdWxsU3RyZWFtKSl9Z2V0IHhmYURhdGEoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywieGZhRGF0YSIsdGhpcy54ZmFGYWN0b3J5P3tiYm94OnRoaXMueGZhRmFjdG9yeS5nZXRCb3VuZGluZ0JveCh0aGlzLnBhZ2VJbmRleCl9Om51bGwpfSN0KGUsdCxhKXtmb3IoY29uc3QgbiBvZiBlKWlmKG4uaWQpe2NvbnN0IGU9cy5SZWYuZnJvbVN0cmluZyhuLmlkKTtpZighZSl7KDAsci53YXJuKShgQSBub24tbGlua2VkIGFubm90YXRpb24gY2Fubm90IGJlIG1vZGlmaWVkOiAke24uaWR9YCk7Y29udGludWV9aWYobi5kZWxldGVkKXt0LnB1dChlKTtjb250aW51ZX1hPy5wdXQoZSk7bi5yZWY9ZTtkZWxldGUgbi5pZH19YXN5bmMgc2F2ZU5ld0Fubm90YXRpb25zKGUsdCxhLHIpe2lmKHRoaXMueGZhRmFjdG9yeSl0aHJvdyBuZXcgRXJyb3IoIlhGQTogQ2Fubm90IHNhdmUgbmV3IGFubm90YXRpb25zLiIpO2NvbnN0IGk9bmV3IGIuUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KSxvPW5ldyBzLlJlZlNldCxjPW5ldyBzLlJlZlNldDt0aGlzLiN0KGEsbyxjKTtjb25zdCBsPXRoaXMucGFnZURpY3QsaD10aGlzLmFubm90YXRpb25zLmZpbHRlcigoZT0+IShlIGluc3RhbmNlb2Ygcy5SZWYmJm8uaGFzKGUpKSkpLHU9YXdhaXQgbi5Bbm5vdGF0aW9uRmFjdG9yeS5zYXZlTmV3QW5ub3RhdGlvbnMoaSx0LGEscik7Zm9yKGNvbnN0e3JlZjplfW9mIHUuYW5ub3RhdGlvbnMpZSBpbnN0YW5jZW9mIHMuUmVmJiYhYy5oYXMoZSkmJmgucHVzaChlKTtjb25zdCBkPWwuZ2V0KCJBbm5vdHMiKTtsLnNldCgiQW5ub3RzIixoKTtjb25zdCBmPVtdO2F3YWl0KDAsUy53cml0ZU9iamVjdCkodGhpcy5yZWYsbCxmLHRoaXMueHJlZik7ZCYmbC5zZXQoIkFubm90cyIsZCk7Y29uc3QgZz11LmRlcGVuZGVuY2llcztnLnB1c2goe3JlZjp0aGlzLnJlZixkYXRhOmYuam9pbigiIil9LC4uLnUuYW5ub3RhdGlvbnMpO3JldHVybiBnfXNhdmUoZSx0LGEpe2NvbnN0IG49bmV3IGIuUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtyZXR1cm4gdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMudGhlbigoZnVuY3Rpb24oZSl7Y29uc3QgaT1bXTtmb3IoY29uc3QgcyBvZiBlKXMubXVzdEJlUHJpbnRlZChhKSYmaS5wdXNoKHMuc2F2ZShuLHQsYSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYHNhdmUgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSk7cmV0dXJuIFByb21pc2UuYWxsKGkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcigoZT0+ISFlKSl9KSl9KSl9bG9hZFJlc291cmNlcyhlKXt0aGlzLnJlc291cmNlc1Byb21pc2V8fCh0aGlzLnJlc291cmNlc1Byb21pc2U9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJyZXNvdXJjZXMiKSk7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZS50aGVuKCgoKT0+bmV3IHAuT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLGUsdGhpcy54cmVmKS5sb2FkKCkpKX1nZXRPcGVyYXRvckxpc3QoZSl7bGV0e2hhbmRsZXI6dCxzaW5rOmEsdGFzazpvLGludGVudDpjLGNhY2hlS2V5OmwsYW5ub3RhdGlvblN0b3JhZ2U6aD1udWxsfT1lO2NvbnN0IHU9dGhpcy5nZXRDb250ZW50U3RyZWFtKCksZD10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSksZj1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLGc9dGhpcy54ZmFGYWN0b3J5P251bGw6KDAsaS5nZXROZXdBbm5vdGF0aW9uc01hcCkoaCk7bGV0IHA9bnVsbCx5PVByb21pc2UucmVzb2x2ZShudWxsKTtpZihnKXtjb25zdCBlPWcuZ2V0KHRoaXMucGFnZUluZGV4KTtpZihlKXtjb25zdCB0PXRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImFubm90YXRpb25HbG9iYWxzIik7bGV0IGE7Y29uc3QgaT1uZXcgU2V0O2Zvcihjb25zdHtiaXRtYXBJZDp0LGJpdG1hcDphfW9mIGUpIXR8fGF8fGkuaGFzKHQpfHxpLmFkZCh0KTtjb25zdHtpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpjfT10aGlzLmV2YWx1YXRvck9wdGlvbnM7aWYoaS5zaXplPjApe2NvbnN0IHQ9ZS5zbGljZSgpO2Zvcihjb25zdFtlLGFdb2YgaCllLnN0YXJ0c1dpdGgoci5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4KSYmYS5iaXRtYXAmJmkuaGFzKGEuYml0bWFwSWQpJiZ0LnB1c2goYSk7YT1uLkFubm90YXRpb25GYWN0b3J5LmdlbmVyYXRlSW1hZ2VzKHQsdGhpcy54cmVmLGMpfWVsc2UgYT1uLkFubm90YXRpb25GYWN0b3J5LmdlbmVyYXRlSW1hZ2VzKGUsdGhpcy54cmVmLGMpO3A9bmV3IHMuUmVmU2V0O3RoaXMuI3QoZSxwLG51bGwpO3k9dC50aGVuKCh0PT50P24uQW5ub3RhdGlvbkZhY3RvcnkucHJpbnROZXdBbm5vdGF0aW9ucyh0LGYsbyxlLGEpOm51bGwpKX19Y29uc3Qgdz1Qcm9taXNlLmFsbChbdSxkXSkudGhlbigoZT0+e2xldFtyXT1lO2NvbnN0IG49bmV3IG0uT3BlcmF0b3JMaXN0KGMsYSk7dC5zZW5kKCJTdGFydFJlbmRlclBhZ2UiLHt0cmFuc3BhcmVuY3k6Zi5oYXNCbGVuZE1vZGVzKHRoaXMucmVzb3VyY2VzLHRoaXMubm9uQmxlbmRNb2Rlc1NldCkscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGNhY2hlS2V5Omx9KTtyZXR1cm4gZi5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpyLHRhc2s6byxyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMsb3BlcmF0b3JMaXN0Om59KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBufSkpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdyx0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucyx5XSkudGhlbigoZnVuY3Rpb24oZSl7bGV0W3QsYSxuXT1lO2lmKG4pe2E9YS5maWx0ZXIoKGU9PiEoZS5yZWYmJnAuaGFzKGUucmVmKSkpKTtmb3IobGV0IGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHI9bltlXTtpZihyLnJlZlRvUmVwbGFjZSl7Y29uc3QgaT1hLmZpbmRJbmRleCgoZT0+ZS5yZWYmJigwLHMuaXNSZWZzRXF1YWwpKGUucmVmLHIucmVmVG9SZXBsYWNlKSkpO2lmKGk+PTApe2Euc3BsaWNlKGksMSxyKTtuLnNwbGljZShlLS0sMSk7dC0tfX19YT1hLmNvbmNhdChuKX1pZigwPT09YS5sZW5ndGh8fGMmci5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEUpe3QuZmx1c2goITApO3JldHVybntsZW5ndGg6dC50b3RhbExlbmd0aH19Y29uc3QgaT0hIShjJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUyksbD0hIShjJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5BTlkpLHU9ISEoYyZyLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSksZD0hIShjJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCksZz1bXTtmb3IoY29uc3QgZSBvZiBhKShsfHx1JiZlLm11c3RCZVZpZXdlZChoLGkpfHxkJiZlLm11c3RCZVByaW50ZWQoaCkpJiZnLnB1c2goZS5nZXRPcGVyYXRvckxpc3QoZixvLGMsaSxoKS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsci53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiJHtvLm5hbWV9IiB0YXNrOiAiJHtlfSIuYCk7cmV0dXJue29wTGlzdDpudWxsLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX19KSkpO3JldHVybiBQcm9taXNlLmFsbChnKS50aGVuKChmdW5jdGlvbihlKXtsZXQgYT0hMSxyPSExO2Zvcihjb25zdHtvcExpc3Q6bixzZXBhcmF0ZUZvcm06aSxzZXBhcmF0ZUNhbnZhczpzfW9mIGUpe3QuYWRkT3BMaXN0KG4pO2F8fD1pO3J8fD1zfXQuZmx1c2goITAse2Zvcm06YSxjYW52YXM6cn0pO3JldHVybntsZW5ndGg6dC50b3RhbExlbmd0aH19KSl9KSl9ZXh0cmFjdFRleHRDb250ZW50KGUpe2xldHtoYW5kbGVyOnQsdGFzazphLGluY2x1ZGVNYXJrZWRDb250ZW50OnIsZGlzYWJsZU5vcm1hbGl6YXRpb246bixzaW5rOml9PWU7Y29uc3Qgcz10aGlzLmdldENvbnRlbnRTdHJlYW0oKSxvPXRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdKTtyZXR1cm4gUHJvbWlzZS5hbGwoW3Msb10pLnRoZW4oKGU9PntsZXRbc109ZTtyZXR1cm4gbmV3IGIuUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjp0LHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnMsdGFzazphLHJlc291cmNlczp0aGlzLnJlc291cmNlcyxpbmNsdWRlTWFya2VkQ29udGVudDpyLGRpc2FibGVOb3JtYWxpemF0aW9uOm4sc2luazppLHZpZXdCb3g6dGhpcy52aWV3fSl9KSl9YXN5bmMgZ2V0U3RydWN0VHJlZSgpe2NvbnN0IGU9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290Iik7aWYoIWUpcmV0dXJuIG51bGw7YXdhaXQgdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnM7cmV0dXJuKGF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX3BhcnNlU3RydWN0VHJlZSIsW2VdKSkuc2VyaWFsaXphYmxlfV9wYXJzZVN0cnVjdFRyZWUoZSl7Y29uc3QgdD1uZXcgdy5TdHJ1Y3RUcmVlUGFnZShlLHRoaXMucGFnZURpY3QpO3QucGFyc2UodGhpcy5yZWYpO3JldHVybiB0fWFzeW5jIGdldEFubm90YXRpb25zRGF0YShlLHQsYSl7Y29uc3Qgbj1hd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztpZigwPT09bi5sZW5ndGgpcmV0dXJuIG47Y29uc3QgaT1bXSxzPVtdO2xldCBvO2NvbnN0IGM9ISEoYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxsPSEhKGEmci5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGg9ISEoYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpO2Zvcihjb25zdCBhIG9mIG4pe2NvbnN0IG49Y3x8bCYmYS52aWV3YWJsZTsobnx8aCYmYS5wcmludGFibGUpJiZpLnB1c2goYS5kYXRhKTtpZihhLmhhc1RleHRDb250ZW50JiZuKXtvfHw9bmV3IGIuUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtzLnB1c2goYS5leHRyYWN0VGV4dENvbnRlbnQobyx0LFstMS8wLC0xLzAsMS8wLDEvMF0pLmNhdGNoKChmdW5jdGlvbihlKXsoMCxyLndhcm4pKGBnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApfSkpKX19YXdhaXQgUHJvbWlzZS5hbGwocyk7cmV0dXJuIGl9Z2V0IGFubm90YXRpb25zKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJBbm5vdHMiKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiYW5ub3RhdGlvbnMiLEFycmF5LmlzQXJyYXkoZSk/ZTpbXSl9Z2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGFzeW5jIGU9PntpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU7Y29uc3QgdD1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpO2lmKCF0KXJldHVybltdO2NvbnN0IGE9W107Zm9yKGNvbnN0IGkgb2YgZSlhLnB1c2gobi5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLGksdCx0aGlzLl9sb2NhbElkRmFjdG9yeSwhMSx0aGlzLnJlZikuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYF9wYXJzZWRBbm5vdGF0aW9uczogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKTtjb25zdCBpPVtdO2xldCBzO2Zvcihjb25zdCBlIG9mIGF3YWl0IFByb21pc2UuYWxsKGEpKWUmJihlIGluc3RhbmNlb2Ygbi5Qb3B1cEFubm90YXRpb24/KHN8fD1bXSkucHVzaChlKTppLnB1c2goZSkpO3MmJmkucHVzaCguLi5zKTtyZXR1cm4gaX0pKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIixlKX1nZXQganNBY3Rpb25zKCl7Y29uc3QgZT0oMCxpLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsdGhpcy5wYWdlRGljdCxyLlBhZ2VBY3Rpb25FdmVudFR5cGUpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJqc0FjdGlvbnMiLGUpfX10LlBhZ2U9UGFnZTtjb25zdCBrPW5ldyBVaW50OEFycmF5KFszNyw4MCw2OCw3MCw0NV0pLE89bmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsOTcsMTE0LDExNiwxMjAsMTE0LDEwMSwxMDJdKSxUPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMCwxMTEsOTgsMTA2XSk7ZnVuY3Rpb24gZmluZChlLHQpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDI0LHI9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBuPXQubGVuZ3RoLGk9ZS5wZWVrQnl0ZXMoYSkscz1pLmxlbmd0aC1uO2lmKHM8PTApcmV0dXJuITE7aWYocil7Y29uc3QgYT1uLTE7bGV0IHI9aS5sZW5ndGgtMTtmb3IoO3I+PWE7KXtsZXQgcz0wO2Zvcig7czxuJiZpW3Itc109PT10W2Etc107KXMrKztpZihzPj1uKXtlLnBvcys9ci1hO3JldHVybiEwfXItLX19ZWxzZXtsZXQgYT0wO2Zvcig7YTw9czspe2xldCByPTA7Zm9yKDtyPG4mJmlbYStyXT09PXRbcl07KXIrKztpZihyPj1uKXtlLnBvcys9YTtyZXR1cm4hMH1hKyt9fXJldHVybiExfXQuUERGRG9jdW1lbnQ9Y2xhc3MgUERGRG9jdW1lbnR7Y29uc3RydWN0b3IoZSx0KXtpZih0Lmxlbmd0aDw9MCl0aHJvdyBuZXcgci5JbnZhbGlkUERGRXhjZXB0aW9uKCJUaGUgUERGIGZpbGUgaXMgZW1wdHksIGkuZS4gaXRzIHNpemUgaXMgemVybyBieXRlcy4iKTt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnN0cmVhbT10O3RoaXMueHJlZj1uZXcgQy5YUmVmKHQsZSk7dGhpcy5fcGFnZVByb21pc2VzPW5ldyBNYXA7dGhpcy5fdmVyc2lvbj1udWxsO2NvbnN0IGE9e2ZvbnQ6MH07dGhpcy5fZ2xvYmFsSWRGYWN0b3J5PWNsYXNze3N0YXRpYyBnZXREb2NJZCgpe3JldHVybmBnXyR7ZS5kb2NJZH1gfXN0YXRpYyBjcmVhdGVGb250SWQoKXtyZXR1cm4iZiIrICsrYS5mb250fXN0YXRpYyBjcmVhdGVPYmpJZCgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuIil9c3RhdGljIGdldFBhZ2VPYmpJZCgpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldFBhZ2VPYmpJZGAgY2FsbGVkLiIpfX19cGFyc2UoZSl7dGhpcy54cmVmLnBhcnNlKGUpO3RoaXMuY2F0YWxvZz1uZXcgaC5DYXRhbG9nKHRoaXMucGRmTWFuYWdlcix0aGlzLnhyZWYpfWdldCBsaW5lYXJpemF0aW9uKCl7bGV0IGU9bnVsbDt0cnl7ZT1mLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIuaW5mbykoZSl9cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfWdldCBzdGFydFhSZWYoKXtjb25zdCBlPXRoaXMuc3RyZWFtO2xldCB0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKXtlLnJlc2V0KCk7ZmluZChlLFQpJiYodD1lLnBvcys2LWUuc3RhcnQpfWVsc2V7Y29uc3QgYT0xMDI0LHI9Ty5sZW5ndGg7bGV0IG49ITEscz1lLmVuZDtmb3IoOyFuJiZzPjA7KXtzLT1hLXI7czwwJiYocz0wKTtlLnBvcz1zO249ZmluZChlLE8sYSwhMCl9aWYobil7ZS5za2lwKDkpO2xldCBhO2Rve2E9ZS5nZXRCeXRlKCl9d2hpbGUoKDAsaS5pc1doaXRlU3BhY2UpKGEpKTtsZXQgcj0iIjtmb3IoO2E+PTMyJiZhPD01Nzspe3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk7YT1lLmdldEJ5dGUoKX10PXBhcnNlSW50KHIsMTApO2lzTmFOKHQpJiYodD0wKX19cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInN0YXJ0WFJlZiIsdCl9Y2hlY2tIZWFkZXIoKXtjb25zdCBlPXRoaXMuc3RyZWFtO2UucmVzZXQoKTtpZighZmluZChlLGspKXJldHVybjtlLm1vdmVTdGFydCgpO2Uuc2tpcChrLmxlbmd0aCk7bGV0IHQsYT0iIjtmb3IoOyh0PWUuZ2V0Qnl0ZSgpKT4zMiYmYS5sZW5ndGg8NzspYSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KTtpLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGEpP3RoaXMuX3ZlcnNpb249YTooMCxyLndhcm4pKGBJbnZhbGlkIFBERiBoZWFkZXIgdmVyc2lvbjogJHthfWApfXBhcnNlU3RhcnRYUmVmKCl7dGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZil9Z2V0IG51bVBhZ2VzKCl7bGV0IGU9MDtlPXRoaXMuY2F0YWxvZy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLmNhdGFsb2cubnVtUGFnZXM6dGhpcy54ZmFGYWN0b3J5P3RoaXMueGZhRmFjdG9yeS5nZXROdW1QYWdlcygpOnRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6dGhpcy5jYXRhbG9nLm51bVBhZ2VzO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJudW1QYWdlcyIsZSl9X2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7cmV0dXJuISFBcnJheS5pc0FycmF5KGUpJiZlLmV2ZXJ5KChlPT57aWYoISgoZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihlKSlpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuITE7aWYoZS5oYXMoIktpZHMiKSl7aWYoKyt0PjEwKXsoMCxyLndhcm4pKCJfaGFzT25seURvY3VtZW50U2lnbmF0dXJlczogbWF4aW11bSByZWN1cnNpb24gZGVwdGggcmVhY2hlZCIpO3JldHVybiExfXJldHVybiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGUuZ2V0KCJLaWRzIiksdCl9Y29uc3QgYT0oMCxzLmlzTmFtZSkoZS5nZXQoIkZUIiksIlNpZyIpLG49ZS5nZXQoIlJlY3QiKSxpPUFycmF5LmlzQXJyYXkobikmJm4uZXZlcnkoKGU9PjA9PT1lKSk7cmV0dXJuIGEmJml9KSl9Z2V0IF94ZmFTdHJlYW1zKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmdldCgiWEZBIiksYT17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiF0LmlzRW1wdHkpe2FbInhkcDp4ZHAiXT10O3JldHVybiBhfWlmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7ZSs9Mil7bGV0IG47bj0wPT09ZT8ieGRwOnhkcCI6ZT09PXItMj8iL3hkcDp4ZHAiOnRbZV07aWYoIWEuaGFzT3duUHJvcGVydHkobikpY29udGludWU7Y29uc3QgaT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2UrMV0pO2kgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFpLmlzRW1wdHkmJihhW25dPWkpfXJldHVybiBhfWdldCB4ZmFEYXRhc2V0cygpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4oMCxyLnNoYWRvdykodGhpcywieGZhRGF0YXNldHMiLG51bGwpO2Zvcihjb25zdCB0IG9mWyJkYXRhc2V0cyIsInhkcDp4ZHAiXSl7Y29uc3QgYT1lW3RdO2lmKGEpdHJ5e2NvbnN0IGU9e1t0XTooMCxyLnN0cmluZ1RvVVRGOFN0cmluZykoYS5nZXRTdHJpbmcoKSl9O3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbmV3IGQuRGF0YXNldFJlYWRlcihlKSl9Y2F0Y2h7KDAsci53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7YnJlYWt9fXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCl9Z2V0IHhmYURhdGEoKXtjb25zdCBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFthLG5db2YgT2JqZWN0LmVudHJpZXMoZSkpaWYobil0cnl7dFthXT0oMCxyLnN0cmluZ1RvVVRGOFN0cmluZykobi5nZXRTdHJpbmcoKSl9Y2F0Y2h7KDAsci53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7cmV0dXJuIG51bGx9cmV0dXJuIHR9Z2V0IHhmYUZhY3RvcnkoKXtsZXQgZTt0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhJiZ0aGlzLmNhdGFsb2cubmVlZHNSZW5kZXJpbmcmJnRoaXMuZm9ybUluZm8uaGFzWGZhJiYhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSYmKGU9dGhpcy54ZmFEYXRhKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywieGZhRmFjdG9yeSIsZT9uZXcgeC5YRkFGYWN0b3J5KGUpOm51bGwpfWdldCBpc1B1cmVYZmEoKXtyZXR1cm4hIXRoaXMueGZhRmFjdG9yeSYmdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKX1nZXQgaHRtbEZvclhmYSgpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldFBhZ2VzKCk6bnVsbH1hc3luYyBsb2FkWGZhSW1hZ2VzKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygieGZhSW1hZ2VzIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5nZXRLZXlzKCksYT1uZXcgcC5PYmplY3RMb2FkZXIoZSx0LHRoaXMueHJlZik7YXdhaXQgYS5sb2FkKCk7Y29uc3Qgcj1uZXcgTWFwO2Zvcihjb25zdCBhIG9mIHQpe2NvbnN0IHQ9ZS5nZXQoYSk7dCBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbSYmci5zZXQoYSx0LmdldEJ5dGVzKCkpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMocil9YXN5bmMgbG9hZFhmYUZvbnRzKGUsdCl7Y29uc3QgYT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKTtpZighYSlyZXR1cm47Y29uc3Qgbj1hd2FpdCBhLmdldEFzeW5jKCJEUiIpO2lmKCEobiBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGM9bmV3IHAuT2JqZWN0TG9hZGVyKG4sWyJGb250Il0sdGhpcy54cmVmKTthd2FpdCBjLmxvYWQoKTtjb25zdCBsPW4uZ2V0KCJGb250Iik7aWYoIShsIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgaD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO2gudXNlU3lzdGVtRm9udHM9ITE7Y29uc3QgdT1uZXcgYi5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmh9KSxkPW5ldyBtLk9wZXJhdG9yTGlzdCxmPVtdLGc9e2dldCBmb250KCl7cmV0dXJuIGYuYXQoLTEpfSxzZXQgZm9udChlKXtmLnB1c2goZSl9LGNsb25lKCl7cmV0dXJuIHRoaXN9fSx5PW5ldyBNYXA7bC5mb3JFYWNoKCgoZSx0KT0+e3kuc2V0KGUsdCl9KSk7Y29uc3Qgdz1bXTtmb3IoY29uc3RbZSxhXW9mIHkpe2NvbnN0IG89YS5nZXQoIkZvbnREZXNjcmlwdG9yIik7aWYoIShvIGluc3RhbmNlb2Ygcy5EaWN0KSljb250aW51ZTtsZXQgYz1vLmdldCgiRm9udEZhbWlseSIpO2M9Yy5yZXBsYWNlQWxsKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IGw9e2ZvbnRGYW1pbHk6Yyxmb250V2VpZ2h0Om8uZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LW8uZ2V0KCJJdGFsaWNBbmdsZSIpfTsoMCxpLnZhbGlkYXRlQ1NTRm9udCkobCkmJncucHVzaCh1LmhhbmRsZVNldEZvbnQobixbcy5OYW1lLmdldChlKSwxXSxudWxsLGQsdCxnLG51bGwsbCkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTtjb25zdCBTPXRoaXMueGZhRmFjdG9yeS5zZXRGb250cyhmKTtpZighUylyZXR1cm47aC5pZ25vcmVFcnJvcnM9ITA7dy5sZW5ndGg9MDtmLmxlbmd0aD0wO2NvbnN0IHg9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBTKSgwLG8uZ2V0WGZhRm9udE5hbWUpKGAke2V9LVJlZ3VsYXJgKXx8eC5hZGQoZSk7eC5zaXplJiZTLnB1c2goIlBkZkpTLUZhbGxiYWNrIik7Zm9yKGNvbnN0IGUgb2YgUylpZigheC5oYXMoZSkpZm9yKGNvbnN0IGEgb2Zbe25hbWU6IlJlZ3VsYXIiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJCb2xkIixmb250V2VpZ2h0OjcwMCxpdGFsaWNBbmdsZTowfSx7bmFtZToiSXRhbGljIixmb250V2VpZ2h0OjQwMCxpdGFsaWNBbmdsZToxMn0se25hbWU6IkJvbGRJdGFsaWMiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjEyfV0pe2NvbnN0IGk9YCR7ZX0tJHthLm5hbWV9YCxjPSgwLG8uZ2V0WGZhRm9udERpY3QpKGkpO3cucHVzaCh1LmhhbmRsZVNldEZvbnQobixbcy5OYW1lLmdldChpKSwxXSxudWxsLGQsdCxnLGMse2ZvbnRGYW1pbHk6ZSxmb250V2VpZ2h0OmEuZm9udFdlaWdodCxpdGFsaWNBbmdsZTphLml0YWxpY0FuZ2xlfSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLHIud2FybikoYGxvYWRYZmFGb250czogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKX1hd2FpdCBQcm9taXNlLmFsbCh3KTt0aGlzLnhmYUZhY3RvcnkuYXBwZW5kRm9udHMoZix4KX1hc3luYyBzZXJpYWxpemVYZmFEYXRhKGUpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEoZSk6bnVsbH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLmNhdGFsb2cudmVyc2lvbnx8dGhpcy5fdmVyc2lvbn1nZXQgZm9ybUluZm8oKXtjb25zdCBlPXtoYXNGaWVsZHM6ITEsaGFzQWNyb0Zvcm06ITEsaGFzWGZhOiExLGhhc1NpZ25hdHVyZXM6ITF9LHQ9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCF0KXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSk7dHJ5e2NvbnN0IGE9dC5nZXQoIkZpZWxkcyIpLHI9QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGg+MDtlLmhhc0ZpZWxkcz1yO2NvbnN0IG49dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoPjB8fG4gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0mJiFuLmlzRW1wdHk7Y29uc3QgaT0hISgxJnQuZ2V0KCJTaWdGbGFncyIpKSxzPWkmJnRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoYSk7ZS5oYXNBY3JvRm9ybT1yJiYhcztlLmhhc1NpZ25hdHVyZXM9aX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYENhbm5vdCBmZXRjaCBmb3JtIGluZm9ybWF0aW9uOiAiJHtlfSIuYCl9cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImZvcm1JbmZvIixlKX1nZXQgZG9jdW1lbnRJbmZvKCl7Y29uc3QgZT17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnZlcnNpb24sTGFuZ3VhZ2U6dGhpcy5jYXRhbG9nLmxhbmcsRW5jcnlwdEZpbHRlck5hbWU6dGhpcy54cmVmLmVuY3J5cHQ/dGhpcy54cmVmLmVuY3J5cHQuZmlsdGVyTmFtZTpudWxsLElzTGluZWFyaXplZDohIXRoaXMubGluZWFyaXphdGlvbixJc0Fjcm9Gb3JtUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtLElzWEZBUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1hmYSxJc0NvbGxlY3Rpb25QcmVzZW50OiEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb24sSXNTaWduYXR1cmVzUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1NpZ25hdHVyZXN9O2xldCB0O3RyeXt0PXRoaXMueHJlZi50cmFpbGVyLmdldCgiSW5mbyIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci5pbmZvKSgiVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX1pZighKHQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLGUpO2Zvcihjb25zdCBhIG9mIHQuZ2V0S2V5cygpKXtjb25zdCBuPXQuZ2V0KGEpO3N3aXRjaChhKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2Ygbil7ZVthXT0oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShuKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKG4gaW5zdGFuY2VvZiBzLk5hbWUpe2VbYV09bjtjb250aW51ZX1icmVhaztkZWZhdWx0OmxldCB0O3N3aXRjaCh0eXBlb2Ygbil7Y2FzZSJzdHJpbmciOnQ9KDAsci5zdHJpbmdUb1BERlN0cmluZykobik7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiYm9vbGVhbiI6dD1uO2JyZWFrO2RlZmF1bHQ6biBpbnN0YW5jZW9mIHMuTmFtZSYmKHQ9bil9aWYodm9pZCAwPT09dCl7KDAsci53YXJuKShgQmFkIHZhbHVlLCBmb3IgY3VzdG9tIGtleSAiJHthfSIsIGluIEluZm86ICR7bn0uYCk7Y29udGludWV9ZS5DdXN0b218fChlLkN1c3RvbT1PYmplY3QuY3JlYXRlKG51bGwpKTtlLkN1c3RvbVthXT10O2NvbnRpbnVlfSgwLHIud2FybikoYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHthfSIsIGluIEluZm86ICR7bn0uYCl9cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImRvY3VtZW50SW5mbyIsZSl9Z2V0IGZpbmdlcnByaW50cygpe2Z1bmN0aW9uIHZhbGlkYXRlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gaGV4U3RyaW5nKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl7Y29uc3QgZT1hLnRvU3RyaW5nKDE2KTt0LnB1c2goZS5wYWRTdGFydCgyLCIwIikpfXJldHVybiB0LmpvaW4oIiIpfWNvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJRCIpO2xldCB0LGE7aWYoQXJyYXkuaXNBcnJheShlKSYmdmFsaWRhdGUoZVswXSkpe3Q9KDAsci5zdHJpbmdUb0J5dGVzKShlWzBdKTtlWzFdIT09ZVswXSYmdmFsaWRhdGUoZVsxXSkmJihhPSgwLHIuc3RyaW5nVG9CeXRlcykoZVsxXSkpfWVsc2UgdD0oMCxsLmNhbGN1bGF0ZU1ENSkodGhpcy5zdHJlYW0uZ2V0Qnl0ZVJhbmdlKDAsMTAyNCksMCwxMDI0KTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZmluZ2VycHJpbnRzIixbaGV4U3RyaW5nKHQpLGE/aGV4U3RyaW5nKGEpOm51bGxdKX1hc3luYyBfZ2V0TGluZWFyaXphdGlvblBhZ2UoZSl7Y29uc3R7Y2F0YWxvZzp0LGxpbmVhcml6YXRpb246YSx4cmVmOm59PXRoaXMsaT1zLlJlZi5nZXQoYS5vYmplY3ROdW1iZXJGaXJzdCwwKTt0cnl7Y29uc3QgZT1hd2FpdCBuLmZldGNoQXN5bmMoaSk7aWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7bGV0IGE9ZS5nZXRSYXcoIlR5cGUiKTthIGluc3RhbmNlb2Ygcy5SZWYmJihhPWF3YWl0IG4uZmV0Y2hBc3luYyhhKSk7aWYoKDAscy5pc05hbWUpKGEsIlBhZ2UiKXx8IWUuaGFzKCJUeXBlIikmJiFlLmhhcygiS2lkcyIpKXt0LnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoaSl8fHQucGFnZUtpZHNDb3VudENhY2hlLnB1dChpLDEpO3QucGFnZUluZGV4Q2FjaGUuaGFzKGkpfHx0LnBhZ2VJbmRleENhY2hlLnB1dChpLDApO3JldHVybltlLGldfX10aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LiIpfWNhdGNoKGEpeygwLHIud2FybikoYF9nZXRMaW5lYXJpemF0aW9uUGFnZTogIiR7YS5tZXNzYWdlfSIuYCk7cmV0dXJuIHQuZ2V0UGFnZURpY3QoZSl9fWdldFBhZ2UoZSl7Y29uc3QgdD10aGlzLl9wYWdlUHJvbWlzZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3R7Y2F0YWxvZzphLGxpbmVhcml6YXRpb246cix4ZmFGYWN0b3J5Om59PXRoaXM7bGV0IGk7aT1uP1Byb21pc2UucmVzb2x2ZShbcy5EaWN0LmVtcHR5LG51bGxdKTpyPy5wYWdlRmlyc3Q9PT1lP3RoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKGUpOmEuZ2V0UGFnZURpY3QoZSk7aT1pLnRoZW4oKHQ9PntsZXRbcixpXT10O3JldHVybiBuZXcgUGFnZSh7cGRmTWFuYWdlcjp0aGlzLnBkZk1hbmFnZXIseHJlZjp0aGlzLnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6cixyZWY6aSxnbG9iYWxJZEZhY3Rvcnk6dGhpcy5fZ2xvYmFsSWRGYWN0b3J5LGZvbnRDYWNoZTphLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOmEuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6YS5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTphLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOmEuc3lzdGVtRm9udENhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6YS5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6bn0pfSkpO3RoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxpKTtyZXR1cm4gaX1hc3luYyBjaGVja0ZpcnN0UGFnZSgpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSkpdHJ5e2F3YWl0IHRoaXMuZ2V0UGFnZSgwKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5YUmVmRW50cnlFeGNlcHRpb24pe3RoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoMCk7YXdhaXQgdGhpcy5jbGVhbnVwKCk7dGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9ufX19YXN5bmMgY2hlY2tMYXN0UGFnZSgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7Y2F0YWxvZzp0LHBkZk1hbmFnZXI6YX09dGhpczt0LnNldEFjdHVhbE51bVBhZ2VzKCk7bGV0IG47dHJ5e2F3YWl0IFByb21pc2UuYWxsKFthLmVuc3VyZURvYygieGZhRmFjdG9yeSIpLGEuZW5zdXJlRG9jKCJsaW5lYXJpemF0aW9uIiksYS5lbnN1cmVDYXRhbG9nKCJudW1QYWdlcyIpXSk7aWYodGhpcy54ZmFGYWN0b3J5KXJldHVybjtuPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6dC5udW1QYWdlcztpZighTnVtYmVyLmlzSW50ZWdlcihuKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpcyBub3QgYW4gaW50ZWdlci4iKTtpZihuPD0xKXJldHVybjthd2FpdCB0aGlzLmdldFBhZ2Uobi0xKX1jYXRjaChzKXt0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKG4tMSk7YXdhaXQgdGhpcy5jbGVhbnVwKCk7aWYocyBpbnN0YW5jZW9mIGkuWFJlZkVudHJ5RXhjZXB0aW9uJiYhZSl0aHJvdyBuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb247KDAsci53YXJuKShgY2hlY2tMYXN0UGFnZSAtIGludmFsaWQgL1BhZ2VzIHRyZWUgL0NvdW50OiAke259LmApO2xldCBvO3RyeXtvPWF3YWl0IHQuZ2V0QWxsUGFnZURpY3RzKGUpfWNhdGNoKGEpe2lmKGEgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbiYmIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9uO3Quc2V0QWN0dWFsTnVtUGFnZXMoMSk7cmV0dXJufWZvcihjb25zdFtlLFtyLG5dXW9mIG8pe2xldCBpO2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7aT1Qcm9taXNlLnJlamVjdChyKTtpLmNhdGNoKCgoKT0+e30pKX1lbHNlIGk9UHJvbWlzZS5yZXNvbHZlKG5ldyBQYWdlKHtwZGZNYW5hZ2VyOmEseHJlZjp0aGlzLnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6cixyZWY6bixnbG9iYWxJZEZhY3Rvcnk6dGhpcy5fZ2xvYmFsSWRGYWN0b3J5LGZvbnRDYWNoZTp0LmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnQuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dC5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0Lmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnQuc3lzdGVtRm9udENhY2hlLG5vbkJsZW5kTW9kZXNTZXQ6dC5ub25CbGVuZE1vZGVzU2V0LHhmYUZhY3Rvcnk6bnVsbH0pKTt0aGlzLl9wYWdlUHJvbWlzZXMuc2V0KGUsaSl9dC5zZXRBY3R1YWxOdW1QYWdlcyhvLnNpemUpfX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5jYXRhbG9nLmZvbnRGYWxsYmFjayhlLHQpfWFzeW5jIGNsZWFudXAoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmNhdGFsb2c/dGhpcy5jYXRhbG9nLmNsZWFudXAoZSk6KDAsdS5jbGVhckdsb2JhbENhY2hlcykoKX0jYShlLHQsYSxpKXtjb25zdCBzPXRoaXMueHJlZi5mZXRjaElmUmVmKHQpO2lmKHMuaGFzKCJUIikpe2NvbnN0IHQ9KDAsci5zdHJpbmdUb1BERlN0cmluZykocy5nZXQoIlQiKSk7ZT0iIj09PWU/dDpgJHtlfS4ke3R9YH1hLmhhcyhlKXx8YS5zZXQoZSxbXSk7YS5nZXQoZSkucHVzaChuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCxpLHRoaXMuX2xvY2FsSWRGYWN0b3J5LCEwLG51bGwpLnRoZW4oKGU9PmU/LmdldEZpZWxkT2JqZWN0KCkpKS5jYXRjaCgoZnVuY3Rpb24oZSl7KDAsci53YXJuKShgI2NvbGxlY3RGaWVsZE9iamVjdHM6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSk7aWYocy5oYXMoIktpZHMiKSlmb3IoY29uc3QgdCBvZiBzLmdldCgiS2lkcyIpKXRoaXMuI2EoZSx0LGEsaSl9Z2V0IGZpZWxkT2JqZWN0cygpe2lmKCF0aGlzLmZvcm1JbmZvLmhhc0ZpZWxkcylyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZmllbGRPYmplY3RzIixQcm9taXNlLnJlc29sdmUobnVsbCkpO2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiYW5ub3RhdGlvbkdsb2JhbHMiKS50aGVuKChhc3luYyBlPT57aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpLGE9bmV3IE1hcDtmb3IoY29uc3QgdCBvZiB0aGlzLmNhdGFsb2cuYWNyb0Zvcm0uZ2V0KCJGaWVsZHMiKSl0aGlzLiNhKCIiLHQsYSxlKTtjb25zdCByPVtdO2Zvcihjb25zdFtlLG5db2YgYSlyLnB1c2goUHJvbWlzZS5hbGwobikudGhlbigoYT0+eyhhPWEuZmlsdGVyKChlPT4hIWUpKSkubGVuZ3RoPjAmJih0W2VdPWEpfSkpKTthd2FpdCBQcm9taXNlLmFsbChyKTtyZXR1cm4gdH0pKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZmllbGRPYmplY3RzIixlKX1nZXQgaGFzSlNBY3Rpb25zKCl7Y29uc3QgZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJfcGFyc2VIYXNKU0FjdGlvbnMiKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiaGFzSlNBY3Rpb25zIixlKX1hc3luYyBfcGFyc2VIYXNKU0FjdGlvbnMoKXtjb25zdFtlLHRdPWF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIiksdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiZmllbGRPYmplY3RzIildKTtyZXR1cm4hIWV8fCEhdCYmT2JqZWN0LnZhbHVlcyh0KS5zb21lKChlPT5lLnNvbWUoKGU9Pm51bGwhPT1lLmFjdGlvbnMpKSkpfWdldCBjYWxjdWxhdGlvbk9yZGVySWRzKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIWU/LmhhcygiQ08iKSlyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsbnVsbCk7Y29uc3QgdD1lLmdldCgiQ08iKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTtjb25zdCBhPVtdO2Zvcihjb25zdCBlIG9mIHQpZSBpbnN0YW5jZW9mIHMuUmVmJiZhLnB1c2goZS50b1N0cmluZygpKTtyZXR1cm4gMD09PWEubGVuZ3RoPygwLHIuc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTooMCxyLnNoYWRvdykodGhpcywiY2FsY3VsYXRpb25PcmRlcklkcyIsYSl9Z2V0IGFubm90YXRpb25HbG9iYWxzKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImFubm90YXRpb25HbG9iYWxzIixuLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZUdsb2JhbHModGhpcy5wZGZNYW5hZ2VyKSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBvcHVwQW5ub3RhdGlvbj10Lk1hcmt1cEFubm90YXRpb249dC5Bbm5vdGF0aW9uRmFjdG9yeT10LkFubm90YXRpb25Cb3JkZXJTdHlsZT10LkFubm90YXRpb249dm9pZCAwO3QuZ2V0UXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzO2EoMTQwKTthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxNTgpO2EoMTYwKTt2YXIgcj1hKDE0NSksbj1hKDE1MCksaT1hKDE2Mikscz1hKDE1MSksbz1hKDE1NSksYz1hKDE1MiksbD1hKDIxMSksaD1hKDIxNyksdT1hKDE2MyksZD1hKDIyMCksZj1hKDE3NyksZz1hKDIyNykscD1hKDIxNSksbT1hKDIyNCksYj1hKDIyOCk7dC5Bbm5vdGF0aW9uRmFjdG9yeT1jbGFzcyBBbm5vdGF0aW9uRmFjdG9yeXtzdGF0aWMgY3JlYXRlR2xvYmFscyhlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW2UuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxlLmVuc3VyZURvYygieGZhRGF0YXNldHMiKSxlLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290IiksZS5lbnN1cmVDYXRhbG9nKCJiYXNlVXJsIiksZS5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpXSkudGhlbigodD0+e2xldFthLHIsbixpLG9dPXQ7cmV0dXJue3BkZk1hbmFnZXI6ZSxhY3JvRm9ybTphIGluc3RhbmNlb2Ygcy5EaWN0P2E6cy5EaWN0LmVtcHR5LHhmYURhdGFzZXRzOnIsc3RydWN0VHJlZVJvb3Q6bixiYXNlVXJsOmksYXR0YWNobWVudHM6b319KSwoZT0+eygwLHIud2FybikoYGNyZWF0ZUdsb2JhbHM6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKX1zdGF0aWMgYXN5bmMgY3JlYXRlKGUsdCxhLHIsbixpKXtjb25zdCBzPW4/YXdhaXQgdGhpcy5fZ2V0UGFnZUluZGV4KGUsdCxhLnBkZk1hbmFnZXIpOm51bGw7cmV0dXJuIGEucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX2NyZWF0ZSIsW2UsdCxhLHIsbixzLGldKX1zdGF0aWMgX2NyZWF0ZShlLHQsYSxpKXtsZXQgbz1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdLGM9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOm51bGwsbD1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbDtjb25zdCBoPWUuZmV0Y2hJZlJlZih0KTtpZighKGggaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdHthY3JvRm9ybTp1LHBkZk1hbmFnZXI6ZH09YSxmPXQgaW5zdGFuY2VvZiBzLlJlZj90LnRvU3RyaW5nKCk6YGFubm90XyR7aS5jcmVhdGVPYmpJZCgpfWA7bGV0IGc9aC5nZXQoIlN1YnR5cGUiKTtnPWcgaW5zdGFuY2VvZiBzLk5hbWU/Zy5uYW1lOm51bGw7Y29uc3QgcD17eHJlZjplLHJlZjp0LGRpY3Q6aCxzdWJ0eXBlOmcsaWQ6Zixhbm5vdGF0aW9uR2xvYmFsczphLGNvbGxlY3RGaWVsZHM6byxuZWVkQXBwZWFyYW5jZXM6IW8mJiEwPT09dS5nZXQoIk5lZWRBcHBlYXJhbmNlcyIpLHBhZ2VJbmRleDpjLGV2YWx1YXRvck9wdGlvbnM6ZC5ldmFsdWF0b3JPcHRpb25zLHBhZ2VSZWY6bH07c3dpdGNoKGcpe2Nhc2UiTGluayI6cmV0dXJuIG5ldyBMaW5rQW5ub3RhdGlvbihwKTtjYXNlIlRleHQiOnJldHVybiBuZXcgVGV4dEFubm90YXRpb24ocCk7Y2FzZSJXaWRnZXQiOmxldCBlPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6aCxrZXk6IkZUIn0pO2U9ZSBpbnN0YW5jZW9mIHMuTmFtZT9lLm5hbWU6bnVsbDtzd2l0Y2goZSl7Y2FzZSJUeCI6cmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbihwKTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uKHApO2Nhc2UiQ2giOnJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbihwKTtjYXNlIlNpZyI6cmV0dXJuIG5ldyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uKHApfSgwLHIud2FybikoYFVuaW1wbGVtZW50ZWQgd2lkZ2V0IGZpZWxkIHR5cGUgIiR7ZX0iLCBmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLmApO3JldHVybiBuZXcgV2lkZ2V0QW5ub3RhdGlvbihwKTtjYXNlIlBvcHVwIjpyZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbihwKTtjYXNlIkZyZWVUZXh0IjpyZXR1cm4gbmV3IEZyZWVUZXh0QW5ub3RhdGlvbihwKTtjYXNlIkxpbmUiOnJldHVybiBuZXcgTGluZUFubm90YXRpb24ocCk7Y2FzZSJTcXVhcmUiOnJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbihwKTtjYXNlIkNpcmNsZSI6cmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uKHApO2Nhc2UiUG9seUxpbmUiOnJldHVybiBuZXcgUG9seWxpbmVBbm5vdGF0aW9uKHApO2Nhc2UiUG9seWdvbiI6cmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbihwKTtjYXNlIkNhcmV0IjpyZXR1cm4gbmV3IENhcmV0QW5ub3RhdGlvbihwKTtjYXNlIkluayI6cmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uKHApO2Nhc2UiSGlnaGxpZ2h0IjpyZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb24ocCk7Y2FzZSJVbmRlcmxpbmUiOnJldHVybiBuZXcgVW5kZXJsaW5lQW5ub3RhdGlvbihwKTtjYXNlIlNxdWlnZ2x5IjpyZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbihwKTtjYXNlIlN0cmlrZU91dCI6cmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uKHApO2Nhc2UiU3RhbXAiOnJldHVybiBuZXcgU3RhbXBBbm5vdGF0aW9uKHApO2Nhc2UiRmlsZUF0dGFjaG1lbnQiOnJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKHApO2RlZmF1bHQ6b3x8KGc/KDAsci53YXJuKShgVW5pbXBsZW1lbnRlZCBhbm5vdGF0aW9uIHR5cGUgIiR7Z30iLCBmYWxsaW5nIGJhY2sgdG8gYmFzZSBhbm5vdGF0aW9uLmApOigwLHIud2FybikoIkFubm90YXRpb24gaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgL1N1YnR5cGUuIikpO3JldHVybiBuZXcgQW5ub3RhdGlvbihwKX19c3RhdGljIGFzeW5jIF9nZXRQYWdlSW5kZXgoZSx0LGEpe3RyeXtjb25zdCBuPWF3YWl0IGUuZmV0Y2hJZlJlZkFzeW5jKHQpO2lmKCEobiBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuLTE7Y29uc3QgaT1uLmdldFJhdygiUCIpO2lmKGkgaW5zdGFuY2VvZiBzLlJlZil0cnl7cmV0dXJuIGF3YWl0IGEuZW5zdXJlQ2F0YWxvZygiZ2V0UGFnZUluZGV4IixbaV0pfWNhdGNoKGUpeygwLHIuaW5mbykoYF9nZXRQYWdlSW5kZXggLS0gbm90IGEgdmFsaWQgcGFnZSByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihuLmhhcygiS2lkcyIpKXJldHVybi0xO2NvbnN0IG89YXdhaXQgYS5lbnN1cmVEb2MoIm51bVBhZ2VzIik7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3Qgcj1hd2FpdCBhLmdldFBhZ2UoZSksbj1hd2FpdCBhLmVuc3VyZShyLCJhbm5vdGF0aW9ucyIpO2Zvcihjb25zdCBhIG9mIG4paWYoYSBpbnN0YW5jZW9mIHMuUmVmJiYoMCxzLmlzUmVmc0VxdWFsKShhLHQpKXJldHVybiBlfX1jYXRjaChlKXsoMCxyLndhcm4pKGBfZ2V0UGFnZUluZGV4OiAiJHtlfSIuYCl9cmV0dXJuLTF9c3RhdGljIGdlbmVyYXRlSW1hZ2VzKGUsdCxhKXtpZighYSl7KDAsci53YXJuKSgiZ2VuZXJhdGVJbWFnZXM6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBjYW5ub3Qgc2F2ZSBvciBwcmludCBzb21lIGFubm90YXRpb25zIHdpdGggaW1hZ2VzLiIpO3JldHVybiBudWxsfWxldCBuO2Zvcihjb25zdHtiaXRtYXBJZDphLGJpdG1hcDpyfW9mIGUpaWYocil7bnx8PW5ldyBNYXA7bi5zZXQoYSxTdGFtcEFubm90YXRpb24uY3JlYXRlSW1hZ2Uocix0KSl9cmV0dXJuIG59c3RhdGljIGFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsYSxuKXtjb25zdCBpPWUueHJlZjtsZXQgbztjb25zdCBjPVtdLGw9W10se2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmh9PWUub3B0aW9ucztmb3IoY29uc3QgdSBvZiBhKWlmKCF1LmRlbGV0ZWQpc3dpdGNoKHUuYW5ub3RhdGlvblR5cGUpe2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDppZighbyl7Y29uc3QgZT1uZXcgcy5EaWN0KGkpO2Uuc2V0KCJCYXNlRm9udCIscy5OYW1lLmdldCgiSGVsdmV0aWNhIikpO2Uuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJUeXBlMSIpKTtlLnNldCgiRW5jb2RpbmciLHMuTmFtZS5nZXQoIldpbkFuc2lFbmNvZGluZyIpKTtjb25zdCB0PVtdO289aS5nZXROZXdUZW1wb3JhcnlSZWYoKTthd2FpdCgwLG0ud3JpdGVPYmplY3QpKG8sZSx0LGkpO2MucHVzaCh7cmVmOm8sZGF0YTp0LmpvaW4oIiIpfSl9bC5wdXNoKEZyZWVUZXh0QW5ub3RhdGlvbi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksdSxjLHtldmFsdWF0b3I6ZSx0YXNrOnQsYmFzZUZvbnRSZWY6b30pKTticmVhaztjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOmwucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24oaSx1LGMpKTticmVhaztjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuU1RBTVA6aWYoIWgpYnJlYWs7Y29uc3QgYT1hd2FpdCBuLmdldCh1LmJpdG1hcElkKTtpZihhLmltYWdlU3RyZWFtKXtjb25zdHtpbWFnZVN0cmVhbTplLHNtYXNrU3RyZWFtOnR9PWEscj1bXTtpZih0KXtjb25zdCBhPWkuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7YXdhaXQoMCxtLndyaXRlT2JqZWN0KShhLHQscixpKTtjLnB1c2goe3JlZjphLGRhdGE6ci5qb2luKCIiKX0pO2UuZGljdC5zZXQoIlNNYXNrIixhKTtyLmxlbmd0aD0wfWNvbnN0IG49YS5pbWFnZVJlZj1pLmdldE5ld1RlbXBvcmFyeVJlZigpO2F3YWl0KDAsbS53cml0ZU9iamVjdCkobixlLHIsaSk7Yy5wdXNoKHtyZWY6bixkYXRhOnIuam9pbigiIil9KTthLmltYWdlU3RyZWFtPWEuc21hc2tTdHJlYW09bnVsbH1sLnB1c2goU3RhbXBBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24oaSx1LGMse2ltYWdlOmF9KSl9cmV0dXJue2Fubm90YXRpb25zOmF3YWl0IFByb21pc2UuYWxsKGwpLGRlcGVuZGVuY2llczpjfX1zdGF0aWMgYXN5bmMgcHJpbnROZXdBbm5vdGF0aW9ucyhlLHQsYSxuLGkpe2lmKCFuKXJldHVybiBudWxsO2NvbnN0e29wdGlvbnM6cyx4cmVmOm99PXQsYz1bXTtmb3IoY29uc3QgbCBvZiBuKWlmKCFsLmRlbGV0ZWQpc3dpdGNoKGwuYW5ub3RhdGlvblR5cGUpe2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDpjLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG8sbCx7ZXZhbHVhdG9yOnQsdGFzazphLGV2YWx1YXRvck9wdGlvbnM6c30pKTticmVhaztjYXNlIHIuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOmMucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG8sbCx7ZXZhbHVhdG9yT3B0aW9uczpzfSkpO2JyZWFrO2Nhc2Ugci5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5TVEFNUDppZighcy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZClicmVhaztjb25zdCBuPWF3YWl0IGkuZ2V0KGwuYml0bWFwSWQpO2lmKG4uaW1hZ2VTdHJlYW0pe2NvbnN0e2ltYWdlU3RyZWFtOmUsc21hc2tTdHJlYW06dH09bjt0JiZlLmRpY3Quc2V0KCJTTWFzayIsdCk7bi5pbWFnZVJlZj1uZXcgZi5KcGVnU3RyZWFtKGUsZS5sZW5ndGgpO24uaW1hZ2VTdHJlYW09bi5zbWFza1N0cmVhbT1udWxsfWMucHVzaChTdGFtcEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGUsbyxsLHtpbWFnZTpuLGV2YWx1YXRvck9wdGlvbnM6c30pKX1yZXR1cm4gUHJvbWlzZS5hbGwoYyl9fTtmdW5jdGlvbiBnZXRSZ2JDb2xvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O2NvbnN0IGE9dHx8bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTp1LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7Y2FzZSAzOnUuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKGUsMCxhLDApO3JldHVybiBhO2Nhc2UgNDp1LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLGEsMCk7cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gZ2V0UGRmQ29sb3JBcnJheShlKXtyZXR1cm4gQXJyYXkuZnJvbShlLChlPT5lLzI1NSkpfWZ1bmN0aW9uIGdldFF1YWRQb2ludHMoZSx0KXtjb25zdCBhPWUuZ2V0QXJyYXkoIlF1YWRQb2ludHMiKTtpZighQXJyYXkuaXNBcnJheShhKXx8MD09PWEubGVuZ3RofHxhLmxlbmd0aCU4PjApcmV0dXJuIG51bGw7Y29uc3Qgcj1bXTtmb3IobGV0IGU9MCxuPWEubGVuZ3RoLzg7ZTxuO2UrKyl7bGV0IG49MS8wLGk9LTEvMCxzPTEvMCxvPS0xLzA7Zm9yKGxldCB0PTgqZSxyPTgqZSs4O3Q8cjt0Kz0yKXtjb25zdCBlPWFbdF0scj1hW3QrMV07bj1NYXRoLm1pbihlLG4pO2k9TWF0aC5tYXgoZSxpKTtzPU1hdGgubWluKHIscyk7bz1NYXRoLm1heChyLG8pfWlmKG51bGwhPT10JiYobjx0WzBdfHxpPnRbMl18fHM8dFsxXXx8bz50WzNdKSlyZXR1cm4gbnVsbDtyLnB1c2goW3t4Om4seTpvfSx7eDppLHk6b30se3g6bix5OnN9LHt4OmkseTpzfV0pfXJldHVybiByfWZ1bmN0aW9uIGdldFRyYW5zZm9ybU1hdHJpeChlLHQsYSl7Y29uc3RbbixpLHMsb109ci5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQsYSk7aWYobj09PXN8fGk9PT1vKXJldHVyblsxLDAsMCwxLGVbMF0sZVsxXV07Y29uc3QgYz0oZVsyXS1lWzBdKS8ocy1uKSxsPShlWzNdLWVbMV0pLyhvLWkpO3JldHVybltjLDAsMCxsLGVbMF0tbipjLGVbMV0taSpsXX1jbGFzcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe2NvbnN0e2RpY3Q6dCx4cmVmOmEsYW5ub3RhdGlvbkdsb2JhbHM6aX09ZTt0aGlzLnNldFRpdGxlKHQuZ2V0KCJUIikpO3RoaXMuc2V0Q29udGVudHModC5nZXQoIkNvbnRlbnRzIikpO3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZSh0LmdldCgiTSIpKTt0aGlzLnNldEZsYWdzKHQuZ2V0KCJGIikpO3RoaXMuc2V0UmVjdGFuZ2xlKHQuZ2V0QXJyYXkoIlJlY3QiKSk7dGhpcy5zZXRDb2xvcih0LmdldEFycmF5KCJDIikpO3RoaXMuc2V0Qm9yZGVyU3R5bGUodCk7dGhpcy5zZXRBcHBlYXJhbmNlKHQpO3RoaXMuc2V0T3B0aW9uYWxDb250ZW50KHQpO2NvbnN0IG89dC5nZXQoIk1LIik7dGhpcy5zZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQ29sb3JzKG8pO3RoaXMuc2V0Um90YXRpb24obyx0KTt0aGlzLnJlZj1lLnJlZiBpbnN0YW5jZW9mIHMuUmVmP2UucmVmOm51bGw7dGhpcy5fc3RyZWFtcz1bXTt0aGlzLmFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UpO2NvbnN0IGM9ISEodGhpcy5mbGFncyZyLkFubm90YXRpb25GbGFnLkxPQ0tFRCksbD0hISh0aGlzLmZsYWdzJnIuQW5ub3RhdGlvbkZsYWcuTE9DS0VEQ09OVEVOVFMpO2lmKGkuc3RydWN0VHJlZVJvb3Qpe2xldCBhPXQuZ2V0KCJTdHJ1Y3RQYXJlbnQiKTthPU51bWJlci5pc0ludGVnZXIoYSkmJmE+PTA/YTotMTtpLnN0cnVjdFRyZWVSb290LmFkZEFubm90YXRpb25JZFRvUGFnZShlLnBhZ2VSZWYsYSl9dGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOmUuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOmUuc3VidHlwZSxoYXNPd25DYW52YXM6ITEsbm9Sb3RhdGU6ISEodGhpcy5mbGFncyZyLkFubm90YXRpb25GbGFnLk5PUk9UQVRFKSxub0hUTUw6YyYmbH07aWYoZS5jb2xsZWN0RmllbGRzKXtjb25zdCBpPXQuZ2V0KCJLaWRzIik7aWYoQXJyYXkuaXNBcnJheShpKSl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiBpKXQgaW5zdGFuY2VvZiBzLlJlZiYmZS5wdXNoKHQudG9TdHJpbmcoKSk7MCE9PWUubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1lKX10aGlzLmRhdGEuYWN0aW9ucz0oMCxuLmNvbGxlY3RBY3Rpb25zKShhLHQsci5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKTt0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KTt0aGlzLmRhdGEucGFnZUluZGV4PWUucGFnZUluZGV4fXRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWUuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDt0aGlzLl9mYWxsYmFja0ZvbnREaWN0PW51bGw7dGhpcy5fbmVlZEFwcGVhcmFuY2VzPSExfV9oYXNGbGFnKGUsdCl7cmV0dXJuISEoZSZ0KX1faXNWaWV3YWJsZShlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSYmIXRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLk5PVklFVyl9X2lzUHJpbnRhYmxlKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsci5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsci5Bbm5vdGF0aW9uRmxhZy5ISURERU4pJiYhdGhpcy5faGFzRmxhZyhlLHIuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKX1tdXN0QmVWaWV3ZWQoZSx0KXtjb25zdCBhPWU/LmdldCh0aGlzLmRhdGEuaWQpPy5ub1ZpZXc7cmV0dXJuIHZvaWQgMCE9PWE/IWE6dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxyLkFubm90YXRpb25GbGFnLkhJRERFTil9bXVzdEJlUHJpbnRlZChlKXtjb25zdCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5ub1ByaW50O3JldHVybiB2b2lkIDAhPT10PyF0OnRoaXMucHJpbnRhYmxlfWdldCB2aWV3YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwPT09dGhpcy5mbGFnc3x8dGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKSl9Z2V0IHByaW50YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwIT09dGhpcy5mbGFncyYmdGhpcy5faXNQcmludGFibGUodGhpcy5mbGFncykpfV9wYXJzZVN0cmluZ0hlbHBlcihlKXtjb25zdCB0PSJzdHJpbmciPT10eXBlb2YgZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlKToiIjtyZXR1cm57c3RyOnQsZGlyOnQmJiJydGwiPT09KDAsbC5iaWRpKSh0KS5kaXI/InJ0bCI6Imx0ciJ9fXNldERlZmF1bHRBcHBlYXJhbmNlKGUpe2NvbnN0e2RpY3Q6dCxhbm5vdGF0aW9uR2xvYmFsczphfT1lLHI9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiREEifSl8fGEuYWNyb0Zvcm0uZ2V0KCJEQSIpO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSJzdHJpbmciPT10eXBlb2Ygcj9yOiIiO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9KDAsaS5wYXJzZURlZmF1bHRBcHBlYXJhbmNlKSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSl9c2V0VGl0bGUoZSl7dGhpcy5fdGl0bGU9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0Q29udGVudHMoZSl7dGhpcy5fY29udGVudHM9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0TW9kaWZpY2F0aW9uRGF0ZShlKXt0aGlzLm1vZGlmaWNhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1zZXRGbGFncyhlKXt0aGlzLmZsYWdzPU51bWJlci5pc0ludGVnZXIoZSkmJmU+MD9lOjB9aGFzRmxhZyhlKXtyZXR1cm4gdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLGUpfXNldFJlY3RhbmdsZShlKXt0aGlzLnJlY3RhbmdsZT1BcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZSk6WzAsMCwwLDBdfXNldENvbG9yKGUpe3RoaXMuY29sb3I9Z2V0UmdiQ29sb3IoZSl9c2V0TGluZUVuZGluZ3MoZSl7dGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl07aWYoQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcihsZXQgdD0wO3Q8Mjt0Kyspe2NvbnN0IGE9ZVt0XTtpZihhIGluc3RhbmNlb2Ygcy5OYW1lKXN3aXRjaChhLm5hbWUpe2Nhc2UiTm9uZSI6Y29udGludWU7Y2FzZSJTcXVhcmUiOmNhc2UiQ2lyY2xlIjpjYXNlIkRpYW1vbmQiOmNhc2UiT3BlbkFycm93IjpjYXNlIkNsb3NlZEFycm93IjpjYXNlIkJ1dHQiOmNhc2UiUk9wZW5BcnJvdyI6Y2FzZSJSQ2xvc2VkQXJyb3ciOmNhc2UiU2xhc2giOnRoaXMubGluZUVuZGluZ3NbdF09YS5uYW1lO2NvbnRpbnVlfSgwLHIud2FybikoYElnbm9yaW5nIGludmFsaWQgbGluZUVuZGluZzogJHthfWApfX1zZXRSb3RhdGlvbihlLHQpe3RoaXMucm90YXRpb249MDtsZXQgYT1lIGluc3RhbmNlb2Ygcy5EaWN0P2UuZ2V0KCJSIil8fDA6dC5nZXQoIlJvdGF0ZSIpfHwwO2lmKE51bWJlci5pc0ludGVnZXIoYSkmJjAhPT1hKXthJT0zNjA7YTwwJiYoYSs9MzYwKTthJTkwPT0wJiYodGhpcy5yb3RhdGlvbj1hKX19c2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhlKXtpZihlIGluc3RhbmNlb2Ygcy5EaWN0KXt0aGlzLmJvcmRlckNvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCk7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9Z2V0UmdiQ29sb3IoZS5nZXRBcnJheSgiQkciKSxudWxsKX1lbHNlIHRoaXMuYm9yZGVyQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbH1zZXRCb3JkZXJTdHlsZShlKXt0aGlzLmJvcmRlclN0eWxlPW5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGU7aWYoZSBpbnN0YW5jZW9mIHMuRGljdClpZihlLmhhcygiQlMiKSl7Y29uc3QgdD1lLmdldCgiQlMiKSxhPXQuZ2V0KCJUeXBlIik7aWYoIWF8fCgwLHMuaXNOYW1lKShhLCJCb3JkZXIiKSl7dGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCh0LmdldCgiVyIpLHRoaXMucmVjdGFuZ2xlKTt0aGlzLmJvcmRlclN0eWxlLnNldFN0eWxlKHQuZ2V0KCJTIikpO3RoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KHQuZ2V0QXJyYXkoIkQiKSl9fWVsc2UgaWYoZS5oYXMoIkJvcmRlciIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkJvcmRlciIpO2lmKEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPj0zKXt0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXModFswXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyh0WzFdKTt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHRbMl0sdGhpcy5yZWN0YW5nbGUpOzQ9PT10Lmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodFszXSwhMCl9fWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX1zZXRBcHBlYXJhbmNlKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO2NvbnN0IHQ9ZS5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3QgYT10LmdldCgiTiIpO2lmKGEgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0pe3RoaXMuYXBwZWFyYW5jZT1hO3JldHVybn1pZighKGEgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCByPWUuZ2V0KCJBUyIpO2lmKCEociBpbnN0YW5jZW9mIHMuTmFtZSYmYS5oYXMoci5uYW1lKSkpcmV0dXJuO2NvbnN0IG49YS5nZXQoci5uYW1lKTtuIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtJiYodGhpcy5hcHBlYXJhbmNlPW4pfXNldE9wdGlvbmFsQ29udGVudChlKXt0aGlzLm9jPW51bGw7Y29uc3QgdD1lLmdldCgiT0MiKTt0IGluc3RhbmNlb2Ygcy5OYW1lPygwLHIud2FybikoInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOnQgaW5zdGFuY2VvZiBzLkRpY3QmJih0aGlzLm9jPXQpfWxvYWRSZXNvdXJjZXMoZSx0KXtyZXR1cm4gdC5kaWN0LmdldEFzeW5jKCJSZXNvdXJjZXMiKS50aGVuKCh0PT57aWYoIXQpcmV0dXJuO3JldHVybiBuZXcgZy5PYmplY3RMb2FkZXIodCxlLHQueHJlZikubG9hZCgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSl9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSl7Y29uc3QgYz10aGlzLmRhdGE7bGV0IGw9dGhpcy5hcHBlYXJhbmNlO2NvbnN0IGg9ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmYSZyLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSk7aWYoIWwpe2lmKCFoKXJldHVybntvcExpc3Q6bmV3IHAuT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX07bD1uZXcgby5TdHJpbmdTdHJlYW0oIiIpO2wuZGljdD1uZXcgcy5EaWN0fWNvbnN0IHU9bC5kaWN0LGQ9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSxsKSxmPXUuZ2V0QXJyYXkoIkJCb3giKXx8WzAsMCwxLDFdLGc9dS5nZXRBcnJheSgiTWF0cml4Iil8fFsxLDAsMCwxLDAsMF0sbT1nZXRUcmFuc2Zvcm1NYXRyaXgoYy5yZWN0LGYsZyksYj1uZXcgcC5PcGVyYXRvckxpc3Q7bGV0IHk7dGhpcy5vYyYmKHk9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT15JiZiLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHldKTtiLmFkZE9wKHIuT1BTLmJlZ2luQW5ub3RhdGlvbixbYy5pZCxjLnJlY3QsbSxnLGhdKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmwsdGFzazp0LHJlc291cmNlczpkLG9wZXJhdG9yTGlzdDpiLGZhbGxiYWNrRm9udERpY3Q6dGhpcy5fZmFsbGJhY2tGb250RGljdH0pO2IuYWRkT3Aoci5PUFMuZW5kQW5ub3RhdGlvbixbXSk7dm9pZCAwIT09eSYmYi5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKTt0aGlzLnJlc2V0KCk7cmV0dXJue29wTGlzdDpiLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczpofX1hc3luYyBzYXZlKGUsdCxhKXtyZXR1cm4gbnVsbH1nZXQgaGFzVGV4dENvbnRlbnQoKXtyZXR1cm4hMX1hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoZSx0LGEpe2lmKCF0aGlzLmFwcGVhcmFuY2UpcmV0dXJuO2NvbnN0IG49YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiRm9udCIsIlByb3BlcnRpZXMiLCJYT2JqZWN0Il0sdGhpcy5hcHBlYXJhbmNlKSxpPVtdLHM9W107bGV0IG89bnVsbDtjb25zdCBjPXtkZXNpcmVkU2l6ZTpNYXRoLkluZmluaXR5LHJlYWR5OiEwLGVucXVldWUoZSx0KXtmb3IoY29uc3QgdCBvZiBlLml0ZW1zKWlmKHZvaWQgMCE9PXQuc3RyKXtvfHw9dC50cmFuc2Zvcm0uc2xpY2UoLTIpO3MucHVzaCh0LnN0cik7aWYodC5oYXNFT0wpe2kucHVzaChzLmpvaW4oIiIpKTtzLmxlbmd0aD0wfX19fTthd2FpdCBlLmdldFRleHRDb250ZW50KHtzdHJlYW06dGhpcy5hcHBlYXJhbmNlLHRhc2s6dCxyZXNvdXJjZXM6bixpbmNsdWRlTWFya2VkQ29udGVudDohMCxzaW5rOmMsdmlld0JveDphfSk7dGhpcy5yZXNldCgpO3MubGVuZ3RoJiZpLnB1c2gocy5qb2luKCIiKSk7aWYoaS5sZW5ndGg+MXx8aVswXSl7Y29uc3QgZT10aGlzLmFwcGVhcmFuY2UuZGljdCx0PWUuZ2V0QXJyYXkoIkJCb3giKXx8WzAsMCwxLDFdLGE9ZS5nZXRBcnJheSgiTWF0cml4Iil8fFsxLDAsMCwxLDAsMF0sbj10aGlzLmRhdGEucmVjdCxzPWdldFRyYW5zZm9ybU1hdHJpeChuLHQsYSk7c1s0XS09blswXTtzWzVdLT1uWzFdO289ci5VdGlsLmFwcGx5VHJhbnNmb3JtKG8scyk7bz1yLlV0aWwuYXBwbHlUcmFuc2Zvcm0obyxhKTt0aGlzLmRhdGEudGV4dFBvc2l0aW9uPW87dGhpcy5kYXRhLnRleHRDb250ZW50PWl9fWdldEZpZWxkT2JqZWN0KCl7cmV0dXJuIHRoaXMuZGF0YS5raWRJZHM/e2lkOnRoaXMuZGF0YS5pZCxhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsdHlwZToiIixraWRJZHM6dGhpcy5kYXRhLmtpZElkcyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgscm90YXRpb246dGhpcy5yb3RhdGlvbn06bnVsbH1yZXNldCgpe2Zvcihjb25zdCBlIG9mIHRoaXMuX3N0cmVhbXMpZS5yZXNldCgpfV9jb25zdHJ1Y3RGaWVsZE5hbWUoZSl7aWYoIWUuaGFzKCJUIikmJiFlLmhhcygiUGFyZW50IikpeygwLHIud2FybikoIlVua25vd24gZmllbGQgbmFtZSwgZmFsbGluZyBiYWNrIHRvIGVtcHR5IGZpZWxkIG5hbWUuIik7cmV0dXJuIiJ9aWYoIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiVCIpKTtjb25zdCB0PVtdO2UuaGFzKCJUIikmJnQudW5zaGlmdCgoMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiVCIpKSk7bGV0IGE9ZTtjb25zdCBuPW5ldyBzLlJlZlNldDtlLm9iaklkJiZuLnB1dChlLm9iaklkKTtmb3IoO2EuaGFzKCJQYXJlbnQiKTspe2E9YS5nZXQoIlBhcmVudCIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCl8fGEub2JqSWQmJm4uaGFzKGEub2JqSWQpKWJyZWFrO2Eub2JqSWQmJm4ucHV0KGEub2JqSWQpO2EuaGFzKCJUIikmJnQudW5zaGlmdCgoMCxyLnN0cmluZ1RvUERGU3RyaW5nKShhLmdldCgiVCIpKSl9cmV0dXJuIHQuam9pbigiLiIpfX10LkFubm90YXRpb249QW5ub3RhdGlvbjtjbGFzcyBBbm5vdGF0aW9uQm9yZGVyU3R5bGV7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTE7dGhpcy5zdHlsZT1yLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7dGhpcy5kYXNoQXJyYXk9WzNdO3RoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz0wO3RoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9MH1zZXRXaWR0aChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwLDBdO2lmKGUgaW5zdGFuY2VvZiBzLk5hbWUpdGhpcy53aWR0aD0wO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZihlPjApe2NvbnN0IGE9KHRbMl0tdFswXSkvMixuPSh0WzNdLXRbMV0pLzI7aWYoYT4wJiZuPjAmJihlPmF8fGU+bikpeygwLHIud2FybikoYEFubm90YXRpb25Cb3JkZXJTdHlsZS5zZXRXaWR0aCAtIGlnbm9yaW5nIHdpZHRoOiAke2V9YCk7ZT0xfX10aGlzLndpZHRoPWV9fXNldFN0eWxlKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDticmVhaztjYXNlIkQiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkRBU0hFRDticmVhaztjYXNlIkIiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ7YnJlYWs7Y2FzZSJJIjp0aGlzLnN0eWxlPXIuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDticmVhaztjYXNlIlUiOnRoaXMuc3R5bGU9ci5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORX19c2V0RGFzaEFycmF5KGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7bGV0IGE9ITAscj0hMDtmb3IoY29uc3QgdCBvZiBlKXtpZighKCt0Pj0wKSl7YT0hMTticmVha310PjAmJihyPSExKX1pZihhJiYhcil7dGhpcy5kYXNoQXJyYXk9ZTt0JiZ0aGlzLnNldFN0eWxlKHMuTmFtZS5nZXQoIkQiKSl9ZWxzZSB0aGlzLndpZHRoPTB9ZWxzZSBlJiYodGhpcy53aWR0aD0wKX1zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKGUpe051bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9ZSl9c2V0VmVydGljYWxDb3JuZXJSYWRpdXMoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9ZSl9fXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlPUFubm90YXRpb25Cb3JkZXJTdHlsZTtjbGFzcyBNYXJrdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnR9PWU7aWYodC5oYXMoIklSVCIpKXtjb25zdCBlPXQuZ2V0UmF3KCJJUlQiKTt0aGlzLmRhdGEuaW5SZXBseVRvPWUgaW5zdGFuY2VvZiBzLlJlZj9lLnRvU3RyaW5nKCk6bnVsbDtjb25zdCBhPXQuZ2V0KCJSVCIpO3RoaXMuZGF0YS5yZXBseVR5cGU9YSBpbnN0YW5jZW9mIHMuTmFtZT9hLm5hbWU6ci5Bbm5vdGF0aW9uUmVwbHlUeXBlLlJFUExZfWxldCBhPW51bGw7aWYodGhpcy5kYXRhLnJlcGx5VHlwZT09PXIuQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCl7Y29uc3QgZT10LmdldCgiSVJUIik7dGhpcy5zZXRUaXRsZShlLmdldCgiVCIpKTt0aGlzLmRhdGEudGl0bGVPYmo9dGhpcy5fdGl0bGU7dGhpcy5zZXRDb250ZW50cyhlLmdldCgiQ29udGVudHMiKSk7dGhpcy5kYXRhLmNvbnRlbnRzT2JqPXRoaXMuX2NvbnRlbnRzO2lmKGUuaGFzKCJDcmVhdGlvbkRhdGUiKSl7dGhpcy5zZXRDcmVhdGlvbkRhdGUoZS5nZXQoIkNyZWF0aW9uRGF0ZSIpKTt0aGlzLmRhdGEuY3JlYXRpb25EYXRlPXRoaXMuY3JlYXRpb25EYXRlfWVsc2UgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT1udWxsO2lmKGUuaGFzKCJNIikpe3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShlLmdldCgiTSIpKTt0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGV9ZWxzZSB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsO2E9ZS5nZXRSYXcoIlBvcHVwIik7aWYoZS5oYXMoIkMiKSl7dGhpcy5zZXRDb2xvcihlLmdldEFycmF5KCJDIikpO3RoaXMuZGF0YS5jb2xvcj10aGlzLmNvbG9yfWVsc2UgdGhpcy5kYXRhLmNvbG9yPW51bGx9ZWxzZXt0aGlzLmRhdGEudGl0bGVPYmo9dGhpcy5fdGl0bGU7dGhpcy5zZXRDcmVhdGlvbkRhdGUodC5nZXQoIkNyZWF0aW9uRGF0ZSIpKTt0aGlzLmRhdGEuY3JlYXRpb25EYXRlPXRoaXMuY3JlYXRpb25EYXRlO2E9dC5nZXRSYXcoIlBvcHVwIik7dC5oYXMoIkMiKXx8KHRoaXMuZGF0YS5jb2xvcj1udWxsKX10aGlzLmRhdGEucG9wdXBSZWY9YSBpbnN0YW5jZW9mIHMuUmVmP2EudG9TdHJpbmcoKTpudWxsO3QuaGFzKCJSQyIpJiYodGhpcy5kYXRhLnJpY2hUZXh0PWIuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbCh0LmdldCgiUkMiKSkpfXNldENyZWF0aW9uRGF0ZShlKXt0aGlzLmNyZWF0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfV9zZXREZWZhdWx0QXBwZWFyYW5jZShlKXtsZXR7eHJlZjp0LGV4dHJhOmEsc3Ryb2tlQ29sb3I6cixmaWxsQ29sb3I6bixibGVuZE1vZGU6aSxzdHJva2VBbHBoYTpjLGZpbGxBbHBoYTpsLHBvaW50c0NhbGxiYWNrOmh9PWUsdT1OdW1iZXIuTUFYX1ZBTFVFLGQ9TnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NSU5fVkFMVUUsZz1OdW1iZXIuTUlOX1ZBTFVFO2NvbnN0IHA9WyJxIl07YSYmcC5wdXNoKGEpO3ImJnAucHVzaChgJHtyWzBdfSAke3JbMV19ICR7clsyXX0gUkdgKTtuJiZwLnB1c2goYCR7blswXX0gJHtuWzFdfSAke25bMl19IHJnYCk7bGV0IG09dGhpcy5kYXRhLnF1YWRQb2ludHM7bXx8KG09W1t7eDp0aGlzLnJlY3RhbmdsZVswXSx5OnRoaXMucmVjdGFuZ2xlWzNdfSx7eDp0aGlzLnJlY3RhbmdsZVsyXSx5OnRoaXMucmVjdGFuZ2xlWzNdfSx7eDp0aGlzLnJlY3RhbmdsZVswXSx5OnRoaXMucmVjdGFuZ2xlWzFdfSx7eDp0aGlzLnJlY3RhbmdsZVsyXSx5OnRoaXMucmVjdGFuZ2xlWzFdfV1dKTtmb3IoY29uc3QgZSBvZiBtKXtjb25zdFt0LGEscixuXT1oKHAsZSk7dT1NYXRoLm1pbih1LHQpO2Y9TWF0aC5tYXgoZixhKTtkPU1hdGgubWluKGQscik7Zz1NYXRoLm1heChnLG4pfXAucHVzaCgiUSIpO2NvbnN0IGI9bmV3IHMuRGljdCh0KSx5PW5ldyBzLkRpY3QodCk7eS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7Y29uc3Qgdz1uZXcgby5TdHJpbmdTdHJlYW0ocC5qb2luKCIgIikpO3cuZGljdD15O2Iuc2V0KCJGbTAiLHcpO2NvbnN0IFM9bmV3IHMuRGljdCh0KTtpJiZTLnNldCgiQk0iLHMuTmFtZS5nZXQoaSkpOyJudW1iZXIiPT10eXBlb2YgYyYmUy5zZXQoIkNBIixjKTsibnVtYmVyIj09dHlwZW9mIGwmJlMuc2V0KCJjYSIsbCk7Y29uc3QgeD1uZXcgcy5EaWN0KHQpO3guc2V0KCJHUzAiLFMpO2NvbnN0IEM9bmV3IHMuRGljdCh0KTtDLnNldCgiRXh0R1N0YXRlIix4KTtDLnNldCgiWE9iamVjdCIsYik7Y29uc3Qgdj1uZXcgcy5EaWN0KHQpO3Yuc2V0KCJSZXNvdXJjZXMiLEMpO2NvbnN0IGs9dGhpcy5kYXRhLnJlY3Q9W3UsZCxmLGddO3Yuc2V0KCJCQm94IixrKTt0aGlzLmFwcGVhcmFuY2U9bmV3IG8uU3RyaW5nU3RyZWFtKCIvR1MwIGdzIC9GbTAgRG8iKTt0aGlzLmFwcGVhcmFuY2UuZGljdD12O3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2Usdyl9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0Fubm90YXRpb24oZSx0LGEscil7Y29uc3Qgbj10LnJlZnx8PWUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksaT1hd2FpdCB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0odCxlLHIpLHM9W107bGV0IG87aWYoaSl7Y29uc3Qgcj1lLmdldE5ld1RlbXBvcmFyeVJlZigpO289dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7YXBSZWY6cn0pO2F3YWl0KDAsbS53cml0ZU9iamVjdCkocixpLHMsZSk7YS5wdXNoKHtyZWY6cixkYXRhOnMuam9pbigiIil9KX1lbHNlIG89dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7fSk7TnVtYmVyLmlzSW50ZWdlcih0LnBhcmVudFRyZWVJZCkmJm8uc2V0KCJTdHJ1Y3RQYXJlbnQiLHQucGFyZW50VHJlZUlkKTtzLmxlbmd0aD0wO2F3YWl0KDAsbS53cml0ZU9iamVjdCkobixvLHMsZSk7cmV0dXJue3JlZjpuLGRhdGE6cy5qb2luKCIiKX19c3RhdGljIGFzeW5jIGNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLHQsYSxyKXtjb25zdCBuPWF3YWl0IHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShhLHQsciksaT10aGlzLmNyZWF0ZU5ld0RpY3QoYSx0LHthcDpufSkscz1uZXcgdGhpcy5wcm90b3R5cGUuY29uc3RydWN0b3Ioe2RpY3Q6aSx4cmVmOnQsYW5ub3RhdGlvbkdsb2JhbHM6ZSxldmFsdWF0b3JPcHRpb25zOnIuZXZhbHVhdG9yT3B0aW9uc30pO2EucmVmJiYocy5yZWY9cy5yZWZUb1JlcGxhY2U9YS5yZWYpO3JldHVybiBzfX10Lk1hcmt1cEFubm90YXRpb249TWFya3VwQW5ub3RhdGlvbjtjbGFzcyBXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphLGFubm90YXRpb25HbG9iYWxzOml9PWUsbz10aGlzLmRhdGE7dGhpcy5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzO28uYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ7dm9pZCAwPT09by5maWVsZE5hbWUmJihvLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUodCkpO3ZvaWQgMD09PW8uYWN0aW9ucyYmKG8uYWN0aW9ucz0oMCxuLmNvbGxlY3RBY3Rpb25zKShhLHQsci5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSk7bGV0IGM9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiViIsZ2V0QXJyYXk6ITB9KTtvLmZpZWxkVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGMpO2NvbnN0IGw9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiRFYiLGdldEFycmF5OiEwfSk7by5kZWZhdWx0RmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUobCk7aWYodm9pZCAwPT09YyYmaS54ZmFEYXRhc2V0cyl7Y29uc3QgZT10aGlzLl90aXRsZS5zdHI7aWYoZSl7dGhpcy5faGFzVmFsdWVGcm9tWEZBPSEwO28uZmllbGRWYWx1ZT1jPWkueGZhRGF0YXNldHMuZ2V0VmFsdWUoZSl9fXZvaWQgMD09PWMmJm51bGwhPT1vLmRlZmF1bHRGaWVsZFZhbHVlJiYoby5maWVsZFZhbHVlPW8uZGVmYXVsdEZpZWxkVmFsdWUpO28uYWx0ZXJuYXRpdmVUZXh0PSgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJUVSIpfHwiIik7dGhpcy5zZXREZWZhdWx0QXBwZWFyYW5jZShlKTtvLmhhc0FwcGVhcmFuY2V8fD10aGlzLl9uZWVkQXBwZWFyYW5jZXMmJnZvaWQgMCE9PW8uZmllbGRWYWx1ZSYmbnVsbCE9PW8uZmllbGRWYWx1ZTtjb25zdCBoPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkZUIn0pO28uZmllbGRUeXBlPWggaW5zdGFuY2VvZiBzLk5hbWU/aC5uYW1lOm51bGw7Y29uc3QgdT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJEUiJ9KSxkPWkuYWNyb0Zvcm0uZ2V0KCJEUiIpLGY9dGhpcy5hcHBlYXJhbmNlPy5kaWN0LmdldCgiUmVzb3VyY2VzIik7dGhpcy5fZmllbGRSZXNvdXJjZXM9e2xvY2FsUmVzb3VyY2VzOnUsYWNyb0Zvcm1SZXNvdXJjZXM6ZCxhcHBlYXJhbmNlUmVzb3VyY2VzOmYsbWVyZ2VkUmVzb3VyY2VzOnMuRGljdC5tZXJnZSh7eHJlZjphLGRpY3RBcnJheTpbdSxmLGRdLG1lcmdlU3ViRGljdHM6ITB9KX07by5maWVsZEZsYWdzPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6IkZmIn0pOyghTnVtYmVyLmlzSW50ZWdlcihvLmZpZWxkRmxhZ3MpfHxvLmZpZWxkRmxhZ3M8MCkmJihvLmZpZWxkRmxhZ3M9MCk7by5yZWFkT25seT10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpO28ucmVxdWlyZWQ9dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFUVVJUkVEKTtvLmhpZGRlbj10aGlzLl9oYXNGbGFnKG8uYW5ub3RhdGlvbkZsYWdzLHIuQW5ub3RhdGlvbkZsYWcuSElEREVOKXx8dGhpcy5faGFzRmxhZyhvLmFubm90YXRpb25GbGFncyxyLkFubm90YXRpb25GbGFnLk5PVklFVyl9X2RlY29kZUZvcm1WYWx1ZShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcigoZT0+InN0cmluZyI9PXR5cGVvZiBlKSkubWFwKChlPT4oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlKSkpOmUgaW5zdGFuY2VvZiBzLk5hbWU/KDAsci5zdHJpbmdUb1BERlN0cmluZykoZS5uYW1lKToic3RyaW5nIj09dHlwZW9mIGU/KDAsci5zdHJpbmdUb1BERlN0cmluZykoZSk6bnVsbH1oYXNGaWVsZEZsYWcoZSl7cmV0dXJuISEodGhpcy5kYXRhLmZpZWxkRmxhZ3MmZSl9X2lzVmlld2FibGUoZSl7cmV0dXJuIXRoaXMuX2hhc0ZsYWcoZSxyLkFubm90YXRpb25GbGFnLklOVklTSUJMRSl9bXVzdEJlVmlld2VkKGUsdCl7cmV0dXJuIHQ/dGhpcy52aWV3YWJsZTpzdXBlci5tdXN0QmVWaWV3ZWQoZSx0KSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxyLkFubm90YXRpb25GbGFnLk5PVklFVyl9Z2V0Um90YXRpb25NYXRyaXgoZSl7bGV0IHQ9ZT8uZ2V0KHRoaXMuZGF0YS5pZCk/LnJvdGF0aW9uO3ZvaWQgMD09PXQmJih0PXRoaXMucm90YXRpb24pO2lmKDA9PT10KXJldHVybiByLklERU5USVRZX01BVFJJWDtjb25zdCBhPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGk9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV07cmV0dXJuKDAsbi5nZXRSb3RhdGlvbk1hdHJpeCkodCxhLGkpfWdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhlKXtsZXQgdD1lPy5nZXQodGhpcy5kYXRhLmlkKT8ucm90YXRpb247dm9pZCAwPT09dCYmKHQ9dGhpcy5yb3RhdGlvbik7aWYoIXRoaXMuYmFja2dyb3VuZENvbG9yJiYhdGhpcy5ib3JkZXJDb2xvcilyZXR1cm4iIjtjb25zdCBhPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLHI9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sbj0wPT09dHx8MTgwPT09dD9gMCAwICR7YX0gJHtyfSByZWA6YDAgMCAke3J9ICR7YX0gcmVgO2xldCBzPSIiO3RoaXMuYmFja2dyb3VuZENvbG9yJiYocz1gJHsoMCxpLmdldFBkZkNvbG9yKSh0aGlzLmJhY2tncm91bmRDb2xvciwhMCl9ICR7bn0gZiBgKTtpZih0aGlzLmJvcmRlckNvbG9yKXtzKz1gJHt0aGlzLmJvcmRlclN0eWxlLndpZHRofHwxfSB3ICR7KDAsaS5nZXRQZGZDb2xvcikodGhpcy5ib3JkZXJDb2xvciwhMSl9ICR7bn0gUyBgfXJldHVybiBzfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQsYSxuLGkpe2lmKG4mJiEodGhpcyBpbnN0YW5jZW9mIFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24pJiYhdGhpcy5kYXRhLm5vSFRNTCYmIXRoaXMuZGF0YS5oYXNPd25DYW52YXMpcmV0dXJue29wTGlzdDpuZXcgcC5PcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiEwLHNlcGFyYXRlQ2FudmFzOiExfTtpZighdGhpcy5faGFzVGV4dClyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7Y29uc3Qgcz1hd2FpdCB0aGlzLl9nZXRBcHBlYXJhbmNlKGUsdCxhLGkpO2lmKHRoaXMuYXBwZWFyYW5jZSYmbnVsbD09PXMpcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsYSxuLGkpO2NvbnN0IGM9bmV3IHAuT3BlcmF0b3JMaXN0O2lmKCF0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZXx8bnVsbD09PXMpcmV0dXJue29wTGlzdDpjLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX07Y29uc3QgbD0hISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzJiZhJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxoPVswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dLHU9Z2V0VHJhbnNmb3JtTWF0cml4KHRoaXMuZGF0YS5yZWN0LGgsWzEsMCwwLDEsMCwwXSk7bGV0IGQ7dGhpcy5vYyYmKGQ9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT1kJiZjLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGRdKTtjLmFkZE9wKHIuT1BTLmJlZ2luQW5ub3RhdGlvbixbdGhpcy5kYXRhLmlkLHRoaXMuZGF0YS5yZWN0LHUsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChpKSxsXSk7Y29uc3QgZj1uZXcgby5TdHJpbmdTdHJlYW0ocyk7YXdhaXQgZS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpmLHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpjfSk7Yy5hZGRPcChyLk9QUy5lbmRBbm5vdGF0aW9uLFtdKTt2b2lkIDAhPT1kJiZjLmFkZE9wKHIuT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pO3JldHVybntvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6bH19X2dldE1LRGljdChlKXtjb25zdCB0PW5ldyBzLkRpY3QobnVsbCk7ZSYmdC5zZXQoIlIiLGUpO3RoaXMuYm9yZGVyQ29sb3ImJnQuc2V0KCJCQyIsZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmJvcmRlckNvbG9yKSk7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJnQuc2V0KCJCRyIsZ2V0UGRmQ29sb3JBcnJheSh0aGlzLmJhY2tncm91bmRDb2xvcikpO3JldHVybiB0LnNpemU+MD90Om51bGx9YW1lbmRTYXZlZERpY3QoZSx0KXt9YXN5bmMgc2F2ZShlLHQsYSl7Y29uc3QgaT1hPy5nZXQodGhpcy5kYXRhLmlkKTtsZXQgYz1pPy52YWx1ZSxsPWk/LnJvdGF0aW9uO2lmKGM9PT10aGlzLmRhdGEuZmllbGRWYWx1ZXx8dm9pZCAwPT09Yyl7aWYoIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSYmdm9pZCAwPT09bClyZXR1cm4gbnVsbDtjfHw9dGhpcy5kYXRhLmZpZWxkVmFsdWV9aWYodm9pZCAwPT09bCYmIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSYmQXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJmMubGVuZ3RoPT09dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoJiZjLmV2ZXJ5KCgoZSx0KT0+ZT09PXRoaXMuZGF0YS5maWVsZFZhbHVlW3RdKSkpcmV0dXJuIG51bGw7dm9pZCAwPT09bCYmKGw9dGhpcy5yb3RhdGlvbik7bGV0IGg9bnVsbDtpZighdGhpcy5fbmVlZEFwcGVhcmFuY2VzKXtoPWF3YWl0IHRoaXMuX2dldEFwcGVhcmFuY2UoZSx0LHIuUmVuZGVyaW5nSW50ZW50RmxhZy5TQVZFLGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsfWxldCB1PSExO2lmKGg/Lm5lZWRBcHBlYXJhbmNlcyl7dT0hMDtoPW51bGx9Y29uc3R7eHJlZjpkfT1lLGY9ZC5mZXRjaElmUmVmKHRoaXMucmVmKTtpZighKGYgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybiBudWxsO2NvbnN0IGc9bmV3IHMuRGljdChkKTtmb3IoY29uc3QgZSBvZiBmLmdldEtleXMoKSkiQVAiIT09ZSYmZy5zZXQoZSxmLmdldFJhdyhlKSk7Y29uc3QgcD17cGF0aDp0aGlzLmRhdGEuZmllbGROYW1lLHZhbHVlOmN9LGVuY29kZXI9ZT0+KDAsbi5pc0FzY2lpKShlKT9lOigwLG4uc3RyaW5nVG9VVEYxNlN0cmluZykoZSwhMCk7Zy5zZXQoIlYiLEFycmF5LmlzQXJyYXkoYyk/Yy5tYXAoZW5jb2Rlcik6ZW5jb2RlcihjKSk7dGhpcy5hbWVuZFNhdmVkRGljdChhLGcpO2NvbnN0IGI9dGhpcy5fZ2V0TUtEaWN0KGwpO2ImJmcuc2V0KCJNSyIsYik7Y29uc3QgeT1bXSx3PVt7cmVmOnRoaXMucmVmLGRhdGE6IiIseGZhOnAsbmVlZEFwcGVhcmFuY2VzOnV9XTtpZihudWxsIT09aCl7Y29uc3QgZT1kLmdldE5ld1RlbXBvcmFyeVJlZigpLHQ9bmV3IHMuRGljdChkKTtnLnNldCgiQVAiLHQpO3Quc2V0KCJOIixlKTtjb25zdCBuPXRoaXMuX2dldFNhdmVGaWVsZFJlc291cmNlcyhkKSxpPW5ldyBvLlN0cmluZ1N0cmVhbShoKSxjPWkuZGljdD1uZXcgcy5EaWN0KGQpO2Muc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO2Muc2V0KCJSZXNvdXJjZXMiLG4pO2Muc2V0KCJCQm94IixbMCwwLHRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdXSk7Y29uc3QgbD10aGlzLmdldFJvdGF0aW9uTWF0cml4KGEpO2whPT1yLklERU5USVRZX01BVFJJWCYmYy5zZXQoIk1hdHJpeCIsbCk7YXdhaXQoMCxtLndyaXRlT2JqZWN0KShlLGkseSxkKTt3LnB1c2goe3JlZjplLGRhdGE6eS5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KTt5Lmxlbmd0aD0wfWcuc2V0KCJNIixgRDokeygwLHIuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTthd2FpdCgwLG0ud3JpdGVPYmplY3QpKHRoaXMucmVmLGcseSxkKTt3WzBdLmRhdGE9eS5qb2luKCIiKTtyZXR1cm4gd31hc3luYyBfZ2V0QXBwZWFyYW5jZShlLHQsYSxzKXtpZih0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpKXJldHVybiBudWxsO2NvbnN0IG89cz8uZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IGMsbDtpZihvKXtjPW8uZm9ybWF0dGVkVmFsdWV8fG8udmFsdWU7bD1vLnJvdGF0aW9ufWlmKHZvaWQgMD09PWwmJnZvaWQgMD09PWMmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXMmJighdGhpcy5faGFzVmFsdWVGcm9tWEZBfHx0aGlzLmFwcGVhcmFuY2UpKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMocyk7aWYodm9pZCAwPT09Yyl7Yz10aGlzLmRhdGEuZmllbGRWYWx1ZTtpZighYylyZXR1cm5gL1R4IEJNQyBxICR7aH1RIEVNQ2B9QXJyYXkuaXNBcnJheShjKSYmMT09PWMubGVuZ3RoJiYoYz1jWzBdKTsoMCxyLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiBjLCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpO2M9Yy50cmltKCk7aWYodGhpcy5kYXRhLmNvbWJvKXtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmZpbmQoKGU9PntsZXR7ZXhwb3J0VmFsdWU6dH09ZTtyZXR1cm4gYz09PXR9KSk7Yz1lPy5kaXNwbGF5VmFsdWV8fGN9aWYoIiI9PT1jKXJldHVybmAvVHggQk1DIHEgJHtofVEgRU1DYDt2b2lkIDA9PT1sJiYobD10aGlzLnJvdGF0aW9uKTtsZXQgdSxkPS0xO2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpe3U9Yy5zcGxpdCgvXHJcbj98XG4vKS5tYXAoKGU9PmUubm9ybWFsaXplKCJORkMiKSkpO2Q9dS5sZW5ndGh9ZWxzZSB1PVtjLnJlcGxhY2UoL1xyXG4/fFxuLywiIikubm9ybWFsaXplKCJORkMiKV07bGV0IGY9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sZz10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXTs5MCE9PWwmJjI3MCE9PWx8fChbZyxmXT1bZixnXSk7dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7bGV0IHAsbSxiLHk9YXdhaXQgV2lkZ2V0QW5ub3RhdGlvbi5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTtjb25zdCB3PVtdO2xldCBTPSExO2Zvcihjb25zdCBlIG9mIHUpe2NvbnN0IHQ9eS5lbmNvZGVTdHJpbmcoZSk7dC5sZW5ndGg+MSYmKFM9ITApO3cucHVzaCh0LmpvaW4oIiIpKX1pZihTJiZhJnIuUmVuZGVyaW5nSW50ZW50RmxhZy5TQVZFKXJldHVybntuZWVkQXBwZWFyYW5jZXM6ITB9O2lmKFMmJnRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBhPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixyPW5ldyBpLkZha2VVbmljb2RlRm9udChlLnhyZWYsYSkscz1yLmNyZWF0ZUZvbnRSZXNvdXJjZXModS5qb2luKCIiKSksbz1zLmdldFJhdygiRm9udCIpO2lmKHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7Y29uc3QgZT10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250Iik7Zm9yKGNvbnN0IHQgb2Ygby5nZXRLZXlzKCkpZS5zZXQodCxvLmdldFJhdyh0KSl9ZWxzZSB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuc2V0KCJGb250IixvKTtjb25zdCBsPXIuZm9udE5hbWUubmFtZTt5PWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx7Zm9udE5hbWU6bCxmb250U2l6ZTowfSxzKTtmb3IobGV0IGU9MCx0PXcubGVuZ3RoO2U8dDtlKyspd1tlXT0oMCxuLnN0cmluZ1RvVVRGMTZTdHJpbmcpKHVbZV0pO2NvbnN0IGg9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MDt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPWw7W3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCk7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT1ofWVsc2V7dGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLHIud2FybikoIl9nZXRBcHBlYXJhbmNlOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIik7W3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCl9bGV0IHg9eS5kZXNjZW50O3g9aXNOYU4oeCk/ci5CQVNFTElORV9GQUNUT1IqYjpNYXRoLm1heChyLkJBU0VMSU5FX0ZBQ1RPUipiLE1hdGguYWJzKHgpKm0pO2NvbnN0IEM9TWF0aC5taW4oTWF0aC5mbG9vcigoZi1tKS8yKSwxKSx2PXRoaXMuZGF0YS50ZXh0QWxpZ25tZW50O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UocCx3LHksbSxnLGYsdiwyLEMseCxiLHMpO2lmKHRoaXMuZGF0YS5jb21iKXJldHVybiB0aGlzLl9nZXRDb21iQXBwZWFyYW5jZShwLHksd1swXSxtLGcsZiwyLEMseCxiLHMpO2NvbnN0IGs9Qyt4O2lmKDA9PT12fHx2PjIpcmV0dXJuYC9UeCBCTUMgcSAke2h9QlQgYCtwK2AgMSAwIDAgMSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKDIpfSAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKGspfSBUbSAoJHsoMCxuLmVzY2FwZVN0cmluZykod1swXSl9KSBUaiBFVCBRIEVNQ2A7cmV0dXJuYC9UeCBCTUMgcSAke2h9QlQgYCtwK2AgMSAwIDAgMSAwIDAgVG0gJHt0aGlzLl9yZW5kZXJUZXh0KHdbMF0seSxtLGcsdix7c2hpZnQ6MH0sMixrKX0gRVQgUSBFTUNgfXN0YXRpYyBhc3luYyBfZ2V0Rm9udERhdGEoZSx0LGEscil7Y29uc3Qgbj1uZXcgcC5PcGVyYXRvckxpc3QsaT17Zm9udDpudWxsLGNsb25lKCl7cmV0dXJuIHRoaXN9fSx7Zm9udE5hbWU6byxmb250U2l6ZTpjfT1hO2F3YWl0IGUuaGFuZGxlU2V0Rm9udChyLFtvJiZzLk5hbWUuZ2V0KG8pLGNdLG51bGwsbix0LGksbnVsbCk7cmV0dXJuIGkuZm9udH1fZ2V0VGV4dFdpZHRoKGUsdCl7cmV0dXJuIHQuY2hhcnNUb0dseXBocyhlKS5yZWR1Y2UoKChlLHQpPT5lK3Qud2lkdGgpLDApLzFlM31fY29tcHV0ZUZvbnRTaXplKGUsdCxhLG4scyl7bGV0e2ZvbnRTaXplOm99PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsYz0ob3x8MTIpKnIuTElORV9GQUNUT1IsbD1NYXRoLnJvdW5kKGUvYyk7aWYoIW8pe2NvbnN0IHJvdW5kV2l0aFR3b0RpZ2l0cz1lPT5NYXRoLmZsb29yKDEwMCplKS8xMDA7aWYoLTE9PT1zKXtjb25zdCBpPXRoaXMuX2dldFRleHRXaWR0aChhLG4pO289cm91bmRXaXRoVHdvRGlnaXRzKE1hdGgubWluKGUvci5MSU5FX0ZBQ1RPUixpPnQ/dC9pOjEvMCkpO2w9MX1lbHNle2NvbnN0IGk9YS5zcGxpdCgvXHJcbj98XG4vKSxoPVtdO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IHQ9bi5lbmNvZGVTdHJpbmcoZSkuam9pbigiIiksYT1uLmNoYXJzVG9HbHlwaHModCkscj1uLmdldENoYXJQb3NpdGlvbnModCk7aC5wdXNoKHtsaW5lOnQsZ2x5cGhzOmEscG9zaXRpb25zOnJ9KX1jb25zdCBpc1Rvb0JpZz1hPT57bGV0IHI9MDtmb3IoY29uc3QgaSBvZiBoKXtyKz10aGlzLl9zcGxpdExpbmUobnVsbCxuLGEsdCxpKS5sZW5ndGgqYTtpZihyPmUpcmV0dXJuITB9cmV0dXJuITF9O2w9TWF0aC5tYXgobCxzKTtmb3IoOzspe2M9ZS9sO289cm91bmRXaXRoVHdvRGlnaXRzKGMvci5MSU5FX0ZBQ1RPUik7aWYoIWlzVG9vQmlnKG8pKWJyZWFrO2wrK319Y29uc3R7Zm9udE5hbWU6aCxmb250Q29sb3I6dX09dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTt0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0oMCxpLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7Zm9udFNpemU6byxmb250TmFtZTpoLGZvbnRDb2xvcjp1fSl9cmV0dXJuW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLG8sZS9sXX1fcmVuZGVyVGV4dChlLHQsYSxyLGkscyxvLGMpe2xldCBsO2lmKDE9PT1pKXtsPShyLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEpLzJ9ZWxzZSBpZigyPT09aSl7bD1yLXRoaXMuX2dldFRleHRXaWR0aChlLHQpKmEtb31lbHNlIGw9bztjb25zdCBoPSgwLG4ubnVtYmVyVG9TdHJpbmcpKGwtcy5zaGlmdCk7cy5zaGlmdD1sO3JldHVybmAke2h9ICR7Yz0oMCxuLm51bWJlclRvU3RyaW5nKShjKX0gVGQgKCR7KDAsbi5lc2NhcGVTdHJpbmcpKGUpfSkgVGpgfV9nZXRTYXZlRmllbGRSZXNvdXJjZXMoZSl7Y29uc3R7bG9jYWxSZXNvdXJjZXM6dCxhcHBlYXJhbmNlUmVzb3VyY2VzOmEsYWNyb0Zvcm1SZXNvdXJjZXM6cn09dGhpcy5fZmllbGRSZXNvdXJjZXMsbj10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPy5mb250TmFtZTtpZighbilyZXR1cm4gdHx8cy5EaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3QsYV0paWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7Y29uc3QgdD1lLmdldCgiRm9udCIpO2lmKHQgaW5zdGFuY2VvZiBzLkRpY3QmJnQuaGFzKG4pKXJldHVybiBlfWlmKHIgaW5zdGFuY2VvZiBzLkRpY3Qpe2NvbnN0IGE9ci5nZXQoIkZvbnQiKTtpZihhIGluc3RhbmNlb2Ygcy5EaWN0JiZhLmhhcyhuKSl7Y29uc3Qgcj1uZXcgcy5EaWN0KGUpO3Iuc2V0KG4sYS5nZXRSYXcobikpO2NvbnN0IGk9bmV3IHMuRGljdChlKTtpLnNldCgiRm9udCIscik7cmV0dXJuIHMuRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbaSx0XSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiB0fHxzLkRpY3QuZW1wdHl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gbnVsbH19Y2xhc3MgVGV4dFdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLnJlYWRPbmx5JiYhdGhpcy5kYXRhLm5vSFRNTDt0aGlzLl9oYXNUZXh0PSEwO2NvbnN0IHQ9ZS5kaWN0OyJzdHJpbmciIT10eXBlb2YgdGhpcy5kYXRhLmZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT0iIik7bGV0IGE9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiUSJ9KTsoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MHx8YT4yKSYmKGE9bnVsbCk7dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ9YTtsZXQgaT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJNYXhMZW4ifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKGkpfHxpPDApJiYoaT0wKTt0aGlzLmRhdGEubWF4TGVuPWk7dGhpcy5kYXRhLm11bHRpTGluZT10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKTt0aGlzLmRhdGEuY29tYj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQikmJiF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElMSU5FKSYmIXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuRklMRVNFTEVDVCkmJjAhPT10aGlzLmRhdGEubWF4TGVuO3RoaXMuZGF0YS5kb05vdFNjcm9sbD10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuRE9OT1RTQ1JPTEwpfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiEhdGhpcy5hcHBlYXJhbmNlJiYhdGhpcy5fbmVlZEFwcGVhcmFuY2VzfV9nZXRDb21iQXBwZWFyYW5jZShlLHQsYSxyLGkscyxvLGMsbCxoLHUpe2NvbnN0IGQ9aS90aGlzLmRhdGEubWF4TGVuLGY9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXModSksZz1bXSxwPXQuZ2V0Q2hhclBvc2l0aW9ucyhhKTtmb3IoY29uc3RbZSx0XW9mIHApZy5wdXNoKGAoJHsoMCxuLmVzY2FwZVN0cmluZykoYS5zdWJzdHJpbmcoZSx0KSl9KSBUamApO2NvbnN0IG09Zy5qb2luKGAgJHsoMCxuLm51bWJlclRvU3RyaW5nKShkKX0gMCBUZCBgKTtyZXR1cm5gL1R4IEJNQyBxICR7Zn1CVCBgK2UrYCAxIDAgMCAxICR7KDAsbi5udW1iZXJUb1N0cmluZykobyl9ICR7KDAsbi5udW1iZXJUb1N0cmluZykoYytsKX0gVG0gJHttfSBFVCBRIEVNQ2B9X2dldE11bHRpbGluZUFwcGVhcmFuY2UoZSx0LGEscixpLHMsbyxjLGwsaCx1LGQpe2NvbnN0IGY9W10sZz1pLTIqYyxwPXtzaGlmdDowfTtmb3IobGV0IGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49dFtlXSxzPXRoaXMuX3NwbGl0TGluZShuLGEscixnKTtmb3IobGV0IHQ9MCxuPXMubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49c1t0XSxkPTA9PT1lJiYwPT09dD8tbC0odS1oKTotdTtmLnB1c2godGhpcy5fcmVuZGVyVGV4dChuLGEscixpLG8scCxjLGQpKX19Y29uc3QgbT10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhkKSxiPWYuam9pbigiXG4iKTtyZXR1cm5gL1R4IEJNQyBxICR7bX1CVCBgK2UrYCAxIDAgMCAxIDAgJHsoMCxuLm51bWJlclRvU3RyaW5nKShzKX0gVG0gJHtifSBFVCBRIEVNQ2B9X3NwbGl0TGluZShlLHQsYSxyKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06e307ZT1uLmxpbmV8fGU7Y29uc3QgaT1uLmdseXBoc3x8dC5jaGFyc1RvR2x5cGhzKGUpO2lmKGkubGVuZ3RoPD0xKXJldHVybltlXTtjb25zdCBzPW4ucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSksbz1hLzFlMyxjPVtdO2xldCBsPS0xLGg9LTEsdT0tMSxkPTAsZj0wO2ZvcihsZXQgdD0wLGE9aS5sZW5ndGg7dDxhO3QrKyl7Y29uc3RbYSxuXT1zW3RdLGc9aVt0XSxwPWcud2lkdGgqbztpZigiICI9PT1nLnVuaWNvZGUpaWYoZitwPnIpe2MucHVzaChlLnN1YnN0cmluZyhkLGEpKTtkPWE7Zj1wO2w9LTE7dT0tMX1lbHNle2YrPXA7bD1hO2g9bjt1PXR9ZWxzZSBpZihmK3A+cilpZigtMSE9PWwpe2MucHVzaChlLnN1YnN0cmluZyhkLGgpKTtkPWg7dD11KzE7bD0tMTtmPTB9ZWxzZXtjLnB1c2goZS5zdWJzdHJpbmcoZCxhKSk7ZD1hO2Y9cH1lbHNlIGYrPXB9ZDxlLmxlbmd0aCYmYy5wdXNoKGUuc3Vic3RyaW5nKGQsZS5sZW5ndGgpKTtyZXR1cm4gY31nZXRGaWVsZE9iamVjdCgpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1jbGFzcyBCdXR0b25XaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPW51bGw7dGhpcy5kYXRhLmNoZWNrQm94PSF0aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO3RoaXMuZGF0YS5yYWRpb0J1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhyLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO3RoaXMuZGF0YS5wdXNoQnV0dG9uPXRoaXMuaGFzRmllbGRGbGFnKHIuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTt0aGlzLmRhdGEuaXNUb29sdGlwT25seT0hMTtpZih0aGlzLmRhdGEuY2hlY2tCb3gpdGhpcy5fcHJvY2Vzc0NoZWNrQm94KGUpO2Vsc2UgaWYodGhpcy5kYXRhLnJhZGlvQnV0dG9uKXRoaXMuX3Byb2Nlc3NSYWRpb0J1dHRvbihlKTtlbHNlIGlmKHRoaXMuZGF0YS5wdXNoQnV0dG9uKXt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSEwO3RoaXMuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpfWVsc2UoMCxyLndhcm4pKCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb24iKX1hc3luYyBnZXRPcGVyYXRvckxpc3QoZSx0LGEsbixpKXtpZih0aGlzLmRhdGEucHVzaEJ1dHRvbilyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLCExLGkpO2xldCBzPW51bGwsbz1udWxsO2lmKGkpe2NvbnN0IGU9aS5nZXQodGhpcy5kYXRhLmlkKTtzPWU/ZS52YWx1ZTpudWxsO289ZT9lLnJvdGF0aW9uOm51bGx9aWYobnVsbD09PXMmJnRoaXMuYXBwZWFyYW5jZSlyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7bnVsbD09cyYmKHM9dGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlKTtjb25zdCBjPXM/dGhpcy5jaGVja2VkQXBwZWFyYW5jZTp0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U7aWYoYyl7Y29uc3Qgcz10aGlzLmFwcGVhcmFuY2UsbD1jLmRpY3QuZ2V0QXJyYXkoIk1hdHJpeCIpfHxyLklERU5USVRZX01BVFJJWDtvJiZjLmRpY3Quc2V0KCJNYXRyaXgiLHRoaXMuZ2V0Um90YXRpb25NYXRyaXgoaSkpO3RoaXMuYXBwZWFyYW5jZT1jO2NvbnN0IGg9c3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxhLG4saSk7dGhpcy5hcHBlYXJhbmNlPXM7Yy5kaWN0LnNldCgiTWF0cml4IixsKTtyZXR1cm4gaH1yZXR1cm57b3BMaXN0Om5ldyBwLk9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWFzeW5jIHNhdmUoZSx0LGEpe3JldHVybiB0aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5fc2F2ZUNoZWNrYm94KGUsdCxhKTp0aGlzLmRhdGEucmFkaW9CdXR0b24/dGhpcy5fc2F2ZVJhZGlvQnV0dG9uKGUsdCxhKTpudWxsfWFzeW5jIF9zYXZlQ2hlY2tib3goZSx0LGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IG49YS5nZXQodGhpcy5kYXRhLmlkKTtsZXQgaT1uPy5yb3RhdGlvbixvPW4/LnZhbHVlO2lmKHZvaWQgMD09PWkpe2lmKHZvaWQgMD09PW8pcmV0dXJuIG51bGw7aWYodGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU9PT1vKXJldHVybiBudWxsfWNvbnN0IGM9ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoYyBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuIG51bGw7dm9pZCAwPT09aSYmKGk9dGhpcy5yb3RhdGlvbik7dm9pZCAwPT09byYmKG89dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpO2NvbnN0IGw9e3BhdGg6dGhpcy5kYXRhLmZpZWxkTmFtZSx2YWx1ZTpvP3RoaXMuZGF0YS5leHBvcnRWYWx1ZToiIn0saD1zLk5hbWUuZ2V0KG8/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiJPZmYiKTtjLnNldCgiViIsaCk7Yy5zZXQoIkFTIixoKTtjLnNldCgiTSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7Y29uc3QgdT10aGlzLl9nZXRNS0RpY3QoaSk7dSYmYy5zZXQoIk1LIix1KTtjb25zdCBkPVtdO2F3YWl0KDAsbS53cml0ZU9iamVjdCkodGhpcy5yZWYsYyxkLGUueHJlZik7cmV0dXJuW3tyZWY6dGhpcy5yZWYsZGF0YTpkLmpvaW4oIiIpLHhmYTpsfV19YXN5bmMgX3NhdmVSYWRpb0J1dHRvbihlLHQsYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3Qgbj1hLmdldCh0aGlzLmRhdGEuaWQpO2xldCBpPW4/LnJvdGF0aW9uLG89bj8udmFsdWU7aWYodm9pZCAwPT09aSl7aWYodm9pZCAwPT09bylyZXR1cm4gbnVsbDtpZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZT09PW8pcmV0dXJuIG51bGx9Y29uc3QgYz1lLnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7aWYoIShjIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4gbnVsbDt2b2lkIDA9PT1vJiYobz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7dm9pZCAwPT09aSYmKGk9dGhpcy5yb3RhdGlvbik7Y29uc3QgbD17cGF0aDp0aGlzLmRhdGEuZmllbGROYW1lLHZhbHVlOm8/dGhpcy5kYXRhLmJ1dHRvblZhbHVlOiIifSxoPXMuTmFtZS5nZXQobz90aGlzLmRhdGEuYnV0dG9uVmFsdWU6Ik9mZiIpLHU9W107bGV0IGQ9bnVsbDtpZihvKWlmKHRoaXMucGFyZW50IGluc3RhbmNlb2Ygcy5SZWYpe2NvbnN0IHQ9ZS54cmVmLmZldGNoKHRoaXMucGFyZW50KTt0LnNldCgiViIsaCk7YXdhaXQoMCxtLndyaXRlT2JqZWN0KSh0aGlzLnBhcmVudCx0LHUsZS54cmVmKTtkPXUuam9pbigiIik7dS5sZW5ndGg9MH1lbHNlIHRoaXMucGFyZW50IGluc3RhbmNlb2Ygcy5EaWN0JiZ0aGlzLnBhcmVudC5zZXQoIlYiLGgpO2Muc2V0KCJBUyIsaCk7Yy5zZXQoIk0iLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO2NvbnN0IGY9dGhpcy5fZ2V0TUtEaWN0KGkpO2YmJmMuc2V0KCJNSyIsZik7YXdhaXQoMCxtLndyaXRlT2JqZWN0KSh0aGlzLnJlZixjLHUsZS54cmVmKTtjb25zdCBnPVt7cmVmOnRoaXMucmVmLGRhdGE6dS5qb2luKCIiKSx4ZmE6bH1dO2QmJmcucHVzaCh7cmVmOnRoaXMucGFyZW50LGRhdGE6ZCx4ZmE6bnVsbH0pO3JldHVybiBnfV9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSx0KXtjb25zdCBhPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGk9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYz1bMCwwLGEsaV0sbD0uOCpNYXRoLm1pbihhLGkpO2xldCBoLHU7aWYoImNoZWNrIj09PXQpe2g9e3dpZHRoOi43NTUqbCxoZWlnaHQ6LjcwNSpsfTt1PSIzIn1lbHNlIGlmKCJkaXNjIj09PXQpe2g9e3dpZHRoOi43OTEqbCxoZWlnaHQ6LjcwNSpsfTt1PSJsIn1lbHNlKDAsci51bnJlYWNoYWJsZSkoYF9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UgLSB1bnN1cHBvcnRlZCB0eXBlOiAke3R9YCk7Y29uc3QgZD1gcSBCVCAvUGRmSnNaYURiICR7bH0gVGYgMCBnICR7KDAsbi5udW1iZXJUb1N0cmluZykoKGEtaC53aWR0aCkvMil9ICR7KDAsbi5udW1iZXJUb1N0cmluZykoKGktaC5oZWlnaHQpLzIpfSBUZCAoJHt1fSkgVGogRVQgUWAsZj1uZXcgcy5EaWN0KGUueHJlZik7Zi5zZXQoIkZvcm1UeXBlIiwxKTtmLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRm9ybSIpKTtmLnNldCgiVHlwZSIscy5OYW1lLmdldCgiWE9iamVjdCIpKTtmLnNldCgiQkJveCIsYyk7Zi5zZXQoIk1hdHJpeCIsWzEsMCwwLDEsMCwwXSk7Zi5zZXQoIkxlbmd0aCIsZC5sZW5ndGgpO2NvbnN0IGc9bmV3IHMuRGljdChlLnhyZWYpLHA9bmV3IHMuRGljdChlLnhyZWYpO3Auc2V0KCJQZGZKc1phRGIiLHRoaXMuZmFsbGJhY2tGb250RGljdCk7Zy5zZXQoIkZvbnQiLHApO2Yuc2V0KCJSZXNvdXJjZXMiLGcpO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U9bmV3IG8uU3RyaW5nU3RyZWFtKGQpO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2UuZGljdD1mO3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKX1fcHJvY2Vzc0NoZWNrQm94KGUpe2NvbnN0IHQ9ZS5kaWN0LmdldCgiQVAiKTtpZighKHQgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCBhPXQuZ2V0KCJOIik7aWYoIShhIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3Qgcj10aGlzLl9kZWNvZGVGb3JtVmFsdWUoZS5kaWN0LmdldCgiQVMiKSk7InN0cmluZyI9PXR5cGVvZiByJiYodGhpcy5kYXRhLmZpZWxkVmFsdWU9cik7Y29uc3Qgbj1udWxsIT09dGhpcy5kYXRhLmZpZWxkVmFsdWUmJiJPZmYiIT09dGhpcy5kYXRhLmZpZWxkVmFsdWU/dGhpcy5kYXRhLmZpZWxkVmFsdWU6IlllcyIsaT1hLmdldEtleXMoKTtpZigwPT09aS5sZW5ndGgpaS5wdXNoKCJPZmYiLG4pO2Vsc2UgaWYoMT09PWkubGVuZ3RoKSJPZmYiPT09aVswXT9pLnB1c2gobik6aS51bnNoaWZ0KCJPZmYiKTtlbHNlIGlmKGkuaW5jbHVkZXMobikpe2kubGVuZ3RoPTA7aS5wdXNoKCJPZmYiLG4pfWVsc2V7Y29uc3QgZT1pLmZpbmQoKGU9PiJPZmYiIT09ZSkpO2kubGVuZ3RoPTA7aS5wdXNoKCJPZmYiLGUpfWkuaW5jbHVkZXModGhpcy5kYXRhLmZpZWxkVmFsdWUpfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9Ik9mZiIpO3RoaXMuZGF0YS5leHBvcnRWYWx1ZT1pWzFdO2NvbnN0IG89YS5nZXQodGhpcy5kYXRhLmV4cG9ydFZhbHVlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW8gaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/bzpudWxsO2NvbnN0IGw9YS5nZXQoIk9mZiIpO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1sIGluc3RhbmNlb2YgYy5CYXNlU3RyZWFtP2w6bnVsbDt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlP3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTp0aGlzLl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSwiY2hlY2siKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0O251bGw9PT10aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWU9Ik9mZiIpfV9wcm9jZXNzUmFkaW9CdXR0b24oZSl7dGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW51bGw7Y29uc3QgdD1lLmRpY3QuZ2V0KCJQYXJlbnQiKTtpZih0IGluc3RhbmNlb2Ygcy5EaWN0KXt0aGlzLnBhcmVudD1lLmRpY3QuZ2V0UmF3KCJQYXJlbnQiKTtjb25zdCBhPXQuZ2V0KCJWIik7YSBpbnN0YW5jZW9mIHMuTmFtZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShhKSl9Y29uc3QgYT1lLmRpY3QuZ2V0KCJBUCIpO2lmKCEoYSBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IHI9YS5nZXQoIk4iKTtpZighKHIgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtmb3IoY29uc3QgZSBvZiByLmdldEtleXMoKSlpZigiT2ZmIiE9PWUpe3RoaXMuZGF0YS5idXR0b25WYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoZSk7YnJlYWt9Y29uc3Qgbj1yLmdldCh0aGlzLmRhdGEuYnV0dG9uVmFsdWUpO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U9biBpbnN0YW5jZW9mIGMuQmFzZVN0cmVhbT9uOm51bGw7Y29uc3QgaT1yLmdldCgiT2ZmIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPWkgaW5zdGFuY2VvZiBjLkJhc2VTdHJlYW0/aTpudWxsO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTt0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdDtudWxsPT09dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlJiYodGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlPSJPZmYiKX1fcHJvY2Vzc1B1c2hCdXR0b24oZSl7Y29uc3R7ZGljdDp0LGFubm90YXRpb25HbG9iYWxzOmF9PWU7aWYodC5oYXMoIkEiKXx8dC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpe3RoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSF0LmhhcygiQSIpJiYhdC5oYXMoIkFBIik7aC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OnQscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmEuYmFzZVVybCxkb2NBdHRhY2htZW50czphLmF0dGFjaG1lbnRzfSl9ZWxzZSgwLHIud2FybikoIlB1c2ggYnV0dG9ucyB3aXRob3V0IGFjdGlvbiBkaWN0aW9uYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQiKX1nZXRGaWVsZE9iamVjdCgpe2xldCBlLHQ9ImJ1dHRvbiI7aWYodGhpcy5kYXRhLmNoZWNrQm94KXt0PSJjaGVja2JveCI7ZT10aGlzLmRhdGEuZXhwb3J0VmFsdWV9ZWxzZSBpZih0aGlzLmRhdGEucmFkaW9CdXR0b24pe3Q9InJhZGlvYnV0dG9uIjtlPXRoaXMuZGF0YS5idXR0b25WYWx1ZX1yZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwiT2ZmIixkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGV4cG9ydFZhbHVlczplLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZTp0fX1nZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IHMuRGljdDtlLnNldCgiQmFzZUZvbnQiLHMuTmFtZS5nZXQoIlphcGZEaW5nYmF0cyIpKTtlLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixzLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHNFbmNvZGluZyIpKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fWNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5pbmRpY2VzPXQuZ2V0QXJyYXkoIkkiKTt0aGlzLmhhc0luZGljZXM9QXJyYXkuaXNBcnJheSh0aGlzLmluZGljZXMpJiZ0aGlzLmluZGljZXMubGVuZ3RoPjA7dGhpcy5kYXRhLm9wdGlvbnM9W107Y29uc3QgaT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJPcHQifSk7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9YS5mZXRjaElmUmVmKGlbZV0pLHI9QXJyYXkuaXNBcnJheSh0KTt0aGlzLmRhdGEub3B0aW9uc1tlXT17ZXhwb3J0VmFsdWU6dGhpcy5fZGVjb2RlRm9ybVZhbHVlKHI/YS5mZXRjaElmUmVmKHRbMF0pOnQpLGRpc3BsYXlWYWx1ZTp0aGlzLl9kZWNvZGVGb3JtVmFsdWUocj9hLmZldGNoSWZSZWYodFsxXSk6dCl9fWlmKHRoaXMuaGFzSW5kaWNlcyl7dGhpcy5kYXRhLmZpZWxkVmFsdWU9W107Y29uc3QgZT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7Zm9yKGNvbnN0IHQgb2YgdGhpcy5pbmRpY2VzKU51bWJlci5pc0ludGVnZXIodCkmJnQ+PTAmJnQ8ZSYmdGhpcy5kYXRhLmZpZWxkVmFsdWUucHVzaCh0aGlzLmRhdGEub3B0aW9uc1t0XS5leHBvcnRWYWx1ZSl9ZWxzZSJzdHJpbmciPT10eXBlb2YgdGhpcy5kYXRhLmZpZWxkVmFsdWU/dGhpcy5kYXRhLmZpZWxkVmFsdWU9W3RoaXMuZGF0YS5maWVsZFZhbHVlXTp0aGlzLmRhdGEuZmllbGRWYWx1ZXx8KHRoaXMuZGF0YS5maWVsZFZhbHVlPVtdKTt0aGlzLmRhdGEuY29tYm89dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUJPKTt0aGlzLmRhdGEubXVsdGlTZWxlY3Q9dGhpcy5oYXNGaWVsZEZsYWcoci5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJU0VMRUNUKTt0aGlzLl9oYXNUZXh0PSEwfWdldEZpZWxkT2JqZWN0KCl7Y29uc3QgZT10aGlzLmRhdGEuY29tYm8/ImNvbWJvYm94IjoibGlzdGJveCIsdD10aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGg+MD90aGlzLmRhdGEuZmllbGRWYWx1ZVswXTpudWxsO3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dCxkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsbnVtSXRlbXM6dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoLG11bHRpcGxlU2VsZWN0aW9uOnRoaXMuZGF0YS5tdWx0aVNlbGVjdCxoaWRkZW46dGhpcy5kYXRhLmhpZGRlbixhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLGl0ZW1zOnRoaXMuZGF0YS5vcHRpb25zLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbix0eXBlOmV9fWFtZW5kU2F2ZWREaWN0KGUsdCl7aWYoIXRoaXMuaGFzSW5kaWNlcylyZXR1cm47bGV0IGE9ZT8uZ2V0KHRoaXMuZGF0YS5pZCk/LnZhbHVlO0FycmF5LmlzQXJyYXkoYSl8fChhPVthXSk7Y29uc3Qgcj1bXSx7b3B0aW9uczpufT10aGlzLmRhdGE7Zm9yKGxldCBlPTAsdD0wLGk9bi5sZW5ndGg7ZTxpO2UrKylpZihuW2VdLmV4cG9ydFZhbHVlPT09YVt0XSl7ci5wdXNoKGUpO3QrPTF9dC5zZXQoIkkiLHIpfWFzeW5jIF9nZXRBcHBlYXJhbmNlKGUsdCxhLG4pe2lmKHRoaXMuZGF0YS5jb21ibylyZXR1cm4gc3VwZXIuX2dldEFwcGVhcmFuY2UoZSx0LGEsbik7bGV0IHMsbztjb25zdCBjPW4/LmdldCh0aGlzLmRhdGEuaWQpO2lmKGMpe289Yy5yb3RhdGlvbjtzPWMudmFsdWV9aWYodm9pZCAwPT09byYmdm9pZCAwPT09cyYmIXRoaXMuX25lZWRBcHBlYXJhbmNlcylyZXR1cm4gbnVsbDt2b2lkIDA9PT1zP3M9dGhpcy5kYXRhLmZpZWxkVmFsdWU6QXJyYXkuaXNBcnJheShzKXx8KHM9W3NdKTtsZXQgbD10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxoPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdOzkwIT09byYmMjcwIT09b3x8KFtoLGxdPVtsLGhdKTtjb25zdCB1PXRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aCxkPVtdO2ZvcihsZXQgZT0wO2U8dTtlKyspe2NvbnN0e2V4cG9ydFZhbHVlOnR9PXRoaXMuZGF0YS5vcHRpb25zW2VdO3MuaW5jbHVkZXModCkmJmQucHVzaChlKX10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZXx8KHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9KDAsaS5wYXJzZURlZmF1bHRBcHBlYXJhbmNlKSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZT0iL0hlbHZldGljYSAwIFRmIDAgZyIpKTtjb25zdCBmPWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7bGV0IGcse2ZvbnRTaXplOnB9PXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7aWYocClnPXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlO2Vsc2V7Y29uc3QgZT0obC0xKS91O2xldCB0LGE9LTE7Zm9yKGNvbnN0e2Rpc3BsYXlWYWx1ZTplfW9mIHRoaXMuZGF0YS5vcHRpb25zKXtjb25zdCByPXRoaXMuX2dldFRleHRXaWR0aChlLGYpO2lmKHI+YSl7YT1yO3Q9ZX19W2cscF09dGhpcy5fY29tcHV0ZUZvbnRTaXplKGUsaC00LHQsZiwtMSl9Y29uc3QgbT1wKnIuTElORV9GQUNUT1IsYj0obS1wKS8yLHk9TWF0aC5mbG9vcihsL20pO2xldCB3PTA7aWYoZC5sZW5ndGg+MCl7Y29uc3QgZT1NYXRoLm1pbiguLi5kKSx0PU1hdGgubWF4KC4uLmQpO3c9TWF0aC5tYXgoMCx0LXkrMSk7dz5lJiYodz1lKX1jb25zdCBTPU1hdGgubWluKHcreSsxLHUpLHg9WyIvVHggQk1DIHEiLGAxIDEgJHtofSAke2x9IHJlIFcgbmBdO2lmKGQubGVuZ3RoKXt4LnB1c2goIjAuNjAwMDA2IDAuNzU2ODY2IDAuODU0OTA0IHJnIik7Zm9yKGNvbnN0IGUgb2YgZCl3PD1lJiZlPFMmJngucHVzaChgMSAke2wtKGUtdysxKSptfSAke2h9ICR7bX0gcmUgZmApfXgucHVzaCgiQlQiLGcsYDEgMCAwIDEgMCAke2x9IFRtYCk7Y29uc3QgQz17c2hpZnQ6MH07Zm9yKGxldCBlPXc7ZTxTO2UrKyl7Y29uc3R7ZGlzcGxheVZhbHVlOnR9PXRoaXMuZGF0YS5vcHRpb25zW2VdLGE9ZT09PXc/YjowO3gucHVzaCh0aGlzLl9yZW5kZXJUZXh0KHQsZixwLGgsMCxDLDIsLW0rYSkpfXgucHVzaCgiRVQgUSBFTUMiKTtyZXR1cm4geC5qb2luKCJcbiIpfX1jbGFzcyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuZmllbGRWYWx1ZT1udWxsO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19Y2xhc3MgVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5ub1JvdGF0ZT0hMDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTtjb25zdHtkaWN0OnR9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuVEVYVDtpZih0aGlzLmRhdGEuaGFzQXBwZWFyYW5jZSl0aGlzLmRhdGEubmFtZT0iTm9JY29uIjtlbHNle3RoaXMuZGF0YS5yZWN0WzFdPXRoaXMuZGF0YS5yZWN0WzNdLTIyO3RoaXMuZGF0YS5yZWN0WzJdPXRoaXMuZGF0YS5yZWN0WzBdKzIyO3RoaXMuZGF0YS5uYW1lPXQuaGFzKCJOYW1lIik/dC5nZXQoIk5hbWUiKS5uYW1lOiJOb3RlIn1pZih0LmhhcygiU3RhdGUiKSl7dGhpcy5kYXRhLnN0YXRlPXQuZ2V0KCJTdGF0ZSIpfHxudWxsO3RoaXMuZGF0YS5zdGF0ZU1vZGVsPXQuZ2V0KCJTdGF0ZU1vZGVsIil8fG51bGx9ZWxzZXt0aGlzLmRhdGEuc3RhdGU9bnVsbDt0aGlzLmRhdGEuc3RhdGVNb2RlbD1udWxsfX19Y2xhc3MgTGlua0Fubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCxhbm5vdGF0aW9uR2xvYmFsczphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkxJTks7Y29uc3Qgbj1nZXRRdWFkUG9pbnRzKHQsdGhpcy5yZWN0YW5nbGUpO24mJih0aGlzLmRhdGEucXVhZFBvaW50cz1uKTt0aGlzLmRhdGEuYm9yZGVyQ29sb3J8fD10aGlzLmRhdGEuY29sb3I7aC5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OnQscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmEuYmFzZVVybCxkb2NBdHRhY2htZW50czphLmF0dGFjaG1lbnRzfSl9fWNsYXNzIFBvcHVwQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlBPUFVQO3RoaXMuZGF0YS5yZWN0WzBdIT09dGhpcy5kYXRhLnJlY3RbMl0mJnRoaXMuZGF0YS5yZWN0WzFdIT09dGhpcy5kYXRhLnJlY3RbM118fCh0aGlzLmRhdGEucmVjdD1udWxsKTtsZXQgYT10LmdldCgiUGFyZW50Iik7aWYoIWEpeygwLHIud2FybikoIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpO3JldHVybn1jb25zdCBuPWEuZ2V0QXJyYXkoIlJlY3QiKTt0aGlzLmRhdGEucGFyZW50UmVjdD1BcnJheS5pc0FycmF5KG4pJiY0PT09bi5sZW5ndGg/ci5VdGlsLm5vcm1hbGl6ZVJlY3Qobik6bnVsbDtjb25zdCBpPWEuZ2V0KCJSVCIpOygwLHMuaXNOYW1lKShpLHIuQW5ub3RhdGlvblJlcGx5VHlwZS5HUk9VUCkmJihhPWEuZ2V0KCJJUlQiKSk7aWYoYS5oYXMoIk0iKSl7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKGEuZ2V0KCJNIikpO3RoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPXRoaXMubW9kaWZpY2F0aW9uRGF0ZX1lbHNlIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPW51bGw7aWYoYS5oYXMoIkMiKSl7dGhpcy5zZXRDb2xvcihhLmdldEFycmF5KCJDIikpO3RoaXMuZGF0YS5jb2xvcj10aGlzLmNvbG9yfWVsc2UgdGhpcy5kYXRhLmNvbG9yPW51bGw7aWYoIXRoaXMudmlld2FibGUpe2NvbnN0IGU9YS5nZXQoIkYiKTt0aGlzLl9pc1ZpZXdhYmxlKGUpJiZ0aGlzLnNldEZsYWdzKGUpfXRoaXMuc2V0VGl0bGUoYS5nZXQoIlQiKSk7dGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlO3RoaXMuc2V0Q29udGVudHMoYS5nZXQoIkNvbnRlbnRzIikpO3RoaXMuZGF0YS5jb250ZW50c09iaj10aGlzLl9jb250ZW50czthLmhhcygiUkMiKSYmKHRoaXMuZGF0YS5yaWNoVGV4dD1iLlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwoYS5nZXQoIlJDIikpKTt0aGlzLmRhdGEub3Blbj0hIXQuZ2V0KCJPcGVuIil9fXQuUG9wdXBBbm5vdGF0aW9uPVBvcHVwQW5ub3RhdGlvbjtjbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9ITA7Y29uc3R7ZXZhbHVhdG9yT3B0aW9uczp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5GUkVFVEVYVDt0aGlzLnNldERlZmF1bHRBcHBlYXJhbmNlKGUpO2lmKHRoaXMuYXBwZWFyYW5jZSl7Y29uc3R7Zm9udENvbG9yOmUsZm9udFNpemU6cn09KDAsaS5wYXJzZUFwcGVhcmFuY2VTdHJlYW0pKHRoaXMuYXBwZWFyYW5jZSx0LGEpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udENvbG9yPWU7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZT1yfHwxMH1lbHNlIGlmKHRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCB0PWUuZGljdC5nZXQoIkNBIikscj1uZXcgaS5GYWtlVW5pY29kZUZvbnQoYSwic2Fucy1zZXJpZiIpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fD0xMDtjb25zdHtmb250Q29sb3I6bixmb250U2l6ZTpzfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO3RoaXMuYXBwZWFyYW5jZT1yLmNyZWF0ZUFwcGVhcmFuY2UodGhpcy5fY29udGVudHMuc3RyLHRoaXMucmVjdGFuZ2xlLHRoaXMucm90YXRpb24scyxuLHQpO3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsaS5GYWtlVW5pY29kZUZvbnQudG9Vbmljb2RlU3RyZWFtKX1lbHNlKDAsci53YXJuKSgiRnJlZVRleHRBbm5vdGF0aW9uOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIil9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuISF0aGlzLmFwcGVhcmFuY2V9c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LGEpe2xldHthcFJlZjpvLGFwOmN9PWE7Y29uc3R7Y29sb3I6bCxmb250U2l6ZTpoLHJlY3Q6dSxyb3RhdGlvbjpkLHVzZXI6Zix2YWx1ZTpnfT1lLHA9bmV3IHMuRGljdCh0KTtwLnNldCgiVHlwZSIscy5OYW1lLmdldCgiQW5ub3QiKSk7cC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZyZWVUZXh0IikpO3Auc2V0KCJDcmVhdGlvbkRhdGUiLGBEOiR7KDAsci5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO3Auc2V0KCJSZWN0Iix1KTtjb25zdCBtPWAvSGVsdiAke2h9IFRmICR7KDAsaS5nZXRQZGZDb2xvcikobCwhMCl9YDtwLnNldCgiREEiLG0pO3Auc2V0KCJDb250ZW50cyIsKDAsbi5pc0FzY2lpKShnKT9nOigwLG4uc3RyaW5nVG9VVEYxNlN0cmluZykoZywhMCkpO3Auc2V0KCJGIiw0KTtwLnNldCgiQm9yZGVyIixbMCwwLDBdKTtwLnNldCgiUm90YXRlIixkKTtmJiZwLnNldCgiVCIsKDAsbi5pc0FzY2lpKShmKT9mOigwLG4uc3RyaW5nVG9VVEYxNlN0cmluZykoZiwhMCkpO2lmKG98fGMpe2NvbnN0IGU9bmV3IHMuRGljdCh0KTtwLnNldCgiQVAiLGUpO28/ZS5zZXQoIk4iLG8pOmUuc2V0KCJOIixjKX1yZXR1cm4gcH1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7YmFzZUZvbnRSZWY6YyxldmFsdWF0b3I6bCx0YXNrOmh9PWEse2NvbG9yOnUsZm9udFNpemU6ZCxyZWN0OmYscm90YXRpb246Zyx2YWx1ZTpwfT1lLG09bmV3IHMuRGljdCh0KSxiPW5ldyBzLkRpY3QodCk7aWYoYyliLnNldCgiSGVsdiIsYyk7ZWxzZXtjb25zdCBlPW5ldyBzLkRpY3QodCk7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlR5cGUxIikpO2Uuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO2Iuc2V0KCJIZWx2IixlKX1tLnNldCgiRm9udCIsYik7Y29uc3QgeT1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShsLGgse2ZvbnROYW1lOiJIZWx2Iixmb250U2l6ZTpkfSxtKSxbdyxTLHgsQ109ZjtsZXQgdj14LXcsaz1DLVM7ZyUxODAhPTAmJihbdixrXT1bayx2XSk7Y29uc3QgTz1wLnNwbGl0KCJcbiIpLFQ9ZC8xZTM7bGV0IE09LTEvMDtjb25zdCBFPVtdO2ZvcihsZXQgZSBvZiBPKXtjb25zdCB0PXkuZW5jb2RlU3RyaW5nKGUpO2lmKHQubGVuZ3RoPjEpcmV0dXJuIG51bGw7ZT10LmpvaW4oIiIpO0UucHVzaChlKTtsZXQgYT0wO2NvbnN0IHI9eS5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIHIpYSs9ZS53aWR0aCpUO009TWF0aC5tYXgoTSxhKX1sZXQgRD0xO00+diYmKEQ9di9NKTtsZXQgUj0xO2NvbnN0IE49ci5MSU5FX0ZBQ1RPUipkLEw9KHIuTElORV9GQUNUT1Itci5MSU5FX0RFU0NFTlRfRkFDVE9SKSpkLCQ9TipPLmxlbmd0aDskPmsmJihSPWsvJCk7Y29uc3QgXz1kKk1hdGgubWluKEQsUik7bGV0IGosVSxYO3N3aXRjaChnKXtjYXNlIDA6WD1bMSwwLDAsMV07VT1bZlswXSxmWzFdLHYsa107aj1bZlswXSxmWzNdLUxdO2JyZWFrO2Nhc2UgOTA6WD1bMCwxLC0xLDBdO1U9W2ZbMV0sLWZbMl0sdixrXTtqPVtmWzFdLC1mWzBdLUxdO2JyZWFrO2Nhc2UgMTgwOlg9Wy0xLDAsMCwtMV07VT1bLWZbMl0sLWZbM10sdixrXTtqPVstZlsyXSwtZlsxXS1MXTticmVhaztjYXNlIDI3MDpYPVswLC0xLDEsMF07VT1bLWZbM10sZlswXSx2LGtdO2o9Wy1mWzNdLGZbMl0tTF19Y29uc3QgSD1bInEiLGAke1guam9pbigiICIpfSAwIDAgY21gLGAke1Uuam9pbigiICIpfSByZSBXIG5gLCJCVCIsYCR7KDAsaS5nZXRQZGZDb2xvcikodSwhMCl9YCxgMCBUYyAvSGVsdiAkeygwLG4ubnVtYmVyVG9TdHJpbmcpKF8pfSBUZmBdO0gucHVzaChgJHtqLmpvaW4oIiAiKX0gVGQgKCR7KDAsbi5lc2NhcGVTdHJpbmcpKEVbMF0pfSkgVGpgKTtjb25zdCBxPSgwLG4ubnVtYmVyVG9TdHJpbmcpKE4pO2ZvcihsZXQgZT0xLHQ9RS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1FW2VdO0gucHVzaChgMCAtJHtxfSBUZCAoJHsoMCxuLmVzY2FwZVN0cmluZykodCl9KSBUamApfUgucHVzaCgiRVQiLCJRIik7Y29uc3Qgej1ILmpvaW4oIlxuIiksVz1uZXcgcy5EaWN0KHQpO1cuc2V0KCJGb3JtVHlwZSIsMSk7Vy5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSk7Vy5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSk7Vy5zZXQoIkJCb3giLGYpO1cuc2V0KCJSZXNvdXJjZXMiLG0pO1cuc2V0KCJNYXRyaXgiLFsxLDAsMCwxLC1mWzBdLC1mWzFdXSk7Y29uc3QgRz1uZXcgby5TdHJpbmdTdHJlYW0oeik7Ry5kaWN0PVc7cmV0dXJuIEd9fWNsYXNzIExpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkxJTkU7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7Y29uc3Qgbj10LmdldEFycmF5KCJMIik7dGhpcy5kYXRhLmxpbmVDb29yZGluYXRlcz1yLlV0aWwubm9ybWFsaXplUmVjdChuKTt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0saT10LmdldCgiQ0EiKSxzPWdldFJnYkNvbG9yKHQuZ2V0QXJyYXkoIklDIiksbnVsbCksbz1zP2dldFBkZkNvbG9yQXJyYXkocyk6bnVsbCxjPW8/aTpudWxsLGw9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxoPTIqbCx1PVt0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzBdLWgsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1sxXS1oLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0raCx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzNdK2hdO3IuVXRpbC5pbnRlcnNlY3QodGhpcy5yZWN0YW5nbGUsdSl8fCh0aGlzLnJlY3RhbmdsZT11KTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke2x9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOm8sc3Ryb2tlQWxwaGE6aSxmaWxsQWxwaGE6Yyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaChgJHtuWzBdfSAke25bMV19IG1gLGAke25bMl19ICR7blszXX0gbGAsIlMiKTtyZXR1cm5bdFswXS54LWwsdFsxXS54K2wsdFszXS55LWwsdFsxXS55K2xdfX0pfX19Y2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxyPXQuZ2V0KCJDQSIpLG49Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKSxpPW4/Z2V0UGRmQ29sb3JBcnJheShuKTpudWxsLHM9aT9yOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFpKXJldHVybjt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6cixmaWxsQWxwaGE6cyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dFsyXS54K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixyPXRbMl0ueSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzNdLngtdFsyXS54LXRoaXMuYm9yZGVyU3R5bGUud2lkdGgscz10WzFdLnktdFszXS55LXRoaXMuYm9yZGVyU3R5bGUud2lkdGg7ZS5wdXNoKGAke2F9ICR7cn0gJHtufSAke3N9IHJlYCk7aT9lLnB1c2goIkIiKTplLnB1c2goIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19fWNsYXNzIENpcmNsZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKSxuPWdldFJnYkNvbG9yKHQuZ2V0QXJyYXkoIklDIiksbnVsbCksaT1uP2dldFBkZkNvbG9yQXJyYXkobik6bnVsbCxzPWk/cjpudWxsO2lmKDA9PT10aGlzLmJvcmRlclN0eWxlLndpZHRoJiYhaSlyZXR1cm47Y29uc3Qgbz00LzMqTWF0aC50YW4oTWF0aC5QSS84KTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6cixmaWxsQWxwaGE6cyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGE9dFswXS54K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixyPXRbMF0ueS10aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsbj10WzNdLngtdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLHM9dFszXS55K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixjPWErKG4tYSkvMixsPXIrKHMtcikvMixoPShuLWEpLzIqbyx1PShzLXIpLzIqbztlLnB1c2goYCR7Y30gJHtzfSBtYCxgJHtjK2h9ICR7c30gJHtufSAke2wrdX0gJHtufSAke2x9IGNgLGAke259ICR7bC11fSAke2MraH0gJHtyfSAke2N9ICR7cn0gY2AsYCR7Yy1ofSAke3J9ICR7YX0gJHtsLXV9ICR7YX0gJHtsfSBjYCxgJHthfSAke2wrdX0gJHtjLWh9ICR7c30gJHtjfSAke3N9IGNgLCJoIik7aT9lLnB1c2goIkIiKTplLnB1c2goIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19fWNsYXNzIFBvbHlsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEudmVydGljZXM9W107aWYoISh0aGlzIGluc3RhbmNlb2YgUG9seWdvbkFubm90YXRpb24pKXt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzfWNvbnN0IG49dC5nZXRBcnJheSgiVmVydGljZXMiKTtpZihBcnJheS5pc0FycmF5KG4pKXtmb3IobGV0IGU9MCx0PW4ubGVuZ3RoO2U8dDtlKz0yKXRoaXMuZGF0YS52ZXJ0aWNlcy5wdXNoKHt4Om5bZV0seTpuW2UrMV19KTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLG49dC5nZXQoIkNBIiksaT10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLHM9MippLG89WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGEudmVydGljZXMpe29bMF09TWF0aC5taW4ob1swXSxlLngtcyk7b1sxXT1NYXRoLm1pbihvWzFdLGUueS1zKTtvWzJdPU1hdGgubWF4KG9bMl0sZS54K3MpO29bM109TWF0aC5tYXgob1szXSxlLnkrcyl9ci5VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSxvKXx8KHRoaXMucmVjdGFuZ2xlPW8pO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6YCR7aX0gd2Asc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTpuLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgYT10aGlzLmRhdGEudmVydGljZXM7Zm9yKGxldCB0PTAscj1hLmxlbmd0aDt0PHI7dCsrKWUucHVzaChgJHthW3RdLnh9ICR7YVt0XS55fSAkezA9PT10PyJtIjoibCJ9YCk7ZS5wdXNoKCJTIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX19Y2xhc3MgUG9seWdvbkFubm90YXRpb24gZXh0ZW5kcyBQb2x5bGluZUFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuUE9MWUdPTn19Y2xhc3MgQ2FyZXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5DQVJFVH19Y2xhc3MgSW5rQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7Y29uc3R7ZGljdDp0LHhyZWY6YX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5JTks7dGhpcy5kYXRhLmlua0xpc3RzPVtdO2NvbnN0IG49dC5nZXRBcnJheSgiSW5rTGlzdCIpO2lmKEFycmF5LmlzQXJyYXkobikpe2ZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0OysrZSl7dGhpcy5kYXRhLmlua0xpc3RzLnB1c2goW10pO2ZvcihsZXQgdD0wLHI9bltlXS5sZW5ndGg7dDxyO3QrPTIpdGhpcy5kYXRhLmlua0xpc3RzW2VdLnB1c2goe3g6YS5mZXRjaElmUmVmKG5bZV1bdF0pLHk6YS5mZXRjaElmUmVmKG5bZV1bdCsxXSl9KX1pZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLG49dC5nZXQoIkNBIiksaT10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLHM9MippLG89WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpZm9yKGNvbnN0IHQgb2YgZSl7b1swXT1NYXRoLm1pbihvWzBdLHQueC1zKTtvWzFdPU1hdGgubWluKG9bMV0sdC55LXMpO29bMl09TWF0aC5tYXgob1syXSx0Lngrcyk7b1szXT1NYXRoLm1heChvWzNdLHQueStzKX1yLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLG8pfHwodGhpcy5yZWN0YW5nbGU9byk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6YSxleHRyYTpgJHtpfSB3YCxzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOm4scG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntmb3IoY29uc3QgdCBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpe2ZvcihsZXQgYT0wLHI9dC5sZW5ndGg7YTxyO2ErKyllLnB1c2goYCR7dFthXS54fSAke3RbYV0ueX0gJHswPT09YT8ibSI6ImwifWApO2UucHVzaCgiUyIpfXJldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LGEpe2xldHthcFJlZjpuLGFwOml9PWE7Y29uc3R7Y29sb3I6byxvcGFjaXR5OmMscGF0aHM6bCxyZWN0Omgscm90YXRpb246dSx0aGlja25lc3M6ZH09ZSxmPW5ldyBzLkRpY3QodCk7Zi5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkFubm90IikpO2Yuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJJbmsiKSk7Zi5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHsoMCxyLmdldE1vZGlmaWNhdGlvbkRhdGUpKCl9YCk7Zi5zZXQoIlJlY3QiLGgpO2Yuc2V0KCJJbmtMaXN0IixsLm1hcCgoZT0+ZS5wb2ludHMpKSk7Zi5zZXQoIkYiLDQpO2Yuc2V0KCJSb3RhdGUiLHUpO2NvbnN0IGc9bmV3IHMuRGljdCh0KTtmLnNldCgiQlMiLGcpO2cuc2V0KCJXIixkKTtmLnNldCgiQyIsQXJyYXkuZnJvbShvLChlPT5lLzI1NSkpKTtmLnNldCgiQ0EiLGMpO2NvbnN0IHA9bmV3IHMuRGljdCh0KTtmLnNldCgiQVAiLHApO24/cC5zZXQoIk4iLG4pOnAuc2V0KCJOIixpKTtyZXR1cm4gZn1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7Y29uc3R7Y29sb3I6cixyZWN0OmMscGF0aHM6bCx0aGlja25lc3M6aCxvcGFjaXR5OnV9PWUsZD1bYCR7aH0gdyAxIEogMSBqYCxgJHsoMCxpLmdldFBkZkNvbG9yKShyLCExKX1gXTsxIT09dSYmZC5wdXNoKCIvUjAgZ3MiKTtjb25zdCBmPVtdO2Zvcihjb25zdHtiZXppZXI6ZX1vZiBsKXtmLmxlbmd0aD0wO2YucHVzaChgJHsoMCxuLm51bWJlclRvU3RyaW5nKShlWzBdKX0gJHsoMCxuLm51bWJlclRvU3RyaW5nKShlWzFdKX0gbWApO2ZvcihsZXQgdD0yLGE9ZS5sZW5ndGg7dDxhO3QrPTYpe2NvbnN0IGE9ZS5zbGljZSh0LHQrNikubWFwKG4ubnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKTtmLnB1c2goYCR7YX0gY2ApfWYucHVzaCgiUyIpO2QucHVzaChmLmpvaW4oIlxuIikpfWNvbnN0IGc9ZC5qb2luKCJcbiIpLHA9bmV3IHMuRGljdCh0KTtwLnNldCgiRm9ybVR5cGUiLDEpO3Auc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO3Auc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJYT2JqZWN0IikpO3Auc2V0KCJCQm94IixjKTtwLnNldCgiTGVuZ3RoIixnLmxlbmd0aCk7aWYoMSE9PXUpe2NvbnN0IGU9bmV3IHMuRGljdCh0KSxhPW5ldyBzLkRpY3QodCkscj1uZXcgcy5EaWN0KHQpO3Iuc2V0KCJDQSIsdSk7ci5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKTthLnNldCgiUjAiLHIpO2Uuc2V0KCJFeHRHU3RhdGUiLGEpO3Auc2V0KCJSZXNvdXJjZXMiLGUpfWNvbnN0IG09bmV3IG8uU3RyaW5nU3RyZWFtKGcpO20uZGljdD1wO3JldHVybiBtfX1jbGFzcyBIaWdobGlnaHRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2NvbnN0IGU9dGhpcy5hcHBlYXJhbmNlPy5kaWN0LmdldCgiUmVzb3VyY2VzIik7aWYoIXRoaXMuYXBwZWFyYW5jZXx8IWU/LmhhcygiRXh0R1N0YXRlIikpe3RoaXMuYXBwZWFyYW5jZSYmKDAsci53YXJuKSgiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLiIpO2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlsxLDEsMF0sbj10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGZpbGxDb2xvcjplLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTpuLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke3RbMF0ueH0gJHt0WzBdLnl9IG1gLGAke3RbMV0ueH0gJHt0WzFdLnl9IGxgLGAke3RbM10ueH0gJHt0WzNdLnl9IGxgLGAke3RbMl0ueH0gJHt0WzJdLnl9IGxgLCJmIik7cmV0dXJuW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9fWNsYXNzIFVuZGVybGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FO2lmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPWdldFF1YWRQb2ludHModCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxyPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmEsZXh0cmE6IltdIDAgZCAwLjU3MSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7dFsyXS54fSAke3RbMl0ueSsxLjN9IG1gLGAke3RbM10ueH0gJHt0WzNdLnkrMS4zfSBsYCwiUyIpO3JldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyBTcXVpZ2dseUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXIuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLHI9dC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6YSxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTpyLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgYT0odFswXS55LXRbMl0ueSkvNjtsZXQgcj1hLG49dFsyXS54O2NvbnN0IGk9dFsyXS55LHM9dFszXS54O2UucHVzaChgJHtufSAke2krcn0gbWApO2Rve24rPTI7cj0wPT09cj9hOjA7ZS5wdXNoKGAke259ICR7aStyfSBsYCl9d2hpbGUobjxzKTtlLnB1c2goIlMiKTtyZXR1cm5bdFsyXS54LHMsaS0yKmEsaSsyKmFdfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjphfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1yLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjphLGV4dHJhOiJbXSAwIGQgMSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOnIscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goKHRbMF0ueCt0WzJdLngpLzIrIiAiKyh0WzBdLnkrdFsyXS55KS8yKyIgbSIsKHRbMV0ueCt0WzNdLngpLzIrIiAiKyh0WzFdLnkrdFszXS55KS8yKyIgbCIsIlMiKTtyZXR1cm5bdFswXS54LHRbMV0ueCx0WzNdLnksdFsxXS55XX19KX19ZWxzZSB0aGlzLmRhdGEucG9wdXBSZWY9bnVsbH19Y2xhc3MgU3RhbXBBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5TVEFNUDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZX1zdGF0aWMgYXN5bmMgY3JlYXRlSW1hZ2UoZSx0KXtjb25zdHt3aWR0aDphLGhlaWdodDpufT1lLGk9bmV3IE9mZnNjcmVlbkNhbnZhcyhhLG4pLGM9aS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiEwfSk7Yy5kcmF3SW1hZ2UoZSwwLDApO2NvbnN0IGw9Yy5nZXRJbWFnZURhdGEoMCwwLGEsbikuZGF0YSxoPW5ldyBVaW50MzJBcnJheShsLmJ1ZmZlciksdT1oLnNvbWUoci5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj9lPT5lPj4+MjQhPTI1NTplPT4yNTUhPSgyNTUmZSkpO2lmKHUpe2MuZmlsbFN0eWxlPSJ3aGl0ZSI7Yy5maWxsUmVjdCgwLDAsYSxuKTtjLmRyYXdJbWFnZShlLDAsMCl9Y29uc3QgZD1pLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6ImltYWdlL2pwZWciLHF1YWxpdHk6MX0pLnRoZW4oKGU9PmUuYXJyYXlCdWZmZXIoKSkpLGY9cy5OYW1lLmdldCgiWE9iamVjdCIpLGc9cy5OYW1lLmdldCgiSW1hZ2UiKSxwPW5ldyBzLkRpY3QodCk7cC5zZXQoIlR5cGUiLGYpO3Auc2V0KCJTdWJ0eXBlIixnKTtwLnNldCgiQml0c1BlckNvbXBvbmVudCIsOCk7cC5zZXQoIkNvbG9yU3BhY2UiLHMuTmFtZS5nZXQoIkRldmljZVJHQiIpKTtwLnNldCgiRmlsdGVyIixzLk5hbWUuZ2V0KCJEQ1REZWNvZGUiKSk7cC5zZXQoIkJCb3giLFswLDAsYSxuXSk7cC5zZXQoIldpZHRoIixhKTtwLnNldCgiSGVpZ2h0IixuKTtsZXQgbT1udWxsO2lmKHUpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoaC5sZW5ndGgpO2lmKHIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pZm9yKGxldCB0PTAsYT1oLmxlbmd0aDt0PGE7dCsrKWVbdF09aFt0XT4+PjI0O2Vsc2UgZm9yKGxldCB0PTAsYT1oLmxlbmd0aDt0PGE7dCsrKWVbdF09MjU1JmhbdF07Y29uc3QgaT1uZXcgcy5EaWN0KHQpO2kuc2V0KCJUeXBlIixmKTtpLnNldCgiU3VidHlwZSIsZyk7aS5zZXQoIkJpdHNQZXJDb21wb25lbnQiLDgpO2kuc2V0KCJDb2xvclNwYWNlIixzLk5hbWUuZ2V0KCJEZXZpY2VHcmF5IikpO2kuc2V0KCJXaWR0aCIsYSk7aS5zZXQoIkhlaWdodCIsbik7bT1uZXcgby5TdHJlYW0oZSwwLDAsaSl9cmV0dXJue2ltYWdlU3RyZWFtOm5ldyBvLlN0cmVhbShhd2FpdCBkLDAsMCxwKSxzbWFza1N0cmVhbTptLHdpZHRoOmEsaGVpZ2h0Om59fXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCxhKXtsZXR7YXBSZWY6aSxhcDpvfT1hO2NvbnN0e3JlY3Q6Yyxyb3RhdGlvbjpsLHVzZXI6aH09ZSx1PW5ldyBzLkRpY3QodCk7dS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkFubm90IikpO3Uuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJTdGFtcCIpKTt1LnNldCgiQ3JlYXRpb25EYXRlIixgRDokeygwLHIuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTt1LnNldCgiUmVjdCIsYyk7dS5zZXQoIkYiLDQpO3Uuc2V0KCJCb3JkZXIiLFswLDAsMF0pO3Uuc2V0KCJSb3RhdGUiLGwpO2gmJnUuc2V0KCJUIiwoMCxuLmlzQXNjaWkpKGgpP2g6KDAsbi5zdHJpbmdUb1VURjE2U3RyaW5nKShoLCEwKSk7aWYoaXx8byl7Y29uc3QgZT1uZXcgcy5EaWN0KHQpO3Uuc2V0KCJBUCIsZSk7aT9lLnNldCgiTiIsaSk6ZS5zZXQoIk4iLG8pfXJldHVybiB1fXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGUsdCxhKXtjb25zdHtyb3RhdGlvbjpyfT1lLHtpbWFnZVJlZjppLHdpZHRoOmMsaGVpZ2h0Omx9PWEuaW1hZ2UsaD1uZXcgcy5EaWN0KHQpLHU9bmV3IHMuRGljdCh0KTtoLnNldCgiWE9iamVjdCIsdSk7dS5zZXQoIkltMCIsaSk7Y29uc3QgZD1gcSAke2N9IDAgMCAke2x9IDAgMCBjbSAvSW0wIERvIFFgLGY9bmV3IHMuRGljdCh0KTtmLnNldCgiRm9ybVR5cGUiLDEpO2Yuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO2Yuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJYT2JqZWN0IikpO2Yuc2V0KCJCQm94IixbMCwwLGMsbF0pO2Yuc2V0KCJSZXNvdXJjZXMiLGgpO2lmKHIpe2NvbnN0IGU9KDAsbi5nZXRSb3RhdGlvbk1hdHJpeCkocixjLGwpO2Yuc2V0KCJNYXRyaXgiLGUpfWNvbnN0IGc9bmV3IG8uU3RyaW5nU3RyZWFtKGQpO2cuZGljdD1mO3JldHVybiBnfX1jbGFzcyBGaWxlQXR0YWNobWVudEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOmF9PWUsbj1uZXcgZC5GaWxlU3BlYyh0LmdldCgiRlMiKSxhKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ci5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEuZmlsZT1uLnNlcmlhbGl6YWJsZTtjb25zdCBpPXQuZ2V0KCJOYW1lIik7dGhpcy5kYXRhLm5hbWU9aSBpbnN0YW5jZW9mIHMuTmFtZT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShpLm5hbWUpOiJQdXNoUGluIjtjb25zdCBvPXQuZ2V0KCJjYSIpO3RoaXMuZGF0YS5maWxsQWxwaGE9Im51bWJlciI9PXR5cGVvZiBvJiZvPj0wJiZvPD0xP286bnVsbH19fSwoZSx0LGEpPT57dmFyIHI9YSg0KSxuPWEoNiksaT1hKDg3KSxzPWEoMTU5KSxvPWEoNyksYz1yLlJlZ0V4cCxsPWMucHJvdG90eXBlO24mJm8oKGZ1bmN0aW9uKCl7dmFyIGU9ITA7dHJ5e2MoIi4iLCJkIil9Y2F0Y2godCl7ZT0hMX12YXIgdD17fSxhPSIiLHI9ZT8iZGdpbXN5IjoiZ2ltc3kiLGFkZEdldHRlcj1mdW5jdGlvbihlLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2dldDpmdW5jdGlvbigpe2ErPXI7cmV0dXJuITB9fSl9LG49e2RvdEFsbDoicyIsZ2xvYmFsOiJnIixpZ25vcmVDYXNlOiJpIixtdWx0aWxpbmU6Im0iLHN0aWNreToieSJ9O2UmJihuLmhhc0luZGljZXM9ImQiKTtmb3IodmFyIGkgaW4gbilhZGRHZXR0ZXIoaSxuW2ldKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLCJmbGFncyIpLmdldC5jYWxsKHQpIT09cnx8YSE9PXJ9KSkmJmkobCwiZmxhZ3MiLHtjb25maWd1cmFibGU6ITAsZ2V0OnN9KX0sKGUsdCxhKT0+e3ZhciByPWEoNDcpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPXIodGhpcyksdD0iIjtlLmhhc0luZGljZXMmJih0Kz0iZCIpO2UuZ2xvYmFsJiYodCs9ImciKTtlLmlnbm9yZUNhc2UmJih0Kz0iaSIpO2UubXVsdGlsaW5lJiYodCs9Im0iKTtlLmRvdEFsbCYmKHQrPSJzIik7ZS51bmljb2RlJiYodCs9InUiKTtlLnVuaWNvZGVTZXRzJiYodCs9InYiKTtlLnN0aWNreSYmKHQrPSJ5Iik7cmV0dXJuIHR9fSwoZSx0LGEpPT57dmFyIHI9YSgzKSxuPWEoNDApLGk9YSg2NCkscz1hKDE0MSksbz1hKDE2MSksYz1hKDE0Myk7cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6MSE9PVtdLnVuc2hpZnQoMCl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkudW5zaGlmdCgpfWNhdGNoKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3Vuc2hpZnQ6ZnVuY3Rpb24gdW5zaGlmdChlKXt2YXIgdD1uKHRoaXMpLGE9aSh0KSxyPWFyZ3VtZW50cy5sZW5ndGg7aWYocil7YyhhK3IpO2Zvcih2YXIgbD1hO2wtLTspe3ZhciBoPWwrcjtsIGluIHQ/dFtoXT10W2xdOm8odCxoKX1mb3IodmFyIHU9MDt1PHI7dSsrKXRbdV09YXJndW1lbnRzW3VdfXJldHVybiBzKHQsYStyKX19KX0sKGUsdCxhKT0+e3ZhciByPWEoMzIpLG49VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFkZWxldGUgZVt0XSl0aHJvdyBuKCJDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICIrcih0KSsiIG9mICIrcihlKSl9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRmFrZVVuaWNvZGVGb250PXZvaWQgMDt0LmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKGUpe2xldHtmb250U2l6ZTp0LGZvbnROYW1lOmEsZm9udENvbG9yOnJ9PWU7cmV0dXJuYC8keygwLG4uZXNjYXBlUERGTmFtZSkoYSl9ICR7dH0gVGYgJHtnZXRQZGZDb2xvcihyLCEwKX1gfTt0LmdldFBkZkNvbG9yPWdldFBkZkNvbG9yO3QucGFyc2VBcHBlYXJhbmNlU3RyZWFtPWZ1bmN0aW9uIHBhcnNlQXBwZWFyYW5jZVN0cmVhbShlLHQsYSl7cmV0dXJuIG5ldyBBcHBlYXJhbmNlU3RyZWFtRXZhbHVhdG9yKGUsdCxhKS5wYXJzZSgpfTt0LnBhcnNlRGVmYXVsdEFwcGVhcmFuY2U9ZnVuY3Rpb24gcGFyc2VEZWZhdWx0QXBwZWFyYW5jZShlKXtyZXR1cm4gbmV3IERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yKGUpLnBhcnNlKCl9O2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDE0MCk7dmFyIHI9YSgxNTEpLG49YSgxNTApLGk9YSgxNDUpLHM9YSgxNjMpLG89YSgxNjQpLGM9YSgyMTApLGw9YSgyMDgpLGg9YSgxNTUpO2NsYXNzIERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yIGV4dGVuZHMgby5FdmFsdWF0b3JQcmVwcm9jZXNzb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIobmV3IGguU3RyaW5nU3RyZWFtKGUpKX1wYXJzZSgpe2NvbnN0IGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDs7KXtlLmFyZ3MubGVuZ3RoPTA7aWYoIXRoaXMucmVhZChlKSlicmVhaztpZigwIT09dGhpcy5zYXZlZFN0YXRlc0RlcHRoKWNvbnRpbnVlO2NvbnN0e2ZuOmEsYXJnczpufT1lO3N3aXRjaCgwfGEpe2Nhc2UgaS5PUFMuc2V0Rm9udDpjb25zdFtlLGFdPW47ZSBpbnN0YW5jZW9mIHIuTmFtZSYmKHQuZm9udE5hbWU9ZS5uYW1lKTsibnVtYmVyIj09dHlwZW9mIGEmJmE+MCYmKHQuZm9udFNpemU9YSk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsUkdCQ29sb3I6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0obiwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbEdyYXk6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNldEZpbGxDTVlLQ29sb3I6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKG4sMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpeygwLGkud2FybikoYHBhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICIke2V9Ii5gKX1yZXR1cm4gdH19Y2xhc3MgQXBwZWFyYW5jZVN0cmVhbUV2YWx1YXRvciBleHRlbmRzIG8uRXZhbHVhdG9yUHJlcHJvY2Vzc29ye2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihlKTt0aGlzLnN0cmVhbT1lO3RoaXMuZXZhbHVhdG9yT3B0aW9ucz10O3RoaXMueHJlZj1hO3RoaXMucmVzb3VyY2VzPWUuZGljdD8uZ2V0KCJSZXNvdXJjZXMiKX1wYXJzZSgpe2NvbnN0IGU9e2ZuOjAsYXJnczpbXX07bGV0IHQ9e3NjYWxlRmFjdG9yOjEsZm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpLGZpbGxDb2xvclNwYWNlOnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXl9LGE9ITE7Y29uc3Qgbj1bXTt0cnl7Zm9yKDs7KXtlLmFyZ3MubGVuZ3RoPTA7aWYoYXx8IXRoaXMucmVhZChlKSlicmVhaztjb25zdHtmbjpvLGFyZ3M6Y309ZTtzd2l0Y2goMHxvKXtjYXNlIGkuT1BTLnNhdmU6bi5wdXNoKHtzY2FsZUZhY3Rvcjp0LnNjYWxlRmFjdG9yLGZvbnRTaXplOnQuZm9udFNpemUsZm9udE5hbWU6dC5mb250TmFtZSxmb250Q29sb3I6dC5mb250Q29sb3Iuc2xpY2UoKSxmaWxsQ29sb3JTcGFjZTp0LmZpbGxDb2xvclNwYWNlfSk7YnJlYWs7Y2FzZSBpLk9QUy5yZXN0b3JlOnQ9bi5wb3AoKXx8dDticmVhaztjYXNlIGkuT1BTLnNldFRleHRNYXRyaXg6dC5zY2FsZUZhY3Rvcio9TWF0aC5oeXBvdChjWzBdLGNbMV0pO2JyZWFrO2Nhc2UgaS5PUFMuc2V0Rm9udDpjb25zdFtlLG9dPWM7ZSBpbnN0YW5jZW9mIHIuTmFtZSYmKHQuZm9udE5hbWU9ZS5uYW1lKTsibnVtYmVyIj09dHlwZW9mIG8mJm8+MCYmKHQuZm9udFNpemU9byp0LnNjYWxlRmFjdG9yKTticmVhaztjYXNlIGkuT1BTLnNldEZpbGxDb2xvclNwYWNlOnQuZmlsbENvbG9yU3BhY2U9cy5Db2xvclNwYWNlLnBhcnNlKHtjczpjWzBdLHhyZWY6dGhpcy54cmVmLHJlc291cmNlczp0aGlzLnJlc291cmNlcyxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOnRoaXMuX2xvY2FsQ29sb3JTcGFjZUNhY2hlfSk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsQ29sb3I6dC5maWxsQ29sb3JTcGFjZS5nZXRSZ2JJdGVtKGMsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNldEZpbGxSR0JDb2xvcjpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShjLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsR3JheTpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oYywwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbENNWUtDb2xvcjpzLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oYywwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgaS5PUFMuc2hvd1RleHQ6Y2FzZSBpLk9QUy5zaG93U3BhY2VkVGV4dDpjYXNlIGkuT1BTLm5leHRMaW5lU2hvd1RleHQ6Y2FzZSBpLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDphPSEwfX19Y2F0Y2goZSl7KDAsaS53YXJuKShgcGFyc2VBcHBlYXJhbmNlU3RyZWFtIC0gaWdub3JpbmcgZXJyb3JzOiAiJHtlfSIuYCl9dGhpcy5zdHJlYW0ucmVzZXQoKTtkZWxldGUgdC5zY2FsZUZhY3RvcjtkZWxldGUgdC5maWxsQ29sb3JTcGFjZTtyZXR1cm4gdH1nZXQgX2xvY2FsQ29sb3JTcGFjZUNhY2hlKCl7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIl9sb2NhbENvbG9yU3BhY2VDYWNoZSIsbmV3IGMuTG9jYWxDb2xvclNwYWNlQ2FjaGUpfWdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCl7Y29uc3QgZT1uZXcgbC5QREZGdW5jdGlvbkZhY3Rvcnkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmV2YWx1YXRvck9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkfSk7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIl9wZGZGdW5jdGlvbkZhY3RvcnkiLGUpfX1mdW5jdGlvbiBnZXRQZGZDb2xvcihlLHQpe2lmKGVbMF09PT1lWzFdJiZlWzFdPT09ZVsyXSl7Y29uc3QgYT1lWzBdLzI1NTtyZXR1cm5gJHsoMCxuLm51bWJlclRvU3RyaW5nKShhKX0gJHt0PyJnIjoiRyJ9YH1yZXR1cm4gQXJyYXkuZnJvbShlLChlPT4oMCxuLm51bWJlclRvU3RyaW5nKShlLzI1NSkpKS5qb2luKCIgIikrIiAiKyh0PyJyZyI6IlJHIil9Y2xhc3MgRmFrZVVuaWNvZGVGb250e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy54cmVmPWU7dGhpcy53aWR0aHM9bnVsbDt0aGlzLmZpcnN0Q2hhcj0xLzA7dGhpcy5sYXN0Q2hhcj0tMS8wO3RoaXMuZm9udEZhbWlseT10O2NvbnN0IGE9bmV3IE9mZnNjcmVlbkNhbnZhcygxLDEpO3RoaXMuY3R4TWVhc3VyZT1hLmdldENvbnRleHQoIjJkIik7RmFrZVVuaWNvZGVGb250Ll9mb250TmFtZUlkfHwoRmFrZVVuaWNvZGVGb250Ll9mb250TmFtZUlkPTEpO3RoaXMuZm9udE5hbWU9ci5OYW1lLmdldChgSW52YWxpZFBERmpzRm9udF8ke3R9XyR7RmFrZVVuaWNvZGVGb250Ll9mb250TmFtZUlkKyt9YCl9Z2V0IHRvVW5pY29kZVJlZigpe2lmKCFGYWtlVW5pY29kZUZvbnQuX3RvVW5pY29kZVJlZil7Y29uc3QgZT0iL0NJREluaXQgL1Byb2NTZXQgZmluZHJlc291cmNlIGJlZ2luXG4xMiBkaWN0IGJlZ2luXG5iZWdpbmNtYXBcbi9DSURTeXN0ZW1JbmZvXG48PCAvUmVnaXN0cnkgKEFkb2JlKVxuL09yZGVyaW5nIChVQ1MpIC9TdXBwbGVtZW50IDAgPj4gZGVmXG4vQ01hcE5hbWUgL0Fkb2JlLUlkZW50aXR5LVVDUyBkZWZcbi9DTWFwVHlwZSAyIGRlZlxuMSBiZWdpbmNvZGVzcGFjZXJhbmdlXG48MDAwMD4gPEZGRkY+XG5lbmRjb2Rlc3BhY2VyYW5nZVxuMSBiZWdpbmJmcmFuZ2VcbjwwMDAwPiA8RkZGRj4gPDAwMDA+XG5lbmRiZnJhbmdlXG5lbmRjbWFwIENNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcCBlbmQgZW5kIix0PUZha2VVbmljb2RlRm9udC50b1VuaWNvZGVTdHJlYW09bmV3IGguU3RyaW5nU3RyZWFtKGUpLGE9bmV3IHIuRGljdCh0aGlzLnhyZWYpO3QuZGljdD1hO2Euc2V0KCJMZW5ndGgiLGUubGVuZ3RoKTtGYWtlVW5pY29kZUZvbnQuX3RvVW5pY29kZVJlZj10aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZih0KX1yZXR1cm4gRmFrZVVuaWNvZGVGb250Ll90b1VuaWNvZGVSZWZ9Z2V0IGZvbnREZXNjcmlwdG9yUmVmKCl7aWYoIUZha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWYpe2NvbnN0IGU9bmV3IHIuRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJUeXBlIixyLk5hbWUuZ2V0KCJGb250RGVzY3JpcHRvciIpKTtlLnNldCgiRm9udE5hbWUiLHRoaXMuZm9udE5hbWUpO2Uuc2V0KCJGb250RmFtaWx5IiwiTXlyaWFkUHJvIFJlZ3VsYXIiKTtlLnNldCgiRm9udEJCb3giLFswLDAsMCwwXSk7ZS5zZXQoIkZvbnRTdHJldGNoIixyLk5hbWUuZ2V0KCJOb3JtYWwiKSk7ZS5zZXQoIkZvbnRXZWlnaHQiLDQwMCk7ZS5zZXQoIkl0YWxpY0FuZ2xlIiwwKTtGYWtlVW5pY29kZUZvbnQuX2ZvbnREZXNjcmlwdG9yUmVmPXRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfXJldHVybiBGYWtlVW5pY29kZUZvbnQuX2ZvbnREZXNjcmlwdG9yUmVmfWdldCBkZXNjZW5kYW50Rm9udFJlZigpe2NvbnN0IGU9bmV3IHIuRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJCYXNlRm9udCIsdGhpcy5mb250TmFtZSk7ZS5zZXQoIlR5cGUiLHIuTmFtZS5nZXQoIkZvbnQiKSk7ZS5zZXQoIlN1YnR5cGUiLHIuTmFtZS5nZXQoIkNJREZvbnRUeXBlMCIpKTtlLnNldCgiQ0lEVG9HSURNYXAiLHIuTmFtZS5nZXQoIklkZW50aXR5IikpO2Uuc2V0KCJGaXJzdENoYXIiLHRoaXMuZmlyc3RDaGFyKTtlLnNldCgiTGFzdENoYXIiLHRoaXMubGFzdENoYXIpO2Uuc2V0KCJGb250RGVzY3JpcHRvciIsdGhpcy5mb250RGVzY3JpcHRvclJlZik7ZS5zZXQoIkRXIiwxZTMpO2NvbnN0IHQ9W10sYT1bLi4udGhpcy53aWR0aHMuZW50cmllcygpXS5zb3J0KCk7bGV0IG49bnVsbCxpPW51bGw7Zm9yKGNvbnN0W2Uscl1vZiBhKWlmKG4paWYoZT09PW4raS5sZW5ndGgpaS5wdXNoKHIpO2Vsc2V7dC5wdXNoKG4saSk7bj1lO2k9W3JdfWVsc2V7bj1lO2k9W3JdfW4mJnQucHVzaChuLGkpO2Uuc2V0KCJXIix0KTtjb25zdCBzPW5ldyByLkRpY3QodGhpcy54cmVmKTtzLnNldCgiT3JkZXJpbmciLCJJZGVudGl0eSIpO3Muc2V0KCJSZWdpc3RyeSIsIkFkb2JlIik7cy5zZXQoIlN1cHBsZW1lbnQiLDApO2Uuc2V0KCJDSURTeXN0ZW1JbmZvIixzKTtyZXR1cm4gdGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9Z2V0IGJhc2VGb250UmVmKCl7Y29uc3QgZT1uZXcgci5EaWN0KHRoaXMueHJlZik7ZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKTtlLnNldCgiVHlwZSIsci5OYW1lLmdldCgiRm9udCIpKTtlLnNldCgiU3VidHlwZSIsci5OYW1lLmdldCgiVHlwZTAiKSk7ZS5zZXQoIkVuY29kaW5nIixyLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpO2Uuc2V0KCJEZXNjZW5kYW50Rm9udHMiLFt0aGlzLmRlc2NlbmRhbnRGb250UmVmXSk7ZS5zZXQoIlRvVW5pY29kZSIsdGhpcy50b1VuaWNvZGVSZWYpO3JldHVybiB0aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZihlKX1nZXQgcmVzb3VyY2VzKCl7Y29uc3QgZT1uZXcgci5EaWN0KHRoaXMueHJlZiksdD1uZXcgci5EaWN0KHRoaXMueHJlZik7dC5zZXQodGhpcy5mb250TmFtZS5uYW1lLHRoaXMuYmFzZUZvbnRSZWYpO2Uuc2V0KCJGb250Iix0KTtyZXR1cm4gZX1fY3JlYXRlQ29udGV4dCgpe3RoaXMud2lkdGhzPW5ldyBNYXA7dGhpcy5jdHhNZWFzdXJlLmZvbnQ9YDEwMDBweCAke3RoaXMuZm9udEZhbWlseX1gO3JldHVybiB0aGlzLmN0eE1lYXN1cmV9Y3JlYXRlRm9udFJlc291cmNlcyhlKXtjb25zdCB0PXRoaXMuX2NyZWF0ZUNvbnRleHQoKTtmb3IoY29uc3QgYSBvZiBlLnNwbGl0KC9cclxuP3xcbi8pKWZvcihjb25zdCBlIG9mIGEuc3BsaXQoIiIpKXtjb25zdCBhPWUuY2hhckNvZGVBdCgwKTtpZih0aGlzLndpZHRocy5oYXMoYSkpY29udGludWU7Y29uc3Qgcj10Lm1lYXN1cmVUZXh0KGUpLG49TWF0aC5jZWlsKHIud2lkdGgpO3RoaXMud2lkdGhzLnNldChhLG4pO3RoaXMuZmlyc3RDaGFyPU1hdGgubWluKGEsdGhpcy5maXJzdENoYXIpO3RoaXMubGFzdENoYXI9TWF0aC5tYXgoYSx0aGlzLmxhc3RDaGFyKX1yZXR1cm4gdGhpcy5yZXNvdXJjZXN9Y3JlYXRlQXBwZWFyYW5jZShlLHQsYSxzLG8sYyl7Y29uc3QgbD10aGlzLl9jcmVhdGVDb250ZXh0KCksdT1bXTtsZXQgZD0tMS8wO2Zvcihjb25zdCB0IG9mIGUuc3BsaXQoL1xyXG4/fFxuLykpe3UucHVzaCh0KTtjb25zdCBlPWwubWVhc3VyZVRleHQodCkud2lkdGg7ZD1NYXRoLm1heChkLGUpO2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIiIpKXtjb25zdCB0PWUuY2hhckNvZGVBdCgwKTtsZXQgYT10aGlzLndpZHRocy5nZXQodCk7aWYodm9pZCAwPT09YSl7Y29uc3Qgcj1sLm1lYXN1cmVUZXh0KGUpO2E9TWF0aC5jZWlsKHIud2lkdGgpO3RoaXMud2lkdGhzLnNldCh0LGEpO3RoaXMuZmlyc3RDaGFyPU1hdGgubWluKHQsdGhpcy5maXJzdENoYXIpO3RoaXMubGFzdENoYXI9TWF0aC5tYXgodCx0aGlzLmxhc3RDaGFyKX19fWQqPXMvMWUzO2NvbnN0W2YsZyxwLG1dPXQ7bGV0IGI9cC1mLHk9bS1nO2ElMTgwIT0wJiYoW2IseV09W3ksYl0pO2xldCB3PTE7ZD5iJiYodz1iL2QpO2xldCBTPTE7Y29uc3QgeD1pLkxJTkVfRkFDVE9SKnMsQz1pLkxJTkVfREVTQ0VOVF9GQUNUT1Iqcyx2PXgqdS5sZW5ndGg7dj55JiYoUz15L3YpO2NvbnN0IGs9cypNYXRoLm1pbih3LFMpLE89WyJxIixgMCAwICR7KDAsbi5udW1iZXJUb1N0cmluZykoYil9ICR7KDAsbi5udW1iZXJUb1N0cmluZykoeSl9IHJlIFcgbmAsIkJUIixgMSAwIDAgMSAwICR7KDAsbi5udW1iZXJUb1N0cmluZykoeStDKX0gVG0gMCBUYyAke2dldFBkZkNvbG9yKG8sITApfWAsYC8ke3RoaXMuZm9udE5hbWUubmFtZX0gJHsoMCxuLm51bWJlclRvU3RyaW5nKShrKX0gVGZgXSx7cmVzb3VyY2VzOlR9PXRoaXM7aWYoMSE9PShjPSJudW1iZXIiPT10eXBlb2YgYyYmYz49MCYmYzw9MT9jOjEpKXtPLnB1c2goIi9SMCBncyIpO2NvbnN0IGU9bmV3IHIuRGljdCh0aGlzLnhyZWYpLHQ9bmV3IHIuRGljdCh0aGlzLnhyZWYpO3Quc2V0KCJjYSIsYyk7dC5zZXQoIkNBIixjKTt0LnNldCgiVHlwZSIsci5OYW1lLmdldCgiRXh0R1N0YXRlIikpO2Uuc2V0KCJSMCIsdCk7VC5zZXQoIkV4dEdTdGF0ZSIsZSl9Y29uc3QgTT0oMCxuLm51bWJlclRvU3RyaW5nKSh4KTtmb3IoY29uc3QgZSBvZiB1KU8ucHVzaChgMCAtJHtNfSBUZCA8JHsoMCxuLnN0cmluZ1RvVVRGMTZIZXhTdHJpbmcpKGUpfT4gVGpgKTtPLnB1c2goIkVUIiwiUSIpO2NvbnN0IEU9Ty5qb2luKCJcbiIpLEQ9bmV3IHIuRGljdCh0aGlzLnhyZWYpO0Quc2V0KCJTdWJ0eXBlIixyLk5hbWUuZ2V0KCJGb3JtIikpO0Quc2V0KCJUeXBlIixyLk5hbWUuZ2V0KCJYT2JqZWN0IikpO0Quc2V0KCJCQm94IixbMCwwLGIseV0pO0Quc2V0KCJMZW5ndGgiLEUubGVuZ3RoKTtELnNldCgiUmVzb3VyY2VzIixUKTtpZihhKXtjb25zdCBlPSgwLG4uZ2V0Um90YXRpb25NYXRyaXgpKGEsYix5KTtELnNldCgiTWF0cml4IixlKX1jb25zdCBSPW5ldyBoLlN0cmluZ1N0cmVhbShFKTtSLmRpY3Q9RDtyZXR1cm4gUn19dC5GYWtlVW5pY29kZUZvbnQ9RmFrZVVuaWNvZGVGb250fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ29sb3JTcGFjZT12b2lkIDA7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO2EoMik7dmFyIHI9YSgxNDUpLG49YSgxNTEpLGk9YSgxNTIpLHM9YSgxNTApO2NsYXNzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmNvbnN0cnVjdG9yPT09Q29sb3JTcGFjZSYmKDAsci51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbG9yU3BhY2UuIik7dGhpcy5uYW1lPWU7dGhpcy5udW1Db21wcz10fWdldFJnYihlLHQpe2NvbnN0IGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3RoaXMuZ2V0UmdiSXRlbShlLHQsYSwwKTtyZXR1cm4gYX1nZXRSZ2JJdGVtKGUsdCxhLG4peygwLHIudW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JJdGVtIil9Z2V0UmdiQnVmZmVyKGUsdCxhLG4saSxzLG8peygwLHIudW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JCdWZmZXIiKX1nZXRPdXRwdXRMZW5ndGgoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0T3V0cHV0TGVuZ3RoIil9aXNQYXNzdGhyb3VnaChlKXtyZXR1cm4hMX1pc0RlZmF1bHREZWNvZGUoZSx0KXtyZXR1cm4gQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUoZSx0aGlzLm51bUNvbXBzKX1maWxsUmdiKGUsdCxhLHIsbixpLHMsbyxjKXtjb25zdCBsPXQqYTtsZXQgaD1udWxsO2NvbnN0IHU9MTw8cyxkPWEhPT1ufHx0IT09cjtpZih0aGlzLmlzUGFzc3Rocm91Z2gocykpaD1vO2Vsc2UgaWYoMT09PXRoaXMubnVtQ29tcHMmJmw+dSYmIkRldmljZUdyYXkiIT09dGhpcy5uYW1lJiYiRGV2aWNlUkdCIiE9PXRoaXMubmFtZSl7Y29uc3QgdD1zPD04P25ldyBVaW50OEFycmF5KHUpOm5ldyBVaW50MTZBcnJheSh1KTtmb3IobGV0IGU9MDtlPHU7ZSsrKXRbZV09ZTtjb25zdCBhPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKnUpO3RoaXMuZ2V0UmdiQnVmZmVyKHQsMCx1LGEsMCxzLDApO2lmKGQpe2g9bmV3IFVpbnQ4QXJyYXkoMypsKTtsZXQgZT0wO2ZvcihsZXQgdD0wO3Q8bDsrK3Qpe2NvbnN0IHI9MypvW3RdO2hbZSsrXT1hW3JdO2hbZSsrXT1hW3IrMV07aFtlKytdPWFbcisyXX19ZWxzZXtsZXQgdD0wO2ZvcihsZXQgcj0wO3I8bDsrK3Ipe2NvbnN0IG49MypvW3JdO2VbdCsrXT1hW25dO2VbdCsrXT1hW24rMV07ZVt0KytdPWFbbisyXTt0Kz1jfX19ZWxzZSBpZihkKXtoPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmwpO3RoaXMuZ2V0UmdiQnVmZmVyKG8sMCxsLGgsMCxzLDApfWVsc2UgdGhpcy5nZXRSZ2JCdWZmZXIobywwLHIqaSxlLDAscyxjKTtpZihoKWlmKGQpIWZ1bmN0aW9uIHJlc2l6ZVJnYkltYWdlKGUsdCxhLHIsbixpLHMpe3M9MSE9PXM/MDpzO2NvbnN0IG89YS9uLGM9ci9pO2xldCBsLGg9MDtjb25zdCB1PW5ldyBVaW50MTZBcnJheShuKSxkPTMqYTtmb3IobGV0IGU9MDtlPG47ZSsrKXVbZV09MypNYXRoLmZsb29yKGUqbyk7Zm9yKGxldCBhPTA7YTxpO2ErKyl7Y29uc3Qgcj1NYXRoLmZsb29yKGEqYykqZDtmb3IobGV0IGE9MDthPG47YSsrKXtsPXIrdVthXTt0W2grK109ZVtsKytdO3RbaCsrXT1lW2wrK107dFtoKytdPWVbbCsrXTtoKz1zfX19KGgsZSx0LGEscixuLGMpO2Vsc2V7bGV0IHQ9MCxhPTA7Zm9yKGxldCBuPTAscz1yKmk7bjxzO24rKyl7ZVt0KytdPWhbYSsrXTtlW3QrK109aFthKytdO2VbdCsrXT1oW2ErK107dCs9Y319fWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9c3RhdGljIF9jYWNoZShlLHQsYSxyKXtpZighYSl0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgInBhcnNlZENvbG9yU3BhY2UiIGFyZ3VtZW50LicpO2xldCBpLHM7aWYoZSBpbnN0YW5jZW9mIG4uUmVmKXtzPWU7ZT10LmZldGNoKGUpfWUgaW5zdGFuY2VvZiBuLk5hbWUmJihpPWUubmFtZSk7KGl8fHMpJiZhLnNldChpLHMscil9c3RhdGljIGdldENhY2hlZChlLHQsYSl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLmdldENhY2hlZCAtIGV4cGVjdGVkICJsb2NhbENvbG9yU3BhY2VDYWNoZSIgYXJndW1lbnQuJyk7aWYoZSBpbnN0YW5jZW9mIG4uUmVmKXtjb25zdCByPWEuZ2V0QnlSZWYoZSk7aWYocilyZXR1cm4gcjt0cnl7ZT10LmZldGNoKGUpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBuLk5hbWUpe2NvbnN0IHQ9YS5nZXRCeU5hbWUoZS5uYW1lKTtpZih0KXJldHVybiB0fXJldHVybiBudWxsfXN0YXRpYyBhc3luYyBwYXJzZUFzeW5jKGUpe2xldHtjczp0LHhyZWY6YSxyZXNvdXJjZXM6cj1udWxsLHBkZkZ1bmN0aW9uRmFjdG9yeTpuLGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9PWU7Y29uc3Qgcz10aGlzLl9wYXJzZSh0LGEscixuKTt0aGlzLl9jYWNoZSh0LGEsaSxzKTtyZXR1cm4gc31zdGF0aWMgcGFyc2UoZSl7bGV0e2NzOnQseHJlZjphLHJlc291cmNlczpyPW51bGwscGRmRnVuY3Rpb25GYWN0b3J5Om4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6aX09ZTtjb25zdCBzPXRoaXMuZ2V0Q2FjaGVkKHQsYSxpKTtpZihzKXJldHVybiBzO2NvbnN0IG89dGhpcy5fcGFyc2UodCxhLHIsbik7dGhpcy5fY2FjaGUodCxhLGksbyk7cmV0dXJuIG99c3RhdGljIF9wYXJzZShlLHQpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2Ygbi5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiUGF0dGVybiI6cmV0dXJuIG5ldyBQYXR0ZXJuQ1MobnVsbCk7ZGVmYXVsdDppZihhIGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCByPWEuZ2V0KCJDb2xvclNwYWNlIik7aWYociBpbnN0YW5jZW9mIG4uRGljdCl7Y29uc3Qgcz1yLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBuLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxhLGkpO2U9czticmVha319fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogJHtlLm5hbWV9YCl9aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgbj10LmZldGNoSWZSZWYoZVswXSkubmFtZTtsZXQgcyxvLGMsbCxoLHU7c3dpdGNoKG4pe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cz10LmZldGNoSWZSZWYoZVsxXSk7bD1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7aD1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7dT1zLmdldCgiR2FtbWEiKTtyZXR1cm4gbmV3IENhbEdyYXlDUyhsLGgsdSk7Y2FzZSJDYWxSR0IiOnM9dC5mZXRjaElmUmVmKGVbMV0pO2w9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpO2g9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO3U9cy5nZXRBcnJheSgiR2FtbWEiKTtjb25zdCBkPXMuZ2V0QXJyYXkoIk1hdHJpeCIpO3JldHVybiBuZXcgQ2FsUkdCQ1MobCxoLHUsZCk7Y2FzZSJJQ0NCYXNlZCI6Y29uc3QgZj10LmZldGNoSWZSZWYoZVsxXSkuZGljdDtvPWYuZ2V0KCJOIik7Y29uc3QgZz1mLmdldCgiQWx0ZXJuYXRlIik7aWYoZyl7Y29uc3QgZT10aGlzLl9wYXJzZShnLHQsYSxpKTtpZihlLm51bUNvbXBzPT09bylyZXR1cm4gZTsoMCxyLndhcm4pKCJJQ0NCYXNlZCBjb2xvciBzcGFjZTogSWdub3JpbmcgaW5jb3JyZWN0IC9BbHRlcm5hdGUgZW50cnkuIil9aWYoMT09PW8pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2lmKDM9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2lmKDQ9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215azticmVhaztjYXNlIlBhdHRlcm4iOmM9ZVsxXXx8bnVsbDtjJiYoYz10aGlzLl9wYXJzZShjLHQsYSxpKSk7cmV0dXJuIG5ldyBQYXR0ZXJuQ1MoYyk7Y2FzZSJJIjpjYXNlIkluZGV4ZWQiOmM9dGhpcy5fcGFyc2UoZVsxXSx0LGEsaSk7Y29uc3QgcD10LmZldGNoSWZSZWYoZVsyXSkrMSxtPXQuZmV0Y2hJZlJlZihlWzNdKTtyZXR1cm4gbmV3IEluZGV4ZWRDUyhjLHAsbSk7Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOmNvbnN0IGI9dC5mZXRjaElmUmVmKGVbMV0pO289QXJyYXkuaXNBcnJheShiKT9iLmxlbmd0aDoxO2M9dGhpcy5fcGFyc2UoZVsyXSx0LGEsaSk7Y29uc3QgeT1pLmNyZWF0ZShlWzNdKTtyZXR1cm4gbmV3IEFsdGVybmF0ZUNTKG8sYyx5KTtjYXNlIkxhYiI6cz10LmZldGNoSWZSZWYoZVsxXSk7bD1zLmdldEFycmF5KCJXaGl0ZVBvaW50Iik7aD1zLmdldEFycmF5KCJCbGFja1BvaW50Iik7Y29uc3Qgdz1zLmdldEFycmF5KCJSYW5nZSIpO3JldHVybiBuZXcgTGFiQ1MobCxoLHcpO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVuaW1wbGVtZW50ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7bn1gKX19dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVucmVjb2duaXplZCBDb2xvclNwYWNlIG9iamVjdDogJHtlfWApfXN0YXRpYyBpc0RlZmF1bHREZWNvZGUoZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aCl7KDAsci53YXJuKSgiVGhlIGRlY29kZSBtYXAgaXMgbm90IHRoZSBjb3JyZWN0IGxlbmd0aCIpO3JldHVybiEwfWZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrPTIpaWYoMCE9PWVbdF18fDEhPT1lW3QrMV0pcmV0dXJuITE7cmV0dXJuITB9c3RhdGljIGdldCBzaW5nbGV0b25zKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInNpbmdsZXRvbnMiLHtnZXQgZ3JheSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJncmF5IixuZXcgRGV2aWNlR3JheUNTKX0sZ2V0IHJnYigpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJyZ2IiLG5ldyBEZXZpY2VSZ2JDUyl9LGdldCBjbXlrKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImNteWsiLG5ldyBEZXZpY2VDbXlrQ1MpfX0pfX10LkNvbG9yU3BhY2U9Q29sb3JTcGFjZTtjbGFzcyBBbHRlcm5hdGVDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJBbHRlcm5hdGUiLGUpO3RoaXMuYmFzZT10O3RoaXMudGludEZuPWE7dGhpcy50bXBCdWY9bmV3IEZsb2F0MzJBcnJheSh0Lm51bUNvbXBzKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IG49dGhpcy50bXBCdWY7dGhpcy50aW50Rm4oZSx0LG4sMCk7dGhpcy5iYXNlLmdldFJnYkl0ZW0obiwwLGEscil9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89dGhpcy50aW50Rm4sYz10aGlzLmJhc2UsbD0xLygoMTw8aSktMSksaD1jLm51bUNvbXBzLHU9Yy51c2VzWmVyb1RvT25lUmFuZ2UsZD0oYy5pc1Bhc3N0aHJvdWdoKDgpfHwhdSkmJjA9PT1zO2xldCBmPWQ/bjowO2NvbnN0IGc9ZD9yOm5ldyBVaW50OENsYW1wZWRBcnJheShoKmEpLHA9dGhpcy5udW1Db21wcyxtPW5ldyBGbG9hdDMyQXJyYXkocCksYj1uZXcgRmxvYXQzMkFycmF5KGgpO2xldCB5LHc7Zm9yKHk9MDt5PGE7eSsrKXtmb3Iodz0wO3c8cDt3KyspbVt3XT1lW3QrK10qbDtvKG0sMCxiLDApO2lmKHUpZm9yKHc9MDt3PGg7dysrKWdbZisrXT0yNTUqYlt3XTtlbHNle2MuZ2V0UmdiSXRlbShiLDAsZyxmKTtmKz1ofX1kfHxjLmdldFJnYkJ1ZmZlcihnLDAsYSxyLG4sOCxzKX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5iYXNlLmdldE91dHB1dExlbmd0aChlKnRoaXMuYmFzZS5udW1Db21wcy90aGlzLm51bUNvbXBzLHQpfX1jbGFzcyBQYXR0ZXJuQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJQYXR0ZXJuIixudWxsKTt0aGlzLmJhc2U9ZX1pc0RlZmF1bHREZWNvZGUoZSx0KXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIFBhdHRlcm5DUy5pc0RlZmF1bHREZWNvZGUiKX19Y2xhc3MgSW5kZXhlZENTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkluZGV4ZWQiLDEpO3RoaXMuYmFzZT1lO3RoaXMuaGlnaFZhbD10O2NvbnN0IG49ZS5udW1Db21wcyp0O3RoaXMubG9va3VwPW5ldyBVaW50OEFycmF5KG4pO2lmKGEgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2NvbnN0IGU9YS5nZXRCeXRlcyhuKTt0aGlzLmxvb2t1cC5zZXQoZSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGEpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICR7YX1gKTtmb3IobGV0IGU9MDtlPG47KytlKXRoaXMubG9va3VwW2VdPTI1NSZhLmNoYXJDb2RlQXQoZSl9fWdldFJnYkl0ZW0oZSx0LGEscil7Y29uc3Qgbj10aGlzLmJhc2UubnVtQ29tcHMsaT1lW3RdKm47dGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCxpLDEsYSxyLDgsMCl9Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89dGhpcy5iYXNlLGM9by5udW1Db21wcyxsPW8uZ2V0T3V0cHV0TGVuZ3RoKGMscyksaD10aGlzLmxvb2t1cDtmb3IobGV0IGk9MDtpPGE7KytpKXtjb25zdCBhPWVbdCsrXSpjO28uZ2V0UmdiQnVmZmVyKGgsYSwxLHIsbiw4LHMpO24rPWx9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzLHQpfWlzRGVmYXVsdERlY29kZShlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIhPT1lLmxlbmd0aCl7KDAsci53YXJuKSgiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1pZighTnVtYmVyLmlzSW50ZWdlcih0KXx8dDwxKXsoMCxyLndhcm4pKCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3QiKTtyZXR1cm4hMH1yZXR1cm4gMD09PWVbMF0mJmVbMV09PT0oMTw8dCktMX19Y2xhc3MgRGV2aWNlR3JheUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VHcmF5IiwxKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe2NvbnN0IG49MjU1KmVbdF07YVtyXT1hW3IrMV09YVtyKzJdPW59Z2V0UmdiQnVmZmVyKGUsdCxhLHIsbixpLHMpe2NvbnN0IG89MjU1LygoMTw8aSktMSk7bGV0IGM9dCxsPW47Zm9yKGxldCB0PTA7dDxhOysrdCl7Y29uc3QgdD1vKmVbYysrXTtyW2wrK109dDtyW2wrK109dDtyW2wrK109dDtsKz1zfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KX19Y2xhc3MgRGV2aWNlUmdiQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZVJHQiIsMyl9Z2V0UmdiSXRlbShlLHQsYSxyKXthW3JdPTI1NSplW3RdO2FbcisxXT0yNTUqZVt0KzFdO2FbcisyXT0yNTUqZVt0KzJdfWdldFJnYkJ1ZmZlcihlLHQsYSxyLG4saSxzKXtpZig4PT09aSYmMD09PXMpe3Iuc2V0KGUuc3ViYXJyYXkodCx0KzMqYSksbik7cmV0dXJufWNvbnN0IG89MjU1LygoMTw8aSktMSk7bGV0IGM9dCxsPW47Zm9yKGxldCB0PTA7dDxhOysrdCl7cltsKytdPW8qZVtjKytdO3JbbCsrXT1vKmVbYysrXTtyW2wrK109byplW2MrK107bCs9c319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuIDg9PT1lfX1jbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZUNNWUsiLDQpfSNyKGUsdCxhLHIsbil7Y29uc3QgaT1lW3RdKmEscz1lW3QrMV0qYSxvPWVbdCsyXSphLGM9ZVt0KzNdKmE7cltuXT0yNTUraSooLTQuMzg3MzMyMzg0NjA5OTg4KmkrNTQuNDg2MTUxOTQxODkxNzYqcysxOC44MjI5MDUwMjE2NTMwMipvKzIxMi4yNTY2MjQ1MTYzOTU4NSpjLTI4NS4yMzMxMDI2MTM3MDA0KStzKigxLjcxNDk3NjM0NzczNjIxMzQqcy01LjYwOTY3MzY5MDQwNDczMTUqbystMTcuODczODcwODYxNDE1NDQ0KmMtNS40OTcwMDY0MjcxOTYzNjYpK28qKC0yLjUyMTczNDAxMzE2ODMwMzMqby0yMS4yNDg5MjMzMzczNTMwNzMqYysxNy41MTE5MjcwODQxODEzKStjKigtMjEuODYxMjIxNDc0NjM2MDUqYy0xODkuNDgxODA4MzU5MjI3NDcpO3JbbisxXT0yNTUraSooOC44NDEwNDE0MjIwMzYxNDkqaSs2MC4xMTgwMjcwNDU1OTczNjYqcys2Ljg3MTQyNTU5MjA0OTAwNypvKzMxLjE1OTEwMDEzMDA1NTkyMipjLTc5LjI5NzA4NDQ4MTY1NDgpK3MqKC0xNS4zMTAzNjEzMDY5Njc4MTcqcysxNy41NzUyNTEyNjExMDk0ODIqbysxMzEuMzUyNTA5MTI0OTM5NzYqYy0xOTAuOTQ1MzMwMjU4ODk1MSkrbyooNC40NDQzMzkxMDI4NTI3Mzkqbys5Ljg2MzI4NjE0OTM0MDUqYy0yNC44Njc0MTU4MjU1NTg3OCkrYyooLTIwLjczNzMyNTQ3MTE4MTAzNCpjLTE4Ny44MDQ1MzcwOTcxOTU3OCk7cltuKzJdPTI1NStpKiguODg0MjUyMjQzMDAwMzI5NippKzguMDc4Njc3NTAzMTEyOTI4KnMrMzAuODk5NzgzMDk3MDM3Mjkqby0uMjM4ODMyMzg2ODkxNzg5MzQqYy0xNC4xODM1NzY3OTk2NzMyODYpK3MqKDEwLjQ5NTkzMjczNDMyMDcyKnMrNjMuMDIzNzg0OTQ3NTQwNTIqbys1MC42MDY5NTc2NTYzNjA3MzQqYy0xMTIuMjM4ODQyNTM3MTkyNDgpK28qKC4wMzI5NjA0MTExNDg3MzIxNypvKzExNS42MDM4NDQ0OTY0NjY0MSpjLTE5My41ODIwOTM1Njg2MTUwNSkrYyooLTIyLjMzODE2ODA3MzA5ODg2KmMtMTgwLjEyNjEzOTc0NzA4MzY3KX1nZXRSZ2JJdGVtKGUsdCxhLHIpe3RoaXMuI3IoZSx0LDEsYSxyKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0xLygoMTw8aSktMSk7Zm9yKGxldCBpPTA7aTxhO2krKyl7dGhpcy4jcihlLHQsbyxyLG4pO3QrPTQ7bis9MytzfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fWNsYXNzIENhbEdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKCJDYWxHcmF5IiwxKTtpZighZSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbEdyYXkiKTtbdGhpcy5YVyx0aGlzLllXLHRoaXMuWlddPWU7W3RoaXMuWEIsdGhpcy5ZQix0aGlzLlpCXT10fHxbMCwwLDBdO3RoaXMuRz1hfHwxO2lmKHRoaXMuWFc8MHx8dGhpcy5aVzwwfHwxIT09dGhpcy5ZVyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICR7dGhpcy5uYW1lfSwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlYCk7aWYodGhpcy5YQjwwfHx0aGlzLllCPDB8fHRoaXMuWkI8MCl7KDAsci5pbmZvKShgSW52YWxpZCBCbGFja1BvaW50IGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuWEI9dGhpcy5ZQj10aGlzLlpCPTB9MD09PXRoaXMuWEImJjA9PT10aGlzLllCJiYwPT09dGhpcy5aQnx8KDAsci53YXJuKShgJHt0aGlzLm5hbWV9LCBCbGFja1BvaW50OiBYQjogJHt0aGlzLlhCfSwgWUI6ICR7dGhpcy5ZQn0sIFpCOiAke3RoaXMuWkJ9LCBvbmx5IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuYCk7aWYodGhpcy5HPDEpeygwLHIuaW5mbykoYEludmFsaWQgR2FtbWE6ICR7dGhpcy5HfSBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLkc9MX19I3IoZSx0LGEscixuKXtjb25zdCBpPShlW3RdKm4pKip0aGlzLkcscz10aGlzLllXKmksbz1NYXRoLm1heCgyOTUuOCpzKiouMzMzMzMzMzMzMzMzMzMzMy00MC44LDApO2Fbcl09bzthW3IrMV09bzthW3IrMl09b31nZXRSZ2JJdGVtKGUsdCxhLHIpe3RoaXMuI3IoZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0xLygoMTw8aSktMSk7Zm9yKGxldCBpPTA7aTxhOysraSl7dGhpcy4jcihlLHQscixuLG8pO3QrPTE7bis9MytzfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KX19Y2xhc3MgQ2FsUkdCQ1MgZXh0ZW5kcyBDb2xvclNwYWNle3N0YXRpYyNuPW5ldyBGbG9hdDMyQXJyYXkoWy44OTUxLC4yNjY0LC0uMTYxNCwtLjc1MDIsMS43MTM1LC4wMzY3LC4wMzg5LC0uMDY4NSwxLjAyOTZdKTtzdGF0aWMjaT1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSk7c3RhdGljI3M9bmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLC0xLjUzNzEzODUsLS40OTg1MzE0LC0uOTY5MjY2LDEuODc2MDEwOCwuMDQxNTU2LC4wNTU2NDM0LC0uMjA0MDI1OSwxLjA1NzIyNTJdKTtzdGF0aWMjbz1uZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pO3N0YXRpYyNjPW5ldyBGbG9hdDMyQXJyYXkoMyk7c3RhdGljI2w9bmV3IEZsb2F0MzJBcnJheSgzKTtzdGF0aWMjaD1uZXcgRmxvYXQzMkFycmF5KDMpO3N0YXRpYyN1PSgyNC8xMTYpKiozLzg7Y29uc3RydWN0b3IoZSx0LGEsbil7c3VwZXIoIkNhbFJHQiIsMyk7aWYoIWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTtjb25zdFtpLHMsb109dGhpcy53aGl0ZVBvaW50PWUsW2MsbCxoXT10aGlzLmJsYWNrUG9pbnQ9dHx8bmV3IEZsb2F0MzJBcnJheSgzKTtbdGhpcy5HUix0aGlzLkdHLHRoaXMuR0JdPWF8fG5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSk7W3RoaXMuTVhBLHRoaXMuTVlBLHRoaXMuTVpBLHRoaXMuTVhCLHRoaXMuTVlCLHRoaXMuTVpCLHRoaXMuTVhDLHRoaXMuTVlDLHRoaXMuTVpDXT1ufHxuZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDEsMCwwLDAsMV0pO2lmKGk8MHx8bzwwfHwxIT09cyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICR7dGhpcy5uYW1lfSwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlYCk7aWYoYzwwfHxsPDB8fGg8MCl7KDAsci5pbmZvKShgSW52YWxpZCBCbGFja1BvaW50IGZvciAke3RoaXMubmFtZX0gWyR7Y30sICR7bH0sICR7aH1dLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLmJsYWNrUG9pbnQ9bmV3IEZsb2F0MzJBcnJheSgzKX1pZih0aGlzLkdSPDB8fHRoaXMuR0c8MHx8dGhpcy5HQjwwKXsoMCxyLmluZm8pKGBJbnZhbGlkIEdhbW1hIFske3RoaXMuR1J9LCAke3RoaXMuR0d9LCAke3RoaXMuR0J9XSBmb3IgJHt0aGlzLm5hbWV9LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5gKTt0aGlzLkdSPXRoaXMuR0c9dGhpcy5HQj0xfX0jZChlLHQsYSl7YVswXT1lWzBdKnRbMF0rZVsxXSp0WzFdK2VbMl0qdFsyXTthWzFdPWVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdO2FbMl09ZVs2XSp0WzBdK2VbN10qdFsxXStlWzhdKnRbMl19I2YoZSx0LGEpe2FbMF09MSp0WzBdL2VbMF07YVsxXT0xKnRbMV0vZVsxXTthWzJdPTEqdFsyXS9lWzJdfSNnKGUsdCxhKXthWzBdPS45NTA0Nyp0WzBdL2VbMF07YVsxXT0xKnRbMV0vZVsxXTthWzJdPTEuMDg4ODMqdFsyXS9lWzJdfSNwKGUpe3JldHVybiBlPD0uMDAzMTMwOD90aGlzLiNtKDAsMSwxMi45MiplKTplPj0uOTk1NTQ1MjU/MTp0aGlzLiNtKDAsMSwxLjA1NSplKiooMS8yLjQpLS4wNTUpfSNtKGUsdCxhKXtyZXR1cm4gTWF0aC5tYXgoZSxNYXRoLm1pbih0LGEpKX0jYihlKXtyZXR1cm4gZTwwPy10aGlzLiNiKC1lKTplPjg/KChlKzE2KS8xMTYpKiozOmUqQ2FsUkdCQ1MuI3V9I3koZSx0LGEpe2lmKDA9PT1lWzBdJiYwPT09ZVsxXSYmMD09PWVbMl0pe2FbMF09dFswXTthWzFdPXRbMV07YVsyXT10WzJdO3JldHVybn1jb25zdCByPXRoaXMuI2IoMCksbj0oMS1yKS8oMS10aGlzLiNiKGVbMF0pKSxpPTEtbixzPSgxLXIpLygxLXRoaXMuI2IoZVsxXSkpLG89MS1zLGM9KDEtcikvKDEtdGhpcy4jYihlWzJdKSksbD0xLWM7YVswXT10WzBdKm4raTthWzFdPXRbMV0qcytvO2FbMl09dFsyXSpjK2x9I3coZSx0LGEpe2lmKDE9PT1lWzBdJiYxPT09ZVsyXSl7YVswXT10WzBdO2FbMV09dFsxXTthWzJdPXRbMl07cmV0dXJufWNvbnN0IHI9YTt0aGlzLiNkKENhbFJHQkNTLiNuLHQscik7Y29uc3Qgbj1DYWxSR0JDUy4jYzt0aGlzLiNmKGUscixuKTt0aGlzLiNkKENhbFJHQkNTLiNpLG4sYSl9I1MoZSx0LGEpe2NvbnN0IHI9YTt0aGlzLiNkKENhbFJHQkNTLiNuLHQscik7Y29uc3Qgbj1DYWxSR0JDUy4jYzt0aGlzLiNnKGUscixuKTt0aGlzLiNkKENhbFJHQkNTLiNpLG4sYSl9I3IoZSx0LGEscixuKXtjb25zdCBpPXRoaXMuI20oMCwxLGVbdF0qbikscz10aGlzLiNtKDAsMSxlW3QrMV0qbiksbz10aGlzLiNtKDAsMSxlW3QrMl0qbiksYz0xPT09aT8xOmkqKnRoaXMuR1IsbD0xPT09cz8xOnMqKnRoaXMuR0csaD0xPT09bz8xOm8qKnRoaXMuR0IsdT10aGlzLk1YQSpjK3RoaXMuTVhCKmwrdGhpcy5NWEMqaCxkPXRoaXMuTVlBKmMrdGhpcy5NWUIqbCt0aGlzLk1ZQypoLGY9dGhpcy5NWkEqYyt0aGlzLk1aQipsK3RoaXMuTVpDKmgsZz1DYWxSR0JDUy4jbDtnWzBdPXU7Z1sxXT1kO2dbMl09Zjtjb25zdCBwPUNhbFJHQkNTLiNoO3RoaXMuI3codGhpcy53aGl0ZVBvaW50LGcscCk7Y29uc3QgbT1DYWxSR0JDUy4jbDt0aGlzLiN5KHRoaXMuYmxhY2tQb2ludCxwLG0pO2NvbnN0IGI9Q2FsUkdCQ1MuI2g7dGhpcy4jUyhDYWxSR0JDUy4jbyxtLGIpO2NvbnN0IHk9Q2FsUkdCQ1MuI2w7dGhpcy4jZChDYWxSR0JDUy4jcyxiLHkpO2Fbcl09MjU1KnRoaXMuI3AoeVswXSk7YVtyKzFdPTI1NSp0aGlzLiNwKHlbMV0pO2FbcisyXT0yNTUqdGhpcy4jcCh5WzJdKX1nZXRSZ2JJdGVtKGUsdCxhLHIpe3RoaXMuI3IoZSx0LGEsciwxKX1nZXRSZ2JCdWZmZXIoZSx0LGEscixuLGkscyl7Y29uc3Qgbz0xLygoMTw8aSktMSk7Zm9yKGxldCBpPTA7aTxhOysraSl7dGhpcy4jcihlLHQscixuLG8pO3QrPTM7bis9MytzfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9fWNsYXNzIExhYkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoIkxhYiIsMyk7aWYoIWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWIiKTtbdGhpcy5YVyx0aGlzLllXLHRoaXMuWlddPWU7W3RoaXMuYW1pbix0aGlzLmFtYXgsdGhpcy5ibWluLHRoaXMuYm1heF09YXx8Wy0xMDAsMTAwLC0xMDAsMTAwXTtbdGhpcy5YQix0aGlzLllCLHRoaXMuWkJdPXR8fFswLDAsMF07aWYodGhpcy5YVzwwfHx0aGlzLlpXPDB8fDEhPT10aGlzLllXKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7aWYodGhpcy5YQjwwfHx0aGlzLllCPDB8fHRoaXMuWkI8MCl7KDAsci5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpO3RoaXMuWEI9dGhpcy5ZQj10aGlzLlpCPTB9aWYodGhpcy5hbWluPnRoaXMuYW1heHx8dGhpcy5ibWluPnRoaXMuYm1heCl7KDAsci5pbmZvKSgiSW52YWxpZCBSYW5nZSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzIik7dGhpcy5hbWluPS0xMDA7dGhpcy5hbWF4PTEwMDt0aGlzLmJtaW49LTEwMDt0aGlzLmJtYXg9MTAwfX0jeChlKXtyZXR1cm4gZT49Ni8yOT9lKiozOjEwOC84NDEqKGUtNC8yOSl9I0EoZSx0LGEscil7cmV0dXJuIGErZSooci1hKS90fSNyKGUsdCxhLHIsbil7bGV0IGk9ZVt0XSxzPWVbdCsxXSxvPWVbdCsyXTtpZighMSE9PWEpe2k9dGhpcy4jQShpLGEsMCwxMDApO3M9dGhpcy4jQShzLGEsdGhpcy5hbWluLHRoaXMuYW1heCk7bz10aGlzLiNBKG8sYSx0aGlzLmJtaW4sdGhpcy5ibWF4KX1zPnRoaXMuYW1heD9zPXRoaXMuYW1heDpzPHRoaXMuYW1pbiYmKHM9dGhpcy5hbWluKTtvPnRoaXMuYm1heD9vPXRoaXMuYm1heDpvPHRoaXMuYm1pbiYmKG89dGhpcy5ibWluKTtjb25zdCBjPShpKzE2KS8xMTYsbD1jK3MvNTAwLGg9Yy1vLzIwMCx1PXRoaXMuWFcqdGhpcy4jeChsKSxkPXRoaXMuWVcqdGhpcy4jeChjKSxmPXRoaXMuWlcqdGhpcy4jeChoKTtsZXQgZyxwLG07aWYodGhpcy5aVzwxKXtnPTMuMTMzOSp1Ky0xLjYxNypkKy0uNDkwNipmO3A9LS45Nzg1KnUrMS45MTYqZCsuMDMzMypmO209LjA3Mip1Ky0uMjI5KmQrMS40MDU3KmZ9ZWxzZXtnPTMuMjQwNip1Ky0xLjUzNzIqZCstLjQ5ODYqZjtwPS0uOTY4OSp1KzEuODc1OCpkKy4wNDE1KmY7bT0uMDU1Nyp1Ky0uMjA0KmQrMS4wNTcqZn1yW25dPTI1NSpNYXRoLnNxcnQoZyk7cltuKzFdPTI1NSpNYXRoLnNxcnQocCk7cltuKzJdPTI1NSpNYXRoLnNxcnQobSl9Z2V0UmdiSXRlbShlLHQsYSxyKXt0aGlzLiNyKGUsdCwhMSxhLHIpfWdldFJnYkJ1ZmZlcihlLHQsYSxyLG4saSxzKXtjb25zdCBvPSgxPDxpKS0xO2ZvcihsZXQgaT0wO2k8YTtpKyspe3RoaXMuI3IoZSx0LG8scixuKTt0Kz0zO24rPTMrc319Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiEwfWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlBhcnRpYWxFdmFsdWF0b3I9dC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9dm9pZCAwO2EoMTQwKTthKDIpO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDExNik7YSgxMjcpO2EoMTI5KTthKDEzMik7YSgxMzQpO2EoMTM2KTthKDEzOCk7YSgxNTgpO2EoMTYwKTt2YXIgcj1hKDE0NSksbj1hKDE2NSksaT1hKDE1MSkscz1hKDE4NSksbz1hKDE4OCksYz1hKDE5MiksbD1hKDIwMSksaD1hKDIwMiksdT1hKDE5MyksZD1hKDIwOCksZj1hKDE2NyksZz1hKDIxMCkscD1hKDE1NSksbT1hKDE1MiksYj1hKDIxMSkseT1hKDE2Myksdz1hKDE2OSksUz1hKDE4OSkseD1hKDIxMiksQz1hKDE5MCksdj1hKDE5Niksaz1hKDE5MSksTz1hKDIxMyksVD1hKDIxNCksTT1hKDIxNSksRT1hKDIxNik7Y29uc3QgRD1PYmplY3QuZnJlZXplKHttYXhJbWFnZVNpemU6LTEsZGlzYWJsZUZvbnRGYWNlOiExLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITAsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITEsY2FudmFzTWF4QXJlYUluQnl0ZXM6LTEsZm9udEV4dHJhUHJvcGVydGllczohMSx1c2VTeXN0ZW1Gb250czohMCxjTWFwVXJsOm51bGwsc3RhbmRhcmRGb250RGF0YVVybDpudWxsfSksUj0xLE49MixMPVByb21pc2UucmVzb2x2ZSgpO2Z1bmN0aW9uIG5vcm1hbGl6ZUJsZW5kTW9kZShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKEFycmF5LmlzQXJyYXkoZSkpe2Zvcihjb25zdCB0IG9mIGUpe2NvbnN0IGU9bm9ybWFsaXplQmxlbmRNb2RlKHQsITApO2lmKGUpcmV0dXJuIGV9KDAsci53YXJuKShgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZSBBcnJheTogJHtlfWApO3JldHVybiJzb3VyY2Utb3ZlciJ9aWYoIShlIGluc3RhbmNlb2YgaS5OYW1lKSlyZXR1cm4gdD9udWxsOiJzb3VyY2Utb3ZlciI7c3dpdGNoKGUubmFtZSl7Y2FzZSJOb3JtYWwiOmNhc2UiQ29tcGF0aWJsZSI6cmV0dXJuInNvdXJjZS1vdmVyIjtjYXNlIk11bHRpcGx5IjpyZXR1cm4ibXVsdGlwbHkiO2Nhc2UiU2NyZWVuIjpyZXR1cm4ic2NyZWVuIjtjYXNlIk92ZXJsYXkiOnJldHVybiJvdmVybGF5IjtjYXNlIkRhcmtlbiI6cmV0dXJuImRhcmtlbiI7Y2FzZSJMaWdodGVuIjpyZXR1cm4ibGlnaHRlbiI7Y2FzZSJDb2xvckRvZGdlIjpyZXR1cm4iY29sb3ItZG9kZ2UiO2Nhc2UiQ29sb3JCdXJuIjpyZXR1cm4iY29sb3ItYnVybiI7Y2FzZSJIYXJkTGlnaHQiOnJldHVybiJoYXJkLWxpZ2h0IjtjYXNlIlNvZnRMaWdodCI6cmV0dXJuInNvZnQtbGlnaHQiO2Nhc2UiRGlmZmVyZW5jZSI6cmV0dXJuImRpZmZlcmVuY2UiO2Nhc2UiRXhjbHVzaW9uIjpyZXR1cm4iZXhjbHVzaW9uIjtjYXNlIkh1ZSI6cmV0dXJuImh1ZSI7Y2FzZSJTYXR1cmF0aW9uIjpyZXR1cm4ic2F0dXJhdGlvbiI7Y2FzZSJDb2xvciI6cmV0dXJuImNvbG9yIjtjYXNlIkx1bWlub3NpdHkiOnJldHVybiJsdW1pbm9zaXR5In1pZih0KXJldHVybiBudWxsOygwLHIud2FybikoYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICR7ZS5uYW1lfWApO3JldHVybiJzb3VyY2Utb3ZlciJ9ZnVuY3Rpb24gaW5jcmVtZW50Q2FjaGVkSW1hZ2VNYXNrQ291bnQoZSl7ZS5mbj09PXIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmZS5hcmdzWzBdPy5jb3VudD4wJiZlLmFyZ3NbMF0uY291bnQrK31jbGFzcyBUaW1lU2xvdE1hbmFnZXJ7c3RhdGljIFRJTUVfU0xPVF9EVVJBVElPTl9NUz0yMDtzdGF0aWMgQ0hFQ0tfVElNRV9FVkVSWT0xMDA7Y29uc3RydWN0b3IoKXt0aGlzLnJlc2V0KCl9Y2hlY2soKXtpZigrK3RoaXMuY2hlY2tlZDxUaW1lU2xvdE1hbmFnZXIuQ0hFQ0tfVElNRV9FVkVSWSlyZXR1cm4hMTt0aGlzLmNoZWNrZWQ9MDtyZXR1cm4gdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpfXJlc2V0KCl7dGhpcy5lbmRUaW1lPURhdGUubm93KCkrVGltZVNsb3RNYW5hZ2VyLlRJTUVfU0xPVF9EVVJBVElPTl9NUzt0aGlzLmNoZWNrZWQ9MH19Y2xhc3MgUGFydGlhbEV2YWx1YXRvcntjb25zdHJ1Y3RvcihlKXtsZXR7eHJlZjp0LGhhbmRsZXI6YSxwYWdlSW5kZXg6cixpZEZhY3Rvcnk6bixmb250Q2FjaGU6aSxidWlsdEluQ01hcENhY2hlOnMsc3RhbmRhcmRGb250RGF0YUNhY2hlOm8sZ2xvYmFsSW1hZ2VDYWNoZTpjLHN5c3RlbUZvbnRDYWNoZTpsLG9wdGlvbnM6aD1udWxsfT1lO3RoaXMueHJlZj10O3RoaXMuaGFuZGxlcj1hO3RoaXMucGFnZUluZGV4PXI7dGhpcy5pZEZhY3Rvcnk9bjt0aGlzLmZvbnRDYWNoZT1pO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1zO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW87dGhpcy5nbG9iYWxJbWFnZUNhY2hlPWM7dGhpcy5zeXN0ZW1Gb250Q2FjaGU9bDt0aGlzLm9wdGlvbnM9aHx8RDt0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ9ITE7dGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlPW5ldyBnLlJlZ2lvbmFsSW1hZ2VDYWNoZTt0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQ9dGhpcy5mZXRjaEJ1aWx0SW5DTWFwLmJpbmQodGhpcyk7Ty5JbWFnZVJlc2l6ZXIuc2V0TWF4QXJlYSh0aGlzLm9wdGlvbnMuY2FudmFzTWF4QXJlYUluQnl0ZXMpfWdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCl7Y29uc3QgZT1uZXcgZC5QREZGdW5jdGlvbkZhY3Rvcnkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLm9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkfSk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIl9wZGZGdW5jdGlvbkZhY3RvcnkiLGUpfWNsb25lKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKHRoaXMpO3Qub3B0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zLGUpO3JldHVybiB0fWhhc0JsZW5kTW9kZXMoZSx0KXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiExO2lmKGUub2JqSWQmJnQuaGFzKGUub2JqSWQpKXJldHVybiExO2NvbnN0IGE9bmV3IGkuUmVmU2V0KHQpO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IG49W2VdLHM9dGhpcy54cmVmO2Zvcig7bi5sZW5ndGg7KXtjb25zdCBlPW4uc2hpZnQoKSx0PWUuZ2V0KCJFeHRHU3RhdGUiKTtpZih0IGluc3RhbmNlb2YgaS5EaWN0KWZvcihsZXQgZSBvZiB0LmdldFJhd1ZhbHVlcygpKXtpZihlIGluc3RhbmNlb2YgaS5SZWYpe2lmKGEuaGFzKGUpKWNvbnRpbnVlO3RyeXtlPXMuZmV0Y2goZSl9Y2F0Y2godCl7YS5wdXQoZSk7KDAsci5pbmZvKShgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKWNvbnRpbnVlO2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2NvbnN0IHQ9ZS5nZXQoIkJNIik7aWYodCBpbnN0YW5jZW9mIGkuTmFtZSl7aWYoIk5vcm1hbCIhPT10Lm5hbWUpcmV0dXJuITB9ZWxzZSBpZih2b2lkIDAhPT10JiZBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBlIG9mIHQpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSYmIk5vcm1hbCIhPT1lLm5hbWUpcmV0dXJuITB9Y29uc3Qgbz1lLmdldCgiWE9iamVjdCIpO2lmKG8gaW5zdGFuY2VvZiBpLkRpY3QpZm9yKGxldCBlIG9mIG8uZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBpLlJlZil7aWYoYS5oYXMoZSkpY29udGludWU7dHJ5e2U9cy5mZXRjaChlKX1jYXRjaCh0KXthLnB1dChlKTsoMCxyLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgWE9iamVjdDogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pKWNvbnRpbnVlO2UuZGljdC5vYmpJZCYmYS5wdXQoZS5kaWN0Lm9iaklkKTtjb25zdCB0PWUuZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKHQgaW5zdGFuY2VvZiBpLkRpY3QmJighdC5vYmpJZHx8IWEuaGFzKHQub2JqSWQpKSl7bi5wdXNoKHQpO3Qub2JqSWQmJmEucHV0KHQub2JqSWQpfX19Zm9yKGNvbnN0IGUgb2YgYSl0LnB1dChlKTtyZXR1cm4hMX1hc3luYyBmZXRjaEJ1aWx0SW5DTWFwKGUpe2NvbnN0IHQ9dGhpcy5idWlsdEluQ01hcENhY2hlLmdldChlKTtpZih0KXJldHVybiB0O2xldCBhO2lmKG51bGwhPT10aGlzLm9wdGlvbnMuY01hcFVybCl7Y29uc3QgdD1gJHt0aGlzLm9wdGlvbnMuY01hcFVybH0ke2V9LmJjbWFwYCxuPWF3YWl0IGZldGNoKHQpO2lmKCFuLm9rKXRocm93IG5ldyBFcnJvcihgZmV0Y2hCdWlsdEluQ01hcDogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7dH0iIHdpdGggIiR7bi5zdGF0dXNUZXh0fSIuYCk7YT17Y01hcERhdGE6bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbi5hcnJheUJ1ZmZlcigpKSxjb21wcmVzc2lvblR5cGU6ci5DTWFwQ29tcHJlc3Npb25UeXBlLkJJTkFSWX19ZWxzZSBhPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoQnVpbHRJbkNNYXAiLHtuYW1lOmV9KTthLmNvbXByZXNzaW9uVHlwZSE9PXIuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FJiZ0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9YXN5bmMgZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpe2NvbnN0IHQ9dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuZ2V0KGUpO2lmKHQpcmV0dXJuIG5ldyBwLlN0cmVhbSh0KTtpZih0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJiJTeW1ib2wiIT09ZSYmIlphcGZEaW5nYmF0cyIhPT1lKXJldHVybiBudWxsO2NvbnN0IGE9KDAsYy5nZXRGb250TmFtZVRvRmlsZU1hcCkoKVtlXTtsZXQgbjtpZihudWxsIT09dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpe2NvbnN0IGU9YCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHthfWAsdD1hd2FpdCBmZXRjaChlKTt0Lm9rP249YXdhaXQgdC5hcnJheUJ1ZmZlcigpOigwLHIud2FybikoYGZldGNoU3RhbmRhcmRGb250RGF0YTogZmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7ZX0iIHdpdGggIiR7dC5zdGF0dXNUZXh0fSIuYCl9ZWxzZSB0cnl7bj1hd2FpdCB0aGlzLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGZXRjaFN0YW5kYXJkRm9udERhdGEiLHtmaWxlbmFtZTphfSl9Y2F0Y2goZSl7KDAsci53YXJuKShgZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJHthfSIgd2l0aCAiJHtlfSIuYCl9aWYoIW4pcmV0dXJuIG51bGw7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuc2V0KGUsbik7cmV0dXJuIG5ldyBwLlN0cmVhbShuKX1hc3luYyBidWlsZEZvcm1YT2JqZWN0KGUsdCxhLG4scyxvLGMpe2NvbnN0IGw9dC5kaWN0LGg9bC5nZXRBcnJheSgiTWF0cml4Iik7bGV0IHUsZCxmPWwuZ2V0QXJyYXkoIkJCb3giKTtmPUFycmF5LmlzQXJyYXkoZikmJjQ9PT1mLmxlbmd0aD9yLlV0aWwubm9ybWFsaXplUmVjdChmKTpudWxsO2wuaGFzKCJPQyIpJiYodT1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGwuZ2V0KCJPQyIpLGUpKTt2b2lkIDAhPT11JiZuLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLHVdKTtjb25zdCBnPWwuZ2V0KCJHcm91cCIpO2lmKGcpe2Q9e21hdHJpeDpoLGJib3g6ZixzbWFzazphLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfTtjb25zdCB0PWcuZ2V0KCJTIik7bGV0IHM9bnVsbDtpZigoMCxpLmlzTmFtZSkodCwiVHJhbnNwYXJlbmN5Iikpe2QuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITE7ZC5rbm9ja291dD1nLmdldCgiSyIpfHwhMTtpZihnLmhhcygiQ1MiKSl7Y29uc3QgdD1nLmdldFJhdygiQ1MiKSxhPXkuQ29sb3JTcGFjZS5nZXRDYWNoZWQodCx0aGlzLnhyZWYsYyk7cz1hfHxhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7Y3M6dCxyZXNvdXJjZXM6ZSxsb2NhbENvbG9yU3BhY2VDYWNoZTpjfSl9fWlmKGE/LmJhY2tkcm9wKXtzfHw9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO2EuYmFja2Ryb3A9cy5nZXRSZ2IoYS5iYWNrZHJvcCwwKX1uLmFkZE9wKHIuT1BTLmJlZ2luR3JvdXAsW2RdKX1jb25zdCBwPWc/W2gsbnVsbF06W2gsZl07bi5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW4scCk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnMscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8ZSxvcGVyYXRvckxpc3Q6bixpbml0aWFsU3RhdGU6b30pLnRoZW4oKGZ1bmN0aW9uKCl7bi5hZGRPcChyLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKTtnJiZuLmFkZE9wKHIuT1BTLmVuZEdyb3VwLFtkXSk7dm9pZCAwIT09dSYmbi5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKX1fc2VuZEltZ0RhdGEoZSx0KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IHI9dD9bdC5iaXRtYXB8fHQuZGF0YS5idWZmZXJdOm51bGw7cmV0dXJuIHRoaXMucGFyc2luZ1R5cGUzRm9udHx8YT90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbZSwiSW1hZ2UiLHRdLHIpOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtlLHRoaXMucGFnZUluZGV4LCJJbWFnZSIsdF0scil9YXN5bmMgYnVpbGRQYWludEltYWdlWE9iamVjdChlKXtsZXR7cmVzb3VyY2VzOnQsaW1hZ2U6YSxpc0lubGluZTpuPSExLG9wZXJhdG9yTGlzdDppLGNhY2hlS2V5OnMsbG9jYWxJbWFnZUNhY2hlOm8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Y309ZTtjb25zdCBsPWEuZGljdCxoPWwub2JqSWQsdT1sLmdldCgiVyIsIldpZHRoIiksZD1sLmdldCgiSCIsIkhlaWdodCIpO2lmKCF1fHwibnVtYmVyIiE9dHlwZW9mIHV8fCFkfHwibnVtYmVyIiE9dHlwZW9mIGQpeygwLHIud2FybikoIkltYWdlIGRpbWVuc2lvbnMgYXJlIG1pc3NpbmcsIG9yIG5vdCBudW1iZXJzLiIpO3JldHVybn1jb25zdCBmPXRoaXMub3B0aW9ucy5tYXhJbWFnZVNpemU7aWYoLTEhPT1mJiZ1KmQ+Zil7Y29uc3QgZT0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiI7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl7KDAsci53YXJuKShlKTtyZXR1cm59dGhyb3cgbmV3IEVycm9yKGUpfWxldCBnO2wuaGFzKCJPQyIpJiYoZz1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKGwuZ2V0KCJPQyIpLHQpKTtsZXQgcCxtO2lmKGwuZ2V0KCJJTSIsIkltYWdlTWFzayIpfHwhMSl7Y29uc3QgZT1sLmdldCgiSSIsIkludGVycG9sYXRlIiksdD11Kzc+PjMsbj1hLmdldEJ5dGVzKHQqZCksYz1sLmdldEFycmF5KCJEIiwiRGVjb2RlIik7aWYodGhpcy5wYXJzaW5nVHlwZTNGb250KXtwPUUuUERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6bix3aWR0aDp1LGhlaWdodDpkLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOmEgaW5zdGFuY2VvZiB3LkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOmM/LlswXT4wLGludGVycG9sYXRlOmV9KTtwLmNhY2hlZD0hIXM7bT1bcF07aS5hZGRJbWFnZU9wcyhyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsbSxnKTtpZihzKXtjb25zdCBlPXtmbjpyLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczptLG9wdGlvbmFsQ29udGVudDpnfTtvLnNldChzLGgsZSk7aCYmdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLGgsZSl9cmV0dXJufXA9YXdhaXQgRS5QREZJbWFnZS5jcmVhdGVNYXNrKHtpbWdBcnJheTpuLHdpZHRoOnUsaGVpZ2h0OmQsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06YSBpbnN0YW5jZW9mIHcuRGVjb2RlU3RyZWFtLGludmVyc2VEZWNvZGU6Yz8uWzBdPjAsaW50ZXJwb2xhdGU6ZSxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDp0aGlzLm9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR9KTtpZihwLmlzU2luZ2xlT3BhcXVlUGl4ZWwpe2kuYWRkSW1hZ2VPcHMoci5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrLFtdLGcpO2lmKHMpe2NvbnN0IGU9e2ZuOnIuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzayxhcmdzOltdLG9wdGlvbmFsQ29udGVudDpnfTtvLnNldChzLGgsZSk7aCYmdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLGgsZSl9cmV0dXJufWNvbnN0IGY9YG1hc2tfJHt0aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7aS5hZGREZXBlbmRlbmN5KGYpO3RoaXMuX3NlbmRJbWdEYXRhKGYscCk7bT1be2RhdGE6Zix3aWR0aDpwLndpZHRoLGhlaWdodDpwLmhlaWdodCxpbnRlcnBvbGF0ZTpwLmludGVycG9sYXRlLGNvdW50OjF9XTtpLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxtLGcpO2lmKHMpe2NvbnN0IGU9e2ZuOnIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxhcmdzOm0sb3B0aW9uYWxDb250ZW50Omd9O28uc2V0KHMsaCxlKTtoJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsaCxlKX1yZXR1cm59aWYobiYmIWwuaGFzKCJTTWFzayIpJiYhbC5oYXMoIk1hc2siKSYmdStkPDIwMCl7Y29uc3QgZT1uZXcgRS5QREZJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOnQsaW1hZ2U6YSxpc0lubGluZTpuLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6Y30pO3A9YXdhaXQgZS5jcmVhdGVJbWFnZURhdGEoITAsITEpO2kuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9dGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkO2kuYWRkSW1hZ2VPcHMoci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsW3BdLGcpO3JldHVybn1sZXQgYj1gaW1nXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gLHk9ITE7aWYodGhpcy5wYXJzaW5nVHlwZTNGb250KWI9YCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHtifWA7ZWxzZSBpZihoKXt5PXRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zaG91bGRDYWNoZShoLHRoaXMucGFnZUluZGV4KTt5JiYoYj1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke2J9YCl9aS5hZGREZXBlbmRlbmN5KGIpO209W2IsdSxkXTtFLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczp0LGltYWdlOmEsaXNJbmxpbmU6bixwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmN9KS50aGVuKChhc3luYyBlPT57cD1hd2FpdCBlLmNyZWF0ZUltYWdlRGF0YSghMSx0aGlzLm9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpO2lmKHMmJmgmJnkpe2NvbnN0IGU9cC5iaXRtYXA/cC53aWR0aCpwLmhlaWdodCo0OnAuZGF0YS5sZW5ndGg7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGgsZSl9cmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKGIscCx5KX0pKS5jYXRjaCgoZT0+eygwLHIud2FybikoYFVuYWJsZSB0byBkZWNvZGUgaW1hZ2UgIiR7Yn0iOiAiJHtlfSIuYCk7cmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKGIsbnVsbCx5KX0pKTtpLmFkZEltYWdlT3BzKHIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LG0sZyk7aWYocyl7Y29uc3QgZT17Zm46ci5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczptLG9wdGlvbmFsQ29udGVudDpnfTtvLnNldChzLGgsZSk7aWYoaCl7dGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLGgsZSk7aWYoeSl7KDAsci5hc3NlcnQpKCFuLCJDYW5ub3QgY2FjaGUgYW4gaW5saW5lIGltYWdlIGdsb2JhbGx5LiIpO3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGgse29iaklkOmIsZm46ci5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczptLG9wdGlvbmFsQ29udGVudDpnLGJ5dGVTaXplOjB9KX19fX1oYW5kbGVTTWFzayhlLHQsYSxyLG4saSl7Y29uc3Qgcz1lLmdldCgiRyIpLG89e3N1YnR5cGU6ZS5nZXQoIlMiKS5uYW1lLGJhY2tkcm9wOmUuZ2V0KCJCQyIpfSxjPWUuZ2V0KCJUUiIpO2lmKCgwLGQuaXNQREZGdW5jdGlvbikoYykpe2NvbnN0IGU9dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZShjKSx0PW5ldyBVaW50OEFycmF5KDI1NiksYT1uZXcgRmxvYXQzMkFycmF5KDEpO2ZvcihsZXQgcj0wO3I8MjU2O3IrKyl7YVswXT1yLzI1NTtlKGEsMCxhLDApO3Rbcl09MjU1KmFbMF18MH1vLnRyYW5zZmVyTWFwPXR9cmV0dXJuIHRoaXMuYnVpbGRGb3JtWE9iamVjdCh0LHMsbyxhLHIsbi5zdGF0ZS5jbG9uZSgpLGkpfWhhbmRsZVRyYW5zZmVyRnVuY3Rpb24oZSl7bGV0IHQ7aWYoQXJyYXkuaXNBcnJheShlKSl0PWU7ZWxzZXtpZighKDAsZC5pc1BERkZ1bmN0aW9uKShlKSlyZXR1cm4gbnVsbDt0PVtlXX1jb25zdCBhPVtdO2xldCByPTAsbj0wO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7cisrO2lmKCgwLGkuaXNOYW1lKSh0LCJJZGVudGl0eSIpKXthLnB1c2gobnVsbCk7Y29udGludWV9aWYoISgwLGQuaXNQREZGdW5jdGlvbikodCkpcmV0dXJuIG51bGw7Y29uc3Qgcz10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHQpLG89bmV3IFVpbnQ4QXJyYXkoMjU2KSxjPW5ldyBGbG9hdDMyQXJyYXkoMSk7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXtjWzBdPWUvMjU1O3MoYywwLGMsMCk7b1tlXT0yNTUqY1swXXwwfWEucHVzaChvKTtuKyt9cmV0dXJuIDEhPT1yJiY0IT09cnx8MD09PW4/bnVsbDphfWhhbmRsZVRpbGluZ1R5cGUoZSx0LGEsbixzLG8sYyxoKXtjb25zdCB1PW5ldyBNLk9wZXJhdG9yTGlzdCxkPWkuRGljdC5tZXJnZSh7eHJlZjp0aGlzLnhyZWYsZGljdEFycmF5OltzLmdldCgiUmVzb3VyY2VzIiksYV19KTtyZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpuLHRhc2s6YyxyZXNvdXJjZXM6ZCxvcGVyYXRvckxpc3Q6dX0pLnRoZW4oKGZ1bmN0aW9uKCl7Y29uc3QgYT11LmdldElSKCkscj0oMCxsLmdldFRpbGluZ1BhdHRlcm5JUikoYSxzLHQpO28uYWRkRGVwZW5kZW5jaWVzKHUuZGVwZW5kZW5jaWVzKTtvLmFkZE9wKGUscik7cy5vYmpJZCYmaC5zZXQobnVsbCxzLm9iaklkLHtvcGVyYXRvckxpc3RJUjphLGRpY3Q6c30pfSkpLmNhdGNoKChlPT57aWYoIShlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbikpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46ICIke2V9Ii5gKX19KSl9aGFuZGxlU2V0Rm9udChlLHQsYSxyLG4sbyl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGwsbD1hcmd1bWVudHMubGVuZ3RoPjcmJnZvaWQgMCE9PWFyZ3VtZW50c1s3XT9hcmd1bWVudHNbN106bnVsbDtjb25zdCBoPXQ/LlswXWluc3RhbmNlb2YgaS5OYW1lP3RbMF0ubmFtZTpudWxsO3JldHVybiB0aGlzLmxvYWRGb250KGgsYSxlLGMsbCkudGhlbigodD0+dC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YSh0aGlzLGUsbikudGhlbigoZnVuY3Rpb24oKXtyLmFkZERlcGVuZGVuY2llcyh0LnR5cGUzRGVwZW5kZW5jaWVzKTtyZXR1cm4gdH0pKS5jYXRjaCgoZT0+bmV3IFRyYW5zbGF0ZWRGb250KHtsb2FkZWROYW1lOiJnX2ZvbnRfZXJyb3IiLGZvbnQ6bmV3IHMuRXJyb3JGb250KGBUeXBlMyBmb250IGxvYWQgZXJyb3I6ICR7ZX1gKSxkaWN0OnQuZm9udCxldmFsdWF0b3JPcHRpb25zOnRoaXMub3B0aW9uc30pKSk6dCkpLnRoZW4oKGU9PntvLmZvbnQ9ZS5mb250O2Uuc2VuZCh0aGlzLmhhbmRsZXIpO3JldHVybiBlLmxvYWRlZE5hbWV9KSl9aGFuZGxlVGV4dChlLHQpe2NvbnN0IGE9dC5mb250LG49YS5jaGFyc1RvR2x5cGhzKGUpO2lmKGEuZGF0YSl7KCEhKHQudGV4dFJlbmRlcmluZ01vZGUmci5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKXx8IlBhdHRlcm4iPT09dC5maWxsQ29sb3JTcGFjZS5uYW1lfHxhLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJlBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHMoYSxuLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpfXJldHVybiBufWVuc3VyZVN0YXRlRm9udChlKXtpZihlLmZvbnQpcmV0dXJuO2NvbnN0IHQ9bmV3IHIuRm9ybWF0RXJyb3IoIk1pc3Npbmcgc2V0Rm9udCAoVGYpIG9wZXJhdG9yIGJlZm9yZSB0ZXh0IHJlbmRlcmluZyBvcGVyYXRvci4iKTtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyB0OygwLHIud2FybikoYGVuc3VyZVN0YXRlRm9udDogIiR7dH0iLmApfWFzeW5jIHNldEdTdGF0ZShlKXtsZXR7cmVzb3VyY2VzOnQsZ1N0YXRlOmEsb3BlcmF0b3JMaXN0Om4sY2FjaGVLZXk6cyx0YXNrOm8sc3RhdGVNYW5hZ2VyOmMsbG9jYWxHU3RhdGVDYWNoZTpsLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmh9PWU7Y29uc3QgdT1hLm9iaklkO2xldCBkPSEwO2NvbnN0IGY9W107bGV0IGc9UHJvbWlzZS5yZXNvbHZlKCk7Zm9yKGNvbnN0IGUgb2YgYS5nZXRLZXlzKCkpe2NvbnN0IHM9YS5nZXQoZSk7c3dpdGNoKGUpe2Nhc2UiVHlwZSI6YnJlYWs7Y2FzZSJMVyI6Y2FzZSJMQyI6Y2FzZSJMSiI6Y2FzZSJNTCI6Y2FzZSJEIjpjYXNlIlJJIjpjYXNlIkZMIjpjYXNlIkNBIjpjYXNlImNhIjpmLnB1c2goW2Usc10pO2JyZWFrO2Nhc2UiRm9udCI6ZD0hMTtnPWcudGhlbigoKCk9PnRoaXMuaGFuZGxlU2V0Rm9udCh0LG51bGwsc1swXSxuLG8sYy5zdGF0ZSkudGhlbigoZnVuY3Rpb24odCl7bi5hZGREZXBlbmRlbmN5KHQpO2YucHVzaChbZSxbdCxzWzFdXV0pfSkpKSk7YnJlYWs7Y2FzZSJCTSI6Zi5wdXNoKFtlLG5vcm1hbGl6ZUJsZW5kTW9kZShzKV0pO2JyZWFrO2Nhc2UiU01hc2siOmlmKCgwLGkuaXNOYW1lKShzLCJOb25lIikpe2YucHVzaChbZSwhMV0pO2JyZWFrfWlmKHMgaW5zdGFuY2VvZiBpLkRpY3Qpe2Q9ITE7Zz1nLnRoZW4oKCgpPT50aGlzLmhhbmRsZVNNYXNrKHMsdCxuLG8sYyxoKSkpO2YucHVzaChbZSwhMF0pfWVsc2UoMCxyLndhcm4pKCJVbnN1cHBvcnRlZCBTTWFzayB0eXBlIik7YnJlYWs7Y2FzZSJUUiI6Y29uc3QgYT10aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24ocyk7Zi5wdXNoKFtlLGFdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsci5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2UpO2JyZWFrO2RlZmF1bHQ6KDAsci5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZSl9fXJldHVybiBnLnRoZW4oKGZ1bmN0aW9uKCl7Zi5sZW5ndGg+MCYmbi5hZGRPcChyLk9QUy5zZXRHU3RhdGUsW2ZdKTtkJiZsLnNldChzLHUsZil9KSl9bG9hZEZvbnQoZSx0LGEpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpudWxsLG89YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOm51bGw7Y29uc3QgZXJyb3JGb250PWFzeW5jKCk9Pm5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBzLkVycm9yRm9udChgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KTtsZXQgYztpZih0KXQgaW5zdGFuY2VvZiBpLlJlZiYmKGM9dCk7ZWxzZXtjb25zdCB0PWEuZ2V0KCJGb250Iik7dCYmKGM9dC5nZXRSYXcoZSkpfWlmKGMpe2lmKHRoaXMucGFyc2luZ1R5cGUzRm9udCYmdGhpcy50eXBlM0ZvbnRSZWZzLmhhcyhjKSlyZXR1cm4gZXJyb3JGb250KCk7aWYodGhpcy5mb250Q2FjaGUuaGFzKGMpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQoYyk7dD10aGlzLnhyZWYuZmV0Y2hJZlJlZihjKX1pZighKHQgaW5zdGFuY2VvZiBpLkRpY3QpKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyYmIXRoaXMucGFyc2luZ1R5cGUzRm9udCl7KDAsci53YXJuKShgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKTtyZXR1cm4gZXJyb3JGb250KCl9KDAsci53YXJuKShgRm9udCAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZSAtLSBhdHRlbXB0aW5nIHRvIGZhbGxiYWNrIHRvIGEgZGVmYXVsdCBmb250LmApO3Q9bnx8UGFydGlhbEV2YWx1YXRvci5mYWxsYmFja0ZvbnREaWN0fWlmKHQuY2FjaGVLZXkmJnRoaXMuZm9udENhY2hlLmhhcyh0LmNhY2hlS2V5KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHQuY2FjaGVLZXkpO2NvbnN0IGw9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7bGV0IGg7dHJ5e2g9dGhpcy5wcmVFdmFsdWF0ZUZvbnQodCk7aC5jc3NGb250SW5mbz1vfWNhdGNoKGUpeygwLHIud2FybikoYGxvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogIiR7ZX0iLmApO3JldHVybiBlcnJvckZvbnQoKX1jb25zdHtkZXNjcmlwdG9yOnUsaGFzaDpkfT1oLGY9YyBpbnN0YW5jZW9mIGkuUmVmO2xldCBnO2lmKGQmJnUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9dS5mb250QWxpYXNlc3x8PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZVtkXSl7Y29uc3QgdD1lW2RdLmFsaWFzUmVmO2lmKGYmJnQmJnRoaXMuZm9udENhY2hlLmhhcyh0KSl7dGhpcy5mb250Q2FjaGUucHV0QWxpYXMoYyx0KTtyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGMpfX1lbHNlIGVbZF09e2ZvbnRJRDp0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKX07ZiYmKGVbZF0uYWxpYXNSZWY9Yyk7Zz1lW2RdLmZvbnRJRH1lbHNlIGc9dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCk7KDAsci5hc3NlcnQpKGc/LnN0YXJ0c1dpdGgoImYiKSwnVGhlICJmb250SUQiIG11c3QgYmUgKGNvcnJlY3RseSkgZGVmaW5lZC4nKTtpZihmKXRoaXMuZm9udENhY2hlLnB1dChjLGwucHJvbWlzZSk7ZWxzZXt0LmNhY2hlS2V5PWBjYWNoZUtleV8ke2d9YDt0aGlzLmZvbnRDYWNoZS5wdXQodC5jYWNoZUtleSxsLnByb21pc2UpfXQubG9hZGVkTmFtZT1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke2d9YDt0aGlzLnRyYW5zbGF0ZUZvbnQoaCkudGhlbigoZT0+e2wucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6dC5sb2FkZWROYW1lLGZvbnQ6ZSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSkuY2F0Y2goKGU9PnsoMCxyLndhcm4pKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiAiJHtlfSIuYCk7bC5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDpuZXcgcy5FcnJvckZvbnQoZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTplKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSk7cmV0dXJuIGwucHJvbWlzZX1idWlsZFBhdGgoZSx0LGEpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgaT1lLmxlbmd0aC0xO2F8fChhPVtdKTtpZihpPDB8fGUuZm5BcnJheVtpXSE9PXIuT1BTLmNvbnN0cnVjdFBhdGgpe2lmKG4peygwLHIud2FybikoYEVuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIiR7dH0iIGluc2lkZSBvZiBhIHRleHQgb2JqZWN0LmApO2UuYWRkT3Aoci5PUFMuc2F2ZSxudWxsKX1sZXQgaTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107aT1bTWF0aC5taW4oYVswXSxlKSxNYXRoLm1heChhWzBdLGUpLE1hdGgubWluKGFbMV0sdCksTWF0aC5tYXgoYVsxXSx0KV07YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86aT1bYVswXSxhWzBdLGFbMV0sYVsxXV07YnJlYWs7ZGVmYXVsdDppPVsxLzAsLTEvMCwxLzAsLTEvMF19ZS5hZGRPcChyLk9QUy5jb25zdHJ1Y3RQYXRoLFtbdF0sYSxpXSk7biYmZS5hZGRPcChyLk9QUy5yZXN0b3JlLG51bGwpfWVsc2V7Y29uc3Qgbj1lLmFyZ3NBcnJheVtpXTtuWzBdLnB1c2godCk7blsxXS5wdXNoKC4uLmEpO2NvbnN0IHM9blsyXTtzd2l0Y2godCl7Y2FzZSByLk9QUy5yZWN0YW5nbGU6Y29uc3QgZT1hWzBdK2FbMl0sdD1hWzFdK2FbM107c1swXT1NYXRoLm1pbihzWzBdLGFbMF0sZSk7c1sxXT1NYXRoLm1heChzWzFdLGFbMF0sZSk7c1syXT1NYXRoLm1pbihzWzJdLGFbMV0sdCk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0sdCk7YnJlYWs7Y2FzZSByLk9QUy5tb3ZlVG86Y2FzZSByLk9QUy5saW5lVG86c1swXT1NYXRoLm1pbihzWzBdLGFbMF0pO3NbMV09TWF0aC5tYXgoc1sxXSxhWzBdKTtzWzJdPU1hdGgubWluKHNbMl0sYVsxXSk7c1szXT1NYXRoLm1heChzWzNdLGFbMV0pfX19cGFyc2VDb2xvclNwYWNlKGUpe2xldHtjczp0LHJlc291cmNlczphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm59PWU7cmV0dXJuIHkuQ29sb3JTcGFjZS5wYXJzZUFzeW5jKHtjczp0LHhyZWY6dGhpcy54cmVmLHJlc291cmNlczphLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pLmNhdGNoKChlPT57aWYoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl7KDAsci53YXJuKShgcGFyc2VDb2xvclNwYWNlIC0gaWdub3JpbmcgQ29sb3JTcGFjZTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9KSl9cGFyc2VTaGFkaW5nKGUpe2xldHtzaGFkaW5nOnQscmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6cixsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6bn09ZSxpPW4uZ2V0KHQpO2lmKCFpKXtjb25zdCBlPWwuUGF0dGVybi5wYXJzZVNoYWRpbmcodCx0aGlzLnhyZWYsYSx0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkscikuZ2V0SVIoKTtpPWBwYXR0ZXJuXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gO3RoaXMucGFyc2luZ1R5cGUzRm9udCYmKGk9YCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHtpfWApO24uc2V0KHQsaSk7dGhpcy5wYXJzaW5nVHlwZTNGb250P3RoaXMuaGFuZGxlci5zZW5kKCJjb21tb25vYmoiLFtpLCJQYXR0ZXJuIixlXSk6dGhpcy5oYW5kbGVyLnNlbmQoIm9iaiIsW2ksdGhpcy5wYWdlSW5kZXgsIlBhdHRlcm4iLGVdKX1yZXR1cm4gaX1oYW5kbGVDb2xvck4oZSx0LGEsbixzLG8sYyxoLHUsZCl7Y29uc3QgZj1hLnBvcCgpO2lmKGYgaW5zdGFuY2VvZiBpLk5hbWUpe2NvbnN0IGc9cy5nZXRSYXcoZi5uYW1lKSxwPWcgaW5zdGFuY2VvZiBpLlJlZiYmdS5nZXRCeVJlZihnKTtpZihwKXRyeXtjb25zdCByPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKGEsMCk6bnVsbCxpPSgwLGwuZ2V0VGlsaW5nUGF0dGVybklSKShwLm9wZXJhdG9yTGlzdElSLHAuZGljdCxyKTtlLmFkZE9wKHQsaSk7cmV0dXJufWNhdGNoe31jb25zdCBiPXRoaXMueHJlZi5mZXRjaElmUmVmKGcpO2lmKGIpe2NvbnN0IGk9YiBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbT9iLmRpY3Q6YixzPWkuZ2V0KCJQYXR0ZXJuVHlwZSIpO2lmKHM9PT1SKXtjb25zdCByPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKGEsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQscixvLGIsaSxlLGMsdSl9aWYocz09PU4pe2NvbnN0IGE9aS5nZXQoIlNoYWRpbmciKSxyPWkuZ2V0QXJyYXkoIk1hdHJpeCIpLG49dGhpcy5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6YSxyZXNvdXJjZXM6byxsb2NhbENvbG9yU3BhY2VDYWNoZTpoLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpkfSk7ZS5hZGRPcCh0LFsiU2hhZGluZyIsbixyXSk7cmV0dXJufXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmtub3duIFBhdHRlcm5UeXBlOiAke3N9YCl9fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmtub3duIFBhdHRlcm5OYW1lOiAke2Z9YCl9X3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oZSx0LGEpe2lmKCsrdD4xMCl7KDAsci53YXJuKSgiVmlzaWJpbGl0eSBleHByZXNzaW9uIGlzIHRvbyBkZWVwbHkgbmVzdGVkIik7cmV0dXJufWNvbnN0IG49ZS5sZW5ndGgscz10aGlzLnhyZWYuZmV0Y2hJZlJlZihlWzBdKTtpZighKG48MikmJnMgaW5zdGFuY2VvZiBpLk5hbWUpe3N3aXRjaChzLm5hbWUpe2Nhc2UiQW5kIjpjYXNlIk9yIjpjYXNlIk5vdCI6YS5wdXNoKHMubmFtZSk7YnJlYWs7ZGVmYXVsdDooMCxyLndhcm4pKGBJbnZhbGlkIG9wZXJhdG9yICR7cy5uYW1lfSBpbiB2aXNpYmlsaXR5IGV4cHJlc3Npb25gKTtyZXR1cm59Zm9yKGxldCByPTE7cjxuO3IrKyl7Y29uc3Qgbj1lW3JdLHM9dGhpcy54cmVmLmZldGNoSWZSZWYobik7aWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgZT1bXTthLnB1c2goZSk7dGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihzLHQsZSl9ZWxzZSBuIGluc3RhbmNlb2YgaS5SZWYmJmEucHVzaChuLnRvU3RyaW5nKCkpfX1lbHNlKDAsci53YXJuKSgiSW52YWxpZCB2aXNpYmlsaXR5IGV4cHJlc3Npb24iKX1hc3luYyBwYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhlLHQpe2xldCBhO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpe2E9dC5nZXQoIlByb3BlcnRpZXMiKS5nZXQoZS5uYW1lKX1lbHNle2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk9wdGlvbmFsIGNvbnRlbnQgcHJvcGVydGllcyBtYWxmb3JtZWQuIik7YT1lfWNvbnN0IG49YS5nZXQoIlR5cGUiKT8ubmFtZTtpZigiT0NHIj09PW4pcmV0dXJue3R5cGU6bixpZDphLm9iaklkfTtpZigiT0NNRCI9PT1uKXtjb25zdCBlPWEuZ2V0KCJWRSIpO2lmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHQ9W107dGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLDAsdCk7aWYodC5sZW5ndGg+MClyZXR1cm57dHlwZToiT0NNRCIsZXhwcmVzc2lvbjp0fX1jb25zdCB0PWEuZ2V0KCJPQ0dzIik7aWYoQXJyYXkuaXNBcnJheSh0KXx8dCBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBhIG9mIHQpZS5wdXNoKGEudG9TdHJpbmcoKSk7ZWxzZSBlLnB1c2godC5vYmpJZCk7cmV0dXJue3R5cGU6bixpZHM6ZSxwb2xpY3k6YS5nZXQoIlAiKWluc3RhbmNlb2YgaS5OYW1lP2EuZ2V0KCJQIikubmFtZTpudWxsLGV4cHJlc3Npb246bnVsbH19aWYodCBpbnN0YW5jZW9mIGkuUmVmKXJldHVybnt0eXBlOm4saWQ6dC50b1N0cmluZygpfX1yZXR1cm4gbnVsbH1nZXRPcGVyYXRvckxpc3QoZSl7bGV0e3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6bixvcGVyYXRvckxpc3Q6cyxpbml0aWFsU3RhdGU6bz1udWxsLGZhbGxiYWNrRm9udERpY3Q6Yz1udWxsfT1lO258fD1pLkRpY3QuZW1wdHk7b3x8PW5ldyBFdmFsU3RhdGU7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCdnZXRPcGVyYXRvckxpc3Q6IG1pc3NpbmcgIm9wZXJhdG9yTGlzdCIgcGFyYW1ldGVyJyk7Y29uc3QgbD10aGlzLGg9dGhpcy54cmVmO2xldCB1PSExO2NvbnN0IGQ9bmV3IGcuTG9jYWxJbWFnZUNhY2hlLGY9bmV3IGcuTG9jYWxDb2xvclNwYWNlQ2FjaGUscD1uZXcgZy5Mb2NhbEdTdGF0ZUNhY2hlLGI9bmV3IGcuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsdz1uZXcgTWFwLFM9bi5nZXQoIlhPYmplY3QiKXx8aS5EaWN0LmVtcHR5LHg9bi5nZXQoIlBhdHRlcm4iKXx8aS5EaWN0LmVtcHR5LEM9bmV3IFN0YXRlTWFuYWdlcihvKSx2PW5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3IodCxoLEMpLGs9bmV3IFRpbWVTbG90TWFuYWdlcjtmdW5jdGlvbiBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKGUpe2ZvcihsZXQgZT0wLHQ9di5zYXZlZFN0YXRlc0RlcHRoO2U8dDtlKyspcy5hZGRPcChyLk9QUy5yZXN0b3JlLFtdKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uIHByb21pc2VCb2R5KGUsdCl7Y29uc3QgbmV4dD1mdW5jdGlvbihhKXtQcm9taXNlLmFsbChbYSxzLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7cHJvbWlzZUJvZHkoZSx0KX1jYXRjaChlKXt0KGUpfX0pLHQpfTthLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtrLnJlc2V0KCk7Y29uc3Qgbz17fTtsZXQgZyxPLFQsTSxFLEQ7Zm9yKDshKGc9ay5jaGVjaygpKTspe28uYXJncz1udWxsO2lmKCF2LnJlYWQobykpYnJlYWs7bGV0IGU9by5hcmdzLHQ9by5mbjtzd2l0Y2goMHx0KXtjYXNlIHIuT1BTLnBhaW50WE9iamVjdDpEPWVbMF1pbnN0YW5jZW9mIGkuTmFtZTtFPWVbMF0ubmFtZTtpZihEKXtjb25zdCB0PWQuZ2V0QnlOYW1lKEUpO2lmKHQpe3MuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtpZighRCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7bGV0IG89Uy5nZXRSYXcoRSk7aWYobyBpbnN0YW5jZW9mIGkuUmVmKXtjb25zdCB0PWQuZ2V0QnlSZWYobyl8fGwuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5nZXRCeVJlZihvKTtpZih0KXtzLmFkZEltYWdlT3BzKHQuZm4sdC5hcmdzLHQub3B0aW9uYWxDb250ZW50KTtpbmNyZW1lbnRDYWNoZWRJbWFnZU1hc2tDb3VudCh0KTtlKCk7cmV0dXJufWNvbnN0IGE9bC5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEobyxsLnBhZ2VJbmRleCk7aWYoYSl7cy5hZGREZXBlbmRlbmN5KGEub2JqSWQpO3MuYWRkSW1hZ2VPcHMoYS5mbixhLmFyZ3MsYS5vcHRpb25hbENvbnRlbnQpO2UoKTtyZXR1cm59bz1oLmZldGNoKG8pfWlmKCEobyBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7Y29uc3QgYz1vLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoIShjIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIiE9PWMubmFtZSlpZigiSW1hZ2UiIT09Yy5uYW1lKXtpZigiUFMiIT09Yy5uYW1lKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICR7Yy5uYW1lfWApOygwLHIuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIik7ZSgpfWVsc2UgbC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6bixpbWFnZTpvLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsbG9jYWxJbWFnZUNhY2hlOmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pLnRoZW4oZSx0KTtlbHNle0Muc2F2ZSgpO2wuYnVpbGRGb3JtWE9iamVjdChuLG8sbnVsbCxzLGEsQy5zdGF0ZS5jbG9uZSgpLGYpLnRoZW4oKGZ1bmN0aW9uKCl7Qy5yZXN0b3JlKCk7ZSgpfSksdCl9fSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIWwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRGb250OnZhciBSPWVbMV07bmV4dChsLmhhbmRsZVNldEZvbnQobixlLG51bGwscyxhLEMuc3RhdGUsYykudGhlbigoZnVuY3Rpb24oZSl7cy5hZGREZXBlbmRlbmN5KGUpO3MuYWRkT3Aoci5PUFMuc2V0Rm9udCxbZSxSXSl9KSkpO3JldHVybjtjYXNlIHIuT1BTLmJlZ2luVGV4dDp1PSEwO2JyZWFrO2Nhc2Ugci5PUFMuZW5kVGV4dDp1PSExO2JyZWFrO2Nhc2Ugci5PUFMuZW5kSW5saW5lSW1hZ2U6dmFyIE49ZVswXS5jYWNoZUtleTtpZihOKXtjb25zdCB0PWQuZ2V0QnlOYW1lKE4pO2lmKHQpe3MuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpO2luY3JlbWVudENhY2hlZEltYWdlTWFza0NvdW50KHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChsLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczpuLGltYWdlOmVbMF0saXNJbmxpbmU6ITAsb3BlcmF0b3JMaXN0OnMsY2FjaGVLZXk6Tixsb2NhbEltYWdlQ2FjaGU6ZCxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSkpO3JldHVybjtjYXNlIHIuT1BTLnNob3dUZXh0OmlmKCFDLnN0YXRlLmZvbnQpe2wuZW5zdXJlU3RhdGVGb250KEMuc3RhdGUpO2NvbnRpbnVlfWVbMF09bC5oYW5kbGVUZXh0KGVbMF0sQy5zdGF0ZSk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZighQy5zdGF0ZS5mb250KXtsLmVuc3VyZVN0YXRlRm9udChDLnN0YXRlKTtjb250aW51ZX12YXIgJD1bXSxfPUMuc3RhdGU7Zm9yKGNvbnN0IHQgb2YgZVswXSkic3RyaW5nIj09dHlwZW9mIHQ/JC5wdXNoKC4uLmwuaGFuZGxlVGV4dCh0LF8pKToibnVtYmVyIj09dHlwZW9mIHQmJiQucHVzaCh0KTtlWzBdPSQ7dD1yLk9QUy5zaG93VGV4dDticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2hvd1RleHQ6aWYoIUMuc3RhdGUuZm9udCl7bC5lbnN1cmVTdGF0ZUZvbnQoQy5zdGF0ZSk7Y29udGludWV9cy5hZGRPcChyLk9QUy5uZXh0TGluZSk7ZVswXT1sLmhhbmRsZVRleHQoZVswXSxDLnN0YXRlKTt0PXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6aWYoIUMuc3RhdGUuZm9udCl7bC5lbnN1cmVTdGF0ZUZvbnQoQy5zdGF0ZSk7Y29udGludWV9cy5hZGRPcChyLk9QUy5uZXh0TGluZSk7cy5hZGRPcChyLk9QUy5zZXRXb3JkU3BhY2luZyxbZS5zaGlmdCgpXSk7cy5hZGRPcChyLk9QUy5zZXRDaGFyU3BhY2luZyxbZS5zaGlmdCgpXSk7ZVswXT1sLmhhbmRsZVRleHQoZVswXSxDLnN0YXRlKTt0PXIuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2Ugci5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6Qy5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1lWzBdO2JyZWFrO2Nhc2Ugci5PUFMuc2V0RmlsbENvbG9yU3BhY2U6e2NvbnN0IHQ9eS5Db2xvclNwYWNlLmdldENhY2hlZChlWzBdLGgsZik7aWYodCl7Qy5zdGF0ZS5maWxsQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQobC5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOm4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJihDLnN0YXRlLmZpbGxDb2xvclNwYWNlPWUpfSkpKTtyZXR1cm59Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOntjb25zdCB0PXkuQ29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxoLGYpO2lmKHQpe0Muc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT10O2NvbnRpbnVlfW5leHQobC5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOm4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJihDLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9ZSl9KSkpO3JldHVybn1jYXNlIHIuT1BTLnNldEZpbGxDb2xvcjpNPUMuc3RhdGUuZmlsbENvbG9yU3BhY2U7ZT1NLmdldFJnYihlLDApO3Q9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3I6TT1DLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7ZT1NLmdldFJnYihlLDApO3Q9ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsR3JheTpDLnN0YXRlLmZpbGxDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7ZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihlLDApO3Q9ci5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugci5PUFMuc2V0U3Ryb2tlR3JheTpDLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7dD1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxDTVlLQ29sb3I6Qy5zdGF0ZS5maWxsQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoZSwwKTt0PXIuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpDLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9eS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGUsMCk7dD1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNldEZpbGxSR0JDb2xvcjpDLnN0YXRlLmZpbGxDb2xvclNwYWNlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPXkuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZSwwKTticmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZVJHQkNvbG9yOkMuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7ZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOk09Qy5zdGF0ZS5maWxsQ29sb3JTcGFjZTtpZigiUGF0dGVybiI9PT1NLm5hbWUpe25leHQobC5oYW5kbGVDb2xvck4ocyxyLk9QUy5zZXRGaWxsQ29sb3JOLGUsTSx4LG4sYSxmLGIsdykpO3JldHVybn1lPU0uZ2V0UmdiKGUsMCk7dD1yLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSByLk9QUy5zZXRTdHJva2VDb2xvck46TT1DLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7aWYoIlBhdHRlcm4iPT09TS5uYW1lKXtuZXh0KGwuaGFuZGxlQ29sb3JOKHMsci5PUFMuc2V0U3Ryb2tlQ29sb3JOLGUsTSx4LG4sYSxmLGIsdykpO3JldHVybn1lPU0uZ2V0UmdiKGUsMCk7dD1yLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIHIuT1BTLnNoYWRpbmdGaWxsOnZhciBqPW4uZ2V0KCJTaGFkaW5nIik7aWYoIWopdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgcmVzb3VyY2UgZm91bmQiKTt2YXIgVT1qLmdldChlWzBdLm5hbWUpO2lmKCFVKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZCIpO2U9W2wucGFyc2VTaGFkaW5nKHtzaGFkaW5nOlUscmVzb3VyY2VzOm4sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zixsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6d30pXTt0PXIuT1BTLnNoYWRpbmdGaWxsO2JyZWFrO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOkQ9ZVswXWluc3RhbmNlb2YgaS5OYW1lO0U9ZVswXS5uYW1lO2lmKEQpe2NvbnN0IHQ9cC5nZXRCeU5hbWUoRSk7aWYodCl7dC5sZW5ndGg+MCYmcy5hZGRPcChyLk9QUy5zZXRHU3RhdGUsW3RdKTtlPW51bGw7Y29udGludWV9fW5leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIUQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgbz1uLmdldCgiRXh0R1N0YXRlIik7aWYoIShvIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3QgYz1vLmdldChFKTtpZighKGMgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtsLnNldEdTdGF0ZSh7cmVzb3VyY2VzOm4sZ1N0YXRlOmMsb3BlcmF0b3JMaXN0OnMsY2FjaGVLZXk6RSx0YXNrOmEsc3RhdGVNYW5hZ2VyOkMsbG9jYWxHU3RhdGVDYWNoZTpwLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KS50aGVuKGUsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighbC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMubW92ZVRvOmNhc2Ugci5PUFMubGluZVRvOmNhc2Ugci5PUFMuY3VydmVUbzpjYXNlIHIuT1BTLmN1cnZlVG8yOmNhc2Ugci5PUFMuY3VydmVUbzM6Y2FzZSByLk9QUy5jbG9zZVBhdGg6Y2FzZSByLk9QUy5yZWN0YW5nbGU6bC5idWlsZFBhdGgocyx0LGUsdSk7Y29udGludWU7Y2FzZSByLk9QUy5tYXJrUG9pbnQ6Y2FzZSByLk9QUy5tYXJrUG9pbnRQcm9wczpjYXNlIHIuT1BTLmJlZ2luQ29tcGF0OmNhc2Ugci5PUFMuZW5kQ29tcGF0OmNvbnRpbnVlO2Nhc2Ugci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6aWYoIShlWzBdaW5zdGFuY2VvZiBpLk5hbWUpKXsoMCxyLndhcm4pKGBFeHBlY3RlZCBuYW1lIGZvciBiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyBhcmcwPSR7ZVswXX1gKTtjb250aW51ZX1pZigiT0MiPT09ZVswXS5uYW1lKXtuZXh0KGwucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZVsxXSxuKS50aGVuKChlPT57cy5hZGRPcChyLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixlXSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKSl7aWYoIWwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogIiR7ZX0iLmApfX0pKSk7cmV0dXJufWU9W2VbMF0ubmFtZSxlWzFdaW5zdGFuY2VvZiBpLkRpY3Q/ZVsxXS5nZXQoIk1DSUQiKTpudWxsXTticmVhaztjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudDpjYXNlIHIuT1BTLmVuZE1hcmtlZENvbnRlbnQ6ZGVmYXVsdDppZihudWxsIT09ZSl7Zm9yKE89MCxUPWUubGVuZ3RoO088VCYmIShlW09daW5zdGFuY2VvZiBpLkRpY3QpO08rKyk7aWYoTzxUKXsoMCxyLndhcm4pKCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogIit0KTtjb250aW51ZX19fXMuYWRkT3AodCxlKX1pZihnKW5leHQoTCk7ZWxzZXtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7ZSgpfX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIiR7YS5uYW1lfSIgdGFzazogIiR7ZX0iLmApO2Nsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKX19KSl9Z2V0VGV4dENvbnRlbnQoZSl7bGV0e3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6bixzdGF0ZU1hbmFnZXI6cz1udWxsLGluY2x1ZGVNYXJrZWRDb250ZW50Om89ITEsc2luazpjLHNlZW5TdHlsZXM6bD1uZXcgU2V0LHZpZXdCb3g6aCxtYXJrZWRDb250ZW50RGF0YTp1PW51bGwsZGlzYWJsZU5vcm1hbGl6YXRpb246ZD0hMX09ZTtufHw9aS5EaWN0LmVtcHR5O3N8fD1uZXcgU3RhdGVNYW5hZ2VyKG5ldyBUZXh0U3RhdGUpO28mJih1fHw9e2xldmVsOjB9KTtjb25zdCBmPXtpdGVtczpbXSxzdHlsZXM6T2JqZWN0LmNyZWF0ZShudWxsKX0scD17aW5pdGlhbGl6ZWQ6ITEsc3RyOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLHdpZHRoOjAsaGVpZ2h0OjAsdmVydGljYWw6ITEscHJldlRyYW5zZm9ybTpudWxsLHRleHRBZHZhbmNlU2NhbGU6MCxzcGFjZUluRmxvd01pbjowLHNwYWNlSW5GbG93TWF4OjAsdHJhY2tpbmdTcGFjZU1pbjoxLzAsbmVnYXRpdmVTcGFjZU1heDotMS8wLG5vdEFTcGFjZTotMS8wLHRyYW5zZm9ybTpudWxsLGZvbnROYW1lOm51bGwsaGFzRU9MOiExfSx5PVsiICIsIiAiXTtsZXQgdz0wO2Z1bmN0aW9uIHNhdmVMYXN0Q2hhcihlKXtjb25zdCB0PSh3KzEpJTIsYT0iICIhPT15W3ddJiYiICI9PT15W3RdO3lbd109ZTt3PXQ7cmV0dXJuIGF9ZnVuY3Rpb24gc2hvdWxkQWRkV2hpdGVwc2FjZSgpe3JldHVybiIgIiE9PXlbd10mJiIgIj09PXlbKHcrMSklMl19ZnVuY3Rpb24gcmVzZXRMYXN0Q2hhcnMoKXt5WzBdPXlbMV09IiAiO3c9MH1jb25zdCBTPXRoaXMseD10aGlzLnhyZWYsQz1bXTtsZXQgdj1udWxsO2NvbnN0IGs9bmV3IGcuTG9jYWxJbWFnZUNhY2hlLE89bmV3IGcuTG9jYWxHU3RhdGVDYWNoZSxUPW5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3IodCx4LHMpO2xldCBNO2Z1bmN0aW9uIHB1c2hXaGl0ZXNwYWNlKGUpe2xldHt3aWR0aDp0PTAsaGVpZ2h0OmE9MCx0cmFuc2Zvcm06cj1wLnByZXZUcmFuc2Zvcm0sZm9udE5hbWU6bj1wLmZvbnROYW1lfT1lO2YuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6dCxoZWlnaHQ6YSx0cmFuc2Zvcm06cixmb250TmFtZTpuLGhhc0VPTDohMX0pfWZ1bmN0aW9uIGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCl7Y29uc3QgZT1NLmZvbnQsdD1bTS5mb250U2l6ZSpNLnRleHRIU2NhbGUsMCwwLE0uZm9udFNpemUsMCxNLnRleHRSaXNlXTtpZihlLmlzVHlwZTNGb250JiYoTS5mb250U2l6ZTw9MXx8ZS5pc0NoYXJCQm94KSYmISgwLHIuaXNBcnJheUVxdWFsKShNLmZvbnRNYXRyaXgsci5GT05UX0lERU5USVRZX01BVFJJWCkpe2NvbnN0IGE9ZS5iYm94WzNdLWUuYmJveFsxXTthPjAmJih0WzNdKj1hKk0uZm9udE1hdHJpeFszXSl9cmV0dXJuIHIuVXRpbC50cmFuc2Zvcm0oTS5jdG0sci5VdGlsLnRyYW5zZm9ybShNLnRleHRNYXRyaXgsdCkpfWZ1bmN0aW9uIGVuc3VyZVRleHRDb250ZW50SXRlbSgpe2lmKHAuaW5pdGlhbGl6ZWQpcmV0dXJuIHA7Y29uc3R7Zm9udDplLGxvYWRlZE5hbWU6dH09TTtpZighbC5oYXModCkpe2wuYWRkKHQpO2Yuc3R5bGVzW3RdPXtmb250RmFtaWx5OmUuZmFsbGJhY2tOYW1lLGFzY2VudDplLmFzY2VudCxkZXNjZW50OmUuZGVzY2VudCx2ZXJ0aWNhbDplLnZlcnRpY2FsfX1wLmZvbnROYW1lPXQ7Y29uc3QgYT1wLnRyYW5zZm9ybT1nZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpO2lmKGUudmVydGljYWwpe3Aud2lkdGg9cC50b3RhbFdpZHRoPU1hdGguaHlwb3QoYVswXSxhWzFdKTtwLmhlaWdodD1wLnRvdGFsSGVpZ2h0PTA7cC52ZXJ0aWNhbD0hMH1lbHNle3Aud2lkdGg9cC50b3RhbFdpZHRoPTA7cC5oZWlnaHQ9cC50b3RhbEhlaWdodD1NYXRoLmh5cG90KGFbMl0sYVszXSk7cC52ZXJ0aWNhbD0hMX1jb25zdCByPU1hdGguaHlwb3QoTS50ZXh0TGluZU1hdHJpeFswXSxNLnRleHRMaW5lTWF0cml4WzFdKSxuPU1hdGguaHlwb3QoTS5jdG1bMF0sTS5jdG1bMV0pO3AudGV4dEFkdmFuY2VTY2FsZT1uKnI7Y29uc3R7Zm9udFNpemU6aX09TTtwLnRyYWNraW5nU3BhY2VNaW49LjEwMippO3Aubm90QVNwYWNlPS4wMyppO3AubmVnYXRpdmVTcGFjZU1heD0tLjIqaTtwLnNwYWNlSW5GbG93TWluPS4xMDIqaTtwLnNwYWNlSW5GbG93TWF4PS42Kmk7cC5oYXNFT0w9ITE7cC5pbml0aWFsaXplZD0hMDtyZXR1cm4gcH1mdW5jdGlvbiB1cGRhdGVBZHZhbmNlU2NhbGUoKXtpZighcC5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgZT1NYXRoLmh5cG90KE0udGV4dExpbmVNYXRyaXhbMF0sTS50ZXh0TGluZU1hdHJpeFsxXSksdD1NYXRoLmh5cG90KE0uY3RtWzBdLE0uY3RtWzFdKSplO2lmKHQhPT1wLnRleHRBZHZhbmNlU2NhbGUpe2lmKHAudmVydGljYWwpe3AudG90YWxIZWlnaHQrPXAuaGVpZ2h0KnAudGV4dEFkdmFuY2VTY2FsZTtwLmhlaWdodD0wfWVsc2V7cC50b3RhbFdpZHRoKz1wLndpZHRoKnAudGV4dEFkdmFuY2VTY2FsZTtwLndpZHRoPTB9cC50ZXh0QWR2YW5jZVNjYWxlPXR9fWZ1bmN0aW9uIGhhbmRsZVNldEZvbnQoZSx0KXtyZXR1cm4gUy5sb2FkRm9udChlLHQsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udC5pc1R5cGUzRm9udD9lLmxvYWRUeXBlM0RhdGEoUyxuLGEpLmNhdGNoKChmdW5jdGlvbigpe30pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpOmV9KSkudGhlbigoZnVuY3Rpb24oZSl7TS5sb2FkZWROYW1lPWUubG9hZGVkTmFtZTtNLmZvbnQ9ZS5mb250O00uZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBhcHBseUludmVyc2VSb3RhdGlvbihlLHQsYSl7Y29uc3Qgcj1NYXRoLmh5cG90KGFbMF0sYVsxXSk7cmV0dXJuWyhhWzBdKmUrYVsxXSp0KS9yLChhWzJdKmUrYVszXSp0KS9yXX1mdW5jdGlvbiBjb21wYXJlV2l0aExhc3RQb3NpdGlvbihlKXtjb25zdCB0PWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7bGV0IGE9dFs0XSxyPXRbNV07aWYoTS5mb250Py52ZXJ0aWNhbCl7aWYoYTxoWzBdfHxhPmhbMl18fHIrZTxoWzFdfHxyPmhbM10pcmV0dXJuITF9ZWxzZSBpZihhK2U8aFswXXx8YT5oWzJdfHxyPGhbMV18fHI+aFszXSlyZXR1cm4hMTtpZighTS5mb250fHwhcC5wcmV2VHJhbnNmb3JtKXJldHVybiEwO2xldCBuPXAucHJldlRyYW5zZm9ybVs0XSxpPXAucHJldlRyYW5zZm9ybVs1XTtpZihuPT09YSYmaT09PXIpcmV0dXJuITA7bGV0IHM9LTE7dFswXSYmMD09PXRbMV0mJjA9PT10WzJdP3M9dFswXT4wPzA6MTgwOnRbMV0mJjA9PT10WzBdJiYwPT09dFszXSYmKHM9dFsxXT4wPzkwOjI3MCk7c3dpdGNoKHMpe2Nhc2UgMDpicmVhaztjYXNlIDkwOlthLHJdPVtyLGFdO1tuLGldPVtpLG5dO2JyZWFrO2Nhc2UgMTgwOlthLHIsbixpXT1bLWEsLXIsLW4sLWldO2JyZWFrO2Nhc2UgMjcwOlthLHJdPVstciwtYV07W24saV09Wy1pLC1uXTticmVhaztkZWZhdWx0OlthLHJdPWFwcGx5SW52ZXJzZVJvdGF0aW9uKGEscix0KTtbbixpXT1hcHBseUludmVyc2VSb3RhdGlvbihuLGkscC5wcmV2VHJhbnNmb3JtKX1pZihNLmZvbnQudmVydGljYWwpe2NvbnN0IGU9KGktcikvcC50ZXh0QWR2YW5jZVNjYWxlLHQ9YS1uLHM9TWF0aC5zaWduKHAuaGVpZ2h0KTtpZihlPHMqcC5uZWdhdGl2ZVNwYWNlTWF4KXtpZihNYXRoLmFicyh0KT4uNSpwLndpZHRoKXthcHBlbmRFT0woKTtyZXR1cm4hMH1yZXNldExhc3RDaGFycygpO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmV0dXJuITB9aWYoTWF0aC5hYnModCk+cC53aWR0aCl7YXBwZW5kRU9MKCk7cmV0dXJuITB9ZTw9cypwLm5vdEFTcGFjZSYmcmVzZXRMYXN0Q2hhcnMoKTtpZihlPD1zKnAudHJhY2tpbmdTcGFjZU1pbilpZihzaG91bGRBZGRXaGl0ZXBzYWNlKCkpe3Jlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtwdXNoV2hpdGVzcGFjZSh7aGVpZ2h0Ok1hdGguYWJzKGUpfSl9ZWxzZSBwLmhlaWdodCs9ZTtlbHNlIGlmKCFhZGRGYWtlU3BhY2VzKGUscC5wcmV2VHJhbnNmb3JtLHMpKWlmKDA9PT1wLnN0ci5sZW5ndGgpe3Jlc2V0TGFzdENoYXJzKCk7cHVzaFdoaXRlc3BhY2Uoe2hlaWdodDpNYXRoLmFicyhlKX0pfWVsc2UgcC5oZWlnaHQrPWU7TWF0aC5hYnModCk+LjI1KnAud2lkdGgmJmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmV0dXJuITB9Y29uc3Qgbz0oYS1uKS9wLnRleHRBZHZhbmNlU2NhbGUsYz1yLWksbD1NYXRoLnNpZ24ocC53aWR0aCk7aWYobzxsKnAubmVnYXRpdmVTcGFjZU1heCl7aWYoTWF0aC5hYnMoYyk+LjUqcC5oZWlnaHQpe2FwcGVuZEVPTCgpO3JldHVybiEwfXJlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1pZihNYXRoLmFicyhjKT5wLmhlaWdodCl7YXBwZW5kRU9MKCk7cmV0dXJuITB9bzw9bCpwLm5vdEFTcGFjZSYmcmVzZXRMYXN0Q2hhcnMoKTtpZihvPD1sKnAudHJhY2tpbmdTcGFjZU1pbilpZihzaG91bGRBZGRXaGl0ZXBzYWNlKCkpe3Jlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtwdXNoV2hpdGVzcGFjZSh7d2lkdGg6TWF0aC5hYnMobyl9KX1lbHNlIHAud2lkdGgrPW87ZWxzZSBpZighYWRkRmFrZVNwYWNlcyhvLHAucHJldlRyYW5zZm9ybSxsKSlpZigwPT09cC5zdHIubGVuZ3RoKXtyZXNldExhc3RDaGFycygpO3B1c2hXaGl0ZXNwYWNlKHt3aWR0aDpNYXRoLmFicyhvKX0pfWVsc2UgcC53aWR0aCs9bztNYXRoLmFicyhjKT4uMjUqcC5oZWlnaHQmJmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7cmV0dXJuITB9ZnVuY3Rpb24gYnVpbGRUZXh0Q29udGVudEl0ZW0oZSl7bGV0e2NoYXJzOnQsZXh0cmFTcGFjaW5nOmF9PWU7Y29uc3Qgcj1NLmZvbnQ7aWYoIXQpe2NvbnN0IGU9TS5jaGFyU3BhY2luZythO2UmJihyLnZlcnRpY2FsP00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1lKTpNLnRyYW5zbGF0ZVRleHRNYXRyaXgoZSpNLnRleHRIU2NhbGUsMCkpO3JldHVybn1jb25zdCBuPXIuY2hhcnNUb0dseXBocyh0KSxpPU0uZm9udE1hdHJpeFswXSpNLmZvbnRTaXplO2ZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7Y29uc3Qgcz1uW2VdLHtjYXRlZ29yeTpvfT1zO2lmKG8uaXNJbnZpc2libGVGb3JtYXRNYXJrKWNvbnRpbnVlO2xldCBjPU0uY2hhclNwYWNpbmcrKGUrMT09PXQ/YTowKSxsPXMud2lkdGg7ci52ZXJ0aWNhbCYmKGw9cy52bWV0cmljP3Mudm1ldHJpY1swXTotbCk7bGV0IGg9bCppO2lmKG8uaXNXaGl0ZXNwYWNlKXtpZihyLnZlcnRpY2FsKXtjKz0taCtNLndvcmRTcGFjaW5nO00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1jKX1lbHNle2MrPWgrTS53b3JkU3BhY2luZztNLnRyYW5zbGF0ZVRleHRNYXRyaXgoYypNLnRleHRIU2NhbGUsMCl9c2F2ZUxhc3RDaGFyKCIgIik7Y29udGludWV9aWYoIW8uaXNaZXJvV2lkdGhEaWFjcml0aWMmJiFjb21wYXJlV2l0aExhc3RQb3NpdGlvbihoKSl7ci52ZXJ0aWNhbD9NLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCxoKTpNLnRyYW5zbGF0ZVRleHRNYXRyaXgoaCpNLnRleHRIU2NhbGUsMCk7Y29udGludWV9Y29uc3QgdT1lbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtvLmlzWmVyb1dpZHRoRGlhY3JpdGljJiYoaD0wKTtpZihyLnZlcnRpY2FsKXtNLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCxoKTtoPU1hdGguYWJzKGgpO3UuaGVpZ2h0Kz1ofWVsc2V7aCo9TS50ZXh0SFNjYWxlO00udHJhbnNsYXRlVGV4dE1hdHJpeChoLDApO3Uud2lkdGgrPWh9aCYmKHUucHJldlRyYW5zZm9ybT1nZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpKTtjb25zdCBkPXMudW5pY29kZTtzYXZlTGFzdENoYXIoZCkmJnUuc3RyLnB1c2goIiAiKTt1LnN0ci5wdXNoKGQpO2MmJihyLnZlcnRpY2FsP00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLC1jKTpNLnRyYW5zbGF0ZVRleHRNYXRyaXgoYypNLnRleHRIU2NhbGUsMCkpfX1mdW5jdGlvbiBhcHBlbmRFT0woKXtyZXNldExhc3RDaGFycygpO2lmKHAuaW5pdGlhbGl6ZWQpe3AuaGFzRU9MPSEwO2ZsdXNoVGV4dENvbnRlbnRJdGVtKCl9ZWxzZSBmLml0ZW1zLnB1c2goe3N0cjoiIixkaXI6Imx0ciIsd2lkdGg6MCxoZWlnaHQ6MCx0cmFuc2Zvcm06Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxmb250TmFtZTpNLmxvYWRlZE5hbWUsaGFzRU9MOiEwfSl9ZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyhlLHQsYSl7aWYoYSpwLnNwYWNlSW5GbG93TWluPD1lJiZlPD1hKnAuc3BhY2VJbkZsb3dNYXgpe2lmKHAuaW5pdGlhbGl6ZWQpe3Jlc2V0TGFzdENoYXJzKCk7cC5zdHIucHVzaCgiICIpfXJldHVybiExfWNvbnN0IHI9cC5mb250TmFtZTtsZXQgbj0wO2lmKHAudmVydGljYWwpe249ZTtlPTB9Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXNldExhc3RDaGFycygpO3B1c2hXaGl0ZXNwYWNlKHt3aWR0aDpNYXRoLmFicyhlKSxoZWlnaHQ6TWF0aC5hYnMobiksdHJhbnNmb3JtOnR8fGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCksZm9udE5hbWU6cn0pO3JldHVybiEwfWZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCl7aWYocC5pbml0aWFsaXplZCYmcC5zdHIpe3AudmVydGljYWw/cC50b3RhbEhlaWdodCs9cC5oZWlnaHQqcC50ZXh0QWR2YW5jZVNjYWxlOnAudG90YWxXaWR0aCs9cC53aWR0aCpwLnRleHRBZHZhbmNlU2NhbGU7Zi5pdGVtcy5wdXNoKGZ1bmN0aW9uIHJ1bkJpZGlUcmFuc2Zvcm0oZSl7bGV0IHQ9ZS5zdHIuam9pbigiIik7ZHx8KHQ9KDAsci5ub3JtYWxpemVVbmljb2RlKSh0KSk7Y29uc3QgYT0oMCxiLmJpZGkpKHQsLTEsZS52ZXJ0aWNhbCk7cmV0dXJue3N0cjphLnN0cixkaXI6YS5kaXIsd2lkdGg6TWF0aC5hYnMoZS50b3RhbFdpZHRoKSxoZWlnaHQ6TWF0aC5hYnMoZS50b3RhbEhlaWdodCksdHJhbnNmb3JtOmUudHJhbnNmb3JtLGZvbnROYW1lOmUuZm9udE5hbWUsaGFzRU9MOmUuaGFzRU9MfX0ocCkpO3AuaW5pdGlhbGl6ZWQ9ITE7cC5zdHIubGVuZ3RoPTB9fWZ1bmN0aW9uIGVucXVldWVDaHVuaygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgdD1mLml0ZW1zLmxlbmd0aDtpZigwIT09dCYmIShlJiZ0PDEwKSl7Yy5lbnF1ZXVlKGYsdCk7Zi5pdGVtcz1bXTtmLnN0eWxlcz1PYmplY3QuY3JlYXRlKG51bGwpfX1jb25zdCBFPW5ldyBUaW1lU2xvdE1hbmFnZXI7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBwcm9taXNlQm9keShlLHQpe2NvbnN0IG5leHQ9ZnVuY3Rpb24oYSl7ZW5xdWV1ZUNodW5rKCEwKTtQcm9taXNlLmFsbChbYSxjLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7cHJvbWlzZUJvZHkoZSx0KX1jYXRjaChlKXt0KGUpfX0pLHQpfTthLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtFLnJlc2V0KCk7Y29uc3QgZz17fTtsZXQgcCxiPVtdO2Zvcig7IShwPUUuY2hlY2soKSk7KXtiLmxlbmd0aD0wO2cuYXJncz1iO2lmKCFULnJlYWQoZykpYnJlYWs7Y29uc3QgZT1NO009cy5zdGF0ZTtjb25zdCB0PWcuZm47Yj1nLmFyZ3M7c3dpdGNoKDB8dCl7Y2FzZSByLk9QUy5zZXRGb250OnZhciB5PWJbMF0ubmFtZSx3PWJbMV07aWYoTS5mb250JiZ5PT09TS5mb250TmFtZSYmdz09PU0uZm9udFNpemUpYnJlYWs7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtNLmZvbnROYW1lPXk7TS5mb250U2l6ZT13O25leHQoaGFuZGxlU2V0Rm9udCh5LG51bGwpKTtyZXR1cm47Y2FzZSByLk9QUy5zZXRUZXh0UmlzZTpNLnRleHRSaXNlPWJbMF07YnJlYWs7Y2FzZSByLk9QUy5zZXRIU2NhbGU6TS50ZXh0SFNjYWxlPWJbMF0vMTAwO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZzpNLmxlYWRpbmc9YlswXTticmVhaztjYXNlIHIuT1BTLm1vdmVUZXh0Ok0udHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYlswXSxiWzFdKTtNLnRleHRNYXRyaXg9TS50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2JyZWFrO2Nhc2Ugci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0Ok0ubGVhZGluZz0tYlsxXTtNLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGJbMF0sYlsxXSk7TS50ZXh0TWF0cml4PU0udGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lOk0uY2FycmlhZ2VSZXR1cm4oKTticmVhaztjYXNlIHIuT1BTLnNldFRleHRNYXRyaXg6TS5zZXRUZXh0TWF0cml4KGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdKTtNLnNldFRleHRMaW5lTWF0cml4KGJbMF0sYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdKTt1cGRhdGVBZHZhbmNlU2NhbGUoKTticmVhaztjYXNlIHIuT1BTLnNldENoYXJTcGFjaW5nOk0uY2hhclNwYWNpbmc9YlswXTticmVhaztjYXNlIHIuT1BTLnNldFdvcmRTcGFjaW5nOk0ud29yZFNwYWNpbmc9YlswXTticmVhaztjYXNlIHIuT1BTLmJlZ2luVGV4dDpNLnRleHRNYXRyaXg9ci5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtNLnRleHRMaW5lTWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7YnJlYWs7Y2FzZSByLk9QUy5zaG93U3BhY2VkVGV4dDppZighcy5zdGF0ZS5mb250KXtTLmVuc3VyZVN0YXRlRm9udChzLnN0YXRlKTtjb250aW51ZX1jb25zdCB0PShNLmZvbnQudmVydGljYWw/MTotMSkqTS5mb250U2l6ZS8xZTMsZz1iWzBdO2ZvcihsZXQgZT0wLGE9Zy5sZW5ndGg7ZTxhO2UrKyl7Y29uc3QgYT1nW2VdO2lmKCJzdHJpbmciPT10eXBlb2YgYSlDLnB1c2goYSk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGEmJjAhPT1hKXtjb25zdCBlPUMuam9pbigiIik7Qy5sZW5ndGg9MDtidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6YSp0fSl9fWlmKEMubGVuZ3RoPjApe2NvbnN0IGU9Qy5qb2luKCIiKTtDLmxlbmd0aD0wO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzowfSl9YnJlYWs7Y2FzZSByLk9QUy5zaG93VGV4dDppZighcy5zdGF0ZS5mb250KXtTLmVuc3VyZVN0YXRlRm9udChzLnN0YXRlKTtjb250aW51ZX1idWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6YlswXSxleHRyYVNwYWNpbmc6MH0pO2JyZWFrO2Nhc2Ugci5PUFMubmV4dExpbmVTaG93VGV4dDppZighcy5zdGF0ZS5mb250KXtTLmVuc3VyZVN0YXRlRm9udChzLnN0YXRlKTtjb250aW51ZX1NLmNhcnJpYWdlUmV0dXJuKCk7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmJbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHIuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFzLnN0YXRlLmZvbnQpe1MuZW5zdXJlU3RhdGVGb250KHMuc3RhdGUpO2NvbnRpbnVlfU0ud29yZFNwYWNpbmc9YlswXTtNLmNoYXJTcGFjaW5nPWJbMV07TS5jYXJyaWFnZVJldHVybigpO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczpiWzJdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSByLk9QUy5wYWludFhPYmplY3Q6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTt2fHwodj1uLmdldCgiWE9iamVjdCIpfHxpLkRpY3QuZW1wdHkpO3ZhciBEPWJbMF1pbnN0YW5jZW9mIGkuTmFtZSxSPWJbMF0ubmFtZTtpZihEJiZrLmdldEJ5TmFtZShSKSlicmVhaztuZXh0KG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFEKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtsZXQgZj12LmdldFJhdyhSKTtpZihmIGluc3RhbmNlb2YgaS5SZWYpe2lmKGsuZ2V0QnlSZWYoZikpe2UoKTtyZXR1cm59aWYoUy5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEoZixTLnBhZ2VJbmRleCkpe2UoKTtyZXR1cm59Zj14LmZldGNoKGYpfWlmKCEoZiBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7Y29uc3QgZz1mLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoIShnIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIiE9PWcubmFtZSl7ay5zZXQoUixmLmRpY3Qub2JqSWQsITApO2UoKTtyZXR1cm59Y29uc3QgcD1zLnN0YXRlLmNsb25lKCksYj1uZXcgU3RhdGVNYW5hZ2VyKHApLHk9Zi5kaWN0LmdldEFycmF5KCJNYXRyaXgiKTtBcnJheS5pc0FycmF5KHkpJiY2PT09eS5sZW5ndGgmJmIudHJhbnNmb3JtKHkpO2VucXVldWVDaHVuaygpO2NvbnN0IHc9e2VucXVldWVJbnZva2VkOiExLGVucXVldWUoZSx0KXt0aGlzLmVucXVldWVJbnZva2VkPSEwO2MuZW5xdWV1ZShlLHQpfSxnZXQgZGVzaXJlZFNpemUoKXtyZXR1cm4gYy5kZXNpcmVkU2l6ZX0sZ2V0IHJlYWR5KCl7cmV0dXJuIGMucmVhZHl9fTtTLmdldFRleHRDb250ZW50KHtzdHJlYW06Zix0YXNrOmEscmVzb3VyY2VzOmYuZGljdC5nZXQoIlJlc291cmNlcyIpfHxuLHN0YXRlTWFuYWdlcjpiLGluY2x1ZGVNYXJrZWRDb250ZW50Om8sc2luazp3LHNlZW5TdHlsZXM6bCx2aWV3Qm94OmgsbWFya2VkQ29udGVudERhdGE6dSxkaXNhYmxlTm9ybWFsaXphdGlvbjpkfSkudGhlbigoZnVuY3Rpb24oKXt3LmVucXVldWVJbnZva2VkfHxrLnNldChSLGYuZGljdC5vYmpJZCwhMCk7ZSgpfSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighUy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2Ugci5PUFMuc2V0R1N0YXRlOkQ9YlswXWluc3RhbmNlb2YgaS5OYW1lO1I9YlswXS5uYW1lO2lmKEQmJk8uZ2V0QnlOYW1lKFIpKWJyZWFrO25leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIUQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3QgYT1uLmdldCgiRXh0R1N0YXRlIik7aWYoIShhIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3Qgcz1hLmdldChSKTtpZighKHMgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBvPXMuZ2V0KCJGb250Iik7aWYobyl7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtNLmZvbnROYW1lPW51bGw7TS5mb250U2l6ZT1vWzFdO2hhbmRsZVNldEZvbnQobnVsbCxvWzBdKS50aGVuKGUsdCl9ZWxzZXtPLnNldChSLHMub2JqSWQsITApO2UoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIHIuQWJvcnRFeGNlcHRpb24pKXtpZighUy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLHIud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSByLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtpZihvKXt1LmxldmVsKys7Zi5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnQiLHRhZzpiWzBdaW5zdGFuY2VvZiBpLk5hbWU/YlswXS5uYW1lOm51bGx9KX1icmVhaztjYXNlIHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYobyl7dS5sZXZlbCsrO2xldCBlPW51bGw7YlsxXWluc3RhbmNlb2YgaS5EaWN0JiYoZT1iWzFdLmdldCgiTUNJRCIpKTtmLml0ZW1zLnB1c2goe3R5cGU6ImJlZ2luTWFya2VkQ29udGVudFByb3BzIixpZDpOdW1iZXIuaXNJbnRlZ2VyKGUpP2Ake1MuaWRGYWN0b3J5LmdldFBhZ2VPYmpJZCgpfV9tYyR7ZX1gOm51bGwsdGFnOmJbMF1pbnN0YW5jZW9mIGkuTmFtZT9iWzBdLm5hbWU6bnVsbH0pfWJyZWFrO2Nhc2Ugci5PUFMuZW5kTWFya2VkQ29udGVudDpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKG8pe2lmKDA9PT11LmxldmVsKWJyZWFrO3UubGV2ZWwtLTtmLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9YnJlYWs7Y2FzZSByLk9QUy5yZXN0b3JlOiFlfHxlLmZvbnQ9PT1NLmZvbnQmJmUuZm9udFNpemU9PT1NLmZvbnRTaXplJiZlLmZvbnROYW1lPT09TS5mb250TmFtZXx8Zmx1c2hUZXh0Q29udGVudEl0ZW0oKX1pZihmLml0ZW1zLmxlbmd0aD49Yy5kZXNpcmVkU2l6ZSl7cD0hMDticmVha319aWYocCluZXh0KEwpO2Vsc2V7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtlbnF1ZXVlQ2h1bmsoKTtlKCl9fSkpLmNhdGNoKChlPT57aWYoIShlIGluc3RhbmNlb2Ygci5BYm9ydEV4Y2VwdGlvbikpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke2EubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO2VucXVldWVDaHVuaygpfX0pKX1leHRyYWN0RGF0YVN0cnVjdHVyZXMoZSx0LGEpe2NvbnN0IG49dGhpcy54cmVmO2xldCBzO2NvbnN0IGw9dGhpcy5yZWFkVG9Vbmljb2RlKGEudG9Vbmljb2RlfHxlLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSk7aWYoYS5jb21wb3NpdGUpe2NvbnN0IHQ9ZS5nZXQoIkNJRFN5c3RlbUluZm8iKTt0IGluc3RhbmNlb2YgaS5EaWN0JiYoYS5jaWRTeXN0ZW1JbmZvPXtyZWdpc3RyeTooMCxyLnN0cmluZ1RvUERGU3RyaW5nKSh0LmdldCgiUmVnaXN0cnkiKSksb3JkZXJpbmc6KDAsci5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIk9yZGVyaW5nIikpLHN1cHBsZW1lbnQ6dC5nZXQoIlN1cHBsZW1lbnQiKX0pO3RyeXtjb25zdCB0PWUuZ2V0KCJDSURUb0dJRE1hcCIpO3QgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0mJihzPXQuZ2V0Qnl0ZXMoKSl9Y2F0Y2goZSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxyLndhcm4pKGBleHRyYWN0RGF0YVN0cnVjdHVyZXMgLSBpZ25vcmluZyBDSURUb0dJRE1hcCBkYXRhOiAiJHtlfSIuYCl9fWNvbnN0IGg9W107bGV0IHUsZD1udWxsO2lmKGUuaGFzKCJFbmNvZGluZyIpKXt1PWUuZ2V0KCJFbmNvZGluZyIpO2lmKHUgaW5zdGFuY2VvZiBpLkRpY3Qpe2Q9dS5nZXQoIkJhc2VFbmNvZGluZyIpO2Q9ZCBpbnN0YW5jZW9mIGkuTmFtZT9kLm5hbWU6bnVsbDtpZih1LmhhcygiRGlmZmVyZW5jZXMiKSl7Y29uc3QgZT11LmdldCgiRGlmZmVyZW5jZXMiKTtsZXQgdD0wO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9bi5mZXRjaElmUmVmKGEpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICR7ZX1gKTtoW3QrK109ZS5uYW1lfX19fWVsc2UgaWYodSBpbnN0YW5jZW9mIGkuTmFtZSlkPXUubmFtZTtlbHNle2NvbnN0IGU9IkVuY29kaW5nIGlzIG5vdCBhIE5hbWUgbm9yIGEgRGljdCI7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoZSk7KDAsci53YXJuKShlKX0iTWFjUm9tYW5FbmNvZGluZyIhPT1kJiYiTWFjRXhwZXJ0RW5jb2RpbmciIT09ZCYmIldpbkFuc2lFbmNvZGluZyIhPT1kJiYoZD1udWxsKX1jb25zdCBmPSFhLmZpbGV8fGEuaXNJbnRlcm5hbEZvbnQsZz0oMCxjLmdldFN5bWJvbHNGb250cykoKVthLm5hbWVdO2QmJmYmJmcmJihkPW51bGwpO2lmKGQpYS5kZWZhdWx0RW5jb2Rpbmc9KDAsby5nZXRFbmNvZGluZykoZCk7ZWxzZXtjb25zdCBlPSEhKGEuZmxhZ3MmUy5Gb250RmxhZ3MuU3ltYm9saWMpLHQ9ISEoYS5mbGFncyZTLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7dT1vLlN0YW5kYXJkRW5jb2Rpbmc7IlRydWVUeXBlIiE9PWEudHlwZXx8dHx8KHU9by5XaW5BbnNpRW5jb2RpbmcpO2lmKGV8fGcpe3U9by5NYWNSb21hbkVuY29kaW5nO2YmJigvU3ltYm9sL2kudGVzdChhLm5hbWUpP3U9by5TeW1ib2xTZXRFbmNvZGluZzovRGluZ2JhdHMvaS50ZXN0KGEubmFtZSk/dT1vLlphcGZEaW5nYmF0c0VuY29kaW5nOi9XaW5nZGluZ3MvaS50ZXN0KGEubmFtZSkmJih1PW8uV2luQW5zaUVuY29kaW5nKSl9YS5kZWZhdWx0RW5jb2Rpbmc9dX1hLmRpZmZlcmVuY2VzPWg7YS5iYXNlRW5jb2RpbmdOYW1lPWQ7YS5oYXNFbmNvZGluZz0hIWR8fGgubGVuZ3RoPjA7YS5kaWN0PWU7cmV0dXJuIGwudGhlbigoZT0+e2EudG9Vbmljb2RlPWU7cmV0dXJuIHRoaXMuYnVpbGRUb1VuaWNvZGUoYSl9KSkudGhlbigoZT0+e2EudG9Vbmljb2RlPWU7cyYmKGEuY2lkVG9HaWRNYXA9dGhpcy5yZWFkQ2lkVG9HaWRNYXAocyxlKSk7cmV0dXJuIGF9KSl9X3NpbXBsZUZvbnRUb1VuaWNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTsoMCxyLmFzc2VydCkoIWUuY29tcG9zaXRlLCJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7Y29uc3QgYT1bXSxuPWUuZGVmYXVsdEVuY29kaW5nLnNsaWNlKCksaT1lLmJhc2VFbmNvZGluZ05hbWUscz1lLmRpZmZlcmVuY2VzO2Zvcihjb25zdCBlIGluIHMpe2NvbnN0IHQ9c1tlXTsiLm5vdGRlZiIhPT10JiYobltlXT10KX1jb25zdCBjPSgwLEMuZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgciBpbiBuKXtsZXQgcz1uW3JdO2lmKCIiPT09cyljb250aW51ZTtsZXQgbD1jW3NdO2lmKHZvaWQgMCE9PWwpe2Fbcl09U3RyaW5nLmZyb21DaGFyQ29kZShsKTtjb250aW51ZX1sZXQgaD0wO3N3aXRjaChzWzBdKXtjYXNlIkciOjM9PT1zLmxlbmd0aCYmKGg9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1zLmxlbmd0aCYmKGg9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYocy5sZW5ndGg+PTMmJnMubGVuZ3RoPD00KXtjb25zdCBhPXMuc3Vic3RyaW5nKDEpO2lmKHQpe2g9cGFyc2VJbnQoYSwxNik7YnJlYWt9aD0rYTtpZihOdW1iZXIuaXNOYU4oaCkmJk51bWJlci5pc0ludGVnZXIocGFyc2VJbnQoYSwxNikpKXJldHVybiB0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUsITApfWJyZWFrO2Nhc2UidSI6bD0oMCxrLmdldFVuaWNvZGVGb3JHbHlwaCkocyxjKTstMSE9PWwmJihoPWwpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKHMpe2Nhc2UiZl9oIjpjYXNlImZfdCI6Y2FzZSJUX2giOmFbcl09cy5yZXBsYWNlQWxsKCJfIiwiIik7Y29udGludWV9fWlmKGg+MCYmaDw9MTExNDExMSYmTnVtYmVyLmlzSW50ZWdlcihoKSl7aWYoaSYmaD09PStyKXtjb25zdCBlPSgwLG8uZ2V0RW5jb2RpbmcpKGkpO2lmKGUmJihzPWVbcl0pKXthW3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoY1tzXSk7Y29udGludWV9fWFbcl09U3RyaW5nLmZyb21Db2RlUG9pbnQoaCl9fXJldHVybiBhfWFzeW5jIGJ1aWxkVG9Vbmljb2RlKGUpe2UuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXA9ZS50b1VuaWNvZGU/Lmxlbmd0aD4wO2lmKGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApeyFlLmNvbXBvc2l0ZSYmZS5oYXNFbmNvZGluZyYmKGUuZmFsbGJhY2tUb1VuaWNvZGU9dGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlKSk7cmV0dXJuIGUudG9Vbmljb2RlfWlmKCFlLmNvbXBvc2l0ZSlyZXR1cm4gbmV3IHUuVG9Vbmljb2RlTWFwKHRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO2lmKGUuY29tcG9zaXRlJiYoZS5jTWFwLmJ1aWx0SW5DTWFwJiYhKGUuY01hcCBpbnN0YW5jZW9mIG4uSWRlbnRpdHlDTWFwKXx8IkFkb2JlIj09PWUuY2lkU3lzdGVtSW5mby5yZWdpc3RyeSYmKCJHQjEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiQ05TMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmd8fCJKYXBhbjEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiS29yZWExIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZykpKXtjb25zdHtyZWdpc3RyeTp0LG9yZGVyaW5nOmF9PWUuY2lkU3lzdGVtSW5mbyxzPWkuTmFtZS5nZXQoYCR7dH0tJHthfS1VQ1MyYCksbz1hd2FpdCBuLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6cyxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KSxjPVtdLGw9W107ZS5jTWFwLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aWYodD42NTUzNSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNSIpO2NvbnN0IGE9by5sb29rdXAodCk7aWYoYSl7bC5sZW5ndGg9MDtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKWwucHVzaCgoYS5jaGFyQ29kZUF0KGUpPDw4KSthLmNoYXJDb2RlQXQoZSsxKSk7Y1tlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmwpfX0pKTtyZXR1cm4gbmV3IHUuVG9Vbmljb2RlTWFwKGMpfXJldHVybiBuZXcgdS5JZGVudGl0eVRvVW5pY29kZU1hcChlLmZpcnN0Q2hhcixlLmxhc3RDaGFyKX1yZWFkVG9Vbmljb2RlKGUpe3JldHVybiBlP2UgaW5zdGFuY2VvZiBpLk5hbWU/bi5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuLklkZW50aXR5Q01hcD9uZXcgdS5JZGVudGl0eVRvVW5pY29kZU1hcCgwLDY1NTM1KTpuZXcgdS5Ub1VuaWNvZGVNYXAoZS5nZXRNYXAoKSl9KSk6ZSBpbnN0YW5jZW9mIG0uQmFzZVN0cmVhbT9uLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygbi5JZGVudGl0eUNNYXApcmV0dXJuIG5ldyB1LklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpO2NvbnN0IHQ9bmV3IEFycmF5KGUubGVuZ3RoKTtlLmZvckVhY2goKGZ1bmN0aW9uKGUsYSl7aWYoIm51bWJlciI9PXR5cGVvZiBhKXt0W2VdPVN0cmluZy5mcm9tQ29kZVBvaW50KGEpO3JldHVybn1jb25zdCByPVtdO2ZvcihsZXQgZT0wO2U8YS5sZW5ndGg7ZSs9Mil7Y29uc3QgdD1hLmNoYXJDb2RlQXQoZSk8PDh8YS5jaGFyQ29kZUF0KGUrMSk7aWYoNTUyOTYhPSg2MzQ4OCZ0KSl7ci5wdXNoKHQpO2NvbnRpbnVlfWUrPTI7Y29uc3Qgbj1hLmNoYXJDb2RlQXQoZSk8PDh8YS5jaGFyQ29kZUF0KGUrMSk7ci5wdXNoKCgoMTAyMyZ0KTw8MTApKygxMDIzJm4pKzY1NTM2KX10W2VdPVN0cmluZy5mcm9tQ29kZVBvaW50KC4uLnIpfSkpO3JldHVybiBuZXcgdS5Ub1VuaWNvZGVNYXAodCl9KSwoZT0+e2lmKGUgaW5zdGFuY2VvZiByLkFib3J0RXhjZXB0aW9uKXJldHVybiBudWxsO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpeygwLHIud2FybikoYHJlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9KSk6UHJvbWlzZS5yZXNvbHZlKG51bGwpOlByb21pc2UucmVzb2x2ZShudWxsKX1yZWFkQ2lkVG9HaWRNYXAoZSx0KXtjb25zdCBhPVtdO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lW3IrK108PDh8ZVtyXSxpPXI+PjE7KDAhPT1ufHx0LmhhcyhpKSkmJihhW2ldPW4pfXJldHVybiBhfWV4dHJhY3RXaWR0aHMoZSx0LGEpe2NvbnN0IHI9dGhpcy54cmVmO2xldCBuPVtdLHM9MDtjb25zdCBvPVtdO2xldCBjLGwsaCx1LGQsZixnLHA7aWYoYS5jb21wb3NpdGUpe3M9ZS5oYXMoIkRXIik/ZS5nZXQoIkRXIik6MWUzO3A9ZS5nZXQoIlciKTtpZihwKWZvcihsPTAsaD1wLmxlbmd0aDtsPGg7bCsrKXtmPXIuZmV0Y2hJZlJlZihwW2wrK10pO2c9ci5mZXRjaElmUmVmKHBbbF0pO2lmKEFycmF5LmlzQXJyYXkoZykpZm9yKHU9MCxkPWcubGVuZ3RoO3U8ZDt1KyspbltmKytdPXIuZmV0Y2hJZlJlZihnW3VdKTtlbHNle2NvbnN0IGU9ci5mZXRjaElmUmVmKHBbKytsXSk7Zm9yKHU9Zjt1PD1nO3UrKyluW3VdPWV9fWlmKGEudmVydGljYWwpe2xldCB0PWUuZ2V0QXJyYXkoIkRXMiIpfHxbODgwLC0xZTNdO2M9W3RbMV0sLjUqcyx0WzBdXTt0PWUuZ2V0KCJXMiIpO2lmKHQpZm9yKGw9MCxoPXQubGVuZ3RoO2w8aDtsKyspe2Y9ci5mZXRjaElmUmVmKHRbbCsrXSk7Zz1yLmZldGNoSWZSZWYodFtsXSk7aWYoQXJyYXkuaXNBcnJheShnKSlmb3IodT0wLGQ9Zy5sZW5ndGg7dTxkO3UrKylvW2YrK109W3IuZmV0Y2hJZlJlZihnW3UrK10pLHIuZmV0Y2hJZlJlZihnW3UrK10pLHIuZmV0Y2hJZlJlZihnW3VdKV07ZWxzZXtjb25zdCBlPVtyLmZldGNoSWZSZWYodFsrK2xdKSxyLmZldGNoSWZSZWYodFsrK2xdKSxyLmZldGNoSWZSZWYodFsrK2xdKV07Zm9yKHU9Zjt1PD1nO3UrKylvW3VdPWV9fX19ZWxzZXtjb25zdCBvPWEuZmlyc3RDaGFyO3A9ZS5nZXQoIldpZHRocyIpO2lmKHApe3U9bztmb3IobD0wLGg9cC5sZW5ndGg7bDxoO2wrKyluW3UrK109ci5mZXRjaElmUmVmKHBbbF0pO3M9cGFyc2VGbG9hdCh0LmdldCgiTWlzc2luZ1dpZHRoIikpfHwwfWVsc2V7Y29uc3QgdD1lLmdldCgiQmFzZUZvbnQiKTtpZih0IGluc3RhbmNlb2YgaS5OYW1lKXtjb25zdCBlPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHQubmFtZSk7bj10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUud2lkdGhzLGEpO3M9ZS5kZWZhdWx0V2lkdGh9fX1sZXQgbT0hMCxiPXM7Zm9yKGNvbnN0IGUgaW4gbil7Y29uc3QgdD1uW2VdO2lmKHQpaWYoYil7aWYoYiE9PXQpe209ITE7YnJlYWt9fWVsc2UgYj10fW0/YS5mbGFnc3w9Uy5Gb250RmxhZ3MuRml4ZWRQaXRjaDphLmZsYWdzJj1+Uy5Gb250RmxhZ3MuRml4ZWRQaXRjaDthLmRlZmF1bHRXaWR0aD1zO2Eud2lkdGhzPW47YS5kZWZhdWx0Vk1ldHJpY3M9YzthLnZtZXRyaWNzPW99aXNTZXJpZkZvbnQoZSl7Y29uc3QgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxjLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfWdldEJhc2VGb250TWV0cmljcyhlKXtsZXQgdD0wLGE9T2JqZWN0LmNyZWF0ZShudWxsKSxyPSExO2xldCBuPSgwLGMuZ2V0U3RkRm9udE1hcCkoKVtlXXx8ZTtjb25zdCBpPSgwLHYuZ2V0TWV0cmljcykoKTtuIGluIGl8fChuPXRoaXMuaXNTZXJpZkZvbnQoZSk/IlRpbWVzLVJvbWFuIjoiSGVsdmV0aWNhIik7Y29uc3Qgcz1pW25dO2lmKCJudW1iZXIiPT10eXBlb2Ygcyl7dD1zO3I9ITB9ZWxzZSBhPXMoKTtyZXR1cm57ZGVmYXVsdFdpZHRoOnQsbW9ub3NwYWNlOnIsd2lkdGhzOmF9fWJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUsdCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9dC5kaWZmZXJlbmNlcyxuPXQuZGVmYXVsdEVuY29kaW5nO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl0IGluIHImJmVbclt0XV0/YVt0XT1lW3JbdF1dOnQgaW4gbiYmZVtuW3RdXSYmKGFbdF09ZVtuW3RdXSk7cmV0dXJuIGF9cHJlRXZhbHVhdGVGb250KGUpe2NvbnN0IHQ9ZTtsZXQgYT1lLmdldCgiU3VidHlwZSIpO2lmKCEoYSBpbnN0YW5jZW9mIGkuTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7bGV0IG4scyxvPSExO2lmKCJUeXBlMCI9PT1hLm5hbWUpe2NvbnN0IHQ9ZS5nZXQoIkRlc2NlbmRhbnRGb250cyIpO2lmKCF0KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KHQpP3RoaXMueHJlZi5mZXRjaElmUmVmKHRbMF0pOnQpaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnQgaXMgbm90IGEgZGljdGlvbmFyeS4iKTthPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShhIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTtvPSEwfWNvbnN0IGM9ZS5nZXQoIkZpcnN0Q2hhciIpfHwwLGw9ZS5nZXQoIkxhc3RDaGFyIil8fChvPzY1NTM1OjI1NSksaD1lLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZihoKXtuPW5ldyBULk11cm11ckhhc2gzXzY0O2NvbnN0IGE9dC5nZXRSYXcoIkVuY29kaW5nIik7aWYoYSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShhLm5hbWUpO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGEudG9TdHJpbmcoKSk7ZWxzZSBpZihhIGluc3RhbmNlb2YgaS5EaWN0KWZvcihjb25zdCBlIG9mIGEuZ2V0UmF3VmFsdWVzKCkpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSluLnVwZGF0ZShlLm5hbWUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGkuUmVmKW4udXBkYXRlKGUudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PWUubGVuZ3RoLGE9bmV3IEFycmF5KHQpO2ZvcihsZXQgcj0wO3I8dDtyKyspe2NvbnN0IHQ9ZVtyXTt0IGluc3RhbmNlb2YgaS5OYW1lP2Fbcl09dC5uYW1lOigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZikmJihhW3JdPXQudG9TdHJpbmcoKSl9bi51cGRhdGUoYS5qb2luKCkpfW4udXBkYXRlKGAke2N9LSR7bH1gKTtzPWUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpO2lmKHMgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0pe2NvbnN0IGU9cy5zdHJ8fHMsdD1lLmJ1ZmZlcj9uZXcgVWludDhBcnJheShlLmJ1ZmZlci5idWZmZXIsMCxlLmJ1ZmZlckxlbmd0aCk6bmV3IFVpbnQ4QXJyYXkoZS5ieXRlcy5idWZmZXIsZS5zdGFydCxlLmVuZC1lLnN0YXJ0KTtuLnVwZGF0ZSh0KX1lbHNlIHMgaW5zdGFuY2VvZiBpLk5hbWUmJm4udXBkYXRlKHMubmFtZSk7Y29uc3Qgcj1lLmdldCgiV2lkdGhzIil8fHQuZ2V0KCJXaWR0aHMiKTtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHIpKCJudW1iZXIiPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIGkuUmVmKSYmZS5wdXNoKHQudG9TdHJpbmcoKSk7bi51cGRhdGUoZS5qb2luKCkpfWlmKG8pe24udXBkYXRlKCJjb21wb3NpdGVGb250Iik7Y29uc3QgYT1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgYSlpZigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBpLlJlZillLnB1c2godC50b1N0cmluZygpKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IGUgb2YgdCkoIm51bWJlciI9PXR5cGVvZiBlfHxlIGluc3RhbmNlb2YgaS5SZWYpJiZhLnB1c2goZS50b1N0cmluZygpKTtlLnB1c2goYFske2Euam9pbigpfV1gKX1uLnVwZGF0ZShlLmpvaW4oKSl9Y29uc3Qgcj1lLmdldFJhdygiQ0lEVG9HSURNYXAiKXx8dC5nZXRSYXcoIkNJRFRvR0lETWFwIik7ciBpbnN0YW5jZW9mIGkuTmFtZT9uLnVwZGF0ZShyLm5hbWUpOnIgaW5zdGFuY2VvZiBpLlJlZj9uLnVwZGF0ZShyLnRvU3RyaW5nKCkpOnIgaW5zdGFuY2VvZiBtLkJhc2VTdHJlYW0mJm4udXBkYXRlKHIucGVla0J5dGVzKCkpfX1yZXR1cm57ZGVzY3JpcHRvcjpoLGRpY3Q6ZSxiYXNlRGljdDp0LGNvbXBvc2l0ZTpvLHR5cGU6YS5uYW1lLGZpcnN0Q2hhcjpjLGxhc3RDaGFyOmwsdG9Vbmljb2RlOnMsaGFzaDpuP24uaGV4ZGlnZXN0KCk6IiJ9fWFzeW5jIHRyYW5zbGF0ZUZvbnQoZSl7bGV0e2Rlc2NyaXB0b3I6dCxkaWN0OmEsYmFzZURpY3Q6byxjb21wb3NpdGU6bCx0eXBlOnUsZmlyc3RDaGFyOmQsbGFzdENoYXI6Zix0b1VuaWNvZGU6Zyxjc3NGb250SW5mbzptfT1lO2NvbnN0IGI9IlR5cGUzIj09PXU7bGV0IHk7aWYoIXQpe2lmKCFiKXtsZXQgZT1hLmdldCgiQmFzZUZvbnQiKTtpZighKGUgaW5zdGFuY2VvZiBpLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJCYXNlIGZvbnQgaXMgbm90IHNwZWNpZmllZCIpO2U9ZS5uYW1lLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpO2NvbnN0IHQ9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoZSksbj1lLnNwbGl0KCItIilbMF0sbD0odGhpcy5pc1NlcmlmRm9udChuKT9TLkZvbnRGbGFncy5TZXJpZjowKXwodC5tb25vc3BhY2U/Uy5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsYy5nZXRTeW1ib2xzRm9udHMpKClbbl0/Uy5Gb250RmxhZ3MuU3ltYm9saWM6Uy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO3k9e3R5cGU6dSxuYW1lOmUsbG9hZGVkTmFtZTpvLmxvYWRlZE5hbWUsc3lzdGVtRm9udEluZm86bnVsbCx3aWR0aHM6dC53aWR0aHMsZGVmYXVsdFdpZHRoOnQuZGVmYXVsdFdpZHRoLGlzU2ltdWxhdGVkRmxhZ3M6ITAsZmxhZ3M6bCxmaXJzdENoYXI6ZCxsYXN0Q2hhcjpmLHRvVW5pY29kZTpnLHhIZWlnaHQ6MCxjYXBIZWlnaHQ6MCxpdGFsaWNBbmdsZTowLGlzVHlwZTNGb250OmJ9O2NvbnN0IGg9YS5nZXQoIldpZHRocyIpLHA9KDAsYy5nZXRTdGFuZGFyZEZvbnROYW1lKShlKTtsZXQgbT1udWxsO2lmKHApe209YXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEocCk7eS5pc0ludGVybmFsRm9udD0hIW19IXkuaXNJbnRlcm5hbEZvbnQmJnRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250cyYmKHkuc3lzdGVtRm9udEluZm89KDAseC5nZXRGb250U3Vic3RpdHV0aW9uKSh0aGlzLnN5c3RlbUZvbnRDYWNoZSx0aGlzLmlkRmFjdG9yeSx0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCxlLHApKTtyZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoYSxhLHkpLnRoZW4oKGE9PntpZihoKXtjb25zdCBlPVtdO2xldCB0PWQ7Zm9yKGNvbnN0IGEgb2YgaCllW3QrK109dGhpcy54cmVmLmZldGNoSWZSZWYoYSk7YS53aWR0aHM9ZX1lbHNlIGEud2lkdGhzPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgodC53aWR0aHMsYSk7cmV0dXJuIG5ldyBzLkZvbnQoZSxtLGEpfSkpfXQ9bmV3IGkuRGljdChudWxsKTt0LnNldCgiRm9udE5hbWUiLGkuTmFtZS5nZXQodSkpO3Quc2V0KCJGb250QkJveCIsYS5nZXRBcnJheSgiRm9udEJCb3giKXx8WzAsMCwwLDBdKX1sZXQgdz10LmdldCgiRm9udE5hbWUiKSxDPWEuZ2V0KCJCYXNlRm9udCIpOyJzdHJpbmciPT10eXBlb2YgdyYmKHc9aS5OYW1lLmdldCh3KSk7InN0cmluZyI9PXR5cGVvZiBDJiYoQz1pLk5hbWUuZ2V0KEMpKTtjb25zdCB2PXc/Lm5hbWUsaz1DPy5uYW1lO2lmKCFiJiZ2IT09ayl7KDAsci5pbmZvKShgVGhlIEZvbnREZXNjcmlwdG9yJ3MgRm9udE5hbWUgaXMgIiR7dn0iIGJ1dCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCAiJHtrfSIuYCk7diYmayYmKGsuc3RhcnRzV2l0aCh2KXx8ISgwLGMuaXNLbm93bkZvbnROYW1lKSh2KSYmKDAsYy5pc0tub3duRm9udE5hbWUpKGspKSYmKHc9bnVsbCl9d3x8PUM7aWYoISh3IGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IG5hbWUiKTtsZXQgTyxULE0sRSxEO3RyeXtPPXQuZ2V0KCJGb250RmlsZSIsIkZvbnRGaWxlMiIsIkZvbnRGaWxlMyIpfWNhdGNoKGUpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsci53YXJuKShgdHJhbnNsYXRlRm9udCAtIGZldGNoaW5nICIke3cubmFtZX0iIGZvbnQgZmlsZTogIiR7ZX0iLmApO089bmV3IHAuTnVsbFN0cmVhbX1sZXQgUj0hMSxOPW51bGwsTD1udWxsO2lmKE8pe2lmKE8uZGljdCl7Y29uc3QgZT1PLmRpY3QuZ2V0KCJTdWJ0eXBlIik7ZSBpbnN0YW5jZW9mIGkuTmFtZSYmKFQ9ZS5uYW1lKTtNPU8uZGljdC5nZXQoIkxlbmd0aDEiKTtFPU8uZGljdC5nZXQoIkxlbmd0aDIiKTtEPU8uZGljdC5nZXQoIkxlbmd0aDMiKX19ZWxzZSBpZihtKXtjb25zdCBlPSgwLGguZ2V0WGZhRm9udE5hbWUpKHcubmFtZSk7aWYoZSl7bS5mb250RmFtaWx5PWAke20uZm9udEZhbWlseX0tUGRmSlMtWEZBYDttLm1ldHJpY3M9ZS5tZXRyaWNzfHxudWxsO049ZS5mYWN0b3JzfHxudWxsO089YXdhaXQgdGhpcy5mZXRjaFN0YW5kYXJkRm9udERhdGEoZS5uYW1lKTtSPSEhTztvPWE9KDAsaC5nZXRYZmFGb250RGljdCkody5uYW1lKTtsPSEwfX1lbHNlIGlmKCFiKXtjb25zdCBlPSgwLGMuZ2V0U3RhbmRhcmRGb250TmFtZSkody5uYW1lKTtpZihlKXtPPWF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpO1I9ISFPfSFSJiZ0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMmJihMPSgwLHguZ2V0Rm9udFN1YnN0aXR1dGlvbikodGhpcy5zeXN0ZW1Gb250Q2FjaGUsdGhpcy5pZEZhY3RvcnksdGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwsdy5uYW1lLGUpKX15PXt0eXBlOnUsbmFtZTp3Lm5hbWUsc3VidHlwZTpULGZpbGU6TyxsZW5ndGgxOk0sbGVuZ3RoMjpFLGxlbmd0aDM6RCxpc0ludGVybmFsRm9udDpSLGxvYWRlZE5hbWU6by5sb2FkZWROYW1lLGNvbXBvc2l0ZTpsLGZpeGVkUGl0Y2g6ITEsZm9udE1hdHJpeDphLmdldEFycmF5KCJGb250TWF0cml4Iil8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgsZmlyc3RDaGFyOmQsbGFzdENoYXI6Zix0b1VuaWNvZGU6ZyxiYm94OnQuZ2V0QXJyYXkoIkZvbnRCQm94Iil8fGEuZ2V0QXJyYXkoIkZvbnRCQm94IiksYXNjZW50OnQuZ2V0KCJBc2NlbnQiKSxkZXNjZW50OnQuZ2V0KCJEZXNjZW50IikseEhlaWdodDp0LmdldCgiWEhlaWdodCIpfHwwLGNhcEhlaWdodDp0LmdldCgiQ2FwSGVpZ2h0Iil8fDAsZmxhZ3M6dC5nZXQoIkZsYWdzIiksaXRhbGljQW5nbGU6dC5nZXQoIkl0YWxpY0FuZ2xlIil8fDAsaXNUeXBlM0ZvbnQ6Yixjc3NGb250SW5mbzptLHNjYWxlRmFjdG9yczpOLHN5c3RlbUZvbnRJbmZvOkx9O2lmKGwpe2NvbnN0IGU9by5nZXQoIkVuY29kaW5nIik7ZSBpbnN0YW5jZW9mIGkuTmFtZSYmKHkuY2lkRW5jb2Rpbmc9ZS5uYW1lKTtjb25zdCB0PWF3YWl0IG4uQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pO3kuY01hcD10O3kudmVydGljYWw9eS5jTWFwLnZlcnRpY2FsfXJldHVybiB0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyhhLG8seSkudGhlbigoZT0+e3RoaXMuZXh0cmFjdFdpZHRocyhhLHQsZSk7cmV0dXJuIG5ldyBzLkZvbnQody5uYW1lLE8sZSl9KSl9c3RhdGljIGJ1aWxkRm9udFBhdGhzKGUsdCxhLG4pe2Z1bmN0aW9uIGJ1aWxkUGF0aCh0KXtjb25zdCBpPWAke2UubG9hZGVkTmFtZX1fcGF0aF8ke3R9YDt0cnl7aWYoZS5yZW5kZXJlci5oYXNCdWlsdFBhdGgodCkpcmV0dXJuO2Euc2VuZCgiY29tbW9ub2JqIixbaSwiRm9udFBhdGgiLGUucmVuZGVyZXIuZ2V0UGF0aEpzKHQpXSl9Y2F0Y2goZSl7aWYobi5pZ25vcmVFcnJvcnMpeygwLHIud2FybikoYGJ1aWxkRm9udFBhdGhzIC0gaWdub3JpbmcgJHtpfSBnbHlwaDogIiR7ZX0iLmApO3JldHVybn10aHJvdyBlfX1mb3IoY29uc3QgZSBvZiB0KXtidWlsZFBhdGgoZS5mb250Q2hhcik7Y29uc3QgdD1lLmFjY2VudDt0Py5mb250Q2hhciYmYnVpbGRQYXRoKHQuZm9udENoYXIpfX1zdGF0aWMgZ2V0IGZhbGxiYWNrRm9udERpY3QoKXtjb25zdCBlPW5ldyBpLkRpY3Q7ZS5zZXQoIkJhc2VGb250IixpLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLGkuTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKTtlLnNldCgiU3VidHlwZSIsaS5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpO2Uuc2V0KCJFbmNvZGluZyIsaS5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJmYWxsYmFja0ZvbnREaWN0IixlKX19dC5QYXJ0aWFsRXZhbHVhdG9yPVBhcnRpYWxFdmFsdWF0b3I7Y2xhc3MgVHJhbnNsYXRlZEZvbnR7Y29uc3RydWN0b3IoZSl7bGV0e2xvYWRlZE5hbWU6dCxmb250OmEsZGljdDpyLGV2YWx1YXRvck9wdGlvbnM6bn09ZTt0aGlzLmxvYWRlZE5hbWU9dDt0aGlzLmZvbnQ9YTt0aGlzLmRpY3Q9cjt0aGlzLl9ldmFsdWF0b3JPcHRpb25zPW58fEQ7dGhpcy50eXBlM0xvYWRlZD1udWxsO3RoaXMudHlwZTNEZXBlbmRlbmNpZXM9YS5pc1R5cGUzRm9udD9uZXcgU2V0Om51bGw7dGhpcy5zZW50PSExfXNlbmQoZSl7aWYoIXRoaXMuc2VudCl7dGhpcy5zZW50PSEwO2Uuc2VuZCgiY29tbW9ub2JqIixbdGhpcy5sb2FkZWROYW1lLCJGb250Iix0aGlzLmZvbnQuZXhwb3J0RGF0YSh0aGlzLl9ldmFsdWF0b3JPcHRpb25zLmZvbnRFeHRyYVByb3BlcnRpZXMpXSl9fWZhbGxiYWNrKGUpe2lmKHRoaXMuZm9udC5kYXRhKXt0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlPSEwO1BhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHModGhpcy5mb250LHRoaXMuZm9udC5nbHlwaENhY2hlVmFsdWVzLGUsdGhpcy5fZXZhbHVhdG9yT3B0aW9ucyl9fWxvYWRUeXBlM0RhdGEoZSx0LGEpe2lmKHRoaXMudHlwZTNMb2FkZWQpcmV0dXJuIHRoaXMudHlwZTNMb2FkZWQ7aWYoIXRoaXMuZm9udC5pc1R5cGUzRm9udCl0aHJvdyBuZXcgRXJyb3IoIk11c3QgYmUgYSBUeXBlMyBmb250LiIpO2NvbnN0IG49ZS5jbG9uZSh7aWdub3JlRXJyb3JzOiExfSk7bi5wYXJzaW5nVHlwZTNGb250PSEwO2NvbnN0IHM9bmV3IGkuUmVmU2V0KGUudHlwZTNGb250UmVmcyk7dGhpcy5kaWN0Lm9iaklkJiYhcy5oYXModGhpcy5kaWN0Lm9iaklkKSYmcy5wdXQodGhpcy5kaWN0Lm9iaklkKTtuLnR5cGUzRm9udFJlZnM9cztjb25zdCBvPXRoaXMuZm9udCxjPXRoaXMudHlwZTNEZXBlbmRlbmNpZXM7bGV0IGw9UHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgaD10aGlzLmRpY3QuZ2V0KCJDaGFyUHJvY3MiKSx1PXRoaXMuZGljdC5nZXQoIlJlc291cmNlcyIpfHx0LGQ9T2JqZWN0LmNyZWF0ZShudWxsKSxmPXIuVXRpbC5ub3JtYWxpemVSZWN0KG8uYmJveHx8WzAsMCwwLDBdKSxnPWZbMl0tZlswXSxwPWZbM10tZlsxXSxtPU1hdGguaHlwb3QoZyxwKTtmb3IoY29uc3QgZSBvZiBoLmdldEtleXMoKSlsPWwudGhlbigoKCk9Pntjb25zdCB0PWguZ2V0KGUpLGk9bmV3IE0uT3BlcmF0b3JMaXN0O3JldHVybiBuLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnQsdGFzazphLHJlc291cmNlczp1LG9wZXJhdG9yTGlzdDppfSkudGhlbigoKCk9PntpLmZuQXJyYXlbMF09PT1yLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMmJnRoaXMuX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMoaSxtKTtkW2VdPWkuZ2V0SVIoKTtmb3IoY29uc3QgZSBvZiBpLmRlcGVuZGVuY2llcyljLmFkZChlKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7KDAsci53YXJuKShgVHlwZTMgZm9udCByZXNvdXJjZSAiJHtlfSIgaXMgbm90IGF2YWlsYWJsZS5gKTtjb25zdCBhPW5ldyBNLk9wZXJhdG9yTGlzdDtkW2VdPWEuZ2V0SVIoKX0pKX0pKTt0aGlzLnR5cGUzTG9hZGVkPWwudGhlbigoKCk9PntvLmNoYXJQcm9jT3BlcmF0b3JMaXN0PWQ7aWYodGhpcy5fYmJveCl7by5pc0NoYXJCQm94PSEwO28uYmJveD10aGlzLl9iYm94fX0pKTtyZXR1cm4gdGhpcy50eXBlM0xvYWRlZH1fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06TmFOO2NvbnN0IGE9ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZS5hcmdzQXJyYXlbMF0uc2xpY2UoMikpLG49YVsyXS1hWzBdLGk9YVszXS1hWzFdLHM9TWF0aC5oeXBvdChuLGkpO2lmKDA9PT1ufHwwPT09aSl7ZS5mbkFycmF5LnNwbGljZSgwLDEpO2UuYXJnc0FycmF5LnNwbGljZSgwLDEpfWVsc2UgaWYoMD09PXR8fE1hdGgucm91bmQocy90KT49MTApe3RoaXMuX2Jib3h8fCh0aGlzLl9iYm94PVsxLzAsMS8wLC0xLzAsLTEvMF0pO3RoaXMuX2Jib3hbMF09TWF0aC5taW4odGhpcy5fYmJveFswXSxhWzBdKTt0aGlzLl9iYm94WzFdPU1hdGgubWluKHRoaXMuX2Jib3hbMV0sYVsxXSk7dGhpcy5fYmJveFsyXT1NYXRoLm1heCh0aGlzLl9iYm94WzJdLGFbMl0pO3RoaXMuX2Jib3hbM109TWF0aC5tYXgodGhpcy5fYmJveFszXSxhWzNdKX1sZXQgbz0wLGM9ZS5sZW5ndGg7Zm9yKDtvPGM7KXtzd2l0Y2goZS5mbkFycmF5W29dKXtjYXNlIHIuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kczpicmVhaztjYXNlIHIuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6Y2FzZSByLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTpjYXNlIHIuT1BTLnNldFN0cm9rZUNvbG9yOmNhc2Ugci5PUFMuc2V0U3Ryb2tlQ29sb3JOOmNhc2Ugci5PUFMuc2V0RmlsbENvbG9yOmNhc2Ugci5PUFMuc2V0RmlsbENvbG9yTjpjYXNlIHIuT1BTLnNldFN0cm9rZUdyYXk6Y2FzZSByLk9QUy5zZXRGaWxsR3JheTpjYXNlIHIuT1BTLnNldFN0cm9rZVJHQkNvbG9yOmNhc2Ugci5PUFMuc2V0RmlsbFJHQkNvbG9yOmNhc2Ugci5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yOmNhc2Ugci5PUFMuc2V0RmlsbENNWUtDb2xvcjpjYXNlIHIuT1BTLnNoYWRpbmdGaWxsOmNhc2Ugci5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OmUuZm5BcnJheS5zcGxpY2UobywxKTtlLmFyZ3NBcnJheS5zcGxpY2UobywxKTtjLS07Y29udGludWU7Y2FzZSByLk9QUy5zZXRHU3RhdGU6Y29uc3RbdF09ZS5hcmdzQXJyYXlbb107bGV0IGE9MCxuPXQubGVuZ3RoO2Zvcig7YTxuOyl7Y29uc3RbZV09dFthXTtzd2l0Y2goZSl7Y2FzZSJUUiI6Y2FzZSJUUjIiOmNhc2UiSFQiOmNhc2UiQkciOmNhc2UiQkcyIjpjYXNlIlVDUiI6Y2FzZSJVQ1IyIjp0LnNwbGljZShhLDEpO24tLTtjb250aW51ZX1hKyt9fW8rK319fWNsYXNzIFN0YXRlTWFuYWdlcntjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuZXcgRXZhbFN0YXRlO3RoaXMuc3RhdGU9ZTt0aGlzLnN0YXRlU3RhY2s9W119c2F2ZSgpe2NvbnN0IGU9dGhpcy5zdGF0ZTt0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKTt0aGlzLnN0YXRlPWUuY2xvbmUoKX1yZXN0b3JlKCl7Y29uc3QgZT10aGlzLnN0YXRlU3RhY2sucG9wKCk7ZSYmKHRoaXMuc3RhdGU9ZSl9dHJhbnNmb3JtKGUpe3RoaXMuc3RhdGUuY3RtPXIuVXRpbC50cmFuc2Zvcm0odGhpcy5zdGF0ZS5jdG0sZSl9fWNsYXNzIFRleHRTdGF0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoci5JREVOVElUWV9NQVRSSVgpO3RoaXMuZm9udE5hbWU9bnVsbDt0aGlzLmZvbnRTaXplPTA7dGhpcy5sb2FkZWROYW1lPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5mb250TWF0cml4PXIuRk9OVF9JREVOVElUWV9NQVRSSVg7dGhpcy50ZXh0TWF0cml4PXIuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7dGhpcy50ZXh0TGluZU1hdHJpeD1yLklERU5USVRZX01BVFJJWC5zbGljZSgpO3RoaXMuY2hhclNwYWNpbmc9MDt0aGlzLndvcmRTcGFjaW5nPTA7dGhpcy5sZWFkaW5nPTA7dGhpcy50ZXh0SFNjYWxlPTE7dGhpcy50ZXh0UmlzZT0wfXNldFRleHRNYXRyaXgoZSx0LGEscixuLGkpe2NvbnN0IHM9dGhpcy50ZXh0TWF0cml4O3NbMF09ZTtzWzFdPXQ7c1syXT1hO3NbM109cjtzWzRdPW47c1s1XT1pfXNldFRleHRMaW5lTWF0cml4KGUsdCxhLHIsbixpKXtjb25zdCBzPXRoaXMudGV4dExpbmVNYXRyaXg7c1swXT1lO3NbMV09dDtzWzJdPWE7c1szXT1yO3NbNF09bjtzWzVdPWl9dHJhbnNsYXRlVGV4dE1hdHJpeChlLHQpe2NvbnN0IGE9dGhpcy50ZXh0TWF0cml4O2FbNF09YVswXSplK2FbMl0qdCthWzRdO2FbNV09YVsxXSplK2FbM10qdCthWzVdfXRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGUsdCl7Y29uc3QgYT10aGlzLnRleHRMaW5lTWF0cml4O2FbNF09YVswXSplK2FbMl0qdCthWzRdO2FbNV09YVsxXSplK2FbM10qdCthWzVdfWNhcnJpYWdlUmV0dXJuKCl7dGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLC10aGlzLmxlYWRpbmcpO3RoaXMudGV4dE1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCl9Y2xvbmUoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUodGhpcyk7ZS50ZXh0TWF0cml4PXRoaXMudGV4dE1hdHJpeC5zbGljZSgpO2UudGV4dExpbmVNYXRyaXg9dGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2UuZm9udE1hdHJpeD10aGlzLmZvbnRNYXRyaXguc2xpY2UoKTtyZXR1cm4gZX19Y2xhc3MgRXZhbFN0YXRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdG09bmV3IEZsb2F0MzJBcnJheShyLklERU5USVRZX01BVFJJWCk7dGhpcy5mb250PW51bGw7dGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1yLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7dGhpcy5maWxsQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O3RoaXMuc3Ryb2tlQ29sb3JTcGFjZT15LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5fWNsb25lKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fWNsYXNzIEV2YWx1YXRvclByZXByb2Nlc3NvcntzdGF0aWMgZ2V0IG9wTWFwKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIm9wTWFwIix7dzp7aWQ6ci5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LEo6e2lkOnIuT1BTLnNldExpbmVDYXAsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sajp7aWQ6ci5PUFMuc2V0TGluZUpvaW4sbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sTTp7aWQ6ci5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxkOntpZDpyLk9QUy5zZXREYXNoLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LHJpOntpZDpyLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0saTp7aWQ6ci5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZ3M6e2lkOnIuT1BTLnNldEdTdGF0ZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxxOntpZDpyLk9QUy5zYXZlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFE6e2lkOnIuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sY206e2lkOnIuT1BTLnRyYW5zZm9ybSxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxtOntpZDpyLk9QUy5tb3ZlVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sbDp7aWQ6ci5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGM6e2lkOnIuT1BTLmN1cnZlVG8sbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sdjp7aWQ6ci5PUFMuY3VydmVUbzIsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0seTp7aWQ6ci5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0saDp7aWQ6ci5PUFMuY2xvc2VQYXRoLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LHJlOntpZDpyLk9QUy5yZWN0YW5nbGUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sUzp7aWQ6ci5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LHM6e2lkOnIuT1BTLmNsb3NlU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGY6e2lkOnIuT1BTLmZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sRjp7aWQ6ci5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSwiZioiOntpZDpyLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQjp7aWQ6ci5PUFMuZmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSwiQioiOntpZDpyLk9QUy5lb0ZpbGxTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sYjp7aWQ6ci5PUFMuY2xvc2VGaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJiKiI6e2lkOnIuT1BTLmNsb3NlRU9GaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LG46e2lkOnIuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sVzp7aWQ6ci5PUFMuY2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSwiVyoiOntpZDpyLk9QUy5lb0NsaXAsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQlQ6e2lkOnIuT1BTLmJlZ2luVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxFVDp7aWQ6ci5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxUYzp7aWQ6ci5PUFMuc2V0Q2hhclNwYWNpbmcsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVHc6e2lkOnIuT1BTLnNldFdvcmRTcGFjaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFR6OntpZDpyLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVEw6e2lkOnIuT1BTLnNldExlYWRpbmcsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVGY6e2lkOnIuT1BTLnNldEZvbnQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sVHI6e2lkOnIuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFRzOntpZDpyLk9QUy5zZXRUZXh0UmlzZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUZDp7aWQ6ci5PUFMubW92ZVRleHQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sVEQ6e2lkOnIuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxUbTp7aWQ6ci5PUFMuc2V0VGV4dE1hdHJpeCxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSwiVCoiOntpZDpyLk9QUy5uZXh0TGluZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxUajp7aWQ6ci5PUFMuc2hvd1RleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVEo6e2lkOnIuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LCInIjp7aWQ6ci5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSwnIic6e2lkOnIuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGQwOntpZDpyLk9QUy5zZXRDaGFyV2lkdGgsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZDE6e2lkOnIuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxDUzp7aWQ6ci5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxjczp7aWQ6ci5PUFMuc2V0RmlsbENvbG9yU3BhY2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sU0M6e2lkOnIuT1BTLnNldFN0cm9rZUNvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITB9LFNDTjp7aWQ6ci5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxzYzp7aWQ6ci5PUFMuc2V0RmlsbENvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITB9LHNjbjp7aWQ6ci5PUFMuc2V0RmlsbENvbG9yTixudW1BcmdzOjMzLHZhcmlhYmxlQXJnczohMH0sRzp7aWQ6ci5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxnOntpZDpyLk9QUy5zZXRGaWxsR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxSRzp7aWQ6ci5PUFMuc2V0U3Ryb2tlUkdCQ29sb3IsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX0scmc6e2lkOnIuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxLOntpZDpyLk9QUy5zZXRTdHJva2VDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sazp7aWQ6ci5PUFMuc2V0RmlsbENNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxzaDp7aWQ6ci5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sQkk6e2lkOnIuT1BTLmJlZ2luSW5saW5lSW1hZ2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sSUQ6e2lkOnIuT1BTLmJlZ2luSW1hZ2VEYXRhLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEVJOntpZDpyLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxEbzp7aWQ6ci5PUFMucGFpbnRYT2JqZWN0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LE1QOntpZDpyLk9QUy5tYXJrUG9pbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sRFA6e2lkOnIuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LEJNQzp7aWQ6ci5PUFMuYmVnaW5NYXJrZWRDb250ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LEJEQzp7aWQ6ci5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sRU1DOntpZDpyLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEJYOntpZDpyLk9QUy5iZWdpbkNvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxFWDp7aWQ6ci5PUFMuZW5kQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEJNOm51bGwsQkQ6bnVsbCx0cnVlOm51bGwsZmE6bnVsbCxmYWw6bnVsbCxmYWxzOm51bGwsZmFsc2U6bnVsbCxudTpudWxsLG51bDpudWxsLG51bGw6bnVsbH0pfXN0YXRpYyBNQVhfSU5WQUxJRF9QQVRIX09QUz0xMDtjb25zdHJ1Y3RvcihlLHQpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpuZXcgU3RhdGVNYW5hZ2VyO3RoaXMucGFyc2VyPW5ldyBmLlBhcnNlcih7bGV4ZXI6bmV3IGYuTGV4ZXIoZSxFdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXApLHhyZWY6dH0pO3RoaXMuc3RhdGVNYW5hZ2VyPWE7dGhpcy5ub25Qcm9jZXNzZWRBcmdzPVtdO3RoaXMuX2lzUGF0aE9wPSExO3RoaXMuX251bUludmFsaWRQYXRoT1BTPTB9Z2V0IHNhdmVkU3RhdGVzRGVwdGgoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGh9cmVhZChlKXtsZXQgdD1lLmFyZ3M7Zm9yKDs7KXtjb25zdCBhPXRoaXMucGFyc2VyLmdldE9iaigpO2lmKGEgaW5zdGFuY2VvZiBpLkNtZCl7Y29uc3Qgbj1hLmNtZCxpPUV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcFtuXTtpZighaSl7KDAsci53YXJuKShgVW5rbm93biBjb21tYW5kICIke259Ii5gKTtjb250aW51ZX1jb25zdCBzPWkuaWQsbz1pLm51bUFyZ3M7bGV0IGM9bnVsbCE9PXQ/dC5sZW5ndGg6MDt0aGlzLl9pc1BhdGhPcHx8KHRoaXMuX251bUludmFsaWRQYXRoT1BTPTApO3RoaXMuX2lzUGF0aE9wPXM+PXIuT1BTLm1vdmVUbyYmczw9ci5PUFMuZW5kUGF0aDtpZihpLnZhcmlhYmxlQXJncyljPm8mJigwLHIuaW5mbykoYENvbW1hbmQgJHtufTogZXhwZWN0ZWQgWzAsICR7b31dIGFyZ3MsIGJ1dCByZWNlaXZlZCAke2N9IGFyZ3MuYCk7ZWxzZXtpZihjIT09byl7Y29uc3QgZT10aGlzLm5vblByb2Nlc3NlZEFyZ3M7Zm9yKDtjPm87KXtlLnB1c2godC5zaGlmdCgpKTtjLS19Zm9yKDtjPG8mJjAhPT1lLmxlbmd0aDspe251bGw9PT10JiYodD1bXSk7dC51bnNoaWZ0KGUucG9wKCkpO2MrK319aWYoYzxvKXtjb25zdCBlPWBjb21tYW5kICR7bn06IGV4cGVjdGVkICR7b30gYXJncywgYnV0IHJlY2VpdmVkICR7Y30gYXJncy5gO2lmKHRoaXMuX2lzUGF0aE9wJiYrK3RoaXMuX251bUludmFsaWRQYXRoT1BTPkV2YWx1YXRvclByZXByb2Nlc3Nvci5NQVhfSU5WQUxJRF9QQVRIX09QUyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCAke2V9YCk7KDAsci53YXJuKShgU2tpcHBpbmcgJHtlfWApO251bGwhPT10JiYodC5sZW5ndGg9MCk7Y29udGludWV9fXRoaXMucHJlcHJvY2Vzc0NvbW1hbmQocyx0KTtlLmZuPXM7ZS5hcmdzPXQ7cmV0dXJuITB9aWYoYT09PWkuRU9GKXJldHVybiExO2lmKG51bGwhPT1hKXtudWxsPT09dCYmKHQ9W10pO3QucHVzaChhKTtpZih0Lmxlbmd0aD4zMyl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX1wcmVwcm9jZXNzQ29tbWFuZChlLHQpe3N3aXRjaCgwfGUpe2Nhc2Ugci5PUFMuc2F2ZTp0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7YnJlYWs7Y2FzZSByLk9QUy5yZXN0b3JlOnRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTticmVhaztjYXNlIHIuT1BTLnRyYW5zZm9ybTp0aGlzLnN0YXRlTWFuYWdlci50cmFuc2Zvcm0odCl9fX10LkV2YWx1YXRvclByZXByb2Nlc3Nvcj1FdmFsdWF0b3JQcmVwcm9jZXNzb3J9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5JZGVudGl0eUNNYXA9dC5DTWFwRmFjdG9yeT10LkNNYXA9dm9pZCAwO2EoMTQwKTthKDIpO3ZhciByPWEoMTQ1KSxuPWEoMTUxKSxpPWEoMTUyKSxzPWEoMTY2KSxvPWEoMTY3KSxjPWEoMTUwKSxsPWEoMTU1KTtjb25zdCBoPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sdT0yKioyNC0xO2NsYXNzIENNYXB7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMuY29kZXNwYWNlUmFuZ2VzPVtbXSxbXSxbXSxbXV07dGhpcy5udW1Db2Rlc3BhY2VSYW5nZXM9MDt0aGlzLl9tYXA9W107dGhpcy5uYW1lPSIiO3RoaXMudmVydGljYWw9ITE7dGhpcy51c2VDTWFwPW51bGw7dGhpcy5idWlsdEluQ01hcD1lfWFkZENvZGVzcGFjZVJhbmdlKGUsdCxhKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxhKTt0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfW1hcENpZFJhbmdlKGUsdCxhKXtpZih0LWU+dSl0aHJvdyBuZXcgRXJyb3IoIm1hcENpZFJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2Zvcig7ZTw9dDspdGhpcy5fbWFwW2UrK109YSsrfW1hcEJmUmFuZ2UoZSx0LGEpe2lmKHQtZT51KXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtjb25zdCByPWEubGVuZ3RoLTE7Zm9yKDtlPD10Oyl7dGhpcy5fbWFwW2UrK109YTtjb25zdCB0PWEuY2hhckNvZGVBdChyKSsxO3Q+MjU1P2E9YS5zdWJzdHJpbmcoMCxyLTEpK1N0cmluZy5mcm9tQ2hhckNvZGUoYS5jaGFyQ29kZUF0KHItMSkrMSkrIlwwIjphPWEuc3Vic3RyaW5nKDAscikrU3RyaW5nLmZyb21DaGFyQ29kZSh0KX19bWFwQmZSYW5nZVRvQXJyYXkoZSx0LGEpe2lmKHQtZT51KXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZVRvQXJyYXkgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Y29uc3Qgcj1hLmxlbmd0aDtsZXQgbj0wO2Zvcig7ZTw9dCYmbjxyOyl7dGhpcy5fbWFwW2VdPWFbbisrXTsrK2V9fW1hcE9uZShlLHQpe3RoaXMuX21hcFtlXT10fWxvb2t1cChlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWNvbnRhaW5zKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19Zm9yRWFjaChlKXtjb25zdCB0PXRoaXMuX21hcCxhPXQubGVuZ3RoO2lmKGE8PTY1NTM2KWZvcihsZXQgcj0wO3I8YTtyKyspdm9pZCAwIT09dFtyXSYmZShyLHRbcl0pO2Vsc2UgZm9yKGNvbnN0IGEgaW4gdCllKGEsdFthXSl9Y2hhckNvZGVPZihlKXtjb25zdCB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IoY29uc3QgYSBpbiB0KWlmKHRbYV09PT1lKXJldHVybiAwfGE7cmV0dXJuLTF9Z2V0TWFwKCl7cmV0dXJuIHRoaXMuX21hcH1yZWFkQ2hhckNvZGUoZSx0LGEpe2xldCByPTA7Y29uc3Qgbj10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGk9MCxzPW4ubGVuZ3RoO2k8cztpKyspe3I9KHI8PDh8ZS5jaGFyQ29kZUF0KHQraSkpPj4+MDtjb25zdCBzPW5baV07Zm9yKGxldCBlPTAsdD1zLmxlbmd0aDtlPHQ7KXtjb25zdCB0PXNbZSsrXSxuPXNbZSsrXTtpZihyPj10JiZyPD1uKXthLmNoYXJjb2RlPXI7YS5sZW5ndGg9aSsxO3JldHVybn19fWEuY2hhcmNvZGU9MDthLmxlbmd0aD0xfWdldENoYXJDb2RlTGVuZ3RoKGUpe2NvbnN0IHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCBhPTAscj10Lmxlbmd0aDthPHI7YSsrKXtjb25zdCByPXRbYV07Zm9yKGxldCB0PTAsbj1yLmxlbmd0aDt0PG47KXtjb25zdCBuPXJbdCsrXSxpPXJbdCsrXTtpZihlPj1uJiZlPD1pKXJldHVybiBhKzF9fXJldHVybiAxfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH1nZXQgaXNJZGVudGl0eUNNYXAoKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19dC5DTWFwPUNNYXA7Y2xhc3MgSWRlbnRpdHlDTWFwIGV4dGVuZHMgQ01hcHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCk7dGhpcy52ZXJ0aWNhbD1lO3RoaXMuYWRkQ29kZXNwYWNlUmFuZ2UodCwwLDY1NTM1KX1tYXBDaWRSYW5nZShlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBDaWRSYW5nZSIpfW1hcEJmUmFuZ2UoZSx0LGEpeygwLHIudW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZSIpfW1hcEJmUmFuZ2VUb0FycmF5KGUsdCxhKXsoMCxyLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VUb0FycmF5Iil9bWFwT25lKGUsdCl7KDAsci51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBDaWRPbmUiKX1sb29rdXAoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6dm9pZCAwfWNvbnRhaW5zKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNX1mb3JFYWNoKGUpe2ZvcihsZXQgdD0wO3Q8PTY1NTM1O3QrKyllKHQsdCl9Y2hhckNvZGVPZihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTotMX1nZXRNYXAoKXtjb25zdCBlPW5ldyBBcnJheSg2NTUzNik7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWVbdF09dDtyZXR1cm4gZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIDY1NTM2fWdldCBpc0lkZW50aXR5Q01hcCgpeygwLHIudW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGFjY2VzcyAuaXNJZGVudGl0eUNNYXAiKX19dC5JZGVudGl0eUNNYXA9SWRlbnRpdHlDTWFwO2Z1bmN0aW9uIHN0clRvSW50KGUpe2xldCB0PTA7Zm9yKGxldCBhPTA7YTxlLmxlbmd0aDthKyspdD10PDw4fGUuY2hhckNvZGVBdChhKTtyZXR1cm4gdD4+PjB9ZnVuY3Rpb24gZXhwZWN0U3RyaW5nKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBleHBlY3RJbnQoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gcGFyc2VCZkNoYXIoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PW4uRU9GKWJyZWFrO2lmKCgwLG4uaXNDbWQpKGEsImVuZGJmY2hhciIpKXJldHVybjtleHBlY3RTdHJpbmcoYSk7Y29uc3Qgcj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IGk9YTtlLm1hcE9uZShyLGkpfX1mdW5jdGlvbiBwYXJzZUJmUmFuZ2UoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PW4uRU9GKWJyZWFrO2lmKCgwLG4uaXNDbWQpKGEsImVuZGJmcmFuZ2UiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IHI9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdFN0cmluZyhhKTtjb25zdCBpPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGEpfHwic3RyaW5nIj09dHlwZW9mIGEpe2NvbnN0IHQ9TnVtYmVyLmlzSW50ZWdlcihhKT9TdHJpbmcuZnJvbUNoYXJDb2RlKGEpOmE7ZS5tYXBCZlJhbmdlKHIsaSx0KX1lbHNle2lmKCEoMCxuLmlzQ21kKShhLCJbIikpYnJlYWs7e2E9dC5nZXRPYmooKTtjb25zdCBzPVtdO2Zvcig7ISgwLG4uaXNDbWQpKGEsIl0iKSYmYSE9PW4uRU9GOyl7cy5wdXNoKGEpO2E9dC5nZXRPYmooKX1lLm1hcEJmUmFuZ2VUb0FycmF5KHIsaSxzKX19fXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIGJmIHJhbmdlLiIpfWZ1bmN0aW9uIHBhcnNlQ2lkQ2hhcihlLHQpe2Zvcig7Oyl7bGV0IGE9dC5nZXRPYmooKTtpZihhPT09bi5FT0YpYnJlYWs7aWYoKDAsbi5pc0NtZCkoYSwiZW5kY2lkY2hhciIpKXJldHVybjtleHBlY3RTdHJpbmcoYSk7Y29uc3Qgcj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0SW50KGEpO2NvbnN0IGk9YTtlLm1hcE9uZShyLGkpfX1mdW5jdGlvbiBwYXJzZUNpZFJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZigoMCxuLmlzQ21kKShhLCJlbmRjaWRyYW5nZSIpKXJldHVybjtleHBlY3RTdHJpbmcoYSk7Y29uc3Qgcj1zdHJUb0ludChhKTthPXQuZ2V0T2JqKCk7ZXhwZWN0U3RyaW5nKGEpO2NvbnN0IGk9c3RyVG9JbnQoYSk7YT10LmdldE9iaigpO2V4cGVjdEludChhKTtjb25zdCBzPWE7ZS5tYXBDaWRSYW5nZShyLGkscyl9fWZ1bmN0aW9uIHBhcnNlQ29kZXNwYWNlUmFuZ2UoZSx0KXtmb3IoOzspe2xldCBhPXQuZ2V0T2JqKCk7aWYoYT09PW4uRU9GKWJyZWFrO2lmKCgwLG4uaXNDbWQpKGEsImVuZGNvZGVzcGFjZXJhbmdlIikpcmV0dXJuO2lmKCJzdHJpbmciIT10eXBlb2YgYSlicmVhaztjb25zdCByPXN0clRvSW50KGEpO2E9dC5nZXRPYmooKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpYnJlYWs7Y29uc3QgaT1zdHJUb0ludChhKTtlLmFkZENvZGVzcGFjZVJhbmdlKGEubGVuZ3RoLHIsaSl9dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHBhcnNlV01vZGUoZSx0KXtjb25zdCBhPXQuZ2V0T2JqKCk7TnVtYmVyLmlzSW50ZWdlcihhKSYmKGUudmVydGljYWw9ISFhKX1mdW5jdGlvbiBwYXJzZUNNYXBOYW1lKGUsdCl7Y29uc3QgYT10LmdldE9iaigpO2EgaW5zdGFuY2VvZiBuLk5hbWUmJihlLm5hbWU9YS5uYW1lKX1hc3luYyBmdW5jdGlvbiBwYXJzZUNNYXAoZSx0LGEsaSl7bGV0IHMsbztlOmZvcig7Oyl0cnl7Y29uc3QgYT10LmdldE9iaigpO2lmKGE9PT1uLkVPRilicmVhaztpZihhIGluc3RhbmNlb2Ygbi5OYW1lKXsiV01vZGUiPT09YS5uYW1lP3BhcnNlV01vZGUoZSx0KToiQ01hcE5hbWUiPT09YS5uYW1lJiZwYXJzZUNNYXBOYW1lKGUsdCk7cz1hfWVsc2UgaWYoYSBpbnN0YW5jZW9mIG4uQ21kKXN3aXRjaChhLmNtZCl7Y2FzZSJlbmRjbWFwIjpicmVhayBlO2Nhc2UidXNlY21hcCI6cyBpbnN0YW5jZW9mIG4uTmFtZSYmKG89cy5uYW1lKTticmVhaztjYXNlImJlZ2luY29kZXNwYWNlcmFuZ2UiOnBhcnNlQ29kZXNwYWNlUmFuZ2UoZSx0KTticmVhaztjYXNlImJlZ2luYmZjaGFyIjpwYXJzZUJmQ2hhcihlLHQpO2JyZWFrO2Nhc2UiYmVnaW5jaWRjaGFyIjpwYXJzZUNpZENoYXIoZSx0KTticmVhaztjYXNlImJlZ2luYmZyYW5nZSI6cGFyc2VCZlJhbmdlKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmNpZHJhbmdlIjpwYXJzZUNpZFJhbmdlKGUsdCl9fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBjLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZSk7Y29udGludWV9IWkmJm8mJihpPW8pO3JldHVybiBpP2V4dGVuZENNYXAoZSxhLGkpOmV9YXN5bmMgZnVuY3Rpb24gZXh0ZW5kQ01hcChlLHQsYSl7ZS51c2VDTWFwPWF3YWl0IGNyZWF0ZUJ1aWx0SW5DTWFwKGEsdCk7aWYoMD09PWUubnVtQ29kZXNwYWNlUmFuZ2VzKXtjb25zdCB0PWUudXNlQ01hcC5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCBhPTA7YTx0Lmxlbmd0aDthKyspZS5jb2Rlc3BhY2VSYW5nZXNbYV09dFthXS5zbGljZSgpO2UubnVtQ29kZXNwYWNlUmFuZ2VzPWUudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9ZS51c2VDTWFwLmZvckVhY2goKGZ1bmN0aW9uKHQsYSl7ZS5jb250YWlucyh0KXx8ZS5tYXBPbmUodCxlLnVzZUNNYXAubG9va3VwKHQpKX0pKTtyZXR1cm4gZX1hc3luYyBmdW5jdGlvbiBjcmVhdGVCdWlsdEluQ01hcChlLHQpe2lmKCJJZGVudGl0eS1IIj09PWUpcmV0dXJuIG5ldyBJZGVudGl0eUNNYXAoITEsMik7aWYoIklkZW50aXR5LVYiPT09ZSlyZXR1cm4gbmV3IElkZW50aXR5Q01hcCghMCwyKTtpZighaC5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiK2UpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiQnVpbHQtaW4gQ01hcCBwYXJhbWV0ZXJzIGFyZSBub3QgcHJvdmlkZWQuIik7Y29uc3R7Y01hcERhdGE6YSxjb21wcmVzc2lvblR5cGU6bn09YXdhaXQgdChlKSxpPW5ldyBDTWFwKCEwKTtpZihuPT09ci5DTWFwQ29tcHJlc3Npb25UeXBlLkJJTkFSWSlyZXR1cm4obmV3IHMuQmluYXJ5Q01hcFJlYWRlcikucHJvY2VzcyhhLGksKGU9PmV4dGVuZENNYXAoaSx0LGUpKSk7aWYobj09PXIuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FKXtjb25zdCBlPW5ldyBvLkxleGVyKG5ldyBsLlN0cmVhbShhKSk7cmV0dXJuIHBhcnNlQ01hcChpLGUsdCxudWxsKX10aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgQ01hcCAiY29tcHJlc3Npb25UeXBlIiB2YWx1ZTogJHtufWApfXQuQ01hcEZhY3Rvcnk9Y2xhc3MgQ01hcEZhY3Rvcnl7c3RhdGljIGFzeW5jIGNyZWF0ZShlKXtsZXR7ZW5jb2Rpbmc6dCxmZXRjaEJ1aWx0SW5DTWFwOmEsdXNlQ01hcDpyfT1lO2lmKHQgaW5zdGFuY2VvZiBuLk5hbWUpcmV0dXJuIGNyZWF0ZUJ1aWx0SW5DTWFwKHQubmFtZSxhKTtpZih0IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtKXtjb25zdCBlPWF3YWl0IHBhcnNlQ01hcChuZXcgQ01hcCxuZXcgby5MZXhlcih0KSxhLHIpO3JldHVybiBlLmlzSWRlbnRpdHlDTWFwP2NyZWF0ZUJ1aWx0SW5DTWFwKGUubmFtZSxhKTplfXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkJpbmFyeUNNYXBSZWFkZXI9dm9pZCAwO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDIpO3ZhciByPWEoMTQ1KTtmdW5jdGlvbiBoZXhUb0ludChlLHQpe2xldCBhPTA7Zm9yKGxldCByPTA7cjw9dDtyKyspYT1hPDw4fGVbcl07cmV0dXJuIGE+Pj4wfWZ1bmN0aW9uIGhleFRvU3RyKGUsdCl7cmV0dXJuIDE9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdKTozPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSxlWzJdLGVbM10pOlN0cmluZy5mcm9tQ2hhckNvZGUoLi4uZS5zdWJhcnJheSgwLHQrMSkpfWZ1bmN0aW9uIGFkZEhleChlLHQsYSl7bGV0IHI9MDtmb3IobGV0IG49YTtuPj0wO24tLSl7cis9ZVtuXSt0W25dO2Vbbl09MjU1JnI7cj4+PTh9fWZ1bmN0aW9uIGluY0hleChlLHQpe2xldCBhPTE7Zm9yKGxldCByPXQ7cj49MCYmYT4wO3ItLSl7YSs9ZVtyXTtlW3JdPTI1NSZhO2E+Pj04fX1jb25zdCBuPTE2O2NsYXNzIEJpbmFyeUNNYXBTdHJlYW17Y29uc3RydWN0b3IoZSl7dGhpcy5idWZmZXI9ZTt0aGlzLnBvcz0wO3RoaXMuZW5kPWUubGVuZ3RoO3RoaXMudG1wQnVmPW5ldyBVaW50OEFycmF5KDE5KX1yZWFkQnl0ZSgpe3JldHVybiB0aGlzLnBvcz49dGhpcy5lbmQ/LTE6dGhpcy5idWZmZXJbdGhpcy5wb3MrK119cmVhZE51bWJlcigpe2xldCBlLHQ9MDtkb3tjb25zdCBhPXRoaXMucmVhZEJ5dGUoKTtpZihhPDApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZhKTt0PXQ8PDd8MTI3JmF9d2hpbGUoIWUpO3JldHVybiB0fXJlYWRTaWduZWQoKXtjb25zdCBlPXRoaXMucmVhZE51bWJlcigpO3JldHVybiAxJmU/fihlPj4+MSk6ZT4+PjF9cmVhZEhleChlLHQpe2Uuc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zLHRoaXMucG9zK3QrMSkpO3RoaXMucG9zKz10KzF9cmVhZEhleE51bWJlcihlLHQpe2xldCBhO2NvbnN0IG49dGhpcy50bXBCdWY7bGV0IGk9MDtkb3tjb25zdCBlPXRoaXMucmVhZEJ5dGUoKTtpZihlPDApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7YT0hKDEyOCZlKTtuW2krK109MTI3JmV9d2hpbGUoIWEpO2xldCBzPXQsbz0wLGM9MDtmb3IoO3M+PTA7KXtmb3IoO2M8OCYmbi5sZW5ndGg+MDspe298PW5bLS1pXTw8YztjKz03fWVbc109MjU1Jm87cy0tO28+Pj04O2MtPTh9fXJlYWRIZXhTaWduZWQoZSx0KXt0aGlzLnJlYWRIZXhOdW1iZXIoZSx0KTtjb25zdCBhPTEmZVt0XT8yNTU6MDtsZXQgcj0wO2ZvcihsZXQgbj0wO248PXQ7bisrKXtyPSgxJnIpPDw4fGVbbl07ZVtuXT1yPj4xXmF9fXJlYWRTdHJpbmcoKXtjb25zdCBlPXRoaXMucmVhZE51bWJlcigpLHQ9bmV3IEFycmF5KGUpO2ZvcihsZXQgYT0wO2E8ZTthKyspdFthXT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSguLi50KX19dC5CaW5hcnlDTWFwUmVhZGVyPWNsYXNzIEJpbmFyeUNNYXBSZWFkZXJ7YXN5bmMgcHJvY2VzcyhlLHQsYSl7Y29uc3Qgcj1uZXcgQmluYXJ5Q01hcFN0cmVhbShlKSxpPXIucmVhZEJ5dGUoKTt0LnZlcnRpY2FsPSEhKDEmaSk7bGV0IHM9bnVsbDtjb25zdCBvPW5ldyBVaW50OEFycmF5KG4pLGM9bmV3IFVpbnQ4QXJyYXkobiksbD1uZXcgVWludDhBcnJheShuKSxoPW5ldyBVaW50OEFycmF5KG4pLHU9bmV3IFVpbnQ4QXJyYXkobik7bGV0IGQsZjtmb3IoOyhmPXIucmVhZEJ5dGUoKSk+PTA7KXtjb25zdCBlPWY+PjU7aWYoNz09PWUpe3N3aXRjaCgzMSZmKXtjYXNlIDA6ci5yZWFkU3RyaW5nKCk7YnJlYWs7Y2FzZSAxOnM9ci5yZWFkU3RyaW5nKCl9Y29udGludWV9Y29uc3QgYT0hISgxNiZmKSxpPTE1JmY7aWYoaSsxPm4pdGhyb3cgbmV3IEVycm9yKCJCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3M6IEludmFsaWQgZGF0YVNpemUuIik7Y29uc3QgZz0xLHA9ci5yZWFkTnVtYmVyKCk7c3dpdGNoKGUpe2Nhc2UgMDpyLnJlYWRIZXgobyxpKTtyLnJlYWRIZXhOdW1iZXIoYyxpKTthZGRIZXgoYyxvLGkpO3QuYWRkQ29kZXNwYWNlUmFuZ2UoaSsxLGhleFRvSW50KG8saSksaGV4VG9JbnQoYyxpKSk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGMsaSk7ci5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8sYyxpKTtyLnJlYWRIZXhOdW1iZXIoYyxpKTthZGRIZXgoYyxvLGkpO3QuYWRkQ29kZXNwYWNlUmFuZ2UoaSsxLGhleFRvSW50KG8saSksaGV4VG9JbnQoYyxpKSl9YnJlYWs7Y2FzZSAxOnIucmVhZEhleChvLGkpO3IucmVhZEhleE51bWJlcihjLGkpO2FkZEhleChjLG8saSk7ci5yZWFkTnVtYmVyKCk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGMsaSk7ci5yZWFkSGV4TnVtYmVyKG8saSk7YWRkSGV4KG8sYyxpKTtyLnJlYWRIZXhOdW1iZXIoYyxpKTthZGRIZXgoYyxvLGkpO3IucmVhZE51bWJlcigpfWJyZWFrO2Nhc2UgMjpyLnJlYWRIZXgobCxpKTtkPXIucmVhZE51bWJlcigpO3QubWFwT25lKGhleFRvSW50KGwsaSksZCk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGwsaSk7aWYoIWEpe3IucmVhZEhleE51bWJlcih1LGkpO2FkZEhleChsLHUsaSl9ZD1yLnJlYWRTaWduZWQoKSsoZCsxKTt0Lm1hcE9uZShoZXhUb0ludChsLGkpLGQpfWJyZWFrO2Nhc2UgMzpyLnJlYWRIZXgobyxpKTtyLnJlYWRIZXhOdW1iZXIoYyxpKTthZGRIZXgoYyxvLGkpO2Q9ci5yZWFkTnVtYmVyKCk7dC5tYXBDaWRSYW5nZShoZXhUb0ludChvLGkpLGhleFRvSW50KGMsaSksZCk7Zm9yKGxldCBlPTE7ZTxwO2UrKyl7aW5jSGV4KGMsaSk7aWYoYSlvLnNldChjKTtlbHNle3IucmVhZEhleE51bWJlcihvLGkpO2FkZEhleChvLGMsaSl9ci5yZWFkSGV4TnVtYmVyKGMsaSk7YWRkSGV4KGMsbyxpKTtkPXIucmVhZE51bWJlcigpO3QubWFwQ2lkUmFuZ2UoaGV4VG9JbnQobyxpKSxoZXhUb0ludChjLGkpLGQpfWJyZWFrO2Nhc2UgNDpyLnJlYWRIZXgobCxnKTtyLnJlYWRIZXgoaCxpKTt0Lm1hcE9uZShoZXhUb0ludChsLGcpLGhleFRvU3RyKGgsaSkpO2ZvcihsZXQgZT0xO2U8cDtlKyspe2luY0hleChsLGcpO2lmKCFhKXtyLnJlYWRIZXhOdW1iZXIodSxnKTthZGRIZXgobCx1LGcpfWluY0hleChoLGkpO3IucmVhZEhleFNpZ25lZCh1LGkpO2FkZEhleChoLHUsaSk7dC5tYXBPbmUoaGV4VG9JbnQobCxnKSxoZXhUb1N0cihoLGkpKX1icmVhaztjYXNlIDU6ci5yZWFkSGV4KG8sZyk7ci5yZWFkSGV4TnVtYmVyKGMsZyk7YWRkSGV4KGMsbyxnKTtyLnJlYWRIZXgoaCxpKTt0Lm1hcEJmUmFuZ2UoaGV4VG9JbnQobyxnKSxoZXhUb0ludChjLGcpLGhleFRvU3RyKGgsaSkpO2ZvcihsZXQgZT0xO2U8cDtlKyspe2luY0hleChjLGcpO2lmKGEpby5zZXQoYyk7ZWxzZXtyLnJlYWRIZXhOdW1iZXIobyxnKTthZGRIZXgobyxjLGcpfXIucmVhZEhleE51bWJlcihjLGcpO2FkZEhleChjLG8sZyk7ci5yZWFkSGV4KGgsaSk7dC5tYXBCZlJhbmdlKGhleFRvSW50KG8sZyksaGV4VG9JbnQoYyxnKSxoZXhUb1N0cihoLGkpKX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzIC0gdW5rbm93biB0eXBlOiAke2V9YCl9fXJldHVybiBzP2Eocyk6dH19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUGFyc2VyPXQuTGluZWFyaXphdGlvbj10LkxleGVyPXZvaWQgMDthKDE0MCk7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO2EoMik7dmFyIHI9YSgxNDUpLG49YSgxNTEpLGk9YSgxNTApLHM9YSgxNTUpLG89YSgxNjgpLGM9YSgxNzApLGw9YSgxNzEpLGg9YSgxNzMpLHU9YSgxNzQpLGQ9YSgxNzcpLGY9YSgxODApLGc9YSgxODIpLHA9YSgxODMpLG09YSgxODQpO2NsYXNzIFBhcnNlcntjb25zdHJ1Y3RvcihlKXtsZXR7bGV4ZXI6dCx4cmVmOmEsYWxsb3dTdHJlYW1zOnI9ITEscmVjb3ZlcnlNb2RlOm49ITF9PWU7dGhpcy5sZXhlcj10O3RoaXMueHJlZj1hO3RoaXMuYWxsb3dTdHJlYW1zPXI7dGhpcy5yZWNvdmVyeU1vZGU9bjt0aGlzLmltYWdlQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9pbWFnZUlkPTA7dGhpcy5yZWZpbGwoKX1yZWZpbGwoKXt0aGlzLmJ1ZjE9dGhpcy5sZXhlci5nZXRPYmooKTt0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKX1zaGlmdCgpe2lmKHRoaXMuYnVmMiBpbnN0YW5jZW9mIG4uQ21kJiYiSUQiPT09dGhpcy5idWYyLmNtZCl7dGhpcy5idWYxPXRoaXMuYnVmMjt0aGlzLmJ1ZjI9bnVsbH1lbHNle3RoaXMuYnVmMT10aGlzLmJ1ZjI7dGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fXRyeVNoaWZ0KCl7dHJ5e3RoaXMuc2hpZnQoKTtyZXR1cm4hMH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiExfX1nZXRPYmooKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtjb25zdCB0PXRoaXMuYnVmMTt0aGlzLnNoaWZ0KCk7aWYodCBpbnN0YW5jZW9mIG4uQ21kKXN3aXRjaCh0LmNtZCl7Y2FzZSJCSSI6cmV0dXJuIHRoaXMubWFrZUlubGluZUltYWdlKGUpO2Nhc2UiWyI6Y29uc3QgYT1bXTtmb3IoOyEoMCxuLmlzQ21kKSh0aGlzLmJ1ZjEsIl0iKSYmdGhpcy5idWYxIT09bi5FT0Y7KWEucHVzaCh0aGlzLmdldE9iaihlKSk7aWYodGhpcy5idWYxPT09bi5FT0Ype2lmKHRoaXMucmVjb3ZlcnlNb2RlKXJldHVybiBhO3Rocm93IG5ldyBpLlBhcnNlckVPRkV4Y2VwdGlvbigiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LiIpfXRoaXMuc2hpZnQoKTtyZXR1cm4gYTtjYXNlIjw8Ijpjb25zdCBzPW5ldyBuLkRpY3QodGhpcy54cmVmKTtmb3IoOyEoMCxuLmlzQ21kKSh0aGlzLmJ1ZjEsIj4+IikmJnRoaXMuYnVmMSE9PW4uRU9GOyl7aWYoISh0aGlzLmJ1ZjEgaW5zdGFuY2VvZiBuLk5hbWUpKXsoMCxyLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO3RoaXMuc2hpZnQoKTtjb250aW51ZX1jb25zdCB0PXRoaXMuYnVmMS5uYW1lO3RoaXMuc2hpZnQoKTtpZih0aGlzLmJ1ZjE9PT1uLkVPRilicmVhaztzLnNldCh0LHRoaXMuZ2V0T2JqKGUpKX1pZih0aGlzLmJ1ZjE9PT1uLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHM7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1pZigoMCxuLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpKXJldHVybiB0aGlzLmFsbG93U3RyZWFtcz90aGlzLm1ha2VTdHJlYW0ocyxlKTpzO3RoaXMuc2hpZnQoKTtyZXR1cm4gcztkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsbi5pc0NtZCkodGhpcy5idWYyLCJSIikpe2NvbnN0IGU9bi5SZWYuZ2V0KHQsdGhpcy5idWYxKTt0aGlzLnNoaWZ0KCk7dGhpcy5zaGlmdCgpO3JldHVybiBlfXJldHVybiB0fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmZT9lLmRlY3J5cHRTdHJpbmcodCk6dH1maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKXtjb25zdHtrbm93bkNvbW1hbmRzOnR9PXRoaXMubGV4ZXIsYT1lLnBvcztsZXQgbyxjLGw9MDtmb3IoOy0xIT09KG89ZS5nZXRCeXRlKCkpOylpZigwPT09bClsPTY5PT09bz8xOjA7ZWxzZSBpZigxPT09bClsPTczPT09bz8yOjA7ZWxzZSBpZigzMj09PW98fDEwPT09b3x8MTM9PT1vKXtjPWUucG9zO2NvbnN0IGE9ZS5wZWVrQnl0ZXMoMTUpLGk9YS5sZW5ndGg7aWYoMD09PWkpYnJlYWs7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7bz1hW2VdO2lmKCgwIT09b3x8MD09PWFbZSsxXSkmJigxMCE9PW8mJjEzIT09byYmKG88MzJ8fG8+MTI3KSkpe2w9MDticmVha319aWYoMiE9PWwpY29udGludWU7aWYoIXQpeygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC4iKTtjb250aW51ZX1jb25zdCBoPW5ldyBMZXhlcihuZXcgcy5TdHJlYW0oYS5zbGljZSgpKSx0KTtoLl9oZXhTdHJpbmdXYXJuPSgpPT57fTtsZXQgdT0wO2Zvcig7Oyl7Y29uc3QgZT1oLmdldE9iaigpO2lmKGU9PT1uLkVPRil7bD0wO2JyZWFrfWlmKGUgaW5zdGFuY2VvZiBuLkNtZCl7Y29uc3QgYT10W2UuY21kXTtpZighYSl7bD0wO2JyZWFrfWlmKGEudmFyaWFibGVBcmdzP3U8PWEubnVtQXJnczp1PT09YS5udW1BcmdzKWJyZWFrO3U9MH1lbHNlIHUrK31pZigyPT09bClicmVha31lbHNlIGw9MDtpZigtMT09PW8peygwLHIud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTtpZihjKXsoMCxyLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpO2Uuc2tpcCgtKGUucG9zLWMpKX19bGV0IGg9NDtlLnNraXAoLWgpO289ZS5wZWVrQnl0ZSgpO2Uuc2tpcChoKTsoMCxpLmlzV2hpdGVTcGFjZSkobyl8fGgtLTtyZXR1cm4gZS5wb3MtaC1hfWZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgYSxuLGk9ITE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09YSl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzppPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0Om49ZS5nZXRVaW50MTYoKTtuPjI/ZS5za2lwKG4tMik6ZS5za2lwKC0yKX1pZihpKWJyZWFrfWNvbnN0IHM9ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7ZS5za2lwKC1zKTtyZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKX10aGlzLmlubGluZVN0cmVhbVNraXBFSShlKTtyZXR1cm4gc31maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBhO2Zvcig7LTEhPT0oYT1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PWEpe2NvbnN0IHQ9ZS5wb3M7YT1lLnBlZWtCeXRlKCk7Zm9yKDsoMCxpLmlzV2hpdGVTcGFjZSkoYSk7KXtlLnNraXAoKTthPWUucGVla0J5dGUoKX1pZig2Mj09PWEpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IG49ZS5wb3MtdDtpZigtMT09PWEpeygwLHIud2FybikoIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59ZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGE7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKSYmNjIhPT1hOyk7Y29uc3Qgbj1lLnBvcy10O2lmKC0xPT09YSl7KDAsci53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtbik7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIG59aW5saW5lU3RyZWFtU2tpcEVJKGUpe2xldCB0LGE9MDtmb3IoOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09YSlhPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09YSlhPTczPT09dD8yOjA7ZWxzZSBpZigyPT09YSlicmVha31tYWtlSW5saW5lSW1hZ2UoZSl7Y29uc3QgdD10aGlzLmxleGVyLGE9dC5zdHJlYW0saT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBzO2Zvcig7ISgwLG4uaXNDbWQpKHRoaXMuYnVmMSwiSUQiKSYmdGhpcy5idWYxIT09bi5FT0Y7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIG4uTmFtZSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkRpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO2NvbnN0IHQ9dGhpcy5idWYxLm5hbWU7dGhpcy5zaGlmdCgpO2lmKHRoaXMuYnVmMT09PW4uRU9GKWJyZWFrO2lbdF09dGhpcy5nZXRPYmooZSl9LTEhPT10LmJlZ2luSW5saW5lSW1hZ2VQb3MmJihzPWEucG9zLXQuYmVnaW5JbmxpbmVJbWFnZVBvcyk7Y29uc3Qgbz10aGlzLnhyZWYuZmV0Y2hJZlJlZihpLkZ8fGkuRmlsdGVyKTtsZXQgYztpZihvIGluc3RhbmNlb2Ygbi5OYW1lKWM9by5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShvKSl7Y29uc3QgZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihvWzBdKTtlIGluc3RhbmNlb2Ygbi5OYW1lJiYoYz1lLm5hbWUpfWNvbnN0IGw9YS5wb3M7bGV0IGgsdTtzd2l0Y2goYyl7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpoPXRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChhKTticmVhaztjYXNlIkE4NSI6Y2FzZSJBU0NJSTg1RGVjb2RlIjpoPXRoaXMuZmluZEFTQ0lJODVEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7Y2FzZSJBSHgiOmNhc2UiQVNDSUlIZXhEZWNvZGUiOmg9dGhpcy5maW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoYSk7YnJlYWs7ZGVmYXVsdDpoPXRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoYSl9aWYoaDwxZTMmJnM+MCl7Y29uc3QgZT1hLnBvczthLnBvcz10LmJlZ2luSW5saW5lSW1hZ2VQb3M7dT1mdW5jdGlvbiBnZXRJbmxpbmVJbWFnZUNhY2hlS2V5KGUpe2NvbnN0IHQ9W10sYT1lLmxlbmd0aDtsZXQgcj0wO2Zvcig7cjxhLTE7KXQucHVzaChlW3IrK108PDh8ZVtyKytdKTtyPGEmJnQucHVzaChlW3JdKTtyZXR1cm4gYSsiXyIrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpfShhLmdldEJ5dGVzKHMraCkpO2EucG9zPWU7Y29uc3Qgcj10aGlzLmltYWdlQ2FjaGVbdV07aWYodm9pZCAwIT09cil7dGhpcy5idWYyPW4uQ21kLmdldCgiRUkiKTt0aGlzLnNoaWZ0KCk7ci5yZXNldCgpO3JldHVybiByfX1jb25zdCBkPW5ldyBuLkRpY3QodGhpcy54cmVmKTtmb3IoY29uc3QgZSBpbiBpKWQuc2V0KGUsaVtlXSk7bGV0IGY9YS5tYWtlU3ViU3RyZWFtKGwsaCxkKTtlJiYoZj1lLmNyZWF0ZVN0cmVhbShmLGgpKTtmPXRoaXMuZmlsdGVyKGYsZCxoKTtmLmRpY3Q9ZDtpZih2b2lkIDAhPT11KXtmLmNhY2hlS2V5PSJpbmxpbmVfaW1nXyIrICsrdGhpcy5faW1hZ2VJZDt0aGlzLmltYWdlQ2FjaGVbdV09Zn10aGlzLmJ1ZjI9bi5DbWQuZ2V0KCJFSSIpO3RoaXMuc2hpZnQoKTtyZXR1cm4gZn1fZmluZFN0cmVhbUxlbmd0aChlLHQpe2NvbnN0e3N0cmVhbTphfT10aGlzLmxleGVyO2EucG9zPWU7Y29uc3Qgcj10Lmxlbmd0aDtmb3IoO2EucG9zPGEuZW5kOyl7Y29uc3Qgbj1hLnBlZWtCeXRlcygyMDQ4KSxpPW4ubGVuZ3RoLXI7aWYoaTw9MClicmVhaztsZXQgcz0wO2Zvcig7czxpOyl7bGV0IGk9MDtmb3IoO2k8ciYmbltzK2ldPT09dFtpXTspaSsrO2lmKGk+PXIpe2EucG9zKz1zO3JldHVybiBhLnBvcy1lfXMrK31hLnBvcys9aX1yZXR1cm4tMX1tYWtlU3RyZWFtKGUsdCl7Y29uc3QgYT10aGlzLmxleGVyO2xldCBzPWEuc3RyZWFtO2Euc2tpcFRvTmV4dExpbmUoKTtjb25zdCBvPXMucG9zLTE7bGV0IGM9ZS5nZXQoIkxlbmd0aCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXsoMCxyLmluZm8pKGBCYWQgbGVuZ3RoICIke2MmJmMudG9TdHJpbmcoKX0iIGluIHN0cmVhbS5gKTtjPTB9cy5wb3M9bytjO2EubmV4dENoYXIoKTtpZih0aGlzLnRyeVNoaWZ0KCkmJigwLG4uaXNDbWQpKHRoaXMuYnVmMiwiZW5kc3RyZWFtIikpdGhpcy5zaGlmdCgpO2Vsc2V7Y29uc3QgZT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pO2xldCB0PXRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgobyxlKTtpZih0PDApe2NvbnN0IGE9MTtmb3IobGV0IG49MTtuPD1hO24rKyl7Y29uc3QgYT1lLmxlbmd0aC1uLGM9ZS5zbGljZSgwLGEpLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGMpO2lmKGw+PTApe2NvbnN0IGU9cy5wZWVrQnl0ZXMoYSsxKVthXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGUpKWJyZWFrOygwLHIuaW5mbykoYEZvdW5kICIkeygwLHIuYnl0ZXNUb1N0cmluZykoYyl9IiB3aGVuIHNlYXJjaGluZyBmb3IgZW5kc3RyZWFtIGNvbW1hbmQuYCk7dD1sO2JyZWFrfX1pZih0PDApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz10O2EubmV4dENoYXIoKTt0aGlzLnNoaWZ0KCk7dGhpcy5zaGlmdCgpfXRoaXMuc2hpZnQoKTtzPXMubWFrZVN1YlN0cmVhbShvLGMsZSk7dCYmKHM9dC5jcmVhdGVTdHJlYW0ocyxjKSk7cz10aGlzLmZpbHRlcihzLGUsYyk7cy5kaWN0PWU7cmV0dXJuIHN9ZmlsdGVyKGUsdCxhKXtsZXQgaT10LmdldCgiRiIsIkZpbHRlciIpLHM9dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2Ygbi5OYW1lKXtBcnJheS5pc0FycmF5KHMpJiYoMCxyLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKTtyZXR1cm4gdGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLGEscyl9bGV0IG89YTtpZihBcnJheS5pc0FycmF5KGkpKXtjb25zdCB0PWksYT1zO2ZvcihsZXQgYz0wLGw9dC5sZW5ndGg7YzxsOysrYyl7aT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2NdKTtpZighKGkgaW5zdGFuY2VvZiBuLk5hbWUpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBCYWQgZmlsdGVyIG5hbWUgIiR7aX0iYCk7cz1udWxsO0FycmF5LmlzQXJyYXkoYSkmJmMgaW4gYSYmKHM9dGhpcy54cmVmLmZldGNoSWZSZWYoYVtjXSkpO2U9dGhpcy5tYWtlRmlsdGVyKGUsaS5uYW1lLG8scyk7bz1udWxsfX1yZXR1cm4gZX1tYWtlRmlsdGVyKGUsdCxhLG4pe2lmKDA9PT1hKXsoMCxyLndhcm4pKGBFbXB0eSAiJHt0fSIgc3RyZWFtLmApO3JldHVybiBuZXcgcy5OdWxsU3RyZWFtfXRyeXtzd2l0Y2godCl7Y2FzZSJGbCI6Y2FzZSJGbGF0ZURlY29kZSI6cmV0dXJuIG4/bmV3IHAuUHJlZGljdG9yU3RyZWFtKG5ldyBoLkZsYXRlU3RyZWFtKGUsYSksYSxuKTpuZXcgaC5GbGF0ZVN0cmVhbShlLGEpO2Nhc2UiTFpXIjpjYXNlIkxaV0RlY29kZSI6bGV0IHQ9MTtpZihuKXtuLmhhcygiRWFybHlDaGFuZ2UiKSYmKHQ9bi5nZXQoIkVhcmx5Q2hhbmdlIikpO3JldHVybiBuZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGcuTFpXU3RyZWFtKGUsYSx0KSxhLG4pfXJldHVybiBuZXcgZy5MWldTdHJlYW0oZSxhLHQpO2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6cmV0dXJuIG5ldyBkLkpwZWdTdHJlYW0oZSxhLG4pO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIG5ldyBmLkpweFN0cmVhbShlLGEsbik7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6cmV0dXJuIG5ldyBvLkFzY2lpODVTdHJlYW0oZSxhKTtjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6cmV0dXJuIG5ldyBjLkFzY2lpSGV4U3RyZWFtKGUsYSk7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiBuZXcgbC5DQ0lUVEZheFN0cmVhbShlLGEsbik7Y2FzZSJSTCI6Y2FzZSJSdW5MZW5ndGhEZWNvZGUiOnJldHVybiBuZXcgbS5SdW5MZW5ndGhTdHJlYW0oZSxhKTtjYXNlIkpCSUcyRGVjb2RlIjpyZXR1cm4gbmV3IHUuSmJpZzJTdHJlYW0oZSxhLG4pfSgwLHIud2FybikoYEZpbHRlciAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYEludmFsaWQgc3RyZWFtOiAiJHtlfSJgKTtyZXR1cm4gbmV3IHMuTnVsbFN0cmVhbX19fXQuUGFyc2VyPVBhcnNlcjtjb25zdCBiPVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiB0b0hleERpZ2l0KGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9Y2xhc3MgTGV4ZXJ7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W107dGhpcy5rbm93bkNvbW1hbmRzPXQ7dGhpcy5faGV4U3RyaW5nTnVtV2Fybj0wO3RoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz0tMX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wZWVrQ2hhcigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfWdldE51bWJlcigpe2xldCBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxhPTAsbj0xO2lmKDQ1PT09ZSl7bj0tMTtlPXRoaXMubmV4dENoYXIoKTs0NT09PWUmJihlPXRoaXMubmV4dENoYXIoKSl9ZWxzZSA0Mz09PWUmJihlPXRoaXMubmV4dENoYXIoKSk7aWYoMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSl7YT0xMDtlPXRoaXMubmV4dENoYXIoKX1pZihlPDQ4fHxlPjU3KXtjb25zdCB0PWBJbnZhbGlkIG51bWJlcjogJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSAoY2hhckNvZGUgJHtlfSlgO2lmKCgwLGkuaXNXaGl0ZVNwYWNlKShlKXx8LTE9PT1lKXsoMCxyLmluZm8pKGBMZXhlci5nZXROdW1iZXIgLSAiJHt0fSIuYCk7cmV0dXJuIDB9dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IodCl9bGV0IHM9ZS00OCxvPTAsYz0xO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MDspaWYoZT49NDgmJmU8PTU3KXtjb25zdCByPWUtNDg7aWYodClvPTEwKm8rcjtlbHNlezAhPT1hJiYoYSo9MTApO3M9MTAqcytyfX1lbHNlIGlmKDQ2PT09ZSl7aWYoMCE9PWEpYnJlYWs7YT0xfWVsc2UgaWYoNDU9PT1lKSgwLHIud2FybikoIkJhZGx5IGZvcm1hdHRlZCBudW1iZXI6IG1pbnVzIHNpZ24gaW4gdGhlIG1pZGRsZSIpO2Vsc2V7aWYoNjkhPT1lJiYxMDEhPT1lKWJyZWFrO2U9dGhpcy5wZWVrQ2hhcigpO2lmKDQzPT09ZXx8NDU9PT1lKXtjPTQ1PT09ZT8tMToxO3RoaXMubmV4dENoYXIoKX1lbHNlIGlmKGU8NDh8fGU+NTcpYnJlYWs7dD0hMH0wIT09YSYmKHMvPWEpO3QmJihzKj0xMCoqKGMqbykpO3JldHVybiBuKnN9Z2V0U3RyaW5nKCl7bGV0IGU9MSx0PSExO2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtsZXQgbj10aGlzLm5leHRDaGFyKCk7Zm9yKDs7KXtsZXQgaT0hMTtzd2l0Y2goMHxuKXtjYXNlLTE6KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpO3Q9ITA7YnJlYWs7Y2FzZSA0MDorK2U7YS5wdXNoKCIoIik7YnJlYWs7Y2FzZSA0MTppZigwPT0tLWUpe3RoaXMubmV4dENoYXIoKTt0PSEwfWVsc2UgYS5wdXNoKCIpIik7YnJlYWs7Y2FzZSA5MjpuPXRoaXMubmV4dENoYXIoKTtzd2l0Y2gobil7Y2FzZS0xOigwLHIud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKTt0PSEwO2JyZWFrO2Nhc2UgMTEwOmEucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDphLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6YS5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6YS5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOmEucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmxldCBlPTE1Jm47bj10aGlzLm5leHRDaGFyKCk7aT0hMDtpZihuPj00OCYmbjw9NTUpe2U9KGU8PDMpKygxNSZuKTtuPXRoaXMubmV4dENoYXIoKTtpZihuPj00OCYmbjw9NTUpe2k9ITE7ZT0oZTw8MykrKDE1Jm4pfX1hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSl9YnJlYWs7ZGVmYXVsdDphLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuKSl9aWYodClicmVhaztpfHwobj10aGlzLm5leHRDaGFyKCkpfXJldHVybiBhLmpvaW4oIiIpfWdldE5hbWUoKXtsZXQgZSx0O2NvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJiFiW2VdOylpZigzNT09PWUpe2U9dGhpcy5uZXh0Q2hhcigpO2lmKGJbZV0peygwLHIud2FybikoIkxleGVyX2dldE5hbWU6IE5VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuIik7YS5wdXNoKCIjIik7YnJlYWt9Y29uc3Qgbj10b0hleERpZ2l0KGUpO2lmKC0xIT09bil7dD1lO2U9dGhpcy5uZXh0Q2hhcigpO2NvbnN0IGk9dG9IZXhEaWdpdChlKTtpZigtMT09PWkpeygwLHIud2FybikoYExleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKX0pIGluIGhleGFkZWNpbWFsIG51bWJlci5gKTthLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO2lmKGJbZV0pYnJlYWs7YS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnRpbnVlfWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG48PDR8aSkpfWVsc2UgYS5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1lbHNlIGEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTthLmxlbmd0aD4xMjcmJigwLHIud2FybikoYE5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJHthLmxlbmd0aH1gKTtyZXR1cm4gbi5OYW1lLmdldChhLmpvaW4oIiIpKX1faGV4U3RyaW5nV2FybihlKXs1IT10aGlzLl9oZXhTdHJpbmdOdW1XYXJuKys/dGhpcy5faGV4U3RyaW5nTnVtV2Fybj41fHwoMCxyLndhcm4pKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtlfWApOigwLHIud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGFkZGl0aW9uYWwgaW52YWxpZCBjaGFyYWN0ZXJzLiIpfWdldEhleFN0cmluZygpe2NvbnN0IGU9dGhpcy5zdHJCdWY7ZS5sZW5ndGg9MDtsZXQgdCxhLG49dGhpcy5jdXJyZW50Q2hhcixpPSEwO3RoaXMuX2hleFN0cmluZ051bVdhcm49MDtmb3IoOzspe2lmKG48MCl7KDAsci53YXJuKSgiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmciKTticmVha31pZig2Mj09PW4pe3RoaXMubmV4dENoYXIoKTticmVha31pZigxIT09YltuXSl7aWYoaSl7dD10b0hleERpZ2l0KG4pO2lmKC0xPT09dCl7dGhpcy5faGV4U3RyaW5nV2FybihuKTtuPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX19ZWxzZXthPXRvSGV4RGlnaXQobik7aWYoLTE9PT1hKXt0aGlzLl9oZXhTdHJpbmdXYXJuKG4pO249dGhpcy5uZXh0Q2hhcigpO2NvbnRpbnVlfWUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQ8PDR8YSkpfWk9IWk7bj10aGlzLm5leHRDaGFyKCl9ZWxzZSBuPXRoaXMubmV4dENoYXIoKX1yZXR1cm4gZS5qb2luKCIiKX1nZXRPYmooKXtsZXQgZT0hMSx0PXRoaXMuY3VycmVudENoYXI7Zm9yKDs7KXtpZih0PDApcmV0dXJuIG4uRU9GO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoMSE9PWJbdF0pYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtjYXNlIDQwOnJldHVybiB0aGlzLmdldFN0cmluZygpO2Nhc2UgNDc6cmV0dXJuIHRoaXMuZ2V0TmFtZSgpO2Nhc2UgOTE6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoIlsiKTtjYXNlIDkzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCJdIik7Y2FzZSA2MDp0PXRoaXMubmV4dENoYXIoKTtpZig2MD09PXQpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KCI8PCIpfXJldHVybiB0aGlzLmdldEhleFN0cmluZygpO2Nhc2UgNjI6dD10aGlzLm5leHRDaGFyKCk7aWYoNjI9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgiPj4iKX1yZXR1cm4gbi5DbWQuZ2V0KCI+Iik7Y2FzZSAxMjM6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBuLkNtZC5nZXQoInsiKTtjYXNlIDEyNTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIG4uQ21kLmdldCgifSIpO2Nhc2UgNDE6dGhpcy5uZXh0Q2hhcigpO3Rocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbGxlZ2FsIGNoYXJhY3RlcjogJHt0fWApfWxldCBhPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7aWYodDwzMnx8dD4xMjcpe2NvbnN0IGU9dGhpcy5wZWVrQ2hhcigpO2lmKGU+PTMyJiZlPD0xMjcpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gbi5DbWQuZ2V0KGEpfX1jb25zdCBpPXRoaXMua25vd25Db21tYW5kcztsZXQgcz12b2lkIDAhPT1pPy5bYV07Zm9yKDsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYhYlt0XTspe2NvbnN0IGU9YStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHMmJnZvaWQgMD09PWlbZV0pYnJlYWs7aWYoMTI4PT09YS5sZW5ndGgpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYENvbW1hbmQgdG9rZW4gdG9vIGxvbmc6ICR7YS5sZW5ndGh9YCk7YT1lO3M9dm9pZCAwIT09aT8uW2FdfWlmKCJ0cnVlIj09PWEpcmV0dXJuITA7aWYoImZhbHNlIj09PWEpcmV0dXJuITE7aWYoIm51bGwiPT09YSlyZXR1cm4gbnVsbDsiQkkiPT09YSYmKHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz10aGlzLnN0cmVhbS5wb3MpO3JldHVybiBuLkNtZC5nZXQoYSl9c2tpcFRvTmV4dExpbmUoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyO2Zvcig7ZT49MDspe2lmKDEzPT09ZSl7ZT10aGlzLm5leHRDaGFyKCk7MTA9PT1lJiZ0aGlzLm5leHRDaGFyKCk7YnJlYWt9aWYoMTA9PT1lKXt0aGlzLm5leHRDaGFyKCk7YnJlYWt9ZT10aGlzLm5leHRDaGFyKCl9fX10LkxleGVyPUxleGVyO3QuTGluZWFyaXphdGlvbj1jbGFzcyBMaW5lYXJpemF0aW9ue3N0YXRpYyBjcmVhdGUoZSl7ZnVuY3Rpb24gZ2V0SW50KGUsdCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCByPWUuZ2V0KHQpO2lmKE51bWJlci5pc0ludGVnZXIocikmJihhP3I+PTA6cj4wKSlyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoYFRoZSAiJHt0fSIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5gKX1jb25zdCB0PW5ldyBQYXJzZXIoe2xleGVyOm5ldyBMZXhlcihlKSx4cmVmOm51bGx9KSxhPXQuZ2V0T2JqKCkscj10LmdldE9iaigpLGk9dC5nZXRPYmooKSxzPXQuZ2V0T2JqKCk7bGV0IG8sYztpZighKE51bWJlci5pc0ludGVnZXIoYSkmJk51bWJlci5pc0ludGVnZXIocikmJigwLG4uaXNDbWQpKGksIm9iaiIpJiZzIGluc3RhbmNlb2Ygbi5EaWN0JiYibnVtYmVyIj09dHlwZW9mKG89cy5nZXQoIkxpbmVhcml6ZWQiKSkmJm8+MCkpcmV0dXJuIG51bGw7aWYoKGM9Z2V0SW50KHMsIkwiKSkhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiTCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lcyBub3QgZXF1YWwgdGhlIHN0cmVhbSBsZW5ndGguJyk7cmV0dXJue2xlbmd0aDpjLGhpbnRzOmZ1bmN0aW9uIGdldEhpbnRzKGUpe2NvbnN0IHQ9ZS5nZXQoIkgiKTtsZXQgYTtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PShhPXQubGVuZ3RoKXx8ND09PWEpKXtmb3IobGV0IGU9MDtlPGE7ZSsrKXtjb25zdCBhPXRbZV07aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPjApKXRocm93IG5ldyBFcnJvcihgSGludCAoJHtlfSkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApfXJldHVybiB0fXRocm93IG5ldyBFcnJvcigiSGludCBhcnJheSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9KHMpLG9iamVjdE51bWJlckZpcnN0OmdldEludChzLCJPIiksZW5kRmlyc3Q6Z2V0SW50KHMsIkUiKSxudW1QYWdlczpnZXRJbnQocywiTiIpLG1haW5YUmVmRW50cmllc09mZnNldDpnZXRJbnQocywiVCIpLHBhZ2VGaXJzdDpzLmhhcygiUCIpP2dldEludChzLCJQIiwhMCk6MH19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkFzY2lpODVTdHJlYW09dm9pZCAwO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTt2YXIgcj1hKDE2OSksbj1hKDE1MCk7Y2xhc3MgQXNjaWk4NVN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS44KTtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5pbnB1dD1uZXcgVWludDhBcnJheSg1KX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyO2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7KDAsbi5pc1doaXRlU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dHx8MTI2PT09dCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IGE9dGhpcy5idWZmZXJMZW5ndGg7bGV0IHIsaTtpZigxMjI9PT10KXtyPXRoaXMuZW5zdXJlQnVmZmVyKGErNCk7Zm9yKGk9MDtpPDQ7KytpKXJbYStpXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7Y29uc3Qgcz10aGlzLmlucHV0O3NbMF09dDtmb3IoaT0xO2k8NTsrK2kpe3Q9ZS5nZXRCeXRlKCk7Zm9yKDsoMCxuLmlzV2hpdGVTcGFjZSkodCk7KXQ9ZS5nZXRCeXRlKCk7c1tpXT10O2lmKC0xPT09dHx8MTI2PT09dClicmVha31yPXRoaXMuZW5zdXJlQnVmZmVyKGEraS0xKTt0aGlzLmJ1ZmZlckxlbmd0aCs9aS0xO2lmKGk8NSl7Zm9yKDtpPDU7KytpKXNbaV09MTE3O3RoaXMuZW9mPSEwfWxldCBvPTA7Zm9yKGk9MDtpPDU7KytpKW89ODUqbysoc1tpXS0zMyk7Zm9yKGk9MztpPj0wOy0taSl7clthK2ldPTI1NSZvO28+Pj04fX19fXQuQXNjaWk4NVN0cmVhbT1Bc2NpaTg1U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPXQuRGVjb2RlU3RyZWFtPXZvaWQgMDthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxNDApO3ZhciByPWEoMTUyKSxuPWEoMTU1KTtjb25zdCBpPW5ldyBVaW50OEFycmF5KDApO2NsYXNzIERlY29kZVN0cmVhbSBleHRlbmRzIHIuQmFzZVN0cmVhbXtjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aD1lfHwwO3RoaXMucG9zPTA7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmVvZj0hMTt0aGlzLmJ1ZmZlcj1pO3RoaXMubWluQnVmZmVyTGVuZ3RoPTUxMjtpZihlKWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8ZTspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9Z2V0IGlzRW1wdHkoKXtmb3IoOyF0aGlzLmVvZiYmMD09PXRoaXMuYnVmZmVyTGVuZ3RoOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiAwPT09dGhpcy5idWZmZXJMZW5ndGh9ZW5zdXJlQnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5idWZmZXI7aWYoZTw9dC5ieXRlTGVuZ3RoKXJldHVybiB0O2xldCBhPXRoaXMubWluQnVmZmVyTGVuZ3RoO2Zvcig7YTxlOylhKj0yO2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoYSk7ci5zZXQodCk7cmV0dXJuIHRoaXMuYnVmZmVyPXJ9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9ZTspe2lmKHRoaXMuZW9mKXJldHVybi0xO3RoaXMucmVhZEJsb2NrKCl9cmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5wb3M7bGV0IGE7aWYoZSl7dGhpcy5lbnN1cmVCdWZmZXIodCtlKTthPXQrZTtmb3IoOyF0aGlzLmVvZiYmdGhpcy5idWZmZXJMZW5ndGg8YTspdGhpcy5yZWFkQmxvY2soKTtjb25zdCByPXRoaXMuYnVmZmVyTGVuZ3RoO2E+ciYmKGE9cil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTthPXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPWE7cmV0dXJuIHRoaXMuYnVmZmVyLnN1YmFycmF5KHQsYSl9cmVzZXQoKXt0aGlzLnBvcz0wfW1ha2VTdWJTdHJlYW0oZSx0KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2V7Y29uc3QgYT1lK3Q7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9YSYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpfXJldHVybiBuZXcgbi5TdHJlYW0odGhpcy5idWZmZXIsZSx0LGEpfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19dC5EZWNvZGVTdHJlYW09RGVjb2RlU3RyZWFtO3QuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPWNsYXNzIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxhPTA7Zm9yKGNvbnN0IHQgb2YgZSlhKz10IGluc3RhbmNlb2YgRGVjb2RlU3RyZWFtP3QuX3Jhd01pbkJ1ZmZlckxlbmd0aDp0Lmxlbmd0aDtzdXBlcihhKTt0aGlzLnN0cmVhbXM9ZTt0aGlzLl9vbkVycm9yPXR9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cmVhbXM7aWYoMD09PWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLnNoaWZ0KCk7bGV0IGE7dHJ5e2E9dC5nZXRCeXRlcygpfWNhdGNoKGUpe2lmKHRoaXMuX29uRXJyb3Ipe3RoaXMuX29uRXJyb3IoZSx0LmRpY3Q/Lm9iaklkKTtyZXR1cm59dGhyb3cgZX1jb25zdCByPXRoaXMuYnVmZmVyTGVuZ3RoLG49cithLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihuKS5zZXQoYSxyKTt0aGlzLmJ1ZmZlckxlbmd0aD1ufWdldEJhc2VTdHJlYW1zKCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzLnN0cmVhbXMpe2NvbnN0IGE9dC5nZXRCYXNlU3RyZWFtcygpO2EmJmUucHVzaCguLi5hKX1yZXR1cm4gZS5sZW5ndGg+MD9lOm51bGx9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE2OSk7Y2xhc3MgQXNjaWlIZXhTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3QmJih0Kj0uNSk7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMuZmlyc3REaWdpdD0tMX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKDhlMyk7aWYoIWUubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59Y29uc3QgdD1lLmxlbmd0aCsxPj4xLGE9dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrdCk7bGV0IHI9dGhpcy5idWZmZXJMZW5ndGgsbj10aGlzLmZpcnN0RGlnaXQ7Zm9yKGNvbnN0IHQgb2YgZSl7bGV0IGU7aWYodD49NDgmJnQ8PTU3KWU9MTUmdDtlbHNle2lmKCEodD49NjUmJnQ8PTcwfHx0Pj05NyYmdDw9MTAyKSl7aWYoNjI9PT10KXt0aGlzLmVvZj0hMDticmVha31jb250aW51ZX1lPTkrKDE1JnQpfWlmKG48MCluPWU7ZWxzZXthW3IrK109bjw8NHxlO249LTF9fWlmKG4+PTAmJnRoaXMuZW9mKXthW3IrK109bjw8NDtuPS0xfXRoaXMuZmlyc3REaWdpdD1uO3RoaXMuYnVmZmVyTGVuZ3RoPXJ9fXQuQXNjaWlIZXhTdHJlYW09QXNjaWlIZXhTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DQ0lUVEZheFN0cmVhbT12b2lkIDA7dmFyIHI9YSgxNzIpLG49YSgxNjkpLGk9YSgxNTEpO2NsYXNzIENDSVRURmF4U3RyZWFtIGV4dGVuZHMgbi5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDthIGluc3RhbmNlb2YgaS5EaWN0fHwoYT1pLkRpY3QuZW1wdHkpO2NvbnN0IG49e25leHQ6KCk9PmUuZ2V0Qnl0ZSgpfTt0aGlzLmNjaXR0RmF4RGVjb2Rlcj1uZXcgci5DQ0lUVEZheERlY29kZXIobix7SzphLmdldCgiSyIpLEVuZE9mTGluZTphLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjphLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6YS5nZXQoIkNvbHVtbnMiKSxSb3dzOmEuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazphLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOmEuZ2V0KCJCbGFja0lzMSIpfSl9cmVhZEJsb2NrKCl7Zm9yKDshdGhpcy5lb2Y7KXtjb25zdCBlPXRoaXMuY2NpdHRGYXhEZWNvZGVyLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJufXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoKzEpO3RoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdPWV9fX10LkNDSVRURmF4U3RyZWFtPUNDSVRURmF4U3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDthKDIpO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTt2YXIgcj1hKDE0NSk7Y29uc3Qgbj0tMSxpPVtbLTEsLTFdLFstMSwtMV0sWzcsOF0sWzcsN10sWzYsNl0sWzYsNl0sWzYsNV0sWzYsNV0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzQsMF0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzMsM10sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl0sWzEsMl1dLHM9W1stMSwtMV0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI1NjBdXSxvPVtbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFs4LDI5XSxbOCwyOV0sWzgsMzBdLFs4LDMwXSxbOCw0NV0sWzgsNDVdLFs4LDQ2XSxbOCw0Nl0sWzcsMjJdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIzXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbOCw0N10sWzgsNDddLFs4LDQ4XSxbOCw0OF0sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNywyMF0sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzgsMzNdLFs4LDMzXSxbOCwzNF0sWzgsMzRdLFs4LDM1XSxbOCwzNV0sWzgsMzZdLFs4LDM2XSxbOCwzN10sWzgsMzddLFs4LDM4XSxbOCwzOF0sWzcsMTldLFs3LDE5XSxbNywxOV0sWzcsMTldLFs4LDMxXSxbOCwzMV0sWzgsMzJdLFs4LDMyXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs4LDUzXSxbOCw1M10sWzgsNTRdLFs4LDU0XSxbNywyNl0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzgsMzldLFs4LDM5XSxbOCw0MF0sWzgsNDBdLFs4LDQxXSxbOCw0MV0sWzgsNDJdLFs4LDQyXSxbOCw0M10sWzgsNDNdLFs4LDQ0XSxbOCw0NF0sWzcsMjFdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDI4XSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbOCw2MV0sWzgsNjFdLFs4LDYyXSxbOCw2Ml0sWzgsNjNdLFs4LDYzXSxbOCwwXSxbOCwwXSxbOCwzMjBdLFs4LDMyMF0sWzgsMzg0XSxbOCwzODRdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzcsMjddLFs3LDI3XSxbNywyN10sWzcsMjddLFs4LDU5XSxbOCw1OV0sWzgsNjBdLFs4LDYwXSxbOSwxNDcyXSxbOSwxNTM2XSxbOSwxNjAwXSxbOSwxNzI4XSxbNywxOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMjRdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs4LDQ5XSxbOCw0OV0sWzgsNTBdLFs4LDUwXSxbOCw1MV0sWzgsNTFdLFs4LDUyXSxbOCw1Ml0sWzcsMjVdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs4LDU1XSxbOCw1NV0sWzgsNTZdLFs4LDU2XSxbOCw1N10sWzgsNTddLFs4LDU4XSxbOCw1OF0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs2LDE2NjRdLFs4LDQ0OF0sWzgsNDQ4XSxbOCw1MTJdLFs4LDUxMl0sWzksNzA0XSxbOSw3NjhdLFs4LDY0MF0sWzgsNjQwXSxbOCw1NzZdLFs4LDU3Nl0sWzksODMyXSxbOSw4OTZdLFs5LDk2MF0sWzksMTAyNF0sWzksMTA4OF0sWzksMTE1Ml0sWzksMTIxNl0sWzksMTI4MF0sWzksMTM0NF0sWzksMTQwOF0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzcsMjU2XSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwyXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNCwzXSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDhdLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs1LDldLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw0XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDZdLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddLFs0LDddXSxjPVtbLTEsLTFdLFstMSwtMV0sWzEyLC0yXSxbMTIsLTJdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMiwxOTg0XSxbMTIsMTk4NF0sWzEyLDIwNDhdLFsxMiwyMDQ4XSxbMTIsMjExMl0sWzEyLDIxMTJdLFsxMiwyMTc2XSxbMTIsMjE3Nl0sWzEyLDIyNDBdLFsxMiwyMjQwXSxbMTIsMjMwNF0sWzEyLDIzMDRdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzEyLDIzNjhdLFsxMiwyMzY4XSxbMTIsMjQzMl0sWzEyLDI0MzJdLFsxMiwyNDk2XSxbMTIsMjQ5Nl0sWzEyLDI1NjBdLFsxMiwyNTYwXSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEyLDUyXSxbMTIsNTJdLFsxMyw2NDBdLFsxMyw3MDRdLFsxMyw3NjhdLFsxMyw4MzJdLFsxMiw1NV0sWzEyLDU1XSxbMTIsNTZdLFsxMiw1Nl0sWzEzLDEyODBdLFsxMywxMzQ0XSxbMTMsMTQwOF0sWzEzLDE0NzJdLFsxMiw1OV0sWzEyLDU5XSxbMTIsNjBdLFsxMiw2MF0sWzEzLDE1MzZdLFsxMywxNjAwXSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzEzLDE2NjRdLFsxMywxNzI4XSxbMTIsMzIwXSxbMTIsMzIwXSxbMTIsMzg0XSxbMTIsMzg0XSxbMTIsNDQ4XSxbMTIsNDQ4XSxbMTMsNTEyXSxbMTMsNTc2XSxbMTIsNTNdLFsxMiw1M10sWzEyLDU0XSxbMTIsNTRdLFsxMyw4OTZdLFsxMyw5NjBdLFsxMywxMDI0XSxbMTMsMTA4OF0sWzEzLDExNTJdLFsxMywxMjE2XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF1dLGw9W1s4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbMTEsMjNdLFsxMSwyM10sWzEyLDUwXSxbMTIsNTFdLFsxMiw0NF0sWzEyLDQ1XSxbMTIsNDZdLFsxMiw0N10sWzEyLDU3XSxbMTIsNThdLFsxMiw2MV0sWzEyLDI1Nl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMiw0OF0sWzEyLDQ5XSxbMTIsNjJdLFsxMiw2M10sWzEyLDMwXSxbMTIsMzFdLFsxMiwzMl0sWzEyLDMzXSxbMTIsNDBdLFsxMiw0MV0sWzExLDIyXSxbMTEsMjJdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbMTIsMTI4XSxbMTIsMTkyXSxbMTIsMjZdLFsxMiwyN10sWzEyLDI4XSxbMTIsMjldLFsxMSwxOV0sWzExLDE5XSxbMTEsMjBdLFsxMSwyMF0sWzEyLDM0XSxbMTIsMzVdLFsxMiwzNl0sWzEyLDM3XSxbMTIsMzhdLFsxMiwzOV0sWzExLDIxXSxbMTEsMjFdLFsxMiw0Ml0sWzEyLDQzXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXV0saD1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbNiw5XSxbNiw4XSxbNSw3XSxbNSw3XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw1XSxbNCw1XSxbNCw1XSxbNCw1XSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwzXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXSxbMiwyXV07dC5DQ0lUVEZheERlY29kZXI9Y2xhc3MgQ0NJVFRGYXhEZWNvZGVye2NvbnN0cnVjdG9yKGUpe2xldCB0LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFlfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5uZXh0KXRocm93IG5ldyBFcnJvcignQ0NJVFRGYXhEZWNvZGVyIC0gaW52YWxpZCAic291cmNlIiBwYXJhbWV0ZXIuJyk7dGhpcy5zb3VyY2U9ZTt0aGlzLmVvZj0hMTt0aGlzLmVuY29kaW5nPWEuS3x8MDt0aGlzLmVvbGluZT1hLkVuZE9mTGluZXx8ITE7dGhpcy5ieXRlQWxpZ249YS5FbmNvZGVkQnl0ZUFsaWdufHwhMTt0aGlzLmNvbHVtbnM9YS5Db2x1bW5zfHwxNzI4O3RoaXMucm93cz1hLlJvd3N8fDA7dGhpcy5lb2Jsb2NrPWEuRW5kT2ZCbG9jaz8/ITA7dGhpcy5ibGFjaz1hLkJsYWNrSXMxfHwhMTt0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKTt0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKTt0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zO3RoaXMuY29kaW5nUG9zPTA7dGhpcy5yb3c9MDt0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwO3RoaXMuaW5wdXRCaXRzPTA7dGhpcy5pbnB1dEJ1Zj0wO3RoaXMub3V0cHV0Qml0cz0wO3RoaXMucm93c0RvbmU9ITE7Zm9yKDswPT09KHQ9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09dCYmdGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXJlYWROZXh0Q2hhcigpe2lmKHRoaXMuZW9mKXJldHVybi0xO2NvbnN0IGU9dGhpcy5yZWZMaW5lLHQ9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2x1bW5zO2xldCBpLHMsbyxjLGw7aWYoMD09PXRoaXMub3V0cHV0Qml0cyl7dGhpcy5yb3dzRG9uZSYmKHRoaXMuZW9mPSEwKTtpZih0aGlzLmVvZilyZXR1cm4tMTt0aGlzLmVycj0hMTtsZXQgbyxsLGg7aWYodGhpcy5uZXh0TGluZTJEKXtmb3IoYz0wO3RbY108YTsrK2MpZVtjXT10W2NdO2VbYysrXT1hO2VbY109YTt0WzBdPTA7dGhpcy5jb2RpbmdQb3M9MDtpPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289dGhpcy5fZ2V0VHdvRGltQ29kZSgpO3N3aXRjaChvKXtjYXNlIDA6dGhpcy5fYWRkUGl4ZWxzKGVbaSsxXSxzKTtlW2krMV08YSYmKGkrPTIpO2JyZWFrO2Nhc2UgMTpvPWw9MDtpZihzKXtkb3tvKz1oPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGg+PTY0KTtkb3tsKz1oPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGg+PTY0KX1lbHNle2Rve28rPWg9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoaD49NjQpO2Rve2wrPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpfXRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStvLHMpO3RbdGhpcy5jb2RpbmdQb3NdPGEmJnRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStsLDFecyk7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yO2JyZWFrO2Nhc2UgNzp0aGlzLl9hZGRQaXhlbHMoZVtpXSszLHMpO3NePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7KytpO2Zvcig7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08YTspaSs9Mn1icmVhaztjYXNlIDU6dGhpcy5fYWRkUGl4ZWxzKGVbaV0rMixzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSAzOnRoaXMuX2FkZFBpeGVscyhlW2ldKzEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXsrK2k7Zm9yKDtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxhOylpKz0yfWJyZWFrO2Nhc2UgMjp0aGlzLl9hZGRQaXhlbHMoZVtpXSxzKTtzXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGEpeysraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA4OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTMscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA2OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTIscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSA0OnRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTEscyk7c149MTtpZih0W3RoaXMuY29kaW5nUG9zXTxhKXtpPjA/LS1pOisraTtmb3IoO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPGE7KWkrPTJ9YnJlYWs7Y2FzZSBuOnRoaXMuX2FkZFBpeGVscyhhLDApO3RoaXMuZW9mPSEwO2JyZWFrO2RlZmF1bHQ6KDAsci5pbmZvKSgiYmFkIDJkIGNvZGUiKTt0aGlzLl9hZGRQaXhlbHMoYSwwKTt0aGlzLmVycj0hMH19fWVsc2V7dFswXT0wO3RoaXMuY29kaW5nUG9zPTA7cz0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108YTspe289MDtpZihzKWRve28rPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpO2Vsc2UgZG97bys9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK28scyk7c149MX19bGV0IHU9ITE7dGhpcy5ieXRlQWxpZ24mJih0aGlzLmlucHV0Qml0cyY9LTgpO2lmKHRoaXMuZW9ibG9ja3x8dGhpcy5yb3chPT10aGlzLnJvd3MtMSl7bz10aGlzLl9sb29rQml0cygxMik7aWYodGhpcy5lb2xpbmUpZm9yKDtvIT09biYmMSE9PW87KXt0aGlzLl9lYXRCaXRzKDEpO289dGhpcy5fbG9va0JpdHMoMTIpfWVsc2UgZm9yKDswPT09bzspe3RoaXMuX2VhdEJpdHMoMSk7bz10aGlzLl9sb29rQml0cygxMil9aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO3U9ITB9ZWxzZSBvPT09biYmKHRoaXMuZW9mPSEwKX1lbHNlIHRoaXMucm93c0RvbmU9ITA7aWYoIXRoaXMuZW9mJiZ0aGlzLmVuY29kaW5nPjAmJiF0aGlzLnJvd3NEb25lKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9aWYodGhpcy5lb2Jsb2NrJiZ1JiZ0aGlzLmJ5dGVBbGlnbil7bz10aGlzLl9sb29rQml0cygxMik7aWYoMT09PW8pe3RoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX1pZih0aGlzLmVuY29kaW5nPj0wKWZvcihjPTA7Yzw0OysrYyl7bz10aGlzLl9sb29rQml0cygxMik7MSE9PW8mJigwLHIuaW5mbykoImJhZCBydGMgY29kZTogIitvKTt0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXRoaXMuZW9mPSEwfX1lbHNlIGlmKHRoaXMuZXJyJiZ0aGlzLmVvbGluZSl7Zm9yKDs7KXtvPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihvPT09bil7dGhpcy5lb2Y9ITA7cmV0dXJuLTF9aWYobz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fZWF0Qml0cygxKTt0aGlzLm5leHRMaW5lMkQ9ISgxJm8pfX10aGlzLm91dHB1dEJpdHM9dFswXT4wP3RbdGhpcy5jb2RpbmdQb3M9MF06dFt0aGlzLmNvZGluZ1Bvcz0xXTt0aGlzLnJvdysrfWlmKHRoaXMub3V0cHV0Qml0cz49OCl7bD0xJnRoaXMuY29kaW5nUG9zPzA6MjU1O3RoaXMub3V0cHV0Qml0cy09ODtpZigwPT09dGhpcy5vdXRwdXRCaXRzJiZ0W3RoaXMuY29kaW5nUG9zXTxhKXt0aGlzLmNvZGluZ1BvcysrO3RoaXMub3V0cHV0Qml0cz10W3RoaXMuY29kaW5nUG9zXS10W3RoaXMuY29kaW5nUG9zLTFdfX1lbHNle289ODtsPTA7ZG97aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLm91dHB1dEJpdHMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoJ0ludmFsaWQgL0NDSVRURmF4RGVjb2RlIGRhdGEsICJvdXRwdXRCaXRzIiBtdXN0IGJlIGEgbnVtYmVyLicpO2lmKHRoaXMub3V0cHV0Qml0cz5vKXtsPDw9bzsxJnRoaXMuY29kaW5nUG9zfHwobHw9MjU1Pj44LW8pO3RoaXMub3V0cHV0Qml0cy09bztvPTB9ZWxzZXtsPDw9dGhpcy5vdXRwdXRCaXRzOzEmdGhpcy5jb2RpbmdQb3N8fChsfD0yNTU+PjgtdGhpcy5vdXRwdXRCaXRzKTtvLT10aGlzLm91dHB1dEJpdHM7dGhpcy5vdXRwdXRCaXRzPTA7aWYodFt0aGlzLmNvZGluZ1Bvc108YSl7dGhpcy5jb2RpbmdQb3MrKzt0aGlzLm91dHB1dEJpdHM9dFt0aGlzLmNvZGluZ1Bvc10tdFt0aGlzLmNvZGluZ1Bvcy0xXX1lbHNlIGlmKG8+MCl7bDw8PW87bz0wfX19d2hpbGUobyl9dGhpcy5ibGFjayYmKGxePTI1NSk7cmV0dXJuIGx9X2FkZFBpeGVscyhlLHQpe2NvbnN0IGE9dGhpcy5jb2RpbmdMaW5lO2xldCBuPXRoaXMuY29kaW5nUG9zO2lmKGU+YVtuXSl7aWYoZT50aGlzLmNvbHVtbnMpeygwLHIuaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKTt0aGlzLmVycj0hMDtlPXRoaXMuY29sdW1uc30xJm5edCYmKytuO2Fbbl09ZX10aGlzLmNvZGluZ1Bvcz1ufV9hZGRQaXhlbHNOZWcoZSx0KXtjb25zdCBhPXRoaXMuY29kaW5nTGluZTtsZXQgbj10aGlzLmNvZGluZ1BvcztpZihlPmFbbl0pe2lmKGU+dGhpcy5jb2x1bW5zKXsoMCxyLmluZm8pKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIik7dGhpcy5lcnI9ITA7ZT10aGlzLmNvbHVtbnN9MSZuXnQmJisrbjthW25dPWV9ZWxzZSBpZihlPGFbbl0pe2lmKGU8MCl7KDAsci5pbmZvKSgiaW52YWxpZCBjb2RlIik7dGhpcy5lcnI9ITA7ZT0wfWZvcig7bj4wJiZlPGFbbi0xXTspLS1uO2Fbbl09ZX10aGlzLmNvZGluZ1Bvcz1ufV9maW5kVGFibGVDb2RlKGUsdCxhLHIpe2NvbnN0IGk9cnx8MDtmb3IobGV0IHI9ZTtyPD10Oysrcil7bGV0IGU9dGhpcy5fbG9va0JpdHMocik7aWYoZT09PW4pcmV0dXJuWyEwLDEsITFdO3I8dCYmKGU8PD10LXIpO2lmKCFpfHxlPj1pKXtjb25zdCB0PWFbZS1pXTtpZih0WzBdPT09cil7dGhpcy5fZWF0Qml0cyhyKTtyZXR1cm5bITAsdFsxXSwhMF19fX1yZXR1cm5bITEsMCwhMV19X2dldFR3b0RpbUNvZGUoKXtsZXQgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXt0PXRoaXMuX2xvb2tCaXRzKDcpO2U9aVt0XTtpZihlPy5bMF0+MCl7dGhpcy5fZWF0Qml0cyhlWzBdKTtyZXR1cm4gZVsxXX19ZWxzZXtjb25zdCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw3LGkpO2lmKGVbMF0mJmVbMl0pcmV0dXJuIGVbMV19KDAsci5pbmZvKSgiQmFkIHR3byBkaW0gY29kZSIpO3JldHVybiBufV9nZXRXaGl0ZUNvZGUoKXtsZXQgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXt0PXRoaXMuX2xvb2tCaXRzKDEyKTtpZih0PT09bilyZXR1cm4gMTtlPXQ+PjU9PTA/c1t0XTpvW3Q+PjNdO2lmKGVbMF0+MCl7dGhpcy5fZWF0Qml0cyhlWzBdKTtyZXR1cm4gZVsxXX19ZWxzZXtsZXQgZT10aGlzLl9maW5kVGFibGVDb2RlKDEsOSxvKTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSgxMSwxMixzKTtpZihlWzBdKXJldHVybiBlWzFdfSgwLHIuaW5mbykoImJhZCB3aGl0ZSBjb2RlIik7dGhpcy5fZWF0Qml0cygxKTtyZXR1cm4gMX1fZ2V0QmxhY2tDb2RlKCl7bGV0IGUsdDtpZih0aGlzLmVvYmxvY2spe2U9dGhpcy5fbG9va0JpdHMoMTMpO2lmKGU9PT1uKXJldHVybiAxO3Q9ZT4+Nz09MD9jW2VdOmU+Pjk9PTAmJmU+PjchPTA/bFsoZT4+MSktNjRdOmhbZT4+N107aWYodFswXT4wKXt0aGlzLl9lYXRCaXRzKHRbMF0pO3JldHVybiB0WzFdfX1lbHNle2xldCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMiw2LGgpO2lmKGVbMF0pcmV0dXJuIGVbMV07ZT10aGlzLl9maW5kVGFibGVDb2RlKDcsMTIsbCw2NCk7aWYoZVswXSlyZXR1cm4gZVsxXTtlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTAsMTMsYyk7aWYoZVswXSlyZXR1cm4gZVsxXX0oMCxyLmluZm8pKCJiYWQgYmxhY2sgY29kZSIpO3RoaXMuX2VhdEJpdHMoMSk7cmV0dXJuIDF9X2xvb2tCaXRzKGUpe2xldCB0O2Zvcig7dGhpcy5pbnB1dEJpdHM8ZTspe2lmKC0xPT09KHQ9dGhpcy5zb3VyY2UubmV4dCgpKSlyZXR1cm4gMD09PXRoaXMuaW5wdXRCaXRzP246dGhpcy5pbnB1dEJ1Zjw8ZS10aGlzLmlucHV0Qml0cyY2NTUzNT4+MTYtZTt0aGlzLmlucHV0QnVmPXRoaXMuaW5wdXRCdWY8PDh8dDt0aGlzLmlucHV0Qml0cys9OH1yZXR1cm4gdGhpcy5pbnB1dEJ1Zj4+dGhpcy5pbnB1dEJpdHMtZSY2NTUzNT4+MTYtZX1fZWF0Qml0cyhlKXsodGhpcy5pbnB1dEJpdHMtPWUpPDAmJih0aGlzLmlucHV0Qml0cz0wKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRmxhdGVTdHJlYW09dm9pZCAwO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTt2YXIgcj1hKDE2OSksbj1hKDE0NSk7Y29uc3QgaT1uZXcgSW50MzJBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pLHM9bmV3IEludDMyQXJyYXkoWzMsNCw1LDYsNyw4LDksMTAsNjU1NDcsNjU1NDksNjU1NTEsNjU1NTMsMTMxMDkxLDEzMTA5NSwxMzEwOTksMTMxMTAzLDE5NjY0MywxOTY2NTEsMTk2NjU5LDE5NjY2NywyNjIyMTEsMjYyMjI3LDI2MjI0MywyNjIyNTksMzI3ODExLDMyNzg0MywzMjc4NzUsMzI3OTA3LDI1OCwyNTgsMjU4XSksbz1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLGM9W25ldyBJbnQzMkFycmF5KFs0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE2LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NCw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDgsNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY4LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMiw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OWU0LDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NCw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI0LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Miw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTYsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc2LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MCw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDgsNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDcyLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjAsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg4LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Miw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzIsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM2LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNCw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjgsNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOCw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTYsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYwLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MCw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDQsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEyLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Niw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE4LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Niw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTAsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcwLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNCw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDIsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY2LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjYsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk0LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OCw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzgsNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQyLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMCw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzQsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMiw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTAsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU0LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NCw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzgsNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA2LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MCw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMwLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OCw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjIsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgyLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Niw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTQsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc4LDQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTcsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg1LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OSw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjksNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMzLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5MDAwMSw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjUsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNSw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTMsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU3LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Nyw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDEsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA5LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Myw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIxLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OSw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTMsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTczLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNyw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDUsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY5LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjksNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk3LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MSw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODEsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ1LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMyw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzcsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOSw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODcsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUxLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MSw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzUsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAzLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Nyw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI3LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NSw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTksNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc5LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Myw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTEsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc1LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjMsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkxLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NSw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzUsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM5LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNyw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzEsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMSw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTksNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYzLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Myw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDcsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE1LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OV0pLDldLGw9W25ldyBJbnQzMkFycmF5KFszMjc2ODAsMzI3Njk2LDMyNzY4OCwzMjc3MDQsMzI3Njg0LDMyNzcwMCwzMjc2OTIsMzI3NzA4LDMyNzY4MiwzMjc2OTgsMzI3NjkwLDMyNzcwNiwzMjc2ODYsMzI3NzAyLDMyNzY5NCwwLDMyNzY4MSwzMjc2OTcsMzI3Njg5LDMyNzcwNSwzMjc2ODUsMzI3NzAxLDMyNzY5MywzMjc3MDksMzI3NjgzLDMyNzY5OSwzMjc2OTEsMzI3NzA3LDMyNzY4NywzMjc3MDMsMzI3Njk1LDBdKSw1XTtjbGFzcyBGbGF0ZVN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O2NvbnN0IGE9ZS5nZXRCeXRlKCkscj1lLmdldEJ5dGUoKTtpZigtMT09PWF8fC0xPT09cil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcihgSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7aWYoOCE9KDE1JmEpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICR7YX0sICR7cn1gKTtpZigoKGE8PDgpK3IpJTMxIT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogJHthfSwgJHtyfWApO2lmKDMyJnIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2F9LCAke3J9YCk7dGhpcy5jb2RlU2l6ZT0wO3RoaXMuY29kZUJ1Zj0wfWdldEJpdHMoZSl7Y29uc3QgdD10aGlzLnN0cjtsZXQgYSxyPXRoaXMuY29kZVNpemUsaT10aGlzLmNvZGVCdWY7Zm9yKDtyPGU7KXtpZigtMT09PShhPXQuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO2l8PWE8PHI7cis9OH1hPWkmKDE8PGUpLTE7dGhpcy5jb2RlQnVmPWk+PmU7dGhpcy5jb2RlU2l6ZT1yLT1lO3JldHVybiBhfWdldENvZGUoZSl7Y29uc3QgdD10aGlzLnN0cixhPWVbMF0scj1lWzFdO2xldCBpLHM9dGhpcy5jb2RlU2l6ZSxvPXRoaXMuY29kZUJ1Zjtmb3IoO3M8ciYmLTEhPT0oaT10LmdldEJ5dGUoKSk7KXtvfD1pPDxzO3MrPTh9Y29uc3QgYz1hW28mKDE8PHIpLTFdLGw9Yz4+MTYsaD02NTUzNSZjO2lmKGw8MXx8czxsKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7dGhpcy5jb2RlQnVmPW8+Pmw7dGhpcy5jb2RlU2l6ZT1zLWw7cmV0dXJuIGh9Z2VuZXJhdGVIdWZmbWFuVGFibGUoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgYSxyPTA7Zm9yKGE9MDthPHQ7KythKWVbYV0+ciYmKHI9ZVthXSk7Y29uc3Qgbj0xPDxyLGk9bmV3IEludDMyQXJyYXkobik7Zm9yKGxldCBzPTEsbz0wLGM9MjtzPD1yOysrcyxvPDw9MSxjPDw9MSlmb3IobGV0IHI9MDtyPHQ7KytyKWlmKGVbcl09PT1zKXtsZXQgZT0wLHQ9bztmb3IoYT0wO2E8czsrK2Epe2U9ZTw8MXwxJnQ7dD4+PTF9Zm9yKGE9ZTthPG47YSs9YylpW2FdPXM8PDE2fHI7KytvfXJldHVybltpLHJdfXJlYWRCbG9jaygpe2xldCBlLHQ7Y29uc3QgYT10aGlzLnN0cjtsZXQgcixoLHU9dGhpcy5nZXRCaXRzKDMpOzEmdSYmKHRoaXMuZW9mPSEwKTt1Pj49MTtpZigwPT09dSl7bGV0IHQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7bGV0IHI9dDtpZigtMT09PSh0PWEuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtyfD10PDw4O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2xldCBpPXQ7aWYoLTE9PT0odD1hLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7aXw9dDw8ODtpZihpIT09KDY1NTM1Jn5yKSYmKDAhPT1yfHwwIT09aSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCB1bmNvbXByZXNzZWQgYmxvY2sgbGVuZ3RoIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj0wO3RoaXMuY29kZVNpemU9MDtjb25zdCBzPXRoaXMuYnVmZmVyTGVuZ3RoLG89cytyO2U9dGhpcy5lbnN1cmVCdWZmZXIobyk7dGhpcy5idWZmZXJMZW5ndGg9bztpZigwPT09ciktMT09PWEucGVla0J5dGUoKSYmKHRoaXMuZW9mPSEwKTtlbHNle2NvbnN0IHQ9YS5nZXRCeXRlcyhyKTtlLnNldCh0LHMpO3QubGVuZ3RoPHImJih0aGlzLmVvZj0hMCl9cmV0dXJufWlmKDE9PT11KXtyPWM7aD1sfWVsc2V7aWYoMiE9PXUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gYmxvY2sgdHlwZSBpbiBmbGF0ZSBzdHJlYW0iKTt7Y29uc3QgZT10aGlzLmdldEJpdHMoNSkrMjU3LGE9dGhpcy5nZXRCaXRzKDUpKzEsbj10aGlzLmdldEJpdHMoNCkrNCxzPW5ldyBVaW50OEFycmF5KGkubGVuZ3RoKTtsZXQgbztmb3Iobz0wO288bjsrK28pc1tpW29dXT10aGlzLmdldEJpdHMoMyk7Y29uc3QgYz10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKHMpO3Q9MDtvPTA7Y29uc3QgbD1lK2EsdT1uZXcgVWludDhBcnJheShsKTtsZXQgZCxmLGc7Zm9yKDtvPGw7KXtjb25zdCBlPXRoaXMuZ2V0Q29kZShjKTtpZigxNj09PWUpe2Q9MjtmPTM7Zz10fWVsc2UgaWYoMTc9PT1lKXtkPTM7Zj0zO2c9dD0wfWVsc2V7aWYoMTghPT1lKXt1W28rK109dD1lO2NvbnRpbnVlfWQ9NztmPTExO2c9dD0wfWxldCBhPXRoaXMuZ2V0Qml0cyhkKStmO2Zvcig7YS0tID4wOyl1W28rK109Z31yPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUodS5zdWJhcnJheSgwLGUpKTtoPXRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUodS5zdWJhcnJheShlLGwpKX19ZT10aGlzLmJ1ZmZlcjtsZXQgZD1lP2UubGVuZ3RoOjAsZj10aGlzLmJ1ZmZlckxlbmd0aDtmb3IoOzspe2xldCBhPXRoaXMuZ2V0Q29kZShyKTtpZihhPDI1Nil7aWYoZisxPj1kKXtlPXRoaXMuZW5zdXJlQnVmZmVyKGYrMSk7ZD1lLmxlbmd0aH1lW2YrK109YTtjb250aW51ZX1pZigyNTY9PT1hKXt0aGlzLmJ1ZmZlckxlbmd0aD1mO3JldHVybn1hLT0yNTc7YT1zW2FdO2xldCBuPWE+PjE2O24+MCYmKG49dGhpcy5nZXRCaXRzKG4pKTt0PSg2NTUzNSZhKStuO2E9dGhpcy5nZXRDb2RlKGgpO2E9b1thXTtuPWE+PjE2O24+MCYmKG49dGhpcy5nZXRCaXRzKG4pKTtjb25zdCBpPSg2NTUzNSZhKStuO2lmKGYrdD49ZCl7ZT10aGlzLmVuc3VyZUJ1ZmZlcihmK3QpO2Q9ZS5sZW5ndGh9Zm9yKGxldCBhPTA7YTx0OysrYSwrK2YpZVtmXT1lW2YtaV19fX10LkZsYXRlU3RyZWFtPUZsYXRlU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSmJpZzJTdHJlYW09dm9pZCAwO2EoMTQwKTt2YXIgcj1hKDE1Miksbj1hKDE2OSksaT1hKDE1MSkscz1hKDE3NSksbz1hKDE0NSk7Y2xhc3MgSmJpZzJTdHJlYW0gZXh0ZW5kcyBuLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1hfWdldCBieXRlcygpe3JldHVybigwLG8uc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfWVuc3VyZUJ1ZmZlcihlKXt9cmVhZEJsb2NrKCl7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IGU9bmV3IHMuSmJpZzJJbWFnZSx0PVtdO2lmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYoZSBpbnN0YW5jZW9mIHIuQmFzZVN0cmVhbSl7Y29uc3QgYT1lLmdldEJ5dGVzKCk7dC5wdXNoKHtkYXRhOmEsc3RhcnQ6MCxlbmQ6YS5sZW5ndGh9KX19dC5wdXNoKHtkYXRhOnRoaXMuYnl0ZXMsc3RhcnQ6MCxlbmQ6dGhpcy5ieXRlcy5sZW5ndGh9KTtjb25zdCBhPWUucGFyc2VDaHVua3ModCksbj1hLmxlbmd0aDtmb3IobGV0IGU9MDtlPG47ZSsrKWFbZV1ePTI1NTt0aGlzLmJ1ZmZlcj1hO3RoaXMuYnVmZmVyTGVuZ3RoPW47dGhpcy5lb2Y9ITB9fXQuSmJpZzJTdHJlYW09SmJpZzJTdHJlYW19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KYmlnMkltYWdlPXZvaWQgMDthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxNDApO2EoMik7dmFyIHI9YSgxNDUpLG49YSgxNTApLGk9YSgxNzYpLHM9YSgxNzIpO2NsYXNzIEpiaWcyRXJyb3IgZXh0ZW5kcyByLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoYEpCSUcyIGVycm9yOiAke2V9YCwiSmJpZzJFcnJvciIpfX1jbGFzcyBDb250ZXh0Q2FjaGV7Z2V0Q29udGV4dHMoZSl7cmV0dXJuIGUgaW4gdGhpcz90aGlzW2VdOnRoaXNbZV09bmV3IEludDhBcnJheSg2NTUzNil9fWNsYXNzIERlY29kaW5nQ29udGV4dHtjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5kYXRhPWU7dGhpcy5zdGFydD10O3RoaXMuZW5kPWF9Z2V0IGRlY29kZXIoKXtjb25zdCBlPW5ldyBpLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiZGVjb2RlciIsZSl9Z2V0IGNvbnRleHRDYWNoZSgpe2NvbnN0IGU9bmV3IENvbnRleHRDYWNoZTtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiY29udGV4dENhY2hlIixlKX19Y29uc3Qgbz0yKiozMS0xLGM9LSgyKiozMSk7ZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihlLHQsYSl7Y29uc3Qgcj1lLmdldENvbnRleHRzKHQpO2xldCBuPTE7ZnVuY3Rpb24gcmVhZEJpdHMoZSl7bGV0IHQ9MDtmb3IobGV0IGk9MDtpPGU7aSsrKXtjb25zdCBlPWEucmVhZEJpdChyLG4pO249bjwyNTY/bjw8MXxlOjUxMSYobjw8MXxlKXwyNTY7dD10PDwxfGV9cmV0dXJuIHQ+Pj4wfWNvbnN0IGk9cmVhZEJpdHMoMSkscz1yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygzMikrNDQzNjpyZWFkQml0cygxMikrMzQwOnJlYWRCaXRzKDgpKzg0OnJlYWRCaXRzKDYpKzIwOnJlYWRCaXRzKDQpKzQ6cmVhZEJpdHMoMik7bGV0IGw7MD09PWk/bD1zOnM+MCYmKGw9LXMpO3JldHVybiBsPj1jJiZsPD1vP2w6bnVsbH1mdW5jdGlvbiBkZWNvZGVJQUlEKGUsdCxhKXtjb25zdCByPWUuZ2V0Q29udGV4dHMoIklBSUQiKTtsZXQgbj0xO2ZvcihsZXQgZT0wO2U8YTtlKyspe249bjw8MXx0LnJlYWRCaXQocixuKX1yZXR1cm4gYTwzMT9uJigxPDxhKS0xOjIxNDc0ODM2NDcmbn1jb25zdCBsPVsiU3ltYm9sRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZVRleHRSZWdpb24iLG51bGwsIkltbWVkaWF0ZVRleHRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiUGF0dGVybkRpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbiIsIkludGVybWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsIlBhZ2VJbmZvcm1hdGlvbiIsIkVuZE9mUGFnZSIsIkVuZE9mU3RyaXBlIiwiRW5kT2ZGaWxlIiwiUHJvZmlsZXMiLCJUYWJsZXMiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiRXh0ZW5zaW9uIl0saD1bW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6Mix5Oi0xfSx7eDotNCx5OjB9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4OjIseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0zLHk6LTF9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotNCx5OjB9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XV0sdT1be2NvZGluZzpbe3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH0se3g6MCx5OjB9LHt4OjEseTowfSx7eDotMSx5OjF9LHt4OjAseToxfSx7eDoxLHk6MX1dfSx7Y29kaW5nOlt7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4Oi0xLHk6MH0se3g6MCx5OjB9LHt4OjEseTowfSx7eDowLHk6MX0se3g6MSx5OjF9XX1dLGQ9WzM5NzE3LDE5NDEsMjI5LDQwNV0sZj1bMzIsOF07ZnVuY3Rpb24gZGVjb2RlQml0bWFwKGUsdCxhLHIsbixpLHMsbyl7aWYoZSl7cmV0dXJuIGRlY29kZU1NUkJpdG1hcChuZXcgUmVhZGVyKG8uZGF0YSxvLnN0YXJ0LG8uZW5kKSx0LGEsITEpfWlmKDA9PT1yJiYhaSYmIW4mJjQ9PT1zLmxlbmd0aCYmMz09PXNbMF0ueCYmLTE9PT1zWzBdLnkmJi0zPT09c1sxXS54JiYtMT09PXNbMV0ueSYmMj09PXNbMl0ueCYmLTI9PT1zWzJdLnkmJi0yPT09c1szXS54JiYtMj09PXNbM10ueSlyZXR1cm4gZnVuY3Rpb24gZGVjb2RlQml0bWFwVGVtcGxhdGUwKGUsdCxhKXtjb25zdCByPWEuZGVjb2RlcixuPWEuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLGk9W107bGV0IHMsbyxjLGwsaCx1LGQ7Zm9yKG89MDtvPHQ7bysrKXtoPWlbb109bmV3IFVpbnQ4QXJyYXkoZSk7dT1vPDE/aDppW28tMV07ZD1vPDI/aDppW28tMl07cz1kWzBdPDwxM3xkWzFdPDwxMnxkWzJdPDwxMXx1WzBdPDw3fHVbMV08PDZ8dVsyXTw8NXx1WzNdPDw0O2ZvcihjPTA7YzxlO2MrKyl7aFtjXT1sPXIucmVhZEJpdChuLHMpO3M9KDMxNzM1JnMpPDwxfChjKzM8ZT9kW2MrM108PDExOjApfChjKzQ8ZT91W2MrNF08PDQ6MCl8bH19cmV0dXJuIGl9KHQsYSxvKTtjb25zdCBjPSEhaSxsPWhbcl0uY29uY2F0KHMpO2wuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH0pKTtjb25zdCB1PWwubGVuZ3RoLGY9bmV3IEludDhBcnJheSh1KSxnPW5ldyBJbnQ4QXJyYXkodSkscD1bXTtsZXQgbSxiLHk9MCx3PTAsUz0wLHg9MDtmb3IoYj0wO2I8dTtiKyspe2ZbYl09bFtiXS54O2dbYl09bFtiXS55O3c9TWF0aC5taW4odyxsW2JdLngpO1M9TWF0aC5tYXgoUyxsW2JdLngpO3g9TWF0aC5taW4oeCxsW2JdLnkpO2I8dS0xJiZsW2JdLnk9PT1sW2IrMV0ueSYmbFtiXS54PT09bFtiKzFdLngtMT95fD0xPDx1LTEtYjpwLnB1c2goYil9Y29uc3QgQz1wLmxlbmd0aCx2PW5ldyBJbnQ4QXJyYXkoQyksaz1uZXcgSW50OEFycmF5KEMpLE89bmV3IFVpbnQxNkFycmF5KEMpO2ZvcihtPTA7bTxDO20rKyl7Yj1wW21dO3ZbbV09bFtiXS54O2tbbV09bFtiXS55O09bbV09MTw8dS0xLWJ9Y29uc3QgVD0tdyxNPS14LEU9dC1TLEQ9ZFtyXTtsZXQgUj1uZXcgVWludDhBcnJheSh0KTtjb25zdCBOPVtdLEw9by5kZWNvZGVyLCQ9by5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIik7bGV0IF8saixVLFgsSCxxPTAsej0wO2ZvcihsZXQgZT0wO2U8YTtlKyspe2lmKG4pe3FePUwucmVhZEJpdCgkLEQpO2lmKHEpe04ucHVzaChSKTtjb250aW51ZX19Uj1uZXcgVWludDhBcnJheShSKTtOLnB1c2goUik7Zm9yKF89MDtfPHQ7XysrKXtpZihjJiZpW2VdW19dKXtSW19dPTA7Y29udGludWV9aWYoXz49VCYmXzxFJiZlPj1NKXt6PXo8PDEmeTtmb3IoYj0wO2I8QztiKyspe2o9ZStrW2JdO1U9Xyt2W2JdO1g9TltqXVtVXTtpZihYKXtYPU9bYl07enw9WH19fWVsc2V7ej0wO0g9dS0xO2ZvcihiPTA7Yjx1O2IrKyxILS0pe1U9XytmW2JdO2lmKFU+PTAmJlU8dCl7aj1lK2dbYl07aWYoaj49MCl7WD1OW2pdW1VdO1gmJih6fD1YPDxIKX19fX1jb25zdCBhPUwucmVhZEJpdCgkLHopO1JbX109YX19cmV0dXJuIE59ZnVuY3Rpb24gZGVjb2RlUmVmaW5lbWVudChlLHQsYSxyLG4saSxzLG8sYyl7bGV0IGw9dVthXS5jb2Rpbmc7MD09PWEmJihsPWwuY29uY2F0KFtvWzBdXSkpO2NvbnN0IGg9bC5sZW5ndGgsZD1uZXcgSW50MzJBcnJheShoKSxnPW5ldyBJbnQzMkFycmF5KGgpO2xldCBwO2ZvcihwPTA7cDxoO3ArKyl7ZFtwXT1sW3BdLng7Z1twXT1sW3BdLnl9bGV0IG09dVthXS5yZWZlcmVuY2U7MD09PWEmJihtPW0uY29uY2F0KFtvWzFdXSkpO2NvbnN0IGI9bS5sZW5ndGgseT1uZXcgSW50MzJBcnJheShiKSx3PW5ldyBJbnQzMkFycmF5KGIpO2ZvcihwPTA7cDxiO3ArKyl7eVtwXT1tW3BdLng7d1twXT1tW3BdLnl9Y29uc3QgUz1yWzBdLmxlbmd0aCx4PXIubGVuZ3RoLEM9ZlthXSx2PVtdLGs9Yy5kZWNvZGVyLE89Yy5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdSIik7bGV0IFQ9MDtmb3IobGV0IGE9MDthPHQ7YSsrKXtpZihzKXtUXj1rLnJlYWRCaXQoTyxDKTtpZihUKXRocm93IG5ldyBKYmlnMkVycm9yKCJwcmVkaWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQiKX1jb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3YucHVzaCh0KTtmb3IobGV0IHM9MDtzPGU7cysrKXtsZXQgbyxjLGw9MDtmb3IocD0wO3A8aDtwKyspe289YStnW3BdO2M9cytkW3BdO288MHx8YzwwfHxjPj1lP2w8PD0xOmw9bDw8MXx2W29dW2NdfWZvcihwPTA7cDxiO3ArKyl7bz1hK3dbcF0taTtjPXMreVtwXS1uO288MHx8bz49eHx8YzwwfHxjPj1TP2w8PD0xOmw9bDw8MXxyW29dW2NdfWNvbnN0IHU9ay5yZWFkQml0KE8sbCk7dFtzXT11fX1yZXR1cm4gdn1mdW5jdGlvbiBkZWNvZGVUZXh0UmVnaW9uKGUsdCxhLHIsbixpLHMsbyxjLGwsaCx1LGQsZixnLHAsbSxiLHkpe2lmKGUmJnQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCB3PVtdO2xldCBTLHg7Zm9yKFM9MDtTPHI7UysrKXt4PW5ldyBVaW50OEFycmF5KGEpO2lmKG4pZm9yKGxldCBlPTA7ZTxhO2UrKyl4W2VdPW47dy5wdXNoKHgpfWNvbnN0IEM9bS5kZWNvZGVyLHY9bS5jb250ZXh0Q2FjaGU7bGV0IGs9ZT8tZi50YWJsZURlbHRhVC5kZWNvZGUoeSk6LWRlY29kZUludGVnZXIodiwiSUFEVCIsQyksTz0wO1M9MDtmb3IoO1M8aTspe2srPWU/Zi50YWJsZURlbHRhVC5kZWNvZGUoeSk6ZGVjb2RlSW50ZWdlcih2LCJJQURUIixDKTtPKz1lP2YudGFibGVGaXJzdFMuZGVjb2RlKHkpOmRlY29kZUludGVnZXIodiwiSUFGUyIsQyk7bGV0IHI9Tztmb3IoOzspe2xldCBuPTA7cz4xJiYobj1lP3kucmVhZEJpdHMoYik6ZGVjb2RlSW50ZWdlcih2LCJJQUlUIixDKSk7Y29uc3QgaT1zKmsrbixPPWU/Zi5zeW1ib2xJRFRhYmxlLmRlY29kZSh5KTpkZWNvZGVJQUlEKHYsQyxjKSxUPXQmJihlP3kucmVhZEJpdCgpOmRlY29kZUludGVnZXIodiwiSUFSSSIsQykpO2xldCBNPW9bT10sRT1NWzBdLmxlbmd0aCxEPU0ubGVuZ3RoO2lmKFQpe2NvbnN0IGU9ZGVjb2RlSW50ZWdlcih2LCJJQVJEVyIsQyksdD1kZWNvZGVJbnRlZ2VyKHYsIklBUkRIIixDKTtFKz1lO0QrPXQ7TT1kZWNvZGVSZWZpbmVtZW50KEUsRCxnLE0sKGU+PjEpK2RlY29kZUludGVnZXIodiwiSUFSRFgiLEMpLCh0Pj4xKStkZWNvZGVJbnRlZ2VyKHYsIklBUkRZIixDKSwhMSxwLG0pfWNvbnN0IFI9aS0oMSZ1PzA6RC0xKSxOPXItKDImdT9FLTE6MCk7bGV0IEwsJCxfO2lmKGwpe2ZvcihMPTA7TDxEO0wrKyl7eD13W04rTF07aWYoIXgpY29udGludWU7Xz1NW0xdO2NvbnN0IGU9TWF0aC5taW4oYS1SLEUpO3N3aXRjaChkKXtjYXNlIDA6Zm9yKCQ9MDskPGU7JCsrKXhbUiskXXw9X1skXTticmVhaztjYXNlIDI6Zm9yKCQ9MDskPGU7JCsrKXhbUiskXV49X1skXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2R9IGlzIG5vdCBzdXBwb3J0ZWRgKX19cis9RC0xfWVsc2V7Zm9yKCQ9MDskPEQ7JCsrKXt4PXdbUiskXTtpZih4KXtfPU1bJF07c3dpdGNoKGQpe2Nhc2UgMDpmb3IoTD0wO0w8RTtMKyspeFtOK0xdfD1fW0xdO2JyZWFrO2Nhc2UgMjpmb3IoTD0wO0w8RTtMKyspeFtOK0xdXj1fW0xdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7ZH0gaXMgbm90IHN1cHBvcnRlZGApfX19cis9RS0xfVMrKztjb25zdCBqPWU/Zi50YWJsZURlbHRhUy5kZWNvZGUoeSk6ZGVjb2RlSW50ZWdlcih2LCJJQURTIixDKTtpZihudWxsPT09ailicmVhaztyKz1qK2h9fXJldHVybiB3fWZ1bmN0aW9uIHJlYWRTZWdtZW50SGVhZGVyKGUsdCl7Y29uc3QgYT17fTthLm51bWJlcj0oMCxuLnJlYWRVaW50MzIpKGUsdCk7Y29uc3Qgcj1lW3QrNF0saT02MyZyO2lmKCFsW2ldKXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIHNlZ21lbnQgdHlwZTogIitpKTthLnR5cGU9aTthLnR5cGVOYW1lPWxbaV07YS5kZWZlcnJlZE5vblJldGFpbj0hISgxMjgmcik7Y29uc3Qgcz0hISg2NCZyKSxvPWVbdCs1XTtsZXQgYz1vPj41Jjc7Y29uc3QgaD1bMzEmb107bGV0IHU9dCs2O2lmKDc9PT1vKXtjPTUzNjg3MDkxMSYoMCxuLnJlYWRVaW50MzIpKGUsdS0xKTt1Kz0zO2xldCB0PWMrNz4+MztoWzBdPWVbdSsrXTtmb3IoOy0tdD4wOyloLnB1c2goZVt1KytdKX1lbHNlIGlmKDU9PT1vfHw2PT09byl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO2EucmV0YWluQml0cz1oO2xldCBkPTQ7YS5udW1iZXI8PTI1Nj9kPTE6YS5udW1iZXI8PTY1NTM2JiYoZD0yKTtjb25zdCBmPVtdO2xldCBwLG07Zm9yKHA9MDtwPGM7cCsrKXtsZXQgdDt0PTE9PT1kP2VbdV06Mj09PWQ/KDAsbi5yZWFkVWludDE2KShlLHUpOigwLG4ucmVhZFVpbnQzMikoZSx1KTtmLnB1c2godCk7dSs9ZH1hLnJlZmVycmVkVG89ZjtpZihzKXthLnBhZ2VBc3NvY2lhdGlvbj0oMCxuLnJlYWRVaW50MzIpKGUsdSk7dSs9NH1lbHNlIGEucGFnZUFzc29jaWF0aW9uPWVbdSsrXTthLmxlbmd0aD0oMCxuLnJlYWRVaW50MzIpKGUsdSk7dSs9NDtpZig0Mjk0OTY3Mjk1PT09YS5sZW5ndGgpe2lmKDM4IT09aSl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoIik7e2NvbnN0IHQ9cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihlLHUpLHI9ISEoMSZlW3UrZ10pLG49NixpPW5ldyBVaW50OEFycmF5KG4pO2lmKCFyKXtpWzBdPTI1NTtpWzFdPTE3Mn1pWzJdPXQuaGVpZ2h0Pj4+MjQmMjU1O2lbM109dC5oZWlnaHQ+PjE2JjI1NTtpWzRdPXQuaGVpZ2h0Pj44JjI1NTtpWzVdPTI1NSZ0LmhlaWdodDtmb3IocD11LG09ZS5sZW5ndGg7cDxtO3ArKyl7bGV0IHQ9MDtmb3IoO3Q8biYmaVt0XT09PWVbcCt0XTspdCsrO2lmKHQ9PT1uKXthLmxlbmd0aD1wK247YnJlYWt9fWlmKDQyOTQ5NjcyOTU9PT1hLmxlbmd0aCl0aHJvdyBuZXcgSmJpZzJFcnJvcigic2VnbWVudCBlbmQgd2FzIG5vdCBmb3VuZCIpfX1hLmhlYWRlckVuZD11O3JldHVybiBhfWZ1bmN0aW9uIHJlYWRTZWdtZW50cyhlLHQsYSxyKXtjb25zdCBuPVtdO2xldCBpPWE7Zm9yKDtpPHI7KXtjb25zdCBhPXJlYWRTZWdtZW50SGVhZGVyKHQsaSk7aT1hLmhlYWRlckVuZDtjb25zdCByPXtoZWFkZXI6YSxkYXRhOnR9O2lmKCFlLnJhbmRvbUFjY2Vzcyl7ci5zdGFydD1pO2krPWEubGVuZ3RoO3IuZW5kPWl9bi5wdXNoKHIpO2lmKDUxPT09YS50eXBlKWJyZWFrfWlmKGUucmFuZG9tQWNjZXNzKWZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7bltlXS5zdGFydD1pO2krPW5bZV0uaGVhZGVyLmxlbmd0aDtuW2VdLmVuZD1pfXJldHVybiBufWZ1bmN0aW9uIHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZSx0KXtyZXR1cm57d2lkdGg6KDAsbi5yZWFkVWludDMyKShlLHQpLGhlaWdodDooMCxuLnJlYWRVaW50MzIpKGUsdCs0KSx4OigwLG4ucmVhZFVpbnQzMikoZSx0KzgpLHk6KDAsbi5yZWFkVWludDMyKShlLHQrMTIpLGNvbWJpbmF0aW9uT3BlcmF0b3I6NyZlW3QrMTZdfX1jb25zdCBnPTE3O2Z1bmN0aW9uIHByb2Nlc3NTZWdtZW50KGUsdCl7Y29uc3QgYT1lLmhlYWRlcixyPWUuZGF0YSxpPWUuZW5kO2xldCBzLG8sYyxsLGg9ZS5zdGFydDtzd2l0Y2goYS50eXBlKXtjYXNlIDA6Y29uc3QgZT17fSx0PSgwLG4ucmVhZFVpbnQxNikocixoKTtlLmh1ZmZtYW49ISEoMSZ0KTtlLnJlZmluZW1lbnQ9ISEoMiZ0KTtlLmh1ZmZtYW5ESFNlbGVjdG9yPXQ+PjImMztlLmh1ZmZtYW5EV1NlbGVjdG9yPXQ+PjQmMztlLmJpdG1hcFNpemVTZWxlY3Rvcj10Pj42JjE7ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yPXQ+PjcmMTtlLmJpdG1hcENvZGluZ0NvbnRleHRVc2VkPSEhKDI1NiZ0KTtlLmJpdG1hcENvZGluZ0NvbnRleHRSZXRhaW5lZD0hISg1MTImdCk7ZS50ZW1wbGF0ZT10Pj4xMCYzO2UucmVmaW5lbWVudFRlbXBsYXRlPXQ+PjEyJjE7aCs9MjtpZighZS5odWZmbWFuKXtsPTA9PT1lLnRlbXBsYXRlPzQ6MTtvPVtdO2ZvcihjPTA7YzxsO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfWUuYXQ9b31pZihlLnJlZmluZW1lbnQmJiFlLnJlZmluZW1lbnRUZW1wbGF0ZSl7bz1bXTtmb3IoYz0wO2M8MjtjKyspe28ucHVzaCh7eDooMCxuLnJlYWRJbnQ4KShyLGgpLHk6KDAsbi5yZWFkSW50OCkocixoKzEpfSk7aCs9Mn1lLnJlZmluZW1lbnRBdD1vfWUubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7ZS5udW1iZXJPZk5ld1N5bWJvbHM9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7cz1bZSxhLm51bWJlcixhLnJlZmVycmVkVG8scixoLGldO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y29uc3QgdT17fTt1LmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihyLGgpO2grPWc7Y29uc3QgZD0oMCxuLnJlYWRVaW50MTYpKHIsaCk7aCs9Mjt1Lmh1ZmZtYW49ISEoMSZkKTt1LnJlZmluZW1lbnQ9ISEoMiZkKTt1LmxvZ1N0cmlwU2l6ZT1kPj4yJjM7dS5zdHJpcFNpemU9MTw8dS5sb2dTdHJpcFNpemU7dS5yZWZlcmVuY2VDb3JuZXI9ZD4+NCYzO3UudHJhbnNwb3NlZD0hISg2NCZkKTt1LmNvbWJpbmF0aW9uT3BlcmF0b3I9ZD4+NyYzO3UuZGVmYXVsdFBpeGVsVmFsdWU9ZD4+OSYxO3UuZHNPZmZzZXQ9ZDw8MTc+PjI3O3UucmVmaW5lbWVudFRlbXBsYXRlPWQ+PjE1JjE7aWYodS5odWZmbWFuKXtjb25zdCBlPSgwLG4ucmVhZFVpbnQxNikocixoKTtoKz0yO3UuaHVmZm1hbkZTPTMmZTt1Lmh1ZmZtYW5EUz1lPj4yJjM7dS5odWZmbWFuRFQ9ZT4+NCYzO3UuaHVmZm1hblJlZmluZW1lbnREVz1lPj42JjM7dS5odWZmbWFuUmVmaW5lbWVudERIPWU+PjgmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50RFg9ZT4+MTAmMzt1Lmh1ZmZtYW5SZWZpbmVtZW50RFk9ZT4+MTImMzt1Lmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmUpfWlmKHUucmVmaW5lbWVudCYmIXUucmVmaW5lbWVudFRlbXBsYXRlKXtvPVtdO2ZvcihjPTA7YzwyO2MrKyl7by5wdXNoKHt4OigwLG4ucmVhZEludDgpKHIsaCkseTooMCxuLnJlYWRJbnQ4KShyLGgrMSl9KTtoKz0yfXUucmVmaW5lbWVudEF0PW99dS5udW1iZXJPZlN5bWJvbEluc3RhbmNlcz0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDtzPVt1LGEucmVmZXJyZWRUbyxyLGgsaV07YnJlYWs7Y2FzZSAxNjpjb25zdCBmPXt9LHA9cltoKytdO2YubW1yPSEhKDEmcCk7Zi50ZW1wbGF0ZT1wPj4xJjM7Zi5wYXR0ZXJuV2lkdGg9cltoKytdO2YucGF0dGVybkhlaWdodD1yW2grK107Zi5tYXhQYXR0ZXJuSW5kZXg9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7cz1bZixhLm51bWJlcixyLGgsaV07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOmNvbnN0IG09e307bS5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24ocixoKTtoKz1nO2NvbnN0IGI9cltoKytdO20ubW1yPSEhKDEmYik7bS50ZW1wbGF0ZT1iPj4xJjM7bS5lbmFibGVTa2lwPSEhKDgmYik7bS5jb21iaW5hdGlvbk9wZXJhdG9yPWI+PjQmNzttLmRlZmF1bHRQaXhlbFZhbHVlPWI+PjcmMTttLmdyaWRXaWR0aD0oMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRIZWlnaHQ9KDAsbi5yZWFkVWludDMyKShyLGgpO2grPTQ7bS5ncmlkT2Zmc2V0WD00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikocixoKTtoKz00O20uZ3JpZE9mZnNldFk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKHIsaCk7aCs9NDttLmdyaWRWZWN0b3JYPSgwLG4ucmVhZFVpbnQxNikocixoKTtoKz0yO20uZ3JpZFZlY3Rvclk9KDAsbi5yZWFkVWludDE2KShyLGgpO2grPTI7cz1bbSxhLnJlZmVycmVkVG8scixoLGldO2JyZWFrO2Nhc2UgMzg6Y2FzZSAzOTpjb25zdCB5PXt9O3kuaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKHIsaCk7aCs9Zztjb25zdCB3PXJbaCsrXTt5Lm1tcj0hISgxJncpO3kudGVtcGxhdGU9dz4+MSYzO3kucHJlZGljdGlvbj0hISg4JncpO2lmKCF5Lm1tcil7bD0wPT09eS50ZW1wbGF0ZT80OjE7bz1bXTtmb3IoYz0wO2M8bDtjKyspe28ucHVzaCh7eDooMCxuLnJlYWRJbnQ4KShyLGgpLHk6KDAsbi5yZWFkSW50OCkocixoKzEpfSk7aCs9Mn15LmF0PW99cz1beSxyLGgsaV07YnJlYWs7Y2FzZSA0ODpjb25zdCBTPXt3aWR0aDooMCxuLnJlYWRVaW50MzIpKHIsaCksaGVpZ2h0OigwLG4ucmVhZFVpbnQzMikocixoKzQpLHJlc29sdXRpb25YOigwLG4ucmVhZFVpbnQzMikocixoKzgpLHJlc29sdXRpb25ZOigwLG4ucmVhZFVpbnQzMikocixoKzEyKX07NDI5NDk2NzI5NT09PVMuaGVpZ2h0JiZkZWxldGUgUy5oZWlnaHQ7Y29uc3QgeD1yW2grMTZdOygwLG4ucmVhZFVpbnQxNikocixoKzE3KTtTLmxvc3NsZXNzPSEhKDEmeCk7Uy5yZWZpbmVtZW50PSEhKDImeCk7Uy5kZWZhdWx0UGl4ZWxWYWx1ZT14Pj4yJjE7Uy5jb21iaW5hdGlvbk9wZXJhdG9yPXg+PjMmMztTLnJlcXVpcmVzQnVmZmVyPSEhKDMyJngpO1MuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlPSEhKDY0JngpO3M9W1NdO2JyZWFrO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNjI6YnJlYWs7Y2FzZSA1MzpzPVthLm51bWJlcixyLGgsaV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgc2VnbWVudCB0eXBlICR7YS50eXBlTmFtZX0oJHthLnR5cGV9KSBpcyBub3QgaW1wbGVtZW50ZWRgKX1jb25zdCB1PSJvbiIrYS50eXBlTmFtZTt1IGluIHQmJnRbdV0uYXBwbHkodCxzKX1mdW5jdGlvbiBwcm9jZXNzU2VnbWVudHMoZSx0KXtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspcHJvY2Vzc1NlZ21lbnQoZVthXSx0KX1jbGFzcyBTaW1wbGVTZWdtZW50VmlzaXRvcntvblBhZ2VJbmZvcm1hdGlvbihlKXt0aGlzLmN1cnJlbnRQYWdlSW5mbz1lO2NvbnN0IHQ9ZS53aWR0aCs3Pj4zLGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJmEuZmlsbCgyNTUpO3RoaXMuYnVmZmVyPWF9ZHJhd0JpdG1hcChlLHQpe2NvbnN0IGE9dGhpcy5jdXJyZW50UGFnZUluZm8scj1lLndpZHRoLG49ZS5oZWlnaHQsaT1hLndpZHRoKzc+PjMscz1hLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6YS5jb21iaW5hdGlvbk9wZXJhdG9yLG89dGhpcy5idWZmZXIsYz0xMjg+Pig3JmUueCk7bGV0IGwsaCx1LGQsZj1lLnkqaSsoZS54Pj4zKTtzd2l0Y2gocyl7Y2FzZSAwOmZvcihsPTA7bDxuO2wrKyl7dT1jO2Q9Zjtmb3IoaD0wO2g8cjtoKyspe3RbbF1baF0mJihvW2RdfD11KTt1Pj49MTtpZighdSl7dT0xMjg7ZCsrfX1mKz1pfWJyZWFrO2Nhc2UgMjpmb3IobD0wO2w8bjtsKyspe3U9YztkPWY7Zm9yKGg9MDtoPHI7aCsrKXt0W2xdW2hdJiYob1tkXV49dSk7dT4+PTE7aWYoIXUpe3U9MTI4O2QrK319Zis9aX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke3N9IGlzIG5vdCBzdXBwb3J0ZWRgKX19b25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKGUsdCxhLHIpe2NvbnN0IG49ZS5pbmZvLGk9bmV3IERlY29kaW5nQ29udGV4dCh0LGEscikscz1kZWNvZGVCaXRtYXAoZS5tbXIsbi53aWR0aCxuLmhlaWdodCxlLnRlbXBsYXRlLGUucHJlZGljdGlvbixudWxsLGUuYXQsaSk7dGhpcy5kcmF3Qml0bWFwKG4scyl9b25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiguLi5hcmd1bWVudHMpfW9uU3ltYm9sRGljdGlvbmFyeShlLHQsYSxyLGkscyl7bGV0IG8sYztpZihlLmh1ZmZtYW4pe289ZnVuY3Rpb24gZ2V0U3ltYm9sRGljdGlvbmFyeUh1ZmZtYW5UYWJsZXMoZSx0LGEpe2xldCByLG4saSxzLG89MDtzd2l0Y2goZS5odWZmbWFuREhTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTpyPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuREhTZWxlY3Rvcis0KTticmVhaztjYXNlIDM6cj1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTpuPWdldFN0YW5kYXJkVGFibGUoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6bj1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFcgc2VsZWN0b3IiKX1pZihlLmJpdG1hcFNpemVTZWxlY3Rvcil7aT1nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpO28rK31lbHNlIGk9Z2V0U3RhbmRhcmRUYWJsZSgxKTtzPWUuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3Rvcj9nZXRDdXN0b21IdWZmbWFuVGFibGUobyx0LGEpOmdldFN0YW5kYXJkVGFibGUoMSk7cmV0dXJue3RhYmxlRGVsdGFIZWlnaHQ6cix0YWJsZURlbHRhV2lkdGg6bix0YWJsZUJpdG1hcFNpemU6aSx0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczpzfX0oZSxhLHRoaXMuY3VzdG9tVGFibGVzKTtjPW5ldyBSZWFkZXIocixpLHMpfWxldCBsPXRoaXMuc3ltYm9scztsfHwodGhpcy5zeW1ib2xzPWw9e30pO2NvbnN0IGg9W107Zm9yKGNvbnN0IGUgb2YgYSl7Y29uc3QgdD1sW2VdO3QmJmgucHVzaCguLi50KX1jb25zdCB1PW5ldyBEZWNvZGluZ0NvbnRleHQocixpLHMpO2xbdF09ZnVuY3Rpb24gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShlLHQsYSxyLGkscyxvLGMsbCxoLHUsZCl7aWYoZSYmdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigic3ltYm9sIHJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCBmPVtdO2xldCBnPTAscD0oMCxuLmxvZzIpKGEubGVuZ3RoK3IpO2NvbnN0IG09dS5kZWNvZGVyLGI9dS5jb250ZXh0Q2FjaGU7bGV0IHksdztpZihlKXt5PWdldFN0YW5kYXJkVGFibGUoMSk7dz1bXTtwPU1hdGgubWF4KHAsMSl9Zm9yKDtmLmxlbmd0aDxyOyl7Zys9ZT9zLnRhYmxlRGVsdGFIZWlnaHQuZGVjb2RlKGQpOmRlY29kZUludGVnZXIoYiwiSUFESCIsbSk7bGV0IHI9MCxuPTA7Y29uc3QgaT1lP3cubGVuZ3RoOjA7Zm9yKDs7KXtjb25zdCBpPWU/cy50YWJsZURlbHRhV2lkdGguZGVjb2RlKGQpOmRlY29kZUludGVnZXIoYiwiSUFEVyIsbSk7aWYobnVsbD09PWkpYnJlYWs7cis9aTtuKz1yO2xldCB5O2lmKHQpe2NvbnN0IG49ZGVjb2RlSW50ZWdlcihiLCJJQUFJIixtKTtpZihuPjEpeT1kZWNvZGVUZXh0UmVnaW9uKGUsdCxyLGcsMCxuLDEsYS5jb25jYXQoZikscCwwLDAsMSwwLHMsbCxoLHUsMCxkKTtlbHNle2NvbnN0IGU9ZGVjb2RlSUFJRChiLG0scCksdD1kZWNvZGVJbnRlZ2VyKGIsIklBUkRYIixtKSxuPWRlY29kZUludGVnZXIoYiwiSUFSRFkiLG0pO3k9ZGVjb2RlUmVmaW5lbWVudChyLGcsbCxlPGEubGVuZ3RoP2FbZV06ZltlLWEubGVuZ3RoXSx0LG4sITEsaCx1KX1mLnB1c2goeSl9ZWxzZSBpZihlKXcucHVzaChyKTtlbHNle3k9ZGVjb2RlQml0bWFwKCExLHIsZyxvLCExLG51bGwsYyx1KTtmLnB1c2goeSl9fWlmKGUmJiF0KXtjb25zdCBlPXMudGFibGVCaXRtYXBTaXplLmRlY29kZShkKTtkLmJ5dGVBbGlnbigpO2xldCB0O2lmKDA9PT1lKXQ9cmVhZFVuY29tcHJlc3NlZEJpdG1hcChkLG4sZyk7ZWxzZXtjb25zdCBhPWQuZW5kLHI9ZC5wb3NpdGlvbitlO2QuZW5kPXI7dD1kZWNvZGVNTVJCaXRtYXAoZCxuLGcsITEpO2QuZW5kPWE7ZC5wb3NpdGlvbj1yfWNvbnN0IGE9dy5sZW5ndGg7aWYoaT09PWEtMSlmLnB1c2godCk7ZWxzZXtsZXQgZSxyLG4scyxvLGM9MDtmb3IoZT1pO2U8YTtlKyspe3M9d1tlXTtuPWMrcztvPVtdO2ZvcihyPTA7cjxnO3IrKylvLnB1c2godFtyXS5zdWJhcnJheShjLG4pKTtmLnB1c2gobyk7Yz1ufX19fWNvbnN0IFM9W10seD1bXTtsZXQgQyx2LGs9ITE7Y29uc3QgTz1hLmxlbmd0aCtyO2Zvcig7eC5sZW5ndGg8Tzspe2xldCB0PWU/eS5kZWNvZGUoZCk6ZGVjb2RlSW50ZWdlcihiLCJJQUVYIixtKTtmb3IoO3QtLTspeC5wdXNoKGspO2s9IWt9Zm9yKEM9MCx2PWEubGVuZ3RoO0M8djtDKyspeFtDXSYmUy5wdXNoKGFbQ10pO2ZvcihsZXQgZT0wO2U8cjtDKyssZSsrKXhbQ10mJlMucHVzaChmW2VdKTtyZXR1cm4gU30oZS5odWZmbWFuLGUucmVmaW5lbWVudCxoLGUubnVtYmVyT2ZOZXdTeW1ib2xzLGUubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsbyxlLnRlbXBsYXRlLGUuYXQsZS5yZWZpbmVtZW50VGVtcGxhdGUsZS5yZWZpbmVtZW50QXQsdSxjKX1vbkltbWVkaWF0ZVRleHRSZWdpb24oZSx0LGEscixpKXtjb25zdCBzPWUuaW5mbztsZXQgbyxjO2NvbnN0IGw9dGhpcy5zeW1ib2xzLGg9W107Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD1sW2VdO3QmJmgucHVzaCguLi50KX1jb25zdCB1PSgwLG4ubG9nMikoaC5sZW5ndGgpO2lmKGUuaHVmZm1hbil7Yz1uZXcgUmVhZGVyKGEscixpKTtvPWZ1bmN0aW9uIGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKGUsdCxhLHIsbil7Y29uc3QgaT1bXTtmb3IobGV0IGU9MDtlPD0zNDtlKyspe2NvbnN0IHQ9bi5yZWFkQml0cyg0KTtpLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLHQsMCwwXSkpfWNvbnN0IHM9bmV3IEh1ZmZtYW5UYWJsZShpLCExKTtpLmxlbmd0aD0wO2ZvcihsZXQgZT0wO2U8cjspe2NvbnN0IHQ9cy5kZWNvZGUobik7aWYodD49MzIpe2xldCBhLHIscztzd2l0Y2godCl7Y2FzZSAzMjppZigwPT09ZSl0aHJvdyBuZXcgSmJpZzJFcnJvcigibm8gcHJldmlvdXMgdmFsdWUgaW4gc3ltYm9sIElEIHRhYmxlIik7cj1uLnJlYWRCaXRzKDIpKzM7YT1pW2UtMV0ucHJlZml4TGVuZ3RoO2JyZWFrO2Nhc2UgMzM6cj1uLnJlYWRCaXRzKDMpKzM7YT0wO2JyZWFrO2Nhc2UgMzQ6cj1uLnJlYWRCaXRzKDcpKzExO2E9MDticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIGNvZGUgbGVuZ3RoIGluIHN5bWJvbCBJRCB0YWJsZSIpfWZvcihzPTA7czxyO3MrKyl7aS5wdXNoKG5ldyBIdWZmbWFuTGluZShbZSxhLDAsMF0pKTtlKyt9fWVsc2V7aS5wdXNoKG5ldyBIdWZmbWFuTGluZShbZSx0LDAsMF0pKTtlKyt9fW4uYnl0ZUFsaWduKCk7Y29uc3Qgbz1uZXcgSHVmZm1hblRhYmxlKGksITEpO2xldCBjLGwsaCx1PTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOmM9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6Yz1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRlMgc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFMpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmw9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EUys4KTticmVhaztjYXNlIDM6bD1nZXRDdXN0b21IdWZmbWFuVGFibGUodSx0LGEpO3UrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFQpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmg9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EVCsxMSk7YnJlYWs7Y2FzZSAzOmg9Z2V0Q3VzdG9tSHVmZm1hblRhYmxlKHUsdCxhKTt1Kys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyBKYmlnMkVycm9yKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6byx0YWJsZUZpcnN0UzpjLHRhYmxlRGVsdGFTOmwsdGFibGVEZWx0YVQ6aH19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxoLmxlbmd0aCxjKX1jb25zdCBkPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLGkpLGY9ZGVjb2RlVGV4dFJlZ2lvbihlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LHMud2lkdGgscy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGgsdSxlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbyxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxkLGUubG9nU3RyaXBTaXplLGMpO3RoaXMuZHJhd0JpdG1hcChzLGYpfW9uSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uKCl7dGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24oLi4uYXJndW1lbnRzKX1vblBhdHRlcm5EaWN0aW9uYXJ5KGUsdCxhLHIsbil7bGV0IGk9dGhpcy5wYXR0ZXJucztpfHwodGhpcy5wYXR0ZXJucz1pPXt9KTtjb25zdCBzPW5ldyBEZWNvZGluZ0NvbnRleHQoYSxyLG4pO2lbdF09ZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkoZSx0LGEscixuLGkpe2NvbnN0IHM9W107aWYoIWUpe3MucHVzaCh7eDotdCx5OjB9KTswPT09biYmcy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pfWNvbnN0IG89ZGVjb2RlQml0bWFwKGUsKHIrMSkqdCxhLG4sITEsbnVsbCxzLGkpLGM9W107Zm9yKGxldCBlPTA7ZTw9cjtlKyspe2NvbnN0IHI9W10sbj10KmUsaT1uK3Q7Zm9yKGxldCBlPTA7ZTxhO2UrKylyLnB1c2gob1tlXS5zdWJhcnJheShuLGkpKTtjLnB1c2gocil9cmV0dXJuIGN9KGUubW1yLGUucGF0dGVybldpZHRoLGUucGF0dGVybkhlaWdodCxlLm1heFBhdHRlcm5JbmRleCxlLnRlbXBsYXRlLHMpfW9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24oZSx0LGEscixpKXtjb25zdCBzPXRoaXMucGF0dGVybnNbdFswXV0sbz1lLmluZm8sYz1uZXcgRGVjb2RpbmdDb250ZXh0KGEscixpKSxsPWZ1bmN0aW9uIGRlY29kZUhhbGZ0b25lUmVnaW9uKGUsdCxhLHIsaSxzLG8sYyxsLGgsdSxkLGYsZyxwKXtpZihvKXRocm93IG5ldyBKYmlnMkVycm9yKCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09Yyl0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgIiR7Y30iIGlzIG5vdCBzdXBwb3J0ZWQgaW4gaGFsZnRvbmUgcmVnaW9uYCk7Y29uc3QgbT1bXTtsZXQgYix5LHc7Zm9yKGI9MDtiPGk7YisrKXt3PW5ldyBVaW50OEFycmF5KHIpO2lmKHMpZm9yKHk9MDt5PHI7eSsrKXdbeV09czttLnB1c2godyl9Y29uc3QgUz10Lmxlbmd0aCx4PXRbMF0sQz14WzBdLmxlbmd0aCx2PXgubGVuZ3RoLGs9KDAsbi5sb2cyKShTKSxPPVtdO2lmKCFlKXtPLnB1c2goe3g6YTw9MT8zOjIseTotMX0pOzA9PT1hJiZPLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSl9Y29uc3QgVD1bXTtsZXQgTSxFLEQsUixOLEwsJCxfLGosVSxYO2UmJihNPW5ldyBSZWFkZXIocC5kYXRhLHAuc3RhcnQscC5lbmQpKTtmb3IoYj1rLTE7Yj49MDtiLS0pe0U9ZT9kZWNvZGVNTVJCaXRtYXAoTSxsLGgsITApOmRlY29kZUJpdG1hcCghMSxsLGgsYSwhMSxudWxsLE8scCk7VFtiXT1FfWZvcihEPTA7RDxoO0QrKylmb3IoUj0wO1I8bDtSKyspe049MDtMPTA7Zm9yKHk9ay0xO3k+PTA7eS0tKXtOXj1UW3ldW0RdW1JdO0x8PU48PHl9JD10W0xdO189dStEKmcrUipmPj44O2o9ZCtEKmYtUipnPj44O2lmKF8+PTAmJl8rQzw9ciYmaj49MCYmait2PD1pKWZvcihiPTA7Yjx2O2IrKyl7WD1tW2orYl07VT0kW2JdO2Zvcih5PTA7eTxDO3krKylYW18reV18PVVbeV19ZWxzZXtsZXQgZSx0O2ZvcihiPTA7Yjx2O2IrKyl7dD1qK2I7aWYoISh0PDB8fHQ+PWkpKXtYPW1bdF07VT0kW2JdO2Zvcih5PTA7eTxDO3krKyl7ZT1fK3k7ZT49MCYmZTxyJiYoWFtlXXw9VVt5XSl9fX19fXJldHVybiBtfShlLm1tcixzLGUudGVtcGxhdGUsby53aWR0aCxvLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUuZW5hYmxlU2tpcCxlLmNvbWJpbmF0aW9uT3BlcmF0b3IsZS5ncmlkV2lkdGgsZS5ncmlkSGVpZ2h0LGUuZ3JpZE9mZnNldFgsZS5ncmlkT2Zmc2V0WSxlLmdyaWRWZWN0b3JYLGUuZ3JpZFZlY3RvclksYyk7dGhpcy5kcmF3Qml0bWFwKG8sbCl9b25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uKCl7dGhpcy5vbkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uKC4uLmFyZ3VtZW50cyl9b25UYWJsZXMoZSx0LGEscil7bGV0IGk9dGhpcy5jdXN0b21UYWJsZXM7aXx8KHRoaXMuY3VzdG9tVGFibGVzPWk9e30pO2lbZV09ZnVuY3Rpb24gZGVjb2RlVGFibGVzU2VnbWVudChlLHQsYSl7Y29uc3Qgcj1lW3RdLGk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKGUsdCsxKSxzPTQyOTQ5NjcyOTUmKDAsbi5yZWFkVWludDMyKShlLHQrNSksbz1uZXcgUmVhZGVyKGUsdCs5LGEpLGM9MSsocj4+MSY3KSxsPTErKHI+PjQmNyksaD1bXTtsZXQgdSxkLGY9aTtkb3t1PW8ucmVhZEJpdHMoYyk7ZD1vLnJlYWRCaXRzKGwpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW2YsdSxkLDBdKSk7Zis9MTw8ZH13aGlsZShmPHMpO3U9by5yZWFkQml0cyhjKTtoLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLTEsdSwzMiwwLCJsb3dlciJdKSk7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW3MsdSwzMiwwXSkpO2lmKDEmcil7dT1vLnJlYWRCaXRzKGMpO2gucHVzaChuZXcgSHVmZm1hbkxpbmUoW3UsMF0pKX1yZXR1cm4gbmV3IEh1ZmZtYW5UYWJsZShoLCExKX0odCxhLHIpfX1jbGFzcyBIdWZmbWFuTGluZXtjb25zdHJ1Y3RvcihlKXtpZigyPT09ZS5sZW5ndGgpe3RoaXMuaXNPT0I9ITA7dGhpcy5yYW5nZUxvdz0wO3RoaXMucHJlZml4TGVuZ3RoPWVbMF07dGhpcy5yYW5nZUxlbmd0aD0wO3RoaXMucHJlZml4Q29kZT1lWzFdO3RoaXMuaXNMb3dlclJhbmdlPSExfWVsc2V7dGhpcy5pc09PQj0hMTt0aGlzLnJhbmdlTG93PWVbMF07dGhpcy5wcmVmaXhMZW5ndGg9ZVsxXTt0aGlzLnJhbmdlTGVuZ3RoPWVbMl07dGhpcy5wcmVmaXhDb2RlPWVbM107dGhpcy5pc0xvd2VyUmFuZ2U9Imxvd2VyIj09PWVbNF19fX1jbGFzcyBIdWZmbWFuVHJlZU5vZGV7Y29uc3RydWN0b3IoZSl7dGhpcy5jaGlsZHJlbj1bXTtpZihlKXt0aGlzLmlzTGVhZj0hMDt0aGlzLnJhbmdlTGVuZ3RoPWUucmFuZ2VMZW5ndGg7dGhpcy5yYW5nZUxvdz1lLnJhbmdlTG93O3RoaXMuaXNMb3dlclJhbmdlPWUuaXNMb3dlclJhbmdlO3RoaXMuaXNPT0I9ZS5pc09PQn1lbHNlIHRoaXMuaXNMZWFmPSExfWJ1aWxkVHJlZShlLHQpe2NvbnN0IGE9ZS5wcmVmaXhDb2RlPj50JjE7aWYodDw9MCl0aGlzLmNoaWxkcmVuW2FdPW5ldyBIdWZmbWFuVHJlZU5vZGUoZSk7ZWxzZXtsZXQgcj10aGlzLmNoaWxkcmVuW2FdO3J8fCh0aGlzLmNoaWxkcmVuW2FdPXI9bmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKSk7ci5idWlsZFRyZWUoZSx0LTEpfX1kZWNvZGVOb2RlKGUpe2lmKHRoaXMuaXNMZWFmKXtpZih0aGlzLmlzT09CKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5yZWFkQml0cyh0aGlzLnJhbmdlTGVuZ3RoKTtyZXR1cm4gdGhpcy5yYW5nZUxvdysodGhpcy5pc0xvd2VyUmFuZ2U/LXQ6dCl9Y29uc3QgdD10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighdCl0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gdC5kZWNvZGVOb2RlKGUpfX1jbGFzcyBIdWZmbWFuVGFibGV7Y29uc3RydWN0b3IoZSx0KXt0fHx0aGlzLmFzc2lnblByZWZpeENvZGVzKGUpO3RoaXMucm9vdE5vZGU9bmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtmb3IobGV0IHQ9MCxhPWUubGVuZ3RoO3Q8YTt0Kyspe2NvbnN0IGE9ZVt0XTthLnByZWZpeExlbmd0aD4wJiZ0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShhLGEucHJlZml4TGVuZ3RoLTEpfX1kZWNvZGUoZSl7cmV0dXJuIHRoaXMucm9vdE5vZGUuZGVjb2RlTm9kZShlKX1hc3NpZ25QcmVmaXhDb2RlcyhlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhPTA7Zm9yKGxldCByPTA7cjx0O3IrKylhPU1hdGgubWF4KGEsZVtyXS5wcmVmaXhMZW5ndGgpO2NvbnN0IHI9bmV3IFVpbnQzMkFycmF5KGErMSk7Zm9yKGxldCBhPTA7YTx0O2ErKylyW2VbYV0ucHJlZml4TGVuZ3RoXSsrO2xldCBuLGkscyxvPTEsYz0wO3JbMF09MDtmb3IoO288PWE7KXtjPWMrcltvLTFdPDwxO249YztpPTA7Zm9yKDtpPHQ7KXtzPWVbaV07aWYocy5wcmVmaXhMZW5ndGg9PT1vKXtzLnByZWZpeENvZGU9bjtuKyt9aSsrfW8rK319fWNvbnN0IHA9e307ZnVuY3Rpb24gZ2V0U3RhbmRhcmRUYWJsZShlKXtsZXQgdCxhPXBbZV07aWYoYSlyZXR1cm4gYTtzd2l0Y2goZSl7Y2FzZSAxOnQ9W1swLDEsNCwwXSxbMTYsMiw4LDJdLFsyNzIsMywxNiw2XSxbNjU4MDgsMywzMiw3XV07YnJlYWs7Y2FzZSAyOnQ9W1swLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWzc1LDYsMzIsNjJdLFs2LDYzXV07YnJlYWs7Y2FzZSAzOnQ9W1stMjU2LDgsOCwyNTRdLFswLDEsMCwwXSxbMSwyLDAsMl0sWzIsMywwLDZdLFszLDQsMywxNF0sWzExLDUsNiwzMF0sWy0yNTcsOCwzMiwyNTUsImxvd2VyIl0sWzc1LDcsMzIsMTI2XSxbNiw2Ml1dO2JyZWFrO2Nhc2UgNDp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFs3Niw1LDMyLDMxXV07YnJlYWs7Y2FzZSA1OnQ9W1stMjU1LDcsOCwxMjZdLFsxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWy0yNTYsNywzMiwxMjcsImxvd2VyIl0sWzc2LDYsMzIsNjJdXTticmVhaztjYXNlIDY6dD1bWy0yMDQ4LDUsMTAsMjhdLFstMTAyNCw0LDksOF0sWy01MTIsNCw4LDldLFstMjU2LDQsNywxMF0sWy0xMjgsNSw2LDI5XSxbLTY0LDUsNSwzMF0sWy0zMiw0LDUsMTFdLFswLDIsNywwXSxbMTI4LDMsNywyXSxbMjU2LDMsOCwzXSxbNTEyLDQsOSwxMl0sWzEwMjQsNCwxMCwxM10sWy0yMDQ5LDYsMzIsNjIsImxvd2VyIl0sWzIwNDgsNiwzMiw2M11dO2JyZWFrO2Nhc2UgNzp0PVtbLTEwMjQsNCw5LDhdLFstNTEyLDMsOCwwXSxbLTI1Niw0LDcsOV0sWy0xMjgsNSw2LDI2XSxbLTY0LDUsNSwyN10sWy0zMiw0LDUsMTBdLFswLDQsNSwxMV0sWzMyLDUsNSwyOF0sWzY0LDUsNiwyOV0sWzEyOCw0LDcsMTJdLFsyNTYsMyw4LDFdLFs1MTIsMyw5LDJdLFsxMDI0LDMsMTAsM10sWy0xMDI1LDUsMzIsMzAsImxvd2VyIl0sWzIwNDgsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgODp0PVtbLTE1LDgsMywyNTJdLFstNyw5LDEsNTA4XSxbLTUsOCwxLDI1M10sWy0zLDksMCw1MDldLFstMiw3LDAsMTI0XSxbLTEsNCwwLDEwXSxbMCwyLDEsMF0sWzIsNSwwLDI2XSxbMyw2LDAsNThdLFs0LDMsNCw0XSxbMjAsNiwxLDU5XSxbMjIsNCw0LDExXSxbMzgsNCw1LDEyXSxbNzAsNSw2LDI3XSxbMTM0LDUsNywyOF0sWzI2Miw2LDcsNjBdLFszOTAsNyw4LDEyNV0sWzY0Niw2LDEwLDYxXSxbLTE2LDksMzIsNTEwLCJsb3dlciJdLFsxNjcwLDksMzIsNTExXSxbMiwxXV07YnJlYWs7Y2FzZSA5OnQ9W1stMzEsOCw0LDI1Ml0sWy0xNSw5LDIsNTA4XSxbLTExLDgsMiwyNTNdLFstNyw5LDEsNTA5XSxbLTUsNywxLDEyNF0sWy0zLDQsMSwxMF0sWy0xLDMsMSwyXSxbMSwzLDEsM10sWzMsNSwxLDI2XSxbNSw2LDEsNThdLFs3LDMsNSw0XSxbMzksNiwyLDU5XSxbNDMsNCw1LDExXSxbNzUsNCw2LDEyXSxbMTM5LDUsNywyN10sWzI2Nyw1LDgsMjhdLFs1MjMsNiw4LDYwXSxbNzc5LDcsOSwxMjVdLFsxMjkxLDYsMTEsNjFdLFstMzIsOSwzMiw1MTAsImxvd2VyIl0sWzMzMzksOSwzMiw1MTFdLFsyLDBdXTticmVhaztjYXNlIDEwOnQ9W1stMjEsNyw0LDEyMl0sWy01LDgsMCwyNTJdLFstNCw3LDAsMTIzXSxbLTMsNSwwLDI0XSxbLTIsMiwyLDBdLFsyLDUsMCwyNV0sWzMsNiwwLDU0XSxbNCw3LDAsMTI0XSxbNSw4LDAsMjUzXSxbNiwyLDYsMV0sWzcwLDUsNSwyNl0sWzEwMiw2LDUsNTVdLFsxMzQsNiw2LDU2XSxbMTk4LDYsNyw1N10sWzMyNiw2LDgsNThdLFs1ODIsNiw5LDU5XSxbMTA5NCw2LDEwLDYwXSxbMjExOCw3LDExLDEyNV0sWy0yMiw4LDMyLDI1NCwibG93ZXIiXSxbNDE2Niw4LDMyLDI1NV0sWzIsMl1dO2JyZWFrO2Nhc2UgMTE6dD1bWzEsMSwwLDBdLFsyLDIsMSwyXSxbNCw0LDAsMTJdLFs1LDQsMSwxM10sWzcsNSwxLDI4XSxbOSw1LDIsMjldLFsxMyw2LDIsNjBdLFsxNyw3LDIsMTIyXSxbMjEsNywzLDEyM10sWzI5LDcsNCwxMjRdLFs0NSw3LDUsMTI1XSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTI6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDEsNl0sWzUsNSwwLDI4XSxbNiw1LDEsMjldLFs4LDYsMSw2MF0sWzEwLDcsMCwxMjJdLFsxMSw3LDEsMTIzXSxbMTMsNywyLDEyNF0sWzE3LDcsMywxMjVdLFsyNSw3LDQsMTI2XSxbNDEsOCw1LDI1NF0sWzczLDgsMzIsMjU1XV07YnJlYWs7Y2FzZSAxMzp0PVtbMSwxLDAsMF0sWzIsMywwLDRdLFszLDQsMCwxMl0sWzQsNSwwLDI4XSxbNSw0LDEsMTNdLFs3LDMsMyw1XSxbMTUsNiwxLDU4XSxbMTcsNiwyLDU5XSxbMjEsNiwzLDYwXSxbMjksNiw0LDYxXSxbNDUsNiw1LDYyXSxbNzcsNyw2LDEyNl0sWzE0MSw3LDMyLDEyN11dO2JyZWFrO2Nhc2UgMTQ6dD1bWy0yLDMsMCw0XSxbLTEsMywwLDVdLFswLDEsMCwwXSxbMSwzLDAsNl0sWzIsMywwLDddXTticmVhaztjYXNlIDE1OnQ9W1stMjQsNyw0LDEyNF0sWy04LDYsMiw2MF0sWy00LDUsMSwyOF0sWy0yLDQsMCwxMl0sWy0xLDMsMCw0XSxbMCwxLDAsMF0sWzEsMywwLDVdLFsyLDQsMCwxM10sWzMsNSwxLDI5XSxbNSw2LDIsNjFdLFs5LDcsNCwxMjVdLFstMjUsNywzMiwxMjYsImxvd2VyIl0sWzI1LDcsMzIsMTI3XV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke2V9IGRvZXMgbm90IGV4aXN0YCl9Zm9yKGxldCBlPTAsYT10Lmxlbmd0aDtlPGE7ZSsrKXRbZV09bmV3IEh1ZmZtYW5MaW5lKHRbZV0pO2E9bmV3IEh1ZmZtYW5UYWJsZSh0LCEwKTtwW2VdPWE7cmV0dXJuIGF9Y2xhc3MgUmVhZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9YTt0aGlzLnBvc2l0aW9uPXQ7dGhpcy5zaGlmdD0tMTt0aGlzLmN1cnJlbnRCeXRlPTB9cmVhZEJpdCgpe2lmKHRoaXMuc2hpZnQ8MCl7aWYodGhpcy5wb3NpdGlvbj49dGhpcy5lbmQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0Iik7dGhpcy5jdXJyZW50Qnl0ZT10aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXTt0aGlzLnNoaWZ0PTd9Y29uc3QgZT10aGlzLmN1cnJlbnRCeXRlPj50aGlzLnNoaWZ0JjE7dGhpcy5zaGlmdC0tO3JldHVybiBlfXJlYWRCaXRzKGUpe2xldCB0LGE9MDtmb3IodD1lLTE7dD49MDt0LS0pYXw9dGhpcy5yZWFkQml0KCk8PHQ7cmV0dXJuIGF9Ynl0ZUFsaWduKCl7dGhpcy5zaGlmdD0tMX1uZXh0KCl7cmV0dXJuIHRoaXMucG9zaXRpb24+PXRoaXMuZW5kPy0xOnRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdfX1mdW5jdGlvbiBnZXRDdXN0b21IdWZmbWFuVGFibGUoZSx0LGEpe2xldCByPTA7Zm9yKGxldCBuPTAsaT10Lmxlbmd0aDtuPGk7bisrKXtjb25zdCBpPWFbdFtuXV07aWYoaSl7aWYoZT09PXIpcmV0dXJuIGk7cisrfX10aHJvdyBuZXcgSmJpZzJFcnJvcigiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIHJlYWRVbmNvbXByZXNzZWRCaXRtYXAoZSx0LGEpe2NvbnN0IHI9W107Zm9yKGxldCBuPTA7bjxhO24rKyl7Y29uc3QgYT1uZXcgVWludDhBcnJheSh0KTtyLnB1c2goYSk7Zm9yKGxldCByPTA7cjx0O3IrKylhW3JdPWUucmVhZEJpdCgpO2UuYnl0ZUFsaWduKCl9cmV0dXJuIHJ9ZnVuY3Rpb24gZGVjb2RlTU1SQml0bWFwKGUsdCxhLHIpe2NvbnN0IG49e0s6LTEsQ29sdW1uczp0LFJvd3M6YSxCbGFja0lzMTohMCxFbmRPZkJsb2NrOnJ9LGk9bmV3IHMuQ0NJVFRGYXhEZWNvZGVyKGUsbiksbz1bXTtsZXQgYyxsPSExO2ZvcihsZXQgZT0wO2U8YTtlKyspe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkodCk7by5wdXNoKGUpO2xldCBhPS0xO2ZvcihsZXQgcj0wO3I8dDtyKyspe2lmKGE8MCl7Yz1pLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09Yyl7Yz0wO2w9ITB9YT03fWVbcl09Yz4+YSYxO2EtLX19aWYociYmIWwpe2NvbnN0IGU9NTtmb3IobGV0IHQ9MDt0PGUmJi0xIT09aS5yZWFkTmV4dENoYXIoKTt0KyspO31yZXR1cm4gb310LkpiaWcySW1hZ2U9Y2xhc3MgSmJpZzJJbWFnZXtwYXJzZUNodW5rcyhlKXtyZXR1cm4gZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhlKXtjb25zdCB0PW5ldyBTaW1wbGVTZWdtZW50VmlzaXRvcjtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthXTtwcm9jZXNzU2VnbWVudHMocmVhZFNlZ21lbnRzKHt9LHIuZGF0YSxyLnN0YXJ0LHIuZW5kKSx0KX1yZXR1cm4gdC5idWZmZXJ9KGUpfXBhcnNlKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkOiBKYmlnMkltYWdlLnBhcnNlIil9fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7Y29uc3QgYT1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XTt0LkFyaXRobWV0aWNEZWNvZGVyPWNsYXNzIEFyaXRobWV0aWNEZWNvZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRhdGE9ZTt0aGlzLmJwPXQ7dGhpcy5kYXRhRW5kPWE7dGhpcy5jaGlnaD1lW3RdO3RoaXMuY2xvdz0wO3RoaXMuYnl0ZUluKCk7dGhpcy5jaGlnaD10aGlzLmNoaWdoPDw3JjY1NTM1fHRoaXMuY2xvdz4+OSYxMjc7dGhpcy5jbG93PXRoaXMuY2xvdzw8NyY2NTUzNTt0aGlzLmN0LT03O3RoaXMuYT0zMjc2OH1ieXRlSW4oKXtjb25zdCBlPXRoaXMuZGF0YTtsZXQgdD10aGlzLmJwO2lmKDI1NT09PWVbdF0paWYoZVt0KzFdPjE0Myl7dGhpcy5jbG93Kz02NTI4MDt0aGlzLmN0PTh9ZWxzZXt0Kys7dGhpcy5jbG93Kz1lW3RdPDw5O3RoaXMuY3Q9Nzt0aGlzLmJwPXR9ZWxzZXt0Kys7dGhpcy5jbG93Kz10PHRoaXMuZGF0YUVuZD9lW3RdPDw4OjY1MjgwO3RoaXMuY3Q9ODt0aGlzLmJwPXR9aWYodGhpcy5jbG93PjY1NTM1KXt0aGlzLmNoaWdoKz10aGlzLmNsb3c+PjE2O3RoaXMuY2xvdyY9NjU1MzV9fXJlYWRCaXQoZSx0KXtsZXQgcj1lW3RdPj4xLG49MSZlW3RdO2NvbnN0IGk9YVtyXSxzPWkucWU7bGV0IG8sYz10aGlzLmEtcztpZih0aGlzLmNoaWdoPHMpaWYoYzxzKXtjPXM7bz1uO3I9aS5ubXBzfWVsc2V7Yz1zO289MV5uOzE9PT1pLnN3aXRjaEZsYWcmJihuPW8pO3I9aS5ubHBzfWVsc2V7dGhpcy5jaGlnaC09cztpZigwIT0oMzI3NjgmYykpe3RoaXMuYT1jO3JldHVybiBufWlmKGM8cyl7bz0xXm47MT09PWkuc3dpdGNoRmxhZyYmKG49byk7cj1pLm5scHN9ZWxzZXtvPW47cj1pLm5tcHN9fWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpO2M8PD0xO3RoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjE7dGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNTt0aGlzLmN0LS19d2hpbGUoMD09KDMyNzY4JmMpKTt0aGlzLmE9YztlW3RdPXI8PDF8bjtyZXR1cm4gb319fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSnBlZ1N0cmVhbT12b2lkIDA7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO3ZhciByPWEoMTY5KSxuPWEoMTUxKSxpPWEoMTc4KSxzPWEoMTQ1KTtjbGFzcyBKcGVnU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe2xldCByO2Zvcig7LTEhPT0ocj1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PXIpe2Uuc2tpcCgtMSk7YnJlYWt9c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1hfWdldCBieXRlcygpe3JldHVybigwLHMuc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfWVuc3VyZUJ1ZmZlcihlKXt9cmVhZEJsb2NrKCl7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IGU9e2RlY29kZVRyYW5zZm9ybTp2b2lkIDAsY29sb3JUcmFuc2Zvcm06dm9pZCAwfSx0PXRoaXMuZGljdC5nZXRBcnJheSgiRCIsIkRlY29kZSIpO2lmKCh0aGlzLmZvcmNlUkdCQXx8dGhpcy5mb3JjZVJHQikmJkFycmF5LmlzQXJyYXkodCkpe2NvbnN0IGE9dGhpcy5kaWN0LmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpfHw4LHI9dC5sZW5ndGgsbj1uZXcgSW50MzJBcnJheShyKTtsZXQgaT0hMTtjb25zdCBzPSgxPDxhKS0xO2ZvcihsZXQgZT0wO2U8cjtlKz0yKXtuW2VdPTI1NioodFtlKzFdLXRbZV0pfDA7bltlKzFdPXRbZV0qc3wwOzI1Nj09PW5bZV0mJjA9PT1uW2UrMV18fChpPSEwKX1pJiYoZS5kZWNvZGVUcmFuc2Zvcm09bil9aWYodGhpcy5wYXJhbXMgaW5zdGFuY2VvZiBuLkRpY3Qpe2NvbnN0IHQ9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIodCkmJihlLmNvbG9yVHJhbnNmb3JtPXQpfWNvbnN0IGE9bmV3IGkuSnBlZ0ltYWdlKGUpO2EucGFyc2UodGhpcy5ieXRlcyk7Y29uc3Qgcj1hLmdldERhdGEoe3dpZHRoOnRoaXMuZHJhd1dpZHRoLGhlaWdodDp0aGlzLmRyYXdIZWlnaHQsZm9yY2VSR0JBOnRoaXMuZm9yY2VSR0JBLGZvcmNlUkdCOnRoaXMuZm9yY2VSR0IsaXNTb3VyY2VQREY6ITB9KTt0aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPXIubGVuZ3RoO3RoaXMuZW9mPSEwfX10LkpwZWdTdHJlYW09SnBlZ1N0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpwZWdJbWFnZT12b2lkIDA7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO2EoMTQwKTt2YXIgcj1hKDE0NSksbj1hKDE3OSksaT1hKDE1MCk7Y2xhc3MgSnBlZ0Vycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBKUEVHIGVycm9yOiAke2V9YCwiSnBlZ0Vycm9yIil9fWNsYXNzIEROTE1hcmtlckVycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiRE5MTWFya2VyRXJyb3IiKTt0aGlzLnNjYW5MaW5lcz10fX1jbGFzcyBFT0lNYXJrZXJFcnJvciBleHRlbmRzIHIuQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJFT0lNYXJrZXJFcnJvciIpfX1jb25zdCBzPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksbz00MDE3LGM9Nzk5LGw9MzQwNixoPTIyNzYsdT0xNTY3LGQ9Mzc4NCxmPTU3OTMsZz0yODk2O2Z1bmN0aW9uIGJ1aWxkSHVmZm1hblRhYmxlKGUsdCl7bGV0IGEscixuPTAsaT0xNjtmb3IoO2k+MCYmIWVbaS0xXTspaS0tO2NvbnN0IHM9W3tjaGlsZHJlbjpbXSxpbmRleDowfV07bGV0IG8sYz1zWzBdO2ZvcihhPTA7YTxpO2ErKyl7Zm9yKHI9MDtyPGVbYV07cisrKXtjPXMucG9wKCk7Yy5jaGlsZHJlbltjLmluZGV4XT10W25dO2Zvcig7Yy5pbmRleD4wOyljPXMucG9wKCk7Yy5pbmRleCsrO3MucHVzaChjKTtmb3IoO3MubGVuZ3RoPD1hOyl7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfW4rK31pZihhKzE8aSl7cy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KTtjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW47Yz1vfX1yZXR1cm4gc1swXS5jaGlsZHJlbn1mdW5jdGlvbiBnZXRCbG9ja0J1ZmZlck9mZnNldChlLHQsYSl7cmV0dXJuIDY0KigoZS5ibG9ja3NQZXJMaW5lKzEpKnQrYSl9ZnVuY3Rpb24gZGVjb2RlU2NhbihlLHQsYSxuLG8sYyxsLGgsdSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD45JiZ2b2lkIDAhPT1hcmd1bWVudHNbOV0mJmFyZ3VtZW50c1s5XTtjb25zdCBmPWEubWN1c1BlckxpbmUsZz1hLnByb2dyZXNzaXZlLHA9dDtsZXQgbT0wLGI9MDtmdW5jdGlvbiByZWFkQml0KCl7aWYoYj4wKXtiLS07cmV0dXJuIG0+PmImMX1tPWVbdCsrXTtpZigyNTU9PT1tKXtjb25zdCByPWVbdCsrXTtpZihyKXtpZigyMjA9PT1yJiZkKXt0Kz0yO2NvbnN0IHI9KDAsaS5yZWFkVWludDE2KShlLHQpO3QrPTI7aWYocj4wJiZyIT09YS5zY2FuTGluZXMpdGhyb3cgbmV3IEROTE1hcmtlckVycm9yKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixyKX1lbHNlIGlmKDIxNz09PXIpe2lmKGQpe2NvbnN0IGU9eCooOD09PWEucHJlY2lzaW9uPzg6MCk7aWYoZT4wJiZNYXRoLnJvdW5kKGEuc2NhbkxpbmVzL2UpPj01KXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLGUpfXRocm93IG5ldyBFT0lNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIpfXRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KG08PDh8cikudG9TdHJpbmcoMTYpfWApfX1iPTc7cmV0dXJuIG0+Pj43fWZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4oZSl7bGV0IHQ9ZTtmb3IoOzspe3Q9dFtyZWFkQml0KCldO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJudW1iZXIiOnJldHVybiB0O2Nhc2Uib2JqZWN0Ijpjb250aW51ZX10aHJvdyBuZXcgSnBlZ0Vycm9yKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gcmVjZWl2ZShlKXtsZXQgdD0wO2Zvcig7ZT4wOyl7dD10PDwxfHJlYWRCaXQoKTtlLS19cmV0dXJuIHR9ZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChlKXtpZigxPT09ZSlyZXR1cm4gMT09PXJlYWRCaXQoKT8xOi0xO2NvbnN0IHQ9cmVjZWl2ZShlKTtyZXR1cm4gdD49MTw8ZS0xP3Q6dCsoLTE8PGUpKzF9bGV0IHk9MDtsZXQgdyxTPTA7bGV0IHg9MDtmdW5jdGlvbiBkZWNvZGVNY3UoZSx0LGEscixuKXtjb25zdCBpPWElZjt4PShhL2Z8MCkqZS52K3I7Y29uc3Qgcz1pKmUuaCtuO3QoZSxnZXRCbG9ja0J1ZmZlck9mZnNldChlLHgscykpfWZ1bmN0aW9uIGRlY29kZUJsb2NrKGUsdCxhKXt4PWEvZS5ibG9ja3NQZXJMaW5lfDA7Y29uc3Qgcj1hJWUuYmxvY2tzUGVyTGluZTt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSx4LHIpKX1jb25zdCBDPW4ubGVuZ3RoO2xldCB2LGssTyxULE0sRTtFPWc/MD09PWM/MD09PWg/ZnVuY3Rpb24gZGVjb2RlRENGaXJzdChlLHQpe2NvbnN0IGE9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZURDKSxyPTA9PT1hPzA6cmVjZWl2ZUFuZEV4dGVuZChhKTw8dTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPXJ9OmZ1bmN0aW9uIGRlY29kZURDU3VjY2Vzc2l2ZShlLHQpe2UuYmxvY2tEYXRhW3RdfD1yZWFkQml0KCk8PHV9OjA9PT1oP2Z1bmN0aW9uIGRlY29kZUFDRmlyc3QoZSx0KXtpZih5PjApe3ktLTtyZXR1cm59bGV0IGE9Yztjb25zdCByPWw7Zm9yKDthPD1yOyl7Y29uc3Qgcj1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLG49MTUmcixpPXI+PjQ7aWYoMD09PW4pe2lmKGk8MTUpe3k9cmVjZWl2ZShpKSsoMTw8aSktMTticmVha31hKz0xNjtjb250aW51ZX1hKz1pO2NvbnN0IG89c1thXTtlLmJsb2NrRGF0YVt0K29dPXJlY2VpdmVBbmRFeHRlbmQobikqKDE8PHUpO2ErK319OmZ1bmN0aW9uIGRlY29kZUFDU3VjY2Vzc2l2ZShlLHQpe2xldCBhPWM7Y29uc3Qgcj1sO2xldCBuLGksbz0wO2Zvcig7YTw9cjspe2NvbnN0IHI9dCtzW2FdLGM9ZS5ibG9ja0RhdGFbcl08MD8tMToxO3N3aXRjaChTKXtjYXNlIDA6aT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpO249MTUmaTtvPWk+PjQ7aWYoMD09PW4paWYobzwxNSl7eT1yZWNlaXZlKG8pKygxPDxvKTtTPTR9ZWxzZXtvPTE2O1M9MX1lbHNle2lmKDEhPT1uKXRocm93IG5ldyBKcGVnRXJyb3IoImludmFsaWQgQUNuIGVuY29kaW5nIik7dz1yZWNlaXZlQW5kRXh0ZW5kKG4pO1M9bz8yOjN9Y29udGludWU7Y2FzZSAxOmNhc2UgMjppZihlLmJsb2NrRGF0YVtyXSllLmJsb2NrRGF0YVtyXSs9YyoocmVhZEJpdCgpPDx1KTtlbHNle28tLTswPT09byYmKFM9Mj09PVM/MzowKX1icmVhaztjYXNlIDM6aWYoZS5ibG9ja0RhdGFbcl0pZS5ibG9ja0RhdGFbcl0rPWMqKHJlYWRCaXQoKTw8dSk7ZWxzZXtlLmJsb2NrRGF0YVtyXT13PDx1O1M9MH1icmVhaztjYXNlIDQ6ZS5ibG9ja0RhdGFbcl0mJihlLmJsb2NrRGF0YVtyXSs9YyoocmVhZEJpdCgpPDx1KSl9YSsrfWlmKDQ9PT1TKXt5LS07MD09PXkmJihTPTApfX06ZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoZSx0KXtjb25zdCBhPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVEQykscj0wPT09YT8wOnJlY2VpdmVBbmRFeHRlbmQoYSk7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1yO2xldCBuPTE7Zm9yKDtuPDY0Oyl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLHI9MTUmYSxpPWE+PjQ7aWYoMD09PXIpe2lmKGk8MTUpYnJlYWs7bis9MTY7Y29udGludWV9bis9aTtjb25zdCBvPXNbbl07ZS5ibG9ja0RhdGFbdCtvXT1yZWNlaXZlQW5kRXh0ZW5kKHIpO24rK319O2xldCBELFI9MDtjb25zdCBOPTE9PT1DP25bMF0uYmxvY2tzUGVyTGluZSpuWzBdLmJsb2Nrc1BlckNvbHVtbjpmKmEubWN1c1BlckNvbHVtbjtsZXQgTCwkO2Zvcig7Ujw9Tjspe2NvbnN0IGE9bz9NYXRoLm1pbihOLVIsbyk6TjtpZihhPjApe2ZvcihrPTA7azxDO2srKyluW2tdLnByZWQ9MDt5PTA7aWYoMT09PUMpe3Y9blswXTtmb3IoTT0wO008YTtNKyspe2RlY29kZUJsb2NrKHYsRSxSKTtSKyt9fWVsc2UgZm9yKE09MDtNPGE7TSsrKXtmb3Ioaz0wO2s8QztrKyspe3Y9bltrXTtMPXYuaDskPXYudjtmb3IoTz0wO088JDtPKyspZm9yKFQ9MDtUPEw7VCsrKWRlY29kZU1jdSh2LEUsUixPLFQpfVIrK319Yj0wO0Q9ZmluZE5leHRGaWxlTWFya2VyKGUsdCk7aWYoIUQpYnJlYWs7aWYoRC5pbnZhbGlkKXtjb25zdCBlPWE+MD8idW5leHBlY3RlZCI6ImV4Y2Vzc2l2ZSI7KDAsci53YXJuKShgZGVjb2RlU2NhbiAtICR7ZX0gTUNVIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAke0QuaW52YWxpZH1gKTt0PUQub2Zmc2V0fWlmKCEoRC5tYXJrZXI+PTY1NDg4JiZELm1hcmtlcjw9NjU0OTUpKWJyZWFrO3QrPTJ9cmV0dXJuIHQtcH1mdW5jdGlvbiBxdWFudGl6ZUFuZEludmVyc2UoZSx0LGEpe2NvbnN0IHI9ZS5xdWFudGl6YXRpb25UYWJsZSxuPWUuYmxvY2tEYXRhO2xldCBpLHMscCxtLGIseSx3LFMseCxDLHYsayxPLFQsTSxFLEQ7aWYoIXIpdGhyb3cgbmV3IEpwZWdFcnJvcigibWlzc2luZyByZXF1aXJlZCBRdWFudGl6YXRpb24gVGFibGUuIik7Zm9yKGxldCBlPTA7ZTw2NDtlKz04KXt4PW5bdCtlXTtDPW5bdCtlKzFdO3Y9blt0K2UrMl07az1uW3QrZSszXTtPPW5bdCtlKzRdO1Q9blt0K2UrNV07TT1uW3QrZSs2XTtFPW5bdCtlKzddO3gqPXJbZV07aWYoMCE9KEN8dnxrfE98VHxNfEUpKXtDKj1yW2UrMV07dio9cltlKzJdO2sqPXJbZSszXTtPKj1yW2UrNF07VCo9cltlKzVdO00qPXJbZSs2XTtFKj1yW2UrN107aT1mKngrMTI4Pj44O3M9ZipPKzEyOD4+ODtwPXY7bT1NO2I9ZyooQy1FKSsxMjg+Pjg7Uz1nKihDK0UpKzEyOD4+ODt5PWs8PDQ7dz1UPDw0O2k9aStzKzE+PjE7cz1pLXM7RD1wKmQrbSp1KzEyOD4+ODtwPXAqdS1tKmQrMTI4Pj44O209RDtiPWIrdysxPj4xO3c9Yi13O1M9Uyt5KzE+PjE7eT1TLXk7aT1pK20rMT4+MTttPWktbTtzPXMrcCsxPj4xO3A9cy1wO0Q9YipoK1MqbCsyMDQ4Pj4xMjtiPWIqbC1TKmgrMjA0OD4+MTI7Uz1EO0Q9eSpjK3cqbysyMDQ4Pj4xMjt5PXkqby13KmMrMjA0OD4+MTI7dz1EO2FbZV09aStTO2FbZSs3XT1pLVM7YVtlKzFdPXMrdzthW2UrNl09cy13O2FbZSsyXT1wK3k7YVtlKzVdPXAteTthW2UrM109bStiO2FbZSs0XT1tLWJ9ZWxzZXtEPWYqeCs1MTI+PjEwO2FbZV09RDthW2UrMV09RDthW2UrMl09RDthW2UrM109RDthW2UrNF09RDthW2UrNV09RDthW2UrNl09RDthW2UrN109RH19Zm9yKGxldCBlPTA7ZTw4OysrZSl7eD1hW2VdO0M9YVtlKzhdO3Y9YVtlKzE2XTtrPWFbZSsyNF07Tz1hW2UrMzJdO1Q9YVtlKzQwXTtNPWFbZSs0OF07RT1hW2UrNTZdO2lmKDAhPShDfHZ8a3xPfFR8TXxFKSl7aT1mKngrMjA0OD4+MTI7cz1mKk8rMjA0OD4+MTI7cD12O209TTtiPWcqKEMtRSkrMjA0OD4+MTI7Uz1nKihDK0UpKzIwNDg+PjEyO3k9azt3PVQ7aT00MTEyKyhpK3MrMT4+MSk7cz1pLXM7RD1wKmQrbSp1KzIwNDg+PjEyO3A9cCp1LW0qZCsyMDQ4Pj4xMjttPUQ7Yj1iK3crMT4+MTt3PWItdztTPVMreSsxPj4xO3k9Uy15O2k9aSttKzE+PjE7bT1pLW07cz1zK3ArMT4+MTtwPXMtcDtEPWIqaCtTKmwrMjA0OD4+MTI7Yj1iKmwtUypoKzIwNDg+PjEyO1M9RDtEPXkqYyt3Km8rMjA0OD4+MTI7eT15Km8tdypjKzIwNDg+PjEyO3c9RDt4PWkrUztFPWktUztDPXMrdztNPXMtdzt2PXAreTtUPXAteTtrPW0rYjtPPW0tYjt4PDE2P3g9MDp4Pj00MDgwP3g9MjU1Ong+Pj00O0M8MTY/Qz0wOkM+PTQwODA/Qz0yNTU6Qz4+PTQ7djwxNj92PTA6dj49NDA4MD92PTI1NTp2Pj49NDtrPDE2P2s9MDprPj00MDgwP2s9MjU1Oms+Pj00O088MTY/Tz0wOk8+PTQwODA/Tz0yNTU6Tz4+PTQ7VDwxNj9UPTA6VD49NDA4MD9UPTI1NTpUPj49NDtNPDE2P009MDpNPj00MDgwP009MjU1Ok0+Pj00O0U8MTY/RT0wOkU+PTQwODA/RT0yNTU6RT4+PTQ7blt0K2VdPXg7blt0K2UrOF09QztuW3QrZSsxNl09djtuW3QrZSsyNF09aztuW3QrZSszMl09TztuW3QrZSs0MF09VDtuW3QrZSs0OF09TTtuW3QrZSs1Nl09RX1lbHNle0Q9Zip4KzgxOTI+PjE0O0Q9RDwtMjA0MD8wOkQ+PTIwMjQ/MjU1OkQrMjA1Nj4+NDtuW3QrZV09RDtuW3QrZSs4XT1EO25bdCtlKzE2XT1EO25bdCtlKzI0XT1EO25bdCtlKzMyXT1EO25bdCtlKzQwXT1EO25bdCtlKzQ4XT1EO25bdCtlKzU2XT1EfX19ZnVuY3Rpb24gYnVpbGRDb21wb25lbnREYXRhKGUsdCl7Y29uc3QgYT10LmJsb2Nrc1BlckxpbmUscj10LmJsb2Nrc1BlckNvbHVtbixuPW5ldyBJbnQxNkFycmF5KDY0KTtmb3IobGV0IGU9MDtlPHI7ZSsrKWZvcihsZXQgcj0wO3I8YTtyKyspe3F1YW50aXplQW5kSW52ZXJzZSh0LGdldEJsb2NrQnVmZmVyT2Zmc2V0KHQsZSxyKSxuKX1yZXR1cm4gdC5ibG9ja0RhdGF9ZnVuY3Rpb24gZmluZE5leHRGaWxlTWFya2VyKGUsdCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnQ7Y29uc3Qgcj1lLmxlbmd0aC0xO2xldCBuPWE8dD9hOnQ7aWYodD49cilyZXR1cm4gbnVsbDtjb25zdCBzPSgwLGkucmVhZFVpbnQxNikoZSx0KTtpZihzPj02NTQ3MiYmczw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6cyxvZmZzZXQ6dH07bGV0IG89KDAsaS5yZWFkVWludDE2KShlLG4pO2Zvcig7IShvPj02NTQ3MiYmbzw9NjU1MzQpOyl7aWYoKytuPj1yKXJldHVybiBudWxsO289KDAsaS5yZWFkVWludDE2KShlLG4pfXJldHVybntpbnZhbGlkOnMudG9TdHJpbmcoMTYpLG1hcmtlcjpvLG9mZnNldDpufX10LkpwZWdJbWFnZT1jbGFzcyBKcGVnSW1hZ2V7Y29uc3RydWN0b3IoKXtsZXR7ZGVjb2RlVHJhbnNmb3JtOmU9bnVsbCxjb2xvclRyYW5zZm9ybTp0PS0xfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5fZGVjb2RlVHJhbnNmb3JtPWU7dGhpcy5fY29sb3JUcmFuc2Zvcm09dH1wYXJzZShlKXtsZXR7ZG5sU2NhbkxpbmVzOnQ9bnVsbH09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2Z1bmN0aW9uIHJlYWREYXRhQmxvY2soKXtjb25zdCB0PSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2xldCBhPW8rdC0yO2NvbnN0IG49ZmluZE5leHRGaWxlTWFya2VyKGUsYSxvKTtpZihuPy5pbnZhbGlkKXsoMCxyLndhcm4pKCJyZWFkRGF0YUJsb2NrIC0gaW5jb3JyZWN0IGxlbmd0aCwgY3VycmVudCBtYXJrZXIgaXM6ICIrbi5pbnZhbGlkKTthPW4ub2Zmc2V0fWNvbnN0IHM9ZS5zdWJhcnJheShvLGEpO28rPXMubGVuZ3RoO3JldHVybiBzfWZ1bmN0aW9uIHByZXBhcmVDb21wb25lbnRzKGUpe2NvbnN0IHQ9TWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOC9lLm1heEgpLGE9TWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgvZS5tYXhWKTtmb3IoY29uc3QgciBvZiBlLmNvbXBvbmVudHMpe2NvbnN0IG49TWF0aC5jZWlsKE1hdGguY2VpbChlLnNhbXBsZXNQZXJMaW5lLzgpKnIuaC9lLm1heEgpLGk9TWF0aC5jZWlsKE1hdGguY2VpbChlLnNjYW5MaW5lcy84KSpyLnYvZS5tYXhWKSxzPXQqci5oLG89NjQqKGEqci52KSoocysxKTtyLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShvKTtyLmJsb2Nrc1BlckxpbmU9bjtyLmJsb2Nrc1BlckNvbHVtbj1pfWUubWN1c1BlckxpbmU9dDtlLm1jdXNQZXJDb2x1bW49YX1sZXQgYSxuLG89MCxjPW51bGwsbD1udWxsLGg9MDtjb25zdCB1PVtdLGQ9W10sZj1bXTtsZXQgZz0oMCxpLnJlYWRVaW50MTYpKGUsbyk7bys9MjtpZig2NTQ5NiE9PWcpdGhyb3cgbmV3IEpwZWdFcnJvcigiU09JIG5vdCBmb3VuZCIpO2c9KDAsaS5yZWFkVWludDE2KShlLG8pO28rPTI7ZTpmb3IoOzY1NDk3IT09Zzspe2xldCBwLG0sYjtzd2l0Y2goZyl7Y2FzZSA2NTUwNDpjYXNlIDY1NTA1OmNhc2UgNjU1MDY6Y2FzZSA2NTUwNzpjYXNlIDY1NTA4OmNhc2UgNjU1MDk6Y2FzZSA2NTUxMDpjYXNlIDY1NTExOmNhc2UgNjU1MTI6Y2FzZSA2NTUxMzpjYXNlIDY1NTE0OmNhc2UgNjU1MTU6Y2FzZSA2NTUxNjpjYXNlIDY1NTE3OmNhc2UgNjU1MTg6Y2FzZSA2NTUxOTpjYXNlIDY1NTM0OmNvbnN0IHk9cmVhZERhdGFCbG9jaygpOzY1NTA0PT09ZyYmNzQ9PT15WzBdJiY3MD09PXlbMV0mJjczPT09eVsyXSYmNzA9PT15WzNdJiYwPT09eVs0XSYmKGM9e3ZlcnNpb246e21ham9yOnlbNV0sbWlub3I6eVs2XX0sZGVuc2l0eVVuaXRzOnlbN10seERlbnNpdHk6eVs4XTw8OHx5WzldLHlEZW5zaXR5OnlbMTBdPDw4fHlbMTFdLHRodW1iV2lkdGg6eVsxMl0sdGh1bWJIZWlnaHQ6eVsxM10sdGh1bWJEYXRhOnkuc3ViYXJyYXkoMTQsMTQrMyp5WzEyXSp5WzEzXSl9KTs2NTUxOD09PWcmJjY1PT09eVswXSYmMTAwPT09eVsxXSYmMTExPT09eVsyXSYmOTg9PT15WzNdJiYxMDE9PT15WzRdJiYobD17dmVyc2lvbjp5WzVdPDw4fHlbNl0sZmxhZ3MwOnlbN108PDh8eVs4XSxmbGFnczE6eVs5XTw8OHx5WzEwXSx0cmFuc2Zvcm1Db2RlOnlbMTFdfSk7YnJlYWs7Y2FzZSA2NTQ5OTpjb25zdCB3PSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2NvbnN0IFM9dytvLTI7bGV0IHg7Zm9yKDtvPFM7KXtjb25zdCB0PWVbbysrXSxhPW5ldyBVaW50MTZBcnJheSg2NCk7aWYodD4+ND09MClmb3IobT0wO208NjQ7bSsrKXt4PXNbbV07YVt4XT1lW28rK119ZWxzZXtpZih0Pj40IT0xKXRocm93IG5ldyBKcGVnRXJyb3IoIkRRVCAtIGludmFsaWQgdGFibGUgc3BlYyIpO2ZvcihtPTA7bTw2NDttKyspe3g9c1ttXTthW3hdPSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yfX11WzE1JnRdPWF9YnJlYWs7Y2FzZSA2NTQ3MjpjYXNlIDY1NDczOmNhc2UgNjU0NzQ6aWYoYSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQiKTtvKz0yO2E9e307YS5leHRlbmRlZD02NTQ3Mz09PWc7YS5wcm9ncmVzc2l2ZT02NTQ3ND09PWc7YS5wcmVjaXNpb249ZVtvKytdO2NvbnN0IEM9KDAsaS5yZWFkVWludDE2KShlLG8pO28rPTI7YS5zY2FuTGluZXM9dHx8QzthLnNhbXBsZXNQZXJMaW5lPSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2EuY29tcG9uZW50cz1bXTthLmNvbXBvbmVudElkcz17fTtjb25zdCB2PWVbbysrXTtsZXQgaz0wLE89MDtmb3IocD0wO3A8djtwKyspe2NvbnN0IHQ9ZVtvXSxyPWVbbysxXT4+NCxuPTE1JmVbbysxXTtrPHImJihrPXIpO088biYmKE89bik7Y29uc3QgaT1lW28rMl07Yj1hLmNvbXBvbmVudHMucHVzaCh7aDpyLHY6bixxdWFudGl6YXRpb25JZDppLHF1YW50aXphdGlvblRhYmxlOm51bGx9KTthLmNvbXBvbmVudElkc1t0XT1iLTE7bys9M31hLm1heEg9azthLm1heFY9TztwcmVwYXJlQ29tcG9uZW50cyhhKTticmVhaztjYXNlIDY1NDc2OmNvbnN0IFQ9KDAsaS5yZWFkVWludDE2KShlLG8pO28rPTI7Zm9yKHA9MjtwPFQ7KXtjb25zdCB0PWVbbysrXSxhPW5ldyBVaW50OEFycmF5KDE2KTtsZXQgcj0wO2ZvcihtPTA7bTwxNjttKyssbysrKXIrPWFbbV09ZVtvXTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHIpO2ZvcihtPTA7bTxyO20rKyxvKyspblttXT1lW29dO3ArPTE3K3I7KHQ+PjQ9PTA/ZjpkKVsxNSZ0XT1idWlsZEh1ZmZtYW5UYWJsZShhLG4pfWJyZWFrO2Nhc2UgNjU1MDE6bys9MjtuPSgwLGkucmVhZFVpbnQxNikoZSxvKTtvKz0yO2JyZWFrO2Nhc2UgNjU0OTg6Y29uc3QgTT0xPT0rK2gmJiF0O28rPTI7Y29uc3QgRT1lW28rK10sRD1bXTtmb3IocD0wO3A8RTtwKyspe2NvbnN0IHQ9ZVtvKytdLHI9YS5jb21wb25lbnRJZHNbdF0sbj1hLmNvbXBvbmVudHNbcl07bi5pbmRleD10O2NvbnN0IGk9ZVtvKytdO24uaHVmZm1hblRhYmxlREM9ZltpPj40XTtuLmh1ZmZtYW5UYWJsZUFDPWRbMTUmaV07RC5wdXNoKG4pfWNvbnN0IFI9ZVtvKytdLE49ZVtvKytdLEw9ZVtvKytdO3RyeXtjb25zdCB0PWRlY29kZVNjYW4oZSxvLGEsRCxuLFIsTixMPj40LDE1JkwsTSk7bys9dH1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgRE5MTWFya2VyRXJyb3IpeygwLHIud2FybikoYCR7dC5tZXNzYWdlfSAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLmApO3JldHVybiB0aGlzLnBhcnNlKGUse2RubFNjYW5MaW5lczp0LnNjYW5MaW5lc30pfWlmKHQgaW5zdGFuY2VvZiBFT0lNYXJrZXJFcnJvcil7KDAsci53YXJuKShgJHt0Lm1lc3NhZ2V9IC0tIGlnbm9yaW5nIHRoZSByZXN0IG9mIHRoZSBpbWFnZSBkYXRhLmApO2JyZWFrIGV9dGhyb3cgdH1icmVhaztjYXNlIDY1NTAwOm8rPTQ7YnJlYWs7Y2FzZSA2NTUzNToyNTUhPT1lW29dJiZvLS07YnJlYWs7ZGVmYXVsdDpjb25zdCAkPWZpbmROZXh0RmlsZU1hcmtlcihlLG8tMixvLTMpO2lmKCQ/LmludmFsaWQpeygwLHIud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrJC5pbnZhbGlkKTtvPSQub2Zmc2V0O2JyZWFrfWlmKCEkfHxvPj1lLmxlbmd0aC0xKXsoMCxyLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgZX10aHJvdyBuZXcgSnBlZ0Vycm9yKCJKcGVnSW1hZ2UucGFyc2UgLSB1bmtub3duIG1hcmtlcjogIitnLnRvU3RyaW5nKDE2KSl9Zz0oMCxpLnJlYWRVaW50MTYpKGUsbyk7bys9Mn10aGlzLndpZHRoPWEuc2FtcGxlc1BlckxpbmU7dGhpcy5oZWlnaHQ9YS5zY2FuTGluZXM7dGhpcy5qZmlmPWM7dGhpcy5hZG9iZT1sO3RoaXMuY29tcG9uZW50cz1bXTtmb3IoY29uc3QgZSBvZiBhLmNvbXBvbmVudHMpe2NvbnN0IHQ9dVtlLnF1YW50aXphdGlvbklkXTt0JiYoZS5xdWFudGl6YXRpb25UYWJsZT10KTt0aGlzLmNvbXBvbmVudHMucHVzaCh7aW5kZXg6ZS5pbmRleCxvdXRwdXQ6YnVpbGRDb21wb25lbnREYXRhKDAsZSksc2NhbGVYOmUuaC9hLm1heEgsc2NhbGVZOmUudi9hLm1heFYsYmxvY2tzUGVyTGluZTplLmJsb2Nrc1BlckxpbmUsYmxvY2tzUGVyQ29sdW1uOmUuYmxvY2tzUGVyQ29sdW1ufSl9dGhpcy5udW1Db21wb25lbnRzPXRoaXMuY29tcG9uZW50cy5sZW5ndGh9X2dldExpbmVhcml6ZWRCbG9ja0RhdGEoZSx0KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IHI9dGhpcy53aWR0aC9lLG49dGhpcy5oZWlnaHQvdDtsZXQgaSxzLG8sYyxsLGgsdSxkLGYsZyxwLG09MDtjb25zdCBiPXRoaXMuY29tcG9uZW50cy5sZW5ndGgseT1lKnQqYix3PW5ldyBVaW50OENsYW1wZWRBcnJheSh5KSxTPW5ldyBVaW50MzJBcnJheShlKSx4PTQyOTQ5NjcyODg7bGV0IEM7Zm9yKHU9MDt1PGI7dSsrKXtpPXRoaXMuY29tcG9uZW50c1t1XTtzPWkuc2NhbGVYKnI7bz1pLnNjYWxlWSpuO209dTtwPWkub3V0cHV0O2M9aS5ibG9ja3NQZXJMaW5lKzE8PDM7aWYocyE9PUMpe2ZvcihsPTA7bDxlO2wrKyl7ZD0wfGwqcztTW2xdPShkJngpPDwzfDcmZH1DPXN9Zm9yKGg9MDtoPHQ7aCsrKXtkPTB8aCpvO2c9YyooZCZ4KXwoNyZkKTw8Mztmb3IobD0wO2w8ZTtsKyspe3dbbV09cFtnK1NbbF1dO20rPWJ9fX1sZXQgdj10aGlzLl9kZWNvZGVUcmFuc2Zvcm07YXx8NCE9PWJ8fHZ8fCh2PW5ldyBJbnQzMkFycmF5KFstMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NV0pKTtpZih2KWZvcih1PTA7dTx5Oylmb3IoZD0wLGY9MDtkPGI7ZCsrLHUrKyxmKz0yKXdbdV09KHdbdV0qdltmXT4+OCkrdltmKzFdO3JldHVybiB3fWdldCBfaXNDb2xvckNvbnZlcnNpb25OZWVkZWQoKXtyZXR1cm4gdGhpcy5hZG9iZT8hIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTozPT09dGhpcy5udW1Db21wb25lbnRzPzAhPT10aGlzLl9jb2xvclRyYW5zZm9ybSYmKDgyIT09dGhpcy5jb21wb25lbnRzWzBdLmluZGV4fHw3MSE9PXRoaXMuY29tcG9uZW50c1sxXS5pbmRleHx8NjYhPT10aGlzLmNvbXBvbmVudHNbMl0uaW5kZXgpOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX1fY29udmVydFljY1RvUmdiKGUpe2xldCB0LGEscjtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTtuKz0zKXt0PWVbbl07YT1lW24rMV07cj1lW24rMl07ZVtuXT10LTE3OS40NTYrMS40MDIqcjtlW24rMV09dCsxMzUuNDU5LS4zNDQqYS0uNzE0KnI7ZVtuKzJdPXQtMjI2LjgxNisxLjc3MiphfXJldHVybiBlfV9jb252ZXJ0WWNjVG9SZ2JhKGUsdCl7Zm9yKGxldCBhPTAscj0wLG49ZS5sZW5ndGg7YTxuO2ErPTMscis9NCl7Y29uc3Qgbj1lW2FdLGk9ZVthKzFdLHM9ZVthKzJdO3Rbcl09bi0xNzkuNDU2KzEuNDAyKnM7dFtyKzFdPW4rMTM1LjQ1OS0uMzQ0KmktLjcxNCpzO3RbcisyXT1uLTIyNi44MTYrMS43NzIqaTt0W3IrM109MjU1fXJldHVybiB0fV9jb252ZXJ0WWNja1RvUmdiKGUpe2xldCB0LGEscixuLGk9MDtmb3IobGV0IHM9MCxvPWUubGVuZ3RoO3M8bztzKz00KXt0PWVbc107YT1lW3MrMV07cj1lW3MrMl07bj1lW3MrM107ZVtpKytdPWEqKC02NjA2MzU2Njk0MjAzNjRlLTE5KmErLjAwMDQzNzEzMDQ3NTkyNjIzMipyLTU0MDgwNjEwMDY0NTk5ZS0xOCp0Ky4wMDA0ODQ0OTc5NzEyMDI4MSpuLS4xNTQzNjIxNTE4NzExMjYpLTEyMi42NzE5NTQwNjg5NCtyKigtLjAwMDk1Nzk2NDM3ODQ0NTc3MypyKy4wMDA4MTcwNzY5MTEzNDY2MjUqdC0uMDA0NzcyNzE0MDU0MDg3NDcqbisxLjUzMzgwMjUzMjIxNzM0KSt0KiguMDAwOTYxMjUwMTg0MTMwNjg4KnQtLjAwMjY2MjU3MzMyMjgzOTMzKm4rLjQ4MzU3MDg4NDUxMjY1KStuKigtLjAwMDMzNjE5NzE3NzYxODM5NCpuKy40ODQ3OTE1NjE0OTA3NzYpO2VbaSsrXT0xMDcuMjY4MDM5Mzk3NzI0K2EqKDIxOTkyNzEwNDUyNTc0MWUtMTkqYS0uMDAwNjQwOTkyMDE4Mjk3OTQ1KnIrLjAwMDY1OTM5NzAwMTI0NTU3Nyp0Ky4wMDA0MjYxMDU2NTI5Mzg4Mzcqbi0uMTc2NDkxNzkyNDYyODc1KStyKigtLjAwMDc3ODI2OTk0MTUxMzY4MypyKy4wMDEzMDg3MjI2MTQwODI3NSp0Ky4wMDA3NzA0ODI2MzE4MDExMzIqbi0uMTUxMDUxNDkyNzc1NTYyKSt0KiguMDAxMjY5MzUzNjgxMTQ4NDMqdC0uMDAyNjUwOTAxODkwMTA4OTgqbisuMjU4MDI5MTAyMDY4NDUpK24qKC0uMDAwMzE4OTEzMTE3NTg4MzI4Km4tLjIxMzc0MjQwMDMyMzY2NSk7ZVtpKytdPWEqKC0uMDAwNTcwMTE1MTk2OTczNjc3KmEtMjYzNDA5MDUxMDA0NTg5ZS0xOSpyKy4wMDIwNzQxMDg4MTE1MDEyKnQtLjAwMjg4MjYwMjM2ODUzNDQyKm4rLjgxNDI3Mjk2ODM1OTI5NSktMjAuODEwMDEyNTQ2OTQ3K3IqKC0xNTM0OTYwNTc0NDA5NzVlLTE5KnItLjAwMDEzMjY4OTA0Mzk2MTQ0Nip0Ky4wMDA1NjA4MzM2OTEyNDI4MTIqbi0uMTk1MTUyMDI3NTM0MDQ5KSt0KiguMDAxNzQ0MTgxMzI5Mjc1ODIqdC0uMDAyNTUyNDMzMjE0MzkzNDcqbisuMTE2OTM1MDIwNDY1MTQ1KStuKigtLjAwMDM0MzUzMTk5NjUxMDU1NSpuKy4yNDE2NTI2MDIzMjQwNyl9cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX1fY29udmVydFljY2tUb1JnYmEoZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCs9NCl7Y29uc3QgYT1lW3RdLHI9ZVt0KzFdLG49ZVt0KzJdLGk9ZVt0KzNdO2VbdF09ciooLTY2MDYzNTY2OTQyMDM2NGUtMTkqcisuMDAwNDM3MTMwNDc1OTI2MjMyKm4tNTQwODA2MTAwNjQ1OTllLTE4KmErLjAwMDQ4NDQ5Nzk3MTIwMjgxKmktLjE1NDM2MjE1MTg3MTEyNiktMTIyLjY3MTk1NDA2ODk0K24qKC0uMDAwOTU3OTY0Mzc4NDQ1NzczKm4rLjAwMDgxNzA3NjkxMTM0NjYyNSphLS4wMDQ3NzI3MTQwNTQwODc0NyppKzEuNTMzODAyNTMyMjE3MzQpK2EqKC4wMDA5NjEyNTAxODQxMzA2ODgqYS0uMDAyNjYyNTczMzIyODM5MzMqaSsuNDgzNTcwODg0NTEyNjUpK2kqKC0uMDAwMzM2MTk3MTc3NjE4Mzk0KmkrLjQ4NDc5MTU2MTQ5MDc3Nik7ZVt0KzFdPTEwNy4yNjgwMzkzOTc3MjQrciooMjE5OTI3MTA0NTI1NzQxZS0xOSpyLS4wMDA2NDA5OTIwMTgyOTc5NDUqbisuMDAwNjU5Mzk3MDAxMjQ1NTc3KmErLjAwMDQyNjEwNTY1MjkzODgzNyppLS4xNzY0OTE3OTI0NjI4NzUpK24qKC0uMDAwNzc4MjY5OTQxNTEzNjgzKm4rLjAwMTMwODcyMjYxNDA4Mjc1KmErLjAwMDc3MDQ4MjYzMTgwMTEzMippLS4xNTEwNTE0OTI3NzU1NjIpK2EqKC4wMDEyNjkzNTM2ODExNDg0MyphLS4wMDI2NTA5MDE4OTAxMDg5OCppKy4yNTgwMjkxMDIwNjg0NSkraSooLS4wMDAzMTg5MTMxMTc1ODgzMjgqaS0uMjEzNzQyNDAwMzIzNjY1KTtlW3QrMl09ciooLS4wMDA1NzAxMTUxOTY5NzM2Nzcqci0yNjM0MDkwNTEwMDQ1ODllLTE5Km4rLjAwMjA3NDEwODgxMTUwMTIqYS0uMDAyODgyNjAyMzY4NTM0NDIqaSsuODE0MjcyOTY4MzU5Mjk1KS0yMC44MTAwMTI1NDY5NDcrbiooLTE1MzQ5NjA1NzQ0MDk3NWUtMTkqbi0uMDAwMTMyNjg5MDQzOTYxNDQ2KmErLjAwMDU2MDgzMzY5MTI0MjgxMippLS4xOTUxNTIwMjc1MzQwNDkpK2EqKC4wMDE3NDQxODEzMjkyNzU4MiphLS4wMDI1NTI0MzMyMTQzOTM0NyppKy4xMTY5MzUwMjA0NjUxNDUpK2kqKC0uMDAwMzQzNTMxOTk2NTEwNTU1KmkrLjI0MTY1MjYwMjMyNDA3KTtlW3QrM109MjU1fXJldHVybiBlfV9jb252ZXJ0WWNja1RvQ215ayhlKXtsZXQgdCxhLHI7Zm9yKGxldCBuPTAsaT1lLmxlbmd0aDtuPGk7bis9NCl7dD1lW25dO2E9ZVtuKzFdO3I9ZVtuKzJdO2Vbbl09NDM0LjQ1Ni10LTEuNDAyKnI7ZVtuKzFdPTExOS41NDEtdCsuMzQ0KmErLjcxNCpyO2VbbisyXT00ODEuODE2LXQtMS43NzIqYX1yZXR1cm4gZX1fY29udmVydENteWtUb1JnYihlKXtsZXQgdCxhLHIsbixpPTA7Zm9yKGxldCBzPTAsbz1lLmxlbmd0aDtzPG87cys9NCl7dD1lW3NdO2E9ZVtzKzFdO3I9ZVtzKzJdO249ZVtzKzNdO2VbaSsrXT0yNTUrdCooLTY3NDcxNDcwNzM2MDI0NDFlLTIwKnQrLjAwMDgzNzkyNjIxMjEwMTM3MjcqYSsuMDAwMjg5NDcxODE4ODY0MzI5NCpyKy4wMDMyNjQyMzEwNTc1Mzc4MDYqbi0xLjExODU2MTE4NjcyMDM5MzcpK2EqKDI2Mzc0MTA3NjE2MDg5NDA1ZS0yMSphLTg2MjY5NDkxNTg2Mzg1NzJlLTIwKnItLjAwMDI3NDg3NjkwNjc0OTk0OTEqbi0uMDIxNTU2ODg3OTQ5Nzg5NjcpK3IqKC0zODc4MDk5MjEyODY5MzYzZS0yMCpyLS4wMDAzMjY3ODA4Mjc5NDg1Mjg2Km4rLjA2ODY3NDIyMzg1OTUzNDUpLW4qKC4wMDAzMzYxOTcxNzc2MTgzOTM3Km4rLjc0MzA2NTkxNTEzNDIyNTQpO2VbaSsrXT0yNTUrdCooLjAwMDEzNTk2MzcyODEzNTg4ODQ4KnQrLjAwMDkyNDUzNzEzMjU3MzU4NSphKy4wMDAxMDU2NzM1OTYxODY4MzU5MypyKy4wMDA0NzkxODY0Njg3NDM2NTEyKm4tLjMxMDk2ODk1ODc1MTU4NzUpK2EqKC0uMDAwMjM1NDUzNDYxMDgzNzAzNDQqYSsuMDAwMjcwMjg0NTI1MzUzNDcxNCpyKy4wMDIwMjAwMzA4OTc3MzA3MTU2Km4tLjc0ODgwNTIxNjcwMTU0OTQpK3IqKDY4MzQ4MTU5OTgyMzU2NjJlLTIwKnIrLjAwMDE1MTY4NDUyMzYzNDYwOTczKm4tLjA5NzUxOTI3Nzc0NzI4OTMzKS1uKiguMDAwMzE4OTEzMTE3NTg4MzI4MSpuKy43MzY0ODgzODA3NzMzMTY4KTtlW2krK109MjU1K3QqKDEzNTk4NjUwNDExMzg1MzA3ZS0yMSp0Ky4wMDAxMjQyMzk1NjE3NTQ5MDg1MSphKy4wMDA0NzUxOTg1MDk3NTgzNTg5KnItMzY3MjkzMTc0NzY2MzA0MjJlLTIyKm4tLjA1NTYyMTg2OTgwMjY0MDM0KSthKiguMDAwMTYxNDEzODA1OTg3MjQ2NzYqYSsuMDAwOTY5MjIzOTEzMDcyNTE4NipyKy4wMDA3NzgyNjkyNDUwMDM2MjUzKm4tLjQ0MDE1MjMyMzY3NTI2NDYzKStyKig1LjA2ODg4MjkxNDA2ODc2OWUtNypyKy4wMDE3Nzc4MzY5MDExMzc1MDcxKm4tLjc1OTE0NTQ2NDk3NDk2MDkpLW4qKC4wMDAzNDM1MzE5OTY1MTA1NTUzKm4rLjcwNjM3NzAxODYxNjAxNDQpfXJldHVybiBlLnN1YmFycmF5KDAsaSl9X2NvbnZlcnRDbXlrVG9SZ2JhKGUpe2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrPTQpe2NvbnN0IGE9ZVt0XSxyPWVbdCsxXSxuPWVbdCsyXSxpPWVbdCszXTtlW3RdPTI1NSthKigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqYSsuMDAwODM3OTI2MjEyMTAxMzcyNypyKy4wMDAyODk0NzE4MTg4NjQzMjk0Km4rLjAwMzI2NDIzMTA1NzUzNzgwNippLTEuMTE4NTYxMTg2NzIwMzkzNykrciooMjYzNzQxMDc2MTYwODk0MDVlLTIxKnItODYyNjk0OTE1ODYzODU3MmUtMjAqbi0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSppLS4wMjE1NTY4ODc5NDk3ODk2NykrbiooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKm4tLjAwMDMyNjc4MDgyNzk0ODUyODYqaSsuMDY4Njc0MjIzODU5NTM0NSktaSooLjAwMDMzNjE5NzE3NzYxODM5MzcqaSsuNzQzMDY1OTE1MTM0MjI1NCk7ZVt0KzFdPTI1NSthKiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqYSsuMDAwOTI0NTM3MTMyNTczNTg1KnIrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKm4rLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqaS0uMzEwOTY4OTU4NzUxNTg3NSkrciooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCpyKy4wMDAyNzAyODQ1MjUzNTM0NzE0Km4rLjAwMjAyMDAzMDg5NzczMDcxNTYqaS0uNzQ4ODA1MjE2NzAxNTQ5NCkrbiooNjgzNDgxNTk5ODIzNTY2MmUtMjAqbisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqaS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWkqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmkrLjczNjQ4ODM4MDc3MzMxNjgpO2VbdCsyXT0yNTUrYSooMTM1OTg2NTA0MTEzODUzMDdlLTIxKmErLjAwMDEyNDIzOTU2MTc1NDkwODUxKnIrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqbi0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqaS0uMDU1NjIxODY5ODAyNjQwMzQpK3IqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NipyKy4wMDA5NjkyMjM5MTMwNzI1MTg2Km4rLjAwMDc3ODI2OTI0NTAwMzYyNTMqaS0uNDQwMTUyMzIzNjc1MjY0NjMpK24qKDUuMDY4ODgyOTE0MDY4NzY5ZS03Km4rLjAwMTc3NzgzNjkwMTEzNzUwNzEqaS0uNzU5MTQ1NDY0OTc0OTYwOSktaSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqaSsuNzA2Mzc3MDE4NjE2MDE0NCk7ZVt0KzNdPTI1NX1yZXR1cm4gZX1nZXREYXRhKGUpe2xldHt3aWR0aDp0LGhlaWdodDphLGZvcmNlUkdCQTpyPSExLGZvcmNlUkdCOmk9ITEsaXNTb3VyY2VQREY6cz0hMX09ZTtpZih0aGlzLm51bUNvbXBvbmVudHM+NCl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlIik7Y29uc3Qgbz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHQsYSxzKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiYocnx8aSkpe2NvbnN0IGU9by5sZW5ndGgqKHI/NDozKSx0PW5ldyBVaW50OENsYW1wZWRBcnJheShlKTtsZXQgYT0wO2lmKHIpKDAsbi5ncmF5VG9SR0JBKShvLG5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlcikpO2Vsc2UgZm9yKGNvbnN0IGUgb2Ygbyl7dFthKytdPWU7dFthKytdPWU7dFthKytdPWV9cmV0dXJuIHR9aWYoMz09PXRoaXMubnVtQ29tcG9uZW50cyYmdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpe2lmKHIpe2NvbnN0IGU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG8ubGVuZ3RoLzMqNCk7cmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYmEobyxlKX1yZXR1cm4gdGhpcy5fY29udmVydFljY1RvUmdiKG8pfWlmKDQ9PT10aGlzLm51bUNvbXBvbmVudHMpe2lmKHRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKXJldHVybiByP3RoaXMuX2NvbnZlcnRZY2NrVG9SZ2JhKG8pOmk/dGhpcy5fY29udmVydFljY2tUb1JnYihvKTp0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhvKTtpZihyKXJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiYShvKTtpZihpKXJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiKG8pfXJldHVybiBvfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQT1jb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQTt0LmNvbnZlcnRUb1JHQkE9ZnVuY3Rpb24gY29udmVydFRvUkdCQShlKXtzd2l0Y2goZS5raW5kKXtjYXNlIHIuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOnJldHVybiBjb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQShlKTtjYXNlIHIuSW1hZ2VLaW5kLlJHQl8yNEJQUDpyZXR1cm4gZnVuY3Rpb24gY29udmVydFJHQlRvUkdCQShlKXtsZXR7c3JjOnQsc3JjUG9zOmE9MCxkZXN0Om4sZGVzdFBvczppPTAsd2lkdGg6cyxoZWlnaHQ6b309ZSxjPTA7Y29uc3QgbD10Lmxlbmd0aD4+MixoPW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlcixhLGwpO2lmKHIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pe2Zvcig7YzxsLTI7Yys9MyxpKz00KXtjb25zdCBlPWhbY10sdD1oW2MrMV0sYT1oW2MrMl07bltpXT00Mjc4MTkwMDgwfGU7bltpKzFdPWU+Pj4yNHx0PDw4fDQyNzgxOTAwODA7bltpKzJdPXQ+Pj4xNnxhPDwxNnw0Mjc4MTkwMDgwO25baSszXT1hPj4+OHw0Mjc4MTkwMDgwfWZvcihsZXQgZT00KmMsYT10Lmxlbmd0aDtlPGE7ZSs9MyluW2krK109dFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNnw0Mjc4MTkwMDgwfWVsc2V7Zm9yKDtjPGwtMjtjKz0zLGkrPTQpe2NvbnN0IGU9aFtjXSx0PWhbYysxXSxhPWhbYysyXTtuW2ldPTI1NXxlO25baSsxXT1lPDwyNHx0Pj4+OHwyNTU7bltpKzJdPXQ8PDE2fGE+Pj4xNnwyNTU7bltpKzNdPWE8PDh8MjU1fWZvcihsZXQgZT00KmMsYT10Lmxlbmd0aDtlPGE7ZSs9MyluW2krK109dFtlXTw8MjR8dFtlKzFdPDwxNnx0W2UrMl08PDh8MjU1fXJldHVybntzcmNQb3M6YSxkZXN0UG9zOml9fShlKX1yZXR1cm4gbnVsbH07dC5ncmF5VG9SR0JBPWZ1bmN0aW9uIGdyYXlUb1JHQkEoZSx0KXtpZihyLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKWZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl0W2FdPTY1NzkzKmVbYV18NDI3ODE5MDA4MDtlbHNlIGZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl0W2FdPTE2ODQzMDA4KmVbYV18MjU1fTthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7dmFyIHI9YSgxNDUpO2Z1bmN0aW9uIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKGUpe2xldHtzcmM6dCxzcmNQb3M6YT0wLGRlc3Q6bix3aWR0aDppLGhlaWdodDpzLG5vbkJsYWNrQ29sb3I6bz00Mjk0OTY3Mjk1LGludmVyc2VEZWNvZGU6Yz0hMX09ZTtjb25zdCBsPXIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUsW2gsdV09Yz9bbyxsXTpbbCxvXSxkPWk+PjMsZj03JmksZz10Lmxlbmd0aDtuPW5ldyBVaW50MzJBcnJheShuLmJ1ZmZlcik7bGV0IHA9MDtmb3IobGV0IGU9MDtlPHM7ZSsrKXtmb3IoY29uc3QgZT1hK2Q7YTxlO2ErKyl7Y29uc3QgZT1hPGc/dFthXToyNTU7bltwKytdPTEyOCZlP3U6aDtuW3ArK109NjQmZT91Omg7bltwKytdPTMyJmU/dTpoO25bcCsrXT0xNiZlP3U6aDtuW3ArK109OCZlP3U6aDtuW3ArK109NCZlP3U6aDtuW3ArK109MiZlP3U6aDtuW3ArK109MSZlP3U6aH1pZigwPT09Ziljb250aW51ZTtjb25zdCBlPWE8Zz90W2ErK106MjU1O2ZvcihsZXQgdD0wO3Q8Zjt0KyspbltwKytdPWUmMTw8Ny10P3U6aH1yZXR1cm57c3JjUG9zOmEsZGVzdFBvczpwfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5KcHhTdHJlYW09dm9pZCAwO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTt2YXIgcj1hKDE2OSksbj1hKDE4MSksaT1hKDE0NSk7Y2xhc3MgSnB4U3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyZWFtPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLm1heWJlTGVuZ3RoPXQ7dGhpcy5wYXJhbXM9YX1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPW5ldyBuLkpweEltYWdlO2UucGFyc2UodGhpcy5ieXRlcyk7Y29uc3QgdD1lLndpZHRoLGE9ZS5oZWlnaHQscj1lLmNvbXBvbmVudHNDb3VudCxpPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1pKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtjb25zdCBuPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEqcik7Zm9yKGxldCBhPTA7YTxpO2ErKyl7Y29uc3QgaT1lLnRpbGVzW2FdLHM9aS53aWR0aCxvPWkuaGVpZ2h0LGM9aS5sZWZ0LGw9aS50b3AsaD1pLml0ZW1zO2xldCB1PTAsZD0odCpsK2MpKnI7Y29uc3QgZj10KnIsZz1zKnI7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3QgZT1oLnN1YmFycmF5KHUsdStnKTtuLnNldChlLGQpO3UrPWc7ZCs9Zn19dGhpcy5idWZmZXI9bn10aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGg7dGhpcy5lb2Y9ITB9fXQuSnB4U3RyZWFtPUpweFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkpweEltYWdlPXZvaWQgMDthKDE0MCk7YSgyKTthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7dmFyIHI9YSgxNDUpLG49YSgxNTApLGk9YSgxNzYpO2NsYXNzIEpweEVycm9yIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGBKUFggZXJyb3I6ICR7ZX1gLCJKcHhFcnJvciIpfX1jb25zdCBzPXtMTDowLExIOjEsSEw6MSxISDoyfTt0LkpweEltYWdlPWNsYXNzIEpweEltYWdle2NvbnN0cnVjdG9yKCl7dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZT0hMX1wYXJzZShlKXtpZig2NTM1OT09PSgwLG4ucmVhZFVpbnQxNikoZSwwKSl7dGhpcy5wYXJzZUNvZGVzdHJlYW0oZSwwLGUubGVuZ3RoKTtyZXR1cm59Y29uc3QgdD1lLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTx0Oyl7bGV0IGk9OCxzPSgwLG4ucmVhZFVpbnQzMikoZSxhKTtjb25zdCBvPSgwLG4ucmVhZFVpbnQzMikoZSxhKzQpO2ErPWk7aWYoMT09PXMpe3M9NDI5NDk2NzI5NiooMCxuLnJlYWRVaW50MzIpKGUsYSkrKDAsbi5yZWFkVWludDMyKShlLGErNCk7YSs9ODtpKz04fTA9PT1zJiYocz10LWEraSk7aWYoczxpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCBib3ggZmllbGQgc2l6ZSIpO2NvbnN0IGM9cy1pO2xldCBsPSEwO3N3aXRjaChvKXtjYXNlIDE3ODU3Mzc4MzI6bD0hMTticmVhaztjYXNlIDE2NjgyNDY2NDI6Y29uc3QgdD1lW2FdO2lmKDE9PT10KXtjb25zdCB0PSgwLG4ucmVhZFVpbnQzMikoZSxhKzMpO3N3aXRjaCh0KXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLHIud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK3QpfX1lbHNlIDI9PT10JiYoMCxyLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsYSxhK2MpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLG4ucmVhZFVpbnQzMikoZSxhKSYmKDAsci53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OmNvbnN0IGk9U3RyaW5nLmZyb21DaGFyQ29kZShvPj4yNCYyNTUsbz4+MTYmMjU1LG8+PjgmMjU1LDI1NSZvKTsoMCxyLndhcm4pKGBVbnN1cHBvcnRlZCBoZWFkZXIgdHlwZSAke299ICgke2l9KS5gKX1sJiYoYSs9Yyl9fXBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGUpe2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7dD49MDspe2NvbnN0IGE9dDt0PWUuZ2V0Qnl0ZSgpO2lmKDY1MzYxPT09KGE8PDh8dCkpe2Uuc2tpcCg0KTtjb25zdCB0PWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTtjb25zdCBpPWUuZ2V0VWludDE2KCk7dGhpcy53aWR0aD10LXI7dGhpcy5oZWlnaHQ9YS1uO3RoaXMuY29tcG9uZW50c0NvdW50PWk7dGhpcy5iaXRzUGVyQ29tcG9uZW50PTg7cmV0dXJufX10aHJvdyBuZXcgSnB4RXJyb3IoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX1wYXJzZUNvZGVzdHJlYW0oZSx0LGEpe2NvbnN0IGk9e307bGV0IHM9ITE7dHJ5e2xldCBvPXQ7Zm9yKDtvKzE8YTspe2NvbnN0IHQ9KDAsbi5yZWFkVWludDE2KShlLG8pO28rPTI7bGV0IGEsYyxsLGgsdSxkLGY9MDtzd2l0Y2godCl7Y2FzZSA2NTM1OTppLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IGc9e307Zy5Yc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2cuWXNpej0oMCxuLnJlYWRVaW50MzIpKGUsbys4KTtnLlhPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzEyKTtnLllPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzE2KTtnLlhUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzIwKTtnLllUc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxvKzI0KTtnLlhUT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsbysyOCk7Zy5ZVE9zaXo9KDAsbi5yZWFkVWludDMyKShlLG8rMzIpO2NvbnN0IHA9KDAsbi5yZWFkVWludDE2KShlLG8rMzYpO2cuQ3Npej1wO2NvbnN0IG09W107YT1vKzM4O2ZvcihsZXQgdD0wO3Q8cDt0Kyspe2NvbnN0IHQ9e3ByZWNpc2lvbjoxKygxMjcmZVthXSksaXNTaWduZWQ6ISEoMTI4JmVbYV0pLFhSc2l6OmVbYSsxXSxZUnNpejplW2ErMl19O2ErPTM7Y2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyh0LGcpO20ucHVzaCh0KX1pLlNJWj1nO2kuY29tcG9uZW50cz1tO2NhbGN1bGF0ZVRpbGVHcmlkcyhpLG0pO2kuUUNDPVtdO2kuQ09DPVtdO2JyZWFrO2Nhc2UgNjUzNzI6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7Y29uc3QgYj17fTthPW8rMjtjPWVbYSsrXTtzd2l0Y2goMzEmYyl7Y2FzZSAwOmg9ODt1PSEwO2JyZWFrO2Nhc2UgMTpoPTE2O3U9ITE7YnJlYWs7Y2FzZSAyOmg9MTY7dT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrYyl9Yi5ub1F1YW50aXphdGlvbj04PT09aDtiLnNjYWxhckV4cG91bmRlZD11O2IuZ3VhcmRCaXRzPWM+PjU7bD1bXTtmb3IoO2E8ZitvOyl7Y29uc3QgdD17fTtpZig4PT09aCl7dC5lcHNpbG9uPWVbYSsrXT4+Mzt0Lm11PTB9ZWxzZXt0LmVwc2lsb249ZVthXT4+Mzt0Lm11PSg3JmVbYV0pPDw4fGVbYSsxXTthKz0yfWwucHVzaCh0KX1iLlNQcWNkcz1sO2lmKGkubWFpbkhlYWRlcilpLlFDRD1iO2Vsc2V7aS5jdXJyZW50VGlsZS5RQ0Q9YjtpLmN1cnJlbnRUaWxlLlFDQz1bXX1icmVhaztjYXNlIDY1MzczOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IHk9e307YT1vKzI7bGV0IHc7aWYoaS5TSVouQ3NpejwyNTcpdz1lW2ErK107ZWxzZXt3PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yfWM9ZVthKytdO3N3aXRjaCgzMSZjKXtjYXNlIDA6aD04O3U9ITA7YnJlYWs7Y2FzZSAxOmg9MTY7dT0hMTticmVhaztjYXNlIDI6aD0xNjt1PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitjKX15Lm5vUXVhbnRpemF0aW9uPTg9PT1oO3kuc2NhbGFyRXhwb3VuZGVkPXU7eS5ndWFyZEJpdHM9Yz4+NTtsPVtdO2Zvcig7YTxmK287KXtjb25zdCB0PXt9O2lmKDg9PT1oKXt0LmVwc2lsb249ZVthKytdPj4zO3QubXU9MH1lbHNle3QuZXBzaWxvbj1lW2FdPj4zO3QubXU9KDcmZVthXSk8PDh8ZVthKzFdO2ErPTJ9bC5wdXNoKHQpfXkuU1BxY2RzPWw7aS5tYWluSGVhZGVyP2kuUUNDW3ddPXk6aS5jdXJyZW50VGlsZS5RQ0Nbd109eTticmVhaztjYXNlIDY1MzYyOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2NvbnN0IFM9e307YT1vKzI7Y29uc3QgeD1lW2ErK107Uy5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmeCk7Uy5zb3BNYXJrZXJVc2VkPSEhKDImeCk7Uy5lcGhNYXJrZXJVc2VkPSEhKDQmeCk7Uy5wcm9ncmVzc2lvbk9yZGVyPWVbYSsrXTtTLmxheWVyc0NvdW50PSgwLG4ucmVhZFVpbnQxNikoZSxhKTthKz0yO1MubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVthKytdO1MuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbYSsrXTtTLnhjYj0yKygxNSZlW2ErK10pO1MueWNiPTIrKDE1JmVbYSsrXSk7Y29uc3QgQz1lW2ErK107Uy5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzPSEhKDEmQyk7Uy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzPSEhKDImQyk7Uy50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3M9ISEoNCZDKTtTLnZlcnRpY2FsbHlTdHJpcGU9ISEoOCZDKTtTLnByZWRpY3RhYmxlVGVybWluYXRpb249ISEoMTYmQyk7Uy5zZWdtZW50YXRpb25TeW1ib2xVc2VkPSEhKDMyJkMpO1MucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uPWVbYSsrXTtpZihTLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2NvbnN0IHQ9W107Zm9yKDthPGYrbzspe2NvbnN0IHI9ZVthKytdO3QucHVzaCh7UFB4OjE1JnIsUFB5OnI+PjR9KX1TLnByZWNpbmN0c1NpemVzPXR9Y29uc3Qgdj1bXTtTLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJnYucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpO1MudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZ2LnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpO1MudmVydGljYWxseVN0cmlwZSYmdi5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIik7Uy5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZ2LnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKTtpZih2Lmxlbmd0aD4wKXtzPSEwOygwLHIud2FybikoYEpQWDogVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCR7di5qb2luKCIsICIpfSkuYCl9aWYoaS5tYWluSGVhZGVyKWkuQ09EPVM7ZWxzZXtpLmN1cnJlbnRUaWxlLkNPRD1TO2kuY3VycmVudFRpbGUuQ09DPVtdfWJyZWFrO2Nhc2UgNjU0MjQ6Zj0oMCxuLnJlYWRVaW50MTYpKGUsbyk7ZD17fTtkLmluZGV4PSgwLG4ucmVhZFVpbnQxNikoZSxvKzIpO2QubGVuZ3RoPSgwLG4ucmVhZFVpbnQzMikoZSxvKzQpO2QuZGF0YUVuZD1kLmxlbmd0aCtvLTI7ZC5wYXJ0SW5kZXg9ZVtvKzhdO2QucGFydHNDb3VudD1lW28rOV07aS5tYWluSGVhZGVyPSExO2lmKDA9PT1kLnBhcnRJbmRleCl7ZC5DT0Q9aS5DT0Q7ZC5DT0M9aS5DT0Muc2xpY2UoMCk7ZC5RQ0Q9aS5RQ0Q7ZC5RQ0M9aS5RQ0Muc2xpY2UoMCl9aS5jdXJyZW50VGlsZT1kO2JyZWFrO2Nhc2UgNjU0Mjc6ZD1pLmN1cnJlbnRUaWxlO2lmKDA9PT1kLnBhcnRJbmRleCl7aW5pdGlhbGl6ZVRpbGUoaSxkLmluZGV4KTtidWlsZFBhY2tldHMoaSl9Zj1kLmRhdGFFbmQtbztwYXJzZVRpbGVQYWNrZXRzKGksZSxvLGYpO2JyZWFrO2Nhc2UgNjUzNjM6KDAsci53YXJuKSgiSlBYOiBDb2Rlc3RyZWFtIGNvZGUgMHhGRjUzIChDT0MpIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTtjYXNlIDY1MzY1OmNhc2UgNjUzNjc6Y2FzZSA2NTM2ODpjYXNlIDY1MzgwOmY9KDAsbi5yZWFkVWludDE2KShlLG8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvZGVzdHJlYW0gY29kZTogIit0LnRvU3RyaW5nKDE2KSl9bys9Zn19Y2F0Y2goZSl7aWYoc3x8dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSl0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTsoMCxyLndhcm4pKGBKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICIke2UubWVzc2FnZX0iLmApfXRoaXMudGlsZXM9ZnVuY3Rpb24gdHJhbnNmb3JtQ29tcG9uZW50cyhlKXtjb25zdCB0PWUuU0laLGE9ZS5jb21wb25lbnRzLHI9dC5Dc2l6LG49W107Zm9yKGxldCB0PTAsaT1lLnRpbGVzLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWUudGlsZXNbdF0scz1bXTtmb3IobGV0IHQ9MDt0PHI7dCsrKXNbdF09dHJhbnNmb3JtVGlsZShlLGksdCk7Y29uc3Qgbz1zWzBdLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG8uaXRlbXMubGVuZ3RoKnIpLGw9e2xlZnQ6by5sZWZ0LHRvcDpvLnRvcCx3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodCxpdGVtczpjfTtsZXQgaCx1LGQsZixnLHAsbSxiPTA7aWYoaS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKXtjb25zdCBlPTQ9PT1yLHQ9c1swXS5pdGVtcyxuPXNbMV0uaXRlbXMsbz1zWzJdLml0ZW1zLGw9ZT9zWzNdLml0ZW1zOm51bGw7aD1hWzBdLnByZWNpc2lvbi04O3U9LjUrKDEyODw8aCk7Y29uc3QgeT1pLmNvbXBvbmVudHNbMF0sdz1yLTM7Zj10Lmxlbmd0aDtpZih5LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pZm9yKGQ9MDtkPGY7ZCsrLGIrPXcpe2c9dFtkXSt1O3A9bltkXTttPW9bZF07Y29uc3QgZT1nLShtK3A+PjIpO2NbYisrXT1lK20+Pmg7Y1tiKytdPWU+Pmg7Y1tiKytdPWUrcD4+aH1lbHNlIGZvcihkPTA7ZDxmO2QrKyxiKz13KXtnPXRbZF0rdTtwPW5bZF07bT1vW2RdO2NbYisrXT1nKzEuNDAyKm0+Pmg7Y1tiKytdPWctLjM0NDEzKnAtLjcxNDE0Km0+Pmg7Y1tiKytdPWcrMS43NzIqcD4+aH1pZihlKWZvcihkPTAsYj0zO2Q8ZjtkKyssYis9NCljW2JdPWxbZF0rdT4+aH1lbHNlIGZvcihsZXQgZT0wO2U8cjtlKyspe2NvbnN0IHQ9c1tlXS5pdGVtcztoPWFbZV0ucHJlY2lzaW9uLTg7dT0uNSsoMTI4PDxoKTtmb3IoYj1lLGQ9MCxmPXQubGVuZ3RoO2Q8ZjtkKyspe2NbYl09dFtkXSt1Pj5oO2IrPXJ9fW4ucHVzaChsKX1yZXR1cm4gbn0oaSk7dGhpcy53aWR0aD1pLlNJWi5Yc2l6LWkuU0laLlhPc2l6O3RoaXMuaGVpZ2h0PWkuU0laLllzaXotaS5TSVouWU9zaXo7dGhpcy5jb21wb25lbnRzQ291bnQ9aS5TSVouQ3Npen19O2Z1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvbmVudERpbWVuc2lvbnMoZSx0KXtlLngwPU1hdGguY2VpbCh0LlhPc2l6L2UuWFJzaXopO2UueDE9TWF0aC5jZWlsKHQuWHNpei9lLlhSc2l6KTtlLnkwPU1hdGguY2VpbCh0LllPc2l6L2UuWVJzaXopO2UueTE9TWF0aC5jZWlsKHQuWXNpei9lLllSc2l6KTtlLndpZHRoPWUueDEtZS54MDtlLmhlaWdodD1lLnkxLWUueTB9ZnVuY3Rpb24gY2FsY3VsYXRlVGlsZUdyaWRzKGUsdCl7Y29uc3QgYT1lLlNJWixyPVtdO2xldCBuO2NvbnN0IGk9TWF0aC5jZWlsKChhLlhzaXotYS5YVE9zaXopL2EuWFRzaXopLHM9TWF0aC5jZWlsKChhLllzaXotYS5ZVE9zaXopL2EuWVRzaXopO2ZvcihsZXQgZT0wO2U8cztlKyspZm9yKGxldCB0PTA7dDxpO3QrKyl7bj17fTtuLnR4MD1NYXRoLm1heChhLlhUT3Npeit0KmEuWFRzaXosYS5YT3Npeik7bi50eTA9TWF0aC5tYXgoYS5ZVE9zaXorZSphLllUc2l6LGEuWU9zaXopO24udHgxPU1hdGgubWluKGEuWFRPc2l6Kyh0KzEpKmEuWFRzaXosYS5Yc2l6KTtuLnR5MT1NYXRoLm1pbihhLllUT3NpeisoZSsxKSphLllUc2l6LGEuWXNpeik7bi53aWR0aD1uLnR4MS1uLnR4MDtuLmhlaWdodD1uLnR5MS1uLnR5MDtuLmNvbXBvbmVudHM9W107ci5wdXNoKG4pfWUudGlsZXM9cjtmb3IobGV0IGU9MCxpPWEuQ3NpejtlPGk7ZSsrKXtjb25zdCBhPXRbZV07Zm9yKGxldCB0PTAsaT1yLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPXt9O249clt0XTtpLnRjeDA9TWF0aC5jZWlsKG4udHgwL2EuWFJzaXopO2kudGN5MD1NYXRoLmNlaWwobi50eTAvYS5ZUnNpeik7aS50Y3gxPU1hdGguY2VpbChuLnR4MS9hLlhSc2l6KTtpLnRjeTE9TWF0aC5jZWlsKG4udHkxL2EuWVJzaXopO2kud2lkdGg9aS50Y3gxLWkudGN4MDtpLmhlaWdodD1pLnRjeTEtaS50Y3kwO24uY29tcG9uZW50c1tlXT1pfX19ZnVuY3Rpb24gZ2V0QmxvY2tzRGltZW5zaW9ucyhlLHQsYSl7Y29uc3Qgcj10LmNvZGluZ1N0eWxlUGFyYW1ldGVycyxuPXt9O2lmKHIuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyl7bi5QUHg9ci5wcmVjaW5jdHNTaXplc1thXS5QUHg7bi5QUHk9ci5wcmVjaW5jdHNTaXplc1thXS5QUHl9ZWxzZXtuLlBQeD0xNTtuLlBQeT0xNX1uLnhjYl89YT4wP01hdGgubWluKHIueGNiLG4uUFB4LTEpOk1hdGgubWluKHIueGNiLG4uUFB4KTtuLnljYl89YT4wP01hdGgubWluKHIueWNiLG4uUFB5LTEpOk1hdGgubWluKHIueWNiLG4uUFB5KTtyZXR1cm4gbn1mdW5jdGlvbiBidWlsZFByZWNpbmN0cyhlLHQsYSl7Y29uc3Qgcj0xPDxhLlBQeCxuPTE8PGEuUFB5LGk9MD09PXQucmVzTGV2ZWwscz0xPDxhLlBQeCsoaT8wOi0xKSxvPTE8PGEuUFB5KyhpPzA6LTEpLGM9dC50cngxPnQudHJ4MD9NYXRoLmNlaWwodC50cngxL3IpLU1hdGguZmxvb3IodC50cngwL3IpOjAsbD10LnRyeTE+dC50cnkwP01hdGguY2VpbCh0LnRyeTEvbiktTWF0aC5mbG9vcih0LnRyeTAvbik6MCxoPWMqbDt0LnByZWNpbmN0UGFyYW1ldGVycz17cHJlY2luY3RXaWR0aDpyLHByZWNpbmN0SGVpZ2h0Om4sbnVtcHJlY2luY3Rzd2lkZTpjLG51bXByZWNpbmN0c2hpZ2g6bCxudW1wcmVjaW5jdHM6aCxwcmVjaW5jdFdpZHRoSW5TdWJiYW5kOnMscHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6b319ZnVuY3Rpb24gYnVpbGRDb2RlYmxvY2tzKGUsdCxhKXtjb25zdCByPWEueGNiXyxuPWEueWNiXyxpPTE8PHIscz0xPDxuLG89dC50YngwPj5yLGM9dC50YnkwPj5uLGw9dC50YngxK2ktMT4+cixoPXQudGJ5MStzLTE+Pm4sdT10LnJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLGQ9W10sZj1bXTtsZXQgZyxwLG0sYjtmb3IocD1jO3A8aDtwKyspZm9yKGc9bztnPGw7ZysrKXttPXtjYng6ZyxjYnk6cCx0YngwOmkqZyx0YnkwOnMqcCx0YngxOmkqKGcrMSksdGJ5MTpzKihwKzEpfTttLnRieDBfPU1hdGgubWF4KHQudGJ4MCxtLnRieDApO20udGJ5MF89TWF0aC5tYXgodC50YnkwLG0udGJ5MCk7bS50YngxXz1NYXRoLm1pbih0LnRieDEsbS50YngxKTttLnRieTFfPU1hdGgubWluKHQudGJ5MSxtLnRieTEpO2I9TWF0aC5mbG9vcigobS50YngwXy10LnRieDApL3UucHJlY2luY3RXaWR0aEluU3ViYmFuZCkrTWF0aC5mbG9vcigobS50YnkwXy10LnRieTApL3UucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpKnUubnVtcHJlY2luY3Rzd2lkZTttLnByZWNpbmN0TnVtYmVyPWI7bS5zdWJiYW5kVHlwZT10LnR5cGU7bS5MYmxvY2s9MztpZihtLnRieDFfPD1tLnRieDBffHxtLnRieTFfPD1tLnRieTBfKWNvbnRpbnVlO2QucHVzaChtKTtsZXQgZT1mW2JdO2lmKHZvaWQgMCE9PWUpe2c8ZS5jYnhNaW4/ZS5jYnhNaW49ZzpnPmUuY2J4TWF4JiYoZS5jYnhNYXg9Zyk7cDxlLmNieU1pbj9lLmNieE1pbj1wOnA+ZS5jYnlNYXgmJihlLmNieU1heD1wKX1lbHNlIGZbYl09ZT17Y2J4TWluOmcsY2J5TWluOnAsY2J4TWF4OmcsY2J5TWF4OnB9O20ucHJlY2luY3Q9ZX10LmNvZGVibG9ja1BhcmFtZXRlcnM9e2NvZGVibG9ja1dpZHRoOnIsY29kZWJsb2NrSGVpZ2h0Om4sbnVtY29kZWJsb2Nrd2lkZTpsLW8rMSxudW1jb2RlYmxvY2toaWdoOmgtYysxfTt0LmNvZGVibG9ja3M9ZDt0LnByZWNpbmN0cz1mfWZ1bmN0aW9uIGNyZWF0ZVBhY2tldChlLHQsYSl7Y29uc3Qgcj1bXSxuPWUuc3ViYmFuZHM7Zm9yKGxldCBlPTAsYT1uLmxlbmd0aDtlPGE7ZSsrKXtjb25zdCBhPW5bZV0uY29kZWJsb2Nrcztmb3IobGV0IGU9MCxuPWEubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49YVtlXTtuLnByZWNpbmN0TnVtYmVyPT09dCYmci5wdXNoKG4pfX1yZXR1cm57bGF5ZXJOdW1iZXI6YSxjb2RlYmxvY2tzOnJ9fWZ1bmN0aW9uIExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288bjtvKyspe2Zvcig7Yzw9cztjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYoYz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW2NdLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLG8pO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsci5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBvPTAsYz0wLGw9MCxoPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKXtmb3IoO288PXM7bysrKXtmb3IoO2M8bjtjKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF07aWYobz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW29dLGE9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7aDxhOyl7Y29uc3QgZT1jcmVhdGVQYWNrZXQodCxoLGMpO2grKztyZXR1cm4gZX1oPTB9bD0wfWM9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzLG8sYyxsLGg9MDtmb3IoYz0wO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2g9TWF0aC5tYXgoaCxlLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpfWNvbnN0IHU9bmV3IEludDMyQXJyYXkoaCsxKTtmb3Iobz0wO288PWg7KytvKXtsZXQgZT0wO2ZvcihjPTA7YzxpOysrYyl7Y29uc3QgdD1yLmNvbXBvbmVudHNbY10ucmVzb2x1dGlvbnM7bzx0Lmxlbmd0aCYmKGU9TWF0aC5tYXgoZSx0W29dLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHMpKX11W29dPWV9cz0wO289MDtjPTA7bD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCl7Zm9yKDtvPD1oO28rKyl7Zm9yKDtsPHVbb107bCsrKXtmb3IoO2M8aTtjKyspe2NvbnN0IGU9ci5jb21wb25lbnRzW2NdO2lmKG8+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KWNvbnRpbnVlO2NvbnN0IHQ9ZS5yZXNvbHV0aW9uc1tvXSxhPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztpZighKGw+PWEpKXtmb3IoO3M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQsbCxzKTtzKys7cmV0dXJuIGV9cz0wfX1jPTB9bD0wfXRocm93IG5ldyBKcHhFcnJvcigiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKXtjb25zdCB0PWUuU0laLGE9ZS5jdXJyZW50VGlsZS5pbmRleCxyPWUudGlsZXNbYV0sbj1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsaT10LkNzaXoscz1nZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHIpLG89cztsZXQgYz0wLGw9MCxoPTAsdT0wLGQ9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7ZDxvLm1heE51bUhpZ2g7ZCsrKXtmb3IoO3U8by5tYXhOdW1XaWRlO3UrKyl7Zm9yKDtoPGk7aCsrKXtjb25zdCBlPXIuY29tcG9uZW50c1toXSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmb3IoO2w8PXQ7bCsrKXtjb25zdCB0PWUucmVzb2x1dGlvbnNbbF0sYT1zLmNvbXBvbmVudHNbaF0ucmVzb2x1dGlvbnNbbF0scj1nZXRQcmVjaW5jdEluZGV4SWZFeGlzdCh1LGQsYSxvLHQpO2lmKG51bGwhPT1yKXtmb3IoO2M8bjspe2NvbnN0IGU9Y3JlYXRlUGFja2V0KHQscixjKTtjKys7cmV0dXJuIGV9Yz0wfX1sPTB9aD0wfXU9MH10aHJvdyBuZXcgSnB4RXJyb3IoIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoZSl7Y29uc3QgdD1lLlNJWixhPWUuY3VycmVudFRpbGUuaW5kZXgscj1lLnRpbGVzW2FdLG49ci5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6LHM9Z2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZShyKTtsZXQgbz0wLGM9MCxsPTAsaD0wLHU9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpe2Zvcig7bDxpOysrbCl7Y29uc3QgZT1yLmNvbXBvbmVudHNbbF0sdD1zLmNvbXBvbmVudHNbbF0sYT1lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7Zm9yKDt1PHQubWF4TnVtSGlnaDt1Kyspe2Zvcig7aDx0Lm1heE51bVdpZGU7aCsrKXtmb3IoO2M8PWE7YysrKXtjb25zdCBhPWUucmVzb2x1dGlvbnNbY10scj10LnJlc29sdXRpb25zW2NdLGk9Z2V0UHJlY2luY3RJbmRleElmRXhpc3QoaCx1LHIsdCxhKTtpZihudWxsIT09aSl7Zm9yKDtvPG47KXtjb25zdCBlPWNyZWF0ZVBhY2tldChhLGksbyk7bysrO3JldHVybiBlfW89MH19Yz0wfWg9MH11PTB9dGhyb3cgbmV3IEpweEVycm9yKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChlLHQsYSxyLG4pe2NvbnN0IGk9ZSpyLm1pbldpZHRoLHM9dCpyLm1pbkhlaWdodDtpZihpJWEud2lkdGghPTB8fHMlYS5oZWlnaHQhPTApcmV0dXJuIG51bGw7Y29uc3Qgbz1zL2Eud2lkdGgqbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtyZXR1cm4gaS9hLmhlaWdodCtvfWZ1bmN0aW9uIGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUoZSl7Y29uc3QgdD1lLmNvbXBvbmVudHMubGVuZ3RoO2xldCBhPU51bWJlci5NQVhfVkFMVUUscj1OdW1iZXIuTUFYX1ZBTFVFLG49MCxpPTA7Y29uc3Qgcz1uZXcgQXJyYXkodCk7Zm9yKGxldCBvPTA7bzx0O28rKyl7Y29uc3QgdD1lLmNvbXBvbmVudHNbb10sYz10LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbD1uZXcgQXJyYXkoYysxKTtsZXQgaD1OdW1iZXIuTUFYX1ZBTFVFLHU9TnVtYmVyLk1BWF9WQUxVRSxkPTAsZj0wLGc9MTtmb3IobGV0IGU9YztlPj0wOy0tZSl7Y29uc3QgYT10LnJlc29sdXRpb25zW2VdLHI9ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoLG49ZyphLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodDtoPU1hdGgubWluKGgscik7dT1NYXRoLm1pbih1LG4pO2Q9TWF0aC5tYXgoZCxhLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtmPU1hdGgubWF4KGYsYS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCk7bFtlXT17d2lkdGg6cixoZWlnaHQ6bn07Zzw8PTF9YT1NYXRoLm1pbihhLGgpO3I9TWF0aC5taW4ocix1KTtuPU1hdGgubWF4KG4sZCk7aT1NYXRoLm1heChpLGYpO3Nbb109e3Jlc29sdXRpb25zOmwsbWluV2lkdGg6aCxtaW5IZWlnaHQ6dSxtYXhOdW1XaWRlOmQsbWF4TnVtSGlnaDpmfX1yZXR1cm57Y29tcG9uZW50czpzLG1pbldpZHRoOmEsbWluSGVpZ2h0OnIsbWF4TnVtV2lkZTpuLG1heE51bUhpZ2g6aX19ZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGUpe2NvbnN0IHQ9ZS5TSVosYT1lLmN1cnJlbnRUaWxlLmluZGV4LHI9ZS50aWxlc1thXSxuPXQuQ3Npejtmb3IobGV0IGU9MDtlPG47ZSsrKXtjb25zdCB0PXIuY29tcG9uZW50c1tlXSxhPXQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxuPVtdLGk9W107Zm9yKGxldCBlPTA7ZTw9YTtlKyspe2NvbnN0IHI9Z2V0QmxvY2tzRGltZW5zaW9ucygwLHQsZSkscz17fSxvPTE8PGEtZTtzLnRyeDA9TWF0aC5jZWlsKHQudGN4MC9vKTtzLnRyeTA9TWF0aC5jZWlsKHQudGN5MC9vKTtzLnRyeDE9TWF0aC5jZWlsKHQudGN4MS9vKTtzLnRyeTE9TWF0aC5jZWlsKHQudGN5MS9vKTtzLnJlc0xldmVsPWU7YnVpbGRQcmVjaW5jdHMoMCxzLHIpO24ucHVzaChzKTtsZXQgYztpZigwPT09ZSl7Yz17fTtjLnR5cGU9IkxMIjtjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9vKTtjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9vKTtjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9vKTtjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9vKTtjLnJlc29sdXRpb249cztidWlsZENvZGVibG9ja3MoMCxjLHIpO2kucHVzaChjKTtzLnN1YmJhbmRzPVtjXX1lbHNle2NvbnN0IG49MTw8YS1lKzEsbz1bXTtjPXt9O2MudHlwZT0iSEwiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24pO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24pO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iTEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24pO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24pO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtjPXt9O2MudHlwZT0iSEgiO2MudGJ4MD1NYXRoLmNlaWwodC50Y3gwL24tLjUpO2MudGJ5MD1NYXRoLmNlaWwodC50Y3kwL24tLjUpO2MudGJ4MT1NYXRoLmNlaWwodC50Y3gxL24tLjUpO2MudGJ5MT1NYXRoLmNlaWwodC50Y3kxL24tLjUpO2MucmVzb2x1dGlvbj1zO2J1aWxkQ29kZWJsb2NrcygwLGMscik7aS5wdXNoKGMpO28ucHVzaChjKTtzLnN1YmJhbmRzPW99fXQucmVzb2x1dGlvbnM9bjt0LnN1YmJhbmRzPWl9Y29uc3QgaT1yLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMucHJvZ3Jlc3Npb25PcmRlcjtzd2l0Y2goaSl7Y2FzZSAwOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgMTpyLnBhY2tldHNJdGVyYXRvcj1uZXcgUmVzb2x1dGlvbkxheWVyQ29tcG9uZW50UG9zaXRpb25JdGVyYXRvcihlKTticmVhaztjYXNlIDI6ci5wYWNrZXRzSXRlcmF0b3I9bmV3IFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoZSk7YnJlYWs7Y2FzZSAzOnIucGFja2V0c0l0ZXJhdG9yPW5ldyBQb3NpdGlvbkNvbXBvbmVudFJlc29sdXRpb25MYXllckl0ZXJhdG9yKGUpO2JyZWFrO2Nhc2UgNDpyLnBhY2tldHNJdGVyYXRvcj1uZXcgQ29tcG9uZW50UG9zaXRpb25SZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihlKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKcHhFcnJvcihgVW5zdXBwb3J0ZWQgcHJvZ3Jlc3Npb24gb3JkZXIgJHtpfWApfX1mdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGUsdCxhLHIpe2xldCBpLHM9MCxvPTAsYz0hMTtmdW5jdGlvbiByZWFkQml0cyhlKXtmb3IoO288ZTspe2NvbnN0IGU9dFthK3NdO3MrKztpZihjKXtpPWk8PDd8ZTtvKz03O2M9ITF9ZWxzZXtpPWk8PDh8ZTtvKz04fTI1NT09PWUmJihjPSEwKX1vLT1lO3JldHVybiBpPj4+byYoMTw8ZSktMX1mdW5jdGlvbiBza2lwTWFya2VySWZFcXVhbChlKXtpZigyNTU9PT10W2Ercy0xXSYmdFthK3NdPT09ZSl7c2tpcEJ5dGVzKDEpO3JldHVybiEwfWlmKDI1NT09PXRbYStzXSYmdFthK3MrMV09PT1lKXtza2lwQnl0ZXMoMik7cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gc2tpcEJ5dGVzKGUpe3MrPWV9ZnVuY3Rpb24gYWxpZ25Ub0J5dGUoKXtvPTA7aWYoYyl7cysrO2M9ITF9fWZ1bmN0aW9uIHJlYWRDb2RpbmdwYXNzZXMoKXtpZigwPT09cmVhZEJpdHMoMSkpcmV0dXJuIDE7aWYoMD09PXJlYWRCaXRzKDEpKXJldHVybiAyO2xldCBlPXJlYWRCaXRzKDIpO2lmKGU8MylyZXR1cm4gZSszO2U9cmVhZEJpdHMoNSk7aWYoZTwzMSlyZXR1cm4gZSs2O2U9cmVhZEJpdHMoNyk7cmV0dXJuIGUrMzd9Y29uc3QgbD1lLmN1cnJlbnRUaWxlLmluZGV4LGg9ZS50aWxlc1tsXSx1PWUuQ09ELnNvcE1hcmtlclVzZWQsZD1lLkNPRC5lcGhNYXJrZXJVc2VkLGY9aC5wYWNrZXRzSXRlcmF0b3I7Zm9yKDtzPHI7KXthbGlnblRvQnl0ZSgpO3UmJnNraXBNYXJrZXJJZkVxdWFsKDE0NSkmJnNraXBCeXRlcyg0KTtjb25zdCBlPWYubmV4dFBhY2tldCgpO2lmKCFyZWFkQml0cygxKSljb250aW51ZTtjb25zdCByPWUubGF5ZXJOdW1iZXIsaT1bXTtsZXQgbztmb3IobGV0IHQ9MCxhPWUuY29kZWJsb2Nrcy5sZW5ndGg7dDxhO3QrKyl7bz1lLmNvZGVibG9ja3NbdF07bGV0IGE9by5wcmVjaW5jdDtjb25zdCBzPW8uY2J4LWEuY2J4TWluLGM9by5jYnktYS5jYnlNaW47bGV0IGwsaCx1PSExLGQ9ITE7aWYodm9pZCAwIT09by5pbmNsdWRlZCl1PSEhcmVhZEJpdHMoMSk7ZWxzZXthPW8ucHJlY2luY3Q7bGV0IGU7aWYodm9pZCAwIT09YS5pbmNsdXNpb25UcmVlKWU9YS5pbmNsdXNpb25UcmVlO2Vsc2V7Y29uc3QgdD1hLmNieE1heC1hLmNieE1pbisxLG49YS5jYnlNYXgtYS5jYnlNaW4rMTtlPW5ldyBJbmNsdXNpb25UcmVlKHQsbixyKTtoPW5ldyBUYWdUcmVlKHQsbik7YS5pbmNsdXNpb25UcmVlPWU7YS56ZXJvQml0UGxhbmVzVHJlZT1oO2ZvcihsZXQgZT0wO2U8cjtlKyspaWYoMCE9PXJlYWRCaXRzKDEpKXRocm93IG5ldyBKcHhFcnJvcigiSW52YWxpZCB0YWcgdHJlZSIpfWlmKGUucmVzZXQocyxjLHIpKWZvcig7Oyl7aWYoIXJlYWRCaXRzKDEpKXtlLmluY3JlbWVudFZhbHVlKHIpO2JyZWFrfWw9IWUubmV4dExldmVsKCk7aWYobCl7by5pbmNsdWRlZD0hMDt1PWQ9ITA7YnJlYWt9fX1pZighdSljb250aW51ZTtpZihkKXtoPWEuemVyb0JpdFBsYW5lc1RyZWU7aC5yZXNldChzLGMpO2Zvcig7OylpZihyZWFkQml0cygxKSl7bD0haC5uZXh0TGV2ZWwoKTtpZihsKWJyZWFrfWVsc2UgaC5pbmNyZW1lbnRWYWx1ZSgpO28uemVyb0JpdFBsYW5lcz1oLnZhbHVlfWNvbnN0IGY9cmVhZENvZGluZ3Bhc3NlcygpO2Zvcig7cmVhZEJpdHMoMSk7KW8uTGJsb2NrKys7Y29uc3QgZz0oMCxuLmxvZzIpKGYpLHA9cmVhZEJpdHMoKGY8MTw8Zz9nLTE6Zykrby5MYmxvY2spO2kucHVzaCh7Y29kZWJsb2NrOm8sY29kaW5ncGFzc2VzOmYsZGF0YUxlbmd0aDpwfSl9YWxpZ25Ub0J5dGUoKTtkJiZza2lwTWFya2VySWZFcXVhbCgxNDYpO2Zvcig7aS5sZW5ndGg+MDspe2NvbnN0IGU9aS5zaGlmdCgpO289ZS5jb2RlYmxvY2s7dm9pZCAwPT09by5kYXRhJiYoby5kYXRhPVtdKTtvLmRhdGEucHVzaCh7ZGF0YTp0LHN0YXJ0OmErcyxlbmQ6YStzK2UuZGF0YUxlbmd0aCxjb2RpbmdwYXNzZXM6ZS5jb2RpbmdwYXNzZXN9KTtzKz1lLmRhdGFMZW5ndGh9fXJldHVybiBzfWZ1bmN0aW9uIGNvcHlDb2VmZmljaWVudHMoZSx0LGEscixuLHMsbyxjLGwpe2NvbnN0IGg9ci50YngwLHU9ci50YnkwLGQ9ci50YngxLXIudGJ4MCxmPXIuY29kZWJsb2NrcyxnPSJIIj09PXIudHlwZS5jaGFyQXQoMCk/MTowLHA9IkgiPT09ci50eXBlLmNoYXJBdCgxKT90OjA7Zm9yKGxldCBhPTAsbT1mLmxlbmd0aDthPG07KythKXtjb25zdCBtPWZbYV0sYj1tLnRieDFfLW0udGJ4MF8seT1tLnRieTFfLW0udGJ5MF87aWYoMD09PWJ8fDA9PT15KWNvbnRpbnVlO2lmKHZvaWQgMD09PW0uZGF0YSljb250aW51ZTtjb25zdCB3PW5ldyBCaXRNb2RlbChiLHksbS5zdWJiYW5kVHlwZSxtLnplcm9CaXRQbGFuZXMscyk7bGV0IFM9Mjtjb25zdCB4PW0uZGF0YTtsZXQgQyx2LGssTz0wLFQ9MDtmb3IoQz0wLHY9eC5sZW5ndGg7Qzx2O0MrKyl7az14W0NdO08rPWsuZW5kLWsuc3RhcnQ7VCs9ay5jb2RpbmdwYXNzZXN9Y29uc3QgTT1uZXcgVWludDhBcnJheShPKTtsZXQgRT0wO2ZvcihDPTAsdj14Lmxlbmd0aDtDPHY7QysrKXtrPXhbQ107Y29uc3QgZT1rLmRhdGEuc3ViYXJyYXkoay5zdGFydCxrLmVuZCk7TS5zZXQoZSxFKTtFKz1lLmxlbmd0aH1jb25zdCBEPW5ldyBpLkFyaXRobWV0aWNEZWNvZGVyKE0sMCxPKTt3LnNldERlY29kZXIoRCk7Zm9yKEM9MDtDPFQ7QysrKXtzd2l0Y2goUyl7Y2FzZSAwOncucnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCk7YnJlYWs7Y2FzZSAxOncucnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKTticmVhaztjYXNlIDI6dy5ydW5DbGVhbnVwUGFzcygpO2MmJncuY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKX1sJiZ3LnJlc2V0KCk7Uz0oUysxKSUzfWxldCBSPW0udGJ4MF8taCsobS50YnkwXy11KSpkO2NvbnN0IE49dy5jb2VmZmljZW50c1NpZ24sTD13LmNvZWZmaWNlbnRzTWFnbml0dWRlLCQ9dy5iaXRzRGVjb2RlZCxfPW8/MDouNTtsZXQgaixVLFg7RT0wO2NvbnN0IEg9IkxMIiE9PXIudHlwZTtmb3IoQz0wO0M8eTtDKyspe2NvbnN0IGE9MiooUi9kfDApKih0LWQpK2crcDtmb3Ioaj0wO2o8YjtqKyspe1U9TFtFXTtpZigwIT09VSl7VT0oVStfKSpuOzAhPT1OW0VdJiYoVT0tVSk7WD0kW0VdO2VbSD9hKyhSPDwxKTpSXT1vJiZYPj1zP1U6VSooMTw8cy1YKX1SKys7RSsrfVIrPWQtYn19fWZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUoZSx0LGEpe2NvbnN0IHI9dC5jb21wb25lbnRzW2FdLG49ci5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsaT1yLnF1YW50aXphdGlvblBhcmFtZXRlcnMsbz1uLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxjPWkuU1BxY2RzLGw9aS5zY2FsYXJFeHBvdW5kZWQsaD1pLmd1YXJkQml0cyx1PW4uc2VnbWVudGF0aW9uU3ltYm9sVXNlZCxkPW4ucmVzZXRDb250ZXh0UHJvYmFiaWxpdGllcyxmPWUuY29tcG9uZW50c1thXS5wcmVjaXNpb24sZz1uLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbixwPWc/bmV3IFJldmVyc2libGVUcmFuc2Zvcm06bmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSxtPVtdO2xldCBiPTA7Zm9yKGxldCBlPTA7ZTw9bztlKyspe2NvbnN0IHQ9ci5yZXNvbHV0aW9uc1tlXSxhPXQudHJ4MS10LnRyeDAsbj10LnRyeTEtdC50cnkwLGk9bmV3IEZsb2F0MzJBcnJheShhKm4pO2ZvcihsZXQgcj0wLG49dC5zdWJiYW5kcy5sZW5ndGg7cjxuO3IrKyl7bGV0IG4sbztpZihsKXtuPWNbYl0ubXU7bz1jW2JdLmVwc2lsb247YisrfWVsc2V7bj1jWzBdLm11O289Y1swXS5lcHNpbG9uKyhlPjA/MS1lOjApfWNvbnN0IHA9dC5zdWJiYW5kc1tyXSxtPXNbcC50eXBlXTtjb3B5Q29lZmZpY2llbnRzKGksYSwwLHAsZz8xOjIqKihmK20tbykqKDErbi8yMDQ4KSxoK28tMSxnLHUsZCl9bS5wdXNoKHt3aWR0aDphLGhlaWdodDpuLGl0ZW1zOml9KX1jb25zdCB5PXAuY2FsY3VsYXRlKG0sci50Y3gwLHIudGN5MCk7cmV0dXJue2xlZnQ6ci50Y3gwLHRvcDpyLnRjeTAsd2lkdGg6eS53aWR0aCxoZWlnaHQ6eS5oZWlnaHQsaXRlbXM6eS5pdGVtc319ZnVuY3Rpb24gaW5pdGlhbGl6ZVRpbGUoZSx0KXtjb25zdCBhPWUuU0laLkNzaXoscj1lLnRpbGVzW3RdO2ZvcihsZXQgdD0wO3Q8YTt0Kyspe2NvbnN0IGE9ci5jb21wb25lbnRzW3RdLG49dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbdF0/ZS5jdXJyZW50VGlsZS5RQ0NbdF06ZS5jdXJyZW50VGlsZS5RQ0Q7YS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW47Y29uc3QgaT12b2lkIDAhPT1lLmN1cnJlbnRUaWxlLkNPQ1t0XT9lLmN1cnJlbnRUaWxlLkNPQ1t0XTplLmN1cnJlbnRUaWxlLkNPRDthLmNvZGluZ1N0eWxlUGFyYW1ldGVycz1pfXIuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycz1lLmN1cnJlbnRUaWxlLkNPRH1jbGFzcyBUYWdUcmVle2NvbnN0cnVjdG9yKGUsdCl7Y29uc3QgYT0oMCxuLmxvZzIpKE1hdGgubWF4KGUsdCkpKzE7dGhpcy5sZXZlbHM9W107Zm9yKGxldCByPTA7cjxhO3IrKyl7Y29uc3QgYT17d2lkdGg6ZSxoZWlnaHQ6dCxpdGVtczpbXX07dGhpcy5sZXZlbHMucHVzaChhKTtlPU1hdGguY2VpbChlLzIpO3Q9TWF0aC5jZWlsKHQvMil9fXJlc2V0KGUsdCl7bGV0IGEscj0wLG49MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7YT10aGlzLmxldmVsc1tyXTtjb25zdCBpPWUrdCphLndpZHRoO2lmKHZvaWQgMCE9PWEuaXRlbXNbaV0pe249YS5pdGVtc1tpXTticmVha31hLmluZGV4PWk7ZT4+PTE7dD4+PTE7cisrfXItLTthPXRoaXMubGV2ZWxzW3JdO2EuaXRlbXNbYS5pbmRleF09bjt0aGlzLmN1cnJlbnRMZXZlbD1yO2RlbGV0ZSB0aGlzLnZhbHVlfWluY3JlbWVudFZhbHVlKCl7Y29uc3QgZT10aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07ZS5pdGVtc1tlLmluZGV4XSsrfW5leHRMZXZlbCgpe2xldCBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV07Y29uc3QgYT10Lml0ZW1zW3QuaW5kZXhdO2UtLTtpZihlPDApe3RoaXMudmFsdWU9YTtyZXR1cm4hMX10aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jbGFzcyBJbmNsdXNpb25UcmVle2NvbnN0cnVjdG9yKGUsdCxhKXtjb25zdCByPSgwLG4ubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IobGV0IG49MDtuPHI7bisrKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSsrKXJbZV09YTtjb25zdCBuPXt3aWR0aDplLGhlaWdodDp0LGl0ZW1zOnJ9O3RoaXMubGV2ZWxzLnB1c2gobik7ZT1NYXRoLmNlaWwoZS8yKTt0PU1hdGguY2VpbCh0LzIpfX1yZXNldChlLHQsYSl7bGV0IHI9MDtmb3IoO3I8dGhpcy5sZXZlbHMubGVuZ3RoOyl7Y29uc3Qgbj10aGlzLmxldmVsc1tyXSxpPWUrdCpuLndpZHRoO24uaW5kZXg9aTtjb25zdCBzPW4uaXRlbXNbaV07aWYoMjU1PT09cylicmVhaztpZihzPmEpe3RoaXMuY3VycmVudExldmVsPXI7dGhpcy5wcm9wYWdhdGVWYWx1ZXMoKTtyZXR1cm4hMX1lPj49MTt0Pj49MTtyKyt9dGhpcy5jdXJyZW50TGV2ZWw9ci0xO3JldHVybiEwfWluY3JlbWVudFZhbHVlKGUpe2NvbnN0IHQ9dGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO3QuaXRlbXNbdC5pbmRleF09ZSsxO3RoaXMucHJvcGFnYXRlVmFsdWVzKCl9cHJvcGFnYXRlVmFsdWVzKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07Zm9yKDstLWU+PTA7KXt0PXRoaXMubGV2ZWxzW2VdO3QuaXRlbXNbdC5pbmRleF09YX19bmV4dExldmVsKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCBhPXQuaXRlbXNbdC5pbmRleF07dC5pdGVtc1t0LmluZGV4XT0yNTU7ZS0tO2lmKGU8MClyZXR1cm4hMTt0aGlzLmN1cnJlbnRMZXZlbD1lO3Q9dGhpcy5sZXZlbHNbZV07dC5pdGVtc1t0LmluZGV4XT1hO3JldHVybiEwfX1jbGFzcyBCaXRNb2RlbHtzdGF0aWMgVU5JRk9STV9DT05URVhUPTE3O3N0YXRpYyBSVU5MRU5HVEhfQ09OVEVYVD0xODtzdGF0aWMgTExBbmRMSENvbnRleHRzTGFiZWw9bmV3IFVpbnQ4QXJyYXkoWzAsNSw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMSw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4XSk7c3RhdGljIEhMQ29udGV4dExhYmVsPW5ldyBVaW50OEFycmF5KFswLDMsNCwwLDUsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDEsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOF0pO3N0YXRpYyBISENvbnRleHRMYWJlbD1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKTtjb25zdHJ1Y3RvcihlLHQsYSxyLG4pe3RoaXMud2lkdGg9ZTt0aGlzLmhlaWdodD10O2xldCBpO2k9IkhIIj09PWE/Qml0TW9kZWwuSEhDb250ZXh0TGFiZWw6IkhMIj09PWE/Qml0TW9kZWwuSExDb250ZXh0TGFiZWw6Qml0TW9kZWwuTExBbmRMSENvbnRleHRzTGFiZWw7dGhpcy5jb250ZXh0TGFiZWxUYWJsZT1pO2NvbnN0IHM9ZSp0O3RoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlPW5ldyBVaW50OEFycmF5KHMpO3RoaXMuY29lZmZpY2VudHNTaWduPW5ldyBVaW50OEFycmF5KHMpO2xldCBvO289bj4xND9uZXcgVWludDMyQXJyYXkocyk6bj42P25ldyBVaW50MTZBcnJheShzKTpuZXcgVWludDhBcnJheShzKTt0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlPW87dGhpcy5wcm9jZXNzaW5nRmxhZ3M9bmV3IFVpbnQ4QXJyYXkocyk7Y29uc3QgYz1uZXcgVWludDhBcnJheShzKTtpZigwIT09cilmb3IobGV0IGU9MDtlPHM7ZSsrKWNbZV09cjt0aGlzLmJpdHNEZWNvZGVkPWM7dGhpcy5yZXNldCgpfXNldERlY29kZXIoZSl7dGhpcy5kZWNvZGVyPWV9cmVzZXQoKXt0aGlzLmNvbnRleHRzPW5ldyBJbnQ4QXJyYXkoMTkpO3RoaXMuY29udGV4dHNbMF09ODt0aGlzLmNvbnRleHRzW0JpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVF09OTI7dGhpcy5jb250ZXh0c1tCaXRNb2RlbC5SVU5MRU5HVEhfQ09OVEVYVF09Nn1zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoZSx0LGEpe2NvbnN0IHI9dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2Usbj10aGlzLndpZHRoLGk9dGhpcy5oZWlnaHQscz10PjAsbz10KzE8bjtsZXQgYztpZihlPjApe2M9YS1uO3MmJihyW2MtMV0rPTE2KTtvJiYocltjKzFdKz0xNik7cltjXSs9NH1pZihlKzE8aSl7Yz1hK247cyYmKHJbYy0xXSs9MTYpO28mJihyW2MrMV0rPTE2KTtyW2NdKz00fXMmJihyW2EtMV0rPTEpO28mJihyW2ErMV0rPTEpO3JbYV18PTEyOH1ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKXtjb25zdCBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgsYT10aGlzLmhlaWdodCxyPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsbj10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLHM9dGhpcy5wcm9jZXNzaW5nRmxhZ3Msbz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSxsPXRoaXMuYml0c0RlY29kZWQ7Zm9yKGxldCBoPTA7aDxhO2grPTQpZm9yKGxldCB1PTA7dTx0O3UrKyl7bGV0IGQ9aCp0K3U7Zm9yKGxldCBmPTA7Zjw0O2YrKyxkKz10KXtjb25zdCB0PWgrZjtpZih0Pj1hKWJyZWFrO3NbZF0mPS0yO2lmKHJbZF18fCFpW2RdKWNvbnRpbnVlO2NvbnN0IGc9Y1tpW2RdXTtpZihlLnJlYWRCaXQobyxnKSl7Y29uc3QgZT10aGlzLmRlY29kZVNpZ25CaXQodCx1LGQpO25bZF09ZTtyW2RdPTE7dGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UodCx1LGQpO3NbZF18PTJ9bFtkXSsrO3NbZF18PTF9fX1kZWNvZGVTaWduQml0KGUsdCxhKXtjb25zdCByPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxpPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUscz10aGlzLmNvZWZmaWNlbnRzU2lnbjtsZXQgbyxjLGwsaCx1LGQ7aD10PjAmJjAhPT1pW2EtMV07aWYodCsxPHImJjAhPT1pW2ErMV0pe2w9c1thKzFdO2lmKGgpe2M9c1thLTFdO289MS1sLWN9ZWxzZSBvPTEtbC1sfWVsc2UgaWYoaCl7Yz1zW2EtMV07bz0xLWMtY31lbHNlIG89MDtjb25zdCBmPTMqbztoPWU+MCYmMCE9PWlbYS1yXTtpZihlKzE8biYmMCE9PWlbYStyXSl7bD1zW2Ercl07aWYoaCl7Yz1zW2Etcl07bz0xLWwtYytmfWVsc2Ugbz0xLWwtbCtmfWVsc2UgaWYoaCl7Yz1zW2Etcl07bz0xLWMtYytmfWVsc2Ugbz1mO2lmKG8+PTApe3U9OStvO2Q9dGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyx1KX1lbHNle3U9OS1vO2Q9MV50aGlzLmRlY29kZXIucmVhZEJpdCh0aGlzLmNvbnRleHRzLHUpfXJldHVybiBkfXJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCl7Y29uc3QgZT10aGlzLmRlY29kZXIsdD10aGlzLndpZHRoLGE9dGhpcy5oZWlnaHQscj10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLG49dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsaT10aGlzLmNvbnRleHRzLHM9dGhpcy5iaXRzRGVjb2RlZCxvPXRoaXMucHJvY2Vzc2luZ0ZsYWdzLGM9dCphLGw9NCp0O2ZvcihsZXQgYSxoPTA7aDxjO2g9YSl7YT1NYXRoLm1pbihjLGgrbCk7Zm9yKGxldCBjPTA7Yzx0O2MrKylmb3IobGV0IGw9aCtjO2w8YTtsKz10KXtpZighcltsXXx8MCE9KDEmb1tsXSkpY29udGludWU7bGV0IHQ9MTY7aWYoMCE9KDImb1tsXSkpe29bbF1ePTI7dD0wPT09KDEyNyZuW2xdKT8xNToxNH1jb25zdCBhPWUucmVhZEJpdChpLHQpO3JbbF09cltsXTw8MXxhO3NbbF0rKztvW2xdfD0xfX19cnVuQ2xlYW51cFBhc3MoKXtjb25zdCBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgsYT10aGlzLmhlaWdodCxyPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG49dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxpPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxvPXRoaXMuY29udGV4dExhYmVsVGFibGUsYz10aGlzLmJpdHNEZWNvZGVkLGw9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsaD10LHU9Mip0LGQ9Myp0O2xldCBmO2ZvcihsZXQgZz0wO2c8YTtnPWYpe2Y9TWF0aC5taW4oZys0LGEpO2NvbnN0IHA9Zyp0LG09ZyszPGE7Zm9yKGxldCBhPTA7YTx0O2ErKyl7Y29uc3QgYj1wK2E7bGV0IHksdz0wLFM9Yix4PWc7aWYobSYmMD09PWxbYl0mJjA9PT1sW2IraF0mJjA9PT1sW2IrdV0mJjA9PT1sW2IrZF0mJjA9PT1yW2JdJiYwPT09cltiK2hdJiYwPT09cltiK3VdJiYwPT09cltiK2RdKXtpZighZS5yZWFkQml0KHMsQml0TW9kZWwuUlVOTEVOR1RIX0NPTlRFWFQpKXtjW2JdKys7Y1tiK2hdKys7Y1tiK3VdKys7Y1tiK2RdKys7Y29udGludWV9dz1lLnJlYWRCaXQocyxCaXRNb2RlbC5VTklGT1JNX0NPTlRFWFQpPDwxfGUucmVhZEJpdChzLEJpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVCk7aWYoMCE9PXcpe3g9Zyt3O1MrPXcqdH15PXRoaXMuZGVjb2RlU2lnbkJpdCh4LGEsUyk7aVtTXT15O25bU109MTt0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZSh4LGEsUyk7bFtTXXw9MjtTPWI7Zm9yKGxldCBlPWc7ZTw9eDtlKyssUys9dCljW1NdKys7dysrfWZvcih4PWcrdzt4PGY7eCsrLFMrPXQpe2lmKG5bU118fDAhPSgxJmxbU10pKWNvbnRpbnVlO2NvbnN0IHQ9b1tyW1NdXTtpZigxPT09ZS5yZWFkQml0KHMsdCkpe3k9dGhpcy5kZWNvZGVTaWduQml0KHgsYSxTKTtpW1NdPXk7bltTXT0xO3RoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHgsYSxTKTtsW1NdfD0yfWNbU10rK319fX1jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy5jb250ZXh0cztpZigxMCE9PShlLnJlYWRCaXQodCxCaXRNb2RlbC5VTklGT1JNX0NPTlRFWFQpPDwzfGUucmVhZEJpdCh0LEJpdE1vZGVsLlVOSUZPUk1fQ09OVEVYVCk8PDJ8ZS5yZWFkQml0KHQsQml0TW9kZWwuVU5JRk9STV9DT05URVhUKTw8MXxlLnJlYWRCaXQodCxCaXRNb2RlbC5VTklGT1JNX0NPTlRFWFQpKSl0aHJvdyBuZXcgSnB4RXJyb3IoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1jbGFzcyBUcmFuc2Zvcm17Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09VHJhbnNmb3JtJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgVHJhbnNmb3JtLiIpfWNhbGN1bGF0ZShlLHQsYSl7bGV0IHI9ZVswXTtmb3IobGV0IG49MSxpPWUubGVuZ3RoO248aTtuKyspcj10aGlzLml0ZXJhdGUocixlW25dLHQsYSk7cmV0dXJuIHJ9ZXh0ZW5kKGUsdCxhKXtsZXQgcj10LTEsbj10KzEsaT10K2EtMixzPXQrYTtlW3ItLV09ZVtuKytdO2VbcysrXT1lW2ktLV07ZVtyLS1dPWVbbisrXTtlW3MrK109ZVtpLS1dO2Vbci0tXT1lW24rK107ZVtzKytdPWVbaS0tXTtlW3JdPWVbbl07ZVtzXT1lW2ldfWZpbHRlcihlLHQsYSl7KDAsci51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZmlsdGVyYCBjYWxsZWQiKX1pdGVyYXRlKGUsdCxhLHIpe2NvbnN0IG49ZS53aWR0aCxpPWUuaGVpZ2h0O2xldCBzPWUuaXRlbXM7Y29uc3Qgbz10LndpZHRoLGM9dC5oZWlnaHQsbD10Lml0ZW1zO2xldCBoLHUsZCxmLGcscDtmb3IoZD0wLGg9MDtoPGk7aCsrKXtmPTIqaCpvO2Zvcih1PTA7dTxuO3UrKyxkKyssZis9MilsW2ZdPXNbZF19cz1lLml0ZW1zPW51bGw7Y29uc3QgbT1uZXcgRmxvYXQzMkFycmF5KG8rOCk7aWYoMT09PW8pe2lmKDAhPSgxJmEpKWZvcihwPTAsZD0wO3A8YztwKyssZCs9bylsW2RdKj0uNX1lbHNlIGZvcihwPTAsZD0wO3A8YztwKyssZCs9byl7bS5zZXQobC5zdWJhcnJheShkLGQrbyksNCk7dGhpcy5leHRlbmQobSw0LG8pO3RoaXMuZmlsdGVyKG0sNCxvKTtsLnNldChtLnN1YmFycmF5KDQsNCtvKSxkKX1sZXQgYj0xNjtjb25zdCB5PVtdO2ZvcihoPTA7aDxiO2grKyl5LnB1c2gobmV3IEZsb2F0MzJBcnJheShjKzgpKTtsZXQgdyxTPTA7ZT00K2M7aWYoMT09PWMpe2lmKDAhPSgxJnIpKWZvcihnPTA7ZzxvO2crKylsW2ddKj0uNX1lbHNlIGZvcihnPTA7ZzxvO2crKyl7aWYoMD09PVMpe2I9TWF0aC5taW4oby1nLGIpO2ZvcihkPWcsZj00O2Y8ZTtkKz1vLGYrKylmb3Iodz0wO3c8Yjt3KyspeVt3XVtmXT1sW2Qrd107Uz1ifVMtLTtjb25zdCB0PXlbU107dGhpcy5leHRlbmQodCw0LGMpO3RoaXMuZmlsdGVyKHQsNCxjKTtpZigwPT09Uyl7ZD1nLWIrMTtmb3IoZj00O2Y8ZTtkKz1vLGYrKylmb3Iodz0wO3c8Yjt3KyspbFtkK3ddPXlbd11bZl19fXJldHVybnt3aWR0aDpvLGhlaWdodDpjLGl0ZW1zOmx9fX1jbGFzcyBJcnJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm17ZmlsdGVyKGUsdCxhKXtjb25zdCByPWE+PjE7bGV0IG4saSxzLG87Y29uc3QgYz0tMS41ODYxMzQzNDIwNTk5MjQsbD0tLjA1Mjk4MDExODU3Mjk2MSxoPS44ODI5MTEwNzU1MzA5MzQsdT0uNDQzNTA2ODUyMDQzOTcxLGQ9MS4yMzAxNzQxMDQ5MTQwMDE7bj0odHw9MCktMztmb3IoaT1yKzQ7aS0tO24rPTIpZVtuXSo9LjgxMjg5MzA2NjExNTk2MDk7bj10LTI7cz11KmVbbi0xXTtmb3IoaT1yKzM7aS0tO24rPTIpe289dSplW24rMV07ZVtuXT1kKmVbbl0tcy1vO2lmKCFpLS0pYnJlYWs7bis9MjtzPXUqZVtuKzFdO2Vbbl09ZCplW25dLXMtb31uPXQtMTtzPWgqZVtuLTFdO2ZvcihpPXIrMjtpLS07bis9Mil7bz1oKmVbbisxXTtlW25dLT1zK287aWYoIWktLSlicmVhaztuKz0yO3M9aCplW24rMV07ZVtuXS09cytvfW49dDtzPWwqZVtuLTFdO2ZvcihpPXIrMTtpLS07bis9Mil7bz1sKmVbbisxXTtlW25dLT1zK287aWYoIWktLSlicmVhaztuKz0yO3M9bCplW24rMV07ZVtuXS09cytvfWlmKDAhPT1yKXtuPXQrMTtzPWMqZVtuLTFdO2ZvcihpPXI7aS0tO24rPTIpe289YyplW24rMV07ZVtuXS09cytvO2lmKCFpLS0pYnJlYWs7bis9MjtzPWMqZVtuKzFdO2Vbbl0tPXMrb319fX1jbGFzcyBSZXZlcnNpYmxlVHJhbnNmb3JtIGV4dGVuZHMgVHJhbnNmb3Jte2ZpbHRlcihlLHQsYSl7Y29uc3Qgcj1hPj4xO2xldCBuLGk7Zm9yKG49dHw9MCxpPXIrMTtpLS07bis9MillW25dLT1lW24tMV0rZVtuKzFdKzI+PjI7Zm9yKG49dCsxLGk9cjtpLS07bis9MillW25dKz1lW24tMV0rZVtuKzFdPj4xfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5MWldTdHJlYW09dm9pZCAwO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTt2YXIgcj1hKDE2OSk7Y2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGEpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmNhY2hlZERhdGE9MDt0aGlzLmJpdHNDYWNoZWQ9MDtjb25zdCByPTQwOTYsbj17ZWFybHlDaGFuZ2U6YSxjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkociksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KHIpLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KHIpLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheShyKSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH07Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXtuLmRpY3Rpb25hcnlWYWx1ZXNbZV09ZTtuLmRpY3Rpb25hcnlMZW5ndGhzW2VdPTF9dGhpcy5sendTdGF0ZT1ufXJlYWRCaXRzKGUpe2xldCB0PXRoaXMuYml0c0NhY2hlZCxhPXRoaXMuY2FjaGVkRGF0YTtmb3IoO3Q8ZTspe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJuIG51bGx9YT1hPDw4fGU7dCs9OH10aGlzLmJpdHNDYWNoZWQ9dC09ZTt0aGlzLmNhY2hlZERhdGE9YTt0aGlzLmxhc3RDb2RlPW51bGw7cmV0dXJuIGE+Pj50JigxPDxlKS0xfXJlYWRCbG9jaygpe2xldCBlLHQsYSxyPTEwMjQ7Y29uc3Qgbj10aGlzLmx6d1N0YXRlO2lmKCFuKXJldHVybjtjb25zdCBpPW4uZWFybHlDaGFuZ2U7bGV0IHM9bi5uZXh0Q29kZTtjb25zdCBvPW4uZGljdGlvbmFyeVZhbHVlcyxjPW4uZGljdGlvbmFyeUxlbmd0aHMsbD1uLmRpY3Rpb25hcnlQcmV2Q29kZXM7bGV0IGg9bi5jb2RlTGVuZ3RoLHU9bi5wcmV2Q29kZTtjb25zdCBkPW4uY3VycmVudFNlcXVlbmNlO2xldCBmPW4uY3VycmVudFNlcXVlbmNlTGVuZ3RoLGc9MCxwPXRoaXMuYnVmZmVyTGVuZ3RoLG09dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrcik7Zm9yKGU9MDtlPDUxMjtlKyspe2NvbnN0IGU9dGhpcy5yZWFkQml0cyhoKSxuPWY+MDtpZihlPDI1Nil7ZFswXT1lO2Y9MX1lbHNle2lmKCEoZT49MjU4KSl7aWYoMjU2PT09ZSl7aD05O3M9MjU4O2Y9MDtjb250aW51ZX10aGlzLmVvZj0hMDtkZWxldGUgdGhpcy5sendTdGF0ZTticmVha31pZihlPHMpe2Y9Y1tlXTtmb3IodD1mLTEsYT1lO3Q+PTA7dC0tKXtkW3RdPW9bYV07YT1sW2FdfX1lbHNlIGRbZisrXT1kWzBdfWlmKG4pe2xbc109dTtjW3NdPWNbdV0rMTtvW3NdPWRbMF07cysrO2g9cytpJnMraS0xP2g6MHxNYXRoLm1pbihNYXRoLmxvZyhzK2kpLy42OTMxNDcxODA1NTk5NDUzKzEsMTIpfXU9ZTtnKz1mO2lmKHI8Zyl7ZG97cis9NTEyfXdoaWxlKHI8Zyk7bT10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCtyKX1mb3IodD0wO3Q8Zjt0KyspbVtwKytdPWRbdF19bi5uZXh0Q29kZT1zO24uY29kZUxlbmd0aD1oO24ucHJldkNvZGU9dTtuLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aD1mO3RoaXMuYnVmZmVyTGVuZ3RoPXB9fXQuTFpXU3RyZWFtPUxaV1N0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlByZWRpY3RvclN0cmVhbT12b2lkIDA7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO3ZhciByPWEoMTY5KSxuPWEoMTUxKSxpPWEoMTQ1KTtjbGFzcyBQcmVkaWN0b3JTdHJlYW0gZXh0ZW5kcyByLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIodCk7aWYoIShhIGluc3RhbmNlb2Ygbi5EaWN0KSlyZXR1cm4gZTtjb25zdCByPXRoaXMucHJlZGljdG9yPWEuZ2V0KCJQcmVkaWN0b3IiKXx8MTtpZihyPD0xKXJldHVybiBlO2lmKDIhPT1yJiYocjwxMHx8cj4xNSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtyfWApO3RoaXMucmVhZEJsb2NrPTI9PT1yP3RoaXMucmVhZEJsb2NrVGlmZjp0aGlzLnJlYWRCbG9ja1BuZzt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7Y29uc3Qgcz10aGlzLmNvbG9ycz1hLmdldCgiQ29sb3JzIil8fDEsbz10aGlzLmJpdHM9YS5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxjPXRoaXMuY29sdW1ucz1hLmdldCgiQ29sdW1ucyIpfHwxO3RoaXMucGl4Qnl0ZXM9cypvKzc+PjM7dGhpcy5yb3dCeXRlcz1jKnMqbys3Pj4zO3JldHVybiB0aGlzfXJlYWRCbG9ja1RpZmYoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLmJ1ZmZlckxlbmd0aCxhPXRoaXMuZW5zdXJlQnVmZmVyKHQrZSkscj10aGlzLmJpdHMsbj10aGlzLmNvbG9ycyxpPXRoaXMuc3RyLmdldEJ5dGVzKGUpO3RoaXMuZW9mPSFpLmxlbmd0aDtpZih0aGlzLmVvZilyZXR1cm47bGV0IHMsbz0wLGM9MCxsPTAsaD0wLHU9dDtpZigxPT09ciYmMT09PW4pZm9yKHM9MDtzPGU7KytzKXtsZXQgZT1pW3NdXm87ZV49ZT4+MTtlXj1lPj4yO2VePWU+PjQ7bz0oMSZlKTw8NzthW3UrK109ZX1lbHNlIGlmKDg9PT1yKXtmb3Iocz0wO3M8bjsrK3MpYVt1KytdPWlbc107Zm9yKDtzPGU7KytzKXthW3VdPWFbdS1uXStpW3NdO3UrK319ZWxzZSBpZigxNj09PXIpe2NvbnN0IHQ9MipuO2ZvcihzPTA7czx0OysrcylhW3UrK109aVtzXTtmb3IoO3M8ZTtzKz0yKXtjb25zdCBlPSgoMjU1Jmlbc10pPDw4KSsoMjU1JmlbcysxXSkrKCgyNTUmYVt1LXRdKTw8OCkrKDI1NSZhW3UtdCsxXSk7YVt1KytdPWU+PjgmMjU1O2FbdSsrXT0yNTUmZX19ZWxzZXtjb25zdCBlPW5ldyBVaW50OEFycmF5KG4rMSksdT0oMTw8ciktMTtsZXQgZD0wLGY9dDtjb25zdCBnPXRoaXMuY29sdW1ucztmb3Iocz0wO3M8ZzsrK3MpZm9yKGxldCB0PTA7dDxuOysrdCl7aWYobDxyKXtvPW88PDh8MjU1JmlbZCsrXTtsKz04fWVbdF09ZVt0XSsobz4+bC1yKSZ1O2wtPXI7Yz1jPDxyfGVbdF07aCs9cjtpZihoPj04KXthW2YrK109Yz4+aC04JjI1NTtoLT04fX1oPjAmJihhW2YrK109KGM8PDgtaCkrKG8mKDE8PDgtaCktMSkpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfXJlYWRCbG9ja1BuZygpe2NvbnN0IGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMucGl4Qnl0ZXMsYT10aGlzLnN0ci5nZXRCeXRlKCkscj10aGlzLnN0ci5nZXRCeXRlcyhlKTt0aGlzLmVvZj0hci5sZW5ndGg7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IG49dGhpcy5idWZmZXJMZW5ndGgscz10aGlzLmVuc3VyZUJ1ZmZlcihuK2UpO2xldCBvPXMuc3ViYXJyYXkobi1lLG4pOzA9PT1vLmxlbmd0aCYmKG89bmV3IFVpbnQ4QXJyYXkoZSkpO2xldCBjLGwsaCx1PW47c3dpdGNoKGEpe2Nhc2UgMDpmb3IoYz0wO2M8ZTsrK2Mpc1t1KytdPXJbY107YnJlYWs7Y2FzZSAxOmZvcihjPTA7Yzx0OysrYylzW3UrK109cltjXTtmb3IoO2M8ZTsrK2Mpe3NbdV09c1t1LXRdK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDI6Zm9yKGM9MDtjPGU7KytjKXNbdSsrXT1vW2NdK3JbY10mMjU1O2JyZWFrO2Nhc2UgMzpmb3IoYz0wO2M8dDsrK2Mpc1t1KytdPShvW2NdPj4xKStyW2NdO2Zvcig7YzxlOysrYyl7c1t1XT0ob1tjXStzW3UtdF0+PjEpK3JbY10mMjU1O3UrK31icmVhaztjYXNlIDQ6Zm9yKGM9MDtjPHQ7KytjKXtsPW9bY107aD1yW2NdO3NbdSsrXT1sK2h9Zm9yKDtjPGU7KytjKXtsPW9bY107Y29uc3QgZT1vW2MtdF0sYT1zW3UtdF0sbj1hK2wtZTtsZXQgaT1uLWE7aTwwJiYoaT0taSk7bGV0IGQ9bi1sO2Q8MCYmKGQ9LWQpO2xldCBmPW4tZTtmPDAmJihmPS1mKTtoPXJbY107c1t1KytdPWk8PWQmJmk8PWY/YStoOmQ8PWY/bCtoOmUraH1icmVhaztkZWZhdWx0OnRocm93IG5ldyBpLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7YX1gKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX19dC5QcmVkaWN0b3JTdHJlYW09UHJlZGljdG9yU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUnVuTGVuZ3RoU3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE2OSk7Y2xhc3MgUnVuTGVuZ3RoU3RyZWFtIGV4dGVuZHMgci5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3R9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl7dGhpcy5lb2Y9ITA7cmV0dXJufWxldCB0LGE9dGhpcy5idWZmZXJMZW5ndGgscj1lWzBdO2lmKHI8MTI4KXt0PXRoaXMuZW5zdXJlQnVmZmVyKGErcisxKTt0W2ErK109ZVsxXTtpZihyPjApe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZXMocik7dC5zZXQoZSxhKTthKz1yfX1lbHNle3I9MjU3LXI7Y29uc3Qgbj1lWzFdO3Q9dGhpcy5lbnN1cmVCdWZmZXIoYStyKzEpO2ZvcihsZXQgZT0wO2U8cjtlKyspdFthKytdPW59dGhpcy5idWZmZXJMZW5ndGg9YX19dC5SdW5MZW5ndGhTdHJlYW09UnVuTGVuZ3RoU3RyZWFtfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRm9udD10LkVycm9yRm9udD12b2lkIDA7YSgxMTYpO2EoMTI3KTthKDEyOSk7YSgxMzIpO2EoMTM0KTthKDEzNik7YSgxMzgpO2EoMTQwKTthKDE1OCk7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO3ZhciByPWEoMTQ1KSxuPWEoMTg2KSxpPWEoMTg5KSxzPWEoMTkxKSxvPWEoMTkwKSxjPWEoMTg4KSxsPWEoMTkyKSxoPWEoMTkzKSx1PWEoMTk0KSxkPWEoMTk1KSxmPWEoMTk2KSxnPWEoMTk3KSxwPWEoMTY1KSxtPWEoMTk4KSxiPWEoMTUwKSx5PWEoMTU1KSx3PWEoMTk5KTtjb25zdCBTPVtbNTczNDQsNjM3NDNdLFsxMDQ4NTc2LDExMTQxMDldXSx4PTFlMyxDPVsiYXNjZW50IiwiYmJveCIsImJsYWNrIiwiYm9sZCIsImNoYXJQcm9jT3BlcmF0b3JMaXN0IiwiY29tcG9zaXRlIiwiY3NzRm9udEluZm8iLCJkYXRhIiwiZGVmYXVsdFZNZXRyaWNzIiwiZGVmYXVsdFdpZHRoIiwiZGVzY2VudCIsImZhbGxiYWNrTmFtZSIsImZvbnRNYXRyaXgiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJzeXN0ZW1Gb250SW5mbyIsInR5cGUiLCJ2ZXJ0aWNhbCJdLHY9WyJjTWFwIiwiZGVmYXVsdEVuY29kaW5nIiwiZGlmZmVyZW5jZXMiLCJpc01vbm9zcGFjZSIsImlzU2VyaWZGb250IiwiaXNTeW1ib2xpY0ZvbnQiLCJzZWFjTWFwIiwidG9Gb250Q2hhciIsInRvVW5pY29kZSIsInZtZXRyaWNzIiwid2lkdGhzIl07ZnVuY3Rpb24gYWRqdXN0V2lkdGhzKGUpe2lmKCFlLmZvbnRNYXRyaXgpcmV0dXJuO2lmKGUuZm9udE1hdHJpeFswXT09PXIuRk9OVF9JREVOVElUWV9NQVRSSVhbMF0pcmV0dXJuO2NvbnN0IHQ9LjAwMS9lLmZvbnRNYXRyaXhbMF0sYT1lLndpZHRocztmb3IoY29uc3QgZSBpbiBhKWFbZV0qPXQ7ZS5kZWZhdWx0V2lkdGgqPXR9ZnVuY3Rpb24gYW1lbmRGYWxsYmFja1RvVW5pY29kZShlKXtpZighZS5mYWxsYmFja1RvVW5pY29kZSlyZXR1cm47aWYoZS50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwKXJldHVybjtjb25zdCB0PVtdO2Zvcihjb25zdCBhIGluIGUuZmFsbGJhY2tUb1VuaWNvZGUpZS50b1VuaWNvZGUuaGFzKGEpfHwodFthXT1lLmZhbGxiYWNrVG9Vbmljb2RlW2FdKTt0Lmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZCh0KX1jbGFzcyBHbHlwaHtjb25zdHJ1Y3RvcihlLHQsYSxyLG4saSxzLG8sYyl7dGhpcy5vcmlnaW5hbENoYXJDb2RlPWU7dGhpcy5mb250Q2hhcj10O3RoaXMudW5pY29kZT1hO3RoaXMuYWNjZW50PXI7dGhpcy53aWR0aD1uO3RoaXMudm1ldHJpYz1pO3RoaXMub3BlcmF0b3JMaXN0SWQ9czt0aGlzLmlzU3BhY2U9bzt0aGlzLmlzSW5Gb250PWN9Z2V0IGNhdGVnb3J5KCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxzLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX1mdW5jdGlvbiBpbnQxNihlLHQpe3JldHVybihlPDw4KSt0fWZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoZSx0LGEpe2VbdCsxXT1hO2VbdF09YT4+Pjh9ZnVuY3Rpb24gc2lnbmVkSW50MTYoZSx0KXtjb25zdCBhPShlPDw4KSt0O3JldHVybiAzMjc2OCZhP2EtNjU1MzY6YX1mdW5jdGlvbiBzdHJpbmcxNihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gc2FmZVN0cmluZzE2KGUpe2U+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuInR0Y2YiPT09KDAsci5ieXRlc1RvU3RyaW5nKSh0KX1mdW5jdGlvbiBnZXRGb250RmlsZVR5cGUoZSx0KXtsZXQgYSxuLHt0eXBlOmksc3VidHlwZTpzLGNvbXBvc2l0ZTpvfT10O2lmKGZ1bmN0aW9uIGlzVHJ1ZVR5cGVGaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIDY1NTM2PT09KDAsYi5yZWFkVWludDMyKSh0LDApfHwidHJ1ZSI9PT0oMCxyLmJ5dGVzVG9TdHJpbmcpKHQpfShlKXx8aXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGUpKWE9bz8iQ0lERm9udFR5cGUyIjoiVHJ1ZVR5cGUiO2Vsc2UgaWYoZnVuY3Rpb24gaXNPcGVuVHlwZUZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4iT1RUTyI9PT0oMCxyLmJ5dGVzVG9TdHJpbmcpKHQpfShlKSlhPW8/IkNJREZvbnRUeXBlMiI6Ik9wZW5UeXBlIjtlbHNlIGlmKGZ1bmN0aW9uIGlzVHlwZTFGaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSkpYT1vPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI7ZWxzZSBpZihmdW5jdGlvbiBpc0NGRkZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4gdFswXT49MSYmdFszXT49MSYmdFszXTw9NH0oZSkpaWYobyl7YT0iQ0lERm9udFR5cGUwIjtuPSJDSURGb250VHlwZTBDIn1lbHNle2E9Ik1NVHlwZTEiPT09aT8iTU1UeXBlMSI6IlR5cGUxIjtuPSJUeXBlMUMifWVsc2V7KDAsci53YXJuKSgiZ2V0Rm9udEZpbGVUeXBlOiBVbmFibGUgdG8gZGV0ZWN0IGNvcnJlY3QgZm9udCBmaWxlIFR5cGUvU3VidHlwZS4iKTthPWk7bj1zfXJldHVyblthLG5dfWZ1bmN0aW9uIGFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAoZSx0KXtmb3IoY29uc3QgYSBpbiB0KWVbK2FdPXRbYV19ZnVuY3Rpb24gYnVpbGRUb0ZvbnRDaGFyKGUsdCxhKXtjb25zdCByPVtdO2xldCBuO2ZvcihsZXQgYT0wLGk9ZS5sZW5ndGg7YTxpO2ErKyl7bj0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoZVthXSx0KTstMSE9PW4mJihyW2FdPW4pfWZvcihjb25zdCBlIGluIGEpe249KDAscy5nZXRVbmljb2RlRm9yR2x5cGgpKGFbZV0sdCk7LTEhPT1uJiYoclsrZV09bil9cmV0dXJuIHJ9ZnVuY3Rpb24gaXNNYWNOYW1lUmVjb3JkKGUpe3JldHVybiAxPT09ZS5wbGF0Zm9ybSYmMD09PWUuZW5jb2RpbmcmJjA9PT1lLmxhbmd1YWdlfWZ1bmN0aW9uIGlzV2luTmFtZVJlY29yZChlKXtyZXR1cm4gMz09PWUucGxhdGZvcm0mJjE9PT1lLmVuY29kaW5nJiYxMDMzPT09ZS5sYW5ndWFnZX1mdW5jdGlvbiBjb252ZXJ0Q2lkU3RyaW5nKGUsdCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX1jb25zdCBuPWBVbnN1cHBvcnRlZCBDSUQgc3RyaW5nIChjaGFyQ29kZSAke2V9KTogIiR7dH0iLmA7aWYoYSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihuKTsoMCxyLndhcm4pKG4pO3JldHVybiB0fWZ1bmN0aW9uIGFkanVzdE1hcHBpbmcoZSx0LGEsbil7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLHM9bmV3IE1hcCxvPVtdLGM9bmV3IFNldDtsZXQgbD0wO2xldCBoPVNbbF1bMF0sdT1TW2xdWzFdO2ZvcihsZXQgZiBpbiBlKXtmfD0wO2xldCBnPWVbZl07aWYoIXQoZykpY29udGludWU7aWYoaD51KXtsKys7aWYobD49Uy5sZW5ndGgpeygwLHIud2FybikoIlJhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLiIpO2JyZWFrfWg9U1tsXVswXTt1PVNbbF1bMV19Y29uc3QgcD1oKys7MD09PWcmJihnPWEpO2xldCBtPW4uZ2V0KGYpOyJzdHJpbmciPT10eXBlb2YgbSYmKG09bS5jb2RlUG9pbnRBdCgwKSk7aWYobSYmIShkPW0sU1swXVswXTw9ZCYmZDw9U1swXVsxXXx8U1sxXVswXTw9ZCYmZDw9U1sxXVsxXSkmJiFjLmhhcyhnKSl7cy5zZXQobSxnKTtjLmFkZChnKX1pW3BdPWc7b1tmXT1wfXZhciBkO3JldHVybnt0b0ZvbnRDaGFyOm8sY2hhckNvZGVUb0dseXBoSWQ6aSx0b1VuaWNvZGVFeHRyYU1hcDpzLG5leHRBdmFpbGFibGVGb250Q2hhckNvZGU6aH19ZnVuY3Rpb24gY3JlYXRlQ21hcFRhYmxlKGUsdCxhKXtjb25zdCBuPWZ1bmN0aW9uIGdldFJhbmdlcyhlLHQsYSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgdCBpbiBlKWVbdF0+PWF8fHIucHVzaCh7Zm9udENoYXJDb2RlOjB8dCxnbHlwaElkOmVbdF19KTtpZih0KWZvcihjb25zdFtlLG5db2YgdCluPj1hfHxyLnB1c2goe2ZvbnRDaGFyQ29kZTplLGdseXBoSWQ6bn0pOzA9PT1yLmxlbmd0aCYmci5wdXNoKHtmb250Q2hhckNvZGU6MCxnbHlwaElkOjB9KTtyLnNvcnQoKGZ1bmN0aW9uIGZvbnRHZXRSYW5nZXNTb3J0KGUsdCl7cmV0dXJuIGUuZm9udENoYXJDb2RlLXQuZm9udENoYXJDb2RlfSkpO2NvbnN0IG49W10saT1yLmxlbmd0aDtmb3IobGV0IGU9MDtlPGk7KXtjb25zdCB0PXJbZV0uZm9udENoYXJDb2RlLGE9W3JbZV0uZ2x5cGhJZF07KytlO2xldCBzPXQ7Zm9yKDtlPGkmJnMrMT09PXJbZV0uZm9udENoYXJDb2RlOyl7YS5wdXNoKHJbZV0uZ2x5cGhJZCk7KytzOysrZTtpZig2NTUzNT09PXMpYnJlYWt9bi5wdXNoKFt0LHMsYV0pfXJldHVybiBufShlLHQsYSksaT1uLmF0KC0xKVsxXT42NTUzNT8yOjE7bGV0IHMsbyxjLGwsaD0iXDBcMCIrc3RyaW5nMTYoaSkrIlwwA1wwASIrKDAsci5zdHJpbmczMikoNCs4KmkpO2ZvcihzPW4ubGVuZ3RoLTE7cz49MCYmIShuW3NdWzBdPD02NTUzNSk7LS1zKTtjb25zdCB1PXMrMTtuW3NdWzBdPDY1NTM1JiY2NTUzNT09PW5bc11bMV0mJihuW3NdWzFdPTY1NTM0KTtjb25zdCBkPW5bc11bMV08NjU1MzU/MTowLGY9dStkLGc9bS5PcGVuVHlwZUZpbGVCdWlsZGVyLmdldFNlYXJjaFBhcmFtcyhmLDIpO2xldCBwLGIseSx3LFM9IiIseD0iIixDPSIiLHY9IiIsaz0iIixPPTA7Zm9yKHM9MCxvPXU7czxvO3MrKyl7cD1uW3NdO2I9cFswXTt5PXBbMV07Uys9c3RyaW5nMTYoYik7eCs9c3RyaW5nMTYoeSk7dz1wWzJdO2xldCBlPSEwO2ZvcihjPTEsbD13Lmxlbmd0aDtjPGw7KytjKWlmKHdbY10hPT13W2MtMV0rMSl7ZT0hMTticmVha31pZihlKXtDKz1zdHJpbmcxNih3WzBdLWImNjU1MzUpO3YrPXN0cmluZzE2KDApfWVsc2V7Y29uc3QgZT0yKihmLXMpKzIqTztPKz15LWIrMTtDKz1zdHJpbmcxNigwKTt2Kz1zdHJpbmcxNihlKTtmb3IoYz0wLGw9dy5sZW5ndGg7YzxsOysrYylrKz1zdHJpbmcxNih3W2NdKX19aWYoZD4wKXt4Kz0iw7/DvyI7Uys9IsO/w78iO0MrPSJcMAEiO3YrPSJcMFwwIn1jb25zdCBUPSJcMFwwIitzdHJpbmcxNigyKmYpK3N0cmluZzE2KGcucmFuZ2UpK3N0cmluZzE2KGcuZW50cnkpK3N0cmluZzE2KGcucmFuZ2VTaGlmdCkreCsiXDBcMCIrUytDK3YraztsZXQgTT0iIixFPSIiO2lmKGk+MSl7aCs9IlwwA1wwXG4iKygwLHIuc3RyaW5nMzIpKDQrOCppKzQrVC5sZW5ndGgpO009IiI7Zm9yKHM9MCxvPW4ubGVuZ3RoO3M8bztzKyspe3A9bltzXTtiPXBbMF07dz1wWzJdO2xldCBlPXdbMF07Zm9yKGM9MSxsPXcubGVuZ3RoO2M8bDsrK2MpaWYod1tjXSE9PXdbYy0xXSsxKXt5PXBbMF0rYy0xO00rPSgwLHIuc3RyaW5nMzIpKGIpKygwLHIuc3RyaW5nMzIpKHkpKygwLHIuc3RyaW5nMzIpKGUpO2I9eSsxO2U9d1tjXX1NKz0oMCxyLnN0cmluZzMyKShiKSsoMCxyLnN0cmluZzMyKShwWzFdKSsoMCxyLnN0cmluZzMyKShlKX1FPSJcMFxmXDBcMCIrKDAsci5zdHJpbmczMikoTS5sZW5ndGgrMTYpKyJcMFwwXDBcMCIrKDAsci5zdHJpbmczMikoTS5sZW5ndGgvMTIpfXJldHVybiBoKyJcMAQiK3N0cmluZzE2KFQubGVuZ3RoKzQpK1QrRStNfWZ1bmN0aW9uIGNyZWF0ZU9TMlRhYmxlKGUsdCxhKXthfHw9e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH07bGV0IG49MCxpPTAsbz0wLGM9MCxsPW51bGwsaD0wLHU9LTE7aWYodCl7Zm9yKGxldCBlIGluIHQpe2V8PTA7KGw+ZXx8IWwpJiYobD1lKTtoPGUmJihoPWUpO3U9KDAscy5nZXRVbmljb2RlUmFuZ2VGb3IpKGUsdSk7aWYodTwzMilufD0xPDx1O2Vsc2UgaWYodTw2NClpfD0xPDx1LTMyO2Vsc2UgaWYodTw5NilvfD0xPDx1LTY0O2Vsc2V7aWYoISh1PDEyMykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO2N8PTE8PHUtOTZ9fWg+NjU1MzUmJihoPTY1NTM1KX1lbHNle2w9MDtoPTI1NX1jb25zdCBkPWUuYmJveHx8WzAsMCwwLDBdLGY9YS51bml0c1BlckVtfHwxLyhlLmZvbnRNYXRyaXh8fHIuRk9OVF9JREVOVElUWV9NQVRSSVgpWzBdLGc9ZS5hc2NlbnRTY2FsZWQ/MTpmL3gscD1hLmFzY2VudHx8TWF0aC5yb3VuZChnKihlLmFzY2VudHx8ZFszXSkpO2xldCBtPWEuZGVzY2VudHx8TWF0aC5yb3VuZChnKihlLmRlc2NlbnR8fGRbMV0pKTttPjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJihtPS1tKTtjb25zdCBiPWEueU1heHx8cCx5PS1hLnlNaW58fC1tO3JldHVybiJcMAMCJAHDtFwwBVwwXDACwooCwrtcMFwwXDDCjALCigLCu1wwXDABw59ceDAwMQECXDBcMFwwXDAGIitTdHJpbmcuZnJvbUNoYXJDb2RlKGUuZml4ZWRQaXRjaD85OjApKyJcMFwwXDBcMFwwXDAiKygwLHIuc3RyaW5nMzIpKG4pKygwLHIuc3RyaW5nMzIpKGkpKygwLHIuc3RyaW5nMzIpKG8pKygwLHIuc3RyaW5nMzIpKGMpKyIqMjEqIitzdHJpbmcxNihlLml0YWxpY0FuZ2xlPzE6MCkrc3RyaW5nMTYobHx8ZS5maXJzdENoYXIpK3N0cmluZzE2KGh8fGUubGFzdENoYXIpK3N0cmluZzE2KHApK3N0cmluZzE2KG0pKyJcMGQiK3N0cmluZzE2KGIpK3N0cmluZzE2KHkpKyJcMFwwXDBcMFwwXDBcMFwwIitzdHJpbmcxNihlLnhIZWlnaHQpK3N0cmluZzE2KGUuY2FwSGVpZ2h0KStzdHJpbmcxNigwKStzdHJpbmcxNihsfHxlLmZpcnN0Q2hhcikrIlwwAyJ9ZnVuY3Rpb24gY3JlYXRlUG9zdFRhYmxlKGUpe2NvbnN0IHQ9TWF0aC5mbG9vcig2NTUzNiplLml0YWxpY0FuZ2xlKTtyZXR1cm4iXDADXDBcMCIrKDAsci5zdHJpbmczMikodCkrIlwwXDBcMFwwIisoMCxyLnN0cmluZzMyKShlLmZpeGVkUGl0Y2g/MTowKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifWZ1bmN0aW9uIGNyZWF0ZVBvc3RzY3JpcHROYW1lKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoL1teXHgyMS1ceDdFXXxbW1xdKCl7fTw+LyVdL2csIiIpLnNsaWNlKDAsNjMpfWZ1bmN0aW9uIGNyZWF0ZU5hbWVUYWJsZShlLHQpe3R8fCh0PVtbXSxbXV0pO2NvbnN0IGE9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8Y3JlYXRlUG9zdHNjcmlwdE5hbWUoZSksdFswXVs3XXx8IlVua25vd24iLHRbMF1bOF18fCJVbmtub3duIix0WzBdWzldfHwiVW5rbm93biJdLHI9W107bGV0IG4saSxzLG8sYztmb3Iobj0wLGk9YS5sZW5ndGg7bjxpO24rKyl7Yz10WzFdW25dfHxhW25dO2NvbnN0IGU9W107Zm9yKHM9MCxvPWMubGVuZ3RoO3M8bztzKyspZS5wdXNoKHN0cmluZzE2KGMuY2hhckNvZGVBdChzKSkpO3IucHVzaChlLmpvaW4oIiIpKX1jb25zdCBsPVthLHJdLGg9WyJcMAEiLCJcMAMiXSx1PVsiXDBcMCIsIlwwASJdLGQ9WyJcMFwwIiwiBFx0Il0sZj1hLmxlbmd0aCpoLmxlbmd0aDtsZXQgZz0iXDBcMCIrc3RyaW5nMTYoZikrc3RyaW5nMTYoMTIqZis2KSxwPTA7Zm9yKG49MCxpPWgubGVuZ3RoO248aTtuKyspe2NvbnN0IGU9bFtuXTtmb3Iocz0wLG89ZS5sZW5ndGg7czxvO3MrKyl7Yz1lW3NdO2crPWhbbl0rdVtuXStkW25dK3N0cmluZzE2KHMpK3N0cmluZzE2KGMubGVuZ3RoKStzdHJpbmcxNihwKTtwKz1jLmxlbmd0aH19Zys9YS5qb2luKCIiKStyLmpvaW4oIiIpO3JldHVybiBnfXQuRm9udD1jbGFzcyBGb250e2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLm5hbWU9ZTt0aGlzLnBzTmFtZT1udWxsO3RoaXMubWltZXR5cGU9bnVsbDt0aGlzLmRpc2FibGVGb250RmFjZT0hMTt0aGlzLmxvYWRlZE5hbWU9YS5sb2FkZWROYW1lO3RoaXMuaXNUeXBlM0ZvbnQ9YS5pc1R5cGUzRm9udDt0aGlzLm1pc3NpbmdGaWxlPSExO3RoaXMuY3NzRm9udEluZm89YS5jc3NGb250SW5mbzt0aGlzLl9jaGFyc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fZ2x5cGhDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBuPSEhKGEuZmxhZ3MmaS5Gb250RmxhZ3MuU2VyaWYpO2lmKCFuJiYhYS5pc1NpbXVsYXRlZEZsYWdzKXtjb25zdCB0PWUucmVwbGFjZUFsbCgvWyxfXS9nLCItIikuc3BsaXQoIi0iKVswXSxhPSgwLGwuZ2V0U2VyaWZGb250cykoKTtmb3IoY29uc3QgZSBvZiB0LnNwbGl0KCIrIikpaWYoYVtlXSl7bj0hMDticmVha319dGhpcy5pc1NlcmlmRm9udD1uO3RoaXMuaXNTeW1ib2xpY0ZvbnQ9ISEoYS5mbGFncyZpLkZvbnRGbGFncy5TeW1ib2xpYyk7dGhpcy5pc01vbm9zcGFjZT0hIShhLmZsYWdzJmkuRm9udEZsYWdzLkZpeGVkUGl0Y2gpO2xldHt0eXBlOnMsc3VidHlwZTpvfT1hO3RoaXMudHlwZT1zO3RoaXMuc3VidHlwZT1vO3RoaXMuc3lzdGVtRm9udEluZm89YS5zeXN0ZW1Gb250SW5mbztjb25zdCBjPWUubWF0Y2goL15JbnZhbGlkUERGanNGb250XyguKilfXGQrJC8pO3RoaXMuaXNJbnZhbGlkUERGanNGb250PSEhYzt0aGlzLmlzSW52YWxpZFBERmpzRm9udD90aGlzLmZhbGxiYWNrTmFtZT1jWzFdOnRoaXMuaXNNb25vc3BhY2U/dGhpcy5mYWxsYmFja05hbWU9Im1vbm9zcGFjZSI6dGhpcy5pc1NlcmlmRm9udD90aGlzLmZhbGxiYWNrTmFtZT0ic2VyaWYiOnRoaXMuZmFsbGJhY2tOYW1lPSJzYW5zLXNlcmlmIjtpZih0aGlzLnN5c3RlbUZvbnRJbmZvPy5ndWVzc0ZhbGxiYWNrKXt0aGlzLnN5c3RlbUZvbnRJbmZvLmd1ZXNzRmFsbGJhY2s9ITE7dGhpcy5zeXN0ZW1Gb250SW5mby5jc3MrPWAsJHt0aGlzLmZhbGxiYWNrTmFtZX1gfXRoaXMuZGlmZmVyZW5jZXM9YS5kaWZmZXJlbmNlczt0aGlzLndpZHRocz1hLndpZHRoczt0aGlzLmRlZmF1bHRXaWR0aD1hLmRlZmF1bHRXaWR0aDt0aGlzLmNvbXBvc2l0ZT1hLmNvbXBvc2l0ZTt0aGlzLmNNYXA9YS5jTWFwO3RoaXMuY2FwSGVpZ2h0PWEuY2FwSGVpZ2h0L3g7dGhpcy5hc2NlbnQ9YS5hc2NlbnQveDt0aGlzLmRlc2NlbnQ9YS5kZXNjZW50L3g7dGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudDt0aGlzLmZvbnRNYXRyaXg9YS5mb250TWF0cml4O3RoaXMuYmJveD1hLmJib3g7dGhpcy5kZWZhdWx0RW5jb2Rpbmc9YS5kZWZhdWx0RW5jb2Rpbmc7dGhpcy50b1VuaWNvZGU9YS50b1VuaWNvZGU7dGhpcy50b0ZvbnRDaGFyPVtdO2lmKCJUeXBlMyI9PT1hLnR5cGUpe2ZvcihsZXQgZT0wO2U8MjU2O2UrKyl0aGlzLnRvRm9udENoYXJbZV09dGhpcy5kaWZmZXJlbmNlc1tlXXx8YS5kZWZhdWx0RW5jb2RpbmdbZV07cmV0dXJufXRoaXMuY2lkRW5jb2Rpbmc9YS5jaWRFbmNvZGluZ3x8IiI7dGhpcy52ZXJ0aWNhbD0hIWEudmVydGljYWw7aWYodGhpcy52ZXJ0aWNhbCl7dGhpcy52bWV0cmljcz1hLnZtZXRyaWNzO3RoaXMuZGVmYXVsdFZNZXRyaWNzPWEuZGVmYXVsdFZNZXRyaWNzfWlmKCF0fHx0LmlzRW1wdHkpe3QmJigwLHIud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJytlKyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpO3RoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoYSk7cmV0dXJufVtzLG9dPWdldEZvbnRGaWxlVHlwZSh0LGEpO3M9PT10aGlzLnR5cGUmJm89PT10aGlzLnN1YnR5cGV8fCgwLHIuaW5mbykoYEluY29uc2lzdGVudCBmb250IGZpbGUgVHlwZS9TdWJUeXBlLCBleHBlY3RlZDogJHt0aGlzLnR5cGV9LyR7dGhpcy5zdWJ0eXBlfSBidXQgZm91bmQ6ICR7c30vJHtvfS5gKTtsZXQgaDt0cnl7c3dpdGNoKHMpe2Nhc2UiTU1UeXBlMSI6KDAsci5pbmZvKSgiTU1UeXBlMSBmb250ICgiK2UrIiksIGZhbGxpbmcgYmFjayB0byBUeXBlMS4iKTtjYXNlIlR5cGUxIjpjYXNlIkNJREZvbnRUeXBlMCI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7Y29uc3Qgbj0iVHlwZTFDIj09PW98fCJDSURGb250VHlwZTBDIj09PW8/bmV3IHUuQ0ZGRm9udCh0LGEpOm5ldyB3LlR5cGUxRm9udChlLHQsYSk7YWRqdXN0V2lkdGhzKGEpO2g9dGhpcy5jb252ZXJ0KGUsbixhKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7aD10aGlzLmNoZWNrQW5kUmVwYWlyKGUsdCxhKTtpZih0aGlzLmlzT3BlblR5cGUpe2FkanVzdFdpZHRocyhhKTtzPSJPcGVuVHlwZSJ9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgRm9udCAke3N9IGlzIG5vdCBzdXBwb3J0ZWRgKX19Y2F0Y2goZSl7KDAsci53YXJuKShlKTt0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KGEpO3JldHVybn1hbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGEpO3RoaXMuZGF0YT1oO3RoaXMudHlwZT1zO3RoaXMuc3VidHlwZT1vO3RoaXMuZm9udE1hdHJpeD1hLmZvbnRNYXRyaXg7dGhpcy53aWR0aHM9YS53aWR0aHM7dGhpcy5kZWZhdWx0V2lkdGg9YS5kZWZhdWx0V2lkdGg7dGhpcy50b1VuaWNvZGU9YS50b1VuaWNvZGU7dGhpcy5zZWFjTWFwPWEuc2VhY01hcH1nZXQgcmVuZGVyZXIoKXtjb25zdCBlPWQuRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcyxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX1leHBvcnREYXRhKCl7Y29uc3QgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdP1suLi5DLC4uLnZdOkMsdD1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBhLHI7Zm9yKGEgb2YgZSl7cj10aGlzW2FdO3ZvaWQgMCE9PXImJih0W2FdPXIpfXJldHVybiB0fWZhbGxiYWNrVG9TeXN0ZW1Gb250KGUpe3RoaXMubWlzc2luZ0ZpbGU9ITA7Y29uc3R7bmFtZTp0LHR5cGU6YX09dGhpcztsZXQgcj0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKSh0KTtjb25zdCBuPSgwLGwuZ2V0U3RkRm9udE1hcCkoKSx1PSgwLGwuZ2V0Tm9uU3RkRm9udE1hcCkoKSxkPSEhbltyXSxnPSEoIXVbcl18fCFuW3Vbcl1dKTtyPW5bcl18fHVbcl18fHI7Y29uc3QgcD0oMCxmLmdldEZvbnRCYXNpY01ldHJpY3MpKClbcl07aWYocCl7aXNOYU4odGhpcy5hc2NlbnQpJiYodGhpcy5hc2NlbnQ9cC5hc2NlbnQveCk7aXNOYU4odGhpcy5kZXNjZW50KSYmKHRoaXMuZGVzY2VudD1wLmRlc2NlbnQveCk7aXNOYU4odGhpcy5jYXBIZWlnaHQpJiYodGhpcy5jYXBIZWlnaHQ9cC5jYXBIZWlnaHQveCl9dGhpcy5ib2xkPS9ib2xkL2dpLnRlc3Qocik7dGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3Qocik7dGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHQpO2NvbnN0IG09L05hcnJvdy9nLnRlc3QodCk7dGhpcy5yZW1lYXN1cmU9KCFkfHxtKSYmT2JqZWN0LmtleXModGhpcy53aWR0aHMpLmxlbmd0aD4wO2lmKChkfHxnKSYmIkNJREZvbnRUeXBlMiI9PT1hJiZ0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpKXtjb25zdCBhPWUuY2lkVG9HaWRNYXAscj1bXTthcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKHIsKDAsbC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpOy9BcmlhbC0/QmxhY2svaS50ZXN0KHQpP2FwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAociwoMCxsLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaykoKSk6L0NhbGlicmkvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKHIsKDAsbC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkpKCkpO2lmKGEpe2Zvcihjb25zdCBlIGluIHIpe2NvbnN0IHQ9cltlXTt2b2lkIDAhPT1hW3RdJiYoclsrZV09YVt0XSl9YS5sZW5ndGghPT10aGlzLnRvVW5pY29kZS5sZW5ndGgmJmUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcCYmdGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtjb25zdCBuPXJbZV07dm9pZCAwPT09YVtuXSYmKHJbK2VdPXQpfSkpfXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcHx8dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtyWytlXT10fSkpO3RoaXMudG9Gb250Q2hhcj1yO3RoaXMudG9Vbmljb2RlPW5ldyBoLlRvVW5pY29kZU1hcChyKX1lbHNlIGlmKC9TeW1ib2wvaS50ZXN0KHIpKXRoaXMudG9Gb250Q2hhcj1idWlsZFRvRm9udENoYXIoYy5TeW1ib2xTZXRFbmNvZGluZywoMCxvLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KHIpKXRoaXMudG9Gb250Q2hhcj1idWlsZFRvRm9udENoYXIoYy5aYXBmRGluZ2JhdHNFbmNvZGluZywoMCxvLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKGQpe2NvbnN0IGU9YnVpbGRUb0ZvbnRDaGFyKHRoaXMuZGVmYXVsdEVuY29kaW5nLCgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTsiQ0lERm9udFR5cGUyIiE9PWF8fHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiSWRlbnRpdHktIil8fHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcHx8dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24odCxhKXtlWyt0XT1hfSkpO3RoaXMudG9Gb250Q2hhcj1lfWVsc2V7Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCksYT1bXTt0aGlzLnRvVW5pY29kZS5mb3JFYWNoKCgodCxyKT0+e2lmKCF0aGlzLmNvbXBvc2l0ZSl7Y29uc3QgYT10aGlzLmRpZmZlcmVuY2VzW3RdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1t0XSxuPSgwLHMuZ2V0VW5pY29kZUZvckdseXBoKShhLGUpOy0xIT09biYmKHI9bil9YVsrdF09cn0pKTt0aGlzLmNvbXBvc2l0ZSYmdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwJiYvVGFob21hfFZlcmRhbmEvaS50ZXN0KHQpJiZhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGEsKDAsbC5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO3RoaXMudG9Gb250Q2hhcj1hfWFtZW5kRmFsbGJhY2tUb1VuaWNvZGUoZSk7dGhpcy5sb2FkZWROYW1lPXIuc3BsaXQoIi0iKVswXX1jaGVja0FuZFJlcGFpcihlLHQsYSl7Y29uc3Qgcz1bIk9TLzIiLCJjbWFwIiwiaGVhZCIsImhoZWEiLCJobXR4IiwibWF4cCIsIm5hbWUiLCJwb3N0IiwibG9jYSIsImdseWYiLCJmcGdtIiwicHJlcCIsImN2dCAiLCJDRkYgIl07ZnVuY3Rpb24gcmVhZFRhYmxlcyhlLHQpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTthWyJPUy8yIl09bnVsbDthLmNtYXA9bnVsbDthLmhlYWQ9bnVsbDthLmhoZWE9bnVsbDthLmhtdHg9bnVsbDthLm1heHA9bnVsbDthLm5hbWU9bnVsbDthLnBvc3Q9bnVsbDtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PXJlYWRUYWJsZUVudHJ5KGUpO3MuaW5jbHVkZXModC50YWcpJiYoMCE9PXQubGVuZ3RoJiYoYVt0LnRhZ109dCkpfXJldHVybiBhfWZ1bmN0aW9uIHJlYWRUYWJsZUVudHJ5KGUpe2NvbnN0IHQ9ZS5nZXRTdHJpbmcoNCksYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MCxuPWUuZ2V0SW50MzIoKT4+PjAsaT1lLnBvcztlLnBvcz1lLnN0YXJ0fHwwO2Uuc2tpcChyKTtjb25zdCBzPWUuZ2V0Qnl0ZXMobik7ZS5wb3M9aTtpZigiaGVhZCI9PT10KXtzWzhdPXNbOV09c1sxMF09c1sxMV09MDtzWzE3XXw9MzJ9cmV0dXJue3RhZzp0LGNoZWNrc3VtOmEsbGVuZ3RoOm4sb2Zmc2V0OnIsZGF0YTpzfX1mdW5jdGlvbiByZWFkT3BlblR5cGVIZWFkZXIoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiBzYW5pdGl6ZUdseXBoKGUsdCxhLHIsbixpKXtjb25zdCBzPXtsZW5ndGg6MCxzaXplT2ZJbnN0cnVjdGlvbnM6MH07aWYodDwwfHx0Pj1lLmxlbmd0aHx8YT5lLmxlbmd0aHx8YS10PD0xMilyZXR1cm4gcztjb25zdCBvPWUuc3ViYXJyYXkodCxhKSxjPXNpZ25lZEludDE2KG9bMl0sb1szXSksbD1zaWduZWRJbnQxNihvWzRdLG9bNV0pLGg9c2lnbmVkSW50MTYob1s2XSxvWzddKSx1PXNpZ25lZEludDE2KG9bOF0sb1s5XSk7aWYoYz5oKXt3cml0ZVNpZ25lZEludDE2KG8sMixoKTt3cml0ZVNpZ25lZEludDE2KG8sNixjKX1pZihsPnUpe3dyaXRlU2lnbmVkSW50MTYobyw0LHUpO3dyaXRlU2lnbmVkSW50MTYobyw4LGwpfWNvbnN0IGQ9c2lnbmVkSW50MTYob1swXSxvWzFdKTtpZihkPDApe2lmKGQ8LTEpcmV0dXJuIHM7ci5zZXQobyxuKTtzLmxlbmd0aD1vLmxlbmd0aDtyZXR1cm4gc31sZXQgZixnPTEwLHA9MDtmb3IoZj0wO2Y8ZDtmKyspe3A9KG9bZ108PDh8b1tnKzFdKSsxO2crPTJ9Y29uc3QgbT1nLGI9b1tnXTw8OHxvW2crMV07cy5zaXplT2ZJbnN0cnVjdGlvbnM9YjtnKz0yK2I7Y29uc3QgeT1nO2xldCB3PTA7Zm9yKGY9MDtmPHA7ZisrKXtjb25zdCBlPW9bZysrXTsxOTImZSYmKG9bZy0xXT02MyZlKTtsZXQgdD0yOzImZT90PTE6MTYmZSYmKHQ9MCk7bGV0IGE9Mjs0JmU/YT0xOjMyJmUmJihhPTApO2NvbnN0IHI9dCthO3crPXI7aWYoOCZlKXtjb25zdCBlPW9bZysrXTswPT09ZSYmKG9bZy0xXV49OCk7Zis9ZTt3Kz1lKnJ9fWlmKDA9PT13KXJldHVybiBzO2xldCBTPWcrdztpZihTPm8ubGVuZ3RoKXJldHVybiBzO2lmKCFpJiZiPjApe3Iuc2V0KG8uc3ViYXJyYXkoMCxtKSxuKTtyLnNldChbMCwwXSxuK20pO3Iuc2V0KG8uc3ViYXJyYXkoeSxTKSxuK20rMik7Uy09YjtvLmxlbmd0aC1TPjMmJihTPVMrMyYtNCk7cy5sZW5ndGg9UztyZXR1cm4gc31pZihvLmxlbmd0aC1TPjMpe1M9UyszJi00O3Iuc2V0KG8uc3ViYXJyYXkoMCxTKSxuKTtzLmxlbmd0aD1TO3JldHVybiBzfXIuc2V0KG8sbik7cy5sZW5ndGg9by5sZW5ndGg7cmV0dXJuIHN9ZnVuY3Rpb24gcmVhZE5hbWVUYWJsZShlKXtjb25zdCBhPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1hO2NvbnN0IHI9W1tdLFtdXSxuPVtdLGk9ZS5sZW5ndGgscz1hK2k7aWYoMCE9PXQuZ2V0VWludDE2KCl8fGk8NilyZXR1cm5bcixuXTtjb25zdCBvPXQuZ2V0VWludDE2KCksYz10LmdldFVpbnQxNigpO2xldCBsLGg7Zm9yKGw9MDtsPG8mJnQucG9zKzEyPD1zO2wrKyl7Y29uc3QgZT17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoaXNNYWNOYW1lUmVjb3JkKGUpfHxpc1dpbk5hbWVSZWNvcmQoZSkpJiZuLnB1c2goZSl9Zm9yKGw9MCxoPW4ubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9bltsXTtpZihlLmxlbmd0aDw9MCljb250aW51ZTtjb25zdCBpPWErYytlLm9mZnNldDtpZihpK2UubGVuZ3RoPnMpY29udGludWU7dC5wb3M9aTtjb25zdCBvPWUubmFtZTtpZihlLmVuY29kaW5nKXtsZXQgYT0iIjtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKz0yKWErPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7clsxXVtvXT1hfWVsc2UgclswXVtvXT10LmdldFN0cmluZyhlLmxlbmd0aCl9cmV0dXJuW3Isbl19Y29uc3QgbD1bMCwwLDAsMCwwLDAsMCwwLC0yLC0yLC0yLC0yLDAsMCwtMiwtNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwtMSwtMSwxLC0xLC05OTksMCwxLDAsLTEsLTIsMCwtMSwtMiwtMSwtMSwwLC0xLC0xLDAsMCwtOTk5LC05OTksLTEsLTEsLTEsLTEsLTIsLTk5OSwtMiwtMiwtOTk5LDAsLTIsLTIsMCwwLC0yLDAsLTIsMCwwLDAsLTIsLTEsLTEsMSwxLDAsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwwLC05OTksLTEsLTEsLTEsLTEsLTEsLTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTIsLTk5OSwtOTk5LC05OTksLTk5OSwtOTk5LC0xLC0xLC0yLC0yLDAsMCwwLDAsLTEsLTEsLTk5OSwtMiwtMiwwLDAsLTEsLTIsLTIsMCwwLDAsLTEsLTEsLTEsLTJdO2Z1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtKGUsdCl7bGV0IGEsbixpLHMsbyxjPWUuZGF0YSxoPTAsdT0wLGQ9MDtjb25zdCBmPVtdLGc9W10scD1bXTtsZXQgbT10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyxiPSExLHk9MCx3PTA7Zm9yKGxldCBlPWMubGVuZ3RoO2g8ZTspe2NvbnN0IGU9Y1toKytdO2lmKDY0PT09ZSl7bj1jW2grK107aWYoYnx8dyloKz1uO2Vsc2UgZm9yKGE9MDthPG47YSsrKWYucHVzaChjW2grK10pfWVsc2UgaWYoNjU9PT1lKXtuPWNbaCsrXTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZigxNzY9PSgyNDgmZSkpe249ZS0xNzYrMTtpZihifHx3KWgrPW47ZWxzZSBmb3IoYT0wO2E8bjthKyspZi5wdXNoKGNbaCsrXSl9ZWxzZSBpZigxODQ9PSgyNDgmZSkpe249ZS0xODQrMTtpZihifHx3KWgrPTIqbjtlbHNlIGZvcihhPTA7YTxuO2ErKyl7aT1jW2grK107Zi5wdXNoKGk8PDh8Y1toKytdKX19ZWxzZSBpZig0MyE9PWV8fG0paWYoNDQhPT1lfHxtKXtpZig0NT09PWUpaWYoYil7Yj0hMTt1PWh9ZWxzZXtvPWcucG9wKCk7aWYoIW8peygwLHIud2FybikoIlRUOiBFTkRGIGJhZCBzdGFjayIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59cz1wLnBvcCgpO2M9by5kYXRhO2g9by5pO3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbc109Zi5sZW5ndGgtby5zdGFja1RvcH1lbHNlIGlmKDEzNz09PWUpe2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1ofWVsc2UgaWYoODg9PT1lKSsreTtlbHNlIGlmKDI3PT09ZSl3PXk7ZWxzZSBpZig4OT09PWUpe3c9PT15JiYodz0wKTstLXl9ZWxzZSBpZigyOD09PWUmJiFiJiYhdyl7Y29uc3QgZT1mLmF0KC0xKTtlPjAmJihoKz1lLTEpfX1lbHNle2lmKGJ8fHcpeygwLHIud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKTttPSEwfWI9ITA7ZD1oO3M9Zi5wb3AoKTt0LmZ1bmN0aW9uc0RlZmluZWRbc109e2RhdGE6YyxpOmh9fWVsc2UgaWYoIWImJiF3KXtzPWYuYXQoLTEpO2lmKGlzTmFOKHMpKSgwLHIuaW5mbykoIlRUOiBDQUxMIGVtcHR5IHN0YWNrIChvciBpbnZhbGlkIGVudHJ5KS4iKTtlbHNle3QuZnVuY3Rpb25zVXNlZFtzXT0hMDtpZihzIGluIHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpe2NvbnN0IGU9Zi5sZW5ndGgrdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tzXTtpZihlPDApeygwLHIud2FybikoIlRUOiBDQUxMIGludmFsaWQgZnVuY3Rpb25zIHN0YWNrIGRlbHRhLiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Zi5sZW5ndGg9ZX1lbHNlIGlmKHMgaW4gdC5mdW5jdGlvbnNEZWZpbmVkJiYhcC5pbmNsdWRlcyhzKSl7Zy5wdXNoKHtkYXRhOmMsaTpoLHN0YWNrVG9wOmYubGVuZ3RoLTF9KTtwLnB1c2gocyk7bz10LmZ1bmN0aW9uc0RlZmluZWRbc107aWYoIW8peygwLHIud2FybikoIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbiIpO3QuaGludHNWYWxpZD0hMTtyZXR1cm59Yz1vLmRhdGE7aD1vLml9fX1pZighYiYmIXcpe2xldCB0PTA7ZTw9MTQyP3Q9bFtlXTplPj0xOTImJmU8PTIyMz90PS0xOmU+PTIyNCYmKHQ9LTIpO2lmKGU+PTExMyYmZTw9MTE3KXtuPWYucG9wKCk7aXNOYU4obil8fCh0PTIqLW4pfWZvcig7dDwwJiZmLmxlbmd0aD4wOyl7Zi5wb3AoKTt0Kyt9Zm9yKDt0PjA7KXtmLnB1c2goTmFOKTt0LS19fX10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucz1tO2NvbnN0IFM9W2NdO2g+Yy5sZW5ndGgmJlMucHVzaChuZXcgVWludDhBcnJheShoLWMubGVuZ3RoKSk7aWYoZD51KXsoMCxyLndhcm4pKCJUVDogY29tcGxlbWVudGluZyBhIG1pc3NpbmcgZnVuY3Rpb24gdGFpbCIpO1MucHVzaChuZXcgVWludDhBcnJheShbMzQsNDVdKSl9IWZ1bmN0aW9uIGZvbGRUVFRhYmxlKGUsdCl7aWYodC5sZW5ndGg+MSl7bGV0IGEscixuPTA7Zm9yKGE9MCxyPXQubGVuZ3RoO2E8cjthKyspbis9dFthXS5sZW5ndGg7bj1uKzMmLTQ7Y29uc3QgaT1uZXcgVWludDhBcnJheShuKTtsZXQgcz0wO2ZvcihhPTAscj10Lmxlbmd0aDthPHI7YSsrKXtpLnNldCh0W2FdLHMpO3MrPXRbYV0ubGVuZ3RofWUuZGF0YT1pO2UubGVuZ3RoPW59fShlLFMpfWxldCBkLGYsYix3O2lmKGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZSh0PW5ldyB5LlN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe2NvbnN0IGU9ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZSx0KXtjb25zdHtudW1Gb250czphLG9mZnNldFRhYmxlOm59PWZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIoZSl7Y29uc3QgdD1lLmdldFN0cmluZyg0KTsoMCxyLmFzc2VydCkoInR0Y2YiPT09dCwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC4iKTtjb25zdCBhPWUuZ2V0VWludDE2KCksbj1lLmdldFVpbnQxNigpLGk9ZS5nZXRJbnQzMigpPj4+MCxzPVtdO2ZvcihsZXQgdD0wO3Q8aTt0Kyspcy5wdXNoKGUuZ2V0SW50MzIoKT4+PjApO2NvbnN0IG89e3R0Y1RhZzp0LG1ham9yVmVyc2lvbjphLG1pbm9yVmVyc2lvbjpuLG51bUZvbnRzOmksb2Zmc2V0VGFibGU6c307c3dpdGNoKGEpe2Nhc2UgMTpyZXR1cm4gbztjYXNlIDI6by5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjA7by5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjA7cmV0dXJuIG99dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICR7YX0uYCl9KGUpLGk9dC5zcGxpdCgiKyIpO2xldCBzO2ZvcihsZXQgbz0wO288YTtvKyspe2UucG9zPShlLnN0YXJ0fHwwKStuW29dO2NvbnN0IGE9cmVhZE9wZW5UeXBlSGVhZGVyKGUpLGM9cmVhZFRhYmxlcyhlLGEubnVtVGFibGVzKTtpZighYy5uYW1lKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQgbXVzdCBjb250YWluIGEgIm5hbWUiIHRhYmxlLicpO2NvbnN0W2xdPXJlYWROYW1lVGFibGUoYy5uYW1lKTtmb3IobGV0IGU9MCxyPWwubGVuZ3RoO2U8cjtlKyspZm9yKGxldCByPTAsbj1sW2VdLmxlbmd0aDtyPG47cisrKXtjb25zdCBuPWxbZV1bcl0/LnJlcGxhY2VBbGwoL1xzL2csIiIpO2lmKG4pe2lmKG49PT10KXJldHVybntoZWFkZXI6YSx0YWJsZXM6Y307aWYoIShpLmxlbmd0aDwyKSlmb3IoY29uc3QgZSBvZiBpKW49PT1lJiYocz17bmFtZTplLGhlYWRlcjphLHRhYmxlczpjfSl9fX1pZihzKXsoMCxyLndhcm4pKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIiR7dH0iIGZvbnQsIGZhbGxpbmcgYmFjayB0byAiJHtzLm5hbWV9IiBmb250IGluc3RlYWQuYCk7cmV0dXJue2hlYWRlcjpzLmhlYWRlcix0YWJsZXM6cy50YWJsZXN9fXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIiR7dH0iIGZvbnQuYCl9KHQsdGhpcy5uYW1lKTtkPWUuaGVhZGVyO2Y9ZS50YWJsZXN9ZWxzZXtkPXJlYWRPcGVuVHlwZUhlYWRlcih0KTtmPXJlYWRUYWJsZXModCxkLm51bVRhYmxlcyl9Y29uc3QgUz0hZlsiQ0ZGICJdO2lmKFMpe2lmKCFmLmxvY2EpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtpZighZi5nbHlmKXsoMCxyLndhcm4pKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpO2YuZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfX10aGlzLmlzT3BlblR5cGU9ITF9ZWxzZXtjb25zdCB0PWEuY29tcG9zaXRlJiYoYS5jaWRUb0dpZE1hcD8ubGVuZ3RoPjB8fCEoYS5jTWFwIGluc3RhbmNlb2YgcC5JZGVudGl0eUNNYXApKTtpZigiT1RUTyI9PT1kLnZlcnNpb24mJiF0fHwhZi5oZWFkfHwhZi5oaGVhfHwhZi5tYXhwfHwhZi5wb3N0KXt3PW5ldyB5LlN0cmVhbShmWyJDRkYgIl0uZGF0YSk7Yj1uZXcgdS5DRkZGb250KHcsYSk7YWRqdXN0V2lkdGhzKGEpO3JldHVybiB0aGlzLmNvbnZlcnQoZSxiLGEpfWRlbGV0ZSBmLmdseWY7ZGVsZXRlIGYubG9jYTtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXTt0aGlzLmlzT3BlblR5cGU9ITB9aWYoIWYubWF4cCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgIm1heHAiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO3QucG9zPSh0LnN0YXJ0fHwwKStmLm1heHAub2Zmc2V0O2NvbnN0IHg9dC5nZXRJbnQzMigpLEM9dC5nZXRVaW50MTYoKTtpZihhLnNjYWxlRmFjdG9ycz8ubGVuZ3RoPT09QyYmUyl7Y29uc3R7c2NhbGVGYWN0b3JzOmV9PWEsdD1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSxyPW5ldyBnLkdseWZUYWJsZSh7Z2x5ZlRhYmxlOmYuZ2x5Zi5kYXRhLGlzR2x5cGhMb2NhdGlvbnNMb25nOnQsbG9jYVRhYmxlOmYubG9jYS5kYXRhLG51bUdseXBoczpDfSk7ci5zY2FsZShlKTtjb25zdHtnbHlmOm4sbG9jYTppLGlzTG9jYXRpb25Mb25nOnN9PXIud3JpdGUoKTtmLmdseWYuZGF0YT1uO2YubG9jYS5kYXRhPWk7aWYocyE9PSEhdCl7Zi5oZWFkLmRhdGFbNTBdPTA7Zi5oZWFkLmRhdGFbNTFdPXM/MTowfWNvbnN0IG89Zi5obXR4LmRhdGE7Zm9yKGxldCB0PTA7dDxDO3QrKyl7Y29uc3QgYT00KnQscj1NYXRoLnJvdW5kKGVbdF0qaW50MTYob1thXSxvW2ErMV0pKTtvW2FdPXI+PjgmMjU1O29bYSsxXT0yNTUmcjt3cml0ZVNpZ25lZEludDE2KG8sYSsyLE1hdGgucm91bmQoZVt0XSpzaWduZWRJbnQxNihvW2ErMl0sb1thKzNdKSkpfX1sZXQgdj1DKzEsaz0hMDtpZih2PjY1NTM1KXtrPSExO3Y9QzsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKX1sZXQgTz0wLFQ9MDtpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe3QucG9zKz04O2lmKHQuZ2V0VWludDE2KCk+Mil7Zi5tYXhwLmRhdGFbMTRdPTA7Zi5tYXhwLmRhdGFbMTVdPTJ9dC5wb3MrPTQ7Tz10LmdldFVpbnQxNigpO3QucG9zKz00O1Q9dC5nZXRVaW50MTYoKX1mLm1heHAuZGF0YVs0XT12Pj44O2YubWF4cC5kYXRhWzVdPTI1NSZ2O2NvbnN0IE09ZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGUsdCxhLG4pe2NvbnN0IGk9e2Z1bmN0aW9uc0RlZmluZWQ6W10sZnVuY3Rpb25zVXNlZDpbXSxmdW5jdGlvbnNTdGFja0RlbHRhczpbXSx0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6ITEsaGludHNWYWxpZDohMH07ZSYmc2FuaXRpemVUVFByb2dyYW0oZSxpKTt0JiZzYW5pdGl6ZVRUUHJvZ3JhbSh0LGkpO2UmJmZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyhlLHQpe2lmKCFlLnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucylpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpeygwLHIud2FybikoIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWQiKTtlLmhpbnRzVmFsaWQ9ITF9ZWxzZSBmb3IobGV0IGE9MCxuPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7YTxuO2ErKyl7aWYoYT50KXsoMCxyLndhcm4pKCJUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufWlmKGUuZnVuY3Rpb25zVXNlZFthXSYmIWUuZnVuY3Rpb25zRGVmaW5lZFthXSl7KDAsci53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIithKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufX19KGksbik7aWYoYSYmMSZhLmxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShhLmxlbmd0aCsxKTtlLnNldChhLmRhdGEpO2EuZGF0YT1lfXJldHVybiBpLmhpbnRzVmFsaWR9KGYuZnBnbSxmLnByZXAsZlsiY3Z0ICJdLE8pO2lmKCFNKXtkZWxldGUgZi5mcGdtO2RlbGV0ZSBmLnByZXA7ZGVsZXRlIGZbImN2dCAiXX0hZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGUsdCxhLG4saSxzKXtpZighdCl7YSYmKGEuZGF0YT1udWxsKTtyZXR1cm59ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0O2UucG9zKz00O2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2NvbnN0IG89ZS5nZXRVaW50MTYoKTtlLnBvcys9ODtlLnBvcys9MjtsZXQgYz1lLmdldFVpbnQxNigpO2lmKDAhPT1vKXtpZighKDImaW50MTYobi5kYXRhWzQ0XSxuLmRhdGFbNDVdKSkpe3QuZGF0YVsyMl09MDt0LmRhdGFbMjNdPTB9fWlmKGM+aSl7KDAsci5pbmZvKShgVGhlIG51bU9mTWV0cmljcyAoJHtjfSkgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJHtpfSkuYCk7Yz1pO3QuZGF0YVszNF09KDY1MjgwJmMpPj44O3QuZGF0YVszNV09MjU1JmN9Y29uc3QgbD1pLWMtKGEubGVuZ3RoLTQqYz4+MSk7aWYobD4wKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGEubGVuZ3RoKzIqbCk7ZS5zZXQoYS5kYXRhKTtpZihzKXtlW2EubGVuZ3RoXT1hLmRhdGFbMl07ZVthLmxlbmd0aCsxXT1hLmRhdGFbM119YS5kYXRhPWV9fSh0LGYuaGhlYSxmLmhtdHgsZi5oZWFkLHYsayk7aWYoIWYuaGVhZCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhlYWQiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOyFmdW5jdGlvbiBzYW5pdGl6ZUhlYWQoZSx0LGEpe2NvbnN0IG49ZS5kYXRhLGk9ZnVuY3Rpb24gaW50MzIoZSx0LGEscil7cmV0dXJuKGU8PDI0KSsodDw8MTYpKyhhPDw4KStyfShuWzBdLG5bMV0sblsyXSxuWzNdKTtpZihpPj4xNiE9MSl7KDAsci5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICIraSk7blswXT0wO25bMV09MTtuWzJdPTA7blszXT0wfWNvbnN0IHM9aW50MTYobls1MF0sbls1MV0pO2lmKHM8MHx8cz4xKXsoMCxyLmluZm8pKCJBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogIitzKTtjb25zdCBlPXQrMTtpZihhPT09ZTw8MSl7bls1MF09MDtuWzUxXT0wfWVsc2V7aWYoYSE9PWU8PDIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogIitzKTtuWzUwXT0wO25bNTFdPTF9fX0oZi5oZWFkLEMsUz9mLmxvY2EubGVuZ3RoOjApO2xldCBFPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoUyl7Y29uc3QgZT1pbnQxNihmLmhlYWQuZGF0YVs1MF0sZi5oZWFkLmRhdGFbNTFdKSx0PWZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMoZSx0LGEscixuLGkscyl7bGV0IG8sYyxsO2lmKHIpe289NDtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhlLHQpe3JldHVybiBlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM119O2w9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGUsdCxhKXtlW3RdPWE+Pj4yNCYyNTU7ZVt0KzFdPWE+PjE2JjI1NTtlW3QrMl09YT4+OCYyNTU7ZVt0KzNdPTI1NSZhfX1lbHNle289MjtjPWZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfTtsPWZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGUsdCxhKXtlW3RdPWE+PjkmMjU1O2VbdCsxXT1hPj4xJjI1NX19Y29uc3QgaD1pP2ErMTphLHU9byooMStoKSxkPW5ldyBVaW50OEFycmF5KHUpO2Quc2V0KGUuZGF0YS5zdWJhcnJheSgwLHUpKTtlLmRhdGE9ZDtjb25zdCBmPXQuZGF0YSxnPWYubGVuZ3RoLHA9bmV3IFVpbnQ4QXJyYXkoZyk7bGV0IG0sYjtjb25zdCB5PVtdO2ZvcihtPTAsYj0wO208YSsxO20rKyxiKz1vKXtsZXQgZT1jKGQsYik7ZT5nJiYoZT1nKTt5LnB1c2goe2luZGV4Om0sb2Zmc2V0OmUsZW5kT2Zmc2V0OjB9KX15LnNvcnQoKChlLHQpPT5lLm9mZnNldC10Lm9mZnNldCkpO2ZvcihtPTA7bTxhO20rKyl5W21dLmVuZE9mZnNldD15W20rMV0ub2Zmc2V0O3kuc29ydCgoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCkpO2ZvcihtPTA7bTxhO20rKyl7Y29uc3R7b2Zmc2V0OmUsZW5kT2Zmc2V0OnR9PXlbbV07aWYoMCE9PWV8fDAhPT10KWJyZWFrO2NvbnN0IGE9eVttKzFdLm9mZnNldDtpZigwIT09YSl7eVttXS5lbmRPZmZzZXQ9YTticmVha319Y29uc3Qgdz1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBTPTA7bChkLDAsUyk7Zm9yKG09MCxiPW87bTxhO20rKyxiKz1vKXtjb25zdCBlPXNhbml0aXplR2x5cGgoZix5W21dLm9mZnNldCx5W21dLmVuZE9mZnNldCxwLFMsbiksdD1lLmxlbmd0aDswPT09dCYmKHdbbV09ITApO2Uuc2l6ZU9mSW5zdHJ1Y3Rpb25zPnMmJihzPWUuc2l6ZU9mSW5zdHJ1Y3Rpb25zKTtTKz10O2woZCxiLFMpfWlmKDA9PT1TKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihtPTAsYj1vO208aDttKyssYis9bylsKGQsYixlLmxlbmd0aCk7dC5kYXRhPWV9ZWxzZSBpZihpKXtjb25zdCBhPWMoZCxvKTtpZihwLmxlbmd0aD5hK1MpdC5kYXRhPXAuc3ViYXJyYXkoMCxhK1MpO2Vsc2V7dC5kYXRhPW5ldyBVaW50OEFycmF5KGErUyk7dC5kYXRhLnNldChwLnN1YmFycmF5KDAsUykpfXQuZGF0YS5zZXQocC5zdWJhcnJheSgwLGEpLFMpO2woZS5kYXRhLGQubGVuZ3RoLW8sUythKX1lbHNlIHQuZGF0YT1wLnN1YmFycmF5KDAsUyk7cmV0dXJue21pc3NpbmdHbHlwaHM6dyxtYXhTaXplT2ZJbnN0cnVjdGlvbnM6c319KGYubG9jYSxmLmdseWYsQyxlLE0sayxUKTtFPXQubWlzc2luZ0dseXBocztpZih4Pj02NTUzNiYmZi5tYXhwLmxlbmd0aD49MjIpe2YubWF4cC5kYXRhWzI2XT10Lm1heFNpemVPZkluc3RydWN0aW9ucz4+ODtmLm1heHAuZGF0YVsyN109MjU1JnQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zfX1pZighZi5oaGVhKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGhlYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7aWYoMD09PWYuaGhlYS5kYXRhWzEwXSYmMD09PWYuaGhlYS5kYXRhWzExXSl7Zi5oaGVhLmRhdGFbMTBdPTI1NTtmLmhoZWEuZGF0YVsxMV09MjU1fWNvbnN0IEQ9e3VuaXRzUGVyRW06aW50MTYoZi5oZWFkLmRhdGFbMThdLGYuaGVhZC5kYXRhWzE5XSkseU1heDpzaWduZWRJbnQxNihmLmhlYWQuZGF0YVs0Ml0sZi5oZWFkLmRhdGFbNDNdKSx5TWluOnNpZ25lZEludDE2KGYuaGVhZC5kYXRhWzM4XSxmLmhlYWQuZGF0YVszOV0pLGFzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs0XSxmLmhoZWEuZGF0YVs1XSksZGVzY2VudDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs2XSxmLmhoZWEuZGF0YVs3XSksbGluZUdhcDpzaWduZWRJbnQxNihmLmhoZWEuZGF0YVs4XSxmLmhoZWEuZGF0YVs5XSl9O3RoaXMuYXNjZW50PUQuYXNjZW50L0QudW5pdHNQZXJFbTt0aGlzLmRlc2NlbnQ9RC5kZXNjZW50L0QudW5pdHNQZXJFbTt0aGlzLmxpbmVHYXA9RC5saW5lR2FwL0QudW5pdHNQZXJFbTtpZih0aGlzLmNzc0ZvbnRJbmZvPy5saW5lSGVpZ2h0KXt0aGlzLmxpbmVIZWlnaHQ9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVIZWlnaHQ7dGhpcy5saW5lR2FwPXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lR2FwfWVsc2UgdGhpcy5saW5lSGVpZ2h0PXRoaXMuYXNjZW50LXRoaXMuZGVzY2VudCt0aGlzLmxpbmVHYXA7Zi5wb3N0JiZmdW5jdGlvbiByZWFkUG9zdFNjcmlwdFRhYmxlKGUsYSxuKXtjb25zdCBzPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1zO2NvbnN0IG89cytlLmxlbmd0aCxjPXQuZ2V0SW50MzIoKTt0LnNraXAoMjgpO2xldCBsLGgsdT0hMDtzd2l0Y2goYyl7Y2FzZSA2NTUzNjpsPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOmNvbnN0IGU9dC5nZXRVaW50MTYoKTtpZihlIT09bil7dT0hMTticmVha31jb25zdCBzPVtdO2ZvcihoPTA7aDxlOysraCl7Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGU+PTMyNzY4KXt1PSExO2JyZWFrfXMucHVzaChlKX1pZighdSlicmVhaztjb25zdCBkPVtdLGY9W107Zm9yKDt0LnBvczxvOyl7Y29uc3QgZT10LmdldEJ5dGUoKTtmLmxlbmd0aD1lO2ZvcihoPTA7aDxlOysraClmW2hdPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRCeXRlKCkpO2QucHVzaChmLmpvaW4oIiIpKX1sPVtdO2ZvcihoPTA7aDxlOysraCl7Y29uc3QgZT1zW2hdO2U8MjU4P2wucHVzaChpLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZ1tlXSk6bC5wdXNoKGRbZS0yNThdKX1icmVhaztjYXNlIDE5NjYwODpicmVhaztkZWZhdWx0OigwLHIud2FybikoIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uICIrYyk7dT0hMTthLmRlZmF1bHRFbmNvZGluZyYmKGw9YS5kZWZhdWx0RW5jb2RpbmcpfWEuZ2x5cGhOYW1lcz1sO3JldHVybiB1fShmLnBvc3QsYSxDKTtmLnBvc3Q9e3RhZzoicG9zdCIsZGF0YTpjcmVhdGVQb3N0VGFibGUoYSl9O2NvbnN0IFI9W107ZnVuY3Rpb24gaGFzR2x5cGgoZSl7cmV0dXJuIUVbZV19aWYoYS5jb21wb3NpdGUpe2NvbnN0IGU9YS5jaWRUb0dpZE1hcHx8W10sdD0wPT09ZS5sZW5ndGg7YS5jTWFwLmZvckVhY2goKGZ1bmN0aW9uKGEsbil7InN0cmluZyI9PXR5cGVvZiBuJiYobj1jb252ZXJ0Q2lkU3RyaW5nKGEsbiwhMCkpO2lmKG4+NjU1MzUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTtsZXQgaT0tMTt0P2k9bjp2b2lkIDAhPT1lW25dJiYoaT1lW25dKTtpPj0wJiZpPEMmJmhhc0dseXBoKGkpJiYoUlthXT1pKX0pKX1lbHNle2NvbnN0IGU9ZnVuY3Rpb24gcmVhZENtYXBUYWJsZShlLHQsYSxuKXtpZighZSl7KDAsci53YXJuKSgiTm8gY21hcCB0YWJsZSBhdmFpbGFibGUuIik7cmV0dXJue3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9fWxldCBpLHM9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPXM7dC5za2lwKDIpO2NvbnN0IG89dC5nZXRVaW50MTYoKTtsZXQgYyxsPSExO2ZvcihsZXQgZT0wO2U8bztlKyspe2NvbnN0IHI9dC5nZXRVaW50MTYoKSxpPXQuZ2V0VWludDE2KCkscz10LmdldEludDMyKCk+Pj4wO2xldCBoPSExO2lmKGM/LnBsYXRmb3JtSWQhPT1yfHxjPy5lbmNvZGluZ0lkIT09aSl7aWYoMCE9PXJ8fDAhPT1pJiYxIT09aSYmMyE9PWkpaWYoMT09PXImJjA9PT1pKWg9ITA7ZWxzZSBpZigzIT09cnx8MSE9PWl8fCFuJiZjKXtpZihhJiYzPT09ciYmMD09PWkpe2g9ITA7bGV0IGE9ITA7aWYoZTxvLTEpe2NvbnN0IGU9dC5wZWVrQnl0ZXMoMik7aW50MTYoZVswXSxlWzFdKTxyJiYoYT0hMSl9YSYmKGw9ITApfX1lbHNle2g9ITA7YXx8KGw9ITApfWVsc2UgaD0hMDtoJiYoYz17cGxhdGZvcm1JZDpyLGVuY29kaW5nSWQ6aSxvZmZzZXQ6c30pO2lmKGwpYnJlYWt9fWMmJih0LnBvcz1zK2Mub2Zmc2V0KTtpZighY3x8LTE9PT10LnBlZWtCeXRlKCkpeygwLHIud2FybikoIkNvdWxkIG5vdCBmaW5kIGEgcHJlZmVycmVkIGNtYXAgdGFibGUuIik7cmV0dXJue3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9fWNvbnN0IGg9dC5nZXRVaW50MTYoKTtsZXQgdT0hMTtjb25zdCBkPVtdO2xldCBmLGc7aWYoMD09PWgpe3Quc2tpcCg0KTtmb3IoZj0wO2Y8MjU2O2YrKyl7Y29uc3QgZT10LmdldEJ5dGUoKTtlJiZkLnB1c2goe2NoYXJDb2RlOmYsZ2x5cGhJZDplfSl9dT0hMH1lbHNlIGlmKDI9PT1oKXt0LnNraXAoNCk7Y29uc3QgZT1bXTtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8MjU2O3IrKyl7Y29uc3Qgcj10LmdldFVpbnQxNigpPj4zO2UucHVzaChyKTthPU1hdGgubWF4KHIsYSl9Y29uc3Qgcj1bXTtmb3IobGV0IGU9MDtlPD1hO2UrKylyLnB1c2goe2ZpcnN0Q29kZTp0LmdldFVpbnQxNigpLGVudHJ5Q291bnQ6dC5nZXRVaW50MTYoKSxpZERlbHRhOnNpZ25lZEludDE2KHQuZ2V0Qnl0ZSgpLHQuZ2V0Qnl0ZSgpKSxpZFJhbmdlUG9zOnQucG9zK3QuZ2V0VWludDE2KCl9KTtmb3IobGV0IGE9MDthPDI1NjthKyspaWYoMD09PWVbYV0pe3QucG9zPXJbMF0uaWRSYW5nZVBvcysyKmE7Zz10LmdldFVpbnQxNigpO2QucHVzaCh7Y2hhckNvZGU6YSxnbHlwaElkOmd9KX1lbHNle2NvbnN0IG49cltlW2FdXTtmb3IoZj0wO2Y8bi5lbnRyeUNvdW50O2YrKyl7Y29uc3QgZT0oYTw8OCkrZituLmZpcnN0Q29kZTt0LnBvcz1uLmlkUmFuZ2VQb3MrMipmO2c9dC5nZXRVaW50MTYoKTswIT09ZyYmKGc9KGcrbi5pZERlbHRhKSU2NTUzNik7ZC5wdXNoKHtjaGFyQ29kZTplLGdseXBoSWQ6Z30pfX19ZWxzZSBpZig0PT09aCl7dC5za2lwKDQpO2NvbnN0IGU9dC5nZXRVaW50MTYoKT4+MTt0LnNraXAoNik7Y29uc3QgYT1bXTtsZXQgcjtmb3Iocj0wO3I8ZTtyKyspYS5wdXNoKHtlbmQ6dC5nZXRVaW50MTYoKX0pO3Quc2tpcCgyKTtmb3Iocj0wO3I8ZTtyKyspYVtyXS5zdGFydD10LmdldFVpbnQxNigpO2ZvcihyPTA7cjxlO3IrKylhW3JdLmRlbHRhPXQuZ2V0VWludDE2KCk7bGV0IG4sbz0wO2ZvcihyPTA7cjxlO3IrKyl7aT1hW3JdO2NvbnN0IHM9dC5nZXRVaW50MTYoKTtpZihzKXtuPShzPj4xKS0oZS1yKTtpLm9mZnNldEluZGV4PW47bz1NYXRoLm1heChvLG4raS5lbmQtaS5zdGFydCsxKX1lbHNlIGkub2Zmc2V0SW5kZXg9LTF9Y29uc3QgYz1bXTtmb3IoZj0wO2Y8bztmKyspYy5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihyPTA7cjxlO3IrKyl7aT1hW3JdO3M9aS5zdGFydDtjb25zdCBlPWkuZW5kLHQ9aS5kZWx0YTtuPWkub2Zmc2V0SW5kZXg7Zm9yKGY9cztmPD1lO2YrKylpZig2NTUzNSE9PWYpe2c9bjwwP2Y6Y1tuK2Ytc107Zz1nK3QmNjU1MzU7ZC5wdXNoKHtjaGFyQ29kZTpmLGdseXBoSWQ6Z30pfX19ZWxzZSBpZig2PT09aCl7dC5za2lwKDQpO2NvbnN0IGU9dC5nZXRVaW50MTYoKSxhPXQuZ2V0VWludDE2KCk7Zm9yKGY9MDtmPGE7ZisrKXtnPXQuZ2V0VWludDE2KCk7Y29uc3QgYT1lK2Y7ZC5wdXNoKHtjaGFyQ29kZTphLGdseXBoSWQ6Z30pfX1lbHNle2lmKDEyIT09aCl7KDAsci53YXJuKSgiY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAiK2gpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX17dC5za2lwKDEwKTtjb25zdCBlPXQuZ2V0SW50MzIoKT4+PjA7Zm9yKGY9MDtmPGU7ZisrKXtjb25zdCBlPXQuZ2V0SW50MzIoKT4+PjAsYT10LmdldEludDMyKCk+Pj4wO2xldCByPXQuZ2V0SW50MzIoKT4+PjA7Zm9yKGxldCB0PWU7dDw9YTt0KyspZC5wdXNoKHtjaGFyQ29kZTp0LGdseXBoSWQ6cisrfSl9fX1kLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY2hhckNvZGUtdC5jaGFyQ29kZX0pKTtmb3IobGV0IGU9MTtlPGQubGVuZ3RoO2UrKylpZihkW2UtMV0uY2hhckNvZGU9PT1kW2VdLmNoYXJDb2RlKXtkLnNwbGljZShlLDEpO2UtLX1yZXR1cm57cGxhdGZvcm1JZDpjLnBsYXRmb3JtSWQsZW5jb2RpbmdJZDpjLmVuY29kaW5nSWQsbWFwcGluZ3M6ZCxoYXNTaG9ydENtYXA6dX19KGYuY21hcCx0LHRoaXMuaXNTeW1ib2xpY0ZvbnQsYS5oYXNFbmNvZGluZyksbj1lLnBsYXRmb3JtSWQscz1lLmVuY29kaW5nSWQsbD1lLm1hcHBpbmdzO2xldCB1PVtdLGQ9ITE7IWEuaGFzRW5jb2Rpbmd8fCJNYWNSb21hbkVuY29kaW5nIiE9PWEuYmFzZUVuY29kaW5nTmFtZSYmIldpbkFuc2lFbmNvZGluZyIhPT1hLmJhc2VFbmNvZGluZ05hbWV8fCh1PSgwLGMuZ2V0RW5jb2RpbmcpKGEuYmFzZUVuY29kaW5nTmFtZSkpO2lmKGEuaGFzRW5jb2RpbmcmJiF0aGlzLmlzU3ltYm9saWNGb250JiYoMz09PW4mJjE9PT1zfHwxPT09biYmMD09PXMpKXtjb25zdCBlPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IobGV0IHQ9MDt0PDI1Njt0Kyspe2xldCByO3I9dm9pZCAwIT09dGhpcy5kaWZmZXJlbmNlc1t0XT90aGlzLmRpZmZlcmVuY2VzW3RdOnUubGVuZ3RoJiYiIiE9PXVbdF0/dVt0XTpjLlN0YW5kYXJkRW5jb2RpbmdbdF07aWYoIXIpY29udGludWU7Y29uc3Qgbz0oMCxpLnJlY292ZXJHbHlwaE5hbWUpKHIsZSk7bGV0IGQ7Mz09PW4mJjE9PT1zP2Q9ZVtvXToxPT09biYmMD09PXMmJihkPWMuTWFjUm9tYW5FbmNvZGluZy5pbmRleE9mKG8pKTtpZih2b2lkIDA9PT1kKXtpZighYS5nbHlwaE5hbWVzJiZhLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcCkpe2NvbnN0IGU9dGhpcy50b1VuaWNvZGUuZ2V0KHQpO2UmJihkPWUuY29kZVBvaW50QXQoMCkpfWlmKHZvaWQgMD09PWQpY29udGludWV9Zm9yKGNvbnN0IGUgb2YgbClpZihlLmNoYXJDb2RlPT09ZCl7Ult0XT1lLmdseXBoSWQ7YnJlYWt9fX1lbHNlIGlmKDA9PT1uKXtmb3IoY29uc3QgZSBvZiBsKVJbZS5jaGFyQ29kZV09ZS5nbHlwaElkO2Q9ITB9ZWxzZSBmb3IoY29uc3QgZSBvZiBsKXtsZXQgdD1lLmNoYXJDb2RlOzM9PT1uJiZ0Pj02MTQ0MCYmdDw9NjE2OTUmJih0Jj0yNTUpO1JbdF09ZS5nbHlwaElkfWlmKGEuZ2x5cGhOYW1lcyYmKHUubGVuZ3RofHx0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpZm9yKGxldCBlPTA7ZTwyNTY7KytlKXtpZighZCYmdm9pZCAwIT09UltlXSljb250aW51ZTtjb25zdCB0PXRoaXMuZGlmZmVyZW5jZXNbZV18fHVbZV07aWYoIXQpY29udGludWU7Y29uc3Qgcj1hLmdseXBoTmFtZXMuaW5kZXhPZih0KTtyPjAmJmhhc0dseXBoKHIpJiYoUltlXT1yKX19MD09PVIubGVuZ3RoJiYoUlswXT0wKTtsZXQgTj12LTE7a3x8KE49MCk7aWYoIWEuY3NzRm9udEluZm8pe2NvbnN0IGU9YWRqdXN0TWFwcGluZyhSLGhhc0dseXBoLE4sdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1lLnRvRm9udENoYXI7Zi5jbWFwPXt0YWc6ImNtYXAiLGRhdGE6Y3JlYXRlQ21hcFRhYmxlKGUuY2hhckNvZGVUb0dseXBoSWQsZS50b1VuaWNvZGVFeHRyYU1hcCx2KX07ZlsiT1MvMiJdJiZmdW5jdGlvbiB2YWxpZGF0ZU9TMlRhYmxlKGUsdCl7dC5wb3M9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O2NvbnN0IGE9dC5nZXRVaW50MTYoKTt0LnNraXAoNjApO2NvbnN0IHI9dC5nZXRVaW50MTYoKTtpZihhPDQmJjc2OCZyKXJldHVybiExO2lmKHQuZ2V0VWludDE2KCk+dC5nZXRVaW50MTYoKSlyZXR1cm4hMTt0LnNraXAoNik7aWYoMD09PXQuZ2V0VWludDE2KCkpcmV0dXJuITE7ZS5kYXRhWzhdPWUuZGF0YVs5XT0wO3JldHVybiEwfShmWyJPUy8yIl0sdCl8fChmWyJPUy8yIl09e3RhZzoiT1MvMiIsZGF0YTpjcmVhdGVPUzJUYWJsZShhLGUuY2hhckNvZGVUb0dseXBoSWQsRCl9KX1pZighUyl0cnl7dz1uZXcgeS5TdHJlYW0oZlsiQ0ZGICJdLmRhdGEpO2I9bmV3IG4uQ0ZGUGFyc2VyKHcsYSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkucGFyc2UoKTtiLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtjb25zdCBlPW5ldyBuLkNGRkNvbXBpbGVyKGIpO2ZbIkNGRiAiXS5kYXRhPWUuY29tcGlsZSgpfWNhdGNoeygwLHIud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIithLmxvYWRlZE5hbWUpfWlmKGYubmFtZSl7Y29uc3RbdCxyXT1yZWFkTmFtZVRhYmxlKGYubmFtZSk7Zi5uYW1lLmRhdGE9Y3JlYXRlTmFtZVRhYmxlKGUsdCk7dGhpcy5wc05hbWU9dFswXVs2XXx8bnVsbDthLmNvbXBvc2l0ZXx8ZnVuY3Rpb24gYWRqdXN0VHJ1ZVR5cGVUb1VuaWNvZGUoZSx0LGEpe2lmKGUuaXNJbnRlcm5hbEZvbnQpcmV0dXJuO2lmKGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApcmV0dXJuO2lmKGUuaGFzRW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47aWYoIXQpcmV0dXJuO2lmKDA9PT1hLmxlbmd0aClyZXR1cm47aWYoZS5kZWZhdWx0RW5jb2Rpbmc9PT1jLldpbkFuc2lFbmNvZGluZylyZXR1cm47Zm9yKGNvbnN0IGUgb2YgYSlpZighaXNXaW5OYW1lUmVjb3JkKGUpKXJldHVybjtjb25zdCByPWMuV2luQW5zaUVuY29kaW5nLG49W10saT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGNvbnN0IGUgaW4gcil7Y29uc3QgdD1yW2VdO2lmKCIiPT09dCljb250aW51ZTtjb25zdCBhPWlbdF07dm9pZCAwIT09YSYmKG5bZV09U3RyaW5nLmZyb21DaGFyQ29kZShhKSl9bi5sZW5ndGg+MCYmZS50b1VuaWNvZGUuYW1lbmQobil9KGEsdGhpcy5pc1N5bWJvbGljRm9udCxyKX1lbHNlIGYubmFtZT17dGFnOiJuYW1lIixkYXRhOmNyZWF0ZU5hbWVUYWJsZSh0aGlzLm5hbWUpfTtjb25zdCBMPW5ldyBtLk9wZW5UeXBlRmlsZUJ1aWxkZXIoZC52ZXJzaW9uKTtmb3IoY29uc3QgZSBpbiBmKUwuYWRkVGFibGUoZSxmW2VdLmRhdGEpO3JldHVybiBMLnRvQXJyYXkoKX1jb252ZXJ0KGUsdCxhKXthLmZpeGVkUGl0Y2g9ITE7YS5idWlsdEluRW5jb2RpbmcmJmZ1bmN0aW9uIGFkanVzdFR5cGUxVG9Vbmljb2RlKGUsdCl7aWYoZS5pc0ludGVybmFsRm9udClyZXR1cm47aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcClyZXR1cm47aWYodD09PWUuZGVmYXVsdEVuY29kaW5nKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IGE9W10scj0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGNvbnN0IG4gaW4gdCl7aWYoZS5oYXNFbmNvZGluZyYmKGUuYmFzZUVuY29kaW5nTmFtZXx8dm9pZCAwIT09ZS5kaWZmZXJlbmNlc1tuXSkpY29udGludWU7Y29uc3QgaT10W25dLG89KDAscy5nZXRVbmljb2RlRm9yR2x5cGgpKGkscik7LTEhPT1vJiYoYVtuXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pKX1hLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChhKX0oYSxhLmJ1aWx0SW5FbmNvZGluZyk7bGV0IG49MTt0IGluc3RhbmNlb2YgdS5DRkZGb250JiYobj10Lm51bUdseXBocy0xKTtjb25zdCBsPXQuZ2V0R2x5cGhNYXBwaW5nKGEpO2xldCBkPW51bGwsZj1sLGc9bnVsbDtpZighYS5jc3NGb250SW5mbyl7ZD1hZGp1c3RNYXBwaW5nKGwsdC5oYXNHbHlwaElkLmJpbmQodCksbix0aGlzLnRvVW5pY29kZSk7dGhpcy50b0ZvbnRDaGFyPWQudG9Gb250Q2hhcjtmPWQuY2hhckNvZGVUb0dseXBoSWQ7Zz1kLnRvVW5pY29kZUV4dHJhTWFwfWNvbnN0IHA9dC5udW1HbHlwaHM7ZnVuY3Rpb24gZ2V0Q2hhckNvZGVzKGUsdCl7bGV0IGE9bnVsbDtmb3IoY29uc3QgciBpbiBlKXQ9PT1lW3JdJiYoYXx8PVtdKS5wdXNoKDB8cik7cmV0dXJuIGF9ZnVuY3Rpb24gY3JlYXRlQ2hhckNvZGUoZSx0KXtmb3IoY29uc3QgYSBpbiBlKWlmKHQ9PT1lW2FdKXJldHVybiAwfGE7ZC5jaGFyQ29kZVRvR2x5cGhJZFtkLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGVdPXQ7cmV0dXJuIGQubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSsrfWNvbnN0IGI9dC5zZWFjcztpZihkJiZpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCYmYj8ubGVuZ3RoKXtjb25zdCBlPWEuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWCxuPXQuZ2V0Q2hhcnNldCgpLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHQgaW4gYil7dHw9MDtjb25zdCBhPWJbdF0scj1jLlN0YW5kYXJkRW5jb2RpbmdbYVsyXV0scz1jLlN0YW5kYXJkRW5jb2RpbmdbYVszXV0sbz1uLmluZGV4T2YociksaD1uLmluZGV4T2Yocyk7aWYobzwwfHxoPDApY29udGludWU7Y29uc3QgdT17eDphWzBdKmVbMF0rYVsxXSplWzJdK2VbNF0seTphWzBdKmVbMV0rYVsxXSplWzNdK2VbNV19LGY9Z2V0Q2hhckNvZGVzKGwsdCk7aWYoZilmb3IoY29uc3QgZSBvZiBmKXtjb25zdCB0PWQuY2hhckNvZGVUb0dseXBoSWQsYT1jcmVhdGVDaGFyQ29kZSh0LG8pLHI9Y3JlYXRlQ2hhckNvZGUodCxoKTtpW2VdPXtiYXNlRm9udENoYXJDb2RlOmEsYWNjZW50Rm9udENoYXJDb2RlOnIsYWNjZW50T2Zmc2V0OnV9fX1hLnNlYWNNYXA9aX1jb25zdCB5PTEvKGEuZm9udE1hdHJpeHx8ci5GT05UX0lERU5USVRZX01BVFJJWClbMF0sdz1uZXcgbS5PcGVuVHlwZUZpbGVCdWlsZGVyKCJPVFRPIik7dy5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKTt3LmFkZFRhYmxlKCJPUy8yIixjcmVhdGVPUzJUYWJsZShhLGYpKTt3LmFkZFRhYmxlKCJjbWFwIixjcmVhdGVDbWFwVGFibGUoZixnLHApKTt3LmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrc2FmZVN0cmluZzE2KHkpKyJcMFwwXDBcMMKeXHZ+J1wwXDBcMFwwwp5cdn4nXDBcMCIrc2FmZVN0cmluZzE2KGEuZGVzY2VudCkrIg/DvyIrc2FmZVN0cmluZzE2KGEuYXNjZW50KStzdHJpbmcxNihhLml0YWxpY0FuZ2xlPzI6MCkrIlwwEVwwXDBcMFwwXDBcMCIpO3cuYWRkVGFibGUoImhoZWEiLCJcMAFcMFwwIitzYWZlU3RyaW5nMTYoYS5hc2NlbnQpK3NhZmVTdHJpbmcxNihhLmRlc2NlbnQpKyJcMFwww7/Dv1wwXDBcMFwwXDBcMCIrc2FmZVN0cmluZzE2KGEuY2FwSGVpZ2h0KStzYWZlU3RyaW5nMTYoTWF0aC50YW4oYS5pdGFsaWNBbmdsZSkqYS54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitzdHJpbmcxNihwKSk7dy5hZGRUYWJsZSgiaG10eCIsZnVuY3Rpb24gZm9udEZpZWxkc0htdHgoKXtjb25zdCBlPXQuY2hhcnN0cmluZ3MsYT10LmNmZj90LmNmZi53aWR0aHM6bnVsbDtsZXQgcj0iXDBcMFwwXDAiO2ZvcihsZXQgdD0xLG49cDt0PG47dCsrKXtsZXQgbj0wO2lmKGUpe2NvbnN0IGE9ZVt0LTFdO249IndpZHRoImluIGE/YS53aWR0aDowfWVsc2UgYSYmKG49TWF0aC5jZWlsKGFbdF18fDApKTtyKz1zdHJpbmcxNihuKStzdHJpbmcxNigwKX1yZXR1cm4gcn0oKSk7dy5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK3N0cmluZzE2KHApKTt3LmFkZFRhYmxlKCJuYW1lIixjcmVhdGVOYW1lVGFibGUoZSkpO3cuYWRkVGFibGUoInBvc3QiLGNyZWF0ZVBvc3RUYWJsZShhKSk7cmV0dXJuIHcudG9BcnJheSgpfWdldCBzcGFjZVdpZHRoKCl7Y29uc3QgZT1bInNwYWNlIiwibWludXMiLCJvbmUiLCJpIiwiSSJdO2xldCB0O2Zvcihjb25zdCBhIG9mIGUpe2lmKGEgaW4gdGhpcy53aWR0aHMpe3Q9dGhpcy53aWR0aHNbYV07YnJlYWt9Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKClbYV07bGV0IHI9MDtpZih0aGlzLmNvbXBvc2l0ZSYmdGhpcy5jTWFwLmNvbnRhaW5zKGUpKXtyPXRoaXMuY01hcC5sb29rdXAoZSk7InN0cmluZyI9PXR5cGVvZiByJiYocj1jb252ZXJ0Q2lkU3RyaW5nKGUscikpfSFyJiZ0aGlzLnRvVW5pY29kZSYmKHI9dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKSk7cjw9MCYmKHI9ZSk7dD10aGlzLndpZHRoc1tyXTtpZih0KWJyZWFrfXJldHVybigwLHIuc2hhZG93KSh0aGlzLCJzcGFjZVdpZHRoIix0fHx0aGlzLmRlZmF1bHRXaWR0aCl9X2NoYXJUb0dseXBoKGUpe2xldCB0LGEsbixpPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sbz10aGlzLl9nbHlwaENhY2hlW2VdO2lmKG8/LmlzU3BhY2U9PT1pKXJldHVybiBvO2xldCBjPWU7aWYodGhpcy5jTWFwPy5jb250YWlucyhlKSl7Yz10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgYyYmKGM9Y29udmVydENpZFN0cmluZyhlLGMpKX1hPXRoaXMud2lkdGhzW2NdOyJudW1iZXIiIT10eXBlb2YgYSYmKGE9dGhpcy5kZWZhdWx0V2lkdGgpO2NvbnN0IGw9dGhpcy52bWV0cmljcz8uW2NdO2xldCBoPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGgmJihoPVN0cmluZy5mcm9tQ2hhckNvZGUoaCkpO2xldCB1PXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTt0PXRoaXMudG9Gb250Q2hhcltlXXx8ZTtpZih0aGlzLm1pc3NpbmdGaWxlKXtjb25zdCBhPXRoaXMuZGlmZmVyZW5jZXNbZV18fHRoaXMuZGVmYXVsdEVuY29kaW5nW2VdOyIubm90ZGVmIiE9PWEmJiIiIT09YXx8IlR5cGUxIiE9PXRoaXMudHlwZXx8KHQ9MzIpO3Q9KDAscy5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcykodCl9dGhpcy5pc1R5cGUzRm9udCYmKG49dCk7bGV0IGQ9bnVsbDtpZih0aGlzLnNlYWNNYXA/LltlXSl7dT0hMDtjb25zdCBhPXRoaXMuc2VhY01hcFtlXTt0PWEuYmFzZUZvbnRDaGFyQ29kZTtkPXtmb250Q2hhcjpTdHJpbmcuZnJvbUNvZGVQb2ludChhLmFjY2VudEZvbnRDaGFyQ29kZSksb2Zmc2V0OmEuYWNjZW50T2Zmc2V0fX1sZXQgZj0iIjsibnVtYmVyIj09dHlwZW9mIHQmJih0PD0xMTE0MTExP2Y9U3RyaW5nLmZyb21Db2RlUG9pbnQodCk6KDAsci53YXJuKShgY2hhclRvR2x5cGggLSBpbnZhbGlkIGZvbnRDaGFyQ29kZTogJHt0fWApKTtvPW5ldyBHbHlwaChlLGYsaCxkLGEsbCxuLGksdSk7cmV0dXJuIHRoaXMuX2dseXBoQ2FjaGVbZV09b31jaGFyc1RvR2x5cGhzKGUpe2xldCB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDt0PVtdO2lmKHRoaXMuY01hcCl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9ZS5sZW5ndGg7bGV0IG49MDtmb3IoO248cjspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxuLGEpO2NvbnN0e2NoYXJjb2RlOnIsbGVuZ3RoOml9PWE7bis9aTtjb25zdCBzPXRoaXMuX2NoYXJUb0dseXBoKHIsMT09PWkmJjMyPT09ZS5jaGFyQ29kZUF0KG4tMSkpO3QucHVzaChzKX19ZWxzZSBmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjsrK2Epe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGEpLG49dGhpcy5fY2hhclRvR2x5cGgociwzMj09PXIpO3QucHVzaChuKX1yZXR1cm4gdGhpcy5fY2hhcnNDYWNoZVtlXT10fWdldENoYXJQb3NpdGlvbnMoZSl7Y29uc3QgdD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcj0wO2Zvcig7cjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxyLGEpO2NvbnN0IG49YS5sZW5ndGg7dC5wdXNoKFtyLHIrbl0pO3IrPW59fWVsc2UgZm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7KythKXQucHVzaChbYSxhKzFdKTtyZXR1cm4gdH1nZXQgZ2x5cGhDYWNoZVZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfWVuY29kZVN0cmluZyhlKXtjb25zdCB0PVtdLGE9W10saGFzQ3VycmVudEJ1ZkVycm9ycz0oKT0+dC5sZW5ndGglMj09MSxyPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcD9lPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKGUpOmU9PnRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpO2ZvcihsZXQgbj0wLGk9ZS5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT1lLmNvZGVQb2ludEF0KG4pO2k+NTUyOTUmJihpPDU3MzQ0fHxpPjY1NTMzKSYmbisrO2lmKHRoaXMudG9Vbmljb2RlKXtjb25zdCBlPXIoaSk7aWYoLTEhPT1lKXtpZihoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChhLmpvaW4oIiIpKTthLmxlbmd0aD0wfWZvcihsZXQgdD0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aChlKToxKS0xO3Q+PTA7dC0tKWEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgqdCYyNTUpKTtjb250aW51ZX19aWYoIWhhc0N1cnJlbnRCdWZFcnJvcnMoKSl7dC5wdXNoKGEuam9pbigiIikpO2EubGVuZ3RoPTB9YS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KGkpKX10LnB1c2goYS5qb2luKCIiKSk7cmV0dXJuIHR9fTt0LkVycm9yRm9udD1jbGFzcyBFcnJvckZvbnR7Y29uc3RydWN0b3IoZSl7dGhpcy5lcnJvcj1lO3RoaXMubG9hZGVkTmFtZT0iZ19mb250X2Vycm9yIjt0aGlzLm1pc3NpbmdGaWxlPSEwfWNoYXJzVG9HbHlwaHMoKXtyZXR1cm5bXX1lbmNvZGVTdHJpbmcoZSl7cmV0dXJuW2VdfWV4cG9ydERhdGEoKXtyZXR1cm57ZXJyb3I6dGhpcy5lcnJvcn19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkNGRlRvcERpY3Q9dC5DRkZTdHJpbmdzPXQuQ0ZGU3RhbmRhcmRTdHJpbmdzPXQuQ0ZGUHJpdmF0ZURpY3Q9dC5DRkZQYXJzZXI9dC5DRkZJbmRleD10LkNGRkhlYWRlcj10LkNGRkZEU2VsZWN0PXQuQ0ZGQ29tcGlsZXI9dC5DRkZDaGFyc2V0PXQuQ0ZGPXZvaWQgMDthKDE0MCk7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO3ZhciByPWEoMTQ1KSxuPWEoMTg3KSxpPWEoMTg4KTtjb25zdCBzPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCJxdWVzdGlvbmRvd24iLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCJBRSIsIm9yZGZlbWluaW5lIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCJhZSIsImRvdGxlc3NpIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwib25lc3VwZXJpb3IiLCJsb2dpY2Fsbm90IiwibXUiLCJ0cmFkZW1hcmsiLCJFdGgiLCJvbmVoYWxmIiwicGx1c21pbnVzIiwiVGhvcm4iLCJvbmVxdWFydGVyIiwiZGl2aWRlIiwiYnJva2VuYmFyIiwiZGVncmVlIiwidGhvcm4iLCJ0aHJlZXF1YXJ0ZXJzIiwidHdvc3VwZXJpb3IiLCJyZWdpc3RlcmVkIiwibWludXMiLCJldGgiLCJtdWx0aXBseSIsInRocmVlc3VwZXJpb3IiLCJjb3B5cmlnaHQiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkFkaWVyZXNpcyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPZGllcmVzaXMiLCJPZ3JhdmUiLCJPdGlsZGUiLCJTY2Fyb24iLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIlVncmF2ZSIsIllhY3V0ZSIsIllkaWVyZXNpcyIsIlpjYXJvbiIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYWdyYXZlIiwiYXJpbmciLCJhdGlsZGUiLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiZWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJpZ3JhdmUiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm9ncmF2ZSIsIm90aWxkZSIsInNjYXJvbiIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwidWdyYXZlIiwieWFjdXRlIiwieWRpZXJlc2lzIiwiemNhcm9uIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCIsIjAwMS4wMDAiLCIwMDEuMDAxIiwiMDAxLjAwMiIsIjAwMS4wMDMiLCJCbGFjayIsIkJvbGQiLCJCb29rIiwiTGlnaHQiLCJNZWRpdW0iLCJSZWd1bGFyIiwiUm9tYW4iLCJTZW1pYm9sZCJdO3QuQ0ZGU3RhbmRhcmRTdHJpbmdzPXM7Y29uc3Qgbz0zOTEsYz1bbnVsbCx7aWQ6ImhzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LG51bGwse2lkOiJ2c3RlbSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InZtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoicmxpbmV0byIsbWluOjIscmVzZXRTdGFjazohMH0se2lkOiJobGluZXRvIixtaW46MSxyZXNldFN0YWNrOiEwfSx7aWQ6InZsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoicnJjdXJ2ZXRvIixtaW46NixyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbHN1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoicmV0dXJuIixtaW46MCx1bmRlZlN0YWNrOiEwfSxudWxsLG51bGwse2lkOiJlbmRjaGFyIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhzdGVtaG0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJoaW50bWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJjbnRybWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybW92ZXRvIixtaW46MixzdGFja0NsZWFyaW5nOiEwfSx7aWQ6Imhtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoidnN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InJjdXJ2ZWxpbmUiLG1pbjo4LHJlc2V0U3RhY2s6ITB9LHtpZDoicmxpbmVjdXJ2ZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJ2dmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LHtpZDoiaGhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbGdzdWJyIixtaW46MSx1bmRlZlN0YWNrOiEwfSx7aWQ6InZoY3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJodmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9XSxsPVtudWxsLG51bGwsbnVsbCx7aWQ6ImFuZCIsbWluOjIsc3RhY2tEZWx0YTotMX0se2lkOiJvciIsbWluOjIsc3RhY2tEZWx0YTotMX0se2lkOiJub3QiLG1pbjoxLHN0YWNrRGVsdGE6MH0sbnVsbCxudWxsLG51bGwse2lkOiJhYnMiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJhZGQiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbihlLHQpe2VbdC0yXT1lW3QtMl0rZVt0LTFdfX0se2lkOiJzdWIiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbihlLHQpe2VbdC0yXT1lW3QtMl0tZVt0LTFdfX0se2lkOiJkaXYiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbihlLHQpe2VbdC0yXT1lW3QtMl0vZVt0LTFdfX0sbnVsbCx7aWQ6Im5lZyIsbWluOjEsc3RhY2tEZWx0YTowLHN0YWNrRm4oZSx0KXtlW3QtMV09LWVbdC0xXX19LHtpZDoiZXEiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LG51bGwsbnVsbCx7aWQ6ImRyb3AiLG1pbjoxLHN0YWNrRGVsdGE6LTF9LG51bGwse2lkOiJwdXQiLG1pbjoyLHN0YWNrRGVsdGE6LTJ9LHtpZDoiZ2V0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiaWZlbHNlIixtaW46NCxzdGFja0RlbHRhOi0zfSx7aWQ6InJhbmRvbSIsbWluOjAsc3RhY2tEZWx0YToxfSx7aWQ6Im11bCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXSplW3QtMV19fSxudWxsLHtpZDoic3FydCIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImR1cCIsbWluOjEsc3RhY2tEZWx0YToxfSx7aWQ6ImV4Y2giLG1pbjoyLHN0YWNrRGVsdGE6MH0se2lkOiJpbmRleCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6InJvbGwiLG1pbjozLHN0YWNrRGVsdGE6LTJ9LG51bGwsbnVsbCxudWxsLHtpZDoiaGZsZXgiLG1pbjo3LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleCIsbWluOjEzLHJlc2V0U3RhY2s6ITB9LHtpZDoiaGZsZXgxIixtaW46OSxyZXNldFN0YWNrOiEwfSx7aWQ6ImZsZXgxIixtaW46MTEscmVzZXRTdGFjazohMH1dO3QuQ0ZGUGFyc2VyPWNsYXNzIENGRlBhcnNlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5ieXRlcz1lLmdldEJ5dGVzKCk7dGhpcy5wcm9wZXJ0aWVzPXQ7dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhYX1wYXJzZSgpe2NvbnN0IGU9dGhpcy5wcm9wZXJ0aWVzLHQ9bmV3IENGRjt0aGlzLmNmZj10O2NvbnN0IGE9dGhpcy5wYXJzZUhlYWRlcigpLHI9dGhpcy5wYXJzZUluZGV4KGEuZW5kUG9zKSxuPXRoaXMucGFyc2VJbmRleChyLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgobi5lbmRQb3MpLHM9dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxvPXRoaXMucGFyc2VEaWN0KG4ub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoQ0ZGVG9wRGljdCxvLHQuc3RyaW5ncyk7dC5oZWFkZXI9YS5vYmo7dC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KHIub2JqKTt0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKTt0LnRvcERpY3Q9Yzt0Lmdsb2JhbFN1YnJJbmRleD1zLm9iajt0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KTt0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO2NvbnN0IGw9Yy5nZXRCeU5hbWUoIkNoYXJTdHJpbmdzIiksaD10aGlzLnBhcnNlSW5kZXgobCkub2JqLHU9Yy5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTt1JiYoZS5mb250TWF0cml4PXUpO2NvbnN0IGQ9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYoZCl7ZS5hc2NlbnQ9TWF0aC5tYXgoZFszXSxkWzFdKTtlLmRlc2NlbnQ9TWF0aC5taW4oZFsxXSxkWzNdKTtlLmFzY2VudFNjYWxlZD0hMH1sZXQgZixnO2lmKHQuaXNDSURGb250KXtjb25zdCBlPXRoaXMucGFyc2VJbmRleChjLmdldEJ5TmFtZSgiRkRBcnJheSIpKS5vYmo7Zm9yKGxldCBhPTAscj1lLmNvdW50O2E8cjsrK2Epe2NvbnN0IHI9ZS5nZXQoYSksbj10aGlzLmNyZWF0ZURpY3QoQ0ZGVG9wRGljdCx0aGlzLnBhcnNlRGljdChyKSx0LnN0cmluZ3MpO3RoaXMucGFyc2VQcml2YXRlRGljdChuKTt0LmZkQXJyYXkucHVzaChuKX1nPW51bGw7Zj10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxoLmNvdW50LHQuc3RyaW5ncywhMCk7dC5mZFNlbGVjdD10aGlzLnBhcnNlRkRTZWxlY3QoYy5nZXRCeU5hbWUoIkZEU2VsZWN0IiksaC5jb3VudCl9ZWxzZXtmPXRoaXMucGFyc2VDaGFyc2V0cyhjLmdldEJ5TmFtZSgiY2hhcnNldCIpLGguY291bnQsdC5zdHJpbmdzLCExKTtnPXRoaXMucGFyc2VFbmNvZGluZyhjLmdldEJ5TmFtZSgiRW5jb2RpbmciKSxlLHQuc3RyaW5ncyxmLmNoYXJzZXQpfXQuY2hhcnNldD1mO3QuZW5jb2Rpbmc9Zztjb25zdCBwPXRoaXMucGFyc2VDaGFyU3RyaW5ncyh7Y2hhclN0cmluZ3M6aCxsb2NhbFN1YnJJbmRleDpjLnByaXZhdGVEaWN0LnN1YnJzSW5kZXgsZ2xvYmFsU3VickluZGV4OnMub2JqLGZkU2VsZWN0OnQuZmRTZWxlY3QsZmRBcnJheTp0LmZkQXJyYXkscHJpdmF0ZURpY3Q6Yy5wcml2YXRlRGljdH0pO3QuY2hhclN0cmluZ3M9cC5jaGFyU3RyaW5nczt0LnNlYWNzPXAuc2VhY3M7dC53aWR0aHM9cC53aWR0aHM7cmV0dXJuIHR9cGFyc2VIZWFkZXIoKXtsZXQgZT10aGlzLmJ5dGVzO2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8dCYmMSE9PWVbYV07KSsrYTtpZihhPj10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIENGRiBoZWFkZXIiKTtpZigwIT09YSl7KDAsci5pbmZvKSgiY2ZmIGRhdGEgaXMgc2hpZnRlZCIpO2U9ZS5zdWJhcnJheShhKTt0aGlzLmJ5dGVzPWV9Y29uc3Qgbj1lWzBdLGk9ZVsxXSxzPWVbMl0sbz1lWzNdO3JldHVybntvYmo6bmV3IENGRkhlYWRlcihuLGkscyxvKSxlbmRQb3M6c319cGFyc2VEaWN0KGUpe2xldCB0PTA7ZnVuY3Rpb24gcGFyc2VPcGVyYW5kKCl7bGV0IGE9ZVt0KytdO2lmKDMwPT09YSlyZXR1cm4gZnVuY3Rpb24gcGFyc2VGbG9hdE9wZXJhbmQoKXtsZXQgYT0iIjtjb25zdCByPTE1LG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGk9ZS5sZW5ndGg7Zm9yKDt0PGk7KXtjb25zdCBpPWVbdCsrXSxzPWk+PjQsbz0xNSZpO2lmKHM9PT1yKWJyZWFrO2ErPW5bc107aWYobz09PXIpYnJlYWs7YSs9bltvXX1yZXR1cm4gcGFyc2VGbG9hdChhKX0oKTtpZigyOD09PWEpe2E9ZVt0KytdO2E9KGE8PDI0fGVbdCsrXTw8MTYpPj4xNjtyZXR1cm4gYX1pZigyOT09PWEpe2E9ZVt0KytdO2E9YTw8OHxlW3QrK107YT1hPDw4fGVbdCsrXTthPWE8PDh8ZVt0KytdO3JldHVybiBhfWlmKGE+PTMyJiZhPD0yNDYpcmV0dXJuIGEtMTM5O2lmKGE+PTI0NyYmYTw9MjUwKXJldHVybiAyNTYqKGEtMjQ3KStlW3QrK10rMTA4O2lmKGE+PTI1MSYmYTw9MjU0KXJldHVybi0yNTYqKGEtMjUxKS1lW3QrK10tMTA4OygwLHIud2FybikoJ0NGRlBhcnNlcl9wYXJzZURpY3Q6ICInK2ErJyIgaXMgYSByZXNlcnZlZCBjb21tYW5kLicpO3JldHVybiBOYU59bGV0IGE9W107Y29uc3Qgbj1bXTt0PTA7Y29uc3QgaT1lLmxlbmd0aDtmb3IoO3Q8aTspe2xldCByPWVbdF07aWYocjw9MjEpezEyPT09ciYmKHI9cjw8OHxlWysrdF0pO24ucHVzaChbcixhXSk7YT1bXTsrK3R9ZWxzZSBhLnB1c2gocGFyc2VPcGVyYW5kKCkpfXJldHVybiBufXBhcnNlSW5kZXgoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXgsYT10aGlzLmJ5dGVzLHI9YVtlKytdPDw4fGFbZSsrXSxuPVtdO2xldCBpLHMsbz1lO2lmKDAhPT1yKXtjb25zdCB0PWFbZSsrXSxjPWUrKHIrMSkqdC0xO2ZvcihpPTAscz1yKzE7aTxzOysraSl7bGV0IHI9MDtmb3IobGV0IG49MDtuPHQ7KytuKXtyPDw9ODtyKz1hW2UrK119bi5wdXNoKGMrcil9bz1uW3JdfWZvcihpPTAscz1uLmxlbmd0aC0xO2k8czsrK2kpe2NvbnN0IGU9bltpXSxyPW5baSsxXTt0LmFkZChhLnN1YmFycmF5KGUscikpfXJldHVybntvYmo6dCxlbmRQb3M6b319cGFyc2VOYW1lSW5kZXgoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxuPWUuY291bnQ7YTxuOysrYSl7Y29uc3Qgbj1lLmdldChhKTt0LnB1c2goKDAsci5ieXRlc1RvU3RyaW5nKShuKSl9cmV0dXJuIHR9cGFyc2VTdHJpbmdJbmRleChlKXtjb25zdCB0PW5ldyBDRkZTdHJpbmdzO2ZvcihsZXQgYT0wLG49ZS5jb3VudDthPG47KythKXtjb25zdCBuPWUuZ2V0KGEpO3QuYWRkKCgwLHIuYnl0ZXNUb1N0cmluZykobikpfXJldHVybiB0fWNyZWF0ZURpY3QoZSx0LGEpe2NvbnN0IHI9bmV3IGUoYSk7Zm9yKGNvbnN0W2UsYV1vZiB0KXIuc2V0QnlLZXkoZSxhKTtyZXR1cm4gcn1wYXJzZUNoYXJTdHJpbmcoZSx0LGEsbil7aWYoIXR8fGUuY2FsbERlcHRoPjEwKXJldHVybiExO2xldCBpPWUuc3RhY2tTaXplO2NvbnN0IHM9ZS5zdGFjaztsZXQgbz10Lmxlbmd0aDtmb3IobGV0IGg9MDtoPG87KXtjb25zdCB1PXRbaCsrXTtsZXQgZD1udWxsO2lmKDEyPT09dSl7Y29uc3QgZT10W2grK107aWYoMD09PWUpe3RbaC0yXT0xMzk7dFtoLTFdPTIyO2k9MH1lbHNlIGQ9bFtlXX1lbHNlIGlmKDI4PT09dSl7c1tpXT0odFtoXTw8MjR8dFtoKzFdPDwxNik+PjE2O2grPTI7aSsrfWVsc2UgaWYoMTQ9PT11KXtpZihpPj00KXtpLT00O2lmKHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCl7ZS5zZWFjPXMuc2xpY2UoaSxpKzQpO3JldHVybiExfX1kPWNbdV19ZWxzZSBpZih1Pj0zMiYmdTw9MjQ2KXtzW2ldPXUtMTM5O2krK31lbHNlIGlmKHU+PTI0NyYmdTw9MjU0KXtzW2ldPXU8MjUxPyh1LTI0Nzw8OCkrdFtoXSsxMDg6LSh1LTI1MTw8OCktdFtoXS0xMDg7aCsrO2krK31lbHNlIGlmKDI1NT09PXUpe3NbaV09KHRbaF08PDI0fHRbaCsxXTw8MTZ8dFtoKzJdPDw4fHRbaCszXSkvNjU1MzY7aCs9NDtpKyt9ZWxzZSBpZigxOT09PXV8fDIwPT09dSl7ZS5oaW50cys9aT4+MTtpZigwPT09ZS5oaW50cyl7dC5jb3B5V2l0aGluKGgtMSxoLC0xKTtoLT0xO28tPTE7Y29udGludWV9aCs9ZS5oaW50cys3Pj4zO2klPTI7ZD1jW3VdfWVsc2V7aWYoMTA9PT11fHwyOT09PXUpe2NvbnN0IHQ9MTA9PT11P2E6bjtpZighdCl7ZD1jW3VdOygwLHIud2FybikoIk1pc3Npbmcgc3VicnNJbmRleCBmb3IgIitkLmlkKTtyZXR1cm4hMX1sZXQgbz0zMjc2ODt0LmNvdW50PDEyNDA/bz0xMDc6dC5jb3VudDwzMzkwMCYmKG89MTEzMSk7Y29uc3QgbD1zWy0taV0rbztpZihsPDB8fGw+PXQuY291bnR8fGlzTmFOKGwpKXtkPWNbdV07KDAsci53YXJuKSgiT3V0IG9mIGJvdW5kcyBzdWJySW5kZXggZm9yICIrZC5pZCk7cmV0dXJuITF9ZS5zdGFja1NpemU9aTtlLmNhbGxEZXB0aCsrO2lmKCF0aGlzLnBhcnNlQ2hhclN0cmluZyhlLHQuZ2V0KGwpLGEsbikpcmV0dXJuITE7ZS5jYWxsRGVwdGgtLTtpPWUuc3RhY2tTaXplO2NvbnRpbnVlfWlmKDExPT09dSl7ZS5zdGFja1NpemU9aTtyZXR1cm4hMH1pZigwPT09dSYmaD09PXQubGVuZ3RoKXt0W2gtMV09MTQ7ZD1jWzE0XX1lbHNle2lmKDk9PT11KXt0LmNvcHlXaXRoaW4oaC0xLGgsLTEpO2gtPTE7by09MTtjb250aW51ZX1kPWNbdV19fWlmKGQpe2lmKGQuc3RlbSl7ZS5oaW50cys9aT4+MTtpZigzPT09dXx8MjM9PT11KWUuaGFzVlN0ZW1zPSEwO2Vsc2UgaWYoZS5oYXNWU3RlbXMmJigxPT09dXx8MTg9PT11KSl7KDAsci53YXJuKSgiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyIik7dFtoLTFdPTE9PT11PzM6MjN9fWlmKCJtaW4iaW4gZCYmIWUudW5kZWZTdGFjayYmaTxkLm1pbil7KDAsci53YXJuKSgiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAiK2QuaWQrIjsgYWN0dWFsOiAiK2krIiwgZXhwZWN0ZWQ6ICIrZC5taW4pO2lmKDA9PT1pKXt0W2gtMV09MTQ7cmV0dXJuITB9cmV0dXJuITF9aWYoZS5maXJzdFN0YWNrQ2xlYXJpbmcmJmQuc3RhY2tDbGVhcmluZyl7ZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITE7aS09ZC5taW47aT49MiYmZC5zdGVtP2klPTI6aT4xJiYoMCxyLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIik7aT4wJiYoZS53aWR0aD1zW2ktMV0pfWlmKCJzdGFja0RlbHRhImluIGQpeyJzdGFja0ZuImluIGQmJmQuc3RhY2tGbihzLGkpO2krPWQuc3RhY2tEZWx0YX1lbHNlIGlmKGQuc3RhY2tDbGVhcmluZylpPTA7ZWxzZSBpZihkLnJlc2V0U3RhY2spe2k9MDtlLnVuZGVmU3RhY2s9ITF9ZWxzZSBpZihkLnVuZGVmU3RhY2spe2k9MDtlLnVuZGVmU3RhY2s9ITA7ZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITF9fX1vPHQubGVuZ3RoJiZ0LmZpbGwoMTQsbyk7ZS5zdGFja1NpemU9aTtyZXR1cm4hMH1wYXJzZUNoYXJTdHJpbmdzKGUpe2xldHtjaGFyU3RyaW5nczp0LGxvY2FsU3VickluZGV4OmEsZ2xvYmFsU3VickluZGV4Om4sZmRTZWxlY3Q6aSxmZEFycmF5OnMscHJpdmF0ZURpY3Q6b309ZTtjb25zdCBjPVtdLGw9W10saD10LmNvdW50O2ZvcihsZXQgZT0wO2U8aDtlKyspe2NvbnN0IGg9dC5nZXQoZSksdT17Y2FsbERlcHRoOjAsc3RhY2tTaXplOjAsc3RhY2s6W10sdW5kZWZTdGFjazohMCxoaW50czowLGZpcnN0U3RhY2tDbGVhcmluZzohMCxzZWFjOm51bGwsd2lkdGg6bnVsbCxoYXNWU3RlbXM6ITF9O2xldCBkPSEwLGY9bnVsbCxnPW87aWYoaSYmcy5sZW5ndGgpe2NvbnN0IHQ9aS5nZXRGREluZGV4KGUpO2lmKC0xPT09dCl7KDAsci53YXJuKSgiR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4iKTtkPSExfWlmKHQ+PXMubGVuZ3RoKXsoMCxyLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKTtkPSExfWlmKGQpe2c9c1t0XS5wcml2YXRlRGljdDtmPWcuc3VicnNJbmRleH19ZWxzZSBhJiYoZj1hKTtkJiYoZD10aGlzLnBhcnNlQ2hhclN0cmluZyh1LGgsZixuKSk7aWYobnVsbCE9PXUud2lkdGgpe2NvbnN0IHQ9Zy5nZXRCeU5hbWUoIm5vbWluYWxXaWR0aFgiKTtsW2VdPXQrdS53aWR0aH1lbHNle2NvbnN0IHQ9Zy5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTtsW2VdPXR9bnVsbCE9PXUuc2VhYyYmKGNbZV09dS5zZWFjKTtkfHx0LnNldChlLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6dCxzZWFjczpjLHdpZHRoczpsfX1lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSk7ZS5wcml2YXRlRGljdD10fXBhcnNlUHJpdmF0ZURpY3QoZSl7aWYoIWUuaGFzTmFtZSgiUHJpdmF0ZSIpKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IHQ9ZS5nZXRCeU5hbWUoIlByaXZhdGUiKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RoKXtlLnJlbW92ZUJ5TmFtZSgiUHJpdmF0ZSIpO3JldHVybn1jb25zdCBhPXRbMF0scj10WzFdO2lmKDA9PT1hfHxyPj10aGlzLmJ5dGVzLmxlbmd0aCl7dGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO3JldHVybn1jb25zdCBuPXIrYSxpPXRoaXMuYnl0ZXMuc3ViYXJyYXkocixuKSxzPXRoaXMucGFyc2VEaWN0KGkpLG89dGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LHMsZS5zdHJpbmdzKTtlLnByaXZhdGVEaWN0PW87MD09PW8uZ2V0QnlOYW1lKCJFeHBhbnNpb25GYWN0b3IiKSYmby5zZXRCeU5hbWUoIkV4cGFuc2lvbkZhY3RvciIsLjA2KTtpZighby5nZXRCeU5hbWUoIlN1YnJzIikpcmV0dXJuO2NvbnN0IGM9by5nZXRCeU5hbWUoIlN1YnJzIiksbD1yK2M7aWYoMD09PWN8fGw+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IGg9dGhpcy5wYXJzZUluZGV4KGwpO28uc3VicnNJbmRleD1oLm9ian1wYXJzZUNoYXJzZXRzKGUsdCxhLGkpe2lmKDA9PT1lKXJldHVybiBuZXcgQ0ZGQ2hhcnNldCghMCxkLklTT19BRE9CRSxuLklTT0Fkb2JlQ2hhcnNldCk7aWYoMT09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJULG4uRXhwZXJ0Q2hhcnNldCk7aWYoMj09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGQuRVhQRVJUX1NVQlNFVCxuLkV4cGVydFN1YnNldENoYXJzZXQpO2NvbnN0IHM9dGhpcy5ieXRlcyxvPWUsYz1zW2UrK10sbD1baT8wOiIubm90ZGVmIl07bGV0IGgsdSxmO3QtPTE7c3dpdGNoKGMpe2Nhc2UgMDpmb3IoZj0wO2Y8dDtmKyspe2g9c1tlKytdPDw4fHNbZSsrXTtsLnB1c2goaT9oOmEuZ2V0KGgpKX1icmVhaztjYXNlIDE6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTtmb3IoZj0wO2Y8PXU7ZisrKWwucHVzaChpP2grKzphLmdldChoKyspKX1icmVhaztjYXNlIDI6Zm9yKDtsLmxlbmd0aDw9dDspe2g9c1tlKytdPDw4fHNbZSsrXTt1PXNbZSsrXTw8OHxzW2UrK107Zm9yKGY9MDtmPD11O2YrKylsLnB1c2goaT9oKys6YS5nZXQoaCsrKSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biBjaGFyc2V0IGZvcm1hdCIpfWNvbnN0IGc9ZSxwPXMuc3ViYXJyYXkobyxnKTtyZXR1cm4gbmV3IENGRkNoYXJzZXQoITEsYyxsLHApfXBhcnNlRW5jb2RpbmcoZSx0LGEsbil7Y29uc3Qgcz1PYmplY3QuY3JlYXRlKG51bGwpLG89dGhpcy5ieXRlcztsZXQgYyxsLGgsdT0hMSxkPW51bGw7aWYoMD09PWV8fDE9PT1lKXt1PSEwO2M9ZTtjb25zdCB0PWU/aS5FeHBlcnRFbmNvZGluZzppLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKGw9MCxoPW4ubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9dC5pbmRleE9mKG5bbF0pOy0xIT09ZSYmKHNbZV09bCl9fWVsc2V7Y29uc3QgdD1lO2M9b1tlKytdO3N3aXRjaCgxMjcmYyl7Y2FzZSAwOmNvbnN0IHQ9b1tlKytdO2ZvcihsPTE7bDw9dDtsKyspc1tvW2UrK11dPWw7YnJlYWs7Y2FzZSAxOmNvbnN0IGE9b1tlKytdO2xldCBuPTE7Zm9yKGw9MDtsPGE7bCsrKXtjb25zdCB0PW9bZSsrXSxhPW9bZSsrXTtmb3IobGV0IGU9dDtlPD10K2E7ZSsrKXNbZV09bisrfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke2N9IGluIENGRmApfWNvbnN0IGk9ZTtpZigxMjgmYyl7b1t0XSY9MTI3OyFmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpe2NvbnN0IHQ9b1tlKytdO2ZvcihsPTA7bDx0O2wrKyl7Y29uc3QgdD1vW2UrK10scj0ob1tlKytdPDw4KSsoMjU1Jm9bZSsrXSk7c1t0XT1uLmluZGV4T2YoYS5nZXQocikpfX0oKX1kPW8uc3ViYXJyYXkodCxpKX1jJj0xMjc7cmV0dXJuIG5ldyBDRkZFbmNvZGluZyh1LGMscyxkKX1wYXJzZUZEU2VsZWN0KGUsdCl7Y29uc3QgYT10aGlzLmJ5dGVzLG49YVtlKytdLGk9W107bGV0IHM7c3dpdGNoKG4pe2Nhc2UgMDpmb3Iocz0wO3M8dDsrK3Mpe2NvbnN0IHQ9YVtlKytdO2kucHVzaCh0KX1icmVhaztjYXNlIDM6Y29uc3Qgbz1hW2UrK108PDh8YVtlKytdO2ZvcihzPTA7czxvOysrcyl7bGV0IHQ9YVtlKytdPDw4fGFbZSsrXTtpZigwPT09cyYmMCE9PXQpeygwLHIud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKTt0PTB9Y29uc3Qgbj1hW2UrK10sbz1hW2VdPDw4fGFbZSsxXTtmb3IobGV0IGU9dDtlPG87KytlKWkucHVzaChuKX1lKz0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYHBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0ICIke259Ii5gKX1pZihpLmxlbmd0aCE9PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInBhcnNlRkRTZWxlY3Q6IEludmFsaWQgZm9udCBkYXRhLiIpO3JldHVybiBuZXcgQ0ZGRkRTZWxlY3QobixpKX19O2NsYXNzIENGRntjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZGVyPW51bGw7dGhpcy5uYW1lcz1bXTt0aGlzLnRvcERpY3Q9bnVsbDt0aGlzLnN0cmluZ3M9bmV3IENGRlN0cmluZ3M7dGhpcy5nbG9iYWxTdWJySW5kZXg9bnVsbDt0aGlzLmVuY29kaW5nPW51bGw7dGhpcy5jaGFyc2V0PW51bGw7dGhpcy5jaGFyU3RyaW5ncz1udWxsO3RoaXMuZmRBcnJheT1bXTt0aGlzLmZkU2VsZWN0PW51bGw7dGhpcy5pc0NJREZvbnQ9ITF9ZHVwbGljYXRlRmlyc3RHbHlwaCgpe2lmKHRoaXMuY2hhclN0cmluZ3MuY291bnQ+PTY1NTM1KXsoMCxyLndhcm4pKCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKTtyZXR1cm59Y29uc3QgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKTt0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KXJldHVybiExO3JldHVybiB0aGlzLmNoYXJTdHJpbmdzLmdldChlKS5sZW5ndGg+MH19dC5DRkY9Q0ZGO2NsYXNzIENGRkhlYWRlcntjb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLm1ham9yPWU7dGhpcy5taW5vcj10O3RoaXMuaGRyU2l6ZT1hO3RoaXMub2ZmU2l6ZT1yfX10LkNGRkhlYWRlcj1DRkZIZWFkZXI7Y2xhc3MgQ0ZGU3RyaW5nc3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyaW5ncz1bXX1nZXQoZSl7cmV0dXJuIGU+PTAmJmU8PTM5MD9zW2VdOmUtbzw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS1vXTpzWzBdfWdldFNJRChlKXtsZXQgdD1zLmluZGV4T2YoZSk7aWYoLTEhPT10KXJldHVybiB0O3Q9dGhpcy5zdHJpbmdzLmluZGV4T2YoZSk7cmV0dXJuLTEhPT10P3QrbzotMX1hZGQoZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGh9fXQuQ0ZGU3RyaW5ncz1DRkZTdHJpbmdzO2NsYXNzIENGRkluZGV4e2NvbnN0cnVjdG9yKCl7dGhpcy5vYmplY3RzPVtdO3RoaXMubGVuZ3RoPTB9YWRkKGUpe3RoaXMubGVuZ3RoKz1lLmxlbmd0aDt0aGlzLm9iamVjdHMucHVzaChlKX1zZXQoZSx0KXt0aGlzLmxlbmd0aCs9dC5sZW5ndGgtdGhpcy5vYmplY3RzW2VdLmxlbmd0aDt0aGlzLm9iamVjdHNbZV09dH1nZXQoZSl7cmV0dXJuIHRoaXMub2JqZWN0c1tlXX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5vYmplY3RzLmxlbmd0aH19dC5DRkZJbmRleD1DRkZJbmRleDtjbGFzcyBDRkZEaWN0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5rZXlUb05hbWVNYXA9ZS5rZXlUb05hbWVNYXA7dGhpcy5uYW1lVG9LZXlNYXA9ZS5uYW1lVG9LZXlNYXA7dGhpcy5kZWZhdWx0cz1lLmRlZmF1bHRzO3RoaXMudHlwZXM9ZS50eXBlczt0aGlzLm9wY29kZXM9ZS5vcGNvZGVzO3RoaXMub3JkZXI9ZS5vcmRlcjt0aGlzLnN0cmluZ3M9dDt0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXNldEJ5S2V5KGUsdCl7aWYoIShlIGluIHRoaXMua2V5VG9OYW1lTWFwKSlyZXR1cm4hMTtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0IGEgb2YgdClpZihpc05hTihhKSl7KDAsci53YXJuKShgSW52YWxpZCBDRkZEaWN0IHZhbHVlOiAiJHt0fSIgZm9yIGtleSAiJHtlfSIuYCk7cmV0dXJuITB9Y29uc3QgYT10aGlzLnR5cGVzW2VdOyJudW0iIT09YSYmInNpZCIhPT1hJiYib2Zmc2V0IiE9PWF8fCh0PXRbMF0pO3RoaXMudmFsdWVzW2VdPXQ7cmV0dXJuITB9c2V0QnlOYW1lKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIiR7ZX0iYCk7dGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dPXR9aGFzTmFtZShlKXtyZXR1cm4gdGhpcy5uYW1lVG9LZXlNYXBbZV1pbiB0aGlzLnZhbHVlc31nZXRCeU5hbWUoZSl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgJHtlfSJgKTtjb25zdCB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19cmVtb3ZlQnlOYW1lKGUpe2RlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV19c3RhdGljIGNyZWF0ZVRhYmxlcyhlKXtjb25zdCB0PXtrZXlUb05hbWVNYXA6e30sbmFtZVRvS2V5TWFwOnt9LGRlZmF1bHRzOnt9LHR5cGVzOnt9LG9wY29kZXM6e30sb3JkZXI6W119O2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9QXJyYXkuaXNBcnJheShhWzBdKT8oYVswXVswXTw8OCkrYVswXVsxXTphWzBdO3Qua2V5VG9OYW1lTWFwW2VdPWFbMV07dC5uYW1lVG9LZXlNYXBbYVsxXV09ZTt0LnR5cGVzW2VdPWFbMl07dC5kZWZhdWx0c1tlXT1hWzNdO3Qub3Bjb2Rlc1tlXT1BcnJheS5pc0FycmF5KGFbMF0pP2FbMF06W2FbMF1dO3Qub3JkZXIucHVzaChlKX1yZXR1cm4gdH19Y29uc3QgaD1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dO2NsYXNzIENGRlRvcERpY3QgZXh0ZW5kcyBDRkZEaWN0e3N0YXRpYyBnZXQgdGFibGVzKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsInRhYmxlcyIsdGhpcy5jcmVhdGVUYWJsZXMoaCkpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKENGRlRvcERpY3QudGFibGVzLGUpO3RoaXMucHJpdmF0ZURpY3Q9bnVsbH19dC5DRkZUb3BEaWN0PUNGRlRvcERpY3Q7Y29uc3QgdT1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dO2NsYXNzIENGRlByaXZhdGVEaWN0IGV4dGVuZHMgQ0ZGRGljdHtzdGF0aWMgZ2V0IHRhYmxlcygpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKHUpKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihDRkZQcml2YXRlRGljdC50YWJsZXMsZSk7dGhpcy5zdWJyc0luZGV4PW51bGx9fXQuQ0ZGUHJpdmF0ZURpY3Q9Q0ZGUHJpdmF0ZURpY3Q7Y29uc3QgZD17SVNPX0FET0JFOjAsRVhQRVJUOjEsRVhQRVJUX1NVQlNFVDoyfTtjbGFzcyBDRkZDaGFyc2V0e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5jaGFyc2V0PWE7dGhpcy5yYXc9cn19dC5DRkZDaGFyc2V0PUNGRkNoYXJzZXQ7Y2xhc3MgQ0ZGRW5jb2Rpbmd7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5wcmVkZWZpbmVkPWU7dGhpcy5mb3JtYXQ9dDt0aGlzLmVuY29kaW5nPWE7dGhpcy5yYXc9cn19Y2xhc3MgQ0ZGRkRTZWxlY3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZvcm1hdD1lO3RoaXMuZmRTZWxlY3Q9dH1nZXRGREluZGV4KGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fXQuQ0ZGRkRTZWxlY3Q9Q0ZGRkRTZWxlY3Q7Y2xhc3MgQ0ZGT2Zmc2V0VHJhY2tlcntjb25zdHJ1Y3Rvcigpe3RoaXMub2Zmc2V0cz1PYmplY3QuY3JlYXRlKG51bGwpfWlzVHJhY2tpbmcoZSl7cmV0dXJuIGUgaW4gdGhpcy5vZmZzZXRzfXRyYWNrKGUsdCl7aWYoZSBpbiB0aGlzLm9mZnNldHMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO3RoaXMub2Zmc2V0c1tlXT10fW9mZnNldChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfXNldEVudHJ5TG9jYXRpb24oZSx0LGEpe2lmKCEoZSBpbiB0aGlzLm9mZnNldHMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBOb3QgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO2NvbnN0IG49YS5kYXRhLGk9dGhpcy5vZmZzZXRzW2VdO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhOysrZSl7Y29uc3QgYT01KmUraSxzPWErMSxvPWErMixjPWErMyxsPWErNDtpZigyOSE9PW5bYV18fDAhPT1uW3NdfHwwIT09bltvXXx8MCE9PW5bY118fDAhPT1uW2xdKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eSIpO2NvbnN0IGg9dFtlXTtuW2FdPTI5O25bc109aD4+MjQmMjU1O25bb109aD4+MTYmMjU1O25bY109aD4+OCYyNTU7bltsXT0yNTUmaH19fWNsYXNzIENGRkNvbXBpbGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuY2ZmPWV9Y29tcGlsZSgpe2NvbnN0IGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQoZSl7dHJ5e3RoaXMuZGF0YS5wdXNoKC4uLmUpfWNhdGNoe3RoaXMuZGF0YT10aGlzLmRhdGEuY29uY2F0KGUpfXRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGh9fSxhPXRoaXMuY29tcGlsZUhlYWRlcihlLmhlYWRlcik7dC5hZGQoYSk7Y29uc3Qgbj10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7dC5hZGQobik7aWYoZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe2NvbnN0IHQ9ZS50b3BEaWN0LmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpO2UudG9wRGljdC5yZW1vdmVCeU5hbWUoIkZvbnRNYXRyaXgiKTtmb3IoY29uc3QgYSBvZiBlLmZkQXJyYXkpe2xldCBlPXQuc2xpY2UoMCk7YS5oYXNOYW1lKCJGb250TWF0cml4IikmJihlPXIuVXRpbC50cmFuc2Zvcm0oZSxhLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpKSk7YS5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLGUpfX1jb25zdCBpPWUudG9wRGljdC5nZXRCeU5hbWUoIlhVSUQiKTtpPy5sZW5ndGg+MTYmJmUudG9wRGljdC5yZW1vdmVCeU5hbWUoIlhVSUQiKTtlLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTtsZXQgcz10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQocy5vdXRwdXQpO2NvbnN0IG89cy50cmFja2Vyc1swXSxjPXRoaXMuY29tcGlsZVN0cmluZ0luZGV4KGUuc3RyaW5ncy5zdHJpbmdzKTt0LmFkZChjKTtjb25zdCBsPXRoaXMuY29tcGlsZUluZGV4KGUuZ2xvYmFsU3VickluZGV4KTt0LmFkZChsKTtpZihlLmVuY29kaW5nJiZlLnRvcERpY3QuaGFzTmFtZSgiRW5jb2RpbmciKSlpZihlLmVuY29kaW5nLnByZWRlZmluZWQpby5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW2UuZW5jb2RpbmcuZm9ybWF0XSx0KTtlbHNle2NvbnN0IGE9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7by5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KTt0LmFkZChhKX1jb25zdCBoPXRoaXMuY29tcGlsZUNoYXJzZXQoZS5jaGFyc2V0LGUuY2hhclN0cmluZ3MuY291bnQsZS5zdHJpbmdzLGUuaXNDSURGb250KTtvLnNldEVudHJ5TG9jYXRpb24oImNoYXJzZXQiLFt0Lmxlbmd0aF0sdCk7dC5hZGQoaCk7Y29uc3QgdT10aGlzLmNvbXBpbGVDaGFyU3RyaW5ncyhlLmNoYXJTdHJpbmdzKTtvLnNldEVudHJ5TG9jYXRpb24oIkNoYXJTdHJpbmdzIixbdC5sZW5ndGhdLHQpO3QuYWRkKHUpO2lmKGUuaXNDSURGb250KXtvLnNldEVudHJ5TG9jYXRpb24oIkZEU2VsZWN0IixbdC5sZW5ndGhdLHQpO2NvbnN0IGE9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQoYSk7cz10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApO28uc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KTt0LmFkZChzLm91dHB1dCk7Y29uc3Qgcj1zLnRyYWNrZXJzO3RoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhlLmZkQXJyYXkscix0KX10aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2UudG9wRGljdF0sW29dLHQpO3QuYWRkKFswXSk7cmV0dXJuIHQuZGF0YX1lbmNvZGVOdW1iZXIoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSk/dGhpcy5lbmNvZGVJbnRlZ2VyKGUpOnRoaXMuZW5jb2RlRmxvYXQoZSl9c3RhdGljIGdldCBFbmNvZGVGbG9hdFJlZ0V4cCgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfWVuY29kZUZsb2F0KGUpe2xldCB0PWUudG9TdHJpbmcoKTtjb25zdCBhPUNGRkNvbXBpbGVyLkVuY29kZUZsb2F0UmVnRXhwLmV4ZWModCk7aWYoYSl7Y29uc3Qgcj1wYXJzZUZsb2F0KCIxZSIrKChhWzJdPythWzJdOjApK2FbMV0ubGVuZ3RoKSk7dD0oTWF0aC5yb3VuZChlKnIpL3IpLnRvU3RyaW5nKCl9bGV0IHIsbixpPSIiO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtjb25zdCBlPXRbcl07aSs9ImUiPT09ZT8iLSI9PT10Wysrcl0/ImMiOiJiIjoiLiI9PT1lPyJhIjoiLSI9PT1lPyJlIjplfWkrPTEmaS5sZW5ndGg/ImYiOiJmZiI7Y29uc3Qgcz1bMzBdO2ZvcihyPTAsbj1pLmxlbmd0aDtyPG47cis9MilzLnB1c2gocGFyc2VJbnQoaS5zdWJzdHJpbmcocixyKzIpLDE2KSk7cmV0dXJuIHN9ZW5jb2RlSW50ZWdlcihlKXtsZXQgdDt0PWU+PS0xMDcmJmU8PTEwNz9bZSsxMzldOmU+PTEwOCYmZTw9MTEzMT9bMjQ3KygoZS09MTA4KT4+OCksMjU1JmVdOmU+PS0xMTMxJiZlPD0tMTA4P1syNTErKChlPS1lLTEwOCk+PjgpLDI1NSZlXTplPj0tMzI3NjgmJmU8PTMyNzY3P1syOCxlPj44JjI1NSwyNTUmZV06WzI5LGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdO3JldHVybiB0fWNvbXBpbGVIZWFkZXIoZSl7cmV0dXJuW2UubWFqb3IsZS5taW5vciw0LGUub2ZmU2l6ZV19Y29tcGlsZU5hbWVJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPU1hdGgubWluKGEubGVuZ3RoLDEyNyk7bGV0IG49bmV3IEFycmF5KGUpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCBlPWFbdF07KGU8IiEifHxlPiJ+Inx8IlsiPT09ZXx8Il0iPT09ZXx8IigiPT09ZXx8IikiPT09ZXx8InsiPT09ZXx8In0iPT09ZXx8IjwiPT09ZXx8Ij4iPT09ZXx8Ii8iPT09ZXx8IiUiPT09ZSkmJihlPSJfIik7blt0XT1lfW49bi5qb2luKCIiKTsiIj09PW4mJihuPSJCYWRfRm9udF9OYW1lIik7dC5hZGQoKDAsci5zdHJpbmdUb0J5dGVzKShuKSl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfWNvbXBpbGVUb3BEaWN0cyhlLHQsYSl7Y29uc3Qgcj1bXTtsZXQgbj1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IGkgb2YgZSl7aWYoYSl7aS5yZW1vdmVCeU5hbWUoIkNJREZvbnRWZXJzaW9uIik7aS5yZW1vdmVCeU5hbWUoIkNJREZvbnRSZXZpc2lvbiIpO2kucmVtb3ZlQnlOYW1lKCJDSURGb250VHlwZSIpO2kucmVtb3ZlQnlOYW1lKCJDSURDb3VudCIpO2kucmVtb3ZlQnlOYW1lKCJVSURCYXNlIil9Y29uc3QgZT1uZXcgQ0ZGT2Zmc2V0VHJhY2tlcixzPXRoaXMuY29tcGlsZURpY3QoaSxlKTtyLnB1c2goZSk7bi5hZGQocyk7ZS5vZmZzZXQodCl9bj10aGlzLmNvbXBpbGVJbmRleChuLHIpO3JldHVybnt0cmFja2VyczpyLG91dHB1dDpufX1jb21waWxlUHJpdmF0ZURpY3RzKGUsdCxhKXtmb3IobGV0IG49MCxpPWUubGVuZ3RoO248aTsrK24pe2NvbnN0IGk9ZVtuXSxzPWkucHJpdmF0ZURpY3Q7aWYoIXN8fCFpLmhhc05hbWUoIlByaXZhdGUiKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVGhlcmUgbXVzdCBiZSBhIHByaXZhdGUgZGljdGlvbmFyeS4iKTtjb25zdCBvPW5ldyBDRkZPZmZzZXRUcmFja2VyLGM9dGhpcy5jb21waWxlRGljdChzLG8pO2xldCBsPWEubGVuZ3RoO28ub2Zmc2V0KGwpO2MubGVuZ3RofHwobD0wKTt0W25dLnNldEVudHJ5TG9jYXRpb24oIlByaXZhdGUiLFtjLmxlbmd0aCxsXSxhKTthLmFkZChjKTtpZihzLnN1YnJzSW5kZXgmJnMuaGFzTmFtZSgiU3VicnMiKSl7Y29uc3QgZT10aGlzLmNvbXBpbGVJbmRleChzLnN1YnJzSW5kZXgpO28uc2V0RW50cnlMb2NhdGlvbigiU3VicnMiLFtjLmxlbmd0aF0sYSk7YS5hZGQoZSl9fX1jb21waWxlRGljdChlLHQpe2NvbnN0IGE9W107Zm9yKGNvbnN0IG4gb2YgZS5vcmRlcil7aWYoIShuIGluIGUudmFsdWVzKSljb250aW51ZTtsZXQgaT1lLnZhbHVlc1tuXSxzPWUudHlwZXNbbl07QXJyYXkuaXNBcnJheShzKXx8KHM9W3NdKTtBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO2lmKDAhPT1pLmxlbmd0aCl7Zm9yKGxldCBvPTAsYz1zLmxlbmd0aDtvPGM7KytvKXtjb25zdCBjPXNbb10sbD1pW29dO3N3aXRjaChjKXtjYXNlIm51bSI6Y2FzZSJzaWQiOmEucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihsKSk7YnJlYWs7Y2FzZSJvZmZzZXQiOmNvbnN0IHM9ZS5rZXlUb05hbWVNYXBbbl07dC5pc1RyYWNraW5nKHMpfHx0LnRyYWNrKHMsYS5sZW5ndGgpO2EucHVzaCgyOSwwLDAsMCwwKTticmVhaztjYXNlImFycmF5IjpjYXNlImRlbHRhIjphLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIobCkpO2ZvcihsZXQgZT0xLHQ9aS5sZW5ndGg7ZTx0OysrZSlhLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIoaVtlXSkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFVua25vd24gZGF0YSB0eXBlIG9mICR7Y31gKX19YS5wdXNoKC4uLmUub3Bjb2Rlc1tuXSl9fXJldHVybiBhfWNvbXBpbGVTdHJpbmdJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IoY29uc3QgYSBvZiBlKXQuYWRkKCgwLHIuc3RyaW5nVG9CeXRlcykoYSkpO3JldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlQ2hhclN0cmluZ3MoZSl7Y29uc3QgdD1uZXcgQ0ZGSW5kZXg7Zm9yKGxldCBhPTA7YTxlLmNvdW50O2ErKyl7Y29uc3Qgcj1lLmdldChhKTswIT09ci5sZW5ndGg/dC5hZGQocik6dC5hZGQobmV3IFVpbnQ4QXJyYXkoWzEzOSwxNF0pKX1yZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJzZXQoZSx0LGEsbil7bGV0IGk7Y29uc3Qgcz10LTE7aWYobilpPW5ldyBVaW50OEFycmF5KFsyLDAsMCxzPj44JjI1NSwyNTUmc10pO2Vsc2V7aT1uZXcgVWludDhBcnJheSgxKzIqcyk7aVswXT0wO2xldCB0PTA7Y29uc3Qgbj1lLmNoYXJzZXQubGVuZ3RoO2xldCBvPSExO2ZvcihsZXQgcz0xO3M8aS5sZW5ndGg7cys9Mil7bGV0IGM9MDtpZih0PG4pe2NvbnN0IG49ZS5jaGFyc2V0W3QrK107Yz1hLmdldFNJRChuKTtpZigtMT09PWMpe2M9MDtpZighbyl7bz0hMDsoMCxyLndhcm4pKGBDb3VsZG4ndCBmaW5kICR7bn0gaW4gQ0ZGIHN0cmluZ3NgKX19fWlbc109Yz4+OCYyNTU7aVtzKzFdPTI1NSZjfX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShpKX1jb21waWxlRW5jb2RpbmcoZSl7cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZS5yYXcpfWNvbXBpbGVGRFNlbGVjdChlKXtjb25zdCB0PWUuZm9ybWF0O2xldCBhLHI7c3dpdGNoKHQpe2Nhc2UgMDphPW5ldyBVaW50OEFycmF5KDErZS5mZFNlbGVjdC5sZW5ndGgpO2FbMF09dDtmb3Iocj0wO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKWFbcisxXT1lLmZkU2VsZWN0W3JdO2JyZWFrO2Nhc2UgMzpjb25zdCBuPTA7bGV0IGk9ZS5mZFNlbGVjdFswXTtjb25zdCBzPVt0LDAsMCxuPj44JjI1NSwyNTUmbixpXTtmb3Iocj0xO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXtjb25zdCB0PWUuZmRTZWxlY3Rbcl07aWYodCE9PWkpe3MucHVzaChyPj44JjI1NSwyNTUmcix0KTtpPXR9fWNvbnN0IG89KHMubGVuZ3RoLTMpLzM7c1sxXT1vPj44JjI1NTtzWzJdPTI1NSZvO3MucHVzaChyPj44JjI1NSwyNTUmcik7YT1uZXcgVWludDhBcnJheShzKX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShhKX1jb21waWxlVHlwZWRBcnJheShlKXtyZXR1cm4gQXJyYXkuZnJvbShlKX1jb21waWxlSW5kZXgoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGE9ZS5vYmplY3RzLHI9YS5sZW5ndGg7aWYoMD09PXIpcmV0dXJuWzAsMF07Y29uc3Qgbj1bcj4+OCYyNTUsMjU1JnJdO2xldCBpLHMsbz0xO2ZvcihpPTA7aTxyOysraSlvKz1hW2ldLmxlbmd0aDtzPW88MjU2PzE6bzw2NTUzNj8yOm88MTY3NzcyMTY/Mzo0O24ucHVzaChzKTtsZXQgYz0xO2ZvcihpPTA7aTxyKzE7aSsrKXsxPT09cz9uLnB1c2goMjU1JmMpOjI9PT1zP24ucHVzaChjPj44JjI1NSwyNTUmYyk6Mz09PXM/bi5wdXNoKGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYyk6bi5wdXNoKGM+Pj4yNCYyNTUsYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjKTthW2ldJiYoYys9YVtpXS5sZW5ndGgpfWZvcihpPTA7aTxyO2krKyl7dFtpXSYmdFtpXS5vZmZzZXQobi5sZW5ndGgpO24ucHVzaCguLi5hW2ldKX1yZXR1cm4gbn19dC5DRkZDb21waWxlcj1DRkZDb21waWxlcn0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5JU09BZG9iZUNoYXJzZXQ9dC5FeHBlcnRTdWJzZXRDaGFyc2V0PXQuRXhwZXJ0Q2hhcnNldD12b2lkIDA7dC5JU09BZG9iZUNoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iXTt0LkV4cGVydENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl07dC5FeHBlcnRTdWJzZXRDaGFyc2V0PVsiLm5vdGRlZiIsInNwYWNlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsImh5cGhlbnN1cGVyaW9yIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsImNlbnRvbGRzdHlsZSIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCJ6ZXJvc3VwZXJpb3IiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciJdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlphcGZEaW5nYmF0c0VuY29kaW5nPXQuV2luQW5zaUVuY29kaW5nPXQuU3ltYm9sU2V0RW5jb2Rpbmc9dC5TdGFuZGFyZEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LkV4cGVydEVuY29kaW5nPXZvaWQgMDt0LmdldEVuY29kaW5nPWZ1bmN0aW9uIGdldEVuY29kaW5nKGUpe3N3aXRjaChlKXtjYXNlIldpbkFuc2lFbmNvZGluZyI6cmV0dXJuIHM7Y2FzZSJTdGFuZGFyZEVuY29kaW5nIjpyZXR1cm4gaTtjYXNlIk1hY1JvbWFuRW5jb2RpbmciOnJldHVybiBuO2Nhc2UiU3ltYm9sU2V0RW5jb2RpbmciOnJldHVybiBvO2Nhc2UiWmFwZkRpbmdiYXRzRW5jb2RpbmciOnJldHVybiBjO2Nhc2UiRXhwZXJ0RW5jb2RpbmciOnJldHVybiBhO2Nhc2UiTWFjRXhwZXJ0RW5jb2RpbmciOnJldHVybiByO2RlZmF1bHQ6cmV0dXJuIG51bGx9fTtjb25zdCBhPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiIiwiIiwiIiwiaXN1cGVyaW9yIiwiIiwiIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwiIiwiIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIiIsIkRvdGFjY2VudHNtYWxsIiwiIiwiIiwiTWFjcm9uc21hbGwiLCIiLCIiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCIiLCIiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl07dC5FeHBlcnRFbmNvZGluZz1hO2NvbnN0IHI9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJjZW50b2xkc3R5bGUiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsIiIsInF1ZXN0aW9uc21hbGwiLCIiLCIiLCIiLCIiLCJFdGhzbWFsbCIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsIm9uZWVpZ2h0aCIsInRocmVlZWlnaHRocyIsImZpdmVlaWdodGhzIiwic2V2ZW5laWdodGhzIiwib25ldGhpcmQiLCJ0d290aGlyZHMiLCIiLCIiLCIiLCIiLCIiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbmluZmVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiYXN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiQWFjdXRlc21hbGwiLCJBZ3JhdmVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQXJpbmdzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWFjdXRlc21hbGwiLCJJZ3JhdmVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk90aWxkZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIiIsImVpZ2h0c3VwZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsIlNjYXJvbnNtYWxsIiwiIiwiY2VudGluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCIiLCJEaWVyZXNpc3NtYWxsIiwiIiwiQ2Fyb25zbWFsbCIsIm9zdXBlcmlvciIsImZpdmVpbmZlcmlvciIsIiIsImNvbW1haW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsIllhY3V0ZXNtYWxsIiwiIiwiZG9sbGFyaW5mZXJpb3IiLCIiLCIiLCJUaG9ybnNtYWxsIiwiIiwibmluZWluZmVyaW9yIiwiemVyb2luZmVyaW9yIiwiWmNhcm9uc21hbGwiLCJBRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJxdWVzdGlvbmRvd25zbWFsbCIsIm9uZWluZmVyaW9yIiwiTHNsYXNoc21hbGwiLCIiLCIiLCIiLCIiLCIiLCIiLCJDZWRpbGxhc21hbGwiLCIiLCIiLCIiLCIiLCIiLCJPRXNtYWxsIiwiZmlndXJlZGFzaCIsImh5cGhlbnN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiIiwiWWRpZXJlc2lzc21hbGwiLCIiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9zdXBlcmlvciIsIiIsImVzdXBlcmlvciIsInJzdXBlcmlvciIsInRzdXBlcmlvciIsIiIsIiIsImlzdXBlcmlvciIsInNzdXBlcmlvciIsImRzdXBlcmlvciIsIiIsIiIsIiIsIiIsIiIsImxzdXBlcmlvciIsIk9nb25la3NtYWxsIiwiQnJldmVzbWFsbCIsIk1hY3JvbnNtYWxsIiwiYnN1cGVyaW9yIiwibnN1cGVyaW9yIiwibXN1cGVyaW9yIiwiY29tbWFzdXBlcmlvciIsInBlcmlvZHN1cGVyaW9yIiwiRG90YWNjZW50c21hbGwiLCJSaW5nc21hbGwiLCIiLCIiLCIiLCIiXSxuPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJOdGlsZGUiLCJPZGllcmVzaXMiLCJVZGllcmVzaXMiLCJhYWN1dGUiLCJhZ3JhdmUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImF0aWxkZSIsImFyaW5nIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlZ3JhdmUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlhY3V0ZSIsImlncmF2ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwibnRpbGRlIiwib2FjdXRlIiwib2dyYXZlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvdGlsZGUiLCJ1YWN1dGUiLCJ1Z3JhdmUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsImRhZ2dlciIsImRlZ3JlZSIsImNlbnQiLCJzdGVybGluZyIsInNlY3Rpb24iLCJidWxsZXQiLCJwYXJhZ3JhcGgiLCJnZXJtYW5kYmxzIiwicmVnaXN0ZXJlZCIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImFjdXRlIiwiZGllcmVzaXMiLCJub3RlcXVhbCIsIkFFIiwiT3NsYXNoIiwiaW5maW5pdHkiLCJwbHVzbWludXMiLCJsZXNzZXF1YWwiLCJncmVhdGVyZXF1YWwiLCJ5ZW4iLCJtdSIsInBhcnRpYWxkaWZmIiwic3VtbWF0aW9uIiwicHJvZHVjdCIsInBpIiwiaW50ZWdyYWwiLCJvcmRmZW1pbmluZSIsIm9yZG1hc2N1bGluZSIsIk9tZWdhIiwiYWUiLCJvc2xhc2giLCJxdWVzdGlvbmRvd24iLCJleGNsYW1kb3duIiwibG9naWNhbG5vdCIsInJhZGljYWwiLCJmbG9yaW4iLCJhcHByb3hlcXVhbCIsIkRlbHRhIiwiZ3VpbGxlbW90bGVmdCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIl07dC5NYWNSb21hbkVuY29kaW5nPW47Y29uc3QgaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCIiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCIiLCJxdWVzdGlvbmRvd24iLCIiLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsIiIsInJpbmciLCJjZWRpbGxhIiwiIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJBRSIsIiIsIm9yZGZlbWluaW5lIiwiIiwiIiwiIiwiIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCIiLCIiLCIiLCIiLCIiLCJhZSIsIiIsIiIsIiIsImRvdGxlc3NpIiwiIiwiIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwiIiwiIiwiIiwiIl07dC5TdGFuZGFyZEVuY29kaW5nPWk7Y29uc3Qgcz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJidWxsZXQiLCJFdXJvIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJmbG9yaW4iLCJxdW90ZWRibGJhc2UiLCJlbGxpcHNpcyIsImRhZ2dlciIsImRhZ2dlcmRibCIsImNpcmN1bWZsZXgiLCJwZXJ0aG91c2FuZCIsIlNjYXJvbiIsImd1aWxzaW5nbGxlZnQiLCJPRSIsImJ1bGxldCIsIlpjYXJvbiIsImJ1bGxldCIsImJ1bGxldCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwiYnVsbGV0IiwiZW5kYXNoIiwiZW1kYXNoIiwidGlsZGUiLCJ0cmFkZW1hcmsiLCJzY2Fyb24iLCJndWlsc2luZ2xyaWdodCIsIm9lIiwiYnVsbGV0IiwiemNhcm9uIiwiWWRpZXJlc2lzIiwic3BhY2UiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiY3VycmVuY3kiLCJ5ZW4iLCJicm9rZW5iYXIiLCJzZWN0aW9uIiwiZGllcmVzaXMiLCJjb3B5cmlnaHQiLCJvcmRmZW1pbmluZSIsImd1aWxsZW1vdGxlZnQiLCJsb2dpY2Fsbm90IiwiaHlwaGVuIiwicmVnaXN0ZXJlZCIsIm1hY3JvbiIsImRlZ3JlZSIsInBsdXNtaW51cyIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImFjdXRlIiwibXUiLCJwYXJhZ3JhcGgiLCJwZXJpb2RjZW50ZXJlZCIsImNlZGlsbGEiLCJvbmVzdXBlcmlvciIsIm9yZG1hc2N1bGluZSIsImd1aWxsZW1vdHJpZ2h0Iiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duIiwiQWdyYXZlIiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkFFIiwiQ2NlZGlsbGEiLCJFZ3JhdmUiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIklncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiRXRoIiwiTnRpbGRlIiwiT2dyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPdGlsZGUiLCJPZGllcmVzaXMiLCJtdWx0aXBseSIsIk9zbGFzaCIsIlVncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiWWFjdXRlIiwiVGhvcm4iLCJnZXJtYW5kYmxzIiwiYWdyYXZlIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhdGlsZGUiLCJhZGllcmVzaXMiLCJhcmluZyIsImFlIiwiY2NlZGlsbGEiLCJlZ3JhdmUiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiZXRoIiwibnRpbGRlIiwib2dyYXZlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvdGlsZGUiLCJvZGllcmVzaXMiLCJkaXZpZGUiLCJvc2xhc2giLCJ1Z3JhdmUiLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInlhY3V0ZSIsInRob3JuIiwieWRpZXJlc2lzIl07dC5XaW5BbnNpRW5jb2Rpbmc9cztjb25zdCBvPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJ1bml2ZXJzYWwiLCJudW1iZXJzaWduIiwiZXhpc3RlbnRpYWwiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwic3VjaHRoYXQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2ttYXRoIiwicGx1cyIsImNvbW1hIiwibWludXMiLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImNvbmdydWVudCIsIkFscGhhIiwiQmV0YSIsIkNoaSIsIkRlbHRhIiwiRXBzaWxvbiIsIlBoaSIsIkdhbW1hIiwiRXRhIiwiSW90YSIsInRoZXRhMSIsIkthcHBhIiwiTGFtYmRhIiwiTXUiLCJOdSIsIk9taWNyb24iLCJQaSIsIlRoZXRhIiwiUmhvIiwiU2lnbWEiLCJUYXUiLCJVcHNpbG9uIiwic2lnbWExIiwiT21lZ2EiLCJYaSIsIlBzaSIsIlpldGEiLCJicmFja2V0bGVmdCIsInRoZXJlZm9yZSIsImJyYWNrZXRyaWdodCIsInBlcnBlbmRpY3VsYXIiLCJ1bmRlcnNjb3JlIiwicmFkaWNhbGV4IiwiYWxwaGEiLCJiZXRhIiwiY2hpIiwiZGVsdGEiLCJlcHNpbG9uIiwicGhpIiwiZ2FtbWEiLCJldGEiLCJpb3RhIiwicGhpMSIsImthcHBhIiwibGFtYmRhIiwibXUiLCJudSIsIm9taWNyb24iLCJwaSIsInRoZXRhIiwicmhvIiwic2lnbWEiLCJ0YXUiLCJ1cHNpbG9uIiwib21lZ2ExIiwib21lZ2EiLCJ4aSIsInBzaSIsInpldGEiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0Iiwic2ltaWxhciIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkV1cm8iLCJVcHNpbG9uMSIsIm1pbnV0ZSIsImxlc3NlcXVhbCIsImZyYWN0aW9uIiwiaW5maW5pdHkiLCJmbG9yaW4iLCJjbHViIiwiZGlhbW9uZCIsImhlYXJ0Iiwic3BhZGUiLCJhcnJvd2JvdGgiLCJhcnJvd2xlZnQiLCJhcnJvd3VwIiwiYXJyb3dyaWdodCIsImFycm93ZG93biIsImRlZ3JlZSIsInBsdXNtaW51cyIsInNlY29uZCIsImdyZWF0ZXJlcXVhbCIsIm11bHRpcGx5IiwicHJvcG9ydGlvbmFsIiwicGFydGlhbGRpZmYiLCJidWxsZXQiLCJkaXZpZGUiLCJub3RlcXVhbCIsImVxdWl2YWxlbmNlIiwiYXBwcm94ZXF1YWwiLCJlbGxpcHNpcyIsImFycm93dmVydGV4IiwiYXJyb3dob3JpemV4IiwiY2FycmlhZ2VyZXR1cm4iLCJhbGVwaCIsIklmcmFrdHVyIiwiUmZyYWt0dXIiLCJ3ZWllcnN0cmFzcyIsImNpcmNsZW11bHRpcGx5IiwiY2lyY2xlcGx1cyIsImVtcHR5c2V0IiwiaW50ZXJzZWN0aW9uIiwidW5pb24iLCJwcm9wZXJzdXBlcnNldCIsInJlZmxleHN1cGVyc2V0Iiwibm90c3Vic2V0IiwicHJvcGVyc3Vic2V0IiwicmVmbGV4c3Vic2V0IiwiZWxlbWVudCIsIm5vdGVsZW1lbnQiLCJhbmdsZSIsImdyYWRpZW50IiwicmVnaXN0ZXJzZXJpZiIsImNvcHlyaWdodHNlcmlmIiwidHJhZGVtYXJrc2VyaWYiLCJwcm9kdWN0IiwicmFkaWNhbCIsImRvdG1hdGgiLCJsb2dpY2Fsbm90IiwibG9naWNhbGFuZCIsImxvZ2ljYWxvciIsImFycm93ZGJsYm90aCIsImFycm93ZGJsbGVmdCIsImFycm93ZGJsdXAiLCJhcnJvd2RibHJpZ2h0IiwiYXJyb3dkYmxkb3duIiwibG96ZW5nZSIsImFuZ2xlbGVmdCIsInJlZ2lzdGVyc2FucyIsImNvcHlyaWdodHNhbnMiLCJ0cmFkZW1hcmtzYW5zIiwic3VtbWF0aW9uIiwicGFyZW5sZWZ0dHAiLCJwYXJlbmxlZnRleCIsInBhcmVubGVmdGJ0IiwiYnJhY2tldGxlZnR0cCIsImJyYWNrZXRsZWZ0ZXgiLCJicmFja2V0bGVmdGJ0IiwiYnJhY2VsZWZ0dHAiLCJicmFjZWxlZnRtaWQiLCJicmFjZWxlZnRidCIsImJyYWNlZXgiLCIiLCJhbmdsZXJpZ2h0IiwiaW50ZWdyYWwiLCJpbnRlZ3JhbHRwIiwiaW50ZWdyYWxleCIsImludGVncmFsYnQiLCJwYXJlbnJpZ2h0dHAiLCJwYXJlbnJpZ2h0ZXgiLCJwYXJlbnJpZ2h0YnQiLCJicmFja2V0cmlnaHR0cCIsImJyYWNrZXRyaWdodGV4IiwiYnJhY2tldHJpZ2h0YnQiLCJicmFjZXJpZ2h0dHAiLCJicmFjZXJpZ2h0bWlkIiwiYnJhY2VyaWdodGJ0IiwiIl07dC5TeW1ib2xTZXRFbmNvZGluZz1vO2NvbnN0IGM9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImExIiwiYTIiLCJhMjAyIiwiYTMiLCJhNCIsImE1IiwiYTExOSIsImExMTgiLCJhMTE3IiwiYTExIiwiYTEyIiwiYTEzIiwiYTE0IiwiYTE1IiwiYTE2IiwiYTEwNSIsImExNyIsImExOCIsImExOSIsImEyMCIsImEyMSIsImEyMiIsImEyMyIsImEyNCIsImEyNSIsImEyNiIsImEyNyIsImEyOCIsImE2IiwiYTciLCJhOCIsImE5IiwiYTEwIiwiYTI5IiwiYTMwIiwiYTMxIiwiYTMyIiwiYTMzIiwiYTM0IiwiYTM1IiwiYTM2IiwiYTM3IiwiYTM4IiwiYTM5IiwiYTQwIiwiYTQxIiwiYTQyIiwiYTQzIiwiYTQ0IiwiYTQ1IiwiYTQ2IiwiYTQ3IiwiYTQ4IiwiYTQ5IiwiYTUwIiwiYTUxIiwiYTUyIiwiYTUzIiwiYTU0IiwiYTU1IiwiYTU2IiwiYTU3IiwiYTU4IiwiYTU5IiwiYTYwIiwiYTYxIiwiYTYyIiwiYTYzIiwiYTY0IiwiYTY1IiwiYTY2IiwiYTY3IiwiYTY4IiwiYTY5IiwiYTcwIiwiYTcxIiwiYTcyIiwiYTczIiwiYTc0IiwiYTIwMyIsImE3NSIsImEyMDQiLCJhNzYiLCJhNzciLCJhNzgiLCJhNzkiLCJhODEiLCJhODIiLCJhODMiLCJhODQiLCJhOTciLCJhOTgiLCJhOTkiLCJhMTAwIiwiIiwiYTg5IiwiYTkwIiwiYTkzIiwiYTk0IiwiYTkxIiwiYTkyIiwiYTIwNSIsImE4NSIsImEyMDYiLCJhODYiLCJhODciLCJhODgiLCJhOTUiLCJhOTYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJhMTAxIiwiYTEwMiIsImExMDMiLCJhMTA0IiwiYTEwNiIsImExMDciLCJhMTA4IiwiYTExMiIsImExMTEiLCJhMTEwIiwiYTEwOSIsImExMjAiLCJhMTIxIiwiYTEyMiIsImExMjMiLCJhMTI0IiwiYTEyNSIsImExMjYiLCJhMTI3IiwiYTEyOCIsImExMjkiLCJhMTMwIiwiYTEzMSIsImExMzIiLCJhMTMzIiwiYTEzNCIsImExMzUiLCJhMTM2IiwiYTEzNyIsImExMzgiLCJhMTM5IiwiYTE0MCIsImExNDEiLCJhMTQyIiwiYTE0MyIsImExNDQiLCJhMTQ1IiwiYTE0NiIsImExNDciLCJhMTQ4IiwiYTE0OSIsImExNTAiLCJhMTUxIiwiYTE1MiIsImExNTMiLCJhMTU0IiwiYTE1NSIsImExNTYiLCJhMTU3IiwiYTE1OCIsImExNTkiLCJhMTYwIiwiYTE2MSIsImExNjMiLCJhMTY0IiwiYTE5NiIsImExNjUiLCJhMTkyIiwiYTE2NiIsImExNjciLCJhMTY4IiwiYTE2OSIsImExNzAiLCJhMTcxIiwiYTE3MiIsImExNzMiLCJhMTYyIiwiYTE3NCIsImExNzUiLCJhMTc2IiwiYTE3NyIsImExNzgiLCJhMTc5IiwiYTE5MyIsImExODAiLCJhMTk5IiwiYTE4MSIsImEyMDAiLCJhMTgyIiwiIiwiYTIwMSIsImExODMiLCJhMTg0IiwiYTE5NyIsImExODUiLCJhMTk0IiwiYTE5OCIsImExODYiLCJhMTk1IiwiYTE4NyIsImExODgiLCJhMTg5IiwiYTE5MCIsImExOTEiLCIiXTt0LlphcGZEaW5nYmF0c0VuY29kaW5nPWN9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9dC5NYWNTdGFuZGFyZEdseXBoT3JkZXJpbmc9dC5Gb250RmxhZ3M9dm9pZCAwO3Qubm9ybWFsaXplRm9udE5hbWU9ZnVuY3Rpb24gbm9ybWFsaXplRm9udE5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvWyxfXS9nLCItIikucmVwbGFjZUFsbCgvXHMvZywiIil9O3QucmVjb3ZlckdseXBoTmFtZT1yZWNvdmVyR2x5cGhOYW1lO3QudHlwZTFGb250R2x5cGhNYXBwaW5nPWZ1bmN0aW9uIHR5cGUxRm9udEdseXBoTWFwcGluZyhlLHQsYSl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBzLGMsbDtjb25zdCBoPSEhKGUuZmxhZ3Mmby5TeW1ib2xpYyk7aWYoZS5pc0ludGVybmFsRm9udCl7bD10O2ZvcihjPTA7YzxsLmxlbmd0aDtjKyspe3M9YS5pbmRleE9mKGxbY10pO2lbY109cz49MD9zOjB9fWVsc2UgaWYoZS5iYXNlRW5jb2RpbmdOYW1lKXtsPSgwLHIuZ2V0RW5jb2RpbmcpKGUuYmFzZUVuY29kaW5nTmFtZSk7Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl7cz1hLmluZGV4T2YobFtjXSk7aVtjXT1zPj0wP3M6MH19ZWxzZSBpZihoKWZvcihjIGluIHQpaVtjXT10W2NdO2Vsc2V7bD1yLlN0YW5kYXJkRW5jb2Rpbmc7Zm9yKGM9MDtjPGwubGVuZ3RoO2MrKyl7cz1hLmluZGV4T2YobFtjXSk7aVtjXT1zPj0wP3M6MH19Y29uc3QgdT1lLmRpZmZlcmVuY2VzO2xldCBkO2lmKHUpZm9yKGMgaW4gdSl7Y29uc3QgZT11W2NdO3M9YS5pbmRleE9mKGUpO2lmKC0xPT09cyl7ZHx8KGQ9KDAsbi5nZXRHbHlwaHNVbmljb2RlKSgpKTtjb25zdCB0PXJlY292ZXJHbHlwaE5hbWUoZSxkKTt0IT09ZSYmKHM9YS5pbmRleE9mKHQpKX1pW2NdPXM+PTA/czowfXJldHVybiBpfTthKDE1OCk7dmFyIHI9YSgxODgpLG49YSgxOTApLGk9YSgxOTEpLHM9YSgxNDUpO3QuU0VBQ19BTkFMWVNJU19FTkFCTEVEPSEwO2NvbnN0IG89e0ZpeGVkUGl0Y2g6MSxTZXJpZjoyLFN5bWJvbGljOjQsU2NyaXB0OjgsTm9uc3ltYm9saWM6MzIsSXRhbGljOjY0LEFsbENhcDo2NTUzNixTbWFsbENhcDoxMzEwNzIsRm9yY2VCb2xkOjI2MjE0NH07dC5Gb250RmxhZ3M9bzt0Lk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZz1bIi5ub3RkZWYiLCIubnVsbCIsIm5vbm1hcmtpbmdyZXR1cm4iLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsIm5vbmJyZWFraW5nc3BhY2UiLCJBZ3JhdmUiLCJBdGlsZGUiLCJPdGlsZGUiLCJPRSIsIm9lIiwiZW5kYXNoIiwiZW1kYXNoIiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJkaXZpZGUiLCJsb3plbmdlIiwieWRpZXJlc2lzIiwiWWRpZXJlc2lzIiwiZnJhY3Rpb24iLCJjdXJyZW5jeSIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicGVydGhvdXNhbmQiLCJBY2lyY3VtZmxleCIsIkVjaXJjdW1mbGV4IiwiQWFjdXRlIiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsImFwcGxlIiwiT2dyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZ3JhdmUiLCJkb3RsZXNzaSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsIkxzbGFzaCIsImxzbGFzaCIsIlNjYXJvbiIsInNjYXJvbiIsIlpjYXJvbiIsInpjYXJvbiIsImJyb2tlbmJhciIsIkV0aCIsImV0aCIsIllhY3V0ZSIsInlhY3V0ZSIsIlRob3JuIiwidGhvcm4iLCJtaW51cyIsIm11bHRpcGx5Iiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJvbmVoYWxmIiwib25lcXVhcnRlciIsInRocmVlcXVhcnRlcnMiLCJmcmFuYyIsIkdicmV2ZSIsImdicmV2ZSIsIklkb3RhY2NlbnQiLCJTY2VkaWxsYSIsInNjZWRpbGxhIiwiQ2FjdXRlIiwiY2FjdXRlIiwiQ2Nhcm9uIiwiY2Nhcm9uIiwiZGNyb2F0Il07ZnVuY3Rpb24gcmVjb3ZlckdseXBoTmFtZShlLHQpe2lmKHZvaWQgMCE9PXRbZV0pcmV0dXJuIGU7Y29uc3QgYT0oMCxpLmdldFVuaWNvZGVGb3JHbHlwaCkoZSx0KTtpZigtMSE9PWEpZm9yKGNvbnN0IGUgaW4gdClpZih0W2VdPT09YSlyZXR1cm4gZTsoMCxzLmluZm8pKCJVbmFibGUgdG8gcmVjb3ZlciBhIHN0YW5kYXJkIGdseXBoIG5hbWUgZm9yOiAiK2UpO3JldHVybiBlfX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmdldEdseXBoc1VuaWNvZGU9dC5nZXREaW5nYmF0c0dseXBoc1VuaWNvZGU9dm9pZCAwO3ZhciByPWEoMTUwKTtjb25zdCBuPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5BPTY1O2UuQUU9MTk4O2UuQUVhY3V0ZT01MDg7ZS5BRW1hY3Jvbj00ODI7ZS5BRXNtYWxsPTYzNDYyO2UuQWFjdXRlPTE5MztlLkFhY3V0ZXNtYWxsPTYzNDU3O2UuQWJyZXZlPTI1ODtlLkFicmV2ZWFjdXRlPTc4NTQ7ZS5BYnJldmVjeXJpbGxpYz0xMjMyO2UuQWJyZXZlZG90YmVsb3c9Nzg2MjtlLkFicmV2ZWdyYXZlPTc4NTY7ZS5BYnJldmVob29rYWJvdmU9Nzg1ODtlLkFicmV2ZXRpbGRlPTc4NjA7ZS5BY2Fyb249NDYxO2UuQWNpcmNsZT05Mzk4O2UuQWNpcmN1bWZsZXg9MTk0O2UuQWNpcmN1bWZsZXhhY3V0ZT03ODQ0O2UuQWNpcmN1bWZsZXhkb3RiZWxvdz03ODUyO2UuQWNpcmN1bWZsZXhncmF2ZT03ODQ2O2UuQWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0ODtlLkFjaXJjdW1mbGV4c21hbGw9NjM0NTg7ZS5BY2lyY3VtZmxleHRpbGRlPTc4NTA7ZS5BY3V0ZT02MzE3NztlLkFjdXRlc21hbGw9NjM0MTI7ZS5BY3lyaWxsaWM9MTA0MDtlLkFkYmxncmF2ZT01MTI7ZS5BZGllcmVzaXM9MTk2O2UuQWRpZXJlc2lzY3lyaWxsaWM9MTIzNDtlLkFkaWVyZXNpc21hY3Jvbj00Nzg7ZS5BZGllcmVzaXNzbWFsbD02MzQ2MDtlLkFkb3RiZWxvdz03ODQwO2UuQWRvdG1hY3Jvbj00ODA7ZS5BZ3JhdmU9MTkyO2UuQWdyYXZlc21hbGw9NjM0NTY7ZS5BaG9va2Fib3ZlPTc4NDI7ZS5BaWVjeXJpbGxpYz0xMjM2O2UuQWludmVydGVkYnJldmU9NTE0O2UuQWxwaGE9OTEzO2UuQWxwaGF0b25vcz05MDI7ZS5BbWFjcm9uPTI1NjtlLkFtb25vc3BhY2U9NjUzMTM7ZS5Bb2dvbmVrPTI2MDtlLkFyaW5nPTE5NztlLkFyaW5nYWN1dGU9NTA2O2UuQXJpbmdiZWxvdz03NjgwO2UuQXJpbmdzbWFsbD02MzQ2MTtlLkFzbWFsbD02MzMyOTtlLkF0aWxkZT0xOTU7ZS5BdGlsZGVzbWFsbD02MzQ1OTtlLkF5YmFybWVuaWFuPTEzMjk7ZS5CPTY2O2UuQmNpcmNsZT05Mzk5O2UuQmRvdGFjY2VudD03NjgyO2UuQmRvdGJlbG93PTc2ODQ7ZS5CZWN5cmlsbGljPTEwNDE7ZS5CZW5hcm1lbmlhbj0xMzMwO2UuQmV0YT05MTQ7ZS5CaG9vaz0zODU7ZS5CbGluZWJlbG93PTc2ODY7ZS5CbW9ub3NwYWNlPTY1MzE0O2UuQnJldmVzbWFsbD02MzIyMDtlLkJzbWFsbD02MzMzMDtlLkJ0b3BiYXI9Mzg2O2UuQz02NztlLkNhYXJtZW5pYW49MTM0MjtlLkNhY3V0ZT0yNjI7ZS5DYXJvbj02MzE3ODtlLkNhcm9uc21hbGw9NjMyMjE7ZS5DY2Fyb249MjY4O2UuQ2NlZGlsbGE9MTk5O2UuQ2NlZGlsbGFhY3V0ZT03Njg4O2UuQ2NlZGlsbGFzbWFsbD02MzQ2MztlLkNjaXJjbGU9OTQwMDtlLkNjaXJjdW1mbGV4PTI2NDtlLkNkb3Q9MjY2O2UuQ2RvdGFjY2VudD0yNjY7ZS5DZWRpbGxhc21hbGw9NjM0MTY7ZS5DaGFhcm1lbmlhbj0xMzUzO2UuQ2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMjtlLkNoZWN5cmlsbGljPTEwNjM7ZS5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE0O2UuQ2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNjtlLkNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2ODtlLkNoZWhhcm1lbmlhbj0xMzQ3O2UuQ2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjc7ZS5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDg7ZS5DaGk9OTM1O2UuQ2hvb2s9MzkxO2UuQ2lyY3VtZmxleHNtYWxsPTYzMjIyO2UuQ21vbm9zcGFjZT02NTMxNTtlLkNvYXJtZW5pYW49MTM2MTtlLkNzbWFsbD02MzMzMTtlLkQ9Njg7ZS5EWj00OTc7ZS5EWmNhcm9uPTQ1MjtlLkRhYXJtZW5pYW49MTMzMjtlLkRhZnJpY2FuPTM5MztlLkRjYXJvbj0yNzA7ZS5EY2VkaWxsYT03Njk2O2UuRGNpcmNsZT05NDAxO2UuRGNpcmN1bWZsZXhiZWxvdz03Njk4O2UuRGNyb2F0PTI3MjtlLkRkb3RhY2NlbnQ9NzY5MDtlLkRkb3RiZWxvdz03NjkyO2UuRGVjeXJpbGxpYz0xMDQ0O2UuRGVpY29wdGljPTEwMDY7ZS5EZWx0YT04NzEwO2UuRGVsdGFncmVlaz05MTY7ZS5EaG9vaz0zOTQ7ZS5EaWVyZXNpcz02MzE3OTtlLkRpZXJlc2lzQWN1dGU9NjMxODA7ZS5EaWVyZXNpc0dyYXZlPTYzMTgxO2UuRGllcmVzaXNzbWFsbD02MzQwMDtlLkRpZ2FtbWFncmVlaz05ODg7ZS5EamVjeXJpbGxpYz0xMDI2O2UuRGxpbmViZWxvdz03Njk0O2UuRG1vbm9zcGFjZT02NTMxNjtlLkRvdGFjY2VudHNtYWxsPTYzMjIzO2UuRHNsYXNoPTI3MjtlLkRzbWFsbD02MzMzMjtlLkR0b3BiYXI9Mzk1O2UuRHo9NDk4O2UuRHpjYXJvbj00NTM7ZS5EemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ4O2UuRHplY3lyaWxsaWM9MTAyOTtlLkR6aGVjeXJpbGxpYz0xMDM5O2UuRT02OTtlLkVhY3V0ZT0yMDE7ZS5FYWN1dGVzbWFsbD02MzQ2NTtlLkVicmV2ZT0yNzY7ZS5FY2Fyb249MjgyO2UuRWNlZGlsbGFicmV2ZT03NzA4O2UuRWNoYXJtZW5pYW49MTMzMztlLkVjaXJjbGU9OTQwMjtlLkVjaXJjdW1mbGV4PTIwMjtlLkVjaXJjdW1mbGV4YWN1dGU9Nzg3MDtlLkVjaXJjdW1mbGV4YmVsb3c9NzcwNDtlLkVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3ODtlLkVjaXJjdW1mbGV4Z3JhdmU9Nzg3MjtlLkVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzQ7ZS5FY2lyY3VtZmxleHNtYWxsPTYzNDY2O2UuRWNpcmN1bWZsZXh0aWxkZT03ODc2O2UuRWN5cmlsbGljPTEwMjg7ZS5FZGJsZ3JhdmU9NTE2O2UuRWRpZXJlc2lzPTIwMztlLkVkaWVyZXNpc3NtYWxsPTYzNDY3O2UuRWRvdD0yNzg7ZS5FZG90YWNjZW50PTI3ODtlLkVkb3RiZWxvdz03ODY0O2UuRWZjeXJpbGxpYz0xMDYwO2UuRWdyYXZlPTIwMDtlLkVncmF2ZXNtYWxsPTYzNDY0O2UuRWhhcm1lbmlhbj0xMzM1O2UuRWhvb2thYm92ZT03ODY2O2UuRWlnaHRyb21hbj04NTUxO2UuRWludmVydGVkYnJldmU9NTE4O2UuRWlvdGlmaWVkY3lyaWxsaWM9MTEyNDtlLkVsY3lyaWxsaWM9MTA1MTtlLkVsZXZlbnJvbWFuPTg1NTQ7ZS5FbWFjcm9uPTI3NDtlLkVtYWNyb25hY3V0ZT03NzAyO2UuRW1hY3JvbmdyYXZlPTc3MDA7ZS5FbWN5cmlsbGljPTEwNTI7ZS5FbW9ub3NwYWNlPTY1MzE3O2UuRW5jeXJpbGxpYz0xMDUzO2UuRW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg2O2UuRW5nPTMzMDtlLkVuZ2hlY3lyaWxsaWM9MTE4ODtlLkVuaG9va2N5cmlsbGljPTEyMjM7ZS5Fb2dvbmVrPTI4MDtlLkVvcGVuPTQwMDtlLkVwc2lsb249OTE3O2UuRXBzaWxvbnRvbm9zPTkwNDtlLkVyY3lyaWxsaWM9MTA1NjtlLkVyZXZlcnNlZD0zOTg7ZS5FcmV2ZXJzZWRjeXJpbGxpYz0xMDY5O2UuRXNjeXJpbGxpYz0xMDU3O2UuRXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk0O2UuRXNoPTQyNTtlLkVzbWFsbD02MzMzMztlLkV0YT05MTk7ZS5FdGFybWVuaWFuPTEzMzY7ZS5FdGF0b25vcz05MDU7ZS5FdGg9MjA4O2UuRXRoc21hbGw9NjM0NzI7ZS5FdGlsZGU9Nzg2ODtlLkV0aWxkZWJlbG93PTc3MDY7ZS5FdXJvPTgzNjQ7ZS5Femg9NDM5O2UuRXpoY2Fyb249NDk0O2UuRXpocmV2ZXJzZWQ9NDQwO2UuRj03MDtlLkZjaXJjbGU9OTQwMztlLkZkb3RhY2NlbnQ9NzcxMDtlLkZlaGFybWVuaWFuPTEzNjY7ZS5GZWljb3B0aWM9OTk2O2UuRmhvb2s9NDAxO2UuRml0YWN5cmlsbGljPTExMzg7ZS5GaXZlcm9tYW49ODU0ODtlLkZtb25vc3BhY2U9NjUzMTg7ZS5Gb3Vycm9tYW49ODU0NztlLkZzbWFsbD02MzMzNDtlLkc9NzE7ZS5HQnNxdWFyZT0xMzE5MTtlLkdhY3V0ZT01MDA7ZS5HYW1tYT05MTU7ZS5HYW1tYWFmcmljYW49NDA0O2UuR2FuZ2lhY29wdGljPTEwMDI7ZS5HYnJldmU9Mjg2O2UuR2Nhcm9uPTQ4NjtlLkdjZWRpbGxhPTI5MDtlLkdjaXJjbGU9OTQwNDtlLkdjaXJjdW1mbGV4PTI4NDtlLkdjb21tYWFjY2VudD0yOTA7ZS5HZG90PTI4ODtlLkdkb3RhY2NlbnQ9Mjg4O2UuR2VjeXJpbGxpYz0xMDQzO2UuR2hhZGFybWVuaWFuPTEzNDY7ZS5HaGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MjtlLkdoZXN0cm9rZWN5cmlsbGljPTExNzA7ZS5HaGV1cHR1cm5jeXJpbGxpYz0xMTY4O2UuR2hvb2s9NDAzO2UuR2ltYXJtZW5pYW49MTMzMTtlLkdqZWN5cmlsbGljPTEwMjc7ZS5HbWFjcm9uPTc3MTI7ZS5HbW9ub3NwYWNlPTY1MzE5O2UuR3JhdmU9NjMxODI7ZS5HcmF2ZXNtYWxsPTYzMzI4O2UuR3NtYWxsPTYzMzM1O2UuR3NtYWxsaG9vaz02Njc7ZS5Hc3Ryb2tlPTQ4NDtlLkg9NzI7ZS5IMTg1MzM9OTY3OTtlLkgxODU0Mz05NjQyO2UuSDE4NTUxPTk2NDM7ZS5IMjIwNzM9OTYzMztlLkhQc3F1YXJlPTEzMjU5O2UuSGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkyO2UuSGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAyO2UuSGFyZHNpZ25jeXJpbGxpYz0xMDY2O2UuSGJhcj0yOTQ7ZS5IYnJldmViZWxvdz03NzIyO2UuSGNlZGlsbGE9NzcyMDtlLkhjaXJjbGU9OTQwNTtlLkhjaXJjdW1mbGV4PTI5MjtlLkhkaWVyZXNpcz03NzE4O2UuSGRvdGFjY2VudD03NzE0O2UuSGRvdGJlbG93PTc3MTY7ZS5IbW9ub3NwYWNlPTY1MzIwO2UuSG9hcm1lbmlhbj0xMzQ0O2UuSG9yaWNvcHRpYz0xZTM7ZS5Ic21hbGw9NjMzMzY7ZS5IdW5nYXJ1bWxhdXQ9NjMxODM7ZS5IdW5nYXJ1bWxhdXRzbWFsbD02MzIyNDtlLkh6c3F1YXJlPTEzMjAwO2UuST03MztlLklBY3lyaWxsaWM9MTA3MTtlLklKPTMwNjtlLklVY3lyaWxsaWM9MTA3MDtlLklhY3V0ZT0yMDU7ZS5JYWN1dGVzbWFsbD02MzQ2OTtlLklicmV2ZT0zMDA7ZS5JY2Fyb249NDYzO2UuSWNpcmNsZT05NDA2O2UuSWNpcmN1bWZsZXg9MjA2O2UuSWNpcmN1bWZsZXhzbWFsbD02MzQ3MDtlLkljeXJpbGxpYz0xMDMwO2UuSWRibGdyYXZlPTUyMDtlLklkaWVyZXNpcz0yMDc7ZS5JZGllcmVzaXNhY3V0ZT03NzI2O2UuSWRpZXJlc2lzY3lyaWxsaWM9MTI1MjtlLklkaWVyZXNpc3NtYWxsPTYzNDcxO2UuSWRvdD0zMDQ7ZS5JZG90YWNjZW50PTMwNDtlLklkb3RiZWxvdz03ODgyO2UuSWVicmV2ZWN5cmlsbGljPTEyMzg7ZS5JZWN5cmlsbGljPTEwNDU7ZS5JZnJha3R1cj04NDY1O2UuSWdyYXZlPTIwNDtlLklncmF2ZXNtYWxsPTYzNDY4O2UuSWhvb2thYm92ZT03ODgwO2UuSWljeXJpbGxpYz0xMDQ4O2UuSWludmVydGVkYnJldmU9NTIyO2UuSWlzaG9ydGN5cmlsbGljPTEwNDk7ZS5JbWFjcm9uPTI5ODtlLkltYWNyb25jeXJpbGxpYz0xMjUwO2UuSW1vbm9zcGFjZT02NTMyMTtlLkluaWFybWVuaWFuPTEzMzk7ZS5Jb2N5cmlsbGljPTEwMjU7ZS5Jb2dvbmVrPTMwMjtlLklvdGE9OTIxO2UuSW90YWFmcmljYW49NDA2O2UuSW90YWRpZXJlc2lzPTkzODtlLklvdGF0b25vcz05MDY7ZS5Jc21hbGw9NjMzMzc7ZS5Jc3Ryb2tlPTQwNztlLkl0aWxkZT0yOTY7ZS5JdGlsZGViZWxvdz03NzI0O2UuSXpoaXRzYWN5cmlsbGljPTExNDA7ZS5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQyO2UuSj03NDtlLkphYXJtZW5pYW49MTM0NTtlLkpjaXJjbGU9OTQwNztlLkpjaXJjdW1mbGV4PTMwODtlLkplY3lyaWxsaWM9MTAzMjtlLkpoZWhhcm1lbmlhbj0xMzU1O2UuSm1vbm9zcGFjZT02NTMyMjtlLkpzbWFsbD02MzMzODtlLks9NzU7ZS5LQnNxdWFyZT0xMzE4OTtlLktLc3F1YXJlPTEzMjYxO2UuS2FiYXNoa2lyY3lyaWxsaWM9MTE4NDtlLkthY3V0ZT03NzI4O2UuS2FjeXJpbGxpYz0xMDUwO2UuS2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc4O2UuS2Fob29rY3lyaWxsaWM9MTIxOTtlLkthcHBhPTkyMjtlLkthc3Ryb2tlY3lyaWxsaWM9MTE4MjtlLkthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgwO2UuS2Nhcm9uPTQ4ODtlLktjZWRpbGxhPTMxMDtlLktjaXJjbGU9OTQwODtlLktjb21tYWFjY2VudD0zMTA7ZS5LZG90YmVsb3c9NzczMDtlLktlaGFybWVuaWFuPTEzNjQ7ZS5LZW5hcm1lbmlhbj0xMzQzO2UuS2hhY3lyaWxsaWM9MTA2MTtlLktoZWljb3B0aWM9OTk4O2UuS2hvb2s9NDA4O2UuS2plY3lyaWxsaWM9MTAzNjtlLktsaW5lYmVsb3c9NzczMjtlLkttb25vc3BhY2U9NjUzMjM7ZS5Lb3BwYWN5cmlsbGljPTExNTI7ZS5Lb3BwYWdyZWVrPTk5MDtlLktzaWN5cmlsbGljPTExMzQ7ZS5Lc21hbGw9NjMzMzk7ZS5MPTc2O2UuTEo9NDU1O2UuTEw9NjMxNjc7ZS5MYWN1dGU9MzEzO2UuTGFtYmRhPTkyMztlLkxjYXJvbj0zMTc7ZS5MY2VkaWxsYT0zMTU7ZS5MY2lyY2xlPTk0MDk7ZS5MY2lyY3VtZmxleGJlbG93PTc3NDA7ZS5MY29tbWFhY2NlbnQ9MzE1O2UuTGRvdD0zMTk7ZS5MZG90YWNjZW50PTMxOTtlLkxkb3RiZWxvdz03NzM0O2UuTGRvdGJlbG93bWFjcm9uPTc3MzY7ZS5MaXduYXJtZW5pYW49MTM0MDtlLkxqPTQ1NjtlLkxqZWN5cmlsbGljPTEwMzM7ZS5MbGluZWJlbG93PTc3Mzg7ZS5MbW9ub3NwYWNlPTY1MzI0O2UuTHNsYXNoPTMyMTtlLkxzbGFzaHNtYWxsPTYzMjI1O2UuTHNtYWxsPTYzMzQwO2UuTT03NztlLk1Cc3F1YXJlPTEzMTkwO2UuTWFjcm9uPTYzMTg0O2UuTWFjcm9uc21hbGw9NjM0MDc7ZS5NYWN1dGU9Nzc0MjtlLk1jaXJjbGU9OTQxMDtlLk1kb3RhY2NlbnQ9Nzc0NDtlLk1kb3RiZWxvdz03NzQ2O2UuTWVuYXJtZW5pYW49MTM0ODtlLk1tb25vc3BhY2U9NjUzMjU7ZS5Nc21hbGw9NjMzNDE7ZS5NdHVybmVkPTQxMjtlLk11PTkyNDtlLk49Nzg7ZS5OSj00NTg7ZS5OYWN1dGU9MzIzO2UuTmNhcm9uPTMyNztlLk5jZWRpbGxhPTMyNTtlLk5jaXJjbGU9OTQxMTtlLk5jaXJjdW1mbGV4YmVsb3c9Nzc1NDtlLk5jb21tYWFjY2VudD0zMjU7ZS5OZG90YWNjZW50PTc3NDg7ZS5OZG90YmVsb3c9Nzc1MDtlLk5ob29rbGVmdD00MTM7ZS5OaW5lcm9tYW49ODU1MjtlLk5qPTQ1OTtlLk5qZWN5cmlsbGljPTEwMzQ7ZS5ObGluZWJlbG93PTc3NTI7ZS5ObW9ub3NwYWNlPTY1MzI2O2UuTm93YXJtZW5pYW49MTM1MDtlLk5zbWFsbD02MzM0MjtlLk50aWxkZT0yMDk7ZS5OdGlsZGVzbWFsbD02MzQ3MztlLk51PTkyNTtlLk89Nzk7ZS5PRT0zMzg7ZS5PRXNtYWxsPTYzMjI2O2UuT2FjdXRlPTIxMTtlLk9hY3V0ZXNtYWxsPTYzNDc1O2UuT2JhcnJlZGN5cmlsbGljPTEyNTY7ZS5PYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU4O2UuT2JyZXZlPTMzNDtlLk9jYXJvbj00NjU7ZS5PY2VudGVyZWR0aWxkZT00MTU7ZS5PY2lyY2xlPTk0MTI7ZS5PY2lyY3VtZmxleD0yMTI7ZS5PY2lyY3VtZmxleGFjdXRlPTc4ODg7ZS5PY2lyY3VtZmxleGRvdGJlbG93PTc4OTY7ZS5PY2lyY3VtZmxleGdyYXZlPTc4OTA7ZS5PY2lyY3VtZmxleGhvb2thYm92ZT03ODkyO2UuT2NpcmN1bWZsZXhzbWFsbD02MzQ3NjtlLk9jaXJjdW1mbGV4dGlsZGU9Nzg5NDtlLk9jeXJpbGxpYz0xMDU0O2UuT2RibGFjdXRlPTMzNjtlLk9kYmxncmF2ZT01MjQ7ZS5PZGllcmVzaXM9MjE0O2UuT2RpZXJlc2lzY3lyaWxsaWM9MTI1NDtlLk9kaWVyZXNpc3NtYWxsPTYzNDc4O2UuT2RvdGJlbG93PTc4ODQ7ZS5PZ29uZWtzbWFsbD02MzIyNztlLk9ncmF2ZT0yMTA7ZS5PZ3JhdmVzbWFsbD02MzQ3NDtlLk9oYXJtZW5pYW49MTM2NTtlLk9obT04NDg2O2UuT2hvb2thYm92ZT03ODg2O2UuT2hvcm49NDE2O2UuT2hvcm5hY3V0ZT03ODk4O2UuT2hvcm5kb3RiZWxvdz03OTA2O2UuT2hvcm5ncmF2ZT03OTAwO2UuT2hvcm5ob29rYWJvdmU9NzkwMjtlLk9ob3JudGlsZGU9NzkwNDtlLk9odW5nYXJ1bWxhdXQ9MzM2O2UuT2k9NDE4O2UuT2ludmVydGVkYnJldmU9NTI2O2UuT21hY3Jvbj0zMzI7ZS5PbWFjcm9uYWN1dGU9Nzc2MjtlLk9tYWNyb25ncmF2ZT03NzYwO2UuT21lZ2E9ODQ4NjtlLk9tZWdhY3lyaWxsaWM9MTEyMDtlLk9tZWdhZ3JlZWs9OTM3O2UuT21lZ2Fyb3VuZGN5cmlsbGljPTExNDY7ZS5PbWVnYXRpdGxvY3lyaWxsaWM9MTE0ODtlLk9tZWdhdG9ub3M9OTExO2UuT21pY3Jvbj05Mjc7ZS5PbWljcm9udG9ub3M9OTA4O2UuT21vbm9zcGFjZT02NTMyNztlLk9uZXJvbWFuPTg1NDQ7ZS5Pb2dvbmVrPTQ5MDtlLk9vZ29uZWttYWNyb249NDkyO2UuT29wZW49MzkwO2UuT3NsYXNoPTIxNjtlLk9zbGFzaGFjdXRlPTUxMDtlLk9zbGFzaHNtYWxsPTYzNDgwO2UuT3NtYWxsPTYzMzQzO2UuT3N0cm9rZWFjdXRlPTUxMDtlLk90Y3lyaWxsaWM9MTE1MDtlLk90aWxkZT0yMTM7ZS5PdGlsZGVhY3V0ZT03NzU2O2UuT3RpbGRlZGllcmVzaXM9Nzc1ODtlLk90aWxkZXNtYWxsPTYzNDc3O2UuUD04MDtlLlBhY3V0ZT03NzY0O2UuUGNpcmNsZT05NDEzO2UuUGRvdGFjY2VudD03NzY2O2UuUGVjeXJpbGxpYz0xMDU1O2UuUGVoYXJtZW5pYW49MTM1NDtlLlBlbWlkZGxlaG9va2N5cmlsbGljPTExOTA7ZS5QaGk9OTM0O2UuUGhvb2s9NDIwO2UuUGk9OTI4O2UuUGl3cmFybWVuaWFuPTEzNjM7ZS5QbW9ub3NwYWNlPTY1MzI4O2UuUHNpPTkzNjtlLlBzaWN5cmlsbGljPTExMzY7ZS5Qc21hbGw9NjMzNDQ7ZS5RPTgxO2UuUWNpcmNsZT05NDE0O2UuUW1vbm9zcGFjZT02NTMyOTtlLlFzbWFsbD02MzM0NTtlLlI9ODI7ZS5SYWFybWVuaWFuPTEzNTY7ZS5SYWN1dGU9MzQwO2UuUmNhcm9uPTM0NDtlLlJjZWRpbGxhPTM0MjtlLlJjaXJjbGU9OTQxNTtlLlJjb21tYWFjY2VudD0zNDI7ZS5SZGJsZ3JhdmU9NTI4O2UuUmRvdGFjY2VudD03NzY4O2UuUmRvdGJlbG93PTc3NzA7ZS5SZG90YmVsb3dtYWNyb249Nzc3MjtlLlJlaGFybWVuaWFuPTEzNjA7ZS5SZnJha3R1cj04NDc2O2UuUmhvPTkyOTtlLlJpbmdzbWFsbD02MzIyODtlLlJpbnZlcnRlZGJyZXZlPTUzMDtlLlJsaW5lYmVsb3c9Nzc3NDtlLlJtb25vc3BhY2U9NjUzMzA7ZS5Sc21hbGw9NjMzNDY7ZS5Sc21hbGxpbnZlcnRlZD02NDE7ZS5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yPTY5NDtlLlM9ODM7ZS5TRjAxMDAwMD05NDg0O2UuU0YwMjAwMDA9OTQ5MjtlLlNGMDMwMDAwPTk0ODg7ZS5TRjA0MDAwMD05NDk2O2UuU0YwNTAwMDA9OTUzMjtlLlNGMDYwMDAwPTk1MTY7ZS5TRjA3MDAwMD05NTI0O2UuU0YwODAwMDA9OTUwMDtlLlNGMDkwMDAwPTk1MDg7ZS5TRjEwMDAwMD05NDcyO2UuU0YxMTAwMDA9OTQ3NDtlLlNGMTkwMDAwPTk1Njk7ZS5TRjIwMDAwMD05NTcwO2UuU0YyMTAwMDA9OTU1ODtlLlNGMjIwMDAwPTk1NTc7ZS5TRjIzMDAwMD05NTcxO2UuU0YyNDAwMDA9OTU1MztlLlNGMjUwMDAwPTk1NTk7ZS5TRjI2MDAwMD05NTY1O2UuU0YyNzAwMDA9OTU2NDtlLlNGMjgwMDAwPTk1NjM7ZS5TRjM2MDAwMD05NTY2O2UuU0YzNzAwMDA9OTU2NztlLlNGMzgwMDAwPTk1NjI7ZS5TRjM5MDAwMD05NTU2O2UuU0Y0MDAwMDA9OTU3NztlLlNGNDEwMDAwPTk1NzQ7ZS5TRjQyMDAwMD05NTY4O2UuU0Y0MzAwMDA9OTU1MjtlLlNGNDQwMDAwPTk1ODA7ZS5TRjQ1MDAwMD05NTc1O2UuU0Y0NjAwMDA9OTU3NjtlLlNGNDcwMDAwPTk1NzI7ZS5TRjQ4MDAwMD05NTczO2UuU0Y0OTAwMDA9OTU2MTtlLlNGNTAwMDAwPTk1NjA7ZS5TRjUxMDAwMD05NTU0O2UuU0Y1MjAwMDA9OTU1NTtlLlNGNTMwMDAwPTk1Nzk7ZS5TRjU0MDAwMD05NTc4O2UuU2FjdXRlPTM0NjtlLlNhY3V0ZWRvdGFjY2VudD03NzgwO2UuU2FtcGlncmVlaz05OTI7ZS5TY2Fyb249MzUyO2UuU2Nhcm9uZG90YWNjZW50PTc3ODI7ZS5TY2Fyb25zbWFsbD02MzIyOTtlLlNjZWRpbGxhPTM1MDtlLlNjaHdhPTM5OTtlLlNjaHdhY3lyaWxsaWM9MTI0MDtlLlNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQyO2UuU2NpcmNsZT05NDE2O2UuU2NpcmN1bWZsZXg9MzQ4O2UuU2NvbW1hYWNjZW50PTUzNjtlLlNkb3RhY2NlbnQ9Nzc3NjtlLlNkb3RiZWxvdz03Nzc4O2UuU2RvdGJlbG93ZG90YWNjZW50PTc3ODQ7ZS5TZWhhcm1lbmlhbj0xMzU3O2UuU2V2ZW5yb21hbj04NTUwO2UuU2hhYXJtZW5pYW49MTM1MTtlLlNoYWN5cmlsbGljPTEwNjQ7ZS5TaGNoYWN5cmlsbGljPTEwNjU7ZS5TaGVpY29wdGljPTk5NDtlLlNoaGFjeXJpbGxpYz0xMjEwO2UuU2hpbWFjb3B0aWM9MTAwNDtlLlNpZ21hPTkzMTtlLlNpeHJvbWFuPTg1NDk7ZS5TbW9ub3NwYWNlPTY1MzMxO2UuU29mdHNpZ25jeXJpbGxpYz0xMDY4O2UuU3NtYWxsPTYzMzQ3O2UuU3RpZ21hZ3JlZWs9OTg2O2UuVD04NDtlLlRhdT05MzI7ZS5UYmFyPTM1ODtlLlRjYXJvbj0zNTY7ZS5UY2VkaWxsYT0zNTQ7ZS5UY2lyY2xlPTk0MTc7ZS5UY2lyY3VtZmxleGJlbG93PTc3OTI7ZS5UY29tbWFhY2NlbnQ9MzU0O2UuVGRvdGFjY2VudD03Nzg2O2UuVGRvdGJlbG93PTc3ODg7ZS5UZWN5cmlsbGljPTEwNTg7ZS5UZWRlc2NlbmRlcmN5cmlsbGljPTExOTY7ZS5UZW5yb21hbj04NTUzO2UuVGV0c2VjeXJpbGxpYz0xMjA0O2UuVGhldGE9OTIwO2UuVGhvb2s9NDI4O2UuVGhvcm49MjIyO2UuVGhvcm5zbWFsbD02MzQ4NjtlLlRocmVlcm9tYW49ODU0NjtlLlRpbGRlc21hbGw9NjMyMzA7ZS5UaXduYXJtZW5pYW49MTM1OTtlLlRsaW5lYmVsb3c9Nzc5MDtlLlRtb25vc3BhY2U9NjUzMzI7ZS5Ub2FybWVuaWFuPTEzMzc7ZS5Ub25lZml2ZT00NDQ7ZS5Ub25lc2l4PTM4ODtlLlRvbmV0d289NDIzO2UuVHJldHJvZmxleGhvb2s9NDMwO2UuVHNlY3lyaWxsaWM9MTA2MjtlLlRzaGVjeXJpbGxpYz0xMDM1O2UuVHNtYWxsPTYzMzQ4O2UuVHdlbHZlcm9tYW49ODU1NTtlLlR3b3JvbWFuPTg1NDU7ZS5VPTg1O2UuVWFjdXRlPTIxODtlLlVhY3V0ZXNtYWxsPTYzNDgyO2UuVWJyZXZlPTM2NDtlLlVjYXJvbj00Njc7ZS5VY2lyY2xlPTk0MTg7ZS5VY2lyY3VtZmxleD0yMTk7ZS5VY2lyY3VtZmxleGJlbG93PTc3OTg7ZS5VY2lyY3VtZmxleHNtYWxsPTYzNDgzO2UuVWN5cmlsbGljPTEwNTk7ZS5VZGJsYWN1dGU9MzY4O2UuVWRibGdyYXZlPTUzMjtlLlVkaWVyZXNpcz0yMjA7ZS5VZGllcmVzaXNhY3V0ZT00NzE7ZS5VZGllcmVzaXNiZWxvdz03Nzk0O2UuVWRpZXJlc2lzY2Fyb249NDczO2UuVWRpZXJlc2lzY3lyaWxsaWM9MTI2NDtlLlVkaWVyZXNpc2dyYXZlPTQ3NTtlLlVkaWVyZXNpc21hY3Jvbj00Njk7ZS5VZGllcmVzaXNzbWFsbD02MzQ4NDtlLlVkb3RiZWxvdz03OTA4O2UuVWdyYXZlPTIxNztlLlVncmF2ZXNtYWxsPTYzNDgxO2UuVWhvb2thYm92ZT03OTEwO2UuVWhvcm49NDMxO2UuVWhvcm5hY3V0ZT03OTEyO2UuVWhvcm5kb3RiZWxvdz03OTIwO2UuVWhvcm5ncmF2ZT03OTE0O2UuVWhvcm5ob29rYWJvdmU9NzkxNjtlLlVob3JudGlsZGU9NzkxODtlLlVodW5nYXJ1bWxhdXQ9MzY4O2UuVWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjY7ZS5VaW52ZXJ0ZWRicmV2ZT01MzQ7ZS5Va2N5cmlsbGljPTExNDQ7ZS5VbWFjcm9uPTM2MjtlLlVtYWNyb25jeXJpbGxpYz0xMjYyO2UuVW1hY3JvbmRpZXJlc2lzPTc4MDI7ZS5VbW9ub3NwYWNlPTY1MzMzO2UuVW9nb25laz0zNzA7ZS5VcHNpbG9uPTkzMztlLlVwc2lsb24xPTk3ODtlLlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVlaz05Nzk7ZS5VcHNpbG9uYWZyaWNhbj00MzM7ZS5VcHNpbG9uZGllcmVzaXM9OTM5O2UuVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrPTk4MDtlLlVwc2lsb25ob29rc3ltYm9sPTk3ODtlLlVwc2lsb250b25vcz05MTA7ZS5VcmluZz0zNjY7ZS5Vc2hvcnRjeXJpbGxpYz0xMDM4O2UuVXNtYWxsPTYzMzQ5O2UuVXN0cmFpZ2h0Y3lyaWxsaWM9MTE5ODtlLlVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDA7ZS5VdGlsZGU9MzYwO2UuVXRpbGRlYWN1dGU9NzgwMDtlLlV0aWxkZWJlbG93PTc3OTY7ZS5WPTg2O2UuVmNpcmNsZT05NDE5O2UuVmRvdGJlbG93PTc4MDY7ZS5WZWN5cmlsbGljPTEwNDI7ZS5WZXdhcm1lbmlhbj0xMzU4O2UuVmhvb2s9NDM0O2UuVm1vbm9zcGFjZT02NTMzNDtlLlZvYXJtZW5pYW49MTM1MjtlLlZzbWFsbD02MzM1MDtlLlZ0aWxkZT03ODA0O2UuVz04NztlLldhY3V0ZT03ODEwO2UuV2NpcmNsZT05NDIwO2UuV2NpcmN1bWZsZXg9MzcyO2UuV2RpZXJlc2lzPTc4MTI7ZS5XZG90YWNjZW50PTc4MTQ7ZS5XZG90YmVsb3c9NzgxNjtlLldncmF2ZT03ODA4O2UuV21vbm9zcGFjZT02NTMzNTtlLldzbWFsbD02MzM1MTtlLlg9ODg7ZS5YY2lyY2xlPTk0MjE7ZS5YZGllcmVzaXM9NzgyMDtlLlhkb3RhY2NlbnQ9NzgxODtlLlhlaGFybWVuaWFuPTEzNDE7ZS5YaT05MjY7ZS5YbW9ub3NwYWNlPTY1MzM2O2UuWHNtYWxsPTYzMzUyO2UuWT04OTtlLllhY3V0ZT0yMjE7ZS5ZYWN1dGVzbWFsbD02MzQ4NTtlLllhdGN5cmlsbGljPTExMjI7ZS5ZY2lyY2xlPTk0MjI7ZS5ZY2lyY3VtZmxleD0zNzQ7ZS5ZZGllcmVzaXM9Mzc2O2UuWWRpZXJlc2lzc21hbGw9NjM0ODc7ZS5ZZG90YWNjZW50PTc4MjI7ZS5ZZG90YmVsb3c9NzkyNDtlLlllcmljeXJpbGxpYz0xMDY3O2UuWWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MjtlLllncmF2ZT03OTIyO2UuWWhvb2s9NDM1O2UuWWhvb2thYm92ZT03OTI2O2UuWWlhcm1lbmlhbj0xMzQ5O2UuWWljeXJpbGxpYz0xMDMxO2UuWWl3bmFybWVuaWFuPTEzNjI7ZS5ZbW9ub3NwYWNlPTY1MzM3O2UuWXNtYWxsPTYzMzUzO2UuWXRpbGRlPTc5Mjg7ZS5ZdXNiaWdjeXJpbGxpYz0xMTMwO2UuWXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMyO2UuWXVzbGl0dGxlY3lyaWxsaWM9MTEyNjtlLll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyODtlLlo9OTA7ZS5aYWFybWVuaWFuPTEzMzQ7ZS5aYWN1dGU9Mzc3O2UuWmNhcm9uPTM4MTtlLlpjYXJvbnNtYWxsPTYzMjMxO2UuWmNpcmNsZT05NDIzO2UuWmNpcmN1bWZsZXg9NzgyNDtlLlpkb3Q9Mzc5O2UuWmRvdGFjY2VudD0zNzk7ZS5aZG90YmVsb3c9NzgyNjtlLlplY3lyaWxsaWM9MTA0NztlLlplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NjtlLlplZGllcmVzaXNjeXJpbGxpYz0xMjQ2O2UuWmV0YT05MTg7ZS5aaGVhcm1lbmlhbj0xMzM4O2UuWmhlYnJldmVjeXJpbGxpYz0xMjE3O2UuWmhlY3lyaWxsaWM9MTA0NjtlLlpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzQ7ZS5aaGVkaWVyZXNpc2N5cmlsbGljPTEyNDQ7ZS5abGluZWJlbG93PTc4Mjg7ZS5abW9ub3NwYWNlPTY1MzM4O2UuWnNtYWxsPTYzMzU0O2UuWnN0cm9rZT00Mzc7ZS5hPTk3O2UuYWFiZW5nYWxpPTI0Mzg7ZS5hYWN1dGU9MjI1O2UuYWFkZXZhPTIzMTA7ZS5hYWd1amFyYXRpPTI2OTQ7ZS5hYWd1cm11a2hpPTI1NjY7ZS5hYW1hdHJhZ3VybXVraGk9MjYyMjtlLmFhcnVzcXVhcmU9MTMwNTk7ZS5hYXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NDtlLmFhdm93ZWxzaWduZGV2YT0yMzY2O2UuYWF2b3dlbHNpZ25ndWphcmF0aT0yNzUwO2UuYWJicmV2aWF0aW9ubWFya2FybWVuaWFuPTEzNzU7ZS5hYmJyZXZpYXRpb25zaWduZGV2YT0yNDE2O2UuYWJlbmdhbGk9MjQzNztlLmFib3BvbW9mbz0xMjU3MDtlLmFicmV2ZT0yNTk7ZS5hYnJldmVhY3V0ZT03ODU1O2UuYWJyZXZlY3lyaWxsaWM9MTIzMztlLmFicmV2ZWRvdGJlbG93PTc4NjM7ZS5hYnJldmVncmF2ZT03ODU3O2UuYWJyZXZlaG9va2Fib3ZlPTc4NTk7ZS5hYnJldmV0aWxkZT03ODYxO2UuYWNhcm9uPTQ2MjtlLmFjaXJjbGU9OTQyNDtlLmFjaXJjdW1mbGV4PTIyNjtlLmFjaXJjdW1mbGV4YWN1dGU9Nzg0NTtlLmFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MztlLmFjaXJjdW1mbGV4Z3JhdmU9Nzg0NztlLmFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDk7ZS5hY2lyY3VtZmxleHRpbGRlPTc4NTE7ZS5hY3V0ZT0xODA7ZS5hY3V0ZWJlbG93Y21iPTc5MTtlLmFjdXRlY21iPTc2OTtlLmFjdXRlY29tYj03Njk7ZS5hY3V0ZWRldmE9MjM4ODtlLmFjdXRlbG93bW9kPTcxOTtlLmFjdXRldG9uZWNtYj04MzM7ZS5hY3lyaWxsaWM9MTA3MjtlLmFkYmxncmF2ZT01MTM7ZS5hZGRha2d1cm11a2hpPTI2NzM7ZS5hZGV2YT0yMzA5O2UuYWRpZXJlc2lzPTIyODtlLmFkaWVyZXNpc2N5cmlsbGljPTEyMzU7ZS5hZGllcmVzaXNtYWNyb249NDc5O2UuYWRvdGJlbG93PTc4NDE7ZS5hZG90bWFjcm9uPTQ4MTtlLmFlPTIzMDtlLmFlYWN1dGU9NTA5O2UuYWVrb3JlYW49MTI2MjQ7ZS5hZW1hY3Jvbj00ODM7ZS5hZmlpMDAyMDg9ODIxMztlLmFmaWkwODk0MT04MzU2O2UuYWZpaTEwMDE3PTEwNDA7ZS5hZmlpMTAwMTg9MTA0MTtlLmFmaWkxMDAxOT0xMDQyO2UuYWZpaTEwMDIwPTEwNDM7ZS5hZmlpMTAwMjE9MTA0NDtlLmFmaWkxMDAyMj0xMDQ1O2UuYWZpaTEwMDIzPTEwMjU7ZS5hZmlpMTAwMjQ9MTA0NjtlLmFmaWkxMDAyNT0xMDQ3O2UuYWZpaTEwMDI2PTEwNDg7ZS5hZmlpMTAwMjc9MTA0OTtlLmFmaWkxMDAyOD0xMDUwO2UuYWZpaTEwMDI5PTEwNTE7ZS5hZmlpMTAwMzA9MTA1MjtlLmFmaWkxMDAzMT0xMDUzO2UuYWZpaTEwMDMyPTEwNTQ7ZS5hZmlpMTAwMzM9MTA1NTtlLmFmaWkxMDAzND0xMDU2O2UuYWZpaTEwMDM1PTEwNTc7ZS5hZmlpMTAwMzY9MTA1ODtlLmFmaWkxMDAzNz0xMDU5O2UuYWZpaTEwMDM4PTEwNjA7ZS5hZmlpMTAwMzk9MTA2MTtlLmFmaWkxMDA0MD0xMDYyO2UuYWZpaTEwMDQxPTEwNjM7ZS5hZmlpMTAwNDI9MTA2NDtlLmFmaWkxMDA0Mz0xMDY1O2UuYWZpaTEwMDQ0PTEwNjY7ZS5hZmlpMTAwNDU9MTA2NztlLmFmaWkxMDA0Nj0xMDY4O2UuYWZpaTEwMDQ3PTEwNjk7ZS5hZmlpMTAwNDg9MTA3MDtlLmFmaWkxMDA0OT0xMDcxO2UuYWZpaTEwMDUwPTExNjg7ZS5hZmlpMTAwNTE9MTAyNjtlLmFmaWkxMDA1Mj0xMDI3O2UuYWZpaTEwMDUzPTEwMjg7ZS5hZmlpMTAwNTQ9MTAyOTtlLmFmaWkxMDA1NT0xMDMwO2UuYWZpaTEwMDU2PTEwMzE7ZS5hZmlpMTAwNTc9MTAzMjtlLmFmaWkxMDA1OD0xMDMzO2UuYWZpaTEwMDU5PTEwMzQ7ZS5hZmlpMTAwNjA9MTAzNTtlLmFmaWkxMDA2MT0xMDM2O2UuYWZpaTEwMDYyPTEwMzg7ZS5hZmlpMTAwNjM9NjMxNzI7ZS5hZmlpMTAwNjQ9NjMxNzM7ZS5hZmlpMTAwNjU9MTA3MjtlLmFmaWkxMDA2Nj0xMDczO2UuYWZpaTEwMDY3PTEwNzQ7ZS5hZmlpMTAwNjg9MTA3NTtlLmFmaWkxMDA2OT0xMDc2O2UuYWZpaTEwMDcwPTEwNzc7ZS5hZmlpMTAwNzE9MTEwNTtlLmFmaWkxMDA3Mj0xMDc4O2UuYWZpaTEwMDczPTEwNzk7ZS5hZmlpMTAwNzQ9MTA4MDtlLmFmaWkxMDA3NT0xMDgxO2UuYWZpaTEwMDc2PTEwODI7ZS5hZmlpMTAwNzc9MTA4MztlLmFmaWkxMDA3OD0xMDg0O2UuYWZpaTEwMDc5PTEwODU7ZS5hZmlpMTAwODA9MTA4NjtlLmFmaWkxMDA4MT0xMDg3O2UuYWZpaTEwMDgyPTEwODg7ZS5hZmlpMTAwODM9MTA4OTtlLmFmaWkxMDA4ND0xMDkwO2UuYWZpaTEwMDg1PTEwOTE7ZS5hZmlpMTAwODY9MTA5MjtlLmFmaWkxMDA4Nz0xMDkzO2UuYWZpaTEwMDg4PTEwOTQ7ZS5hZmlpMTAwODk9MTA5NTtlLmFmaWkxMDA5MD0xMDk2O2UuYWZpaTEwMDkxPTEwOTc7ZS5hZmlpMTAwOTI9MTA5ODtlLmFmaWkxMDA5Mz0xMDk5O2UuYWZpaTEwMDk0PTExMDA7ZS5hZmlpMTAwOTU9MTEwMTtlLmFmaWkxMDA5Nj0xMTAyO2UuYWZpaTEwMDk3PTExMDM7ZS5hZmlpMTAwOTg9MTE2OTtlLmFmaWkxMDA5OT0xMTA2O2UuYWZpaTEwMTAwPTExMDc7ZS5hZmlpMTAxMDE9MTEwODtlLmFmaWkxMDEwMj0xMTA5O2UuYWZpaTEwMTAzPTExMTA7ZS5hZmlpMTAxMDQ9MTExMTtlLmFmaWkxMDEwNT0xMTEyO2UuYWZpaTEwMTA2PTExMTM7ZS5hZmlpMTAxMDc9MTExNDtlLmFmaWkxMDEwOD0xMTE1O2UuYWZpaTEwMTA5PTExMTY7ZS5hZmlpMTAxMTA9MTExODtlLmFmaWkxMDE0NT0xMDM5O2UuYWZpaTEwMTQ2PTExMjI7ZS5hZmlpMTAxNDc9MTEzODtlLmFmaWkxMDE0OD0xMTQwO2UuYWZpaTEwMTkyPTYzMTc0O2UuYWZpaTEwMTkzPTExMTk7ZS5hZmlpMTAxOTQ9MTEyMztlLmFmaWkxMDE5NT0xMTM5O2UuYWZpaTEwMTk2PTExNDE7ZS5hZmlpMTA4MzE9NjMxNzU7ZS5hZmlpMTA4MzI9NjMxNzY7ZS5hZmlpMTA4NDY9MTI0MTtlLmFmaWkyOTk9ODIwNjtlLmFmaWkzMDA9ODIwNztlLmFmaWkzMDE9ODIwNTtlLmFmaWk1NzM4MT0xNjQyO2UuYWZpaTU3Mzg4PTE1NDg7ZS5hZmlpNTczOTI9MTYzMjtlLmFmaWk1NzM5Mz0xNjMzO2UuYWZpaTU3Mzk0PTE2MzQ7ZS5hZmlpNTczOTU9MTYzNTtlLmFmaWk1NzM5Nj0xNjM2O2UuYWZpaTU3Mzk3PTE2Mzc7ZS5hZmlpNTczOTg9MTYzODtlLmFmaWk1NzM5OT0xNjM5O2UuYWZpaTU3NDAwPTE2NDA7ZS5hZmlpNTc0MDE9MTY0MTtlLmFmaWk1NzQwMz0xNTYzO2UuYWZpaTU3NDA3PTE1Njc7ZS5hZmlpNTc0MDk9MTU2OTtlLmFmaWk1NzQxMD0xNTcwO2UuYWZpaTU3NDExPTE1NzE7ZS5hZmlpNTc0MTI9MTU3MjtlLmFmaWk1NzQxMz0xNTczO2UuYWZpaTU3NDE0PTE1NzQ7ZS5hZmlpNTc0MTU9MTU3NTtlLmFmaWk1NzQxNj0xNTc2O2UuYWZpaTU3NDE3PTE1Nzc7ZS5hZmlpNTc0MTg9MTU3ODtlLmFmaWk1NzQxOT0xNTc5O2UuYWZpaTU3NDIwPTE1ODA7ZS5hZmlpNTc0MjE9MTU4MTtlLmFmaWk1NzQyMj0xNTgyO2UuYWZpaTU3NDIzPTE1ODM7ZS5hZmlpNTc0MjQ9MTU4NDtlLmFmaWk1NzQyNT0xNTg1O2UuYWZpaTU3NDI2PTE1ODY7ZS5hZmlpNTc0Mjc9MTU4NztlLmFmaWk1NzQyOD0xNTg4O2UuYWZpaTU3NDI5PTE1ODk7ZS5hZmlpNTc0MzA9MTU5MDtlLmFmaWk1NzQzMT0xNTkxO2UuYWZpaTU3NDMyPTE1OTI7ZS5hZmlpNTc0MzM9MTU5MztlLmFmaWk1NzQzND0xNTk0O2UuYWZpaTU3NDQwPTE2MDA7ZS5hZmlpNTc0NDE9MTYwMTtlLmFmaWk1NzQ0Mj0xNjAyO2UuYWZpaTU3NDQzPTE2MDM7ZS5hZmlpNTc0NDQ9MTYwNDtlLmFmaWk1NzQ0NT0xNjA1O2UuYWZpaTU3NDQ2PTE2MDY7ZS5hZmlpNTc0NDg9MTYwODtlLmFmaWk1NzQ0OT0xNjA5O2UuYWZpaTU3NDUwPTE2MTA7ZS5hZmlpNTc0NTE9MTYxMTtlLmFmaWk1NzQ1Mj0xNjEyO2UuYWZpaTU3NDUzPTE2MTM7ZS5hZmlpNTc0NTQ9MTYxNDtlLmFmaWk1NzQ1NT0xNjE1O2UuYWZpaTU3NDU2PTE2MTY7ZS5hZmlpNTc0NTc9MTYxNztlLmFmaWk1NzQ1OD0xNjE4O2UuYWZpaTU3NDcwPTE2MDc7ZS5hZmlpNTc1MDU9MTcwMDtlLmFmaWk1NzUwNj0xNjYyO2UuYWZpaTU3NTA3PTE2NzA7ZS5hZmlpNTc1MDg9MTY4ODtlLmFmaWk1NzUwOT0xNzExO2UuYWZpaTU3NTExPTE2NTc7ZS5hZmlpNTc1MTI9MTY3MjtlLmFmaWk1NzUxMz0xNjgxO2UuYWZpaTU3NTE0PTE3MjI7ZS5hZmlpNTc1MTk9MTc0NjtlLmFmaWk1NzUzND0xNzQ5O2UuYWZpaTU3NjM2PTgzNjI7ZS5hZmlpNTc2NDU9MTQ3MDtlLmFmaWk1NzY1OD0xNDc1O2UuYWZpaTU3NjY0PTE0ODg7ZS5hZmlpNTc2NjU9MTQ4OTtlLmFmaWk1NzY2Nj0xNDkwO2UuYWZpaTU3NjY3PTE0OTE7ZS5hZmlpNTc2Njg9MTQ5MjtlLmFmaWk1NzY2OT0xNDkzO2UuYWZpaTU3NjcwPTE0OTQ7ZS5hZmlpNTc2NzE9MTQ5NTtlLmFmaWk1NzY3Mj0xNDk2O2UuYWZpaTU3NjczPTE0OTc7ZS5hZmlpNTc2NzQ9MTQ5ODtlLmFmaWk1NzY3NT0xNDk5O2UuYWZpaTU3Njc2PTE1MDA7ZS5hZmlpNTc2Nzc9MTUwMTtlLmFmaWk1NzY3OD0xNTAyO2UuYWZpaTU3Njc5PTE1MDM7ZS5hZmlpNTc2ODA9MTUwNDtlLmFmaWk1NzY4MT0xNTA1O2UuYWZpaTU3NjgyPTE1MDY7ZS5hZmlpNTc2ODM9MTUwNztlLmFmaWk1NzY4ND0xNTA4O2UuYWZpaTU3Njg1PTE1MDk7ZS5hZmlpNTc2ODY9MTUxMDtlLmFmaWk1NzY4Nz0xNTExO2UuYWZpaTU3Njg4PTE1MTI7ZS5hZmlpNTc2ODk9MTUxMztlLmFmaWk1NzY5MD0xNTE0O2UuYWZpaTU3Njk0PTY0Mjk4O2UuYWZpaTU3Njk1PTY0Mjk5O2UuYWZpaTU3NzAwPTY0MzMxO2UuYWZpaTU3NzA1PTY0Mjg3O2UuYWZpaTU3NzE2PTE1MjA7ZS5hZmlpNTc3MTc9MTUyMTtlLmFmaWk1NzcxOD0xNTIyO2UuYWZpaTU3NzIzPTY0MzA5O2UuYWZpaTU3NzkzPTE0NjA7ZS5hZmlpNTc3OTQ9MTQ2MTtlLmFmaWk1Nzc5NT0xNDYyO2UuYWZpaTU3Nzk2PTE0Njc7ZS5hZmlpNTc3OTc9MTQ2NDtlLmFmaWk1Nzc5OD0xNDYzO2UuYWZpaTU3Nzk5PTE0NTY7ZS5hZmlpNTc4MDA9MTQ1ODtlLmFmaWk1NzgwMT0xNDU3O2UuYWZpaTU3ODAyPTE0NTk7ZS5hZmlpNTc4MDM9MTQ3NDtlLmFmaWk1NzgwND0xNDczO2UuYWZpaTU3ODA2PTE0NjU7ZS5hZmlpNTc4MDc9MTQ2ODtlLmFmaWk1NzgzOT0xNDY5O2UuYWZpaTU3ODQxPTE0NzE7ZS5hZmlpNTc4NDI9MTQ3MjtlLmFmaWk1NzkyOT03MDA7ZS5hZmlpNjEyNDg9ODQ1MztlLmFmaWk2MTI4OT04NDY3O2UuYWZpaTYxMzUyPTg0NzA7ZS5hZmlpNjE1NzM9ODIzNjtlLmFmaWk2MTU3ND04MjM3O2UuYWZpaTYxNTc1PTgyMzg7ZS5hZmlpNjE2NjQ9ODIwNDtlLmFmaWk2MzE2Nz0xNjQ1O2UuYWZpaTY0OTM3PTcwMTtlLmFncmF2ZT0yMjQ7ZS5hZ3VqYXJhdGk9MjY5MztlLmFndXJtdWtoaT0yNTY1O2UuYWhpcmFnYW5hPTEyMzU0O2UuYWhvb2thYm92ZT03ODQzO2UuYWliZW5nYWxpPTI0NDg7ZS5haWJvcG9tb2ZvPTEyNTc0O2UuYWlkZXZhPTIzMjA7ZS5haWVjeXJpbGxpYz0xMjM3O2UuYWlndWphcmF0aT0yNzA0O2UuYWlndXJtdWtoaT0yNTc2O2UuYWltYXRyYWd1cm11a2hpPTI2MzI7ZS5haW5hcmFiaWM9MTU5MztlLmFpbmZpbmFsYXJhYmljPTY1MjI2O2UuYWluaW5pdGlhbGFyYWJpYz02NTIyNztlLmFpbm1lZGlhbGFyYWJpYz02NTIyODtlLmFpbnZlcnRlZGJyZXZlPTUxNTtlLmFpdm93ZWxzaWduYmVuZ2FsaT0yNTA0O2UuYWl2b3dlbHNpZ25kZXZhPTIzNzY7ZS5haXZvd2Vsc2lnbmd1amFyYXRpPTI3NjA7ZS5ha2F0YWthbmE9MTI0NTA7ZS5ha2F0YWthbmFoYWxmd2lkdGg9NjUzOTM7ZS5ha29yZWFuPTEyNjIzO2UuYWxlZj0xNDg4O2UuYWxlZmFyYWJpYz0xNTc1O2UuYWxlZmRhZ2VzaGhlYnJldz02NDMwNDtlLmFsZWZmaW5hbGFyYWJpYz02NTE2NjtlLmFsZWZoYW16YWFib3ZlYXJhYmljPTE1NzE7ZS5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU2O2UuYWxlZmhhbXphYmVsb3dhcmFiaWM9MTU3MztlLmFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUxNjA7ZS5hbGVmaGVicmV3PTE0ODg7ZS5hbGVmbGFtZWRoZWJyZXc9NjQzMzU7ZS5hbGVmbWFkZGFhYm92ZWFyYWJpYz0xNTcwO2UuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTE1NDtlLmFsZWZtYWtzdXJhYXJhYmljPTE2MDk7ZS5hbGVmbWFrc3VyYWZpbmFsYXJhYmljPTY1MjY0O2UuYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljPTY1MjY3O2UuYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM9NjUyNjg7ZS5hbGVmcGF0YWhoZWJyZXc9NjQzMDI7ZS5hbGVmcWFtYXRzaGVicmV3PTY0MzAzO2UuYWxlcGg9ODUwMTtlLmFsbGVxdWFsPTg3ODA7ZS5hbHBoYT05NDU7ZS5hbHBoYXRvbm9zPTk0MDtlLmFtYWNyb249MjU3O2UuYW1vbm9zcGFjZT02NTM0NTtlLmFtcGVyc2FuZD0zODtlLmFtcGVyc2FuZG1vbm9zcGFjZT02NTI4NjtlLmFtcGVyc2FuZHNtYWxsPTYzMjcwO2UuYW1zcXVhcmU9MTMyNTA7ZS5hbmJvcG9tb2ZvPTEyNTc4O2UuYW5nYm9wb21vZm89MTI1ODA7ZS5hbmdicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2JyYWNrZXRyaWdodD0xMjI5NztlLmFuZ2toYW5raHV0aGFpPTM2NzQ7ZS5hbmdsZT04NzM2O2UuYW5nbGVicmFja2V0bGVmdD0xMjI5NjtlLmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NztlLmFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk3O2UuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4ODtlLmFuZ2xlbGVmdD05MDAxO2UuYW5nbGVyaWdodD05MDAyO2UuYW5nc3Ryb209ODQ5MTtlLmFub3RlbGVpYT05MDM7ZS5hbnVkYXR0YWRldmE9MjM4NjtlLmFudXN2YXJhYmVuZ2FsaT0yNDM0O2UuYW51c3ZhcmFkZXZhPTIzMDY7ZS5hbnVzdmFyYWd1amFyYXRpPTI2OTA7ZS5hb2dvbmVrPTI2MTtlLmFwYWF0b3NxdWFyZT0xMzA1NjtlLmFwYXJlbj05MzcyO2UuYXBvc3Ryb3BoZWFybWVuaWFuPTEzNzA7ZS5hcG9zdHJvcGhlbW9kPTcwMDtlLmFwcGxlPTYzNzQzO2UuYXBwcm9hY2hlcz04Nzg0O2UuYXBwcm94ZXF1YWw9ODc3NjtlLmFwcHJveGVxdWFsb3JpbWFnZT04Nzg2O2UuYXBwcm94aW1hdGVseWVxdWFsPTg3NzM7ZS5hcmFlYWVrb3JlYW49MTI2ODY7ZS5hcmFlYWtvcmVhbj0xMjY4NTtlLmFyYz04OTc4O2UuYXJpZ2h0aGFsZnJpbmc9NzgzNDtlLmFyaW5nPTIyOTtlLmFyaW5nYWN1dGU9NTA3O2UuYXJpbmdiZWxvdz03NjgxO2UuYXJyb3dib3RoPTg1OTY7ZS5hcnJvd2Rhc2hkb3duPTg2NzU7ZS5hcnJvd2Rhc2hsZWZ0PTg2NzI7ZS5hcnJvd2Rhc2hyaWdodD04Njc0O2UuYXJyb3dkYXNodXA9ODY3MztlLmFycm93ZGJsYm90aD04NjYwO2UuYXJyb3dkYmxkb3duPTg2NTk7ZS5hcnJvd2RibGxlZnQ9ODY1NjtlLmFycm93ZGJscmlnaHQ9ODY1ODtlLmFycm93ZGJsdXA9ODY1NztlLmFycm93ZG93bj04NTk1O2UuYXJyb3dkb3dubGVmdD04NjAxO2UuYXJyb3dkb3ducmlnaHQ9ODYwMDtlLmFycm93ZG93bndoaXRlPTg2ODE7ZS5hcnJvd2hlYWRkb3dubW9kPTcwOTtlLmFycm93aGVhZGxlZnRtb2Q9NzA2O2UuYXJyb3doZWFkcmlnaHRtb2Q9NzA3O2UuYXJyb3doZWFkdXBtb2Q9NzA4O2UuYXJyb3dob3JpemV4PTYzNzE5O2UuYXJyb3dsZWZ0PTg1OTI7ZS5hcnJvd2xlZnRkYmw9ODY1NjtlLmFycm93bGVmdGRibHN0cm9rZT04NjUzO2UuYXJyb3dsZWZ0b3ZlcnJpZ2h0PTg2NDY7ZS5hcnJvd2xlZnR3aGl0ZT04Njc4O2UuYXJyb3dyaWdodD04NTk0O2UuYXJyb3dyaWdodGRibHN0cm9rZT04NjU1O2UuYXJyb3dyaWdodGhlYXZ5PTEwMTQyO2UuYXJyb3dyaWdodG92ZXJsZWZ0PTg2NDQ7ZS5hcnJvd3JpZ2h0d2hpdGU9ODY4MDtlLmFycm93dGFibGVmdD04Njc2O2UuYXJyb3d0YWJyaWdodD04Njc3O2UuYXJyb3d1cD04NTkzO2UuYXJyb3d1cGRuPTg1OTc7ZS5hcnJvd3VwZG5ic2U9ODYxNjtlLmFycm93dXBkb3duYmFzZT04NjE2O2UuYXJyb3d1cGxlZnQ9ODU5ODtlLmFycm93dXBsZWZ0b2Zkb3duPTg2NDU7ZS5hcnJvd3VwcmlnaHQ9ODU5OTtlLmFycm93dXB3aGl0ZT04Njc5O2UuYXJyb3d2ZXJ0ZXg9NjM3MTg7ZS5hc2NpaWNpcmN1bT05NDtlLmFzY2lpY2lyY3VtbW9ub3NwYWNlPTY1MzQyO2UuYXNjaWl0aWxkZT0xMjY7ZS5hc2NpaXRpbGRlbW9ub3NwYWNlPTY1Mzc0O2UuYXNjcmlwdD01OTM7ZS5hc2NyaXB0dHVybmVkPTU5NDtlLmFzbWFsbGhpcmFnYW5hPTEyMzUzO2UuYXNtYWxsa2F0YWthbmE9MTI0NDk7ZS5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4MztlLmFzdGVyaXNrPTQyO2UuYXN0ZXJpc2thbHRvbmVhcmFiaWM9MTY0NTtlLmFzdGVyaXNrYXJhYmljPTE2NDU7ZS5hc3Rlcmlza21hdGg9ODcyNztlLmFzdGVyaXNrbW9ub3NwYWNlPTY1MjkwO2UuYXN0ZXJpc2tzbWFsbD02NTEyMTtlLmFzdGVyaXNtPTgyNTg7ZS5hc3VwZXJpb3I9NjMyMDk7ZS5hc3ltcHRvdGljYWxseWVxdWFsPTg3NzE7ZS5hdD02NDtlLmF0aWxkZT0yMjc7ZS5hdG1vbm9zcGFjZT02NTMxMjtlLmF0c21hbGw9NjUxMzE7ZS5hdHVybmVkPTU5MjtlLmF1YmVuZ2FsaT0yNDUyO2UuYXVib3BvbW9mbz0xMjU3NjtlLmF1ZGV2YT0yMzI0O2UuYXVndWphcmF0aT0yNzA4O2UuYXVndXJtdWtoaT0yNTgwO2UuYXVsZW5ndGhtYXJrYmVuZ2FsaT0yNTE5O2UuYXVtYXRyYWd1cm11a2hpPTI2MzY7ZS5hdXZvd2Vsc2lnbmJlbmdhbGk9MjUwODtlLmF1dm93ZWxzaWduZGV2YT0yMzgwO2UuYXV2b3dlbHNpZ25ndWphcmF0aT0yNzY0O2UuYXZhZ3JhaGFkZXZhPTIzNjU7ZS5heWJhcm1lbmlhbj0xMzc3O2UuYXlpbj0xNTA2O2UuYXlpbmFsdG9uZWhlYnJldz02NDI4ODtlLmF5aW5oZWJyZXc9MTUwNjtlLmI9OTg7ZS5iYWJlbmdhbGk9MjQ3NjtlLmJhY2tzbGFzaD05MjtlLmJhY2tzbGFzaG1vbm9zcGFjZT02NTM0MDtlLmJhZGV2YT0yMzQ4O2UuYmFndWphcmF0aT0yNzMyO2UuYmFndXJtdWtoaT0yNjA0O2UuYmFoaXJhZ2FuYT0xMjQwMDtlLmJhaHR0aGFpPTM2NDc7ZS5iYWthdGFrYW5hPTEyNDk2O2UuYmFyPTEyNDtlLmJhcm1vbm9zcGFjZT02NTM3MjtlLmJib3BvbW9mbz0xMjU0OTtlLmJjaXJjbGU9OTQyNTtlLmJkb3RhY2NlbnQ9NzY4MztlLmJkb3RiZWxvdz03Njg1O2UuYmVhbWVkc2l4dGVlbnRobm90ZXM9OTgzNjtlLmJlY2F1c2U9ODc1NztlLmJlY3lyaWxsaWM9MTA3MztlLmJlaGFyYWJpYz0xNTc2O2UuYmVoZmluYWxhcmFiaWM9NjUxNjg7ZS5iZWhpbml0aWFsYXJhYmljPTY1MTY5O2UuYmVoaXJhZ2FuYT0xMjQwOTtlLmJlaG1lZGlhbGFyYWJpYz02NTE3MDtlLmJlaG1lZW1pbml0aWFsYXJhYmljPTY0NjcxO2UuYmVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTIwO2UuYmVobm9vbmZpbmFsYXJhYmljPTY0NjIxO2UuYmVrYXRha2FuYT0xMjUwNTtlLmJlbmFybWVuaWFuPTEzNzg7ZS5iZXQ9MTQ4OTtlLmJldGE9OTQ2O2UuYmV0YXN5bWJvbGdyZWVrPTk3NjtlLmJldGRhZ2VzaD02NDMwNTtlLmJldGRhZ2VzaGhlYnJldz02NDMwNTtlLmJldGhlYnJldz0xNDg5O2UuYmV0cmFmZWhlYnJldz02NDMzMjtlLmJoYWJlbmdhbGk9MjQ3NztlLmJoYWRldmE9MjM0OTtlLmJoYWd1amFyYXRpPTI3MzM7ZS5iaGFndXJtdWtoaT0yNjA1O2UuYmhvb2s9NTk1O2UuYmloaXJhZ2FuYT0xMjQwMztlLmJpa2F0YWthbmE9MTI0OTk7ZS5iaWxhYmlhbGNsaWNrPTY2NDtlLmJpbmRpZ3VybXVraGk9MjU2MjtlLmJpcnVzcXVhcmU9MTMxMDU7ZS5ibGFja2NpcmNsZT05Njc5O2UuYmxhY2tkaWFtb25kPTk2NzA7ZS5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjA7ZS5ibGFja2xlZnRwb2ludGluZ3BvaW50ZXI9OTY2ODtlLmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NDtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzA0O2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MztlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMwNTtlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg0O2UuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZT05Njk5O2UuYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGU9OTY5ODtlLmJsYWNrcmVjdGFuZ2xlPTk2NDQ7ZS5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyPTk2NTg7ZS5ibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU0O2UuYmxhY2tzbWFsbHNxdWFyZT05NjQyO2UuYmxhY2tzbWlsaW5nZmFjZT05Nzg3O2UuYmxhY2tzcXVhcmU9OTYzMjtlLmJsYWNrc3Rhcj05NzMzO2UuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZT05NzAwO2UuYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGU9OTcwMTtlLmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MjtlLmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlPTk2NTA7ZS5ibGFuaz05MjUxO2UuYmxpbmViZWxvdz03Njg3O2UuYmxvY2s9OTYwODtlLmJtb25vc3BhY2U9NjUzNDY7ZS5ib2JhaW1haXRoYWk9MzYxMDtlLmJvaGlyYWdhbmE9MTI0MTI7ZS5ib2thdGFrYW5hPTEyNTA4O2UuYnBhcmVuPTkzNzM7ZS5icXNxdWFyZT0xMzI1MTtlLmJyYWNlZXg9NjM3MzI7ZS5icmFjZWxlZnQ9MTIzO2UuYnJhY2VsZWZ0YnQ9NjM3MzE7ZS5icmFjZWxlZnRtaWQ9NjM3MzA7ZS5icmFjZWxlZnRtb25vc3BhY2U9NjUzNzE7ZS5icmFjZWxlZnRzbWFsbD02NTExNTtlLmJyYWNlbGVmdHRwPTYzNzI5O2UuYnJhY2VsZWZ0dmVydGljYWw9NjUwNzk7ZS5icmFjZXJpZ2h0PTEyNTtlLmJyYWNlcmlnaHRidD02Mzc0MjtlLmJyYWNlcmlnaHRtaWQ9NjM3NDE7ZS5icmFjZXJpZ2h0bW9ub3NwYWNlPTY1MzczO2UuYnJhY2VyaWdodHNtYWxsPTY1MTE2O2UuYnJhY2VyaWdodHRwPTYzNzQwO2UuYnJhY2VyaWdodHZlcnRpY2FsPTY1MDgwO2UuYnJhY2tldGxlZnQ9OTE7ZS5icmFja2V0bGVmdGJ0PTYzNzI4O2UuYnJhY2tldGxlZnRleD02MzcyNztlLmJyYWNrZXRsZWZ0bW9ub3NwYWNlPTY1MzM5O2UuYnJhY2tldGxlZnR0cD02MzcyNjtlLmJyYWNrZXRyaWdodD05MztlLmJyYWNrZXRyaWdodGJ0PTYzNzM5O2UuYnJhY2tldHJpZ2h0ZXg9NjM3Mzg7ZS5icmFja2V0cmlnaHRtb25vc3BhY2U9NjUzNDE7ZS5icmFja2V0cmlnaHR0cD02MzczNztlLmJyZXZlPTcyODtlLmJyZXZlYmVsb3djbWI9ODE0O2UuYnJldmVjbWI9Nzc0O2UuYnJldmVpbnZlcnRlZGJlbG93Y21iPTgxNTtlLmJyZXZlaW52ZXJ0ZWRjbWI9Nzg1O2UuYnJldmVpbnZlcnRlZGRvdWJsZWNtYj04NjU7ZS5icmlkZ2ViZWxvd2NtYj04MTA7ZS5icmlkZ2VpbnZlcnRlZGJlbG93Y21iPTgyNjtlLmJyb2tlbmJhcj0xNjY7ZS5ic3Ryb2tlPTM4NDtlLmJzdXBlcmlvcj02MzIxMDtlLmJ0b3BiYXI9Mzg3O2UuYnVoaXJhZ2FuYT0xMjQwNjtlLmJ1a2F0YWthbmE9MTI1MDI7ZS5idWxsZXQ9ODIyNjtlLmJ1bGxldGludmVyc2U9OTY4ODtlLmJ1bGxldG9wZXJhdG9yPTg3Mjk7ZS5idWxsc2V5ZT05Njc4O2UuYz05OTtlLmNhYXJtZW5pYW49MTM5MDtlLmNhYmVuZ2FsaT0yNDU4O2UuY2FjdXRlPTI2MztlLmNhZGV2YT0yMzMwO2UuY2FndWphcmF0aT0yNzE0O2UuY2FndXJtdWtoaT0yNTg2O2UuY2Fsc3F1YXJlPTEzMTkyO2UuY2FuZHJhYmluZHViZW5nYWxpPTI0MzM7ZS5jYW5kcmFiaW5kdWNtYj03ODQ7ZS5jYW5kcmFiaW5kdWRldmE9MjMwNTtlLmNhbmRyYWJpbmR1Z3VqYXJhdGk9MjY4OTtlLmNhcHNsb2NrPTg2ODI7ZS5jYXJlb2Y9ODQ1MztlLmNhcm9uPTcxMTtlLmNhcm9uYmVsb3djbWI9ODEyO2UuY2Fyb25jbWI9NzgwO2UuY2FycmlhZ2VyZXR1cm49ODYyOTtlLmNib3BvbW9mbz0xMjU2ODtlLmNjYXJvbj0yNjk7ZS5jY2VkaWxsYT0yMzE7ZS5jY2VkaWxsYWFjdXRlPTc2ODk7ZS5jY2lyY2xlPTk0MjY7ZS5jY2lyY3VtZmxleD0yNjU7ZS5jY3VybD01OTc7ZS5jZG90PTI2NztlLmNkb3RhY2NlbnQ9MjY3O2UuY2RzcXVhcmU9MTMyNTM7ZS5jZWRpbGxhPTE4NDtlLmNlZGlsbGFjbWI9ODA3O2UuY2VudD0xNjI7ZS5jZW50aWdyYWRlPTg0NTE7ZS5jZW50aW5mZXJpb3I9NjMxOTk7ZS5jZW50bW9ub3NwYWNlPTY1NTA0O2UuY2VudG9sZHN0eWxlPTYzMzk0O2UuY2VudHN1cGVyaW9yPTYzMjAwO2UuY2hhYXJtZW5pYW49MTQwMTtlLmNoYWJlbmdhbGk9MjQ1OTtlLmNoYWRldmE9MjMzMTtlLmNoYWd1amFyYXRpPTI3MTU7ZS5jaGFndXJtdWtoaT0yNTg3O2UuY2hib3BvbW9mbz0xMjU2NDtlLmNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTM7ZS5jaGVja21hcms9MTAwMDM7ZS5jaGVjeXJpbGxpYz0xMDk1O2UuY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNTtlLmNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDc7ZS5jaGVkaWVyZXNpc2N5cmlsbGljPTEyNjk7ZS5jaGVoYXJtZW5pYW49MTM5NTtlLmNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI4O2UuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA5O2UuY2hpPTk2NztlLmNoaWV1Y2hhY2lyY2xla29yZWFuPTEyOTE5O2UuY2hpZXVjaGFwYXJlbmtvcmVhbj0xMjgyMztlLmNoaWV1Y2hjaXJjbGVrb3JlYW49MTI5MDU7ZS5jaGlldWNoa29yZWFuPTEyNjE4O2UuY2hpZXVjaHBhcmVua29yZWFuPTEyODA5O2UuY2hvY2hhbmd0aGFpPTM1OTQ7ZS5jaG9jaGFudGhhaT0zNTkyO2UuY2hvY2hpbmd0aGFpPTM1OTM7ZS5jaG9jaG9ldGhhaT0zNTk2O2UuY2hvb2s9MzkyO2UuY2lldWNhY2lyY2xla29yZWFuPTEyOTE4O2UuY2lldWNhcGFyZW5rb3JlYW49MTI4MjI7ZS5jaWV1Y2NpcmNsZWtvcmVhbj0xMjkwNDtlLmNpZXVja29yZWFuPTEyNjE2O2UuY2lldWNwYXJlbmtvcmVhbj0xMjgwODtlLmNpZXVjdXBhcmVua29yZWFuPTEyODI4O2UuY2lyY2xlPTk2NzU7ZS5jaXJjbGVjb3B5cnQ9MTY5O2UuY2lyY2xlbXVsdGlwbHk9ODg1NTtlLmNpcmNsZW90PTg4NTc7ZS5jaXJjbGVwbHVzPTg4NTM7ZS5jaXJjbGVwb3N0YWxtYXJrPTEyMzQyO2UuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2s9OTY4MDtlLmNpcmNsZXdpdGhyaWdodGhhbGZibGFjaz05NjgxO2UuY2lyY3VtZmxleD03MTA7ZS5jaXJjdW1mbGV4YmVsb3djbWI9ODEzO2UuY2lyY3VtZmxleGNtYj03NzA7ZS5jbGVhcj04OTk5O2UuY2xpY2thbHZlb2xhcj00NTA7ZS5jbGlja2RlbnRhbD00NDg7ZS5jbGlja2xhdGVyYWw9NDQ5O2UuY2xpY2tyZXRyb2ZsZXg9NDUxO2UuY2x1Yj05ODI3O2UuY2x1YnN1aXRibGFjaz05ODI3O2UuY2x1YnN1aXR3aGl0ZT05ODMxO2UuY21jdWJlZHNxdWFyZT0xMzIyMDtlLmNtb25vc3BhY2U9NjUzNDc7ZS5jbXNxdWFyZWRzcXVhcmU9MTMyMTY7ZS5jb2FybWVuaWFuPTE0MDk7ZS5jb2xvbj01ODtlLmNvbG9ubW9uZXRhcnk9ODM1MztlLmNvbG9ubW9ub3NwYWNlPTY1MzA2O2UuY29sb25zaWduPTgzNTM7ZS5jb2xvbnNtYWxsPTY1MTA5O2UuY29sb250cmlhbmd1bGFyaGFsZm1vZD03MjE7ZS5jb2xvbnRyaWFuZ3VsYXJtb2Q9NzIwO2UuY29tbWE9NDQ7ZS5jb21tYWFib3ZlY21iPTc4NztlLmNvbW1hYWJvdmVyaWdodGNtYj03ODk7ZS5jb21tYWFjY2VudD02MzE3MTtlLmNvbW1hYXJhYmljPTE1NDg7ZS5jb21tYWFybWVuaWFuPTEzNzM7ZS5jb21tYWluZmVyaW9yPTYzMjAxO2UuY29tbWFtb25vc3BhY2U9NjUyOTI7ZS5jb21tYXJldmVyc2VkYWJvdmVjbWI9Nzg4O2UuY29tbWFyZXZlcnNlZG1vZD03MDE7ZS5jb21tYXNtYWxsPTY1MTA0O2UuY29tbWFzdXBlcmlvcj02MzIwMjtlLmNvbW1hdHVybmVkYWJvdmVjbWI9Nzg2O2UuY29tbWF0dXJuZWRtb2Q9Njk5O2UuY29tcGFzcz05Nzg4O2UuY29uZ3J1ZW50PTg3NzM7ZS5jb250b3VyaW50ZWdyYWw9ODc1MDtlLmNvbnRyb2w9ODk2MztlLmNvbnRyb2xBQ0s9NjtlLmNvbnRyb2xCRUw9NztlLmNvbnRyb2xCUz04O2UuY29udHJvbENBTj0yNDtlLmNvbnRyb2xDUj0xMztlLmNvbnRyb2xEQzE9MTc7ZS5jb250cm9sREMyPTE4O2UuY29udHJvbERDMz0xOTtlLmNvbnRyb2xEQzQ9MjA7ZS5jb250cm9sREVMPTEyNztlLmNvbnRyb2xETEU9MTY7ZS5jb250cm9sRU09MjU7ZS5jb250cm9sRU5RPTU7ZS5jb250cm9sRU9UPTQ7ZS5jb250cm9sRVNDPTI3O2UuY29udHJvbEVUQj0yMztlLmNvbnRyb2xFVFg9MztlLmNvbnRyb2xGRj0xMjtlLmNvbnRyb2xGUz0yODtlLmNvbnRyb2xHUz0yOTtlLmNvbnRyb2xIVD05O2UuY29udHJvbExGPTEwO2UuY29udHJvbE5BSz0yMTtlLmNvbnRyb2xOVUxMPTA7ZS5jb250cm9sUlM9MzA7ZS5jb250cm9sU0k9MTU7ZS5jb250cm9sU089MTQ7ZS5jb250cm9sU09UPTI7ZS5jb250cm9sU1RYPTE7ZS5jb250cm9sU1VCPTI2O2UuY29udHJvbFNZTj0yMjtlLmNvbnRyb2xVUz0zMTtlLmNvbnRyb2xWVD0xMTtlLmNvcHlyaWdodD0xNjk7ZS5jb3B5cmlnaHRzYW5zPTYzNzIxO2UuY29weXJpZ2h0c2VyaWY9NjMxOTM7ZS5jb3JuZXJicmFja2V0bGVmdD0xMjMwMDtlLmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoPTY1Mzc4O2UuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4OTtlLmNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMTtlLmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aD02NTM3OTtlLmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkwO2UuY29ycG9yYXRpb25zcXVhcmU9MTMxODM7ZS5jb3NxdWFyZT0xMzI1NTtlLmNvdmVya2dzcXVhcmU9MTMyNTQ7ZS5jcGFyZW49OTM3NDtlLmNydXplaXJvPTgzNTQ7ZS5jc3RyZXRjaGVkPTY2MztlLmN1cmx5YW5kPTg5MTE7ZS5jdXJseW9yPTg5MTA7ZS5jdXJyZW5jeT0xNjQ7ZS5jeXJCcmV2ZT02MzE4NTtlLmN5ckZsZXg9NjMxODY7ZS5jeXJicmV2ZT02MzE4ODtlLmN5cmZsZXg9NjMxODk7ZS5kPTEwMDtlLmRhYXJtZW5pYW49MTM4MDtlLmRhYmVuZ2FsaT0yNDcwO2UuZGFkYXJhYmljPTE1OTA7ZS5kYWRldmE9MjM0MjtlLmRhZGZpbmFsYXJhYmljPTY1MjE0O2UuZGFkaW5pdGlhbGFyYWJpYz02NTIxNTtlLmRhZG1lZGlhbGFyYWJpYz02NTIxNjtlLmRhZ2VzaD0xNDY4O2UuZGFnZXNoaGVicmV3PTE0Njg7ZS5kYWdnZXI9ODIyNDtlLmRhZ2dlcmRibD04MjI1O2UuZGFndWphcmF0aT0yNzI2O2UuZGFndXJtdWtoaT0yNTk4O2UuZGFoaXJhZ2FuYT0xMjM4NDtlLmRha2F0YWthbmE9MTI0ODA7ZS5kYWxhcmFiaWM9MTU4MztlLmRhbGV0PTE0OTE7ZS5kYWxldGRhZ2VzaD02NDMwNztlLmRhbGV0ZGFnZXNoaGVicmV3PTY0MzA3O2UuZGFsZXRoZWJyZXc9MTQ5MTtlLmRhbGZpbmFsYXJhYmljPTY1MTk0O2UuZGFtbWFhcmFiaWM9MTYxNTtlLmRhbW1hbG93YXJhYmljPTE2MTU7ZS5kYW1tYXRhbmFsdG9uZWFyYWJpYz0xNjEyO2UuZGFtbWF0YW5hcmFiaWM9MTYxMjtlLmRhbmRhPTI0MDQ7ZS5kYXJnYWhlYnJldz0xNDQ3O2UuZGFyZ2FsZWZ0aGVicmV3PTE0NDc7ZS5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1NztlLmRibEdyYXZlPTYzMTg3O2UuZGJsYW5nbGVicmFja2V0bGVmdD0xMjI5ODtlLmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NTtlLmRibGFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk5O2UuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NjtlLmRibGFyY2hpbnZlcnRlZGJlbG93Y21iPTgxMTtlLmRibGFycm93bGVmdD04NjYwO2UuZGJsYXJyb3dyaWdodD04NjU4O2UuZGJsZGFuZGE9MjQwNTtlLmRibGdyYXZlPTYzMTkwO2UuZGJsZ3JhdmVjbWI9NzgzO2UuZGJsaW50ZWdyYWw9ODc0ODtlLmRibGxvd2xpbmU9ODIxNTtlLmRibGxvd2xpbmVjbWI9ODE5O2UuZGJsb3ZlcmxpbmVjbWI9ODMxO2UuZGJscHJpbWVtb2Q9Njk4O2UuZGJsdmVydGljYWxiYXI9ODIxNDtlLmRibHZlcnRpY2FsbGluZWFib3ZlY21iPTc4MjtlLmRib3BvbW9mbz0xMjU1MztlLmRic3F1YXJlPTEzMjU2O2UuZGNhcm9uPTI3MTtlLmRjZWRpbGxhPTc2OTc7ZS5kY2lyY2xlPTk0Mjc7ZS5kY2lyY3VtZmxleGJlbG93PTc2OTk7ZS5kY3JvYXQ9MjczO2UuZGRhYmVuZ2FsaT0yNDY1O2UuZGRhZGV2YT0yMzM3O2UuZGRhZ3VqYXJhdGk9MjcyMTtlLmRkYWd1cm11a2hpPTI1OTM7ZS5kZGFsYXJhYmljPTE2NzI7ZS5kZGFsZmluYWxhcmFiaWM9NjQzOTM7ZS5kZGRoYWRldmE9MjM5NjtlLmRkaGFiZW5nYWxpPTI0NjY7ZS5kZGhhZGV2YT0yMzM4O2UuZGRoYWd1amFyYXRpPTI3MjI7ZS5kZGhhZ3VybXVraGk9MjU5NDtlLmRkb3RhY2NlbnQ9NzY5MTtlLmRkb3RiZWxvdz03NjkzO2UuZGVjaW1hbHNlcGFyYXRvcmFyYWJpYz0xNjQzO2UuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW49MTY0MztlLmRlY3lyaWxsaWM9MTA3NjtlLmRlZ3JlZT0xNzY7ZS5kZWhpaGVicmV3PTE0NTM7ZS5kZWhpcmFnYW5hPTEyMzkxO2UuZGVpY29wdGljPTEwMDc7ZS5kZWthdGFrYW5hPTEyNDg3O2UuZGVsZXRlbGVmdD05MDAzO2UuZGVsZXRlcmlnaHQ9ODk5ODtlLmRlbHRhPTk0ODtlLmRlbHRhdHVybmVkPTM5NztlLmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpPTI1NTI7ZS5kZXpoPTY3NjtlLmRoYWJlbmdhbGk9MjQ3MTtlLmRoYWRldmE9MjM0MztlLmRoYWd1amFyYXRpPTI3Mjc7ZS5kaGFndXJtdWtoaT0yNTk5O2UuZGhvb2s9NTk5O2UuZGlhbHl0aWthdG9ub3M9OTAxO2UuZGlhbHl0aWthdG9ub3NjbWI9ODM2O2UuZGlhbW9uZD05ODMwO2UuZGlhbW9uZHN1aXR3aGl0ZT05ODI2O2UuZGllcmVzaXM9MTY4O2UuZGllcmVzaXNhY3V0ZT02MzE5MTtlLmRpZXJlc2lzYmVsb3djbWI9ODA0O2UuZGllcmVzaXNjbWI9Nzc2O2UuZGllcmVzaXNncmF2ZT02MzE5MjtlLmRpZXJlc2lzdG9ub3M9OTAxO2UuZGloaXJhZ2FuYT0xMjM4NjtlLmRpa2F0YWthbmE9MTI0ODI7ZS5kaXR0b21hcms9MTIyOTE7ZS5kaXZpZGU9MjQ3O2UuZGl2aWRlcz04NzM5O2UuZGl2aXNpb25zbGFzaD04NzI1O2UuZGplY3lyaWxsaWM9MTEwNjtlLmRrc2hhZGU9OTYxOTtlLmRsaW5lYmVsb3c9NzY5NTtlLmRsc3F1YXJlPTEzMjA3O2UuZG1hY3Jvbj0yNzM7ZS5kbW9ub3NwYWNlPTY1MzQ4O2UuZG5ibG9jaz05NjA0O2UuZG9jaGFkYXRoYWk9MzU5ODtlLmRvZGVrdGhhaT0zNjA0O2UuZG9oaXJhZ2FuYT0xMjM5MztlLmRva2F0YWthbmE9MTI0ODk7ZS5kb2xsYXI9MzY7ZS5kb2xsYXJpbmZlcmlvcj02MzIwMztlLmRvbGxhcm1vbm9zcGFjZT02NTI4NDtlLmRvbGxhcm9sZHN0eWxlPTYzMjY4O2UuZG9sbGFyc21hbGw9NjUxMjk7ZS5kb2xsYXJzdXBlcmlvcj02MzIwNDtlLmRvbmc9ODM2MztlLmRvcnVzcXVhcmU9MTMwOTQ7ZS5kb3RhY2NlbnQ9NzI5O2UuZG90YWNjZW50Y21iPTc3NTtlLmRvdGJlbG93Y21iPTgwMztlLmRvdGJlbG93Y29tYj04MDM7ZS5kb3RrYXRha2FuYT0xMjUzOTtlLmRvdGxlc3NpPTMwNTtlLmRvdGxlc3NqPTYzMTY2O2UuZG90bGVzc2pzdHJva2Vob29rPTY0NDtlLmRvdG1hdGg9ODkwMTtlLmRvdHRlZGNpcmNsZT05Njc2O2UuZG91YmxleW9kcGF0YWg9NjQyODc7ZS5kb3VibGV5b2RwYXRhaGhlYnJldz02NDI4NztlLmRvd250YWNrYmVsb3djbWI9Nzk4O2UuZG93bnRhY2ttb2Q9NzI1O2UuZHBhcmVuPTkzNzU7ZS5kc3VwZXJpb3I9NjMyMTE7ZS5kdGFpbD01OTg7ZS5kdG9wYmFyPTM5NjtlLmR1aGlyYWdhbmE9MTIzODk7ZS5kdWthdGFrYW5hPTEyNDg1O2UuZHo9NDk5O2UuZHphbHRvbmU9Njc1O2UuZHpjYXJvbj00NTQ7ZS5kemN1cmw9Njc3O2UuZHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OTtlLmR6ZWN5cmlsbGljPTExMDk7ZS5kemhlY3lyaWxsaWM9MTExOTtlLmU9MTAxO2UuZWFjdXRlPTIzMztlLmVhcnRoPTk3OTM7ZS5lYmVuZ2FsaT0yNDQ3O2UuZWJvcG9tb2ZvPTEyNTcyO2UuZWJyZXZlPTI3NztlLmVjYW5kcmFkZXZhPTIzMTc7ZS5lY2FuZHJhZ3VqYXJhdGk9MjcwMTtlLmVjYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzM7ZS5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NztlLmVjYXJvbj0yODM7ZS5lY2VkaWxsYWJyZXZlPTc3MDk7ZS5lY2hhcm1lbmlhbj0xMzgxO2UuZWNoeWl3bmFybWVuaWFuPTE0MTU7ZS5lY2lyY2xlPTk0Mjg7ZS5lY2lyY3VtZmxleD0yMzQ7ZS5lY2lyY3VtZmxleGFjdXRlPTc4NzE7ZS5lY2lyY3VtZmxleGJlbG93PTc3MDU7ZS5lY2lyY3VtZmxleGRvdGJlbG93PTc4Nzk7ZS5lY2lyY3VtZmxleGdyYXZlPTc4NzM7ZS5lY2lyY3VtZmxleGhvb2thYm92ZT03ODc1O2UuZWNpcmN1bWZsZXh0aWxkZT03ODc3O2UuZWN5cmlsbGljPTExMDg7ZS5lZGJsZ3JhdmU9NTE3O2UuZWRldmE9MjMxOTtlLmVkaWVyZXNpcz0yMzU7ZS5lZG90PTI3OTtlLmVkb3RhY2NlbnQ9Mjc5O2UuZWRvdGJlbG93PTc4NjU7ZS5lZWd1cm11a2hpPTI1NzU7ZS5lZW1hdHJhZ3VybXVraGk9MjYzMTtlLmVmY3lyaWxsaWM9MTA5MjtlLmVncmF2ZT0yMzI7ZS5lZ3VqYXJhdGk9MjcwMztlLmVoYXJtZW5pYW49MTM4MztlLmVoYm9wb21vZm89MTI1NzM7ZS5laGlyYWdhbmE9MTIzNjA7ZS5laG9va2Fib3ZlPTc4Njc7ZS5laWJvcG9tb2ZvPTEyNTc1O2UuZWlnaHQ9NTY7ZS5laWdodGFyYWJpYz0xNjQwO2UuZWlnaHRiZW5nYWxpPTI1NDI7ZS5laWdodGNpcmNsZT05MzE5O2UuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI5O2UuZWlnaHRkZXZhPTI0MTQ7ZS5laWdodGVlbmNpcmNsZT05MzI5O2UuZWlnaHRlZW5wYXJlbj05MzQ5O2UuZWlnaHRlZW5wZXJpb2Q9OTM2OTtlLmVpZ2h0Z3VqYXJhdGk9Mjc5ODtlLmVpZ2h0Z3VybXVraGk9MjY3MDtlLmVpZ2h0aGFja2FyYWJpYz0xNjQwO2UuZWlnaHRoYW5nemhvdT0xMjMyODtlLmVpZ2h0aG5vdGViZWFtZWQ9OTgzNTtlLmVpZ2h0aWRlb2dyYXBoaWNwYXJlbj0xMjgzOTtlLmVpZ2h0aW5mZXJpb3I9ODMyODtlLmVpZ2h0bW9ub3NwYWNlPTY1MzA0O2UuZWlnaHRvbGRzdHlsZT02MzI4ODtlLmVpZ2h0cGFyZW49OTMzOTtlLmVpZ2h0cGVyaW9kPTkzNTk7ZS5laWdodHBlcnNpYW49MTc4NDtlLmVpZ2h0cm9tYW49ODU2NztlLmVpZ2h0c3VwZXJpb3I9ODMxMjtlLmVpZ2h0dGhhaT0zNjcyO2UuZWludmVydGVkYnJldmU9NTE5O2UuZWlvdGlmaWVkY3lyaWxsaWM9MTEyNTtlLmVrYXRha2FuYT0xMjQ1NjtlLmVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NjtlLmVrb25rYXJndXJtdWtoaT0yNjc2O2UuZWtvcmVhbj0xMjYyODtlLmVsY3lyaWxsaWM9MTA4MztlLmVsZW1lbnQ9ODcxMjtlLmVsZXZlbmNpcmNsZT05MzIyO2UuZWxldmVucGFyZW49OTM0MjtlLmVsZXZlbnBlcmlvZD05MzYyO2UuZWxldmVucm9tYW49ODU3MDtlLmVsbGlwc2lzPTgyMzA7ZS5lbGxpcHNpc3ZlcnRpY2FsPTg5NDI7ZS5lbWFjcm9uPTI3NTtlLmVtYWNyb25hY3V0ZT03NzAzO2UuZW1hY3JvbmdyYXZlPTc3MDE7ZS5lbWN5cmlsbGljPTEwODQ7ZS5lbWRhc2g9ODIxMjtlLmVtZGFzaHZlcnRpY2FsPTY1MDczO2UuZW1vbm9zcGFjZT02NTM0OTtlLmVtcGhhc2lzbWFya2FybWVuaWFuPTEzNzE7ZS5lbXB0eXNldD04NzA5O2UuZW5ib3BvbW9mbz0xMjU3OTtlLmVuY3lyaWxsaWM9MTA4NTtlLmVuZGFzaD04MjExO2UuZW5kYXNodmVydGljYWw9NjUwNzQ7ZS5lbmRlc2NlbmRlcmN5cmlsbGljPTExODc7ZS5lbmc9MzMxO2UuZW5nYm9wb21vZm89MTI1ODE7ZS5lbmdoZWN5cmlsbGljPTExODk7ZS5lbmhvb2tjeXJpbGxpYz0xMjI0O2UuZW5zcGFjZT04MTk0O2UuZW9nb25laz0yODE7ZS5lb2tvcmVhbj0xMjYyNztlLmVvcGVuPTYwMztlLmVvcGVuY2xvc2VkPTY2NjtlLmVvcGVucmV2ZXJzZWQ9NjA0O2UuZW9wZW5yZXZlcnNlZGNsb3NlZD02MDY7ZS5lb3BlbnJldmVyc2VkaG9vaz02MDU7ZS5lcGFyZW49OTM3NjtlLmVwc2lsb249OTQ5O2UuZXBzaWxvbnRvbm9zPTk0MTtlLmVxdWFsPTYxO2UuZXF1YWxtb25vc3BhY2U9NjUzMDk7ZS5lcXVhbHNtYWxsPTY1MTI2O2UuZXF1YWxzdXBlcmlvcj04MzE2O2UuZXF1aXZhbGVuY2U9ODgwMTtlLmVyYm9wb21vZm89MTI1ODI7ZS5lcmN5cmlsbGljPTEwODg7ZS5lcmV2ZXJzZWQ9NjAwO2UuZXJldmVyc2VkY3lyaWxsaWM9MTEwMTtlLmVzY3lyaWxsaWM9MTA4OTtlLmVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NTtlLmVzaD02NDM7ZS5lc2hjdXJsPTY0NjtlLmVzaG9ydGRldmE9MjMxODtlLmVzaG9ydHZvd2Vsc2lnbmRldmE9MjM3NDtlLmVzaHJldmVyc2VkbG9vcD00MjY7ZS5lc2hzcXVhdHJldmVyc2VkPTY0NTtlLmVzbWFsbGhpcmFnYW5hPTEyMzU5O2UuZXNtYWxsa2F0YWthbmE9MTI0NTU7ZS5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NjtlLmVzdGltYXRlZD04NDk0O2UuZXN1cGVyaW9yPTYzMjEyO2UuZXRhPTk1MTtlLmV0YXJtZW5pYW49MTM4NDtlLmV0YXRvbm9zPTk0MjtlLmV0aD0yNDA7ZS5ldGlsZGU9Nzg2OTtlLmV0aWxkZWJlbG93PTc3MDc7ZS5ldG5haHRhZm91a2hoZWJyZXc9MTQyNTtlLmV0bmFodGFmb3VraGxlZnRoZWJyZXc9MTQyNTtlLmV0bmFodGFoZWJyZXc9MTQyNTtlLmV0bmFodGFsZWZ0aGVicmV3PTE0MjU7ZS5ldHVybmVkPTQ3NztlLmV1a29yZWFuPTEyNjQxO2UuZXVybz04MzY0O2UuZXZvd2Vsc2lnbmJlbmdhbGk9MjUwMztlLmV2b3dlbHNpZ25kZXZhPTIzNzU7ZS5ldm93ZWxzaWduZ3VqYXJhdGk9Mjc1OTtlLmV4Y2xhbT0zMztlLmV4Y2xhbWFybWVuaWFuPTEzNzI7ZS5leGNsYW1kYmw9ODI1MjtlLmV4Y2xhbWRvd249MTYxO2UuZXhjbGFtZG93bnNtYWxsPTYzMzkzO2UuZXhjbGFtbW9ub3NwYWNlPTY1MjgxO2UuZXhjbGFtc21hbGw9NjMyNjU7ZS5leGlzdGVudGlhbD04NzA3O2UuZXpoPTY1ODtlLmV6aGNhcm9uPTQ5NTtlLmV6aGN1cmw9NjU5O2UuZXpocmV2ZXJzZWQ9NDQxO2UuZXpodGFpbD00NDI7ZS5mPTEwMjtlLmZhZGV2YT0yMzk4O2UuZmFndXJtdWtoaT0yNjU0O2UuZmFocmVuaGVpdD04NDU3O2UuZmF0aGFhcmFiaWM9MTYxNDtlLmZhdGhhbG93YXJhYmljPTE2MTQ7ZS5mYXRoYXRhbmFyYWJpYz0xNjExO2UuZmJvcG9tb2ZvPTEyNTUyO2UuZmNpcmNsZT05NDI5O2UuZmRvdGFjY2VudD03NzExO2UuZmVoYXJhYmljPTE2MDE7ZS5mZWhhcm1lbmlhbj0xNDE0O2UuZmVoZmluYWxhcmFiaWM9NjUyMzQ7ZS5mZWhpbml0aWFsYXJhYmljPTY1MjM1O2UuZmVobWVkaWFsYXJhYmljPTY1MjM2O2UuZmVpY29wdGljPTk5NztlLmZlbWFsZT05NzkyO2UuZmY9NjQyNTY7ZS5mX2Y9NjQyNTY7ZS5mZmk9NjQyNTk7ZS5mX2ZfaT02NDI1OTtlLmZmbD02NDI2MDtlLmZfZl9sPTY0MjYwO2UuZmk9NjQyNTc7ZS5mX2k9NjQyNTc7ZS5maWZ0ZWVuY2lyY2xlPTkzMjY7ZS5maWZ0ZWVucGFyZW49OTM0NjtlLmZpZnRlZW5wZXJpb2Q9OTM2NjtlLmZpZ3VyZWRhc2g9ODIxMDtlLmZpbGxlZGJveD05NjMyO2UuZmlsbGVkcmVjdD05NjQ0O2UuZmluYWxrYWY9MTQ5ODtlLmZpbmFsa2FmZGFnZXNoPTY0MzE0O2UuZmluYWxrYWZkYWdlc2hoZWJyZXc9NjQzMTQ7ZS5maW5hbGthZmhlYnJldz0xNDk4O2UuZmluYWxtZW09MTUwMTtlLmZpbmFsbWVtaGVicmV3PTE1MDE7ZS5maW5hbG51bj0xNTAzO2UuZmluYWxudW5oZWJyZXc9MTUwMztlLmZpbmFscGU9MTUwNztlLmZpbmFscGVoZWJyZXc9MTUwNztlLmZpbmFsdHNhZGk9MTUwOTtlLmZpbmFsdHNhZGloZWJyZXc9MTUwOTtlLmZpcnN0dG9uZWNoaW5lc2U9NzEzO2UuZmlzaGV5ZT05NjczO2UuZml0YWN5cmlsbGljPTExMzk7ZS5maXZlPTUzO2UuZml2ZWFyYWJpYz0xNjM3O2UuZml2ZWJlbmdhbGk9MjUzOTtlLmZpdmVjaXJjbGU9OTMxNjtlLmZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI2O2UuZml2ZWRldmE9MjQxMTtlLmZpdmVlaWdodGhzPTg1NDE7ZS5maXZlZ3VqYXJhdGk9Mjc5NTtlLmZpdmVndXJtdWtoaT0yNjY3O2UuZml2ZWhhY2thcmFiaWM9MTYzNztlLmZpdmVoYW5nemhvdT0xMjMyNTtlLmZpdmVpZGVvZ3JhcGhpY3BhcmVuPTEyODM2O2UuZml2ZWluZmVyaW9yPTgzMjU7ZS5maXZlbW9ub3NwYWNlPTY1MzAxO2UuZml2ZW9sZHN0eWxlPTYzMjg1O2UuZml2ZXBhcmVuPTkzMzY7ZS5maXZlcGVyaW9kPTkzNTY7ZS5maXZlcGVyc2lhbj0xNzgxO2UuZml2ZXJvbWFuPTg1NjQ7ZS5maXZlc3VwZXJpb3I9ODMwOTtlLmZpdmV0aGFpPTM2Njk7ZS5mbD02NDI1ODtlLmZfbD02NDI1ODtlLmZsb3Jpbj00MDI7ZS5mbW9ub3NwYWNlPTY1MzUwO2UuZm1zcXVhcmU9MTMyMDk7ZS5mb2ZhbnRoYWk9MzYxNTtlLmZvZmF0aGFpPTM2MTM7ZS5mb25nbWFudGhhaT0zNjYzO2UuZm9yYWxsPTg3MDQ7ZS5mb3VyPTUyO2UuZm91cmFyYWJpYz0xNjM2O2UuZm91cmJlbmdhbGk9MjUzODtlLmZvdXJjaXJjbGU9OTMxNTtlLmZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI1O2UuZm91cmRldmE9MjQxMDtlLmZvdXJndWphcmF0aT0yNzk0O2UuZm91cmd1cm11a2hpPTI2NjY7ZS5mb3VyaGFja2FyYWJpYz0xNjM2O2UuZm91cmhhbmd6aG91PTEyMzI0O2UuZm91cmlkZW9ncmFwaGljcGFyZW49MTI4MzU7ZS5mb3VyaW5mZXJpb3I9ODMyNDtlLmZvdXJtb25vc3BhY2U9NjUzMDA7ZS5mb3VybnVtZXJhdG9yYmVuZ2FsaT0yNTUxO2UuZm91cm9sZHN0eWxlPTYzMjg0O2UuZm91cnBhcmVuPTkzMzU7ZS5mb3VycGVyaW9kPTkzNTU7ZS5mb3VycGVyc2lhbj0xNzgwO2UuZm91cnJvbWFuPTg1NjM7ZS5mb3Vyc3VwZXJpb3I9ODMwODtlLmZvdXJ0ZWVuY2lyY2xlPTkzMjU7ZS5mb3VydGVlbnBhcmVuPTkzNDU7ZS5mb3VydGVlbnBlcmlvZD05MzY1O2UuZm91cnRoYWk9MzY2ODtlLmZvdXJ0aHRvbmVjaGluZXNlPTcxNTtlLmZwYXJlbj05Mzc3O2UuZnJhY3Rpb249ODI2MDtlLmZyYW5jPTgzNTU7ZS5nPTEwMztlLmdhYmVuZ2FsaT0yNDU1O2UuZ2FjdXRlPTUwMTtlLmdhZGV2YT0yMzI3O2UuZ2FmYXJhYmljPTE3MTE7ZS5nYWZmaW5hbGFyYWJpYz02NDQwMztlLmdhZmluaXRpYWxhcmFiaWM9NjQ0MDQ7ZS5nYWZtZWRpYWxhcmFiaWM9NjQ0MDU7ZS5nYWd1amFyYXRpPTI3MTE7ZS5nYWd1cm11a2hpPTI1ODM7ZS5nYWhpcmFnYW5hPTEyMzY0O2UuZ2FrYXRha2FuYT0xMjQ2MDtlLmdhbW1hPTk0NztlLmdhbW1hbGF0aW5zbWFsbD02MTE7ZS5nYW1tYXN1cGVyaW9yPTczNjtlLmdhbmdpYWNvcHRpYz0xMDAzO2UuZ2JvcG9tb2ZvPTEyNTU3O2UuZ2JyZXZlPTI4NztlLmdjYXJvbj00ODc7ZS5nY2VkaWxsYT0yOTE7ZS5nY2lyY2xlPTk0MzA7ZS5nY2lyY3VtZmxleD0yODU7ZS5nY29tbWFhY2NlbnQ9MjkxO2UuZ2RvdD0yODk7ZS5nZG90YWNjZW50PTI4OTtlLmdlY3lyaWxsaWM9MTA3NTtlLmdlaGlyYWdhbmE9MTIzNzA7ZS5nZWthdGFrYW5hPTEyNDY2O2UuZ2VvbWV0cmljYWxseWVxdWFsPTg3ODU7ZS5nZXJlc2hhY2NlbnRoZWJyZXc9MTQzNjtlLmdlcmVzaGhlYnJldz0xNTIzO2UuZ2VyZXNobXVxZGFtaGVicmV3PTE0Mzc7ZS5nZXJtYW5kYmxzPTIyMztlLmdlcnNoYXlpbWFjY2VudGhlYnJldz0xNDM4O2UuZ2Vyc2hheWltaGVicmV3PTE1MjQ7ZS5nZXRhbWFyaz0xMjMwNztlLmdoYWJlbmdhbGk9MjQ1NjtlLmdoYWRhcm1lbmlhbj0xMzk0O2UuZ2hhZGV2YT0yMzI4O2UuZ2hhZ3VqYXJhdGk9MjcxMjtlLmdoYWd1cm11a2hpPTI1ODQ7ZS5naGFpbmFyYWJpYz0xNTk0O2UuZ2hhaW5maW5hbGFyYWJpYz02NTIzMDtlLmdoYWluaW5pdGlhbGFyYWJpYz02NTIzMTtlLmdoYWlubWVkaWFsYXJhYmljPTY1MjMyO2UuZ2hlbWlkZGxlaG9va2N5cmlsbGljPTExNzM7ZS5naGVzdHJva2VjeXJpbGxpYz0xMTcxO2UuZ2hldXB0dXJuY3lyaWxsaWM9MTE2OTtlLmdoaGFkZXZhPTIzOTQ7ZS5naGhhZ3VybXVraGk9MjY1MDtlLmdob29rPTYwODtlLmdoenNxdWFyZT0xMzIwMztlLmdpaGlyYWdhbmE9MTIzNjY7ZS5naWthdGFrYW5hPTEyNDYyO2UuZ2ltYXJtZW5pYW49MTM3OTtlLmdpbWVsPTE0OTA7ZS5naW1lbGRhZ2VzaD02NDMwNjtlLmdpbWVsZGFnZXNoaGVicmV3PTY0MzA2O2UuZ2ltZWxoZWJyZXc9MTQ5MDtlLmdqZWN5cmlsbGljPTExMDc7ZS5nbG90dGFsaW52ZXJ0ZWRzdHJva2U9NDQ2O2UuZ2xvdHRhbHN0b3A9NjYwO2UuZ2xvdHRhbHN0b3BpbnZlcnRlZD02NjI7ZS5nbG90dGFsc3RvcG1vZD03MDQ7ZS5nbG90dGFsc3RvcHJldmVyc2VkPTY2MTtlLmdsb3R0YWxzdG9wcmV2ZXJzZWRtb2Q9NzA1O2UuZ2xvdHRhbHN0b3ByZXZlcnNlZHN1cGVyaW9yPTc0MDtlLmdsb3R0YWxzdG9wc3Ryb2tlPTY3MztlLmdsb3R0YWxzdG9wc3Ryb2tlcmV2ZXJzZWQ9Njc0O2UuZ21hY3Jvbj03NzEzO2UuZ21vbm9zcGFjZT02NTM1MTtlLmdvaGlyYWdhbmE9MTIzNzI7ZS5nb2thdGFrYW5hPTEyNDY4O2UuZ3BhcmVuPTkzNzg7ZS5ncGFzcXVhcmU9MTMyMjg7ZS5ncmFkaWVudD04NzExO2UuZ3JhdmU9OTY7ZS5ncmF2ZWJlbG93Y21iPTc5MDtlLmdyYXZlY21iPTc2ODtlLmdyYXZlY29tYj03Njg7ZS5ncmF2ZWRldmE9MjM4NztlLmdyYXZlbG93bW9kPTcxODtlLmdyYXZlbW9ub3NwYWNlPTY1MzQ0O2UuZ3JhdmV0b25lY21iPTgzMjtlLmdyZWF0ZXI9NjI7ZS5ncmVhdGVyZXF1YWw9ODgwNTtlLmdyZWF0ZXJlcXVhbG9ybGVzcz04OTIzO2UuZ3JlYXRlcm1vbm9zcGFjZT02NTMxMDtlLmdyZWF0ZXJvcmVxdWl2YWxlbnQ9ODgxOTtlLmdyZWF0ZXJvcmxlc3M9ODgyMztlLmdyZWF0ZXJvdmVyZXF1YWw9ODgwNztlLmdyZWF0ZXJzbWFsbD02NTEyNTtlLmdzY3JpcHQ9NjA5O2UuZ3N0cm9rZT00ODU7ZS5ndWhpcmFnYW5hPTEyMzY4O2UuZ3VpbGxlbW90bGVmdD0xNzE7ZS5ndWlsbGVtb3RyaWdodD0xODc7ZS5ndWlsc2luZ2xsZWZ0PTgyNDk7ZS5ndWlsc2luZ2xyaWdodD04MjUwO2UuZ3VrYXRha2FuYT0xMjQ2NDtlLmd1cmFtdXNxdWFyZT0xMzA4MDtlLmd5c3F1YXJlPTEzMjU3O2UuaD0xMDQ7ZS5oYWFia2hhc2lhbmN5cmlsbGljPTExOTM7ZS5oYWFsdG9uZWFyYWJpYz0xNzI5O2UuaGFiZW5nYWxpPTI0ODk7ZS5oYWRlc2NlbmRlcmN5cmlsbGljPTEyMDM7ZS5oYWRldmE9MjM2MTtlLmhhZ3VqYXJhdGk9Mjc0NTtlLmhhZ3VybXVraGk9MjYxNztlLmhhaGFyYWJpYz0xNTgxO2UuaGFoZmluYWxhcmFiaWM9NjUxODY7ZS5oYWhpbml0aWFsYXJhYmljPTY1MTg3O2UuaGFoaXJhZ2FuYT0xMjM5OTtlLmhhaG1lZGlhbGFyYWJpYz02NTE4ODtlLmhhaXR1c3F1YXJlPTEzMDk4O2UuaGFrYXRha2FuYT0xMjQ5NTtlLmhha2F0YWthbmFoYWxmd2lkdGg9NjU0MTg7ZS5oYWxhbnRndXJtdWtoaT0yNjM3O2UuaGFtemFhcmFiaWM9MTU2OTtlLmhhbXphbG93YXJhYmljPTE1Njk7ZS5oYW5ndWxmaWxsZXI9MTI2NDQ7ZS5oYXJkc2lnbmN5cmlsbGljPTEwOTg7ZS5oYXJwb29ubGVmdGJhcmJ1cD04NjM2O2UuaGFycG9vbnJpZ2h0YmFyYnVwPTg2NDA7ZS5oYXNxdWFyZT0xMzI1ODtlLmhhdGFmcGF0YWg9MTQ1ODtlLmhhdGFmcGF0YWgxNj0xNDU4O2UuaGF0YWZwYXRhaDIzPTE0NTg7ZS5oYXRhZnBhdGFoMmY9MTQ1ODtlLmhhdGFmcGF0YWhoZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhuYXJyb3doZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWhxdWFydGVyaGVicmV3PTE0NTg7ZS5oYXRhZnBhdGFod2lkZWhlYnJldz0xNDU4O2UuaGF0YWZxYW1hdHM9MTQ1OTtlLmhhdGFmcWFtYXRzMWI9MTQ1OTtlLmhhdGFmcWFtYXRzMjg9MTQ1OTtlLmhhdGFmcWFtYXRzMzQ9MTQ1OTtlLmhhdGFmcWFtYXRzaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c25hcnJvd2hlYnJldz0xNDU5O2UuaGF0YWZxYW1hdHNxdWFydGVyaGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c3dpZGVoZWJyZXc9MTQ1OTtlLmhhdGFmc2Vnb2w9MTQ1NztlLmhhdGFmc2Vnb2wxNz0xNDU3O2UuaGF0YWZzZWdvbDI0PTE0NTc7ZS5oYXRhZnNlZ29sMzA9MTQ1NztlLmhhdGFmc2Vnb2xoZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xuYXJyb3doZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2xxdWFydGVyaGVicmV3PTE0NTc7ZS5oYXRhZnNlZ29sd2lkZWhlYnJldz0xNDU3O2UuaGJhcj0yOTU7ZS5oYm9wb21vZm89MTI1NTk7ZS5oYnJldmViZWxvdz03NzIzO2UuaGNlZGlsbGE9NzcyMTtlLmhjaXJjbGU9OTQzMTtlLmhjaXJjdW1mbGV4PTI5MztlLmhkaWVyZXNpcz03NzE5O2UuaGRvdGFjY2VudD03NzE1O2UuaGRvdGJlbG93PTc3MTc7ZS5oZT0xNDkyO2UuaGVhcnQ9OTgyOTtlLmhlYXJ0c3VpdGJsYWNrPTk4Mjk7ZS5oZWFydHN1aXR3aGl0ZT05ODI1O2UuaGVkYWdlc2g9NjQzMDg7ZS5oZWRhZ2VzaGhlYnJldz02NDMwODtlLmhlaGFsdG9uZWFyYWJpYz0xNzI5O2UuaGVoYXJhYmljPTE2MDc7ZS5oZWhlYnJldz0xNDkyO2UuaGVoZmluYWxhbHRvbmVhcmFiaWM9NjQ0MjM7ZS5oZWhmaW5hbGFsdHR3b2FyYWJpYz02NTI1ODtlLmhlaGZpbmFsYXJhYmljPTY1MjU4O2UuaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY0NDIxO2UuaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY0NDIwO2UuaGVoaW5pdGlhbGFsdG9uZWFyYWJpYz02NDQyNDtlLmhlaGluaXRpYWxhcmFiaWM9NjUyNTk7ZS5oZWhpcmFnYW5hPTEyNDA4O2UuaGVobWVkaWFsYWx0b25lYXJhYmljPTY0NDI1O2UuaGVobWVkaWFsYXJhYmljPTY1MjYwO2UuaGVpc2VpZXJhc3F1YXJlPTEzMTc5O2UuaGVrYXRha2FuYT0xMjUwNDtlLmhla2F0YWthbmFoYWxmd2lkdGg9NjU0MjE7ZS5oZWt1dGFhcnVzcXVhcmU9MTMxMTA7ZS5oZW5naG9vaz02MTU7ZS5oZXJ1dHVzcXVhcmU9MTMxMTM7ZS5oZXQ9MTQ5NTtlLmhldGhlYnJldz0xNDk1O2UuaGhvb2s9NjE0O2UuaGhvb2tzdXBlcmlvcj02ODk7ZS5oaWV1aGFjaXJjbGVrb3JlYW49MTI5MjM7ZS5oaWV1aGFwYXJlbmtvcmVhbj0xMjgyNztlLmhpZXVoY2lyY2xla29yZWFuPTEyOTA5O2UuaGlldWhrb3JlYW49MTI2MjI7ZS5oaWV1aHBhcmVua29yZWFuPTEyODEzO2UuaGloaXJhZ2FuYT0xMjQwMjtlLmhpa2F0YWthbmE9MTI0OTg7ZS5oaWthdGFrYW5haGFsZndpZHRoPTY1NDE5O2UuaGlyaXE9MTQ2MDtlLmhpcmlxMTQ9MTQ2MDtlLmhpcmlxMjE9MTQ2MDtlLmhpcmlxMmQ9MTQ2MDtlLmhpcmlxaGVicmV3PTE0NjA7ZS5oaXJpcW5hcnJvd2hlYnJldz0xNDYwO2UuaGlyaXFxdWFydGVyaGVicmV3PTE0NjA7ZS5oaXJpcXdpZGVoZWJyZXc9MTQ2MDtlLmhsaW5lYmVsb3c9NzgzMDtlLmhtb25vc3BhY2U9NjUzNTI7ZS5ob2FybWVuaWFuPTEzOTI7ZS5ob2hpcHRoYWk9MzYyNztlLmhvaGlyYWdhbmE9MTI0MTE7ZS5ob2thdGFrYW5hPTEyNTA3O2UuaG9rYXRha2FuYWhhbGZ3aWR0aD02NTQyMjtlLmhvbGFtPTE0NjU7ZS5ob2xhbTE5PTE0NjU7ZS5ob2xhbTI2PTE0NjU7ZS5ob2xhbTMyPTE0NjU7ZS5ob2xhbWhlYnJldz0xNDY1O2UuaG9sYW1uYXJyb3doZWJyZXc9MTQ2NTtlLmhvbGFtcXVhcnRlcmhlYnJldz0xNDY1O2UuaG9sYW13aWRlaGVicmV3PTE0NjU7ZS5ob25va2h1a3RoYWk9MzYzMDtlLmhvb2thYm92ZWNvbWI9Nzc3O2UuaG9va2NtYj03Nzc7ZS5ob29rcGFsYXRhbGl6ZWRiZWxvd2NtYj04MDE7ZS5ob29rcmV0cm9mbGV4YmVsb3djbWI9ODAyO2UuaG9vbnNxdWFyZT0xMzEyMjtlLmhvcmljb3B0aWM9MTAwMTtlLmhvcml6b250YWxiYXI9ODIxMztlLmhvcm5jbWI9Nzk1O2UuaG90c3ByaW5ncz05ODMyO2UuaG91c2U9ODk2MjtlLmhwYXJlbj05Mzc5O2UuaHN1cGVyaW9yPTY4ODtlLmh0dXJuZWQ9NjEzO2UuaHVoaXJhZ2FuYT0xMjQwNTtlLmh1aWl0b3NxdWFyZT0xMzEwNztlLmh1a2F0YWthbmE9MTI1MDE7ZS5odWthdGFrYW5haGFsZndpZHRoPTY1NDIwO2UuaHVuZ2FydW1sYXV0PTczMztlLmh1bmdhcnVtbGF1dGNtYj03Nzk7ZS5odj00MDU7ZS5oeXBoZW49NDU7ZS5oeXBoZW5pbmZlcmlvcj02MzIwNTtlLmh5cGhlbm1vbm9zcGFjZT02NTI5MztlLmh5cGhlbnNtYWxsPTY1MTIzO2UuaHlwaGVuc3VwZXJpb3I9NjMyMDY7ZS5oeXBoZW50d289ODIwODtlLmk9MTA1O2UuaWFjdXRlPTIzNztlLmlhY3lyaWxsaWM9MTEwMztlLmliZW5nYWxpPTI0Mzk7ZS5pYm9wb21vZm89MTI1ODM7ZS5pYnJldmU9MzAxO2UuaWNhcm9uPTQ2NDtlLmljaXJjbGU9OTQzMjtlLmljaXJjdW1mbGV4PTIzODtlLmljeXJpbGxpYz0xMTEwO2UuaWRibGdyYXZlPTUyMTtlLmlkZW9ncmFwaGVhcnRoY2lyY2xlPTEyOTQzO2UuaWRlb2dyYXBoZmlyZWNpcmNsZT0xMjkzOTtlLmlkZW9ncmFwaGljYWxsaWFuY2VwYXJlbj0xMjg2MztlLmlkZW9ncmFwaGljY2FsbHBhcmVuPTEyODU4O2UuaWRlb2dyYXBoaWNjZW50cmVjaXJjbGU9MTI5NjU7ZS5pZGVvZ3JhcGhpY2Nsb3NlPTEyMjk0O2UuaWRlb2dyYXBoaWNjb21tYT0xMjI4OTtlLmlkZW9ncmFwaGljY29tbWFsZWZ0PTY1MzgwO2UuaWRlb2dyYXBoaWNjb25ncmF0dWxhdGlvbnBhcmVuPTEyODU1O2UuaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlPTEyOTYzO2UuaWRlb2dyYXBoaWNlYXJ0aHBhcmVuPTEyODQ3O2UuaWRlb2dyYXBoaWNlbnRlcnByaXNlcGFyZW49MTI4NjE7ZS5pZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZT0xMjk1NztlLmlkZW9ncmFwaGljZmVzdGl2YWxwYXJlbj0xMjg2NDtlLmlkZW9ncmFwaGljZmluYW5jaWFsY2lyY2xlPTEyOTUwO2UuaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlbj0xMjg1NDtlLmlkZW9ncmFwaGljZmlyZXBhcmVuPTEyODQzO2UuaWRlb2dyYXBoaWNoYXZlcGFyZW49MTI4NTA7ZS5pZGVvZ3JhcGhpY2hpZ2hjaXJjbGU9MTI5NjQ7ZS5pZGVvZ3JhcGhpY2l0ZXJhdGlvbm1hcms9MTIyOTM7ZS5pZGVvZ3JhcGhpY2xhYm9yY2lyY2xlPTEyOTUyO2UuaWRlb2dyYXBoaWNsYWJvcnBhcmVuPTEyODU2O2UuaWRlb2dyYXBoaWNsZWZ0Y2lyY2xlPTEyOTY3O2UuaWRlb2dyYXBoaWNsb3djaXJjbGU9MTI5NjY7ZS5pZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlPTEyOTY5O2UuaWRlb2dyYXBoaWNtZXRhbHBhcmVuPTEyODQ2O2UuaWRlb2dyYXBoaWNtb29ucGFyZW49MTI4NDI7ZS5pZGVvZ3JhcGhpY25hbWVwYXJlbj0xMjg1MjtlLmlkZW9ncmFwaGljcGVyaW9kPTEyMjkwO2UuaWRlb2dyYXBoaWNwcmludGNpcmNsZT0xMjk1ODtlLmlkZW9ncmFwaGljcmVhY2hwYXJlbj0xMjg2NztlLmlkZW9ncmFwaGljcmVwcmVzZW50cGFyZW49MTI4NTc7ZS5pZGVvZ3JhcGhpY3Jlc291cmNlcGFyZW49MTI4NjI7ZS5pZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlPTEyOTY4O2UuaWRlb2dyYXBoaWNzZWNyZXRjaXJjbGU9MTI5NTM7ZS5pZGVvZ3JhcGhpY3NlbGZwYXJlbj0xMjg2NjtlLmlkZW9ncmFwaGljc29jaWV0eXBhcmVuPTEyODUxO2UuaWRlb2dyYXBoaWNzcGFjZT0xMjI4ODtlLmlkZW9ncmFwaGljc3BlY2lhbHBhcmVuPTEyODUzO2UuaWRlb2dyYXBoaWNzdG9ja3BhcmVuPTEyODQ5O2UuaWRlb2dyYXBoaWNzdHVkeXBhcmVuPTEyODU5O2UuaWRlb2dyYXBoaWNzdW5wYXJlbj0xMjg0ODtlLmlkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW49MTI4NjA7ZS5pZGVvZ3JhcGhpY3dhdGVycGFyZW49MTI4NDQ7ZS5pZGVvZ3JhcGhpY3dvb2RwYXJlbj0xMjg0NTtlLmlkZW9ncmFwaGljemVybz0xMjI5NTtlLmlkZW9ncmFwaG1ldGFsY2lyY2xlPTEyOTQyO2UuaWRlb2dyYXBobW9vbmNpcmNsZT0xMjkzODtlLmlkZW9ncmFwaG5hbWVjaXJjbGU9MTI5NDg7ZS5pZGVvZ3JhcGhzdW5jaXJjbGU9MTI5NDQ7ZS5pZGVvZ3JhcGh3YXRlcmNpcmNsZT0xMjk0MDtlLmlkZW9ncmFwaHdvb2RjaXJjbGU9MTI5NDE7ZS5pZGV2YT0yMzExO2UuaWRpZXJlc2lzPTIzOTtlLmlkaWVyZXNpc2FjdXRlPTc3Mjc7ZS5pZGllcmVzaXNjeXJpbGxpYz0xMjUzO2UuaWRvdGJlbG93PTc4ODM7ZS5pZWJyZXZlY3lyaWxsaWM9MTIzOTtlLmllY3lyaWxsaWM9MTA3NztlLmlldW5nYWNpcmNsZWtvcmVhbj0xMjkxNztlLmlldW5nYXBhcmVua29yZWFuPTEyODIxO2UuaWV1bmdjaXJjbGVrb3JlYW49MTI5MDM7ZS5pZXVuZ2tvcmVhbj0xMjYxNTtlLmlldW5ncGFyZW5rb3JlYW49MTI4MDc7ZS5pZ3JhdmU9MjM2O2UuaWd1amFyYXRpPTI2OTU7ZS5pZ3VybXVraGk9MjU2NztlLmloaXJhZ2FuYT0xMjM1NjtlLmlob29rYWJvdmU9Nzg4MTtlLmlpYmVuZ2FsaT0yNDQwO2UuaWljeXJpbGxpYz0xMDgwO2UuaWlkZXZhPTIzMTI7ZS5paWd1amFyYXRpPTI2OTY7ZS5paWd1cm11a2hpPTI1Njg7ZS5paW1hdHJhZ3VybXVraGk9MjYyNDtlLmlpbnZlcnRlZGJyZXZlPTUyMztlLmlpc2hvcnRjeXJpbGxpYz0xMDgxO2UuaWl2b3dlbHNpZ25iZW5nYWxpPTI0OTY7ZS5paXZvd2Vsc2lnbmRldmE9MjM2ODtlLmlpdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MjtlLmlqPTMwNztlLmlrYXRha2FuYT0xMjQ1MjtlLmlrYXRha2FuYWhhbGZ3aWR0aD02NTM5NDtlLmlrb3JlYW49MTI2NDM7ZS5pbGRlPTczMjtlLmlsdXloZWJyZXc9MTQ1MjtlLmltYWNyb249Mjk5O2UuaW1hY3JvbmN5cmlsbGljPTEyNTE7ZS5pbWFnZW9yYXBwcm94aW1hdGVseWVxdWFsPTg3ODc7ZS5pbWF0cmFndXJtdWtoaT0yNjIzO2UuaW1vbm9zcGFjZT02NTM1MztlLmluY3JlbWVudD04NzEwO2UuaW5maW5pdHk9ODczNDtlLmluaWFybWVuaWFuPTEzODc7ZS5pbnRlZ3JhbD04NzQ3O2UuaW50ZWdyYWxib3R0b209ODk5MztlLmludGVncmFsYnQ9ODk5MztlLmludGVncmFsZXg9NjM3MzM7ZS5pbnRlZ3JhbHRvcD04OTkyO2UuaW50ZWdyYWx0cD04OTkyO2UuaW50ZXJzZWN0aW9uPTg3NDU7ZS5pbnRpc3F1YXJlPTEzMDYxO2UuaW52YnVsbGV0PTk2ODg7ZS5pbnZjaXJjbGU9OTY4OTtlLmludnNtaWxlZmFjZT05Nzg3O2UuaW9jeXJpbGxpYz0xMTA1O2UuaW9nb25laz0zMDM7ZS5pb3RhPTk1MztlLmlvdGFkaWVyZXNpcz05NzA7ZS5pb3RhZGllcmVzaXN0b25vcz05MTI7ZS5pb3RhbGF0aW49NjE3O2UuaW90YXRvbm9zPTk0MztlLmlwYXJlbj05MzgwO2UuaXJpZ3VybXVraGk9MjY3NDtlLmlzbWFsbGhpcmFnYW5hPTEyMzU1O2UuaXNtYWxsa2F0YWthbmE9MTI0NTE7ZS5pc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NDtlLmlzc2hhcmJlbmdhbGk9MjU1NDtlLmlzdHJva2U9NjE2O2UuaXN1cGVyaW9yPTYzMjEzO2UuaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDU7ZS5pdGVyYXRpb25rYXRha2FuYT0xMjU0MTtlLml0aWxkZT0yOTc7ZS5pdGlsZGViZWxvdz03NzI1O2UuaXVib3BvbW9mbz0xMjU4NTtlLml1Y3lyaWxsaWM9MTEwMjtlLml2b3dlbHNpZ25iZW5nYWxpPTI0OTU7ZS5pdm93ZWxzaWduZGV2YT0yMzY3O2UuaXZvd2Vsc2lnbmd1amFyYXRpPTI3NTE7ZS5pemhpdHNhY3lyaWxsaWM9MTE0MTtlLml6aGl0c2FkYmxncmF2ZWN5cmlsbGljPTExNDM7ZS5qPTEwNjtlLmphYXJtZW5pYW49MTM5MztlLmphYmVuZ2FsaT0yNDYwO2UuamFkZXZhPTIzMzI7ZS5qYWd1amFyYXRpPTI3MTY7ZS5qYWd1cm11a2hpPTI1ODg7ZS5qYm9wb21vZm89MTI1NjA7ZS5qY2Fyb249NDk2O2UuamNpcmNsZT05NDMzO2UuamNpcmN1bWZsZXg9MzA5O2UuamNyb3NzZWR0YWlsPTY2OTtlLmpkb3RsZXNzc3Ryb2tlPTYwNztlLmplY3lyaWxsaWM9MTExMjtlLmplZW1hcmFiaWM9MTU4MDtlLmplZW1maW5hbGFyYWJpYz02NTE4MjtlLmplZW1pbml0aWFsYXJhYmljPTY1MTgzO2UuamVlbW1lZGlhbGFyYWJpYz02NTE4NDtlLmplaGFyYWJpYz0xNjg4O2UuamVoZmluYWxhcmFiaWM9NjQzOTU7ZS5qaGFiZW5nYWxpPTI0NjE7ZS5qaGFkZXZhPTIzMzM7ZS5qaGFndWphcmF0aT0yNzE3O2UuamhhZ3VybXVraGk9MjU4OTtlLmpoZWhhcm1lbmlhbj0xNDAzO2UuamlzPTEyMjkyO2Uuam1vbm9zcGFjZT02NTM1NDtlLmpwYXJlbj05MzgxO2UuanN1cGVyaW9yPTY5MDtlLms9MTA3O2Uua2FiYXNoa2lyY3lyaWxsaWM9MTE4NTtlLmthYmVuZ2FsaT0yNDUzO2Uua2FjdXRlPTc3Mjk7ZS5rYWN5cmlsbGljPTEwODI7ZS5rYWRlc2NlbmRlcmN5cmlsbGljPTExNzk7ZS5rYWRldmE9MjMyNTtlLmthZj0xNDk5O2Uua2FmYXJhYmljPTE2MDM7ZS5rYWZkYWdlc2g9NjQzMTU7ZS5rYWZkYWdlc2hoZWJyZXc9NjQzMTU7ZS5rYWZmaW5hbGFyYWJpYz02NTI0MjtlLmthZmhlYnJldz0xNDk5O2Uua2FmaW5pdGlhbGFyYWJpYz02NTI0MztlLmthZm1lZGlhbGFyYWJpYz02NTI0NDtlLmthZnJhZmVoZWJyZXc9NjQzMzM7ZS5rYWd1amFyYXRpPTI3MDk7ZS5rYWd1cm11a2hpPTI1ODE7ZS5rYWhpcmFnYW5hPTEyMzYzO2Uua2Fob29rY3lyaWxsaWM9MTIyMDtlLmtha2F0YWthbmE9MTI0NTk7ZS5rYWthdGFrYW5haGFsZndpZHRoPTY1Mzk4O2Uua2FwcGE9OTU0O2Uua2FwcGFzeW1ib2xncmVlaz0xMDA4O2Uua2FweWVvdW5taWV1bWtvcmVhbj0xMjY1NztlLmthcHllb3VucGhpZXVwaGtvcmVhbj0xMjY3NjtlLmthcHllb3VucGlldXBrb3JlYW49MTI2NjQ7ZS5rYXB5ZW91bnNzYW5ncGlldXBrb3JlYW49MTI2NjU7ZS5rYXJvcmlpc3F1YXJlPTEzMDY5O2Uua2FzaGlkYWF1dG9hcmFiaWM9MTYwMDtlLmthc2hpZGFhdXRvbm9zaWRlYmVhcmluZ2FyYWJpYz0xNjAwO2Uua2FzbWFsbGthdGFrYW5hPTEyNTMzO2Uua2FzcXVhcmU9MTMxODg7ZS5rYXNyYWFyYWJpYz0xNjE2O2Uua2FzcmF0YW5hcmFiaWM9MTYxMztlLmthc3Ryb2tlY3lyaWxsaWM9MTE4MztlLmthdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGg9NjUzOTI7ZS5rYXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTE4MTtlLmtib3BvbW9mbz0xMjU1ODtlLmtjYWxzcXVhcmU9MTMxOTM7ZS5rY2Fyb249NDg5O2Uua2NlZGlsbGE9MzExO2Uua2NpcmNsZT05NDM0O2Uua2NvbW1hYWNjZW50PTMxMTtlLmtkb3RiZWxvdz03NzMxO2Uua2VoYXJtZW5pYW49MTQxMjtlLmtlaGlyYWdhbmE9MTIzNjk7ZS5rZWthdGFrYW5hPTEyNDY1O2Uua2VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMTtlLmtlbmFybWVuaWFuPTEzOTE7ZS5rZXNtYWxsa2F0YWthbmE9MTI1MzQ7ZS5rZ3JlZW5sYW5kaWM9MzEyO2Uua2hhYmVuZ2FsaT0yNDU0O2Uua2hhY3lyaWxsaWM9MTA5MztlLmtoYWRldmE9MjMyNjtlLmtoYWd1amFyYXRpPTI3MTA7ZS5raGFndXJtdWtoaT0yNTgyO2Uua2hhaGFyYWJpYz0xNTgyO2Uua2hhaGZpbmFsYXJhYmljPTY1MTkwO2Uua2hhaGluaXRpYWxhcmFiaWM9NjUxOTE7ZS5raGFobWVkaWFsYXJhYmljPTY1MTkyO2Uua2hlaWNvcHRpYz05OTk7ZS5raGhhZGV2YT0yMzkzO2Uua2hoYWd1cm11a2hpPTI2NDk7ZS5raGlldWtoYWNpcmNsZWtvcmVhbj0xMjkyMDtlLmtoaWV1a2hhcGFyZW5rb3JlYW49MTI4MjQ7ZS5raGlldWtoY2lyY2xla29yZWFuPTEyOTA2O2Uua2hpZXVraGtvcmVhbj0xMjYxOTtlLmtoaWV1a2hwYXJlbmtvcmVhbj0xMjgxMDtlLmtob2toYWl0aGFpPTM1ODY7ZS5raG9raG9udGhhaT0zNTg5O2Uua2hva2h1YXR0aGFpPTM1ODc7ZS5raG9raHdhaXRoYWk9MzU4ODtlLmtob211dHRoYWk9MzY3NTtlLmtob29rPTQwOTtlLmtob3Jha2hhbmd0aGFpPTM1OTA7ZS5raHpzcXVhcmU9MTMyMDE7ZS5raWhpcmFnYW5hPTEyMzY1O2Uua2lrYXRha2FuYT0xMjQ2MTtlLmtpa2F0YWthbmFoYWxmd2lkdGg9NjUzOTk7ZS5raXJvZ3VyYW11c3F1YXJlPTEzMDc3O2Uua2lyb21lZXRvcnVzcXVhcmU9MTMwNzg7ZS5raXJvc3F1YXJlPTEzMDc2O2Uua2l5ZW9rYWNpcmNsZWtvcmVhbj0xMjkxMDtlLmtpeWVva2FwYXJlbmtvcmVhbj0xMjgxNDtlLmtpeWVva2NpcmNsZWtvcmVhbj0xMjg5NjtlLmtpeWVva2tvcmVhbj0xMjU5MztlLmtpeWVva3BhcmVua29yZWFuPTEyODAwO2Uua2l5ZW9rc2lvc2tvcmVhbj0xMjU5NTtlLmtqZWN5cmlsbGljPTExMTY7ZS5rbGluZWJlbG93PTc3MzM7ZS5rbHNxdWFyZT0xMzIwODtlLmttY3ViZWRzcXVhcmU9MTMyMjI7ZS5rbW9ub3NwYWNlPTY1MzU1O2Uua21zcXVhcmVkc3F1YXJlPTEzMjE4O2Uua29oaXJhZ2FuYT0xMjM3MTtlLmtvaG1zcXVhcmU9MTMyNDg7ZS5rb2thaXRoYWk9MzU4NTtlLmtva2F0YWthbmE9MTI0Njc7ZS5rb2thdGFrYW5haGFsZndpZHRoPTY1NDAyO2Uua29vcG9zcXVhcmU9MTMwODY7ZS5rb3BwYWN5cmlsbGljPTExNTM7ZS5rb3JlYW5zdGFuZGFyZHN5bWJvbD0xMjkyNztlLmtvcm9uaXNjbWI9ODM1O2Uua3BhcmVuPTkzODI7ZS5rcGFzcXVhcmU9MTMyMjY7ZS5rc2ljeXJpbGxpYz0xMTM1O2Uua3RzcXVhcmU9MTMyNjM7ZS5rdHVybmVkPTY3MDtlLmt1aGlyYWdhbmE9MTIzNjc7ZS5rdWthdGFrYW5hPTEyNDYzO2Uua3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwMDtlLmt2c3F1YXJlPTEzMjQwO2Uua3dzcXVhcmU9MTMyNDY7ZS5sPTEwODtlLmxhYmVuZ2FsaT0yNDgyO2UubGFjdXRlPTMxNDtlLmxhZGV2YT0yMzU0O2UubGFndWphcmF0aT0yNzM4O2UubGFndXJtdWtoaT0yNjEwO2UubGFra2hhbmd5YW90aGFpPTM2NTM7ZS5sYW1hbGVmZmluYWxhcmFiaWM9NjUyNzY7ZS5sYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MjcyO2UubGFtYWxlZmhhbXphYWJvdmVpc29sYXRlZGFyYWJpYz02NTI3MTtlLmxhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUyNzQ7ZS5sYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljPTY1MjczO2UubGFtYWxlZmlzb2xhdGVkYXJhYmljPTY1Mjc1O2UubGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTI3MDtlLmxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjUyNjk7ZS5sYW1hcmFiaWM9MTYwNDtlLmxhbWJkYT05NTU7ZS5sYW1iZGFzdHJva2U9NDExO2UubGFtZWQ9MTUwMDtlLmxhbWVkZGFnZXNoPTY0MzE2O2UubGFtZWRkYWdlc2hoZWJyZXc9NjQzMTY7ZS5sYW1lZGhlYnJldz0xNTAwO2UubGFtZmluYWxhcmFiaWM9NjUyNDY7ZS5sYW1oYWhpbml0aWFsYXJhYmljPTY0NzE0O2UubGFtaW5pdGlhbGFyYWJpYz02NTI0NztlLmxhbWplZW1pbml0aWFsYXJhYmljPTY0NzEzO2UubGFta2hhaGluaXRpYWxhcmFiaWM9NjQ3MTU7ZS5sYW1sYW1oZWhpc29sYXRlZGFyYWJpYz02NTAxMDtlLmxhbW1lZGlhbGFyYWJpYz02NTI0ODtlLmxhbW1lZW1oYWhpbml0aWFsYXJhYmljPTY0OTA0O2UubGFtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MTY7ZS5sYXJnZWNpcmNsZT05NzExO2UubGJhcj00MTA7ZS5sYmVsdD02MjA7ZS5sYm9wb21vZm89MTI1NTY7ZS5sY2Fyb249MzE4O2UubGNlZGlsbGE9MzE2O2UubGNpcmNsZT05NDM1O2UubGNpcmN1bWZsZXhiZWxvdz03NzQxO2UubGNvbW1hYWNjZW50PTMxNjtlLmxkb3Q9MzIwO2UubGRvdGFjY2VudD0zMjA7ZS5sZG90YmVsb3c9NzczNTtlLmxkb3RiZWxvd21hY3Jvbj03NzM3O2UubGVmdGFuZ2xlYWJvdmVjbWI9Nzk0O2UubGVmdHRhY2tiZWxvd2NtYj03OTI7ZS5sZXNzPTYwO2UubGVzc2VxdWFsPTg4MDQ7ZS5sZXNzZXF1YWxvcmdyZWF0ZXI9ODkyMjtlLmxlc3Ntb25vc3BhY2U9NjUzMDg7ZS5sZXNzb3JlcXVpdmFsZW50PTg4MTg7ZS5sZXNzb3JncmVhdGVyPTg4MjI7ZS5sZXNzb3ZlcmVxdWFsPTg4MDY7ZS5sZXNzc21hbGw9NjUxMjQ7ZS5sZXpoPTYyMjtlLmxmYmxvY2s9OTYxMjtlLmxob29rcmV0cm9mbGV4PTYyMTtlLmxpcmE9ODM1NjtlLmxpd25hcm1lbmlhbj0xMzg4O2UubGo9NDU3O2UubGplY3lyaWxsaWM9MTExMztlLmxsPTYzMTY4O2UubGxhZGV2YT0yMzU1O2UubGxhZ3VqYXJhdGk9MjczOTtlLmxsaW5lYmVsb3c9NzczOTtlLmxsbGFkZXZhPTIzNTY7ZS5sbHZvY2FsaWNiZW5nYWxpPTI1Mjk7ZS5sbHZvY2FsaWNkZXZhPTI0MDE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzE7ZS5sbHZvY2FsaWN2b3dlbHNpZ25kZXZhPTI0MDM7ZS5sbWlkZGxldGlsZGU9NjE5O2UubG1vbm9zcGFjZT02NTM1NjtlLmxtc3F1YXJlPTEzMjY0O2UubG9jaHVsYXRoYWk9MzYyODtlLmxvZ2ljYWxhbmQ9ODc0MztlLmxvZ2ljYWxub3Q9MTcyO2UubG9naWNhbG5vdHJldmVyc2VkPTg5NzY7ZS5sb2dpY2Fsb3I9ODc0NDtlLmxvbGluZ3RoYWk9MzYyMTtlLmxvbmdzPTM4MztlLmxvd2xpbmVjZW50ZXJsaW5lPTY1MTAyO2UubG93bGluZWNtYj04MTg7ZS5sb3dsaW5lZGFzaGVkPTY1MTAxO2UubG96ZW5nZT05Njc0O2UubHBhcmVuPTkzODM7ZS5sc2xhc2g9MzIyO2UubHNxdWFyZT04NDY3O2UubHN1cGVyaW9yPTYzMjE0O2UubHRzaGFkZT05NjE3O2UubHV0aGFpPTM2MjI7ZS5sdm9jYWxpY2JlbmdhbGk9MjQ0NDtlLmx2b2NhbGljZGV2YT0yMzE2O2UubHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MzA7ZS5sdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMjtlLmx4c3F1YXJlPTEzMjY3O2UubT0xMDk7ZS5tYWJlbmdhbGk9MjQ3ODtlLm1hY3Jvbj0xNzU7ZS5tYWNyb25iZWxvd2NtYj04MTc7ZS5tYWNyb25jbWI9NzcyO2UubWFjcm9ubG93bW9kPTcxNztlLm1hY3Jvbm1vbm9zcGFjZT02NTUwNztlLm1hY3V0ZT03NzQzO2UubWFkZXZhPTIzNTA7ZS5tYWd1amFyYXRpPTI3MzQ7ZS5tYWd1cm11a2hpPTI2MDY7ZS5tYWhhcGFraGhlYnJldz0xNDQ0O2UubWFoYXBha2hsZWZ0aGVicmV3PTE0NDQ7ZS5tYWhpcmFnYW5hPTEyNDE0O2UubWFpY2hhdHRhd2Fsb3dsZWZ0dGhhaT02MzYzNztlLm1haWNoYXR0YXdhbG93cmlnaHR0aGFpPTYzNjM2O2UubWFpY2hhdHRhd2F0aGFpPTM2NTk7ZS5tYWljaGF0dGF3YXVwcGVybGVmdHRoYWk9NjM2MzU7ZS5tYWlla2xvd2xlZnR0aGFpPTYzNjI4O2UubWFpZWtsb3dyaWdodHRoYWk9NjM2Mjc7ZS5tYWlla3RoYWk9MzY1NjtlLm1haWVrdXBwZXJsZWZ0dGhhaT02MzYyNjtlLm1haWhhbmFrYXRsZWZ0dGhhaT02MzYyMDtlLm1haWhhbmFrYXR0aGFpPTM2MzM7ZS5tYWl0YWlraHVsZWZ0dGhhaT02MzYyNTtlLm1haXRhaWtodXRoYWk9MzY1NTtlLm1haXRob2xvd2xlZnR0aGFpPTYzNjMxO2UubWFpdGhvbG93cmlnaHR0aGFpPTYzNjMwO2UubWFpdGhvdGhhaT0zNjU3O2UubWFpdGhvdXBwZXJsZWZ0dGhhaT02MzYyOTtlLm1haXRyaWxvd2xlZnR0aGFpPTYzNjM0O2UubWFpdHJpbG93cmlnaHR0aGFpPTYzNjMzO2UubWFpdHJpdGhhaT0zNjU4O2UubWFpdHJpdXBwZXJsZWZ0dGhhaT02MzYzMjtlLm1haXlhbW9rdGhhaT0zNjU0O2UubWFrYXRha2FuYT0xMjUxMDtlLm1ha2F0YWthbmFoYWxmd2lkdGg9NjU0MjM7ZS5tYWxlPTk3OTQ7ZS5tYW5zeW9uc3F1YXJlPTEzMTI3O2UubWFxYWZoZWJyZXc9MTQ3MDtlLm1hcnM9OTc5NDtlLm1hc29yYWNpcmNsZWhlYnJldz0xNDU1O2UubWFzcXVhcmU9MTMxODc7ZS5tYm9wb21vZm89MTI1NTE7ZS5tYnNxdWFyZT0xMzI2ODtlLm1jaXJjbGU9OTQzNjtlLm1jdWJlZHNxdWFyZT0xMzIyMTtlLm1kb3RhY2NlbnQ9Nzc0NTtlLm1kb3RiZWxvdz03NzQ3O2UubWVlbWFyYWJpYz0xNjA1O2UubWVlbWZpbmFsYXJhYmljPTY1MjUwO2UubWVlbWluaXRpYWxhcmFiaWM9NjUyNTE7ZS5tZWVtbWVkaWFsYXJhYmljPTY1MjUyO2UubWVlbW1lZW1pbml0aWFsYXJhYmljPTY0NzIxO2UubWVlbW1lZW1pc29sYXRlZGFyYWJpYz02NDU4NDtlLm1lZXRvcnVzcXVhcmU9MTMxMzM7ZS5tZWhpcmFnYW5hPTEyNDE3O2UubWVpemllcmFzcXVhcmU9MTMxODI7ZS5tZWthdGFrYW5hPTEyNTEzO2UubWVrYXRha2FuYWhhbGZ3aWR0aD02NTQyNjtlLm1lbT0xNTAyO2UubWVtZGFnZXNoPTY0MzE4O2UubWVtZGFnZXNoaGVicmV3PTY0MzE4O2UubWVtaGVicmV3PTE1MDI7ZS5tZW5hcm1lbmlhbj0xMzk2O2UubWVya2hhaGVicmV3PTE0NDU7ZS5tZXJraGFrZWZ1bGFoZWJyZXc9MTQ0NjtlLm1lcmtoYWtlZnVsYWxlZnRoZWJyZXc9MTQ0NjtlLm1lcmtoYWxlZnRoZWJyZXc9MTQ0NTtlLm1ob29rPTYyNTtlLm1oenNxdWFyZT0xMzIwMjtlLm1pZGRsZWRvdGthdGFrYW5haGFsZndpZHRoPTY1MzgxO2UubWlkZG90PTE4MztlLm1pZXVtYWNpcmNsZWtvcmVhbj0xMjkxNDtlLm1pZXVtYXBhcmVua29yZWFuPTEyODE4O2UubWlldW1jaXJjbGVrb3JlYW49MTI5MDA7ZS5taWV1bWtvcmVhbj0xMjYwOTtlLm1pZXVtcGFuc2lvc2tvcmVhbj0xMjY1NjtlLm1pZXVtcGFyZW5rb3JlYW49MTI4MDQ7ZS5taWV1bXBpZXVwa29yZWFuPTEyNjU0O2UubWlldW1zaW9za29yZWFuPTEyNjU1O2UubWloaXJhZ2FuYT0xMjQxNTtlLm1pa2F0YWthbmE9MTI1MTE7ZS5taWthdGFrYW5haGFsZndpZHRoPTY1NDI0O2UubWludXM9ODcyMjtlLm1pbnVzYmVsb3djbWI9ODAwO2UubWludXNjaXJjbGU9ODg1NDtlLm1pbnVzbW9kPTcyNztlLm1pbnVzcGx1cz04NzIzO2UubWludXRlPTgyNDI7ZS5taXJpYmFhcnVzcXVhcmU9MTMxMzA7ZS5taXJpc3F1YXJlPTEzMTI5O2UubWxvbmdsZWd0dXJuZWQ9NjI0O2UubWxzcXVhcmU9MTMyMDY7ZS5tbWN1YmVkc3F1YXJlPTEzMjE5O2UubW1vbm9zcGFjZT02NTM1NztlLm1tc3F1YXJlZHNxdWFyZT0xMzIxNTtlLm1vaGlyYWdhbmE9MTI0MTg7ZS5tb2htc3F1YXJlPTEzMjQ5O2UubW9rYXRha2FuYT0xMjUxNDtlLm1va2F0YWthbmFoYWxmd2lkdGg9NjU0Mjc7ZS5tb2xzcXVhcmU9MTMyNzA7ZS5tb21hdGhhaT0zNjE3O2UubW92ZXJzc3F1YXJlPTEzMjIzO2UubW92ZXJzc3F1YXJlZHNxdWFyZT0xMzIyNDtlLm1wYXJlbj05Mzg0O2UubXBhc3F1YXJlPTEzMjI3O2UubXNzcXVhcmU9MTMyMzU7ZS5tc3VwZXJpb3I9NjMyMTU7ZS5tdHVybmVkPTYyMztlLm11PTE4MTtlLm11MT0xODE7ZS5tdWFzcXVhcmU9MTMxODY7ZS5tdWNoZ3JlYXRlcj04ODExO2UubXVjaGxlc3M9ODgxMDtlLm11ZnNxdWFyZT0xMzE5NjtlLm11Z3JlZWs9OTU2O2UubXVnc3F1YXJlPTEzMTk3O2UubXVoaXJhZ2FuYT0xMjQxNjtlLm11a2F0YWthbmE9MTI1MTI7ZS5tdWthdGFrYW5haGFsZndpZHRoPTY1NDI1O2UubXVsc3F1YXJlPTEzMjA1O2UubXVsdGlwbHk9MjE1O2UubXVtc3F1YXJlPTEzMjExO2UubXVuYWhoZWJyZXc9MTQ0MztlLm11bmFobGVmdGhlYnJldz0xNDQzO2UubXVzaWNhbG5vdGU9OTgzNDtlLm11c2ljYWxub3RlZGJsPTk4MzU7ZS5tdXNpY2ZsYXRzaWduPTk4Mzc7ZS5tdXNpY3NoYXJwc2lnbj05ODM5O2UubXVzc3F1YXJlPTEzMjM0O2UubXV2c3F1YXJlPTEzMjM4O2UubXV3c3F1YXJlPTEzMjQ0O2UubXZtZWdhc3F1YXJlPTEzMjQxO2UubXZzcXVhcmU9MTMyMzk7ZS5td21lZ2FzcXVhcmU9MTMyNDc7ZS5td3NxdWFyZT0xMzI0NTtlLm49MTEwO2UubmFiZW5nYWxpPTI0NzI7ZS5uYWJsYT04NzExO2UubmFjdXRlPTMyNDtlLm5hZGV2YT0yMzQ0O2UubmFndWphcmF0aT0yNzI4O2UubmFndXJtdWtoaT0yNjAwO2UubmFoaXJhZ2FuYT0xMjM5NDtlLm5ha2F0YWthbmE9MTI0OTA7ZS5uYWthdGFrYW5haGFsZndpZHRoPTY1NDEzO2UubmFwb3N0cm9waGU9MzI5O2UubmFzcXVhcmU9MTMxODU7ZS5uYm9wb21vZm89MTI1NTU7ZS5uYnNwYWNlPTE2MDtlLm5jYXJvbj0zMjg7ZS5uY2VkaWxsYT0zMjY7ZS5uY2lyY2xlPTk0Mzc7ZS5uY2lyY3VtZmxleGJlbG93PTc3NTU7ZS5uY29tbWFhY2NlbnQ9MzI2O2UubmRvdGFjY2VudD03NzQ5O2UubmRvdGJlbG93PTc3NTE7ZS5uZWhpcmFnYW5hPTEyMzk3O2UubmVrYXRha2FuYT0xMjQ5MztlLm5la2F0YWthbmFoYWxmd2lkdGg9NjU0MTY7ZS5uZXdzaGVxZWxzaWduPTgzNjI7ZS5uZnNxdWFyZT0xMzE5NTtlLm5nYWJlbmdhbGk9MjQ1NztlLm5nYWRldmE9MjMyOTtlLm5nYWd1amFyYXRpPTI3MTM7ZS5uZ2FndXJtdWtoaT0yNTg1O2Uubmdvbmd1dGhhaT0zNTkxO2UubmhpcmFnYW5hPTEyNDM1O2Uubmhvb2tsZWZ0PTYyNjtlLm5ob29rcmV0cm9mbGV4PTYyNztlLm5pZXVuYWNpcmNsZWtvcmVhbj0xMjkxMTtlLm5pZXVuYXBhcmVua29yZWFuPTEyODE1O2UubmlldW5jaWV1Y2tvcmVhbj0xMjU5NztlLm5pZXVuY2lyY2xla29yZWFuPTEyODk3O2UubmlldW5oaWV1aGtvcmVhbj0xMjU5ODtlLm5pZXVua29yZWFuPTEyNTk2O2UubmlldW5wYW5zaW9za29yZWFuPTEyNjQ4O2UubmlldW5wYXJlbmtvcmVhbj0xMjgwMTtlLm5pZXVuc2lvc2tvcmVhbj0xMjY0NztlLm5pZXVudGlrZXV0a29yZWFuPTEyNjQ2O2UubmloaXJhZ2FuYT0xMjM5NTtlLm5pa2F0YWthbmE9MTI0OTE7ZS5uaWthdGFrYW5haGFsZndpZHRoPTY1NDE0O2UubmlraGFoaXRsZWZ0dGhhaT02MzY0MTtlLm5pa2hhaGl0dGhhaT0zNjYxO2UubmluZT01NztlLm5pbmVhcmFiaWM9MTY0MTtlLm5pbmViZW5nYWxpPTI1NDM7ZS5uaW5lY2lyY2xlPTkzMjA7ZS5uaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEzMDtlLm5pbmVkZXZhPTI0MTU7ZS5uaW5lZ3VqYXJhdGk9Mjc5OTtlLm5pbmVndXJtdWtoaT0yNjcxO2UubmluZWhhY2thcmFiaWM9MTY0MTtlLm5pbmVoYW5nemhvdT0xMjMyOTtlLm5pbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODQwO2UubmluZWluZmVyaW9yPTgzMjk7ZS5uaW5lbW9ub3NwYWNlPTY1MzA1O2UubmluZW9sZHN0eWxlPTYzMjg5O2UubmluZXBhcmVuPTkzNDA7ZS5uaW5lcGVyaW9kPTkzNjA7ZS5uaW5lcGVyc2lhbj0xNzg1O2UubmluZXJvbWFuPTg1Njg7ZS5uaW5lc3VwZXJpb3I9ODMxMztlLm5pbmV0ZWVuY2lyY2xlPTkzMzA7ZS5uaW5ldGVlbnBhcmVuPTkzNTA7ZS5uaW5ldGVlbnBlcmlvZD05MzcwO2UubmluZXRoYWk9MzY3MztlLm5qPTQ2MDtlLm5qZWN5cmlsbGljPTExMTQ7ZS5ua2F0YWthbmE9MTI1MzE7ZS5ua2F0YWthbmFoYWxmd2lkdGg9NjU0Mzc7ZS5ubGVncmlnaHRsb25nPTQxNDtlLm5saW5lYmVsb3c9Nzc1MztlLm5tb25vc3BhY2U9NjUzNTg7ZS5ubXNxdWFyZT0xMzIxMDtlLm5uYWJlbmdhbGk9MjQ2NztlLm5uYWRldmE9MjMzOTtlLm5uYWd1amFyYXRpPTI3MjM7ZS5ubmFndXJtdWtoaT0yNTk1O2Uubm5uYWRldmE9MjM0NTtlLm5vaGlyYWdhbmE9MTIzOTg7ZS5ub2thdGFrYW5hPTEyNDk0O2Uubm9rYXRha2FuYWhhbGZ3aWR0aD02NTQxNztlLm5vbmJyZWFraW5nc3BhY2U9MTYwO2Uubm9uZW50aGFpPTM2MDM7ZS5ub251dGhhaT0zNjA5O2Uubm9vbmFyYWJpYz0xNjA2O2Uubm9vbmZpbmFsYXJhYmljPTY1MjU0O2Uubm9vbmdodW5uYWFyYWJpYz0xNzIyO2Uubm9vbmdodW5uYWZpbmFsYXJhYmljPTY0NDE1O2Uubm9vbmluaXRpYWxhcmFiaWM9NjUyNTU7ZS5ub29uamVlbWluaXRpYWxhcmFiaWM9NjQ3MjI7ZS5ub29uamVlbWlzb2xhdGVkYXJhYmljPTY0NTg3O2Uubm9vbm1lZGlhbGFyYWJpYz02NTI1NjtlLm5vb25tZWVtaW5pdGlhbGFyYWJpYz02NDcyNTtlLm5vb25tZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1OTA7ZS5ub29ubm9vbmZpbmFsYXJhYmljPTY0NjUzO2Uubm90Y29udGFpbnM9ODcxNjtlLm5vdGVsZW1lbnQ9ODcxMztlLm5vdGVsZW1lbnRvZj04NzEzO2Uubm90ZXF1YWw9ODgwMDtlLm5vdGdyZWF0ZXI9ODgxNTtlLm5vdGdyZWF0ZXJub3JlcXVhbD04ODE3O2Uubm90Z3JlYXRlcm5vcmxlc3M9ODgyNTtlLm5vdGlkZW50aWNhbD04ODAyO2Uubm90bGVzcz04ODE0O2Uubm90bGVzc25vcmVxdWFsPTg4MTY7ZS5ub3RwYXJhbGxlbD04NzQyO2Uubm90cHJlY2VkZXM9ODgzMjtlLm5vdHN1YnNldD04ODM2O2Uubm90c3VjY2VlZHM9ODgzMztlLm5vdHN1cGVyc2V0PTg4Mzc7ZS5ub3dhcm1lbmlhbj0xMzk4O2UubnBhcmVuPTkzODU7ZS5uc3NxdWFyZT0xMzIzMztlLm5zdXBlcmlvcj04MzE5O2UubnRpbGRlPTI0MTtlLm51PTk1NztlLm51aGlyYWdhbmE9MTIzOTY7ZS5udWthdGFrYW5hPTEyNDkyO2UubnVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNTtlLm51a3RhYmVuZ2FsaT0yNDkyO2UubnVrdGFkZXZhPTIzNjQ7ZS5udWt0YWd1amFyYXRpPTI3NDg7ZS5udWt0YWd1cm11a2hpPTI2MjA7ZS5udW1iZXJzaWduPTM1O2UubnVtYmVyc2lnbm1vbm9zcGFjZT02NTI4MztlLm51bWJlcnNpZ25zbWFsbD02NTExOTtlLm51bWVyYWxzaWduZ3JlZWs9ODg0O2UubnVtZXJhbHNpZ25sb3dlcmdyZWVrPTg4NTtlLm51bWVybz04NDcwO2UubnVuPTE1MDQ7ZS5udW5kYWdlc2g9NjQzMjA7ZS5udW5kYWdlc2hoZWJyZXc9NjQzMjA7ZS5udW5oZWJyZXc9MTUwNDtlLm52c3F1YXJlPTEzMjM3O2UubndzcXVhcmU9MTMyNDM7ZS5ueWFiZW5nYWxpPTI0NjI7ZS5ueWFkZXZhPTIzMzQ7ZS5ueWFndWphcmF0aT0yNzE4O2UubnlhZ3VybXVraGk9MjU5MDtlLm89MTExO2Uub2FjdXRlPTI0MztlLm9hbmd0aGFpPTM2Mjk7ZS5vYmFycmVkPTYyOTtlLm9iYXJyZWRjeXJpbGxpYz0xMjU3O2Uub2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM9MTI1OTtlLm9iZW5nYWxpPTI0NTE7ZS5vYm9wb21vZm89MTI1NzE7ZS5vYnJldmU9MzM1O2Uub2NhbmRyYWRldmE9MjMyMTtlLm9jYW5kcmFndWphcmF0aT0yNzA1O2Uub2NhbmRyYXZvd2Vsc2lnbmRldmE9MjM3NztlLm9jYW5kcmF2b3dlbHNpZ25ndWphcmF0aT0yNzYxO2Uub2Nhcm9uPTQ2NjtlLm9jaXJjbGU9OTQzODtlLm9jaXJjdW1mbGV4PTI0NDtlLm9jaXJjdW1mbGV4YWN1dGU9Nzg4OTtlLm9jaXJjdW1mbGV4ZG90YmVsb3c9Nzg5NztlLm9jaXJjdW1mbGV4Z3JhdmU9Nzg5MTtlLm9jaXJjdW1mbGV4aG9va2Fib3ZlPTc4OTM7ZS5vY2lyY3VtZmxleHRpbGRlPTc4OTU7ZS5vY3lyaWxsaWM9MTA4NjtlLm9kYmxhY3V0ZT0zMzc7ZS5vZGJsZ3JhdmU9NTI1O2Uub2RldmE9MjMyMztlLm9kaWVyZXNpcz0yNDY7ZS5vZGllcmVzaXNjeXJpbGxpYz0xMjU1O2Uub2RvdGJlbG93PTc4ODU7ZS5vZT0zMzk7ZS5vZWtvcmVhbj0xMjYzNDtlLm9nb25laz03MzE7ZS5vZ29uZWtjbWI9ODA4O2Uub2dyYXZlPTI0MjtlLm9ndWphcmF0aT0yNzA3O2Uub2hhcm1lbmlhbj0xNDEzO2Uub2hpcmFnYW5hPTEyMzYyO2Uub2hvb2thYm92ZT03ODg3O2Uub2hvcm49NDE3O2Uub2hvcm5hY3V0ZT03ODk5O2Uub2hvcm5kb3RiZWxvdz03OTA3O2Uub2hvcm5ncmF2ZT03OTAxO2Uub2hvcm5ob29rYWJvdmU9NzkwMztlLm9ob3JudGlsZGU9NzkwNTtlLm9odW5nYXJ1bWxhdXQ9MzM3O2Uub2k9NDE5O2Uub2ludmVydGVkYnJldmU9NTI3O2Uub2thdGFrYW5hPTEyNDU4O2Uub2thdGFrYW5haGFsZndpZHRoPTY1Mzk3O2Uub2tvcmVhbj0xMjYzMTtlLm9sZWhlYnJldz0xNDUxO2Uub21hY3Jvbj0zMzM7ZS5vbWFjcm9uYWN1dGU9Nzc2MztlLm9tYWNyb25ncmF2ZT03NzYxO2Uub21kZXZhPTIzODQ7ZS5vbWVnYT05Njk7ZS5vbWVnYTE9OTgyO2Uub21lZ2FjeXJpbGxpYz0xMTIxO2Uub21lZ2FsYXRpbmNsb3NlZD02MzE7ZS5vbWVnYXJvdW5kY3lyaWxsaWM9MTE0NztlLm9tZWdhdGl0bG9jeXJpbGxpYz0xMTQ5O2Uub21lZ2F0b25vcz05NzQ7ZS5vbWd1amFyYXRpPTI3Njg7ZS5vbWljcm9uPTk1OTtlLm9taWNyb250b25vcz05NzI7ZS5vbW9ub3NwYWNlPTY1MzU5O2Uub25lPTQ5O2Uub25lYXJhYmljPTE2MzM7ZS5vbmViZW5nYWxpPTI1MzU7ZS5vbmVjaXJjbGU9OTMxMjtlLm9uZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjI7ZS5vbmVkZXZhPTI0MDc7ZS5vbmVkb3RlbmxlYWRlcj04MjI4O2Uub25lZWlnaHRoPTg1Mzk7ZS5vbmVmaXR0ZWQ9NjMxOTY7ZS5vbmVndWphcmF0aT0yNzkxO2Uub25lZ3VybXVraGk9MjY2MztlLm9uZWhhY2thcmFiaWM9MTYzMztlLm9uZWhhbGY9MTg5O2Uub25laGFuZ3pob3U9MTIzMjE7ZS5vbmVpZGVvZ3JhcGhpY3BhcmVuPTEyODMyO2Uub25laW5mZXJpb3I9ODMyMTtlLm9uZW1vbm9zcGFjZT02NTI5NztlLm9uZW51bWVyYXRvcmJlbmdhbGk9MjU0ODtlLm9uZW9sZHN0eWxlPTYzMjgxO2Uub25lcGFyZW49OTMzMjtlLm9uZXBlcmlvZD05MzUyO2Uub25lcGVyc2lhbj0xNzc3O2Uub25lcXVhcnRlcj0xODg7ZS5vbmVyb21hbj04NTYwO2Uub25lc3VwZXJpb3I9MTg1O2Uub25ldGhhaT0zNjY1O2Uub25ldGhpcmQ9ODUzMTtlLm9vZ29uZWs9NDkxO2Uub29nb25la21hY3Jvbj00OTM7ZS5vb2d1cm11a2hpPTI1Nzk7ZS5vb21hdHJhZ3VybXVraGk9MjYzNTtlLm9vcGVuPTU5NjtlLm9wYXJlbj05Mzg2O2Uub3BlbmJ1bGxldD05NzAyO2Uub3B0aW9uPTg5OTc7ZS5vcmRmZW1pbmluZT0xNzA7ZS5vcmRtYXNjdWxpbmU9MTg2O2Uub3J0aG9nb25hbD04NzM1O2Uub3Nob3J0ZGV2YT0yMzIyO2Uub3Nob3J0dm93ZWxzaWduZGV2YT0yMzc4O2Uub3NsYXNoPTI0ODtlLm9zbGFzaGFjdXRlPTUxMTtlLm9zbWFsbGhpcmFnYW5hPTEyMzYxO2Uub3NtYWxsa2F0YWthbmE9MTI0NTc7ZS5vc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NztlLm9zdHJva2VhY3V0ZT01MTE7ZS5vc3VwZXJpb3I9NjMyMTY7ZS5vdGN5cmlsbGljPTExNTE7ZS5vdGlsZGU9MjQ1O2Uub3RpbGRlYWN1dGU9Nzc1NztlLm90aWxkZWRpZXJlc2lzPTc3NTk7ZS5vdWJvcG9tb2ZvPTEyNTc3O2Uub3ZlcmxpbmU9ODI1NDtlLm92ZXJsaW5lY2VudGVybGluZT02NTA5ODtlLm92ZXJsaW5lY21iPTc3MztlLm92ZXJsaW5lZGFzaGVkPTY1MDk3O2Uub3ZlcmxpbmVkYmx3YXZ5PTY1MTAwO2Uub3ZlcmxpbmV3YXZ5PTY1MDk5O2Uub3ZlcnNjb3JlPTE3NTtlLm92b3dlbHNpZ25iZW5nYWxpPTI1MDc7ZS5vdm93ZWxzaWduZGV2YT0yMzc5O2Uub3Zvd2Vsc2lnbmd1amFyYXRpPTI3NjM7ZS5wPTExMjtlLnBhYW1wc3NxdWFyZT0xMzE4NDtlLnBhYXNlbnRvc3F1YXJlPTEzMDk5O2UucGFiZW5nYWxpPTI0NzQ7ZS5wYWN1dGU9Nzc2NTtlLnBhZGV2YT0yMzQ2O2UucGFnZWRvd249ODY3MTtlLnBhZ2V1cD04NjcwO2UucGFndWphcmF0aT0yNzMwO2UucGFndXJtdWtoaT0yNjAyO2UucGFoaXJhZ2FuYT0xMjQwMTtlLnBhaXlhbm5vaXRoYWk9MzYzMTtlLnBha2F0YWthbmE9MTI0OTc7ZS5wYWxhdGFsaXphdGlvbmN5cmlsbGljY21iPTExNTY7ZS5wYWxvY2hrYWN5cmlsbGljPTEyMTY7ZS5wYW5zaW9za29yZWFuPTEyNjcxO2UucGFyYWdyYXBoPTE4MjtlLnBhcmFsbGVsPTg3NDE7ZS5wYXJlbmxlZnQ9NDA7ZS5wYXJlbmxlZnRhbHRvbmVhcmFiaWM9NjQ4MzA7ZS5wYXJlbmxlZnRidD02MzcyNTtlLnBhcmVubGVmdGV4PTYzNzI0O2UucGFyZW5sZWZ0aW5mZXJpb3I9ODMzMztlLnBhcmVubGVmdG1vbm9zcGFjZT02NTI4ODtlLnBhcmVubGVmdHNtYWxsPTY1MTEzO2UucGFyZW5sZWZ0c3VwZXJpb3I9ODMxNztlLnBhcmVubGVmdHRwPTYzNzIzO2UucGFyZW5sZWZ0dmVydGljYWw9NjUwNzc7ZS5wYXJlbnJpZ2h0PTQxO2UucGFyZW5yaWdodGFsdG9uZWFyYWJpYz02NDgzMTtlLnBhcmVucmlnaHRidD02MzczNjtlLnBhcmVucmlnaHRleD02MzczNTtlLnBhcmVucmlnaHRpbmZlcmlvcj04MzM0O2UucGFyZW5yaWdodG1vbm9zcGFjZT02NTI4OTtlLnBhcmVucmlnaHRzbWFsbD02NTExNDtlLnBhcmVucmlnaHRzdXBlcmlvcj04MzE4O2UucGFyZW5yaWdodHRwPTYzNzM0O2UucGFyZW5yaWdodHZlcnRpY2FsPTY1MDc4O2UucGFydGlhbGRpZmY9ODcwNjtlLnBhc2VxaGVicmV3PTE0NzI7ZS5wYXNodGFoZWJyZXc9MTQzMztlLnBhc3F1YXJlPTEzMjI1O2UucGF0YWg9MTQ2MztlLnBhdGFoMTE9MTQ2MztlLnBhdGFoMWQ9MTQ2MztlLnBhdGFoMmE9MTQ2MztlLnBhdGFoaGVicmV3PTE0NjM7ZS5wYXRhaG5hcnJvd2hlYnJldz0xNDYzO2UucGF0YWhxdWFydGVyaGVicmV3PTE0NjM7ZS5wYXRhaHdpZGVoZWJyZXc9MTQ2MztlLnBhemVyaGVicmV3PTE0NDE7ZS5wYm9wb21vZm89MTI1NTA7ZS5wY2lyY2xlPTk0Mzk7ZS5wZG90YWNjZW50PTc3Njc7ZS5wZT0xNTA4O2UucGVjeXJpbGxpYz0xMDg3O2UucGVkYWdlc2g9NjQzMjQ7ZS5wZWRhZ2VzaGhlYnJldz02NDMyNDtlLnBlZXppc3F1YXJlPTEzMTE1O2UucGVmaW5hbGRhZ2VzaGhlYnJldz02NDMyMztlLnBlaGFyYWJpYz0xNjYyO2UucGVoYXJtZW5pYW49MTQwMjtlLnBlaGVicmV3PTE1MDg7ZS5wZWhmaW5hbGFyYWJpYz02NDM0MztlLnBlaGluaXRpYWxhcmFiaWM9NjQzNDQ7ZS5wZWhpcmFnYW5hPTEyNDEwO2UucGVobWVkaWFsYXJhYmljPTY0MzQ1O2UucGVrYXRha2FuYT0xMjUwNjtlLnBlbWlkZGxlaG9va2N5cmlsbGljPTExOTE7ZS5wZXJhZmVoZWJyZXc9NjQzMzQ7ZS5wZXJjZW50PTM3O2UucGVyY2VudGFyYWJpYz0xNjQyO2UucGVyY2VudG1vbm9zcGFjZT02NTI4NTtlLnBlcmNlbnRzbWFsbD02NTEzMDtlLnBlcmlvZD00NjtlLnBlcmlvZGFybWVuaWFuPTE0MTc7ZS5wZXJpb2RjZW50ZXJlZD0xODM7ZS5wZXJpb2RoYWxmd2lkdGg9NjUzNzc7ZS5wZXJpb2RpbmZlcmlvcj02MzIwNztlLnBlcmlvZG1vbm9zcGFjZT02NTI5NDtlLnBlcmlvZHNtYWxsPTY1MTA2O2UucGVyaW9kc3VwZXJpb3I9NjMyMDg7ZS5wZXJpc3BvbWVuaWdyZWVrY21iPTgzNDtlLnBlcnBlbmRpY3VsYXI9ODg2OTtlLnBlcnRob3VzYW5kPTgyNDA7ZS5wZXNldGE9ODM1OTtlLnBmc3F1YXJlPTEzMTk0O2UucGhhYmVuZ2FsaT0yNDc1O2UucGhhZGV2YT0yMzQ3O2UucGhhZ3VqYXJhdGk9MjczMTtlLnBoYWd1cm11a2hpPTI2MDM7ZS5waGk9OTY2O2UucGhpMT05ODE7ZS5waGlldXBoYWNpcmNsZWtvcmVhbj0xMjkyMjtlLnBoaWV1cGhhcGFyZW5rb3JlYW49MTI4MjY7ZS5waGlldXBoY2lyY2xla29yZWFuPTEyOTA4O2UucGhpZXVwaGtvcmVhbj0xMjYyMTtlLnBoaWV1cGhwYXJlbmtvcmVhbj0xMjgxMjtlLnBoaWxhdGluPTYzMjtlLnBoaW50aHV0aGFpPTM2NDI7ZS5waGlzeW1ib2xncmVlaz05ODE7ZS5waG9vaz00MjE7ZS5waG9waGFudGhhaT0zNjE0O2UucGhvcGh1bmd0aGFpPTM2MTI7ZS5waG9zYW1waGFvdGhhaT0zNjE2O2UucGk9OTYwO2UucGlldXBhY2lyY2xla29yZWFuPTEyOTE1O2UucGlldXBhcGFyZW5rb3JlYW49MTI4MTk7ZS5waWV1cGNpZXVja29yZWFuPTEyNjYyO2UucGlldXBjaXJjbGVrb3JlYW49MTI5MDE7ZS5waWV1cGtpeWVva2tvcmVhbj0xMjY1ODtlLnBpZXVwa29yZWFuPTEyNjEwO2UucGlldXBwYXJlbmtvcmVhbj0xMjgwNTtlLnBpZXVwc2lvc2tpeWVva2tvcmVhbj0xMjY2MDtlLnBpZXVwc2lvc2tvcmVhbj0xMjYxMjtlLnBpZXVwc2lvc3Rpa2V1dGtvcmVhbj0xMjY2MTtlLnBpZXVwdGhpZXV0aGtvcmVhbj0xMjY2MztlLnBpZXVwdGlrZXV0a29yZWFuPTEyNjU5O2UucGloaXJhZ2FuYT0xMjQwNDtlLnBpa2F0YWthbmE9MTI1MDA7ZS5waXN5bWJvbGdyZWVrPTk4MjtlLnBpd3Jhcm1lbmlhbj0xNDExO2UucGxhbmNrb3ZlcjJwaT04NDYzO2UucGxhbmNrb3ZlcjJwaTE9ODQ2MztlLnBsdXM9NDM7ZS5wbHVzYmVsb3djbWI9Nzk5O2UucGx1c2NpcmNsZT04ODUzO2UucGx1c21pbnVzPTE3NztlLnBsdXNtb2Q9NzI2O2UucGx1c21vbm9zcGFjZT02NTI5MTtlLnBsdXNzbWFsbD02NTEyMjtlLnBsdXNzdXBlcmlvcj04MzE0O2UucG1vbm9zcGFjZT02NTM2MDtlLnBtc3F1YXJlPTEzMjcyO2UucG9oaXJhZ2FuYT0xMjQxMztlLnBvaW50aW5naW5kZXhkb3dud2hpdGU9OTc1OTtlLnBvaW50aW5naW5kZXhsZWZ0d2hpdGU9OTc1NjtlLnBvaW50aW5naW5kZXhyaWdodHdoaXRlPTk3NTg7ZS5wb2ludGluZ2luZGV4dXB3aGl0ZT05NzU3O2UucG9rYXRha2FuYT0xMjUwOTtlLnBvcGxhdGhhaT0zNjExO2UucG9zdGFsbWFyaz0xMjMwNjtlLnBvc3RhbG1hcmtmYWNlPTEyMzIwO2UucHBhcmVuPTkzODc7ZS5wcmVjZWRlcz04ODI2O2UucHJlc2NyaXB0aW9uPTg0Nzg7ZS5wcmltZW1vZD02OTc7ZS5wcmltZXJldmVyc2VkPTgyNDU7ZS5wcm9kdWN0PTg3MTk7ZS5wcm9qZWN0aXZlPTg5NjU7ZS5wcm9sb25nZWRrYW5hPTEyNTQwO2UucHJvcGVsbG9yPTg5ODQ7ZS5wcm9wZXJzdWJzZXQ9ODgzNDtlLnByb3BlcnN1cGVyc2V0PTg4MzU7ZS5wcm9wb3J0aW9uPTg3NTk7ZS5wcm9wb3J0aW9uYWw9ODczMztlLnBzaT05Njg7ZS5wc2ljeXJpbGxpYz0xMTM3O2UucHNpbGlwbmV1bWF0YWN5cmlsbGljY21iPTExNTg7ZS5wc3NxdWFyZT0xMzIzMjtlLnB1aGlyYWdhbmE9MTI0MDc7ZS5wdWthdGFrYW5hPTEyNTAzO2UucHZzcXVhcmU9MTMyMzY7ZS5wd3NxdWFyZT0xMzI0MjtlLnE9MTEzO2UucWFkZXZhPTIzOTI7ZS5xYWRtYWhlYnJldz0xNDQ4O2UucWFmYXJhYmljPTE2MDI7ZS5xYWZmaW5hbGFyYWJpYz02NTIzODtlLnFhZmluaXRpYWxhcmFiaWM9NjUyMzk7ZS5xYWZtZWRpYWxhcmFiaWM9NjUyNDA7ZS5xYW1hdHM9MTQ2NDtlLnFhbWF0czEwPTE0NjQ7ZS5xYW1hdHMxYT0xNDY0O2UucWFtYXRzMWM9MTQ2NDtlLnFhbWF0czI3PTE0NjQ7ZS5xYW1hdHMyOT0xNDY0O2UucWFtYXRzMzM9MTQ2NDtlLnFhbWF0c2RlPTE0NjQ7ZS5xYW1hdHNoZWJyZXc9MTQ2NDtlLnFhbWF0c25hcnJvd2hlYnJldz0xNDY0O2UucWFtYXRzcWF0YW5oZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFubmFycm93aGVicmV3PTE0NjQ7ZS5xYW1hdHNxYXRhbnF1YXJ0ZXJoZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFud2lkZWhlYnJldz0xNDY0O2UucWFtYXRzcXVhcnRlcmhlYnJldz0xNDY0O2UucWFtYXRzd2lkZWhlYnJldz0xNDY0O2UucWFybmV5cGFyYWhlYnJldz0xNDM5O2UucWJvcG9tb2ZvPTEyNTYxO2UucWNpcmNsZT05NDQwO2UucWhvb2s9NjcyO2UucW1vbm9zcGFjZT02NTM2MTtlLnFvZj0xNTExO2UucW9mZGFnZXNoPTY0MzI3O2UucW9mZGFnZXNoaGVicmV3PTY0MzI3O2UucW9maGVicmV3PTE1MTE7ZS5xcGFyZW49OTM4ODtlLnF1YXJ0ZXJub3RlPTk4MzM7ZS5xdWJ1dHM9MTQ2NztlLnF1YnV0czE4PTE0Njc7ZS5xdWJ1dHMyNT0xNDY3O2UucXVidXRzMzE9MTQ2NztlLnF1YnV0c2hlYnJldz0xNDY3O2UucXVidXRzbmFycm93aGVicmV3PTE0Njc7ZS5xdWJ1dHNxdWFydGVyaGVicmV3PTE0Njc7ZS5xdWJ1dHN3aWRlaGVicmV3PTE0Njc7ZS5xdWVzdGlvbj02MztlLnF1ZXN0aW9uYXJhYmljPTE1Njc7ZS5xdWVzdGlvbmFybWVuaWFuPTEzNzQ7ZS5xdWVzdGlvbmRvd249MTkxO2UucXVlc3Rpb25kb3duc21hbGw9NjM0MjM7ZS5xdWVzdGlvbmdyZWVrPTg5NDtlLnF1ZXN0aW9ubW9ub3NwYWNlPTY1MzExO2UucXVlc3Rpb25zbWFsbD02MzI5NTtlLnF1b3RlZGJsPTM0O2UucXVvdGVkYmxiYXNlPTgyMjI7ZS5xdW90ZWRibGxlZnQ9ODIyMDtlLnF1b3RlZGJsbW9ub3NwYWNlPTY1MjgyO2UucXVvdGVkYmxwcmltZT0xMjMxODtlLnF1b3RlZGJscHJpbWVyZXZlcnNlZD0xMjMxNztlLnF1b3RlZGJscmlnaHQ9ODIyMTtlLnF1b3RlbGVmdD04MjE2O2UucXVvdGVsZWZ0cmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmV2ZXJzZWQ9ODIxOTtlLnF1b3RlcmlnaHQ9ODIxNztlLnF1b3RlcmlnaHRuPTMyOTtlLnF1b3Rlc2luZ2xiYXNlPTgyMTg7ZS5xdW90ZXNpbmdsZT0zOTtlLnF1b3Rlc2luZ2xlbW9ub3NwYWNlPTY1Mjg3O2Uucj0xMTQ7ZS5yYWFybWVuaWFuPTE0MDQ7ZS5yYWJlbmdhbGk9MjQ4MDtlLnJhY3V0ZT0zNDE7ZS5yYWRldmE9MjM1MjtlLnJhZGljYWw9ODczMDtlLnJhZGljYWxleD02MzcxNztlLnJhZG92ZXJzc3F1YXJlPTEzMjMwO2UucmFkb3ZlcnNzcXVhcmVkc3F1YXJlPTEzMjMxO2UucmFkc3F1YXJlPTEzMjI5O2UucmFmZT0xNDcxO2UucmFmZWhlYnJldz0xNDcxO2UucmFndWphcmF0aT0yNzM2O2UucmFndXJtdWtoaT0yNjA4O2UucmFoaXJhZ2FuYT0xMjQyNTtlLnJha2F0YWthbmE9MTI1MjE7ZS5yYWthdGFrYW5haGFsZndpZHRoPTY1NDMxO2UucmFsb3dlcmRpYWdvbmFsYmVuZ2FsaT0yNTQ1O2UucmFtaWRkbGVkaWFnb25hbGJlbmdhbGk9MjU0NDtlLnJhbXNob3JuPTYxMjtlLnJhdGlvPTg3NTg7ZS5yYm9wb21vZm89MTI1NjY7ZS5yY2Fyb249MzQ1O2UucmNlZGlsbGE9MzQzO2UucmNpcmNsZT05NDQxO2UucmNvbW1hYWNjZW50PTM0MztlLnJkYmxncmF2ZT01Mjk7ZS5yZG90YWNjZW50PTc3Njk7ZS5yZG90YmVsb3c9Nzc3MTtlLnJkb3RiZWxvd21hY3Jvbj03NzczO2UucmVmZXJlbmNlbWFyaz04MjUxO2UucmVmbGV4c3Vic2V0PTg4Mzg7ZS5yZWZsZXhzdXBlcnNldD04ODM5O2UucmVnaXN0ZXJlZD0xNzQ7ZS5yZWdpc3RlcnNhbnM9NjM3MjA7ZS5yZWdpc3RlcnNlcmlmPTYzMTk0O2UucmVoYXJhYmljPTE1ODU7ZS5yZWhhcm1lbmlhbj0xNDA4O2UucmVoZmluYWxhcmFiaWM9NjUxOTg7ZS5yZWhpcmFnYW5hPTEyNDI4O2UucmVrYXRha2FuYT0xMjUyNDtlLnJla2F0YWthbmFoYWxmd2lkdGg9NjU0MzQ7ZS5yZXNoPTE1MTI7ZS5yZXNoZGFnZXNoaGVicmV3PTY0MzI4O2UucmVzaGhlYnJldz0xNTEyO2UucmV2ZXJzZWR0aWxkZT04NzY1O2UucmV2aWFoZWJyZXc9MTQzMTtlLnJldmlhbXVncmFzaGhlYnJldz0xNDMxO2UucmV2bG9naWNhbG5vdD04OTc2O2UucmZpc2hob29rPTYzODtlLnJmaXNoaG9va3JldmVyc2VkPTYzOTtlLnJoYWJlbmdhbGk9MjUyNTtlLnJoYWRldmE9MjM5NztlLnJobz05NjE7ZS5yaG9vaz02Mzc7ZS5yaG9va3R1cm5lZD02MzU7ZS5yaG9va3R1cm5lZHN1cGVyaW9yPTY5MztlLnJob3N5bWJvbGdyZWVrPTEwMDk7ZS5yaG90aWNob29rbW9kPTczNDtlLnJpZXVsYWNpcmNsZWtvcmVhbj0xMjkxMztlLnJpZXVsYXBhcmVua29yZWFuPTEyODE3O2UucmlldWxjaXJjbGVrb3JlYW49MTI4OTk7ZS5yaWV1bGhpZXVoa29yZWFuPTEyNjA4O2UucmlldWxraXllb2trb3JlYW49MTI2MDI7ZS5yaWV1bGtpeWVva3Npb3Nrb3JlYW49MTI2NDk7ZS5yaWV1bGtvcmVhbj0xMjYwMTtlLnJpZXVsbWlldW1rb3JlYW49MTI2MDM7ZS5yaWV1bHBhbnNpb3Nrb3JlYW49MTI2NTI7ZS5yaWV1bHBhcmVua29yZWFuPTEyODAzO2UucmlldWxwaGlldXBoa29yZWFuPTEyNjA3O2UucmlldWxwaWV1cGtvcmVhbj0xMjYwNDtlLnJpZXVscGlldXBzaW9za29yZWFuPTEyNjUxO2UucmlldWxzaW9za29yZWFuPTEyNjA1O2UucmlldWx0aGlldXRoa29yZWFuPTEyNjA2O2UucmlldWx0aWtldXRrb3JlYW49MTI2NTA7ZS5yaWV1bHllb3JpbmhpZXVoa29yZWFuPTEyNjUzO2UucmlnaHRhbmdsZT04NzM1O2UucmlnaHR0YWNrYmVsb3djbWI9NzkzO2UucmlnaHR0cmlhbmdsZT04ODk1O2UucmloaXJhZ2FuYT0xMjQyNjtlLnJpa2F0YWthbmE9MTI1MjI7ZS5yaWthdGFrYW5haGFsZndpZHRoPTY1NDMyO2UucmluZz03MzA7ZS5yaW5nYmVsb3djbWI9ODA1O2UucmluZ2NtYj03Nzg7ZS5yaW5naGFsZmxlZnQ9NzAzO2UucmluZ2hhbGZsZWZ0YXJtZW5pYW49MTM2OTtlLnJpbmdoYWxmbGVmdGJlbG93Y21iPTc5NjtlLnJpbmdoYWxmbGVmdGNlbnRlcmVkPTcyMztlLnJpbmdoYWxmcmlnaHQ9NzAyO2UucmluZ2hhbGZyaWdodGJlbG93Y21iPTgyNTtlLnJpbmdoYWxmcmlnaHRjZW50ZXJlZD03MjI7ZS5yaW52ZXJ0ZWRicmV2ZT01MzE7ZS5yaXR0b3J1c3F1YXJlPTEzMTM3O2UucmxpbmViZWxvdz03Nzc1O2UucmxvbmdsZWc9NjM2O2UucmxvbmdsZWd0dXJuZWQ9NjM0O2Uucm1vbm9zcGFjZT02NTM2MjtlLnJvaGlyYWdhbmE9MTI0Mjk7ZS5yb2thdGFrYW5hPTEyNTI1O2Uucm9rYXRha2FuYWhhbGZ3aWR0aD02NTQzNTtlLnJvcnVhdGhhaT0zNjE5O2UucnBhcmVuPTkzODk7ZS5ycmFiZW5nYWxpPTI1MjQ7ZS5ycmFkZXZhPTIzNTM7ZS5ycmFndXJtdWtoaT0yNjUyO2UucnJlaGFyYWJpYz0xNjgxO2UucnJlaGZpbmFsYXJhYmljPTY0Mzk3O2UucnJ2b2NhbGljYmVuZ2FsaT0yNTI4O2UucnJ2b2NhbGljZGV2YT0yNDAwO2UucnJ2b2NhbGljZ3VqYXJhdGk9Mjc4NDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUwMDtlLnJydm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjM3MjtlLnJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpPTI3NTY7ZS5yc3VwZXJpb3I9NjMyMTc7ZS5ydGJsb2NrPTk2MTY7ZS5ydHVybmVkPTYzMztlLnJ0dXJuZWRzdXBlcmlvcj02OTI7ZS5ydWhpcmFnYW5hPTEyNDI3O2UucnVrYXRha2FuYT0xMjUyMztlLnJ1a2F0YWthbmFoYWxmd2lkdGg9NjU0MzM7ZS5ydXBlZW1hcmtiZW5nYWxpPTI1NDY7ZS5ydXBlZXNpZ25iZW5nYWxpPTI1NDc7ZS5ydXBpYWg9NjMxOTc7ZS5ydXRoYWk9MzYyMDtlLnJ2b2NhbGljYmVuZ2FsaT0yNDQzO2UucnZvY2FsaWNkZXZhPTIzMTU7ZS5ydm9jYWxpY2d1amFyYXRpPTI2OTk7ZS5ydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjQ5OTtlLnJ2b2NhbGljdm93ZWxzaWduZGV2YT0yMzcxO2UucnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aT0yNzU1O2Uucz0xMTU7ZS5zYWJlbmdhbGk9MjQ4ODtlLnNhY3V0ZT0zNDc7ZS5zYWN1dGVkb3RhY2NlbnQ9Nzc4MTtlLnNhZGFyYWJpYz0xNTg5O2Uuc2FkZXZhPTIzNjA7ZS5zYWRmaW5hbGFyYWJpYz02NTIxMDtlLnNhZGluaXRpYWxhcmFiaWM9NjUyMTE7ZS5zYWRtZWRpYWxhcmFiaWM9NjUyMTI7ZS5zYWd1amFyYXRpPTI3NDQ7ZS5zYWd1cm11a2hpPTI2MTY7ZS5zYWhpcmFnYW5hPTEyMzczO2Uuc2FrYXRha2FuYT0xMjQ2OTtlLnNha2F0YWthbmFoYWxmd2lkdGg9NjU0MDM7ZS5zYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljPTY1MDE4O2Uuc2FtZWtoPTE1MDU7ZS5zYW1la2hkYWdlc2g9NjQzMjE7ZS5zYW1la2hkYWdlc2hoZWJyZXc9NjQzMjE7ZS5zYW1la2hoZWJyZXc9MTUwNTtlLnNhcmFhYXRoYWk9MzYzNDtlLnNhcmFhZXRoYWk9MzY0OTtlLnNhcmFhaW1haW1hbGFpdGhhaT0zNjUyO2Uuc2FyYWFpbWFpbXVhbnRoYWk9MzY1MTtlLnNhcmFhbXRoYWk9MzYzNTtlLnNhcmFhdGhhaT0zNjMyO2Uuc2FyYWV0aGFpPTM2NDg7ZS5zYXJhaWlsZWZ0dGhhaT02MzYyMjtlLnNhcmFpaXRoYWk9MzYzNztlLnNhcmFpbGVmdHRoYWk9NjM2MjE7ZS5zYXJhaXRoYWk9MzYzNjtlLnNhcmFvdGhhaT0zNjUwO2Uuc2FyYXVlZWxlZnR0aGFpPTYzNjI0O2Uuc2FyYXVlZXRoYWk9MzYzOTtlLnNhcmF1ZWxlZnR0aGFpPTYzNjIzO2Uuc2FyYXVldGhhaT0zNjM4O2Uuc2FyYXV0aGFpPTM2NDA7ZS5zYXJhdXV0aGFpPTM2NDE7ZS5zYm9wb21vZm89MTI1Njk7ZS5zY2Fyb249MzUzO2Uuc2Nhcm9uZG90YWNjZW50PTc3ODM7ZS5zY2VkaWxsYT0zNTE7ZS5zY2h3YT02MDE7ZS5zY2h3YWN5cmlsbGljPTEyNDE7ZS5zY2h3YWRpZXJlc2lzY3lyaWxsaWM9MTI0MztlLnNjaHdhaG9vaz02MDI7ZS5zY2lyY2xlPTk0NDI7ZS5zY2lyY3VtZmxleD0zNDk7ZS5zY29tbWFhY2NlbnQ9NTM3O2Uuc2RvdGFjY2VudD03Nzc3O2Uuc2RvdGJlbG93PTc3Nzk7ZS5zZG90YmVsb3dkb3RhY2NlbnQ9Nzc4NTtlLnNlYWd1bGxiZWxvd2NtYj04Mjg7ZS5zZWNvbmQ9ODI0MztlLnNlY29uZHRvbmVjaGluZXNlPTcxNDtlLnNlY3Rpb249MTY3O2Uuc2VlbmFyYWJpYz0xNTg3O2Uuc2VlbmZpbmFsYXJhYmljPTY1MjAyO2Uuc2VlbmluaXRpYWxhcmFiaWM9NjUyMDM7ZS5zZWVubWVkaWFsYXJhYmljPTY1MjA0O2Uuc2Vnb2w9MTQ2MjtlLnNlZ29sMTM9MTQ2MjtlLnNlZ29sMWY9MTQ2MjtlLnNlZ29sMmM9MTQ2MjtlLnNlZ29saGVicmV3PTE0NjI7ZS5zZWdvbG5hcnJvd2hlYnJldz0xNDYyO2Uuc2Vnb2xxdWFydGVyaGVicmV3PTE0NjI7ZS5zZWdvbHRhaGVicmV3PTE0MjY7ZS5zZWdvbHdpZGVoZWJyZXc9MTQ2MjtlLnNlaGFybWVuaWFuPTE0MDU7ZS5zZWhpcmFnYW5hPTEyMzc5O2Uuc2VrYXRha2FuYT0xMjQ3NTtlLnNla2F0YWthbmFoYWxmd2lkdGg9NjU0MDY7ZS5zZW1pY29sb249NTk7ZS5zZW1pY29sb25hcmFiaWM9MTU2MztlLnNlbWljb2xvbm1vbm9zcGFjZT02NTMwNztlLnNlbWljb2xvbnNtYWxsPTY1MTA4O2Uuc2VtaXZvaWNlZG1hcmtrYW5hPTEyNDQ0O2Uuc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoPTY1NDM5O2Uuc2VudGlzcXVhcmU9MTMwOTA7ZS5zZW50b3NxdWFyZT0xMzA5MTtlLnNldmVuPTU1O2Uuc2V2ZW5hcmFiaWM9MTYzOTtlLnNldmVuYmVuZ2FsaT0yNTQxO2Uuc2V2ZW5jaXJjbGU9OTMxODtlLnNldmVuY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyODtlLnNldmVuZGV2YT0yNDEzO2Uuc2V2ZW5laWdodGhzPTg1NDI7ZS5zZXZlbmd1amFyYXRpPTI3OTc7ZS5zZXZlbmd1cm11a2hpPTI2Njk7ZS5zZXZlbmhhY2thcmFiaWM9MTYzOTtlLnNldmVuaGFuZ3pob3U9MTIzMjc7ZS5zZXZlbmlkZW9ncmFwaGljcGFyZW49MTI4Mzg7ZS5zZXZlbmluZmVyaW9yPTgzMjc7ZS5zZXZlbm1vbm9zcGFjZT02NTMwMztlLnNldmVub2xkc3R5bGU9NjMyODc7ZS5zZXZlbnBhcmVuPTkzMzg7ZS5zZXZlbnBlcmlvZD05MzU4O2Uuc2V2ZW5wZXJzaWFuPTE3ODM7ZS5zZXZlbnJvbWFuPTg1NjY7ZS5zZXZlbnN1cGVyaW9yPTgzMTE7ZS5zZXZlbnRlZW5jaXJjbGU9OTMyODtlLnNldmVudGVlbnBhcmVuPTkzNDg7ZS5zZXZlbnRlZW5wZXJpb2Q9OTM2ODtlLnNldmVudGhhaT0zNjcxO2Uuc2Z0aHlwaGVuPTE3MztlLnNoYWFybWVuaWFuPTEzOTk7ZS5zaGFiZW5nYWxpPTI0ODY7ZS5zaGFjeXJpbGxpYz0xMDk2O2Uuc2hhZGRhYXJhYmljPTE2MTc7ZS5zaGFkZGFkYW1tYWFyYWJpYz02NDYwOTtlLnNoYWRkYWRhbW1hdGFuYXJhYmljPTY0NjA2O2Uuc2hhZGRhZmF0aGFhcmFiaWM9NjQ2MDg7ZS5zaGFkZGFrYXNyYWFyYWJpYz02NDYxMDtlLnNoYWRkYWthc3JhdGFuYXJhYmljPTY0NjA3O2Uuc2hhZGU9OTYxODtlLnNoYWRlZGFyaz05NjE5O2Uuc2hhZGVsaWdodD05NjE3O2Uuc2hhZGVtZWRpdW09OTYxODtlLnNoYWRldmE9MjM1ODtlLnNoYWd1amFyYXRpPTI3NDI7ZS5zaGFndXJtdWtoaT0yNjE0O2Uuc2hhbHNoZWxldGhlYnJldz0xNDI3O2Uuc2hib3BvbW9mbz0xMjU2NTtlLnNoY2hhY3lyaWxsaWM9MTA5NztlLnNoZWVuYXJhYmljPTE1ODg7ZS5zaGVlbmZpbmFsYXJhYmljPTY1MjA2O2Uuc2hlZW5pbml0aWFsYXJhYmljPTY1MjA3O2Uuc2hlZW5tZWRpYWxhcmFiaWM9NjUyMDg7ZS5zaGVpY29wdGljPTk5NTtlLnNoZXFlbD04MzYyO2Uuc2hlcWVsaGVicmV3PTgzNjI7ZS5zaGV2YT0xNDU2O2Uuc2hldmExMTU9MTQ1NjtlLnNoZXZhMTU9MTQ1NjtlLnNoZXZhMjI9MTQ1NjtlLnNoZXZhMmU9MTQ1NjtlLnNoZXZhaGVicmV3PTE0NTY7ZS5zaGV2YW5hcnJvd2hlYnJldz0xNDU2O2Uuc2hldmFxdWFydGVyaGVicmV3PTE0NTY7ZS5zaGV2YXdpZGVoZWJyZXc9MTQ1NjtlLnNoaGFjeXJpbGxpYz0xMjExO2Uuc2hpbWFjb3B0aWM9MTAwNTtlLnNoaW49MTUxMztlLnNoaW5kYWdlc2g9NjQzMjk7ZS5zaGluZGFnZXNoaGVicmV3PTY0MzI5O2Uuc2hpbmRhZ2VzaHNoaW5kb3Q9NjQzMDA7ZS5zaGluZGFnZXNoc2hpbmRvdGhlYnJldz02NDMwMDtlLnNoaW5kYWdlc2hzaW5kb3Q9NjQzMDE7ZS5zaGluZGFnZXNoc2luZG90aGVicmV3PTY0MzAxO2Uuc2hpbmRvdGhlYnJldz0xNDczO2Uuc2hpbmhlYnJldz0xNTEzO2Uuc2hpbnNoaW5kb3Q9NjQyOTg7ZS5zaGluc2hpbmRvdGhlYnJldz02NDI5ODtlLnNoaW5zaW5kb3Q9NjQyOTk7ZS5zaGluc2luZG90aGVicmV3PTY0Mjk5O2Uuc2hvb2s9NjQyO2Uuc2lnbWE9OTYzO2Uuc2lnbWExPTk2MjtlLnNpZ21hZmluYWw9OTYyO2Uuc2lnbWFsdW5hdGVzeW1ib2xncmVlaz0xMDEwO2Uuc2loaXJhZ2FuYT0xMjM3NTtlLnNpa2F0YWthbmE9MTI0NzE7ZS5zaWthdGFrYW5haGFsZndpZHRoPTY1NDA0O2Uuc2lsdXFoZWJyZXc9MTQ2OTtlLnNpbHVxbGVmdGhlYnJldz0xNDY5O2Uuc2ltaWxhcj04NzY0O2Uuc2luZG90aGVicmV3PTE0NzQ7ZS5zaW9zYWNpcmNsZWtvcmVhbj0xMjkxNjtlLnNpb3NhcGFyZW5rb3JlYW49MTI4MjA7ZS5zaW9zY2lldWNrb3JlYW49MTI2NzA7ZS5zaW9zY2lyY2xla29yZWFuPTEyOTAyO2Uuc2lvc2tpeWVva2tvcmVhbj0xMjY2NjtlLnNpb3Nrb3JlYW49MTI2MTM7ZS5zaW9zbmlldW5rb3JlYW49MTI2Njc7ZS5zaW9zcGFyZW5rb3JlYW49MTI4MDY7ZS5zaW9zcGlldXBrb3JlYW49MTI2Njk7ZS5zaW9zdGlrZXV0a29yZWFuPTEyNjY4O2Uuc2l4PTU0O2Uuc2l4YXJhYmljPTE2Mzg7ZS5zaXhiZW5nYWxpPTI1NDA7ZS5zaXhjaXJjbGU9OTMxNztlLnNpeGNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjc7ZS5zaXhkZXZhPTI0MTI7ZS5zaXhndWphcmF0aT0yNzk2O2Uuc2l4Z3VybXVraGk9MjY2ODtlLnNpeGhhY2thcmFiaWM9MTYzODtlLnNpeGhhbmd6aG91PTEyMzI2O2Uuc2l4aWRlb2dyYXBoaWNwYXJlbj0xMjgzNztlLnNpeGluZmVyaW9yPTgzMjY7ZS5zaXhtb25vc3BhY2U9NjUzMDI7ZS5zaXhvbGRzdHlsZT02MzI4NjtlLnNpeHBhcmVuPTkzMzc7ZS5zaXhwZXJpb2Q9OTM1NztlLnNpeHBlcnNpYW49MTc4MjtlLnNpeHJvbWFuPTg1NjU7ZS5zaXhzdXBlcmlvcj04MzEwO2Uuc2l4dGVlbmNpcmNsZT05MzI3O2Uuc2l4dGVlbmN1cnJlbmN5ZGVub21pbmF0b3JiZW5nYWxpPTI1NTM7ZS5zaXh0ZWVucGFyZW49OTM0NztlLnNpeHRlZW5wZXJpb2Q9OTM2NztlLnNpeHRoYWk9MzY3MDtlLnNsYXNoPTQ3O2Uuc2xhc2htb25vc3BhY2U9NjUyOTU7ZS5zbG9uZz0zODM7ZS5zbG9uZ2RvdGFjY2VudD03ODM1O2Uuc21pbGVmYWNlPTk3ODY7ZS5zbW9ub3NwYWNlPTY1MzYzO2Uuc29mcGFzdXFoZWJyZXc9MTQ3NTtlLnNvZnRoeXBoZW49MTczO2Uuc29mdHNpZ25jeXJpbGxpYz0xMTAwO2Uuc29oaXJhZ2FuYT0xMjM4MTtlLnNva2F0YWthbmE9MTI0Nzc7ZS5zb2thdGFrYW5haGFsZndpZHRoPTY1NDA3O2Uuc29saWR1c2xvbmdvdmVybGF5Y21iPTgyNDtlLnNvbGlkdXNzaG9ydG92ZXJsYXljbWI9ODIzO2Uuc29ydXNpdGhhaT0zNjI1O2Uuc29zYWxhdGhhaT0zNjI0O2Uuc29zb3RoYWk9MzU5NTtlLnNvc3VhdGhhaT0zNjI2O2Uuc3BhY2U9MzI7ZS5zcGFjZWhhY2thcmFiaWM9MzI7ZS5zcGFkZT05ODI0O2Uuc3BhZGVzdWl0YmxhY2s9OTgyNDtlLnNwYWRlc3VpdHdoaXRlPTk4Mjg7ZS5zcGFyZW49OTM5MDtlLnNxdWFyZWJlbG93Y21iPTgyNztlLnNxdWFyZWNjPTEzMjUyO2Uuc3F1YXJlY209MTMyMTM7ZS5zcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsPTk2NDE7ZS5zcXVhcmVob3Jpem9udGFsZmlsbD05NjM2O2Uuc3F1YXJla2c9MTMxOTk7ZS5zcXVhcmVrbT0xMzIxNDtlLnNxdWFyZWttY2FwaXRhbD0xMzI2MjtlLnNxdWFyZWxuPTEzMjY1O2Uuc3F1YXJlbG9nPTEzMjY2O2Uuc3F1YXJlbWc9MTMxOTg7ZS5zcXVhcmVtaWw9MTMyNjk7ZS5zcXVhcmVtbT0xMzIxMjtlLnNxdWFyZW1zcXVhcmVkPTEzMjE3O2Uuc3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsPTk2Mzg7ZS5zcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsPTk2Mzk7ZS5zcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsPTk2NDA7ZS5zcXVhcmV2ZXJ0aWNhbGZpbGw9OTYzNztlLnNxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2s9OTYzNTtlLnNyc3F1YXJlPTEzMjc1O2Uuc3NhYmVuZ2FsaT0yNDg3O2Uuc3NhZGV2YT0yMzU5O2Uuc3NhZ3VqYXJhdGk9Mjc0MztlLnNzYW5nY2lldWNrb3JlYW49MTI2MTc7ZS5zc2FuZ2hpZXVoa29yZWFuPTEyNjc3O2Uuc3NhbmdpZXVuZ2tvcmVhbj0xMjY3MjtlLnNzYW5na2l5ZW9ra29yZWFuPTEyNTk0O2Uuc3NhbmduaWV1bmtvcmVhbj0xMjY0NTtlLnNzYW5ncGlldXBrb3JlYW49MTI2MTE7ZS5zc2FuZ3Npb3Nrb3JlYW49MTI2MTQ7ZS5zc2FuZ3Rpa2V1dGtvcmVhbj0xMjYwMDtlLnNzdXBlcmlvcj02MzIxODtlLnN0ZXJsaW5nPTE2MztlLnN0ZXJsaW5nbW9ub3NwYWNlPTY1NTA1O2Uuc3Ryb2tlbG9uZ292ZXJsYXljbWI9ODIyO2Uuc3Ryb2tlc2hvcnRvdmVybGF5Y21iPTgyMTtlLnN1YnNldD04ODM0O2Uuc3Vic2V0bm90ZXF1YWw9ODg0MjtlLnN1YnNldG9yZXF1YWw9ODgzODtlLnN1Y2NlZWRzPTg4Mjc7ZS5zdWNodGhhdD04NzE1O2Uuc3VoaXJhZ2FuYT0xMjM3NztlLnN1a2F0YWthbmE9MTI0NzM7ZS5zdWthdGFrYW5haGFsZndpZHRoPTY1NDA1O2Uuc3VrdW5hcmFiaWM9MTYxODtlLnN1bW1hdGlvbj04NzIxO2Uuc3VuPTk3ODg7ZS5zdXBlcnNldD04ODM1O2Uuc3VwZXJzZXRub3RlcXVhbD04ODQzO2Uuc3VwZXJzZXRvcmVxdWFsPTg4Mzk7ZS5zdnNxdWFyZT0xMzI3NjtlLnN5b3V3YWVyYXNxdWFyZT0xMzE4MDtlLnQ9MTE2O2UudGFiZW5nYWxpPTI0Njg7ZS50YWNrZG93bj04ODY4O2UudGFja2xlZnQ9ODg2NztlLnRhZGV2YT0yMzQwO2UudGFndWphcmF0aT0yNzI0O2UudGFndXJtdWtoaT0yNTk2O2UudGFoYXJhYmljPTE1OTE7ZS50YWhmaW5hbGFyYWJpYz02NTIxODtlLnRhaGluaXRpYWxhcmFiaWM9NjUyMTk7ZS50YWhpcmFnYW5hPTEyMzgzO2UudGFobWVkaWFsYXJhYmljPTY1MjIwO2UudGFpc3lvdWVyYXNxdWFyZT0xMzE4MTtlLnRha2F0YWthbmE9MTI0Nzk7ZS50YWthdGFrYW5haGFsZndpZHRoPTY1NDA4O2UudGF0d2VlbGFyYWJpYz0xNjAwO2UudGF1PTk2NDtlLnRhdj0xNTE0O2UudGF2ZGFnZXM9NjQzMzA7ZS50YXZkYWdlc2g9NjQzMzA7ZS50YXZkYWdlc2hoZWJyZXc9NjQzMzA7ZS50YXZoZWJyZXc9MTUxNDtlLnRiYXI9MzU5O2UudGJvcG9tb2ZvPTEyNTU0O2UudGNhcm9uPTM1NztlLnRjY3VybD02ODA7ZS50Y2VkaWxsYT0zNTU7ZS50Y2hlaGFyYWJpYz0xNjcwO2UudGNoZWhmaW5hbGFyYWJpYz02NDM3OTtlLnRjaGVoaW5pdGlhbGFyYWJpYz02NDM4MDtlLnRjaGVobWVkaWFsYXJhYmljPTY0MzgxO2UudGNpcmNsZT05NDQzO2UudGNpcmN1bWZsZXhiZWxvdz03NzkzO2UudGNvbW1hYWNjZW50PTM1NTtlLnRkaWVyZXNpcz03ODMxO2UudGRvdGFjY2VudD03Nzg3O2UudGRvdGJlbG93PTc3ODk7ZS50ZWN5cmlsbGljPTEwOTA7ZS50ZWRlc2NlbmRlcmN5cmlsbGljPTExOTc7ZS50ZWhhcmFiaWM9MTU3ODtlLnRlaGZpbmFsYXJhYmljPTY1MTc0O2UudGVoaGFoaW5pdGlhbGFyYWJpYz02NDY3NDtlLnRlaGhhaGlzb2xhdGVkYXJhYmljPTY0NTI0O2UudGVoaW5pdGlhbGFyYWJpYz02NTE3NTtlLnRlaGlyYWdhbmE9MTIzOTA7ZS50ZWhqZWVtaW5pdGlhbGFyYWJpYz02NDY3MztlLnRlaGplZW1pc29sYXRlZGFyYWJpYz02NDUyMztlLnRlaG1hcmJ1dGFhcmFiaWM9MTU3NztlLnRlaG1hcmJ1dGFmaW5hbGFyYWJpYz02NTE3MjtlLnRlaG1lZGlhbGFyYWJpYz02NTE3NjtlLnRlaG1lZW1pbml0aWFsYXJhYmljPTY0Njc2O2UudGVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTI2O2UudGVobm9vbmZpbmFsYXJhYmljPTY0NjI3O2UudGVrYXRha2FuYT0xMjQ4NjtlLnRla2F0YWthbmFoYWxmd2lkdGg9NjU0MTE7ZS50ZWxlcGhvbmU9ODQ4MTtlLnRlbGVwaG9uZWJsYWNrPTk3NDI7ZS50ZWxpc2hhZ2Vkb2xhaGVicmV3PTE0NDA7ZS50ZWxpc2hhcWV0YW5haGVicmV3PTE0NDk7ZS50ZW5jaXJjbGU9OTMyMTtlLnRlbmlkZW9ncmFwaGljcGFyZW49MTI4NDE7ZS50ZW5wYXJlbj05MzQxO2UudGVucGVyaW9kPTkzNjE7ZS50ZW5yb21hbj04NTY5O2UudGVzaD02Nzk7ZS50ZXQ9MTQ5NjtlLnRldGRhZ2VzaD02NDMxMjtlLnRldGRhZ2VzaGhlYnJldz02NDMxMjtlLnRldGhlYnJldz0xNDk2O2UudGV0c2VjeXJpbGxpYz0xMjA1O2UudGV2aXJoZWJyZXc9MTQzNTtlLnRldmlybGVmdGhlYnJldz0xNDM1O2UudGhhYmVuZ2FsaT0yNDY5O2UudGhhZGV2YT0yMzQxO2UudGhhZ3VqYXJhdGk9MjcyNTtlLnRoYWd1cm11a2hpPTI1OTc7ZS50aGFsYXJhYmljPTE1ODQ7ZS50aGFsZmluYWxhcmFiaWM9NjUxOTY7ZS50aGFudGhha2hhdGxvd2xlZnR0aGFpPTYzNjQwO2UudGhhbnRoYWtoYXRsb3dyaWdodHRoYWk9NjM2Mzk7ZS50aGFudGhha2hhdHRoYWk9MzY2MDtlLnRoYW50aGFraGF0dXBwZXJsZWZ0dGhhaT02MzYzODtlLnRoZWhhcmFiaWM9MTU3OTtlLnRoZWhmaW5hbGFyYWJpYz02NTE3ODtlLnRoZWhpbml0aWFsYXJhYmljPTY1MTc5O2UudGhlaG1lZGlhbGFyYWJpYz02NTE4MDtlLnRoZXJlZXhpc3RzPTg3MDc7ZS50aGVyZWZvcmU9ODc1NjtlLnRoZXRhPTk1MjtlLnRoZXRhMT05Nzc7ZS50aGV0YXN5bWJvbGdyZWVrPTk3NztlLnRoaWV1dGhhY2lyY2xla29yZWFuPTEyOTIxO2UudGhpZXV0aGFwYXJlbmtvcmVhbj0xMjgyNTtlLnRoaWV1dGhjaXJjbGVrb3JlYW49MTI5MDc7ZS50aGlldXRoa29yZWFuPTEyNjIwO2UudGhpZXV0aHBhcmVua29yZWFuPTEyODExO2UudGhpcnRlZW5jaXJjbGU9OTMyNDtlLnRoaXJ0ZWVucGFyZW49OTM0NDtlLnRoaXJ0ZWVucGVyaW9kPTkzNjQ7ZS50aG9uYW5nbW9udGhvdGhhaT0zNjAxO2UudGhvb2s9NDI5O2UudGhvcGh1dGhhb3RoYWk9MzYwMjtlLnRob3JuPTI1NDtlLnRob3RoYWhhbnRoYWk9MzYwNztlLnRob3RoYW50aGFpPTM2MDA7ZS50aG90aG9uZ3RoYWk9MzYwODtlLnRob3RodW5ndGhhaT0zNjA2O2UudGhvdXNhbmRjeXJpbGxpYz0xMTU0O2UudGhvdXNhbmRzc2VwYXJhdG9yYXJhYmljPTE2NDQ7ZS50aG91c2FuZHNzZXBhcmF0b3JwZXJzaWFuPTE2NDQ7ZS50aHJlZT01MTtlLnRocmVlYXJhYmljPTE2MzU7ZS50aHJlZWJlbmdhbGk9MjUzNztlLnRocmVlY2lyY2xlPTkzMTQ7ZS50aHJlZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjQ7ZS50aHJlZWRldmE9MjQwOTtlLnRocmVlZWlnaHRocz04NTQwO2UudGhyZWVndWphcmF0aT0yNzkzO2UudGhyZWVndXJtdWtoaT0yNjY1O2UudGhyZWVoYWNrYXJhYmljPTE2MzU7ZS50aHJlZWhhbmd6aG91PTEyMzIzO2UudGhyZWVpZGVvZ3JhcGhpY3BhcmVuPTEyODM0O2UudGhyZWVpbmZlcmlvcj04MzIzO2UudGhyZWVtb25vc3BhY2U9NjUyOTk7ZS50aHJlZW51bWVyYXRvcmJlbmdhbGk9MjU1MDtlLnRocmVlb2xkc3R5bGU9NjMyODM7ZS50aHJlZXBhcmVuPTkzMzQ7ZS50aHJlZXBlcmlvZD05MzU0O2UudGhyZWVwZXJzaWFuPTE3Nzk7ZS50aHJlZXF1YXJ0ZXJzPTE5MDtlLnRocmVlcXVhcnRlcnNlbWRhc2g9NjMxOTg7ZS50aHJlZXJvbWFuPTg1NjI7ZS50aHJlZXN1cGVyaW9yPTE3OTtlLnRocmVldGhhaT0zNjY3O2UudGh6c3F1YXJlPTEzMjA0O2UudGloaXJhZ2FuYT0xMjM4NTtlLnRpa2F0YWthbmE9MTI0ODE7ZS50aWthdGFrYW5haGFsZndpZHRoPTY1NDA5O2UudGlrZXV0YWNpcmNsZWtvcmVhbj0xMjkxMjtlLnRpa2V1dGFwYXJlbmtvcmVhbj0xMjgxNjtlLnRpa2V1dGNpcmNsZWtvcmVhbj0xMjg5ODtlLnRpa2V1dGtvcmVhbj0xMjU5OTtlLnRpa2V1dHBhcmVua29yZWFuPTEyODAyO2UudGlsZGU9NzMyO2UudGlsZGViZWxvd2NtYj04MTY7ZS50aWxkZWNtYj03NzE7ZS50aWxkZWNvbWI9NzcxO2UudGlsZGVkb3VibGVjbWI9ODY0O2UudGlsZGVvcGVyYXRvcj04NzY0O2UudGlsZGVvdmVybGF5Y21iPTgyMDtlLnRpbGRldmVydGljYWxjbWI9ODMwO2UudGltZXNjaXJjbGU9ODg1NTtlLnRpcGVoYWhlYnJldz0xNDMwO2UudGlwZWhhbGVmdGhlYnJldz0xNDMwO2UudGlwcGlndXJtdWtoaT0yNjcyO2UudGl0bG9jeXJpbGxpY2NtYj0xMTU1O2UudGl3bmFybWVuaWFuPTE0MDc7ZS50bGluZWJlbG93PTc3OTE7ZS50bW9ub3NwYWNlPTY1MzY0O2UudG9hcm1lbmlhbj0xMzg1O2UudG9oaXJhZ2FuYT0xMjM5MjtlLnRva2F0YWthbmE9MTI0ODg7ZS50b2thdGFrYW5haGFsZndpZHRoPTY1NDEyO2UudG9uZWJhcmV4dHJhaGlnaG1vZD03NDE7ZS50b25lYmFyZXh0cmFsb3dtb2Q9NzQ1O2UudG9uZWJhcmhpZ2htb2Q9NzQyO2UudG9uZWJhcmxvd21vZD03NDQ7ZS50b25lYmFybWlkbW9kPTc0MztlLnRvbmVmaXZlPTQ0NTtlLnRvbmVzaXg9Mzg5O2UudG9uZXR3bz00MjQ7ZS50b25vcz05MDA7ZS50b25zcXVhcmU9MTMwOTU7ZS50b3BhdGFrdGhhaT0zNTk5O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzA4O2UudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGw9NjUxMTc7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MTtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQ9MTIzMDk7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGw9NjUxMTg7ZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwODI7ZS50b3Rhb3RoYWk9MzYwNTtlLnRwYWxhdGFsaG9vaz00Mjc7ZS50cGFyZW49OTM5MTtlLnRyYWRlbWFyaz04NDgyO2UudHJhZGVtYXJrc2Fucz02MzcyMjtlLnRyYWRlbWFya3NlcmlmPTYzMTk1O2UudHJldHJvZmxleGhvb2s9NjQ4O2UudHJpYWdkbj05NjYwO2UudHJpYWdsZj05NjY4O2UudHJpYWdydD05NjU4O2UudHJpYWd1cD05NjUwO2UudHM9Njc4O2UudHNhZGk9MTUxMDtlLnRzYWRpZGFnZXNoPTY0MzI2O2UudHNhZGlkYWdlc2hoZWJyZXc9NjQzMjY7ZS50c2FkaWhlYnJldz0xNTEwO2UudHNlY3lyaWxsaWM9MTA5NDtlLnRzZXJlPTE0NjE7ZS50c2VyZTEyPTE0NjE7ZS50c2VyZTFlPTE0NjE7ZS50c2VyZTJiPTE0NjE7ZS50c2VyZWhlYnJldz0xNDYxO2UudHNlcmVuYXJyb3doZWJyZXc9MTQ2MTtlLnRzZXJlcXVhcnRlcmhlYnJldz0xNDYxO2UudHNlcmV3aWRlaGVicmV3PTE0NjE7ZS50c2hlY3lyaWxsaWM9MTExNTtlLnRzdXBlcmlvcj02MzIxOTtlLnR0YWJlbmdhbGk9MjQ2MztlLnR0YWRldmE9MjMzNTtlLnR0YWd1amFyYXRpPTI3MTk7ZS50dGFndXJtdWtoaT0yNTkxO2UudHRlaGFyYWJpYz0xNjU3O2UudHRlaGZpbmFsYXJhYmljPTY0MzU5O2UudHRlaGluaXRpYWxhcmFiaWM9NjQzNjA7ZS50dGVobWVkaWFsYXJhYmljPTY0MzYxO2UudHRoYWJlbmdhbGk9MjQ2NDtlLnR0aGFkZXZhPTIzMzY7ZS50dGhhZ3VqYXJhdGk9MjcyMDtlLnR0aGFndXJtdWtoaT0yNTkyO2UudHR1cm5lZD02NDc7ZS50dWhpcmFnYW5hPTEyMzg4O2UudHVrYXRha2FuYT0xMjQ4NDtlLnR1a2F0YWthbmFoYWxmd2lkdGg9NjU0MTA7ZS50dXNtYWxsaGlyYWdhbmE9MTIzODc7ZS50dXNtYWxsa2F0YWthbmE9MTI0ODM7ZS50dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzOTE7ZS50d2VsdmVjaXJjbGU9OTMyMztlLnR3ZWx2ZXBhcmVuPTkzNDM7ZS50d2VsdmVwZXJpb2Q9OTM2MztlLnR3ZWx2ZXJvbWFuPTg1NzE7ZS50d2VudHljaXJjbGU9OTMzMTtlLnR3ZW50eWhhbmd6aG91PTIxMzE2O2UudHdlbnR5cGFyZW49OTM1MTtlLnR3ZW50eXBlcmlvZD05MzcxO2UudHdvPTUwO2UudHdvYXJhYmljPTE2MzQ7ZS50d29iZW5nYWxpPTI1MzY7ZS50d29jaXJjbGU9OTMxMztlLnR3b2NpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjM7ZS50d29kZXZhPTI0MDg7ZS50d29kb3RlbmxlYWRlcj04MjI5O2UudHdvZG90bGVhZGVyPTgyMjk7ZS50d29kb3RsZWFkZXJ2ZXJ0aWNhbD02NTA3MjtlLnR3b2d1amFyYXRpPTI3OTI7ZS50d29ndXJtdWtoaT0yNjY0O2UudHdvaGFja2FyYWJpYz0xNjM0O2UudHdvaGFuZ3pob3U9MTIzMjI7ZS50d29pZGVvZ3JhcGhpY3BhcmVuPTEyODMzO2UudHdvaW5mZXJpb3I9ODMyMjtlLnR3b21vbm9zcGFjZT02NTI5ODtlLnR3b251bWVyYXRvcmJlbmdhbGk9MjU0OTtlLnR3b29sZHN0eWxlPTYzMjgyO2UudHdvcGFyZW49OTMzMztlLnR3b3BlcmlvZD05MzUzO2UudHdvcGVyc2lhbj0xNzc4O2UudHdvcm9tYW49ODU2MTtlLnR3b3N0cm9rZT00NDM7ZS50d29zdXBlcmlvcj0xNzg7ZS50d290aGFpPTM2NjY7ZS50d290aGlyZHM9ODUzMjtlLnU9MTE3O2UudWFjdXRlPTI1MDtlLnViYXI9NjQ5O2UudWJlbmdhbGk9MjQ0MTtlLnVib3BvbW9mbz0xMjU4NDtlLnVicmV2ZT0zNjU7ZS51Y2Fyb249NDY4O2UudWNpcmNsZT05NDQ0O2UudWNpcmN1bWZsZXg9MjUxO2UudWNpcmN1bWZsZXhiZWxvdz03Nzk5O2UudWN5cmlsbGljPTEwOTE7ZS51ZGF0dGFkZXZhPTIzODU7ZS51ZGJsYWN1dGU9MzY5O2UudWRibGdyYXZlPTUzMztlLnVkZXZhPTIzMTM7ZS51ZGllcmVzaXM9MjUyO2UudWRpZXJlc2lzYWN1dGU9NDcyO2UudWRpZXJlc2lzYmVsb3c9Nzc5NTtlLnVkaWVyZXNpc2Nhcm9uPTQ3NDtlLnVkaWVyZXNpc2N5cmlsbGljPTEyNjU7ZS51ZGllcmVzaXNncmF2ZT00NzY7ZS51ZGllcmVzaXNtYWNyb249NDcwO2UudWRvdGJlbG93PTc5MDk7ZS51Z3JhdmU9MjQ5O2UudWd1amFyYXRpPTI2OTc7ZS51Z3VybXVraGk9MjU2OTtlLnVoaXJhZ2FuYT0xMjM1ODtlLnVob29rYWJvdmU9NzkxMTtlLnVob3JuPTQzMjtlLnVob3JuYWN1dGU9NzkxMztlLnVob3JuZG90YmVsb3c9NzkyMTtlLnVob3JuZ3JhdmU9NzkxNTtlLnVob3JuaG9va2Fib3ZlPTc5MTc7ZS51aG9ybnRpbGRlPTc5MTk7ZS51aHVuZ2FydW1sYXV0PTM2OTtlLnVodW5nYXJ1bWxhdXRjeXJpbGxpYz0xMjY3O2UudWludmVydGVkYnJldmU9NTM1O2UudWthdGFrYW5hPTEyNDU0O2UudWthdGFrYW5haGFsZndpZHRoPTY1Mzk1O2UudWtjeXJpbGxpYz0xMTQ1O2UudWtvcmVhbj0xMjYzNjtlLnVtYWNyb249MzYzO2UudW1hY3JvbmN5cmlsbGljPTEyNjM7ZS51bWFjcm9uZGllcmVzaXM9NzgwMztlLnVtYXRyYWd1cm11a2hpPTI2MjU7ZS51bW9ub3NwYWNlPTY1MzY1O2UudW5kZXJzY29yZT05NTtlLnVuZGVyc2NvcmVkYmw9ODIxNTtlLnVuZGVyc2NvcmVtb25vc3BhY2U9NjUzNDM7ZS51bmRlcnNjb3JldmVydGljYWw9NjUwNzU7ZS51bmRlcnNjb3Jld2F2eT02NTEwMztlLnVuaW9uPTg3NDY7ZS51bml2ZXJzYWw9ODcwNDtlLnVvZ29uZWs9MzcxO2UudXBhcmVuPTkzOTI7ZS51cGJsb2NrPTk2MDA7ZS51cHBlcmRvdGhlYnJldz0xNDc2O2UudXBzaWxvbj05NjU7ZS51cHNpbG9uZGllcmVzaXM9OTcxO2UudXBzaWxvbmRpZXJlc2lzdG9ub3M9OTQ0O2UudXBzaWxvbmxhdGluPTY1MDtlLnVwc2lsb250b25vcz05NzM7ZS51cHRhY2tiZWxvd2NtYj03OTc7ZS51cHRhY2ttb2Q9NzI0O2UudXJhZ3VybXVraGk9MjY3NTtlLnVyaW5nPTM2NztlLnVzaG9ydGN5cmlsbGljPTExMTg7ZS51c21hbGxoaXJhZ2FuYT0xMjM1NztlLnVzbWFsbGthdGFrYW5hPTEyNDUzO2UudXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODU7ZS51c3RyYWlnaHRjeXJpbGxpYz0xMTk5O2UudXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWM9MTIwMTtlLnV0aWxkZT0zNjE7ZS51dGlsZGVhY3V0ZT03ODAxO2UudXRpbGRlYmVsb3c9Nzc5NztlLnV1YmVuZ2FsaT0yNDQyO2UudXVkZXZhPTIzMTQ7ZS51dWd1amFyYXRpPTI2OTg7ZS51dWd1cm11a2hpPTI1NzA7ZS51dW1hdHJhZ3VybXVraGk9MjYyNjtlLnV1dm93ZWxzaWduYmVuZ2FsaT0yNDk4O2UudXV2b3dlbHNpZ25kZXZhPTIzNzA7ZS51dXZvd2Vsc2lnbmd1amFyYXRpPTI3NTQ7ZS51dm93ZWxzaWduYmVuZ2FsaT0yNDk3O2UudXZvd2Vsc2lnbmRldmE9MjM2OTtlLnV2b3dlbHNpZ25ndWphcmF0aT0yNzUzO2Uudj0xMTg7ZS52YWRldmE9MjM1NztlLnZhZ3VqYXJhdGk9Mjc0MTtlLnZhZ3VybXVraGk9MjYxMztlLnZha2F0YWthbmE9MTI1MzU7ZS52YXY9MTQ5MztlLnZhdmRhZ2VzaD02NDMwOTtlLnZhdmRhZ2VzaDY1PTY0MzA5O2UudmF2ZGFnZXNoaGVicmV3PTY0MzA5O2UudmF2aGVicmV3PTE0OTM7ZS52YXZob2xhbT02NDMzMTtlLnZhdmhvbGFtaGVicmV3PTY0MzMxO2UudmF2dmF2aGVicmV3PTE1MjA7ZS52YXZ5b2RoZWJyZXc9MTUyMTtlLnZjaXJjbGU9OTQ0NTtlLnZkb3RiZWxvdz03ODA3O2UudmVjeXJpbGxpYz0xMDc0O2UudmVoYXJhYmljPTE3MDA7ZS52ZWhmaW5hbGFyYWJpYz02NDM2MztlLnZlaGluaXRpYWxhcmFiaWM9NjQzNjQ7ZS52ZWhtZWRpYWxhcmFiaWM9NjQzNjU7ZS52ZWthdGFrYW5hPTEyNTM3O2UudmVudXM9OTc5MjtlLnZlcnRpY2FsYmFyPTEyNDtlLnZlcnRpY2FsbGluZWFib3ZlY21iPTc4MTtlLnZlcnRpY2FsbGluZWJlbG93Y21iPTgwOTtlLnZlcnRpY2FsbGluZWxvd21vZD03MTY7ZS52ZXJ0aWNhbGxpbmVtb2Q9NzEyO2UudmV3YXJtZW5pYW49MTQwNjtlLnZob29rPTY1MTtlLnZpa2F0YWthbmE9MTI1MzY7ZS52aXJhbWFiZW5nYWxpPTI1MDk7ZS52aXJhbWFkZXZhPTIzODE7ZS52aXJhbWFndWphcmF0aT0yNzY1O2UudmlzYXJnYWJlbmdhbGk9MjQzNTtlLnZpc2FyZ2FkZXZhPTIzMDc7ZS52aXNhcmdhZ3VqYXJhdGk9MjY5MTtlLnZtb25vc3BhY2U9NjUzNjY7ZS52b2FybWVuaWFuPTE0MDA7ZS52b2ljZWRpdGVyYXRpb25oaXJhZ2FuYT0xMjQ0NjtlLnZvaWNlZGl0ZXJhdGlvbmthdGFrYW5hPTEyNTQyO2Uudm9pY2VkbWFya2thbmE9MTI0NDM7ZS52b2ljZWRtYXJra2FuYWhhbGZ3aWR0aD02NTQzODtlLnZva2F0YWthbmE9MTI1Mzg7ZS52cGFyZW49OTM5MztlLnZ0aWxkZT03ODA1O2UudnR1cm5lZD02NTI7ZS52dWhpcmFnYW5hPTEyNDM2O2UudnVrYXRha2FuYT0xMjUzMjtlLnc9MTE5O2Uud2FjdXRlPTc4MTE7ZS53YWVrb3JlYW49MTI2MzM7ZS53YWhpcmFnYW5hPTEyNDMxO2Uud2FrYXRha2FuYT0xMjUyNztlLndha2F0YWthbmFoYWxmd2lkdGg9NjU0MzY7ZS53YWtvcmVhbj0xMjYzMjtlLndhc21hbGxoaXJhZ2FuYT0xMjQzMDtlLndhc21hbGxrYXRha2FuYT0xMjUyNjtlLndhdHRvc3F1YXJlPTEzMTQzO2Uud2F2ZWRhc2g9MTIzMTY7ZS53YXZ5dW5kZXJzY29yZXZlcnRpY2FsPTY1MDc2O2Uud2F3YXJhYmljPTE2MDg7ZS53YXdmaW5hbGFyYWJpYz02NTI2MjtlLndhd2hhbXphYWJvdmVhcmFiaWM9MTU3MjtlLndhd2hhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE1ODtlLndic3F1YXJlPTEzMjc3O2Uud2NpcmNsZT05NDQ2O2Uud2NpcmN1bWZsZXg9MzczO2Uud2RpZXJlc2lzPTc4MTM7ZS53ZG90YWNjZW50PTc4MTU7ZS53ZG90YmVsb3c9NzgxNztlLndlaGlyYWdhbmE9MTI0MzM7ZS53ZWllcnN0cmFzcz04NDcyO2Uud2VrYXRha2FuYT0xMjUyOTtlLndla29yZWFuPTEyNjM4O2Uud2Vva29yZWFuPTEyNjM3O2Uud2dyYXZlPTc4MDk7ZS53aGl0ZWJ1bGxldD05NzAyO2Uud2hpdGVjaXJjbGU9OTY3NTtlLndoaXRlY2lyY2xlaW52ZXJzZT05Njg5O2Uud2hpdGVjb3JuZXJicmFja2V0bGVmdD0xMjMwMjtlLndoaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA5MTtlLndoaXRlY29ybmVyYnJhY2tldHJpZ2h0PTEyMzAzO2Uud2hpdGVjb3JuZXJicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA5MjtlLndoaXRlZGlhbW9uZD05NjcxO2Uud2hpdGVkaWFtb25kY29udGFpbmluZ2JsYWNrc21hbGxkaWFtb25kPTk2NzI7ZS53aGl0ZWRvd25wb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY2MztlLndoaXRlZG93bnBvaW50aW5ndHJpYW5nbGU9OTY2MTtlLndoaXRlbGVmdHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjY3O2Uud2hpdGVsZWZ0cG9pbnRpbmd0cmlhbmdsZT05NjY1O2Uud2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQ9MTIzMTA7ZS53aGl0ZWxlbnRpY3VsYXJicmFja2V0cmlnaHQ9MTIzMTE7ZS53aGl0ZXJpZ2h0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NTc7ZS53aGl0ZXJpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU1O2Uud2hpdGVzbWFsbHNxdWFyZT05NjQzO2Uud2hpdGVzbWlsaW5nZmFjZT05Nzg2O2Uud2hpdGVzcXVhcmU9OTYzMztlLndoaXRlc3Rhcj05NzM0O2Uud2hpdGV0ZWxlcGhvbmU9OTc0MztlLndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0PTEyMzEyO2Uud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0PTEyMzEzO2Uud2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjUzO2Uud2hpdGV1cHBvaW50aW5ndHJpYW5nbGU9OTY1MTtlLndpaGlyYWdhbmE9MTI0MzI7ZS53aWthdGFrYW5hPTEyNTI4O2Uud2lrb3JlYW49MTI2Mzk7ZS53bW9ub3NwYWNlPTY1MzY3O2Uud29oaXJhZ2FuYT0xMjQzNDtlLndva2F0YWthbmE9MTI1MzA7ZS53b2thdGFrYW5haGFsZndpZHRoPTY1MzgyO2Uud29uPTgzNjE7ZS53b25tb25vc3BhY2U9NjU1MTA7ZS53b3dhZW50aGFpPTM2MjM7ZS53cGFyZW49OTM5NDtlLndyaW5nPTc4MzI7ZS53c3VwZXJpb3I9Njk1O2Uud3R1cm5lZD02NTM7ZS53eW5uPTQ0NztlLng9MTIwO2UueGFib3ZlY21iPTgyOTtlLnhib3BvbW9mbz0xMjU2MjtlLnhjaXJjbGU9OTQ0NztlLnhkaWVyZXNpcz03ODIxO2UueGRvdGFjY2VudD03ODE5O2UueGVoYXJtZW5pYW49MTM4OTtlLnhpPTk1ODtlLnhtb25vc3BhY2U9NjUzNjg7ZS54cGFyZW49OTM5NTtlLnhzdXBlcmlvcj03Mzk7ZS55PTEyMTtlLnlhYWRvc3F1YXJlPTEzMTM0O2UueWFiZW5nYWxpPTI0Nzk7ZS55YWN1dGU9MjUzO2UueWFkZXZhPTIzNTE7ZS55YWVrb3JlYW49MTI2MjY7ZS55YWd1amFyYXRpPTI3MzU7ZS55YWd1cm11a2hpPTI2MDc7ZS55YWhpcmFnYW5hPTEyNDIwO2UueWFrYXRha2FuYT0xMjUxNjtlLnlha2F0YWthbmFoYWxmd2lkdGg9NjU0Mjg7ZS55YWtvcmVhbj0xMjYyNTtlLnlhbWFra2FudGhhaT0zNjYyO2UueWFzbWFsbGhpcmFnYW5hPTEyNDE5O2UueWFzbWFsbGthdGFrYW5hPTEyNTE1O2UueWFzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg4O2UueWF0Y3lyaWxsaWM9MTEyMztlLnljaXJjbGU9OTQ0ODtlLnljaXJjdW1mbGV4PTM3NTtlLnlkaWVyZXNpcz0yNTU7ZS55ZG90YWNjZW50PTc4MjM7ZS55ZG90YmVsb3c9NzkyNTtlLnllaGFyYWJpYz0xNjEwO2UueWVoYmFycmVlYXJhYmljPTE3NDY7ZS55ZWhiYXJyZWVmaW5hbGFyYWJpYz02NDQzMTtlLnllaGZpbmFsYXJhYmljPTY1MjY2O2UueWVoaGFtemFhYm92ZWFyYWJpYz0xNTc0O2UueWVoaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTYyO2UueWVoaGFtemFhYm92ZWluaXRpYWxhcmFiaWM9NjUxNjM7ZS55ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljPTY1MTY0O2UueWVoaW5pdGlhbGFyYWJpYz02NTI2NztlLnllaG1lZGlhbGFyYWJpYz02NTI2ODtlLnllaG1lZW1pbml0aWFsYXJhYmljPTY0NzMzO2UueWVobWVlbWlzb2xhdGVkYXJhYmljPTY0NjAwO2UueWVobm9vbmZpbmFsYXJhYmljPTY0NjYwO2UueWVodGhyZWVkb3RzYmVsb3dhcmFiaWM9MTc0NTtlLnlla29yZWFuPTEyNjMwO2UueWVuPTE2NTtlLnllbm1vbm9zcGFjZT02NTUwOTtlLnllb2tvcmVhbj0xMjYyOTtlLnllb3JpbmhpZXVoa29yZWFuPTEyNjc4O2UueWVyYWhiZW55b21vaGVicmV3PTE0NTA7ZS55ZXJhaGJlbnlvbW9sZWZ0aGVicmV3PTE0NTA7ZS55ZXJpY3lyaWxsaWM9MTA5OTtlLnllcnVkaWVyZXNpc2N5cmlsbGljPTEyNzM7ZS55ZXNpZXVuZ2tvcmVhbj0xMjY3MztlLnllc2lldW5ncGFuc2lvc2tvcmVhbj0xMjY3NTtlLnllc2lldW5nc2lvc2tvcmVhbj0xMjY3NDtlLnlldGl2aGVicmV3PTE0MzQ7ZS55Z3JhdmU9NzkyMztlLnlob29rPTQzNjtlLnlob29rYWJvdmU9NzkyNztlLnlpYXJtZW5pYW49MTM5NztlLnlpY3lyaWxsaWM9MTExMTtlLnlpa29yZWFuPTEyNjQyO2UueWlueWFuZz05Nzc1O2UueWl3bmFybWVuaWFuPTE0MTA7ZS55bW9ub3NwYWNlPTY1MzY5O2UueW9kPTE0OTc7ZS55b2RkYWdlc2g9NjQzMTM7ZS55b2RkYWdlc2hoZWJyZXc9NjQzMTM7ZS55b2RoZWJyZXc9MTQ5NztlLnlvZHlvZGhlYnJldz0xNTIyO2UueW9keW9kcGF0YWhoZWJyZXc9NjQyODc7ZS55b2hpcmFnYW5hPTEyNDI0O2UueW9pa29yZWFuPTEyNjgxO2UueW9rYXRha2FuYT0xMjUyMDtlLnlva2F0YWthbmFoYWxmd2lkdGg9NjU0MzA7ZS55b2tvcmVhbj0xMjYzNTtlLnlvc21hbGxoaXJhZ2FuYT0xMjQyMztlLnlvc21hbGxrYXRha2FuYT0xMjUxOTtlLnlvc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM5MDtlLnlvdGdyZWVrPTEwMTE7ZS55b3lhZWtvcmVhbj0xMjY4MDtlLnlveWFrb3JlYW49MTI2Nzk7ZS55b3lha3RoYWk9MzYxODtlLnlveWluZ3RoYWk9MzU5NztlLnlwYXJlbj05Mzk2O2UueXBvZ2VncmFtbWVuaT04OTA7ZS55cG9nZWdyYW1tZW5pZ3JlZWtjbWI9ODM3O2UueXI9NDIyO2UueXJpbmc9NzgzMztlLnlzdXBlcmlvcj02OTY7ZS55dGlsZGU9NzkyOTtlLnl0dXJuZWQ9NjU0O2UueXVoaXJhZ2FuYT0xMjQyMjtlLnl1aWtvcmVhbj0xMjY4NDtlLnl1a2F0YWthbmE9MTI1MTg7ZS55dWthdGFrYW5haGFsZndpZHRoPTY1NDI5O2UueXVrb3JlYW49MTI2NDA7ZS55dXNiaWdjeXJpbGxpYz0xMTMxO2UueXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMzO2UueXVzbGl0dGxlY3lyaWxsaWM9MTEyNztlLnl1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyOTtlLnl1c21hbGxoaXJhZ2FuYT0xMjQyMTtlLnl1c21hbGxrYXRha2FuYT0xMjUxNztlLnl1c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4OTtlLnl1eWVrb3JlYW49MTI2ODM7ZS55dXllb2tvcmVhbj0xMjY4MjtlLnl5YWJlbmdhbGk9MjUyNztlLnl5YWRldmE9MjM5OTtlLno9MTIyO2UuemFhcm1lbmlhbj0xMzgyO2UuemFjdXRlPTM3ODtlLnphZGV2YT0yMzk1O2UuemFndXJtdWtoaT0yNjUxO2UuemFoYXJhYmljPTE1OTI7ZS56YWhmaW5hbGFyYWJpYz02NTIyMjtlLnphaGluaXRpYWxhcmFiaWM9NjUyMjM7ZS56YWhpcmFnYW5hPTEyMzc0O2UuemFobWVkaWFsYXJhYmljPTY1MjI0O2UuemFpbmFyYWJpYz0xNTg2O2UuemFpbmZpbmFsYXJhYmljPTY1MjAwO2UuemFrYXRha2FuYT0xMjQ3MDtlLnphcWVmZ2Fkb2xoZWJyZXc9MTQyOTtlLnphcWVmcWF0YW5oZWJyZXc9MTQyODtlLnphcnFhaGVicmV3PTE0MzI7ZS56YXlpbj0xNDk0O2UuemF5aW5kYWdlc2g9NjQzMTA7ZS56YXlpbmRhZ2VzaGhlYnJldz02NDMxMDtlLnpheWluaGVicmV3PTE0OTQ7ZS56Ym9wb21vZm89MTI1Njc7ZS56Y2Fyb249MzgyO2UuemNpcmNsZT05NDQ5O2UuemNpcmN1bWZsZXg9NzgyNTtlLnpjdXJsPTY1NztlLnpkb3Q9MzgwO2UuemRvdGFjY2VudD0zODA7ZS56ZG90YmVsb3c9NzgyNztlLnplY3lyaWxsaWM9MTA3OTtlLnplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NztlLnplZGllcmVzaXNjeXJpbGxpYz0xMjQ3O2UuemVoaXJhZ2FuYT0xMjM4MDtlLnpla2F0YWthbmE9MTI0NzY7ZS56ZXJvPTQ4O2UuemVyb2FyYWJpYz0xNjMyO2UuemVyb2JlbmdhbGk9MjUzNDtlLnplcm9kZXZhPTI0MDY7ZS56ZXJvZ3VqYXJhdGk9Mjc5MDtlLnplcm9ndXJtdWtoaT0yNjYyO2UuemVyb2hhY2thcmFiaWM9MTYzMjtlLnplcm9pbmZlcmlvcj04MzIwO2UuemVyb21vbm9zcGFjZT02NTI5NjtlLnplcm9vbGRzdHlsZT02MzI4MDtlLnplcm9wZXJzaWFuPTE3NzY7ZS56ZXJvc3VwZXJpb3I9ODMwNDtlLnplcm90aGFpPTM2NjQ7ZS56ZXJvd2lkdGhqb2luZXI9NjUyNzk7ZS56ZXJvd2lkdGhub25qb2luZXI9ODIwNDtlLnplcm93aWR0aHNwYWNlPTgyMDM7ZS56ZXRhPTk1MDtlLnpoYm9wb21vZm89MTI1NjM7ZS56aGVhcm1lbmlhbj0xMzg2O2UuemhlYnJldmVjeXJpbGxpYz0xMjE4O2UuemhlY3lyaWxsaWM9MTA3ODtlLnpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzU7ZS56aGVkaWVyZXNpc2N5cmlsbGljPTEyNDU7ZS56aWhpcmFnYW5hPTEyMzc2O2UuemlrYXRha2FuYT0xMjQ3MjtlLnppbm9yaGVicmV3PTE0NTQ7ZS56bGluZWJlbG93PTc4Mjk7ZS56bW9ub3NwYWNlPTY1MzcwO2Uuem9oaXJhZ2FuYT0xMjM4MjtlLnpva2F0YWthbmE9MTI0Nzg7ZS56cGFyZW49OTM5NztlLnpyZXRyb2ZsZXhob29rPTY1NjtlLnpzdHJva2U9NDM4O2UuenVoaXJhZ2FuYT0xMjM3ODtlLnp1a2F0YWthbmE9MTI0NzQ7ZVsiLm5vdGRlZiJdPTA7ZS5hbmdicmFja2V0bGVmdGJpZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWc9OTAwMTtlLmFuZ2JyYWNrZXRsZWZ0YmlnZz05MDAxO2UuYW5nYnJhY2tldGxlZnRCaWdnPTkwMDE7ZS5hbmdicmFja2V0cmlnaHRCaWc9OTAwMjtlLmFuZ2JyYWNrZXRyaWdodGJpZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0QmlnZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0YmlnZz05MDAyO2UuYXJyb3dob29rbGVmdD04NjE4O2UuYXJyb3dob29rcmlnaHQ9ODYxNztlLmFycm93bGVmdHRvcGhhbGY9ODYzNjtlLmFycm93bGVmdGJvdGhhbGY9ODYzNztlLmFycm93bm9ydGhlYXN0PTg1OTk7ZS5hcnJvd25vcnRod2VzdD04NTk4O2UuYXJyb3dyaWdodHRvcGhhbGY9ODY0MDtlLmFycm93cmlnaHRib3RoYWxmPTg2NDE7ZS5hcnJvd3NvdXRoZWFzdD04NjAwO2UuYXJyb3dzb3V0aHdlc3Q9ODYwMTtlLmJhY2tzbGFzaGJpZz04NzI2O2UuYmFja3NsYXNoQmlnPTg3MjY7ZS5iYWNrc2xhc2hCaWdnPTg3MjY7ZS5iYWNrc2xhc2hiaWdnPTg3MjY7ZS5iYXJkYmw9ODIxNDtlLmJyYWNlaHRpcGRvd25sZWZ0PTY1MDc5O2UuYnJhY2VodGlwZG93bnJpZ2h0PTY1MDc5O2UuYnJhY2VodGlwdXBsZWZ0PTY1MDgwO2UuYnJhY2VodGlwdXByaWdodD02NTA4MDtlLmJyYWNlbGVmdEJpZz0xMjM7ZS5icmFjZWxlZnRiaWc9MTIzO2UuYnJhY2VsZWZ0YmlnZz0xMjM7ZS5icmFjZWxlZnRCaWdnPTEyMztlLmJyYWNlcmlnaHRCaWc9MTI1O2UuYnJhY2VyaWdodGJpZz0xMjU7ZS5icmFjZXJpZ2h0YmlnZz0xMjU7ZS5icmFjZXJpZ2h0QmlnZz0xMjU7ZS5icmFja2V0bGVmdGJpZz05MTtlLmJyYWNrZXRsZWZ0QmlnPTkxO2UuYnJhY2tldGxlZnRiaWdnPTkxO2UuYnJhY2tldGxlZnRCaWdnPTkxO2UuYnJhY2tldHJpZ2h0QmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnPTkzO2UuYnJhY2tldHJpZ2h0YmlnZz05MztlLmJyYWNrZXRyaWdodEJpZ2c9OTM7ZS5jZWlsaW5nbGVmdGJpZz04OTY4O2UuY2VpbGluZ2xlZnRCaWc9ODk2ODtlLmNlaWxpbmdsZWZ0QmlnZz04OTY4O2UuY2VpbGluZ2xlZnRiaWdnPTg5Njg7ZS5jZWlsaW5ncmlnaHRiaWc9ODk2OTtlLmNlaWxpbmdyaWdodEJpZz04OTY5O2UuY2VpbGluZ3JpZ2h0YmlnZz04OTY5O2UuY2VpbGluZ3JpZ2h0QmlnZz04OTY5O2UuY2lyY2xlZG90ZGlzcGxheT04ODU3O2UuY2lyY2xlZG90dGV4dD04ODU3O2UuY2lyY2xlbXVsdGlwbHlkaXNwbGF5PTg4NTU7ZS5jaXJjbGVtdWx0aXBseXRleHQ9ODg1NTtlLmNpcmNsZXBsdXNkaXNwbGF5PTg4NTM7ZS5jaXJjbGVwbHVzdGV4dD04ODUzO2UuY29udGludGVncmFsZGlzcGxheT04NzUwO2UuY29udGludGVncmFsdGV4dD04NzUwO2UuY29wcm9kdWN0ZGlzcGxheT04NzIwO2UuY29wcm9kdWN0dGV4dD04NzIwO2UuZmxvb3JsZWZ0QmlnPTg5NzA7ZS5mbG9vcmxlZnRiaWc9ODk3MDtlLmZsb29ybGVmdGJpZ2c9ODk3MDtlLmZsb29ybGVmdEJpZ2c9ODk3MDtlLmZsb29ycmlnaHRiaWc9ODk3MTtlLmZsb29ycmlnaHRCaWc9ODk3MTtlLmZsb29ycmlnaHRCaWdnPTg5NzE7ZS5mbG9vcnJpZ2h0YmlnZz04OTcxO2UuaGF0d2lkZT03NzA7ZS5oYXR3aWRlcj03NzA7ZS5oYXR3aWRlc3Q9NzcwO2UuaW50ZXJjYWw9NzQ4ODtlLmludGVncmFsZGlzcGxheT04NzQ3O2UuaW50ZWdyYWx0ZXh0PTg3NDc7ZS5pbnRlcnNlY3Rpb25kaXNwbGF5PTg4OTg7ZS5pbnRlcnNlY3Rpb250ZXh0PTg4OTg7ZS5sb2dpY2FsYW5kZGlzcGxheT04NzQzO2UubG9naWNhbGFuZHRleHQ9ODc0MztlLmxvZ2ljYWxvcmRpc3BsYXk9ODc0NDtlLmxvZ2ljYWxvcnRleHQ9ODc0NDtlLnBhcmVubGVmdEJpZz00MDtlLnBhcmVubGVmdGJpZz00MDtlLnBhcmVubGVmdEJpZ2c9NDA7ZS5wYXJlbmxlZnRiaWdnPTQwO2UucGFyZW5yaWdodEJpZz00MTtlLnBhcmVucmlnaHRiaWc9NDE7ZS5wYXJlbnJpZ2h0QmlnZz00MTtlLnBhcmVucmlnaHRiaWdnPTQxO2UucHJpbWU9ODI0MjtlLnByb2R1Y3RkaXNwbGF5PTg3MTk7ZS5wcm9kdWN0dGV4dD04NzE5O2UucmFkaWNhbGJpZz04NzMwO2UucmFkaWNhbEJpZz04NzMwO2UucmFkaWNhbEJpZ2c9ODczMDtlLnJhZGljYWxiaWdnPTg3MzA7ZS5yYWRpY2FsYnQ9ODczMDtlLnJhZGljYWx0cD04NzMwO2UucmFkaWNhbHZlcnRleD04NzMwO2Uuc2xhc2hiaWc9NDc7ZS5zbGFzaEJpZz00NztlLnNsYXNoQmlnZz00NztlLnNsYXNoYmlnZz00NztlLnN1bW1hdGlvbmRpc3BsYXk9ODcyMTtlLnN1bW1hdGlvbnRleHQ9ODcyMTtlLnRpbGRld2lkZT03MzI7ZS50aWxkZXdpZGVyPTczMjtlLnRpbGRld2lkZXN0PTczMjtlLnVuaW9uZGlzcGxheT04ODk5O2UudW5pb25tdWx0aWRpc3BsYXk9ODg0NjtlLnVuaW9ubXVsdGl0ZXh0PTg4NDY7ZS51bmlvbnNxZGlzcGxheT04ODUyO2UudW5pb25zcXRleHQ9ODg1MjtlLnVuaW9udGV4dD04ODk5O2UudmV4dGVuZGRvdWJsZT04NzQxO2UudmV4dGVuZHNpbmdsZT04NzM5fSkpO3QuZ2V0R2x5cGhzVW5pY29kZT1uO2NvbnN0IGk9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTMyO2UuYTE9OTk4NTtlLmEyPTk5ODY7ZS5hMjAyPTk5ODc7ZS5hMz05OTg4O2UuYTQ9OTc0MjtlLmE1PTk5OTA7ZS5hMTE5PTk5OTE7ZS5hMTE4PTk5OTI7ZS5hMTE3PTk5OTM7ZS5hMTE9OTc1NTtlLmExMj05NzU4O2UuYTEzPTk5OTY7ZS5hMTQ9OTk5NztlLmExNT05OTk4O2UuYTE2PTk5OTk7ZS5hMTA1PTFlNDtlLmExNz0xMDAwMTtlLmExOD0xMDAwMjtlLmExOT0xMDAwMztlLmEyMD0xMDAwNDtlLmEyMT0xMDAwNTtlLmEyMj0xMDAwNjtlLmEyMz0xMDAwNztlLmEyND0xMDAwODtlLmEyNT0xMDAwOTtlLmEyNj0xMDAxMDtlLmEyNz0xMDAxMTtlLmEyOD0xMDAxMjtlLmE2PTEwMDEzO2UuYTc9MTAwMTQ7ZS5hOD0xMDAxNTtlLmE5PTEwMDE2O2UuYTEwPTEwMDE3O2UuYTI5PTEwMDE4O2UuYTMwPTEwMDE5O2UuYTMxPTEwMDIwO2UuYTMyPTEwMDIxO2UuYTMzPTEwMDIyO2UuYTM0PTEwMDIzO2UuYTM1PTk3MzM7ZS5hMzY9MTAwMjU7ZS5hMzc9MTAwMjY7ZS5hMzg9MTAwMjc7ZS5hMzk9MTAwMjg7ZS5hNDA9MTAwMjk7ZS5hNDE9MTAwMzA7ZS5hNDI9MTAwMzE7ZS5hNDM9MTAwMzI7ZS5hNDQ9MTAwMzM7ZS5hNDU9MTAwMzQ7ZS5hNDY9MTAwMzU7ZS5hNDc9MTAwMzY7ZS5hNDg9MTAwMzc7ZS5hNDk9MTAwMzg7ZS5hNTA9MTAwMzk7ZS5hNTE9MTAwNDA7ZS5hNTI9MTAwNDE7ZS5hNTM9MTAwNDI7ZS5hNTQ9MTAwNDM7ZS5hNTU9MTAwNDQ7ZS5hNTY9MTAwNDU7ZS5hNTc9MTAwNDY7ZS5hNTg9MTAwNDc7ZS5hNTk9MTAwNDg7ZS5hNjA9MTAwNDk7ZS5hNjE9MTAwNTA7ZS5hNjI9MTAwNTE7ZS5hNjM9MTAwNTI7ZS5hNjQ9MTAwNTM7ZS5hNjU9MTAwNTQ7ZS5hNjY9MTAwNTU7ZS5hNjc9MTAwNTY7ZS5hNjg9MTAwNTc7ZS5hNjk9MTAwNTg7ZS5hNzA9MTAwNTk7ZS5hNzE9OTY3OTtlLmE3Mj0xMDA2MTtlLmE3Mz05NjMyO2UuYTc0PTEwMDYzO2UuYTIwMz0xMDA2NDtlLmE3NT0xMDA2NTtlLmEyMDQ9MTAwNjY7ZS5hNzY9OTY1MDtlLmE3Nz05NjYwO2UuYTc4PTk2NzA7ZS5hNzk9MTAwNzA7ZS5hODE9OTY4NztlLmE4Mj0xMDA3MjtlLmE4Mz0xMDA3MztlLmE4ND0xMDA3NDtlLmE5Nz0xMDA3NTtlLmE5OD0xMDA3NjtlLmE5OT0xMDA3NztlLmExMDA9MTAwNzg7ZS5hMTAxPTEwMDgxO2UuYTEwMj0xMDA4MjtlLmExMDM9MTAwODM7ZS5hMTA0PTEwMDg0O2UuYTEwNj0xMDA4NTtlLmExMDc9MTAwODY7ZS5hMTA4PTEwMDg3O2UuYTExMj05ODI3O2UuYTExMT05ODMwO2UuYTExMD05ODI5O2UuYTEwOT05ODI0O2UuYTEyMD05MzEyO2UuYTEyMT05MzEzO2UuYTEyMj05MzE0O2UuYTEyMz05MzE1O2UuYTEyND05MzE2O2UuYTEyNT05MzE3O2UuYTEyNj05MzE4O2UuYTEyNz05MzE5O2UuYTEyOD05MzIwO2UuYTEyOT05MzIxO2UuYTEzMD0xMDEwMjtlLmExMzE9MTAxMDM7ZS5hMTMyPTEwMTA0O2UuYTEzMz0xMDEwNTtlLmExMzQ9MTAxMDY7ZS5hMTM1PTEwMTA3O2UuYTEzNj0xMDEwODtlLmExMzc9MTAxMDk7ZS5hMTM4PTEwMTEwO2UuYTEzOT0xMDExMTtlLmExNDA9MTAxMTI7ZS5hMTQxPTEwMTEzO2UuYTE0Mj0xMDExNDtlLmExNDM9MTAxMTU7ZS5hMTQ0PTEwMTE2O2UuYTE0NT0xMDExNztlLmExNDY9MTAxMTg7ZS5hMTQ3PTEwMTE5O2UuYTE0OD0xMDEyMDtlLmExNDk9MTAxMjE7ZS5hMTUwPTEwMTIyO2UuYTE1MT0xMDEyMztlLmExNTI9MTAxMjQ7ZS5hMTUzPTEwMTI1O2UuYTE1ND0xMDEyNjtlLmExNTU9MTAxMjc7ZS5hMTU2PTEwMTI4O2UuYTE1Nz0xMDEyOTtlLmExNTg9MTAxMzA7ZS5hMTU5PTEwMTMxO2UuYTE2MD0xMDEzMjtlLmExNjE9ODU5NDtlLmExNjM9ODU5NjtlLmExNjQ9ODU5NztlLmExOTY9MTAxMzY7ZS5hMTY1PTEwMTM3O2UuYTE5Mj0xMDEzODtlLmExNjY9MTAxMzk7ZS5hMTY3PTEwMTQwO2UuYTE2OD0xMDE0MTtlLmExNjk9MTAxNDI7ZS5hMTcwPTEwMTQzO2UuYTE3MT0xMDE0NDtlLmExNzI9MTAxNDU7ZS5hMTczPTEwMTQ2O2UuYTE2Mj0xMDE0NztlLmExNzQ9MTAxNDg7ZS5hMTc1PTEwMTQ5O2UuYTE3Nj0xMDE1MDtlLmExNzc9MTAxNTE7ZS5hMTc4PTEwMTUyO2UuYTE3OT0xMDE1MztlLmExOTM9MTAxNTQ7ZS5hMTgwPTEwMTU1O2UuYTE5OT0xMDE1NjtlLmExODE9MTAxNTc7ZS5hMjAwPTEwMTU4O2UuYTE4Mj0xMDE1OTtlLmEyMDE9MTAxNjE7ZS5hMTgzPTEwMTYyO2UuYTE4ND0xMDE2MztlLmExOTc9MTAxNjQ7ZS5hMTg1PTEwMTY1O2UuYTE5ND0xMDE2NjtlLmExOTg9MTAxNjc7ZS5hMTg2PTEwMTY4O2UuYTE5NT0xMDE2OTtlLmExODc9MTAxNzA7ZS5hMTg4PTEwMTcxO2UuYTE4OT0xMDE3MjtlLmExOTA9MTAxNzM7ZS5hMTkxPTEwMTc0O2UuYTg5PTEwMDg4O2UuYTkwPTEwMDg5O2UuYTkzPTEwMDkwO2UuYTk0PTEwMDkxO2UuYTkxPTEwMDkyO2UuYTkyPTEwMDkzO2UuYTIwNT0xMDA5NDtlLmE4NT0xMDA5NTtlLmEyMDY9MTAwOTY7ZS5hODY9MTAwOTc7ZS5hODc9MTAwOTg7ZS5hODg9MTAwOTk7ZS5hOTU9MTAxMDA7ZS5hOTY9MTAxMDE7ZVsiLm5vdGRlZiJdPTB9KSk7dC5nZXREaW5nYmF0c0dseXBoc1VuaWNvZGU9aX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNsZWFyVW5pY29kZUNhY2hlcz1mdW5jdGlvbiBjbGVhclVuaWNvZGVDYWNoZXMoKXtzLmNsZWFyKCl9O3QuZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeT1mdW5jdGlvbiBnZXRDaGFyVW5pY29kZUNhdGVnb3J5KGUpe2NvbnN0IHQ9cy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBhPWUubWF0Y2goaSkscj17aXNXaGl0ZXNwYWNlOiEhYT8uWzFdLGlzWmVyb1dpZHRoRGlhY3JpdGljOiEhYT8uWzJdLGlzSW52aXNpYmxlRm9ybWF0TWFyazohIWE/LlszXX07cy5zZXQoZSxyKTtyZXR1cm4gcn07dC5nZXRVbmljb2RlRm9yR2x5cGg9ZnVuY3Rpb24gZ2V0VW5pY29kZUZvckdseXBoKGUsdCl7bGV0IGE9dFtlXTtpZih2b2lkIDAhPT1hKXJldHVybiBhO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IHI7aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pcj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7cj1lLnN1YnN0cmluZygxKX1pZihyPT09ci50b1VwcGVyQ2FzZSgpKXthPXBhcnNlSW50KHIsMTYpO2lmKGE+PTApcmV0dXJuIGF9fXJldHVybi0xfTt0LmdldFVuaWNvZGVSYW5nZUZvcj1mdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOi0xO2lmKC0xIT09dCl7Y29uc3QgYT1uW3RdO2ZvcihsZXQgcj0wLG49YS5sZW5ndGg7cjxuO3IrPTIpaWYoZT49YVtyXSYmZTw9YVtyKzFdKXJldHVybiB0fWZvcihsZXQgdD0wLGE9bi5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1uW3RdO2ZvcihsZXQgcj0wLG49YS5sZW5ndGg7cjxuO3IrPTIpaWYoZT49YVtyXSYmZTw9YVtyKzFdKXJldHVybiB0fXJldHVybi0xfTt0Lm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzPWZ1bmN0aW9uIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKGUpe2lmKGU+PTY1NTIwJiZlPD02NTUzNSlyZXR1cm4gMDtpZihlPj02Mjk3NiYmZTw9NjM3NDMpcmV0dXJuIHIoKVtlXXx8ZTtpZigxNzM9PT1lKXJldHVybiA0NTtyZXR1cm4gZX07Y29uc3Qgcj0oMCxhKDE1MCkuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5O2VbNjMxOTNdPTE2OTtlWzYzNzIwXT0xNzQ7ZVs2MzE5NF09MTc0O2VbNjM3MjJdPTg0ODI7ZVs2MzE5NV09ODQ4MjtlWzYzNzI5XT05MTI3O2VbNjM3MzBdPTkxMjg7ZVs2MzczMV09OTEyOTtlWzYzNzQwXT05MTMxO2VbNjM3NDFdPTkxMzI7ZVs2Mzc0Ml09OTEzMztlWzYzNzI2XT05MTIxO2VbNjM3MjddPTkxMjI7ZVs2MzcyOF09OTEyMztlWzYzNzM3XT05MTI0O2VbNjM3MzhdPTkxMjU7ZVs2MzczOV09OTEyNjtlWzYzNzIzXT05MTE1O2VbNjM3MjRdPTkxMTY7ZVs2MzcyNV09OTExNztlWzYzNzM0XT05MTE4O2VbNjM3MzVdPTkxMTk7ZVs2MzczNl09OTEyMH0pKTtjb25zdCBuPVtbMCwxMjddLFsxMjgsMjU1XSxbMjU2LDM4M10sWzM4NCw1OTFdLFs1OTIsNjg3LDc0MjQsNzU1MSw3NTUyLDc2MTVdLFs2ODgsNzY3LDQyNzUyLDQyNzgzXSxbNzY4LDg3OSw3NjE2LDc2NzldLFs4ODAsMTAyM10sWzExMzkyLDExNTE5XSxbMTAyNCwxMjc5LDEyODAsMTMyNywxMTc0NCwxMTc3NSw0MjU2MCw0MjY1NV0sWzEzMjgsMTQyM10sWzE0MjQsMTUzNV0sWzQyMjQwLDQyNTU5XSxbMTUzNiwxNzkxLDE4NzIsMTkxOV0sWzE5ODQsMjA0N10sWzIzMDQsMjQzMV0sWzI0MzIsMjU1OV0sWzI1NjAsMjY4N10sWzI2ODgsMjgxNV0sWzI4MTYsMjk0M10sWzI5NDQsMzA3MV0sWzMwNzIsMzE5OV0sWzMyMDAsMzMyN10sWzMzMjgsMzQ1NV0sWzM1ODQsMzcxMV0sWzM3MTIsMzgzOV0sWzQyNTYsNDM1MSwxMTUyMCwxMTU2N10sWzY5MTIsNzAzOV0sWzQzNTIsNDYwN10sWzc2ODAsNzkzNSwxMTM2MCwxMTM5MSw0Mjc4NCw0MzAwN10sWzc5MzYsODE5MV0sWzgxOTIsODMwMywxMTc3NiwxMTkwM10sWzgzMDQsODM1MV0sWzgzNTIsODM5OV0sWzg0MDAsODQ0N10sWzg0NDgsODUyN10sWzg1MjgsODU5MV0sWzg1OTIsODcwMywxMDIyNCwxMDIzOSwxMDQ5NiwxMDYyMywxMTAwOCwxMTI2M10sWzg3MDQsODk1OSwxMDc1MiwxMTAwNywxMDE3NiwxMDIyMywxMDYyNCwxMDc1MV0sWzg5NjAsOTIxNV0sWzkyMTYsOTI3OV0sWzkyODAsOTMxMV0sWzkzMTIsOTQ3MV0sWzk0NzIsOTU5OV0sWzk2MDAsOTYzMV0sWzk2MzIsOTcyN10sWzk3MjgsOTk4M10sWzk5ODQsMTAxNzVdLFsxMjI4OCwxMjM1MV0sWzEyMzUyLDEyNDQ3XSxbMTI0NDgsMTI1NDMsMTI3ODQsMTI3OTldLFsxMjU0NCwxMjU5MSwxMjcwNCwxMjczNV0sWzEyNTkyLDEyNjg3XSxbNDMwNzIsNDMxMzVdLFsxMjgwMCwxMzA1NV0sWzEzMDU2LDEzMzExXSxbNDQwMzIsNTUyMTVdLFs1NTI5Niw1NzM0M10sWzY3ODQwLDY3ODcxXSxbMTk5NjgsNDA5NTksMTE5MDQsMTIwMzEsMTIwMzIsMTIyNTUsMTIyNzIsMTIyODcsMTMzMTIsMTk5MDMsMTMxMDcyLDE3Mzc5MSwxMjY4OCwxMjcwM10sWzU3MzQ0LDYzNzQzXSxbMTI3MzYsMTI3ODMsNjM3NDQsNjQyNTUsMTk0NTYwLDE5NTEwM10sWzY0MjU2LDY0MzM1XSxbNjQzMzYsNjUwMjNdLFs2NTA1Niw2NTA3MV0sWzY1MDQwLDY1MDU1XSxbNjUxMDQsNjUxMzVdLFs2NTEzNiw2NTI3OV0sWzY1MjgwLDY1NTE5XSxbNjU1MjAsNjU1MzVdLFszODQwLDQwOTVdLFsxNzkyLDE4NzFdLFsxOTIwLDE5ODNdLFszNDU2LDM1ODNdLFs0MDk2LDQyNTVdLFs0NjA4LDQ5OTEsNDk5Miw1MDIzLDExNjQ4LDExNzQzXSxbNTAyNCw1MTE5XSxbNTEyMCw1NzU5XSxbNTc2MCw1NzkxXSxbNTc5Miw1ODg3XSxbNjAxNiw2MTQzXSxbNjE0NCw2MzE5XSxbMTAyNDAsMTA0OTVdLFs0MDk2MCw0MjEyN10sWzU4ODgsNTkxOSw1OTIwLDU5NTEsNTk1Miw1OTgzLDU5ODQsNjAxNV0sWzY2MzA0LDY2MzUxXSxbNjYzNTIsNjYzODNdLFs2NjU2MCw2NjYzOV0sWzExODc4NCwxMTkwMzksMTE5MDQwLDExOTI5NSwxMTkyOTYsMTE5Mzc1XSxbMTE5ODA4LDEyMDgzMV0sWzEwNDQ0ODAsMTA0ODU3M10sWzY1MDI0LDY1MDM5LDkxNzc2MCw5MTc5OTldLFs5MTc1MDQsOTE3NjMxXSxbNjQwMCw2NDc5XSxbNjQ4MCw2NTI3XSxbNjUyOCw2NjIzXSxbNjY1Niw2Njg3XSxbMTEyNjQsMTEzNTldLFsxMTU2OCwxMTY0N10sWzE5OTA0LDE5OTY3XSxbNDMwMDgsNDMwNTVdLFs2NTUzNiw2NTY2Myw2NTY2NCw2NTc5MSw2NTc5Miw2NTg1NV0sWzY1ODU2LDY1OTM1XSxbNjY0MzIsNjY0NjNdLFs2NjQ2NCw2NjUyN10sWzY2NjQwLDY2Njg3XSxbNjY2ODgsNjY3MzVdLFs2NzU4NCw2NzY0N10sWzY4MDk2LDY4MTkxXSxbMTE5NTUyLDExOTY0N10sWzczNzI4LDc0NzUxLDc0NzUyLDc0ODc5XSxbMTE5NjQ4LDExOTY3OV0sWzcwNDAsNzEwM10sWzcxNjgsNzI0N10sWzcyNDgsNzI5NV0sWzQzMTM2LDQzMjMxXSxbNDMyNjQsNDMzMTFdLFs0MzMxMiw0MzM1OV0sWzQzNTIwLDQzNjE1XSxbNjU5MzYsNjU5OTldLFs2NmUzLDY2MDQ3XSxbNjYyMDgsNjYyNzEsNjYxNzYsNjYyMDcsNjc4NzIsNjc5MDNdLFsxMjcwMjQsMTI3MTM1LDEyNjk3NiwxMjcwMjNdXTtjb25zdCBpPW5ldyBSZWdFeHAoIl4oXFxzKXwoXFxwe01ufSl8KFxccHtDZn0pJCIsInUiKSxzPW5ldyBNYXB9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5nZXRTZXJpZkZvbnRzPXQuZ2V0Tm9uU3RkRm9udE1hcD10LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cz10LmdldEZvbnROYW1lVG9GaWxlTWFwPXZvaWQgMDt0LmdldFN0YW5kYXJkRm9udE5hbWU9ZnVuY3Rpb24gZ2V0U3RhbmRhcmRGb250TmFtZShlKXtjb25zdCB0PSgwLG4ubm9ybWFsaXplRm9udE5hbWUpKGUpO3JldHVybiBpKClbdF19O3QuZ2V0U3ltYm9sc0ZvbnRzPXQuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPXQuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPXQuZ2V0U3RkRm9udE1hcD12b2lkIDA7dC5pc0tub3duRm9udE5hbWU9ZnVuY3Rpb24gaXNLbm93bkZvbnROYW1lKGUpe2NvbnN0IHQ9KDAsbi5ub3JtYWxpemVGb250TmFtZSkoZSk7cmV0dXJuISEoaSgpW3RdfHxvKClbdF18fGMoKVt0XXx8bCgpW3RdKX07dmFyIHI9YSgxNTApLG49YSgxODkpO2NvbnN0IGk9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJUaW1lcy1Sb21hbiJdPSJUaW1lcy1Sb21hbiI7ZS5IZWx2ZXRpY2E9IkhlbHZldGljYSI7ZS5Db3VyaWVyPSJDb3VyaWVyIjtlLlN5bWJvbD0iU3ltYm9sIjtlWyJUaW1lcy1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIkhlbHZldGljYS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJDb3VyaWVyLUJvbGQiXT0iQ291cmllci1Cb2xkIjtlLlphcGZEaW5nYmF0cz0iWmFwZkRpbmdiYXRzIjtlWyJUaW1lcy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQ291cmllci1PYmxpcXVlIl09IkNvdXJpZXItT2JsaXF1ZSI7ZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2UuQXJpYWxOYXJyb3c9IkhlbHZldGljYSI7ZVsiQXJpYWxOYXJyb3ctQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxOYXJyb3ctQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsTmFycm93LUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbEJsYWNrPSJIZWx2ZXRpY2EiO2VbIkFyaWFsQmxhY2stQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxCbGFjay1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWxCbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkFyaWFsLUJsYWNrIl09IkhlbHZldGljYSI7ZVsiQXJpYWwtQmxhY2stQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJsYWNrLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZS5BcmlhbD0iSGVsdmV0aWNhIjtlWyJBcmlhbC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsTVQ9IkhlbHZldGljYSI7ZVsiQXJpYWwtQm9sZEl0YWxpY01UIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtQm9sZE1UIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1JdGFsaWNNVCJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQXJpYWwtQm9sZEl0YWxpY01ULUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1Cb2xkTVQtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWwtSXRhbGljTVQtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsVW5pY29kZU1TPSJIZWx2ZXRpY2EiO2VbIkFyaWFsVW5pY29kZU1TLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsVW5pY29kZU1TLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbFVuaWNvZGVNUy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkNvdXJpZXItQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2UuQ291cmllck5ldz0iQ291cmllciI7ZVsiQ291cmllck5ldy1Cb2xkIl09IkNvdXJpZXItQm9sZCI7ZVsiQ291cmllck5ldy1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXJOZXctSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSI7ZVsiQ291cmllck5ld1BTLUJvbGRJdGFsaWNNVCJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJDb3VyaWVyTmV3UFMtQm9sZE1UIl09IkNvdXJpZXItQm9sZCI7ZVsiQ291cmllck5ld1BTLUl0YWxpY01UIl09IkNvdXJpZXItT2JsaXF1ZSI7ZS5Db3VyaWVyTmV3UFNNVD0iQ291cmllciI7ZVsiSGVsdmV0aWNhLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJIZWx2ZXRpY2EtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJTeW1ib2wtQm9sZCJdPSJTeW1ib2wiO2VbIlN5bWJvbC1Cb2xkSXRhbGljIl09IlN5bWJvbCI7ZVsiU3ltYm9sLUl0YWxpYyJdPSJTeW1ib2wiO2UuVGltZXNOZXdSb21hbj0iVGltZXMtUm9tYW4iO2VbIlRpbWVzTmV3Um9tYW4tQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hbi1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlLlRpbWVzTmV3Um9tYW5QUz0iVGltZXMtUm9tYW4iO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljTVQiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRNVCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUl0YWxpY01UIl09IlRpbWVzLUl0YWxpYyI7ZS5UaW1lc05ld1JvbWFuUFNNVD0iVGltZXMtUm9tYW4iO2VbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWMiXT0iVGltZXMtSXRhbGljIn0pKTt0LmdldFN0ZEZvbnRNYXA9aTtjb25zdCBzPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiI7ZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiI7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiO2VbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiI7ZS5IZWx2ZXRpY2E9IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIjtlWyJIZWx2ZXRpY2EtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiI7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIjtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjtlWyJUaW1lcy1Sb21hbiJdPSJGb3hpdFNlcmlmLnBmYiI7ZVsiVGltZXMtQm9sZCJdPSJGb3hpdFNlcmlmQm9sZC5wZmIiO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0iRm94aXRTZXJpZkJvbGRJdGFsaWMucGZiIjtlWyJUaW1lcy1JdGFsaWMiXT0iRm94aXRTZXJpZkl0YWxpYy5wZmIiO2UuU3ltYm9sPSJGb3hpdFN5bWJvbC5wZmIiO2UuWmFwZkRpbmdiYXRzPSJGb3hpdERpbmdiYXRzLnBmYiI7ZVsiTGliZXJhdGlvblNhbnMtUmVndWxhciJdPSJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiI7ZVsiTGliZXJhdGlvblNhbnMtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiI7ZVsiTGliZXJhdGlvblNhbnMtSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYifSkpO3QuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9cztjb25zdCBvPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiO2VbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIjtlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIjtlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCI7ZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiO2VbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyI7ZS5JbXBhY3Q9IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkl0Y1N5bWJvbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiSXRjU3ltYm9sLUJvb2siXT0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiSXRjU3ltYm9sLU1lZGl1bSJdPSJIZWx2ZXRpY2EiO2VbIkl0Y1N5bWJvbC1NZWRpdW1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuTHVjaWRhQ29uc29sZT0iQ291cmllciI7ZVsiTHVjaWRhQ29uc29sZS1Cb2xkIl09IkNvdXJpZXItQm9sZCI7ZVsiTHVjaWRhQ29uc29sZS1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSI7ZVsiTHVjaWRhU2Fucy1EZW1pIl09IkhlbHZldGljYS1Cb2xkIjtlWyJNUy1Hb3RoaWMiXT0iTVMgR290aGljIjtlWyJNUy1Hb3RoaWMtQm9sZCJdPSJNUyBHb3RoaWMtQm9sZCI7ZVsiTVMtR290aGljLUJvbGRJdGFsaWMiXT0iTVMgR290aGljLUJvbGRJdGFsaWMiO2VbIk1TLUdvdGhpYy1JdGFsaWMiXT0iTVMgR290aGljLUl0YWxpYyI7ZVsiTVMtTWluY2hvIl09Ik1TIE1pbmNobyI7ZVsiTVMtTWluY2hvLUJvbGQiXT0iTVMgTWluY2hvLUJvbGQiO2VbIk1TLU1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIE1pbmNoby1Cb2xkSXRhbGljIjtlWyJNUy1NaW5jaG8tSXRhbGljIl09Ik1TIE1pbmNoby1JdGFsaWMiO2VbIk1TLVBHb3RoaWMiXT0iTVMgUEdvdGhpYyI7ZVsiTVMtUEdvdGhpYy1Cb2xkIl09Ik1TIFBHb3RoaWMtQm9sZCI7ZVsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIFBHb3RoaWMtQm9sZEl0YWxpYyI7ZVsiTVMtUEdvdGhpYy1JdGFsaWMiXT0iTVMgUEdvdGhpYy1JdGFsaWMiO2VbIk1TLVBNaW5jaG8iXT0iTVMgUE1pbmNobyI7ZVsiTVMtUE1pbmNoby1Cb2xkIl09Ik1TIFBNaW5jaG8tQm9sZCI7ZVsiTVMtUE1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIFBNaW5jaG8tQm9sZEl0YWxpYyI7ZVsiTVMtUE1pbmNoby1JdGFsaWMiXT0iTVMgUE1pbmNoby1JdGFsaWMiO2UuTnVwdGlhbFNjcmlwdD0iVGltZXMtSXRhbGljIjtlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSJ9KSk7dC5nZXROb25TdGRGb250TWFwPW87Y29uc3QgYz0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwO2VbIkFkb2JlIFRleHQiXT0hMDtlLkFsYmVydHVzPSEwO2UuQWxkdXM9ITA7ZS5BbGV4YW5kcmlhPSEwO2UuQWxnZXJpYW49ITA7ZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwO2UuQW50aXF1YT0hMDtlLkFwZXg9ITA7ZS5Bcm5vPSEwO2UuQXN0ZXI9ITA7ZS5BdXJvcmE9ITA7ZS5CYXNrZXJ2aWxsZT0hMDtlLkJlbGw9ITA7ZS5CZW1ibz0hMDtlWyJCZW1ibyBTY2hvb2xib29rIl09ITA7ZS5CZW5ndWlhdD0hMDtlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMDtlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMDtlWyJCZXJ0aG9sZCBDaXR5Il09ITA7ZS5Cb2Rvbmk9ITA7ZVsiQmF1ZXIgQm9kb25pIl09ITA7ZVsiQm9vayBBbnRpcXVhIl09ITA7ZS5Cb29rbWFuPSEwO2VbIkJvcmRlYXV4IFJvbWFuIl09ITA7ZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMDtlLkNhbGlzdG89ITA7ZS5DYWx2ZXJ0PSEwO2UuQ2FwaXRhbHM9ITA7ZS5DYW1icmlhPSEwO2UuQ2FydGllcj0hMDtlLkNhc2xvbj0hMDtlLkNhdHVsbD0hMDtlLkNlbnRhdXI9ITA7ZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMDtlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMDtlLkNoYXBhcnJhbD0hMDtlWyJDaGFyaXMgU0lMIl09ITA7ZS5DaGVsdGVuaGFtPSEwO2VbIkNob2xsYSBTbGFiIl09ITA7ZS5DbGFyZW5kb249ITA7ZS5DbGVhcmZhY2U9ITA7ZS5Db2NoaW49ITA7ZS5Db2xvbm5hPSEwO2VbIkNvbXB1dGVyIE1vZGVybiJdPSEwO2VbIkNvbmNyZXRlIFJvbWFuIl09ITA7ZS5Db25zdGFudGlhPSEwO2VbIkNvb3BlciBCbGFjayJdPSEwO2UuQ29yb25hPSEwO2UuRWNvdHlwZT0hMDtlLkVneXB0aWVubmU9ITA7ZS5FbGVwaGFudD0hMDtlLkV4Y2Vsc2lvcj0hMDtlLkZhaXJmaWVsZD0hMDtlWyJGRiBTY2FsYSJdPSEwO2UuRm9sa2FyZD0hMDtlLkZvb3RsaWdodD0hMDtlLkZyZWVTZXJpZj0hMDtlWyJGcml6IFF1YWRyYXRhIl09ITA7ZS5HYXJhbW9uZD0hMDtlLkdlbnRpdW09ITA7ZS5HZW9yZ2lhPSEwO2UuR2xvdWNlc3Rlcj0hMDtlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMDtlWyJHb3VkeSBTY2hvb2xib29rIl09ITA7ZVsiR291ZHkgUHJvIEZvbnQiXT0hMDtlLkdyYW5qb249ITA7ZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMDtlLkhlYXRoZXI9ITA7ZS5IZXJjdWxlcz0hMDtlWyJIaWdoIFRvd2VyIFRleHQiXT0hMDtlLkhpcm9zaGlnZT0hMDtlWyJIb2VmbGVyIFRleHQiXT0hMDtlWyJIdW1hbmEgU2VyaWYiXT0hMDtlLkltcHJpbnQ9ITA7ZVsiSW9uaWMgTm8uIDUiXT0hMDtlLkphbnNvbj0hMDtlLkpvYW5uYT0hMDtlLktvcmlubmE9ITA7ZS5MZXhpY29uPSEwO2UuTGliZXJhdGlvblNlcmlmPSEwO2VbIkxpYmVyYXRpb24gU2VyaWYiXT0hMDtlWyJMaW51eCBMaWJlcnRpbmUiXT0hMDtlLkxpdGVyYXR1cm5heWE9ITA7ZS5MdWNpZGE9ITA7ZVsiTHVjaWRhIEJyaWdodCJdPSEwO2UuTWVsaW9yPSEwO2UuTWVtcGhpcz0hMDtlLk1pbGxlcj0hMDtlLk1pbmlvbj0hMDtlLk1vZGVybj0hMDtlWyJNb25hIExpc2EiXT0hMDtlWyJNcnMgRWF2ZXMiXT0hMDtlWyJNUyBTZXJpZiJdPSEwO2VbIk11c2VvIFNsYWIiXT0hMDtlWyJOZXcgWW9yayJdPSEwO2VbIk5pbWJ1cyBSb21hbiJdPSEwO2VbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwO2UuTnVwdGlhbFNjcmlwdD0hMDtlLlBhbGF0aW5vPSEwO2UuUGVycGV0dWE9ITA7ZS5QbGFudGluPSEwO2VbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwO2UuUGxheWJpbGw9ITA7ZVsiUG9vciBSaWNoYXJkIl09ITA7ZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMDtlLlJlbmF1bHQ9ITA7ZS5SZXF1aWVtPSEwO2UuUm9ja3dlbGw9ITA7ZS5Sb21hbj0hMDtlWyJSb3RpcyBTZXJpZiJdPSEwO2UuU2Fib249ITA7ZS5TY2FsYT0hMDtlLlNlYWd1bGw9ITA7ZS5TaXN0aW5hPSEwO2UuU291dmVuaXI9ITA7ZS5TVElYPSEwO2VbIlN0b25lIEluZm9ybWFsIl09ITA7ZVsiU3RvbmUgU2VyaWYiXT0hMDtlLlN5bGZhZW49ITA7ZS5UaW1lcz0hMDtlLlRyYWphbj0hMDtlWyJUcmluaXTDqSJdPSEwO2VbIlRydW1wIE1lZGlhZXZhbCJdPSEwO2UuVXRvcGlhPSEwO2VbIlZhbGUgVHlwZSJdPSEwO2VbIkJpdHN0cmVhbSBWZXJhIl09ITA7ZVsiVmVyYSBTZXJpZiJdPSEwO2UuVmVyc2FpbGxlcz0hMDtlLldhbnRlZD0hMDtlLldlaXNzPSEwO2VbIldpZGUgTGF0aW4iXT0hMDtlLldpbmRzb3I9ITA7ZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO2NvbnN0IGw9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkRpbmdiYXRzPSEwO2UuU3ltYm9sPSEwO2UuWmFwZkRpbmdiYXRzPSEwO2UuV2luZ2RpbmdzPSEwO2VbIldpbmdkaW5ncy1Cb2xkIl09ITA7ZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0hMH0pKTt0LmdldFN5bWJvbHNGb250cz1sO2NvbnN0IGg9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzJdPTEwO2VbM109MzI7ZVs0XT0zMztlWzVdPTM0O2VbNl09MzU7ZVs3XT0zNjtlWzhdPTM3O2VbOV09Mzg7ZVsxMF09Mzk7ZVsxMV09NDA7ZVsxMl09NDE7ZVsxM109NDI7ZVsxNF09NDM7ZVsxNV09NDQ7ZVsxNl09NDU7ZVsxN109NDY7ZVsxOF09NDc7ZVsxOV09NDg7ZVsyMF09NDk7ZVsyMV09NTA7ZVsyMl09NTE7ZVsyM109NTI7ZVsyNF09NTM7ZVsyNV09NTQ7ZVsyNl09NTU7ZVsyN109NTY7ZVsyOF09NTc7ZVsyOV09NTg7ZVszMF09ODk0O2VbMzFdPTYwO2VbMzJdPTYxO2VbMzNdPTYyO2VbMzRdPTYzO2VbMzVdPTY0O2VbMzZdPTY1O2VbMzddPTY2O2VbMzhdPTY3O2VbMzldPTY4O2VbNDBdPTY5O2VbNDFdPTcwO2VbNDJdPTcxO2VbNDNdPTcyO2VbNDRdPTczO2VbNDVdPTc0O2VbNDZdPTc1O2VbNDddPTc2O2VbNDhdPTc3O2VbNDldPTc4O2VbNTBdPTc5O2VbNTFdPTgwO2VbNTJdPTgxO2VbNTNdPTgyO2VbNTRdPTgzO2VbNTVdPTg0O2VbNTZdPTg1O2VbNTddPTg2O2VbNThdPTg3O2VbNTldPTg4O2VbNjBdPTg5O2VbNjFdPTkwO2VbNjJdPTkxO2VbNjNdPTkyO2VbNjRdPTkzO2VbNjVdPTk0O2VbNjZdPTk1O2VbNjddPTk2O2VbNjhdPTk3O2VbNjldPTk4O2VbNzBdPTk5O2VbNzFdPTEwMDtlWzcyXT0xMDE7ZVs3M109MTAyO2VbNzRdPTEwMztlWzc1XT0xMDQ7ZVs3Nl09MTA1O2VbNzddPTEwNjtlWzc4XT0xMDc7ZVs3OV09MTA4O2VbODBdPTEwOTtlWzgxXT0xMTA7ZVs4Ml09MTExO2VbODNdPTExMjtlWzg0XT0xMTM7ZVs4NV09MTE0O2VbODZdPTExNTtlWzg3XT0xMTY7ZVs4OF09MTE3O2VbODldPTExODtlWzkwXT0xMTk7ZVs5MV09MTIwO2VbOTJdPTEyMTtlWzkzXT0xMjI7ZVs5NF09MTIzO2VbOTVdPTEyNDtlWzk2XT0xMjU7ZVs5N109MTI2O2VbOThdPTE5NjtlWzk5XT0xOTc7ZVsxMDBdPTE5OTtlWzEwMV09MjAxO2VbMTAyXT0yMDk7ZVsxMDNdPTIxNDtlWzEwNF09MjIwO2VbMTA1XT0yMjU7ZVsxMDZdPTIyNDtlWzEwN109MjI2O2VbMTA4XT0yMjg7ZVsxMDldPTIyNztlWzExMF09MjI5O2VbMTExXT0yMzE7ZVsxMTJdPTIzMztlWzExM109MjMyO2VbMTE0XT0yMzQ7ZVsxMTVdPTIzNTtlWzExNl09MjM3O2VbMTE3XT0yMzY7ZVsxMThdPTIzODtlWzExOV09MjM5O2VbMTIwXT0yNDE7ZVsxMjFdPTI0MztlWzEyMl09MjQyO2VbMTIzXT0yNDQ7ZVsxMjRdPTI0NjtlWzEyNV09MjQ1O2VbMTI2XT0yNTA7ZVsxMjddPTI0OTtlWzEyOF09MjUxO2VbMTI5XT0yNTI7ZVsxMzBdPTgyMjQ7ZVsxMzFdPTE3NjtlWzEzMl09MTYyO2VbMTMzXT0xNjM7ZVsxMzRdPTE2NztlWzEzNV09ODIyNjtlWzEzNl09MTgyO2VbMTM3XT0yMjM7ZVsxMzhdPTE3NDtlWzEzOV09MTY5O2VbMTQwXT04NDgyO2VbMTQxXT0xODA7ZVsxNDJdPTE2ODtlWzE0M109ODgwMDtlWzE0NF09MTk4O2VbMTQ1XT0yMTY7ZVsxNDZdPTg3MzQ7ZVsxNDddPTE3NztlWzE0OF09ODgwNDtlWzE0OV09ODgwNTtlWzE1MF09MTY1O2VbMTUxXT0xODE7ZVsxNTJdPTg3MDY7ZVsxNTNdPTg3MjE7ZVsxNTRdPTg3MTk7ZVsxNTZdPTg3NDc7ZVsxNTddPTE3MDtlWzE1OF09MTg2O2VbMTU5XT04NDg2O2VbMTYwXT0yMzA7ZVsxNjFdPTI0ODtlWzE2Ml09MTkxO2VbMTYzXT0xNjE7ZVsxNjRdPTE3MjtlWzE2NV09ODczMDtlWzE2Nl09NDAyO2VbMTY3XT04Nzc2O2VbMTY4XT04NzEwO2VbMTY5XT0xNzE7ZVsxNzBdPTE4NztlWzE3MV09ODIzMDtlWzE3OV09ODIyMDtlWzE4MF09ODIyMTtlWzE4MV09ODIxNjtlWzE4Ml09ODIxNztlWzIwMF09MTkzO2VbMjAzXT0yMDU7ZVsyMDddPTIxMTtlWzIxMF09MjE4O2VbMjIzXT03MTE7ZVsyMjRdPTMyMTtlWzIyNV09MzIyO2VbMjI2XT0zNTI7ZVsyMjddPTM1MztlWzIyOF09MzgxO2VbMjI5XT0zODI7ZVsyMzNdPTIyMTtlWzIzNF09MjUzO2VbMjUyXT0yNjM7ZVsyNTNdPTI2ODtlWzI1NF09MjY5O2VbMjU4XT0yNTg7ZVsyNjBdPTI2MDtlWzI2MV09MjYxO2VbMjY1XT0yODA7ZVsyNjZdPTI4MTtlWzI2N109MjgyO2VbMjY4XT0yODM7ZVsyNjldPTMxMztlWzI3NV09MzIzO2VbMjc2XT0zMjQ7ZVsyNzhdPTMyODtlWzI4M109MzQ0O2VbMjg0XT0zNDU7ZVsyODVdPTM0NjtlWzI4Nl09MzQ3O2VbMjkyXT0zNjc7ZVsyOTVdPTM3NztlWzI5Nl09Mzc4O2VbMjk4XT0zODA7ZVszMDVdPTk2MztlWzMwNl09OTY0O2VbMzA3XT05NjY7ZVszMDhdPTgyMTU7ZVszMDldPTgyNTI7ZVszMTBdPTgzMTk7ZVszMTFdPTgzNTk7ZVszMTJdPTg1OTI7ZVszMTNdPTg1OTM7ZVszMzddPTk1NTI7ZVs0OTNdPTEwMzk7ZVs0OTRdPTEwNDA7ZVs2NzJdPTE0ODg7ZVs2NzNdPTE0ODk7ZVs2NzRdPTE0OTA7ZVs2NzVdPTE0OTE7ZVs2NzZdPTE0OTI7ZVs2NzddPTE0OTM7ZVs2NzhdPTE0OTQ7ZVs2NzldPTE0OTU7ZVs2ODBdPTE0OTY7ZVs2ODFdPTE0OTc7ZVs2ODJdPTE0OTg7ZVs2ODNdPTE0OTk7ZVs2ODRdPTE1MDA7ZVs2ODVdPTE1MDE7ZVs2ODZdPTE1MDI7ZVs2ODddPTE1MDM7ZVs2ODhdPTE1MDQ7ZVs2ODldPTE1MDU7ZVs2OTBdPTE1MDY7ZVs2OTFdPTE1MDc7ZVs2OTJdPTE1MDg7ZVs2OTNdPTE1MDk7ZVs2OTRdPTE1MTA7ZVs2OTVdPTE1MTE7ZVs2OTZdPTE1MTI7ZVs2OTddPTE1MTM7ZVs2OThdPTE1MTQ7ZVs3MDVdPTE1MjQ7ZVs3MDZdPTgzNjI7ZVs3MTBdPTY0Mjg4O2VbNzExXT02NDI5ODtlWzc1OV09MTYxNztlWzc2MV09MTc3NjtlWzc2M109MTc3ODtlWzc3NV09MTY1MjtlWzc3N109MTc2NDtlWzc3OF09MTc4MDtlWzc3OV09MTc4MTtlWzc4MF09MTc4MjtlWzc4Ml09NzcxO2VbNzgzXT02NDcyNjtlWzc4Nl09ODM2MztlWzc4OF09ODUzMjtlWzc5MF09NzY4O2VbNzkxXT03Njk7ZVs3OTJdPTc2ODtlWzc5NV09ODAzO2VbNzk3XT02NDMzNjtlWzc5OF09NjQzMzc7ZVs3OTldPTY0MzQyO2VbODAwXT02NDM0MztlWzgwMV09NjQzNDQ7ZVs4MDJdPTY0MzQ1O2VbODAzXT02NDM2MjtlWzgwNF09NjQzNjM7ZVs4MDVdPTY0MzY0O2VbMjQyNF09NzgyMTtlWzI0MjVdPTc4MjI7ZVsyNDI2XT03ODIzO2VbMjQyN109NzgyNDtlWzI0MjhdPTc4MjU7ZVsyNDI5XT03ODI2O2VbMjQzMF09NzgyNztlWzI0MzNdPTc2ODI7ZVsyNjc4XT04MDQ1O2VbMjY3OV09ODA0NjtlWzI4MzBdPTE1NTI7ZVsyODM4XT02ODY7ZVsyODQwXT03NTE7ZVsyODQyXT03NTM7ZVsyODQzXT03NTQ7ZVsyODQ0XT03NTU7ZVsyODQ2XT03NTc7ZVsyODU2XT03Njc7ZVsyODU3XT04NDg7ZVsyODU4XT04NDk7ZVsyODYyXT04NTM7ZVsyODYzXT04NTQ7ZVsyODY0XT04NTU7ZVsyODY1XT04NjE7ZVsyODY2XT04NjI7ZVsyOTA2XT03NDYwO2VbMjkwOF09NzQ2MjtlWzI5MDldPTc0NjM7ZVsyOTEwXT03NDY0O2VbMjkxMl09NzQ2NjtlWzI5MTNdPTc0Njc7ZVsyOTE0XT03NDY4O2VbMjkxNl09NzQ3MDtlWzI5MTddPTc0NzE7ZVsyOTE4XT03NDcyO2VbMjkyMF09NzQ3NDtlWzI5MjFdPTc0NzU7ZVsyOTIyXT03NDc2O2VbMjkyNF09NzQ3ODtlWzI5MjVdPTc0Nzk7ZVsyOTI2XT03NDgwO2VbMjkyOF09NzQ4MjtlWzI5MjldPTc0ODM7ZVsyOTMwXT03NDg0O2VbMjkzMl09NzQ4NjtlWzI5MzNdPTc0ODc7ZVsyOTM0XT03NDg4O2VbMjkzNl09NzQ5MDtlWzI5MzddPTc0OTE7ZVsyOTM4XT03NDkyO2VbMjk0MF09NzQ5NDtlWzI5NDFdPTc0OTU7ZVsyOTQyXT03NDk2O2VbMjk0NF09NzQ5ODtlWzI5NDZdPTc1MDA7ZVsyOTQ4XT03NTAyO2VbMjk1MF09NzUwNDtlWzI5NTFdPTc1MDU7ZVsyOTUyXT03NTA2O2VbMjk1NF09NzUwODtlWzI5NTVdPTc1MDk7ZVsyOTU2XT03NTEwO2VbMjk1OF09NzUxMjtlWzI5NTldPTc1MTM7ZVsyOTYwXT03NTE0O2VbMjk2Ml09NzUxNjtlWzI5NjNdPTc1MTc7ZVsyOTY0XT03NTE4O2VbMjk2Nl09NzUyMDtlWzI5NjddPTc1MjE7ZVsyOTY4XT03NTIyO2VbMjk3MF09NzUyNDtlWzI5NzFdPTc1MjU7ZVsyOTcyXT03NTI2O2VbMjk3NF09NzUyODtlWzI5NzVdPTc1Mjk7ZVsyOTc2XT03NTMwO2VbMjk3OF09MTUzNztlWzI5NzldPTE1Mzg7ZVsyOTgwXT0xNTM5O2VbMjk4Ml09MTU0OTtlWzI5ODNdPTE1NTE7ZVsyOTg0XT0xNTUyO2VbMjk4Nl09MTU1NDtlWzI5ODddPTE1NTU7ZVsyOTg4XT0xNTU2O2VbMjk5MF09MTYyMztlWzI5OTFdPTE2MjQ7ZVsyOTk1XT0xNzc1O2VbMjk5OV09MTc5MTtlWzMwMDJdPTY0MjkwO2VbMzAwM109NjQyOTE7ZVszMDA0XT02NDI5MjtlWzMwMDZdPTY0Mjk0O2VbMzAwN109NjQyOTU7ZVszMDA4XT02NDI5NjtlWzMwMTFdPTE5MDA7ZVszMDE0XT04MjIzO2VbMzAxNV09ODI0NDtlWzMwMTddPTc1MzI7ZVszMDE4XT03NTMzO2VbMzAxOV09NzUzNDtlWzMwNzVdPTc1OTA7ZVszMDc2XT03NTkxO2VbMzA3OV09NzU5NDtlWzMwODBdPTc1OTU7ZVszMDgzXT03NTk4O2VbMzA4NF09NzU5OTtlWzMwODddPTc2MDI7ZVszMDg4XT03NjAzO2VbMzA5MV09NzYwNjtlWzMwOTJdPTc2MDc7ZVszMDk1XT03NjEwO2VbMzA5Nl09NzYxMTtlWzMwOTldPTc2MTQ7ZVszMTAwXT03NjE1O2VbMzEwM109NzYxODtlWzMxMDRdPTc2MTk7ZVszMTA3XT04MzM3O2VbMzEwOF09ODMzODtlWzMxMTZdPTE4ODQ7ZVszMTE5XT0xODg1O2VbMzEyMF09MTg4NTtlWzMxMjNdPTE4ODY7ZVszMTI0XT0xODg2O2VbMzEyN109MTg4NztlWzMxMjhdPTE4ODc7ZVszMTMxXT0xODg4O2VbMzEzMl09MTg4ODtlWzMxMzVdPTE4ODk7ZVszMTM2XT0xODg5O2VbMzEzOV09MTg5MDtlWzMxNDBdPTE4OTA7ZVszMTQzXT0xODkxO2VbMzE0NF09MTg5MTtlWzMxNDddPTE4OTI7ZVszMTQ4XT0xODkyO2VbMzE1M109NTgwO2VbMzE1NF09NTgxO2VbMzE1N109NTg0O2VbMzE1OF09NTg1O2VbMzE2MV09NTg4O2VbMzE2Ml09NTg5O2VbMzE2NV09ODkxO2VbMzE2Nl09ODkyO2VbMzE2OV09MTI3NDtlWzMxNzBdPTEyNzU7ZVszMTczXT0xMjc4O2VbMzE3NF09MTI3OTtlWzMxODFdPTc2MjI7ZVszMTgyXT03NjIzO2VbMzI4Ml09MTE3OTk7ZVszMzE2XT01Nzg7ZVszMzc5XT00Mjc4NTtlWzMzOTNdPTExNTk7ZVszNDE2XT04Mzc3fSkpO3QuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPWg7Y29uc3QgdT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjI7ZVsyNjRdPTI2MTtlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPXU7Y29uc3QgZD0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMV09MzI7ZVs0XT02NTtlWzVdPTE5MjtlWzZdPTE5MztlWzldPTE5NjtlWzE3XT02NjtlWzE4XT02NztlWzIxXT0yNjg7ZVsyNF09Njg7ZVsyOF09Njk7ZVsyOV09MjAwO2VbMzBdPTIwMTtlWzMyXT0yODI7ZVszOF09NzA7ZVszOV09NzE7ZVs0NF09NzI7ZVs0N109NzM7ZVs0OF09MjA0O2VbNDldPTIwNTtlWzU4XT03NDtlWzYwXT03NTtlWzYyXT03NjtlWzY4XT03NztlWzY5XT03ODtlWzc1XT03OTtlWzc2XT0yMTA7ZVs4MF09MjE0O2VbODddPTgwO2VbODldPTgxO2VbOTBdPTgyO2VbOTJdPTM0NDtlWzk0XT04MztlWzk3XT0zNTI7ZVsxMDBdPTg0O2VbMTA0XT04NTtlWzEwOV09MjIwO2VbMTE1XT04NjtlWzExNl09ODc7ZVsxMjFdPTg4O2VbMTIyXT04OTtlWzEyNF09MjIxO2VbMTI3XT05MDtlWzEyOV09MzgxO2VbMjU4XT05NztlWzI1OV09MjI0O2VbMjYwXT0yMjU7ZVsyNjNdPTIyODtlWzI2OF09MjYxO2VbMjcxXT05ODtlWzI3Ml09OTk7ZVsyNzNdPTI2MztlWzI3NV09MjY5O2VbMjgyXT0xMDA7ZVsyODZdPTEwMTtlWzI4N109MjMyO2VbMjg4XT0yMzM7ZVsyOTBdPTI4MztlWzI5NV09MjgxO2VbMjk2XT0xMDI7ZVszMzZdPTEwMztlWzM0Nl09MTA0O2VbMzQ5XT0xMDU7ZVszNTBdPTIzNjtlWzM1MV09MjM3O2VbMzYxXT0xMDY7ZVszNjRdPTEwNztlWzM2N109MTA4O2VbMzcxXT0zMjI7ZVszNzNdPTEwOTtlWzM3NF09MTEwO2VbMzgxXT0xMTE7ZVszODJdPTI0MjtlWzM4M109MjQzO2VbMzg2XT0yNDY7ZVszOTNdPTExMjtlWzM5NV09MTEzO2VbMzk2XT0xMTQ7ZVszOThdPTM0NTtlWzQwMF09MTE1O2VbNDAxXT0zNDc7ZVs0MDNdPTM1MztlWzQxMF09MTE2O2VbNDM3XT0xMTc7ZVs0NDJdPTI1MjtlWzQ0OF09MTE4O2VbNDQ5XT0xMTk7ZVs0NTRdPTEyMDtlWzQ1NV09MTIxO2VbNDU3XT0yNTM7ZVs0NjBdPTEyMjtlWzQ2Ml09MzgyO2VbNDYzXT0zODA7ZVs4NTNdPTQ0O2VbODU1XT01ODtlWzg1Nl09NDY7ZVs4NzZdPTQ3O2VbODc4XT00NTtlWzg4Ml09NDU7ZVs4OTRdPTQwO2VbODk1XT00MTtlWzg5Nl09OTE7ZVs4OTddPTkzO2VbOTIzXT02NDtlWzEwMDRdPTQ4O2VbMTAwNV09NDk7ZVsxMDA2XT01MDtlWzEwMDddPTUxO2VbMTAwOF09NTI7ZVsxMDA5XT01MztlWzEwMTBdPTU0O2VbMTAxMV09NTU7ZVsxMDEyXT01NjtlWzEwMTNdPTU3O2VbMTA4MV09Mzc7ZVsxMDg1XT00MztlWzEwODZdPTQ1fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPWR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Ub1VuaWNvZGVNYXA9dC5JZGVudGl0eVRvVW5pY29kZU1hcD12b2lkIDA7dmFyIHI9YSgxNDUpO3QuVG9Vbmljb2RlTWFwPWNsYXNzIFRvVW5pY29kZU1hcHtjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTt0aGlzLl9tYXA9ZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX21hcC5sZW5ndGh9Zm9yRWFjaChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX1oYXMoZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21hcFtlXX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcFtlXX1jaGFyQ29kZU9mKGUpe2NvbnN0IHQ9dGhpcy5fbWFwO2lmKHQubGVuZ3RoPD02NTUzNilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcihjb25zdCBhIGluIHQpaWYodFthXT09PWUpcmV0dXJuIDB8YTtyZXR1cm4tMX1hbWVuZChlKXtmb3IoY29uc3QgdCBpbiBlKXRoaXMuX21hcFt0XT1lW3RdfX07dC5JZGVudGl0eVRvVW5pY29kZU1hcD1jbGFzcyBJZGVudGl0eVRvVW5pY29kZU1hcHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmlyc3RDaGFyPWU7dGhpcy5sYXN0Q2hhcj10fWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sYXN0Q2hhcisxLXRoaXMuZmlyc3RDaGFyfWZvckVhY2goZSl7Zm9yKGxldCB0PXRoaXMuZmlyc3RDaGFyLGE9dGhpcy5sYXN0Q2hhcjt0PD1hO3QrKyllKHQsdCl9aGFzKGUpe3JldHVybiB0aGlzLmZpcnN0Q2hhcjw9ZSYmZTw9dGhpcy5sYXN0Q2hhcn1nZXQoZSl7aWYodGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9Y2hhckNvZGVPZihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZT49dGhpcy5maXJzdENoYXImJmU8PXRoaXMubGFzdENoYXI/ZTotMX1hbWVuZChlKXsoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGFtZW5kKCkiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ0ZGRm9udD12b2lkIDA7dmFyIHI9YSgxODYpLG49YSgxODkpLGk9YSgxNDUpO3QuQ0ZGRm9udD1jbGFzcyBDRkZGb250e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7Y29uc3QgYT1uZXcgci5DRkZQYXJzZXIoZSx0LG4uU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1hLnBhcnNlKCk7dGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IHM9bmV3IHIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO3RoaXMuc2VhY3M9dGhpcy5jZmYuc2VhY3M7dHJ5e3RoaXMuZGF0YT1zLmNvbXBpbGUoKX1jYXRjaHsoMCxpLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrdC5sb2FkZWROYW1lKTt0aGlzLmRhdGE9ZX10aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50fWdldENoYXJzZXQoKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fWdldEdseXBoTWFwcGluZygpe2NvbnN0IGU9dGhpcy5jZmYsdD10aGlzLnByb3BlcnRpZXMse2NpZFRvR2lkTWFwOmEsY01hcDpyfT10LGk9ZS5jaGFyc2V0LmNoYXJzZXQ7bGV0IHMsbztpZih0LmNvbXBvc2l0ZSl7bGV0IHQsbjtpZihhPy5sZW5ndGg+MCl7dD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgZT0wLHI9YS5sZW5ndGg7ZTxyO2UrKyl7Y29uc3Qgcj1hW2VdO3ZvaWQgMCE9PXImJih0W3JdPWUpfX1zPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZS5pc0NJREZvbnQpZm9yKG89MDtvPGkubGVuZ3RoO28rKyl7Y29uc3QgZT1pW29dO249ci5jaGFyQ29kZU9mKGUpO3ZvaWQgMCE9PXQ/LltuXSYmKG49dFtuXSk7c1tuXT1vfWVsc2UgZm9yKG89MDtvPGUuY2hhclN0cmluZ3MuY291bnQ7bysrKXtuPXIuY2hhckNvZGVPZihvKTtzW25dPW99cmV0dXJuIHN9bGV0IGM9ZS5lbmNvZGluZz9lLmVuY29kaW5nLmVuY29kaW5nOm51bGw7dC5pc0ludGVybmFsRm9udCYmKGM9dC5kZWZhdWx0RW5jb2RpbmcpO3M9KDAsbi50eXBlMUZvbnRHbHlwaE1hcHBpbmcpKHQsYyxpKTtyZXR1cm4gc31oYXNHbHlwaElkKGUpe3JldHVybiB0aGlzLmNmZi5oYXNHbHlwaElkKGUpfV9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKXtjb25zdHtjaGFyc2V0OmUsZW5jb2Rpbmc6dH09dGhpcy5jZmY7aWYoIWV8fCF0KXJldHVybjtjb25zdCBhPWUuY2hhcnNldCxyPXQuZW5jb2Rpbmcsbj1bXTtmb3IoY29uc3QgZSBpbiByKXtjb25zdCB0PXJbZV07aWYodD49MCl7Y29uc3Qgcj1hW3RdO3ImJihuW2VdPXIpfX1uLmxlbmd0aD4wJiYodGhpcy5wcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZz1uKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7YSgxNDApO2EoMTU4KTthKDE2MCk7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO3ZhciByPWEoMTQ1KSxuPWEoMTg2KSxpPWEoMTkwKSxzPWEoMTg4KSxvPWEoMTU1KTtmdW5jdGlvbiBnZXRVaW50MzIoZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9ZnVuY3Rpb24gZ2V0VWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIGdldEludDE2KGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTYpPj4xNn1mdW5jdGlvbiBnZXRJbnQ4KGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH1mdW5jdGlvbiBnZXRGbG9hdDIxNChlLHQpe3JldHVybiBnZXRJbnQxNihlLHQpLzE2Mzg0fWZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGE9MzI3Njg7dDwxMjQwP2E9MTA3OnQ8MzM5MDAmJihhPTExMzEpO3JldHVybiBhfWZ1bmN0aW9uIHBhcnNlQ21hcChlLHQsYSl7Y29uc3Qgbj0xPT09Z2V0VWludDE2KGUsdCsyKT9nZXRVaW50MzIoZSx0KzgpOmdldFVpbnQzMihlLHQrMTYpLGk9Z2V0VWludDE2KGUsdCtuKTtsZXQgcyxvLGM7aWYoND09PWkpe2dldFVpbnQxNihlLHQrbisyKTtjb25zdCBhPWdldFVpbnQxNihlLHQrbis2KT4+MTtvPXQrbisxNDtzPVtdO2ZvcihjPTA7YzxhO2MrKyxvKz0yKXNbY109e2VuZDpnZXRVaW50MTYoZSxvKX07bys9Mjtmb3IoYz0wO2M8YTtjKyssbys9MilzW2NdLnN0YXJ0PWdldFVpbnQxNihlLG8pO2ZvcihjPTA7YzxhO2MrKyxvKz0yKXNbY10uaWREZWx0YT1nZXRVaW50MTYoZSxvKTtmb3IoYz0wO2M8YTtjKyssbys9Mil7bGV0IHQ9Z2V0VWludDE2KGUsbyk7aWYoMCE9PXQpe3NbY10uaWRzPVtdO2ZvcihsZXQgYT0wLHI9c1tjXS5lbmQtc1tjXS5zdGFydCsxO2E8cjthKyspe3NbY10uaWRzW2FdPWdldFVpbnQxNihlLG8rdCk7dCs9Mn19fXJldHVybiBzfWlmKDEyPT09aSl7Y29uc3QgYT1nZXRVaW50MzIoZSx0K24rMTIpO289dCtuKzE2O3M9W107Zm9yKGM9MDtjPGE7YysrKXt0PWdldFVpbnQzMihlLG8pO3MucHVzaCh7c3RhcnQ6dCxlbmQ6Z2V0VWludDMyKGUsbys0KSxpZERlbHRhOmdldFVpbnQzMihlLG8rOCktdH0pO28rPTEyfXJldHVybiBzfXRocm93IG5ldyByLkZvcm1hdEVycm9yKGB1bnN1cHBvcnRlZCBjbWFwOiAke2l9YCl9ZnVuY3Rpb24gcGFyc2VDZmYoZSx0LGEscil7Y29uc3QgaT1uZXcgbi5DRkZQYXJzZXIobmV3IG8uU3RyZWFtKGUsdCxhLXQpLHt9LHIpLnBhcnNlKCk7cmV0dXJue2dseXBoczppLmNoYXJTdHJpbmdzLm9iamVjdHMsc3VicnM6aS50b3BEaWN0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4Py5vYmplY3RzLGdzdWJyczppLmdsb2JhbFN1YnJJbmRleD8ub2JqZWN0cyxpc0NGRkNJREZvbnQ6aS5pc0NJREZvbnQsZmRTZWxlY3Q6aS5mZFNlbGVjdCxmZEFycmF5OmkuZmRBcnJheX19ZnVuY3Rpb24gbG9va3VwQ21hcChlLHQpe2NvbnN0IGE9dC5jb2RlUG9pbnRBdCgwKTtsZXQgcj0wLG49MCxpPWUubGVuZ3RoLTE7Zm9yKDtuPGk7KXtjb25zdCB0PW4raSsxPj4xO2E8ZVt0XS5zdGFydD9pPXQtMTpuPXR9ZVtuXS5zdGFydDw9YSYmYTw9ZVtuXS5lbmQmJihyPWVbbl0uaWREZWx0YSsoZVtuXS5pZHM/ZVtuXS5pZHNbYS1lW25dLnN0YXJ0XTphKSY2NTUzNSk7cmV0dXJue2NoYXJDb2RlOmEsZ2x5cGhJZDpyfX1mdW5jdGlvbiBjb21waWxlR2x5ZihlLHQsYSl7ZnVuY3Rpb24gbW92ZVRvKGUsYSl7dC5wdXNoKHtjbWQ6Im1vdmVUbyIsYXJnczpbZSxhXX0pfWZ1bmN0aW9uIGxpbmVUbyhlLGEpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2UsYV19KX1mdW5jdGlvbiBxdWFkcmF0aWNDdXJ2ZVRvKGUsYSxyLG4pe3QucHVzaCh7Y21kOiJxdWFkcmF0aWNDdXJ2ZVRvIixhcmdzOltlLGEscixuXX0pfWxldCByPTA7Y29uc3Qgbj1nZXRJbnQxNihlLHIpO2xldCBpLHM9MCxvPTA7cis9MTA7aWYobjwwKWRve2k9Z2V0VWludDE2KGUscik7Y29uc3Qgbj1nZXRVaW50MTYoZSxyKzIpO3IrPTQ7bGV0IGMsbDtpZigxJmkpe2lmKDImaSl7Yz1nZXRJbnQxNihlLHIpO2w9Z2V0SW50MTYoZSxyKzIpfWVsc2V7Yz1nZXRVaW50MTYoZSxyKTtsPWdldFVpbnQxNihlLHIrMil9cis9NH1lbHNlIGlmKDImaSl7Yz1nZXRJbnQ4KGUscisrKTtsPWdldEludDgoZSxyKyspfWVsc2V7Yz1lW3IrK107bD1lW3IrK119aWYoMiZpKXtzPWM7bz1sfWVsc2V7cz0wO289MH1sZXQgaD0xLHU9MSxkPTAsZj0wO2lmKDgmaSl7aD11PWdldEZsb2F0MjE0KGUscik7cis9Mn1lbHNlIGlmKDY0Jmkpe2g9Z2V0RmxvYXQyMTQoZSxyKTt1PWdldEZsb2F0MjE0KGUscisyKTtyKz00fWVsc2UgaWYoMTI4Jmkpe2g9Z2V0RmxvYXQyMTQoZSxyKTtkPWdldEZsb2F0MjE0KGUscisyKTtmPWdldEZsb2F0MjE0KGUscis0KTt1PWdldEZsb2F0MjE0KGUscis2KTtyKz04fWNvbnN0IGc9YS5nbHlwaHNbbl07aWYoZyl7dC5wdXNoKHtjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6W2gsZCxmLHUscyxvXX0pO2NvbXBpbGVHbHlmKGcsdCxhKTt0LnB1c2goe2NtZDoicmVzdG9yZSJ9KX19d2hpbGUoMzImaSk7ZWxzZXtjb25zdCB0PVtdO2xldCBhLGM7Zm9yKGE9MDthPG47YSsrKXt0LnB1c2goZ2V0VWludDE2KGUscikpO3IrPTJ9cis9MitnZXRVaW50MTYoZSxyKTtjb25zdCBsPXQuYXQoLTEpKzEsaD1bXTtmb3IoO2gubGVuZ3RoPGw7KXtpPWVbcisrXTtsZXQgdD0xOzgmaSYmKHQrPWVbcisrXSk7Zm9yKDt0LS0gPjA7KWgucHVzaCh7ZmxhZ3M6aX0pfWZvcihhPTA7YTxsO2ErKyl7c3dpdGNoKDE4JmhbYV0uZmxhZ3Mpe2Nhc2UgMDpzKz1nZXRJbnQxNihlLHIpO3IrPTI7YnJlYWs7Y2FzZSAyOnMtPWVbcisrXTticmVhaztjYXNlIDE4OnMrPWVbcisrXX1oW2FdLng9c31mb3IoYT0wO2E8bDthKyspe3N3aXRjaCgzNiZoW2FdLmZsYWdzKXtjYXNlIDA6bys9Z2V0SW50MTYoZSxyKTtyKz0yO2JyZWFrO2Nhc2UgNDpvLT1lW3IrK107YnJlYWs7Y2FzZSAzNjpvKz1lW3IrK119aFthXS55PW99bGV0IHU9MDtmb3Iocj0wO3I8bjtyKyspe2NvbnN0IGU9dFtyXSxuPWguc2xpY2UodSxlKzEpO2lmKDEmblswXS5mbGFncyluLnB1c2goblswXSk7ZWxzZSBpZigxJm4uYXQoLTEpLmZsYWdzKW4udW5zaGlmdChuLmF0KC0xKSk7ZWxzZXtjb25zdCBlPXtmbGFnczoxLHg6KG5bMF0ueCtuLmF0KC0xKS54KS8yLHk6KG5bMF0ueStuLmF0KC0xKS55KS8yfTtuLnVuc2hpZnQoZSk7bi5wdXNoKGUpfW1vdmVUbyhuWzBdLngsblswXS55KTtmb3IoYT0xLGM9bi5sZW5ndGg7YTxjO2ErKylpZigxJm5bYV0uZmxhZ3MpbGluZVRvKG5bYV0ueCxuW2FdLnkpO2Vsc2UgaWYoMSZuW2ErMV0uZmxhZ3Mpe3F1YWRyYXRpY0N1cnZlVG8oblthXS54LG5bYV0ueSxuW2ErMV0ueCxuW2ErMV0ueSk7YSsrfWVsc2UgcXVhZHJhdGljQ3VydmVUbyhuW2FdLngsblthXS55LChuW2FdLngrblthKzFdLngpLzIsKG5bYV0ueStuW2ErMV0ueSkvMik7dT1lKzF9fX1mdW5jdGlvbiBjb21waWxlQ2hhclN0cmluZyhlLHQsYSxuKXtmdW5jdGlvbiBtb3ZlVG8oZSxhKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLGFdfSl9ZnVuY3Rpb24gbGluZVRvKGUsYSl7dC5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSxhXX0pfWZ1bmN0aW9uIGJlemllckN1cnZlVG8oZSxhLHIsbixpLHMpe3QucHVzaCh7Y21kOiJiZXppZXJDdXJ2ZVRvIixhcmdzOltlLGEscixuLGksc119KX1jb25zdCBpPVtdO2xldCBvPTAsYz0wLGw9MDshZnVuY3Rpb24gcGFyc2UoZSl7bGV0IGg9MDtmb3IoO2g8ZS5sZW5ndGg7KXtsZXQgdSxkLGYsZyxwLG0sYix5LHcsUz0hMSx4PWVbaCsrXTtzd2l0Y2goeCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDE4OmNhc2UgMjM6bCs9aS5sZW5ndGg+PjE7Uz0hMDticmVhaztjYXNlIDQ6Yys9aS5wb3AoKTttb3ZlVG8obyxjKTtTPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO2kubGVuZ3RoPjA7KXtvKz1pLnNoaWZ0KCk7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpfWJyZWFrO2Nhc2UgNjpmb3IoO2kubGVuZ3RoPjA7KXtvKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO2MrPWkuc2hpZnQoKTtsaW5lVG8obyxjKX1icmVhaztjYXNlIDc6Zm9yKDtpLmxlbmd0aD4wOyl7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpO2lmKDA9PT1pLmxlbmd0aClicmVhaztvKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyl9YnJlYWs7Y2FzZSA4OmZvcig7aS5sZW5ndGg+MDspe3U9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2Nhc2UgMTA6eT1pLnBvcCgpO3c9bnVsbDtpZihhLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT1hLmZkU2VsZWN0LmdldEZESW5kZXgobik7aWYoZT49MCYmZTxhLmZkQXJyYXkubGVuZ3RoKXtjb25zdCB0PWEuZmRBcnJheVtlXTtsZXQgcjt0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4JiYocj10LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyk7aWYocil7eSs9Z2V0U3Vicm91dGluZUJpYXMocik7dz1yW3ldfX1lbHNlKDAsci53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIil9ZWxzZSB3PWEuc3VicnNbeSthLnN1YnJzQmlhc107dyYmcGFyc2Uodyk7YnJlYWs7Y2FzZSAxMTpyZXR1cm47Y2FzZSAxMjp4PWVbaCsrXTtzd2l0Y2goeCl7Y2FzZSAzNDp1PW8raS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7cD1jK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxjLGQscCxvLHApO3U9bytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxwLGQsYyxvLGMpO2JyZWFrO2Nhc2UgMzU6dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7dT1vK2kuc2hpZnQoKTtmPWMraS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2M9ZytpLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7aS5wb3AoKTticmVhaztjYXNlIDM2OnU9bytpLnNoaWZ0KCk7cD1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO209cCtpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUscCxkLG0sbyxtKTt1PW8raS5zaGlmdCgpO2Q9dStpLnNoaWZ0KCk7Yj1tK2kuc2hpZnQoKTtvPWQraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxtLGQsYixvLGMpO2JyZWFrO2Nhc2UgMzc6Y29uc3QgZT1vLHQ9Yzt1PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nK2kuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKTt1PW8raS5zaGlmdCgpO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZDtjPWc7TWF0aC5hYnMoby1lKT5NYXRoLmFicyhjLXQpP28rPWkuc2hpZnQoKTpjKz1pLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogMTIgJHt4fWApfWJyZWFrO2Nhc2UgMTQ6aWYoaS5sZW5ndGg+PTQpe2NvbnN0IGU9aS5wb3AoKSxyPWkucG9wKCk7Yz1pLnBvcCgpO289aS5wb3AoKTt0LnB1c2goe2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zbGF0ZSIsYXJnczpbbyxjXX0pO2xldCBuPWxvb2t1cENtYXAoYS5jbWFwLFN0cmluZy5mcm9tQ2hhckNvZGUoYS5nbHlwaE5hbWVNYXBbcy5TdGFuZGFyZEVuY29kaW5nW2VdXSkpO2NvbXBpbGVDaGFyU3RyaW5nKGEuZ2x5cGhzW24uZ2x5cGhJZF0sdCxhLG4uZ2x5cGhJZCk7dC5wdXNoKHtjbWQ6InJlc3RvcmUifSk7bj1sb29rdXBDbWFwKGEuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKGEuZ2x5cGhOYW1lTWFwW3MuU3RhbmRhcmRFbmNvZGluZ1tyXV0pKTtjb21waWxlQ2hhclN0cmluZyhhLmdseXBoc1tuLmdseXBoSWRdLHQsYSxuLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6bCs9aS5sZW5ndGg+PjE7aCs9bCs3Pj4zO1M9ITA7YnJlYWs7Y2FzZSAyMTpjKz1pLnBvcCgpO28rPWkucG9wKCk7bW92ZVRvKG8sYyk7Uz0hMDticmVhaztjYXNlIDIyOm8rPWkucG9wKCk7bW92ZVRvKG8sYyk7Uz0hMDticmVhaztjYXNlIDI0OmZvcig7aS5sZW5ndGg+Mjspe3U9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfW8rPWkuc2hpZnQoKTtjKz1pLnNoaWZ0KCk7bGluZVRvKG8sYyk7YnJlYWs7Y2FzZSAyNTpmb3IoO2kubGVuZ3RoPjY7KXtvKz1pLnNoaWZ0KCk7Yys9aS5zaGlmdCgpO2xpbmVUbyhvLGMpfXU9bytpLnNoaWZ0KCk7Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpO2JyZWFrO2Nhc2UgMjY6aS5sZW5ndGglMiYmKG8rPWkuc2hpZnQoKSk7Zm9yKDtpLmxlbmd0aD4wOyl7dT1vO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZDtjPWcraS5zaGlmdCgpO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2Nhc2UgMjc6aS5sZW5ndGglMiYmKGMrPWkuc2hpZnQoKSk7Zm9yKDtpLmxlbmd0aD4wOyl7dT1vK2kuc2hpZnQoKTtmPWM7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2Nhc2UgMjg6aS5wdXNoKChlW2hdPDwyNHxlW2grMV08PDE2KT4+MTYpO2grPTI7YnJlYWs7Y2FzZSAyOTp5PWkucG9wKCkrYS5nc3VicnNCaWFzO3c9YS5nc3VicnNbeV07dyYmcGFyc2Uodyk7YnJlYWs7Y2FzZSAzMDpmb3IoO2kubGVuZ3RoPjA7KXt1PW87Zj1jK2kuc2hpZnQoKTtkPXUraS5zaGlmdCgpO2c9ZitpLnNoaWZ0KCk7bz1kK2kuc2hpZnQoKTtjPWcrKDE9PT1pLmxlbmd0aD9pLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyh1LGYsZCxnLG8sYyk7aWYoMD09PWkubGVuZ3RoKWJyZWFrO3U9bytpLnNoaWZ0KCk7Zj1jO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO289ZCsoMT09PWkubGVuZ3RoP2kuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKX1icmVhaztjYXNlIDMxOmZvcig7aS5sZW5ndGg+MDspe3U9bytpLnNoaWZ0KCk7Zj1jO2Q9dStpLnNoaWZ0KCk7Zz1mK2kuc2hpZnQoKTtjPWcraS5zaGlmdCgpO289ZCsoMT09PWkubGVuZ3RoP2kuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKHUsZixkLGcsbyxjKTtpZigwPT09aS5sZW5ndGgpYnJlYWs7dT1vO2Y9YytpLnNoaWZ0KCk7ZD11K2kuc2hpZnQoKTtnPWYraS5zaGlmdCgpO289ZCtpLnNoaWZ0KCk7Yz1nKygxPT09aS5sZW5ndGg/aS5zaGlmdCgpOjApO2JlemllckN1cnZlVG8odSxmLGQsZyxvLGMpfWJyZWFrO2RlZmF1bHQ6aWYoeDwzMil0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHt4fWApO2lmKHg8MjQ3KWkucHVzaCh4LTEzOSk7ZWxzZSBpZih4PDI1MSlpLnB1c2goMjU2Kih4LTI0NykrZVtoKytdKzEwOCk7ZWxzZSBpZih4PDI1NSlpLnB1c2goMjU2Ki0oeC0yNTEpLWVbaCsrXS0xMDgpO2Vsc2V7aS5wdXNoKChlW2hdPDwyNHxlW2grMV08PDE2fGVbaCsyXTw8OHxlW2grM10pLzY1NTM2KTtoKz00fX1TJiYoaS5sZW5ndGg9MCl9fShlKX1jb25zdCBjPVtdO2NsYXNzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNvbnN0cnVjdG9yPT09Q29tcGlsZWRGb250JiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQ29tcGlsZWRGb250LiIpO3RoaXMuZm9udE1hdHJpeD1lO3RoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWQ9T2JqZWN0LmNyZWF0ZShudWxsKX1nZXRQYXRoSnMoZSl7Y29uc3R7Y2hhckNvZGU6dCxnbHlwaElkOmF9PWxvb2t1cENtYXAodGhpcy5jbWFwLGUpO2xldCByPXRoaXMuY29tcGlsZWRHbHlwaHNbYV07aWYoIXIpdHJ5e3I9dGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbYV0sYSk7dGhpcy5jb21waWxlZEdseXBoc1thXT1yfWNhdGNoKGUpe3RoaXMuY29tcGlsZWRHbHlwaHNbYV09Yzt2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF09YSk7dGhyb3cgZX12b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF09YSk7cmV0dXJuIHJ9Y29tcGlsZUdseXBoKGUsdCl7aWYoIWV8fDA9PT1lLmxlbmd0aHx8MTQ9PT1lWzBdKXJldHVybiBjO2xldCBhPXRoaXMuZm9udE1hdHJpeDtpZih0aGlzLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7aWYoZT49MCYmZTx0aGlzLmZkQXJyYXkubGVuZ3RoKXthPXRoaXMuZmRBcnJheVtlXS5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKXx8ci5GT05UX0lERU5USVRZX01BVFJJWH1lbHNlKDAsci53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIil9Y29uc3Qgbj1be2NtZDoic2F2ZSJ9LHtjbWQ6InRyYW5zZm9ybSIsYXJnczphLnNsaWNlKCl9LHtjbWQ6InNjYWxlIixhcmdzOlsic2l6ZSIsIi1zaXplIl19XTt0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxuLHQpO24ucHVzaCh7Y21kOiJyZXN0b3JlIn0pO3JldHVybiBufWNvbXBpbGVHbHlwaEltcGwoKXsoMCxyLnVucmVhY2hhYmxlKSgiQ2hpbGRyZW4gY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoaXMuIil9aGFzQnVpbHRQYXRoKGUpe2NvbnN0e2NoYXJDb2RlOnQsZ2x5cGhJZDphfT1sb29rdXBDbWFwKHRoaXMuY21hcCxlKTtyZXR1cm4gdm9pZCAwIT09dGhpcy5jb21waWxlZEdseXBoc1thXSYmdm9pZCAwIT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdfX1jbGFzcyBUcnVlVHlwZUNvbXBpbGVkIGV4dGVuZHMgQ29tcGlsZWRGb250e2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcihhfHxbNDg4ZS02LDAsMCw0ODhlLTYsMCwwXSk7dGhpcy5nbHlwaHM9ZTt0aGlzLmNtYXA9dH1jb21waWxlR2x5cGhJbXBsKGUsdCl7Y29tcGlsZUdseWYoZSx0LHRoaXMpfX1jbGFzcyBUeXBlMkNvbXBpbGVkIGV4dGVuZHMgQ29tcGlsZWRGb250e2NvbnN0cnVjdG9yKGUsdCxhLHIpe3N1cGVyKGF8fFsuMDAxLDAsMCwuMDAxLDAsMF0pO3RoaXMuZ2x5cGhzPWUuZ2x5cGhzO3RoaXMuZ3N1YnJzPWUuZ3N1YnJzfHxbXTt0aGlzLnN1YnJzPWUuc3VicnN8fFtdO3RoaXMuY21hcD10O3RoaXMuZ2x5cGhOYW1lTWFwPXJ8fCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKTt0aGlzLmdzdWJyc0JpYXM9Z2V0U3Vicm91dGluZUJpYXModGhpcy5nc3VicnMpO3RoaXMuc3VicnNCaWFzPWdldFN1YnJvdXRpbmVCaWFzKHRoaXMuc3VicnMpO3RoaXMuaXNDRkZDSURGb250PWUuaXNDRkZDSURGb250O3RoaXMuZmRTZWxlY3Q9ZS5mZFNlbGVjdDt0aGlzLmZkQXJyYXk9ZS5mZEFycmF5fWNvbXBpbGVHbHlwaEltcGwoZSx0LGEpe2NvbXBpbGVDaGFyU3RyaW5nKGUsdCx0aGlzLGEpfX10LkZvbnRSZW5kZXJlckZhY3Rvcnk9Y2xhc3MgRm9udFJlbmRlcmVyRmFjdG9yeXtzdGF0aWMgY3JlYXRlKGUsdCl7Y29uc3QgYT1uZXcgVWludDhBcnJheShlLmRhdGEpO2xldCBuLGkscyxvLGMsbDtjb25zdCBoPWdldFVpbnQxNihhLDQpO2ZvcihsZXQgZT0wLHU9MTI7ZTxoO2UrKyx1Kz0xNil7Y29uc3QgZT0oMCxyLmJ5dGVzVG9TdHJpbmcpKGEuc3ViYXJyYXkodSx1KzQpKSxoPWdldFVpbnQzMihhLHUrOCksZD1nZXRVaW50MzIoYSx1KzEyKTtzd2l0Y2goZSl7Y2FzZSJjbWFwIjpuPXBhcnNlQ21hcChhLGgpO2JyZWFrO2Nhc2UiZ2x5ZiI6aT1hLnN1YmFycmF5KGgsaCtkKTticmVhaztjYXNlImxvY2EiOnM9YS5zdWJhcnJheShoLGgrZCk7YnJlYWs7Y2FzZSJoZWFkIjpsPWdldFVpbnQxNihhLGgrMTgpO2M9Z2V0VWludDE2KGEsaCs1MCk7YnJlYWs7Y2FzZSJDRkYgIjpvPXBhcnNlQ2ZmKGEsaCxoK2QsdCl9fWlmKGkpe2NvbnN0IHQ9bD9bMS9sLDAsMCwxL2wsMCwwXTplLmZvbnRNYXRyaXg7cmV0dXJuIG5ldyBUcnVlVHlwZUNvbXBpbGVkKGZ1bmN0aW9uIHBhcnNlR2x5ZlRhYmxlKGUsdCxhKXtsZXQgcixuO2lmKGEpe3I9NDtuPWdldFVpbnQzMn1lbHNle3I9MjtuPShlLHQpPT4yKmdldFVpbnQxNihlLHQpfWNvbnN0IGk9W107bGV0IHM9bih0LDApO2ZvcihsZXQgYT1yO2E8dC5sZW5ndGg7YSs9cil7Y29uc3Qgcj1uKHQsYSk7aS5wdXNoKGUuc3ViYXJyYXkocyxyKSk7cz1yfXJldHVybiBpfShpLHMsYyksbix0KX1yZXR1cm4gbmV3IFR5cGUyQ29tcGlsZWQobyxuLGUuZm9udE1hdHJpeCxlLmdseXBoTmFtZU1hcCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmdldE1ldHJpY3M9dC5nZXRGb250QmFzaWNNZXRyaWNzPXZvaWQgMDt2YXIgcj1hKDE1MCk7Y29uc3Qgbj0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDA7ZVsiQ291cmllci1Cb2xkIl09NjAwO2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDA7ZVsiQ291cmllci1PYmxpcXVlIl09NjAwO2UuSGVsdmV0aWNhPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09Mjc4O2UucXVvdGVkYmw9MzU1O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NjY3O2UucXVvdGVyaWdodD0yMjI7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTU1NjtlLmF0PTEwMTU7ZS5BPTY2NztlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTUwMDtlLks9NjY3O2UuTD01NTY7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9Mjc4O2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0yNzg7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yMjI7ZS5hPTU1NjtlLmI9NTU2O2UuYz01MDA7ZS5kPTU1NjtlLmU9NTU2O2UuZj0yNzg7ZS5nPTU1NjtlLmg9NTU2O2UuaT0yMjI7ZS5qPTIyMjtlLms9NTAwO2UubD0yMjI7ZS5tPTgzMztlLm49NTU2O2Uubz01NTY7ZS5wPTU1NjtlLnE9NTU2O2Uucj0zMzM7ZS5zPTUwMDtlLnQ9Mjc4O2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NTAwO2UuYnJhY2VsZWZ0PTMzNDtlLmJhcj0yNjA7ZS5icmFjZXJpZ2h0PTMzNDtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0xOTE7ZS5xdW90ZWRibGxlZnQ9MzMzO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTUwMDtlLmZsPTUwMDtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01Mzc7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MjIyO2UucXVvdGVkYmxiYXNlPTMzMztlLnF1b3RlZGJscmlnaHQ9MzMzO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTU1NjtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTIyMjtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTUwMDtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTUwMDtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9MjIyO2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTUwMDtlLnNjZWRpbGxhPTUwMDtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NTAwO2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTY0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTAwO2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI2MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01NTY7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTIyMjtlLnRjYXJvbj0zMTc7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9MjIyO2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01NTY7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01MDA7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01NTY7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj0yOTk7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTU1NjtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj01NTY7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01NTY7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NTU2O2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01NTY7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTU1NjtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NTU2O2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NTU2O2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01NTY7ZS5ldGg9NTU2O2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2VbIkhlbHZldGljYS1Cb2xkIl09KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00NzQ7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD03MjI7ZS5xdW90ZXJpZ2h0PTI3ODtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NjExO2UuYXQ9OTc1O2UuQT03MjI7ZS5CPTcyMjtlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01NTY7ZS5LPTcyMjtlLkw9NjExO2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTg0O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9Mjc4O2UuYT01NTY7ZS5iPTYxMTtlLmM9NTU2O2UuZD02MTE7ZS5lPTU1NjtlLmY9MzMzO2UuZz02MTE7ZS5oPTYxMTtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTU1NjtlLmw9Mjc4O2UubT04ODk7ZS5uPTYxMTtlLm89NjExO2UucD02MTE7ZS5xPTYxMTtlLnI9Mzg5O2Uucz01NTY7ZS50PTMzMztlLnU9NjExO2Uudj01NTY7ZS53PTc3ODtlLng9NTU2O2UueT01NTY7ZS56PTUwMDtlLmJyYWNlbGVmdD0zODk7ZS5iYXI9MjgwO2UuYnJhY2VyaWdodD0zODk7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MjM4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT02MTE7ZS5mbD02MTE7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTU2O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTI3ODtlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTYxMTtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTU1NjtlLnNjb21tYWFjY2VudD01NTY7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz02MTE7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01NTY7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01NTY7ZS5zY2VkaWxsYT01NTY7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTYxMTtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NzIyO2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTU1NjtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj03NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTYxMTtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTYxMTtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NTU2O2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTU1NjtlLm5hY3V0ZT02MTE7ZS51bWFjcm9uPTYxMTtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yODA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTM4OTtlLm9tYWNyb249NjExO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249Mzg5O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NjExO2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTU2O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj02MTE7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NjExO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NjExO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NjExO2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249NDAwO2UuS2NvbW1hYWNjZW50PTcyMjtlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NjExO2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NjExO2UubnRpbGRlPTYxMTtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTYxMTtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NjExO2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT02MTE7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTcyMjtlLm90aWxkZT02MTE7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01NTY7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NjExO2UudGNvbW1hYWNjZW50PTMzMztlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTYxMTtlLnVkaWVyZXNpcz02MTE7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NjExO2UuZXRoPTYxMTtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NjExO2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQ3NDtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTcyMjtlLnF1b3RlcmlnaHQ9Mjc4O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj02MTE7ZS5hdD05NzU7ZS5BPTcyMjtlLkI9NzIyO2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTU1NjtlLks9NzIyO2UuTD02MTE7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zMzM7ZS5hc2NpaWNpcmN1bT01ODQ7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yNzg7ZS5hPTU1NjtlLmI9NjExO2UuYz01NTY7ZS5kPTYxMTtlLmU9NTU2O2UuZj0zMzM7ZS5nPTYxMTtlLmg9NjExO2UuaT0yNzg7ZS5qPTI3ODtlLms9NTU2O2UubD0yNzg7ZS5tPTg4OTtlLm49NjExO2Uubz02MTE7ZS5wPTYxMTtlLnE9NjExO2Uucj0zODk7ZS5zPTU1NjtlLnQ9MzMzO2UudT02MTE7ZS52PTU1NjtlLnc9Nzc4O2UueD01NTY7ZS55PTU1NjtlLno9NTAwO2UuYnJhY2VsZWZ0PTM4OTtlLmJhcj0yODA7ZS5icmFjZXJpZ2h0PTM4OTtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0yMzg7ZS5xdW90ZWRibGxlZnQ9NTAwO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTYxMTtlLmZsPTYxMTtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01NTY7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9Mjc4O2UucXVvdGVkYmxiYXNlPTUwMDtlLnF1b3RlZGJscmlnaHQ9NTAwO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTYxMTtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NjExO2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTcyMjtlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTU2O2Uuc2NvbW1hYWNjZW50PTU1NjtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTYxMTtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTU1NjtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTU1NjtlLnNjZWRpbGxhPTU1NjtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ5NDtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NjExO2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj03MjI7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NTU2O2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTc0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NjExO2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTcyMjtlLkFicmV2ZT03MjI7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NjExO2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ5NDtlLnlkaWVyZXNpcz01NTY7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTU2O2UubmFjdXRlPTYxMTtlLnVtYWNyb249NjExO2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI4MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj02MTE7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zODk7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTcyMjtlLkFkaWVyZXNpcz03MjI7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT02MTE7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01NTY7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTYxMTtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT02MTE7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD02MTE7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD02MTE7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj00MDA7ZS5LY29tbWFhY2NlbnQ9NzIyO2UuTGFjdXRlPTYxMTtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD02MTE7ZS5udGlsZGU9NjExO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NjExO2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT02MTE7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTYxMTtlLnJhZGljYWw9NTQ5O2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTYxMTtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NjExO2UuQXRpbGRlPTcyMjtlLkFvZ29uZWs9NzIyO2UuQXJpbmc9NzIyO2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTU1NjtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj02MTE7ZS50Y29tbWFhY2NlbnQ9MzMzO2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NjExO2UudWRpZXJlc2lzPTYxMTtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD02MTE7ZS5ldGg9NjExO2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD02MTE7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2VbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0yNzg7ZS5xdW90ZWRibD0zNTU7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD02Njc7ZS5xdW90ZXJpZ2h0PTIyMjtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NTU2O2UuYXQ9MTAxNTtlLkE9NjY3O2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTAwO2UuSz02Njc7ZS5MPTU1NjtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0yNzg7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTI3ODtlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTIyMjtlLmE9NTU2O2UuYj01NTY7ZS5jPTUwMDtlLmQ9NTU2O2UuZT01NTY7ZS5mPTI3ODtlLmc9NTU2O2UuaD01NTY7ZS5pPTIyMjtlLmo9MjIyO2Uuaz01MDA7ZS5sPTIyMjtlLm09ODMzO2Uubj01NTY7ZS5vPTU1NjtlLnA9NTU2O2UucT01NTY7ZS5yPTMzMztlLnM9NTAwO2UudD0yNzg7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej01MDA7ZS5icmFjZWxlZnQ9MzM0O2UuYmFyPTI2MDtlLmJyYWNlcmlnaHQ9MzM0O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTE5MTtlLnF1b3RlZGJsbGVmdD0zMzM7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTAwO2UuZmw9NTAwO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTUzNztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yMjI7ZS5xdW90ZWRibGJhc2U9MzMzO2UucXVvdGVkYmxyaWdodD0zMzM7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NTU2O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9MjIyO2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9NTAwO2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTAwO2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yMjI7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTAwO2Uuc2NlZGlsbGE9NTAwO2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT01MDA7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NjQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01MDA7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjYwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTU1NjtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9MjIyO2UudGNhcm9uPTMxNztlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yMjI7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTU1NjtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTUwMDtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTU1NjtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTI5OTtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NTU2O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTU1NjtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTU1NjtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT01NTY7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTU1NjtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTU2O2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD01NTY7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz01NTY7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTU1NjtlLmV0aD01NTY7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZS5TeW1ib2w9KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS51bml2ZXJzYWw9NzEzO2UubnVtYmVyc2lnbj01MDA7ZS5leGlzdGVudGlhbD01NDk7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5zdWNodGhhdD00Mzk7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlza21hdGg9NTAwO2UucGx1cz01NDk7ZS5jb21tYT0yNTA7ZS5taW51cz01NDk7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01NDk7ZS5lcXVhbD01NDk7ZS5ncmVhdGVyPTU0OTtlLnF1ZXN0aW9uPTQ0NDtlLmNvbmdydWVudD01NDk7ZS5BbHBoYT03MjI7ZS5CZXRhPTY2NztlLkNoaT03MjI7ZS5EZWx0YT02MTI7ZS5FcHNpbG9uPTYxMTtlLlBoaT03NjM7ZS5HYW1tYT02MDM7ZS5FdGE9NzIyO2UuSW90YT0zMzM7ZS50aGV0YTE9NjMxO2UuS2FwcGE9NzIyO2UuTGFtYmRhPTY4NjtlLk11PTg4OTtlLk51PTcyMjtlLk9taWNyb249NzIyO2UuUGk9NzY4O2UuVGhldGE9NzQxO2UuUmhvPTU1NjtlLlNpZ21hPTU5MjtlLlRhdT02MTE7ZS5VcHNpbG9uPTY5MDtlLnNpZ21hMT00Mzk7ZS5PbWVnYT03Njg7ZS5YaT02NDU7ZS5Qc2k9Nzk1O2UuWmV0YT02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS50aGVyZWZvcmU9ODYzO2UuYnJhY2tldHJpZ2h0PTMzMztlLnBlcnBlbmRpY3VsYXI9NjU4O2UudW5kZXJzY29yZT01MDA7ZS5yYWRpY2FsZXg9NTAwO2UuYWxwaGE9NjMxO2UuYmV0YT01NDk7ZS5jaGk9NTQ5O2UuZGVsdGE9NDk0O2UuZXBzaWxvbj00Mzk7ZS5waGk9NTIxO2UuZ2FtbWE9NDExO2UuZXRhPTYwMztlLmlvdGE9MzI5O2UucGhpMT02MDM7ZS5rYXBwYT01NDk7ZS5sYW1iZGE9NTQ5O2UubXU9NTc2O2UubnU9NTIxO2Uub21pY3Jvbj01NDk7ZS5waT01NDk7ZS50aGV0YT01MjE7ZS5yaG89NTQ5O2Uuc2lnbWE9NjAzO2UudGF1PTQzOTtlLnVwc2lsb249NTc2O2Uub21lZ2ExPTcxMztlLm9tZWdhPTY4NjtlLnhpPTQ5MztlLnBzaT02ODY7ZS56ZXRhPTQ5NDtlLmJyYWNlbGVmdD00ODA7ZS5iYXI9MjAwO2UuYnJhY2VyaWdodD00ODA7ZS5zaW1pbGFyPTU0OTtlLkV1cm89NzUwO2UuVXBzaWxvbjE9NjIwO2UubWludXRlPTI0NztlLmxlc3NlcXVhbD01NDk7ZS5mcmFjdGlvbj0xNjc7ZS5pbmZpbml0eT03MTM7ZS5mbG9yaW49NTAwO2UuY2x1Yj03NTM7ZS5kaWFtb25kPTc1MztlLmhlYXJ0PTc1MztlLnNwYWRlPTc1MztlLmFycm93Ym90aD0xMDQyO2UuYXJyb3dsZWZ0PTk4NztlLmFycm93dXA9NjAzO2UuYXJyb3dyaWdodD05ODc7ZS5hcnJvd2Rvd249NjAzO2UuZGVncmVlPTQwMDtlLnBsdXNtaW51cz01NDk7ZS5zZWNvbmQ9NDExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLm11bHRpcGx5PTU0OTtlLnByb3BvcnRpb25hbD03MTM7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS5idWxsZXQ9NDYwO2UuZGl2aWRlPTU0OTtlLm5vdGVxdWFsPTU0OTtlLmVxdWl2YWxlbmNlPTU0OTtlLmFwcHJveGVxdWFsPTU0OTtlLmVsbGlwc2lzPTFlMztlLmFycm93dmVydGV4PTYwMztlLmFycm93aG9yaXpleD0xZTM7ZS5jYXJyaWFnZXJldHVybj02NTg7ZS5hbGVwaD04MjM7ZS5JZnJha3R1cj02ODY7ZS5SZnJha3R1cj03OTU7ZS53ZWllcnN0cmFzcz05ODc7ZS5jaXJjbGVtdWx0aXBseT03Njg7ZS5jaXJjbGVwbHVzPTc2ODtlLmVtcHR5c2V0PTgyMztlLmludGVyc2VjdGlvbj03Njg7ZS51bmlvbj03Njg7ZS5wcm9wZXJzdXBlcnNldD03MTM7ZS5yZWZsZXhzdXBlcnNldD03MTM7ZS5ub3RzdWJzZXQ9NzEzO2UucHJvcGVyc3Vic2V0PTcxMztlLnJlZmxleHN1YnNldD03MTM7ZS5lbGVtZW50PTcxMztlLm5vdGVsZW1lbnQ9NzEzO2UuYW5nbGU9NzY4O2UuZ3JhZGllbnQ9NzEzO2UucmVnaXN0ZXJzZXJpZj03OTA7ZS5jb3B5cmlnaHRzZXJpZj03OTA7ZS50cmFkZW1hcmtzZXJpZj04OTA7ZS5wcm9kdWN0PTgyMztlLnJhZGljYWw9NTQ5O2UuZG90bWF0aD0yNTA7ZS5sb2dpY2Fsbm90PTcxMztlLmxvZ2ljYWxhbmQ9NjAzO2UubG9naWNhbG9yPTYwMztlLmFycm93ZGJsYm90aD0xMDQyO2UuYXJyb3dkYmxsZWZ0PTk4NztlLmFycm93ZGJsdXA9NjAzO2UuYXJyb3dkYmxyaWdodD05ODc7ZS5hcnJvd2RibGRvd249NjAzO2UubG96ZW5nZT00OTQ7ZS5hbmdsZWxlZnQ9MzI5O2UucmVnaXN0ZXJzYW5zPTc5MDtlLmNvcHlyaWdodHNhbnM9NzkwO2UudHJhZGVtYXJrc2Fucz03ODY7ZS5zdW1tYXRpb249NzEzO2UucGFyZW5sZWZ0dHA9Mzg0O2UucGFyZW5sZWZ0ZXg9Mzg0O2UucGFyZW5sZWZ0YnQ9Mzg0O2UuYnJhY2tldGxlZnR0cD0zODQ7ZS5icmFja2V0bGVmdGV4PTM4NDtlLmJyYWNrZXRsZWZ0YnQ9Mzg0O2UuYnJhY2VsZWZ0dHA9NDk0O2UuYnJhY2VsZWZ0bWlkPTQ5NDtlLmJyYWNlbGVmdGJ0PTQ5NDtlLmJyYWNlZXg9NDk0O2UuYW5nbGVyaWdodD0zMjk7ZS5pbnRlZ3JhbD0yNzQ7ZS5pbnRlZ3JhbHRwPTY4NjtlLmludGVncmFsZXg9Njg2O2UuaW50ZWdyYWxidD02ODY7ZS5wYXJlbnJpZ2h0dHA9Mzg0O2UucGFyZW5yaWdodGV4PTM4NDtlLnBhcmVucmlnaHRidD0zODQ7ZS5icmFja2V0cmlnaHR0cD0zODQ7ZS5icmFja2V0cmlnaHRleD0zODQ7ZS5icmFja2V0cmlnaHRidD0zODQ7ZS5icmFjZXJpZ2h0dHA9NDk0O2UuYnJhY2VyaWdodG1pZD00OTQ7ZS5icmFjZXJpZ2h0YnQ9NDk0O2UuYXBwbGU9NzkwfSkpO2VbIlRpbWVzLVJvbWFuIl09KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00MDg7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9NTY0O2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTI3ODtlLnNlbWljb2xvbj0yNzg7ZS5sZXNzPTU2NDtlLmVxdWFsPTU2NDtlLmdyZWF0ZXI9NTY0O2UucXVlc3Rpb249NDQ0O2UuYXQ9OTIxO2UuQT03MjI7ZS5CPTY2NztlLkM9NjY3O2UuRD03MjI7ZS5FPTYxMTtlLkY9NTU2O2UuRz03MjI7ZS5IPTcyMjtlLkk9MzMzO2UuSj0zODk7ZS5LPTcyMjtlLkw9NjExO2UuTT04ODk7ZS5OPTcyMjtlLk89NzIyO2UuUD01NTY7ZS5RPTcyMjtlLlI9NjY3O2UuUz01NTY7ZS5UPTYxMTtlLlU9NzIyO2UuVj03MjI7ZS5XPTk0NDtlLlg9NzIyO2UuWT03MjI7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NDY5O2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT00NDQ7ZS5iPTUwMDtlLmM9NDQ0O2UuZD01MDA7ZS5lPTQ0NDtlLmY9MzMzO2UuZz01MDA7ZS5oPTUwMDtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTUwMDtlLmw9Mjc4O2UubT03Nzg7ZS5uPTUwMDtlLm89NTAwO2UucD01MDA7ZS5xPTUwMDtlLnI9MzMzO2Uucz0zODk7ZS50PTI3ODtlLnU9NTAwO2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTQ0NDtlLmJyYWNlbGVmdD00ODA7ZS5iYXI9MjAwO2UuYnJhY2VyaWdodD00ODA7ZS5hc2NpaXRpbGRlPTU0MTtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9MTgwO2UucXVvdGVkYmxsZWZ0PTQ0NDtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01NTY7ZS5mbD01NTY7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NDUzO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT00NDQ7ZS5xdW90ZWRibHJpZ2h0PTQ0NDtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj00NDQ7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTg4OTtlLm9yZGZlbWluaW5lPTI3NjtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9NzIyO2UuT0U9ODg5O2Uub3JkbWFzY3VsaW5lPTMxMDtlLmFlPTY2NztlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NzIyO2UuZ2VybWFuZGJscz01MDA7ZS5JZGllcmVzaXM9MzMzO2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT00NDQ7ZS51aHVuZ2FydW1sYXV0PTUwMDtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NzIyO2UuZGl2aWRlPTU2NDtlLllhY3V0ZT03MjI7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NDQ0O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz00NDQ7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01MDA7ZS5FZGllcmVzaXM9NjExO2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NjA7ZS5FbWFjcm9uPTYxMTtlLmNjYXJvbj00NDQ7ZS5hcmluZz00NDQ7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT00NDQ7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTY2NztlLmF0aWxkZT00NDQ7ZS5FZG90YWNjZW50PTYxMTtlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NjY3O2UuR2NvbW1hYWNjZW50PTcyMjtlLnVjaXJjdW1mbGV4PTUwMDtlLmFjaXJjdW1mbGV4PTQ0NDtlLkFtYWNyb249NzIyO2UucmNhcm9uPTMzMztlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NTU2O2UuT21hY3Jvbj03MjI7ZS5SYWN1dGU9NjY3O2UuU2FjdXRlPTU1NjtlLmRjYXJvbj01ODg7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTUwMDtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTcyMjtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTY0O2UudWFjdXRlPTUwMDtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTYxMTtlLmFkaWVyZXNpcz00NDQ7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01MDA7ZS51bWFjcm9uPTUwMDtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9MzMzO2UucGx1c21pbnVzPTU2NDtlLmJyb2tlbmJhcj0yMDA7ZS5yZWdpc3RlcmVkPTc2MDtlLkdicmV2ZT03MjI7ZS5JZG90YWNjZW50PTMzMztlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjExO2UucmFjdXRlPTMzMztlLm9tYWNyb249NTAwO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTY2NztlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249MzI2O2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT00NDQ7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03MjI7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj00NDQ7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTcyMjtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01MDA7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9NzIyO2UubXU9NTAwO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02MTE7ZS5kY3JvYXQ9NTAwO2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01NTY7ZS5sY2Fyb249MzQ0O2UuS2NvbW1hYWNjZW50PTcyMjtlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9OTgwO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9MzMzO2UuSW1hY3Jvbj0zMzM7ZS5MY2Fyb249NjExO2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTUwMDtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTYxMTtlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTU1NjtlLlNjb21tYWFjY2VudD01NTY7ZS5PaHVuZ2FydW1sYXV0PTcyMjtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTY2NztlLnVncmF2ZT01MDA7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9MzMzO2UuTnRpbGRlPTcyMjtlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NjY3O2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03MjI7ZS56ZG90YWNjZW50PTQ0NDtlLkVjYXJvbj02MTE7ZS5Jb2dvbmVrPTMzMztlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz01NjQ7ZS5JY2lyY3VtZmxleD0zMzM7ZS5uY2Fyb249NTAwO2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NTY0O2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01MDA7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj00NDQ7ZS5uY29tbWFhY2NlbnQ9NTAwO2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlWyJUaW1lcy1Cb2xkIl09KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD01NTU7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTFlMztlLmFtcGVyc2FuZD04MzM7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9NTcwO2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU3MDtlLmVxdWFsPTU3MDtlLmdyZWF0ZXI9NTcwO2UucXVlc3Rpb249NTAwO2UuYXQ9OTMwO2UuQT03MjI7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTc3ODtlLkk9Mzg5O2UuSj01MDA7ZS5LPTc3ODtlLkw9NjY3O2UuTT05NDQ7ZS5OPTcyMjtlLk89Nzc4O2UuUD02MTE7ZS5RPTc3ODtlLlI9NzIyO2UuUz01NTY7ZS5UPTY2NztlLlU9NzIyO2UuVj03MjI7ZS5XPTFlMztlLlg9NzIyO2UuWT03MjI7ZS5aPTY2NztlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTgxO2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT01MDA7ZS5iPTU1NjtlLmM9NDQ0O2UuZD01NTY7ZS5lPTQ0NDtlLmY9MzMzO2UuZz01MDA7ZS5oPTU1NjtlLmk9Mjc4O2Uuaj0zMzM7ZS5rPTU1NjtlLmw9Mjc4O2UubT04MzM7ZS5uPTU1NjtlLm89NTAwO2UucD01NTY7ZS5xPTU1NjtlLnI9NDQ0O2Uucz0zODk7ZS50PTMzMztlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTQ0NDtlLmJyYWNlbGVmdD0zOTQ7ZS5iYXI9MjIwO2UuYnJhY2VyaWdodD0zOTQ7ZS5hc2NpaXRpbGRlPTUyMDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9Mjc4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01NTY7ZS5mbD01NTY7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NTQwO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj01MDA7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTMwMDtlLkxzbGFzaD02Njc7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTMzMDtlLmFlPTcyMjtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NzIyO2UuZ2VybWFuZGJscz01NTY7ZS5JZGllcmVzaXM9Mzg5O2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT01MDA7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NzIyO2UuZGl2aWRlPTU3MDtlLllhY3V0ZT03MjI7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NTAwO2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01MDA7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NDc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj00NDQ7ZS5hcmluZz01MDA7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01MDA7ZS5UY29tbWFhY2NlbnQ9NjY3O2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01MDA7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTUwMDtlLkFtYWNyb249NzIyO2UucmNhcm9uPTQ0NDtlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NjY3O2UuVGhvcm49NjExO2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTU1NjtlLmRjYXJvbj02NzI7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTcwO2UudWFjdXRlPTU1NjtlLlRjYXJvbj02Njc7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01MDA7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mzg5O2UucGx1c21pbnVzPTU3MDtlLmJyb2tlbmJhcj0yMjA7ZS5yZWdpc3RlcmVkPTc0NztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTM4OTtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTQ0NDtlLm9tYWNyb249NTAwO2UuWmFjdXRlPTY2NztlLlpjYXJvbj02Njc7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249NDE2O2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT00NDQ7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj01MDA7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01NTY7ZS5sY2Fyb249Mzk0O2UuS2NvbW1hYWNjZW50PTc3ODtlLkxhY3V0ZT02Njc7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9Mzg5O2UuSW1hY3Jvbj0zODk7ZS5MY2Fyb249NjY3O2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTU1NjtlLlNjb21tYWFjY2VudD01NTY7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9NDQ0O2UuTnRpbGRlPTcyMjtlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTY2NztlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTQ0NDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTM4OTtlLmtjb21tYWFjY2VudD01NTY7ZS5taW51cz01NzA7ZS5JY2lyY3VtZmxleD0zODk7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTMzMztlLmxvZ2ljYWxub3Q9NTcwO2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj00NDQ7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsci5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zODk7ZS5xdW90ZWRibD01NTU7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9NTcwO2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU3MDtlLmVxdWFsPTU3MDtlLmdyZWF0ZXI9NTcwO2UucXVlc3Rpb249NTAwO2UuYXQ9ODMyO2UuQT02Njc7ZS5CPTY2NztlLkM9NjY3O2UuRD03MjI7ZS5FPTY2NztlLkY9NjY3O2UuRz03MjI7ZS5IPTc3ODtlLkk9Mzg5O2UuSj01MDA7ZS5LPTY2NztlLkw9NjExO2UuTT04ODk7ZS5OPTcyMjtlLk89NzIyO2UuUD02MTE7ZS5RPTcyMjtlLlI9NjY3O2UuUz01NTY7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTg4OTtlLlg9NjY3O2UuWT02MTE7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTcwO2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT01MDA7ZS5iPTUwMDtlLmM9NDQ0O2UuZD01MDA7ZS5lPTQ0NDtlLmY9MzMzO2UuZz01MDA7ZS5oPTU1NjtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTUwMDtlLmw9Mjc4O2UubT03Nzg7ZS5uPTU1NjtlLm89NTAwO2UucD01MDA7ZS5xPTUwMDtlLnI9Mzg5O2Uucz0zODk7ZS50PTI3ODtlLnU9NTU2O2Uudj00NDQ7ZS53PTY2NztlLng9NTAwO2UueT00NDQ7ZS56PTM4OTtlLmJyYWNlbGVmdD0zNDg7ZS5iYXI9MjIwO2UuYnJhY2VyaWdodD0zNDg7ZS5hc2NpaXRpbGRlPTU3MDtlLmV4Y2xhbWRvd249Mzg5O2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9Mjc4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01NTY7ZS5mbD01NTY7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NTAwO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj01MDA7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTk0NDtlLm9yZGZlbWluaW5lPTI2NjtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9NzIyO2UuT0U9OTQ0O2Uub3JkbWFzY3VsaW5lPTMwMDtlLmFlPTcyMjtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NzIyO2UuZ2VybWFuZGJscz01MDA7ZS5JZGllcmVzaXM9Mzg5O2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT01MDA7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NjExO2UuZGl2aWRlPTU3MDtlLllhY3V0ZT02MTE7ZS5BY2lyY3VtZmxleD02Njc7ZS5hYWN1dGU9NTAwO2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTQ0NDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01MDA7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NDc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj00NDQ7ZS5hcmluZz01MDA7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01MDA7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTY2NztlLmF0aWxkZT01MDA7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NjY3O2UuR2NvbW1hYWNjZW50PTcyMjtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTUwMDtlLkFtYWNyb249NjY3O2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjExO2UuT21hY3Jvbj03MjI7ZS5SYWN1dGU9NjY3O2UuU2FjdXRlPTU1NjtlLmRjYXJvbj02MDg7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTcyMjtlLkFncmF2ZT02Njc7ZS5BYnJldmU9NjY3O2UubXVsdGlwbHk9NTcwO2UudWFjdXRlPTU1NjtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NDQ0O2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01MDA7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mzg5O2UucGx1c21pbnVzPTU3MDtlLmJyb2tlbmJhcj0yMjA7ZS5yZWdpc3RlcmVkPTc0NztlLkdicmV2ZT03MjI7ZS5JZG90YWNjZW50PTM4OTtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTM4OTtlLm9tYWNyb249NTAwO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTY2NztlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249MzY2O2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02Njc7ZS5BZGllcmVzaXM9NjY3O2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT0zODk7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03MjI7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj01MDA7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTcyMjtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01MDA7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9NzIyO2UubXU9NTc2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTAwO2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01NTY7ZS5sY2Fyb249MzgyO2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9Mzg5O2UuSW1hY3Jvbj0zODk7ZS5MY2Fyb249NjExO2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTU1NjtlLlNjb21tYWFjY2VudD01NTY7ZS5PaHVuZ2FydW1sYXV0PTcyMjtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTY2NztlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTcyMjtlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NjY3O2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT02Njc7ZS5Bb2dvbmVrPTY2NztlLkFyaW5nPTY2NztlLk90aWxkZT03MjI7ZS56ZG90YWNjZW50PTM4OTtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTM4OTtlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz02MDY7ZS5JY2lyY3VtZmxleD0zODk7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NjA2O2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj0zODk7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlWyJUaW1lcy1JdGFsaWMiXT0oMCxyLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwO2UuZXhjbGFtPTMzMztlLnF1b3RlZGJsPTQyMDtlLm51bWJlcnNpZ249NTAwO2UuZG9sbGFyPTUwMDtlLnBlcmNlbnQ9ODMzO2UuYW1wZXJzYW5kPTc3ODtlLnF1b3RlcmlnaHQ9MzMzO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9NTAwO2UucGx1cz02NzU7ZS5jb21tYT0yNTA7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249MzMzO2Uuc2VtaWNvbG9uPTMzMztlLmxlc3M9Njc1O2UuZXF1YWw9Njc1O2UuZ3JlYXRlcj02NzU7ZS5xdWVzdGlvbj01MDA7ZS5hdD05MjA7ZS5BPTYxMTtlLkI9NjExO2UuQz02Njc7ZS5EPTcyMjtlLkU9NjExO2UuRj02MTE7ZS5HPTcyMjtlLkg9NzIyO2UuST0zMzM7ZS5KPTQ0NDtlLks9NjY3O2UuTD01NTY7ZS5NPTgzMztlLk49NjY3O2UuTz03MjI7ZS5QPTYxMTtlLlE9NzIyO2UuUj02MTE7ZS5TPTUwMDtlLlQ9NTU2O2UuVT03MjI7ZS5WPTYxMTtlLlc9ODMzO2UuWD02MTE7ZS5ZPTU1NjtlLlo9NTU2O2UuYnJhY2tldGxlZnQ9Mzg5O2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0zODk7ZS5hc2NpaWNpcmN1bT00MjI7ZS51bmRlcnNjb3JlPTUwMDtlLnF1b3RlbGVmdD0zMzM7ZS5hPTUwMDtlLmI9NTAwO2UuYz00NDQ7ZS5kPTUwMDtlLmU9NDQ0O2UuZj0yNzg7ZS5nPTUwMDtlLmg9NTAwO2UuaT0yNzg7ZS5qPTI3ODtlLms9NDQ0O2UubD0yNzg7ZS5tPTcyMjtlLm49NTAwO2Uubz01MDA7ZS5wPTUwMDtlLnE9NTAwO2Uucj0zODk7ZS5zPTM4OTtlLnQ9Mjc4O2UudT01MDA7ZS52PTQ0NDtlLnc9NjY3O2UueD00NDQ7ZS55PTQ0NDtlLno9Mzg5O2UuYnJhY2VsZWZ0PTQwMDtlLmJhcj0yNzU7ZS5icmFjZXJpZ2h0PTQwMDtlLmFzY2lpdGlsZGU9NTQxO2UuZXhjbGFtZG93bj0zODk7ZS5jZW50PTUwMDtlLnN0ZXJsaW5nPTUwMDtlLmZyYWN0aW9uPTE2NztlLnllbj01MDA7ZS5mbG9yaW49NTAwO2Uuc2VjdGlvbj01MDA7ZS5jdXJyZW5jeT01MDA7ZS5xdW90ZXNpbmdsZT0yMTQ7ZS5xdW90ZWRibGxlZnQ9NTU2O2UuZ3VpbGxlbW90bGVmdD01MDA7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTUwMDtlLmZsPTUwMDtlLmVuZGFzaD01MDA7ZS5kYWdnZXI9NTAwO2UuZGFnZ2VyZGJsPTUwMDtlLnBlcmlvZGNlbnRlcmVkPTI1MDtlLnBhcmFncmFwaD01MjM7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MzMzO2UucXVvdGVkYmxiYXNlPTU1NjtlLnF1b3RlZGJscmlnaHQ9NTU2O2UuZ3VpbGxlbW90cmlnaHQ9NTAwO2UuZWxsaXBzaXM9ODg5O2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTUwMDtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9ODg5O2UuQUU9ODg5O2Uub3JkZmVtaW5pbmU9Mjc2O2UuTHNsYXNoPTU1NjtlLk9zbGFzaD03MjI7ZS5PRT05NDQ7ZS5vcmRtYXNjdWxpbmU9MzEwO2UuYWU9NjY3O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTI3ODtlLm9zbGFzaD01MDA7ZS5vZT02Njc7ZS5nZXJtYW5kYmxzPTUwMDtlLklkaWVyZXNpcz0zMzM7ZS5lYWN1dGU9NDQ0O2UuYWJyZXZlPTUwMDtlLnVodW5nYXJ1bWxhdXQ9NTAwO2UuZWNhcm9uPTQ0NDtlLllkaWVyZXNpcz01NTY7ZS5kaXZpZGU9Njc1O2UuWWFjdXRlPTU1NjtlLkFjaXJjdW1mbGV4PTYxMTtlLmFhY3V0ZT01MDA7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NDQ0O2Uuc2NvbW1hYWNjZW50PTM4OTtlLmVjaXJjdW1mbGV4PTQ0NDtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTUwMDtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTUwMDtlLkVkaWVyZXNpcz02MTE7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTc2MDtlLkVtYWNyb249NjExO2UuY2Nhcm9uPTQ0NDtlLmFyaW5nPTUwMDtlLk5jb21tYWFjY2VudD02Njc7ZS5sYWN1dGU9Mjc4O2UuYWdyYXZlPTUwMDtlLlRjb21tYWFjY2VudD01NTY7ZS5DYWN1dGU9NjY3O2UuYXRpbGRlPTUwMDtlLkVkb3RhY2NlbnQ9NjExO2Uuc2Nhcm9uPTM4OTtlLnNjZWRpbGxhPTM4OTtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj02MTE7ZS5HY29tbWFhY2NlbnQ9NzIyO2UudWNpcmN1bWZsZXg9NTAwO2UuYWNpcmN1bWZsZXg9NTAwO2UuQW1hY3Jvbj02MTE7ZS5yY2Fyb249Mzg5O2UuY2NlZGlsbGE9NDQ0O2UuWmRvdGFjY2VudD01NTY7ZS5UaG9ybj02MTE7ZS5PbWFjcm9uPTcyMjtlLlJhY3V0ZT02MTE7ZS5TYWN1dGU9NTAwO2UuZGNhcm9uPTU0NDtlLlVtYWNyb249NzIyO2UudXJpbmc9NTAwO2UudGhyZWVzdXBlcmlvcj0zMDA7ZS5PZ3JhdmU9NzIyO2UuQWdyYXZlPTYxMTtlLkFicmV2ZT02MTE7ZS5tdWx0aXBseT02NzU7ZS51YWN1dGU9NTAwO2UuVGNhcm9uPTU1NjtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz00NDQ7ZS5OYWN1dGU9NjY3O2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjExO2UuYWRpZXJlc2lzPTUwMDtlLmVkaWVyZXNpcz00NDQ7ZS5jYWN1dGU9NDQ0O2UubmFjdXRlPTUwMDtlLnVtYWNyb249NTAwO2UuTmNhcm9uPTY2NztlLklhY3V0ZT0zMzM7ZS5wbHVzbWludXM9Njc1O2UuYnJva2VuYmFyPTI3NTtlLnJlZ2lzdGVyZWQ9NzYwO2UuR2JyZXZlPTcyMjtlLklkb3RhY2NlbnQ9MzMzO2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02MTE7ZS5yYWN1dGU9Mzg5O2Uub21hY3Jvbj01MDA7ZS5aYWN1dGU9NTU2O2UuWmNhcm9uPTU1NjtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NjY3O2UubGNvbW1hYWNjZW50PTI3ODtlLnRjYXJvbj0zMDA7ZS5lb2dvbmVrPTQ0NDtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTYxMTtlLkFkaWVyZXNpcz02MTE7ZS5lZ3JhdmU9NDQ0O2UuemFjdXRlPTM4OTtlLmlvZ29uZWs9Mjc4O2UuT2FjdXRlPTcyMjtlLm9hY3V0ZT01MDA7ZS5hbWFjcm9uPTUwMDtlLnNhY3V0ZT0zODk7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9NzIyO2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTUwMDtlLnR3b3N1cGVyaW9yPTMwMDtlLk9kaWVyZXNpcz03MjI7ZS5tdT01MDA7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01MDA7ZS5Fb2dvbmVrPTYxMTtlLmRjcm9hdD01MDA7ZS50aHJlZXF1YXJ0ZXJzPTc1MDtlLlNjZWRpbGxhPTUwMDtlLmxjYXJvbj0zMDA7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTU1NjtlLnRyYWRlbWFyaz05ODA7ZS5lZG90YWNjZW50PTQ0NDtlLklncmF2ZT0zMzM7ZS5JbWFjcm9uPTMzMztlLkxjYXJvbj02MTE7ZS5vbmVoYWxmPTc1MDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01MDA7ZS5udGlsZGU9NTAwO2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjExO2UuZW1hY3Jvbj00NDQ7ZS5nYnJldmU9NTAwO2Uub25lcXVhcnRlcj03NTA7ZS5TY2Fyb249NTAwO2UuU2NvbW1hYWNjZW50PTUwMDtlLk9odW5nYXJ1bWxhdXQ9NzIyO2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01MDA7ZS5DY2Fyb249NjY3O2UudWdyYXZlPTUwMDtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zODk7ZS5OdGlsZGU9NjY3O2Uub3RpbGRlPTUwMDtlLlJjb21tYWFjY2VudD02MTE7ZS5MY29tbWFhY2NlbnQ9NTU2O2UuQXRpbGRlPTYxMTtlLkFvZ29uZWs9NjExO2UuQXJpbmc9NjExO2UuT3RpbGRlPTcyMjtlLnpkb3RhY2NlbnQ9Mzg5O2UuRWNhcm9uPTYxMTtlLklvZ29uZWs9MzMzO2Uua2NvbW1hYWNjZW50PTQ0NDtlLm1pbnVzPTY3NTtlLkljaXJjdW1mbGV4PTMzMztlLm5jYXJvbj01MDA7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD02NzU7ZS5vZGllcmVzaXM9NTAwO2UudWRpZXJlc2lzPTUwMDtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01MDA7ZS5ldGg9NTAwO2UuemNhcm9uPTM4OTtlLm5jb21tYWFjY2VudD01MDA7ZS5vbmVzdXBlcmlvcj0zMDA7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTAwfSkpO2UuWmFwZkRpbmdiYXRzPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5hMT05NzQ7ZS5hMj05NjE7ZS5hMjAyPTk3NDtlLmEzPTk4MDtlLmE0PTcxOTtlLmE1PTc4OTtlLmExMTk9NzkwO2UuYTExOD03OTE7ZS5hMTE3PTY5MDtlLmExMT05NjA7ZS5hMTI9OTM5O2UuYTEzPTU0OTtlLmExND04NTU7ZS5hMTU9OTExO2UuYTE2PTkzMztlLmExMDU9OTExO2UuYTE3PTk0NTtlLmExOD05NzQ7ZS5hMTk9NzU1O2UuYTIwPTg0NjtlLmEyMT03NjI7ZS5hMjI9NzYxO2UuYTIzPTU3MTtlLmEyND02Nzc7ZS5hMjU9NzYzO2UuYTI2PTc2MDtlLmEyNz03NTk7ZS5hMjg9NzU0O2UuYTY9NDk0O2UuYTc9NTUyO2UuYTg9NTM3O2UuYTk9NTc3O2UuYTEwPTY5MjtlLmEyOT03ODY7ZS5hMzA9Nzg4O2UuYTMxPTc4ODtlLmEzMj03OTA7ZS5hMzM9NzkzO2UuYTM0PTc5NDtlLmEzNT04MTY7ZS5hMzY9ODIzO2UuYTM3PTc4OTtlLmEzOD04NDE7ZS5hMzk9ODIzO2UuYTQwPTgzMztlLmE0MT04MTY7ZS5hNDI9ODMxO2UuYTQzPTkyMztlLmE0ND03NDQ7ZS5hNDU9NzIzO2UuYTQ2PTc0OTtlLmE0Nz03OTA7ZS5hNDg9NzkyO2UuYTQ5PTY5NTtlLmE1MD03NzY7ZS5hNTE9NzY4O2UuYTUyPTc5MjtlLmE1Mz03NTk7ZS5hNTQ9NzA3O2UuYTU1PTcwODtlLmE1Nj02ODI7ZS5hNTc9NzAxO2UuYTU4PTgyNjtlLmE1OT04MTU7ZS5hNjA9Nzg5O2UuYTYxPTc4OTtlLmE2Mj03MDc7ZS5hNjM9Njg3O2UuYTY0PTY5NjtlLmE2NT02ODk7ZS5hNjY9Nzg2O2UuYTY3PTc4NztlLmE2OD03MTM7ZS5hNjk9NzkxO2UuYTcwPTc4NTtlLmE3MT03OTE7ZS5hNzI9ODczO2UuYTczPTc2MTtlLmE3ND03NjI7ZS5hMjAzPTc2MjtlLmE3NT03NTk7ZS5hMjA0PTc1OTtlLmE3Nj04OTI7ZS5hNzc9ODkyO2UuYTc4PTc4ODtlLmE3OT03ODQ7ZS5hODE9NDM4O2UuYTgyPTEzODtlLmE4Mz0yNzc7ZS5hODQ9NDE1O2UuYTk3PTM5MjtlLmE5OD0zOTI7ZS5hOTk9NjY4O2UuYTEwMD02Njg7ZS5hODk9MzkwO2UuYTkwPTM5MDtlLmE5Mz0zMTc7ZS5hOTQ9MzE3O2UuYTkxPTI3NjtlLmE5Mj0yNzY7ZS5hMjA1PTUwOTtlLmE4NT01MDk7ZS5hMjA2PTQxMDtlLmE4Nj00MTA7ZS5hODc9MjM0O2UuYTg4PTIzNDtlLmE5NT0zMzQ7ZS5hOTY9MzM0O2UuYTEwMT03MzI7ZS5hMTAyPTU0NDtlLmExMDM9NTQ0O2UuYTEwND05MTA7ZS5hMTA2PTY2NztlLmExMDc9NzYwO2UuYTEwOD03NjA7ZS5hMTEyPTc3NjtlLmExMTE9NTk1O2UuYTExMD02OTQ7ZS5hMTA5PTYyNjtlLmExMjA9Nzg4O2UuYTEyMT03ODg7ZS5hMTIyPTc4ODtlLmExMjM9Nzg4O2UuYTEyND03ODg7ZS5hMTI1PTc4ODtlLmExMjY9Nzg4O2UuYTEyNz03ODg7ZS5hMTI4PTc4ODtlLmExMjk9Nzg4O2UuYTEzMD03ODg7ZS5hMTMxPTc4ODtlLmExMzI9Nzg4O2UuYTEzMz03ODg7ZS5hMTM0PTc4ODtlLmExMzU9Nzg4O2UuYTEzNj03ODg7ZS5hMTM3PTc4ODtlLmExMzg9Nzg4O2UuYTEzOT03ODg7ZS5hMTQwPTc4ODtlLmExNDE9Nzg4O2UuYTE0Mj03ODg7ZS5hMTQzPTc4ODtlLmExNDQ9Nzg4O2UuYTE0NT03ODg7ZS5hMTQ2PTc4ODtlLmExNDc9Nzg4O2UuYTE0OD03ODg7ZS5hMTQ5PTc4ODtlLmExNTA9Nzg4O2UuYTE1MT03ODg7ZS5hMTUyPTc4ODtlLmExNTM9Nzg4O2UuYTE1ND03ODg7ZS5hMTU1PTc4ODtlLmExNTY9Nzg4O2UuYTE1Nz03ODg7ZS5hMTU4PTc4ODtlLmExNTk9Nzg4O2UuYTE2MD04OTQ7ZS5hMTYxPTgzODtlLmExNjM9MTAxNjtlLmExNjQ9NDU4O2UuYTE5Nj03NDg7ZS5hMTY1PTkyNDtlLmExOTI9NzQ4O2UuYTE2Nj05MTg7ZS5hMTY3PTkyNztlLmExNjg9OTI4O2UuYTE2OT05Mjg7ZS5hMTcwPTgzNDtlLmExNzE9ODczO2UuYTE3Mj04Mjg7ZS5hMTczPTkyNDtlLmExNjI9OTI0O2UuYTE3ND05MTc7ZS5hMTc1PTkzMDtlLmExNzY9OTMxO2UuYTE3Nz00NjM7ZS5hMTc4PTg4MztlLmExNzk9ODM2O2UuYTE5Mz04MzY7ZS5hMTgwPTg2NztlLmExOTk9ODY3O2UuYTE4MT02OTY7ZS5hMjAwPTY5NjtlLmExODI9ODc0O2UuYTIwMT04NzQ7ZS5hMTgzPTc2MDtlLmExODQ9OTQ2O2UuYTE5Nz03NzE7ZS5hMTg1PTg2NTtlLmExOTQ9NzcxO2UuYTE5OD04ODg7ZS5hMTg2PTk2NztlLmExOTU9ODg4O2UuYTE4Nz04MzE7ZS5hMTg4PTg3MztlLmExODk9OTI3O2UuYTE5MD05NzA7ZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9bjtjb25zdCBpPSgwLHIuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6LTQyNn07ZVsiQ291cmllci1Cb2xkIl09e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDo0Mzl9O2VbIkNvdXJpZXItT2JsaXF1ZSJdPXthc2NlbnQ6NjI5LGRlc2NlbnQ6LTE1NyxjYXBIZWlnaHQ6NTYyLHhIZWlnaHQ6NDI2fTtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDo0MjZ9O2UuSGVsdmV0aWNhPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTIzfTtlWyJIZWx2ZXRpY2EtQm9sZCJdPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTMyfTtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTIzfTtlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT17YXNjZW50OjcxOCxkZXNjZW50Oi0yMDcsY2FwSGVpZ2h0OjcxOCx4SGVpZ2h0OjUzMn07ZVsiVGltZXMtUm9tYW4iXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY2Mix4SGVpZ2h0OjQ1MH07ZVsiVGltZXMtQm9sZCJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6Njc2LHhIZWlnaHQ6NDYxfTtlWyJUaW1lcy1JdGFsaWMiXT17YXNjZW50OjY4MyxkZXNjZW50Oi0yMTcsY2FwSGVpZ2h0OjY1Myx4SGVpZ2h0OjQ0MX07ZVsiVGltZXMtQm9sZEl0YWxpYyJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjY5LHhIZWlnaHQ6NDYyfTtlLlN5bWJvbD17YXNjZW50Ok1hdGguTmFOLGRlc2NlbnQ6TWF0aC5OYU4sY2FwSGVpZ2h0Ok1hdGguTmFOLHhIZWlnaHQ6TWF0aC5OYU59O2UuWmFwZkRpbmdiYXRzPXthc2NlbnQ6TWF0aC5OYU4sZGVzY2VudDpNYXRoLk5hTixjYXBIZWlnaHQ6TWF0aC5OYU4seEhlaWdodDpNYXRoLk5hTn19KSk7dC5nZXRGb250QmFzaWNNZXRyaWNzPWl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5HbHlmVGFibGU9dm9pZCAwO2EoMTQwKTthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxNTgpO3QuR2x5ZlRhYmxlPWNsYXNzIEdseWZUYWJsZXtjb25zdHJ1Y3RvcihlKXtsZXR7Z2x5ZlRhYmxlOnQsaXNHbHlwaExvY2F0aW9uc0xvbmc6YSxsb2NhVGFibGU6cixudW1HbHlwaHM6bn09ZTt0aGlzLmdseXBocz1bXTtjb25zdCBpPW5ldyBEYXRhVmlldyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKSxzPW5ldyBEYXRhVmlldyh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKSxvPWE/NDoyO2xldCBjPWE/aS5nZXRVaW50MzIoMCk6MippLmdldFVpbnQxNigwKSxsPTA7Zm9yKGxldCBlPTA7ZTxuO2UrKyl7bCs9bztjb25zdCBlPWE/aS5nZXRVaW50MzIobCk6MippLmdldFVpbnQxNihsKTtpZihlPT09Yyl7dGhpcy5nbHlwaHMucHVzaChuZXcgR2x5cGgoe30pKTtjb250aW51ZX1jb25zdCB0PUdseXBoLnBhcnNlKGMscyk7dGhpcy5nbHlwaHMucHVzaCh0KTtjPWV9fWdldFNpemUoKXtyZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKCgoZSx0KT0+ZSsodC5nZXRTaXplKCkrMyYtNCkpLDApfXdyaXRlKCl7Y29uc3QgZT10aGlzLmdldFNpemUoKSx0PW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoZSkpLGE9ZT4xMzEwNzAscj1hPzQ6MixuPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoKHRoaXMuZ2x5cGhzLmxlbmd0aCsxKSpyKSk7YT9uLnNldFVpbnQzMigwLDApOm4uc2V0VWludDE2KDAsMCk7bGV0IGk9MCxzPTA7Zm9yKGNvbnN0IGUgb2YgdGhpcy5nbHlwaHMpe2krPWUud3JpdGUoaSx0KTtpPWkrMyYtNDtzKz1yO2E/bi5zZXRVaW50MzIocyxpKTpuLnNldFVpbnQxNihzLGk+PjEpfXJldHVybntpc0xvY2F0aW9uTG9uZzphLGxvY2E6bmV3IFVpbnQ4QXJyYXkobi5idWZmZXIpLGdseWY6bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpfX1zY2FsZShlKXtmb3IobGV0IHQ9MCxhPXRoaXMuZ2x5cGhzLmxlbmd0aDt0PGE7dCsrKXRoaXMuZ2x5cGhzW3RdLnNjYWxlKGVbdF0pfX07Y2xhc3MgR2x5cGh7Y29uc3RydWN0b3IoZSl7bGV0e2hlYWRlcjp0PW51bGwsc2ltcGxlOmE9bnVsbCxjb21wb3NpdGVzOnI9bnVsbH09ZTt0aGlzLmhlYWRlcj10O3RoaXMuc2ltcGxlPWE7dGhpcy5jb21wb3NpdGVzPXJ9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3RbYSxyXT1HbHlwaEhlYWRlci5wYXJzZShlLHQpO2UrPWE7aWYoci5udW1iZXJPZkNvbnRvdXJzPDApe2NvbnN0IGE9W107Zm9yKDs7KXtjb25zdFtyLG5dPUNvbXBvc2l0ZUdseXBoLnBhcnNlKGUsdCk7ZSs9cjthLnB1c2gobik7aWYoISgzMiZuLmZsYWdzKSlicmVha31yZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6cixjb21wb3NpdGVzOmF9KX1jb25zdCBuPVNpbXBsZUdseXBoLnBhcnNlKGUsdCxyLm51bWJlck9mQ29udG91cnMpO3JldHVybiBuZXcgR2x5cGgoe2hlYWRlcjpyLHNpbXBsZTpufSl9Z2V0U2l6ZSgpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCBlPXRoaXMuc2ltcGxlP3RoaXMuc2ltcGxlLmdldFNpemUoKTp0aGlzLmNvbXBvc2l0ZXMucmVkdWNlKCgoZSx0KT0+ZSt0LmdldFNpemUoKSksMCk7cmV0dXJuIHRoaXMuaGVhZGVyLmdldFNpemUoKStlfXdyaXRlKGUsdCl7aWYoIXRoaXMuaGVhZGVyKXJldHVybiAwO2NvbnN0IGE9ZTtlKz10aGlzLmhlYWRlci53cml0ZShlLHQpO2lmKHRoaXMuc2ltcGxlKWUrPXRoaXMuc2ltcGxlLndyaXRlKGUsdCk7ZWxzZSBmb3IoY29uc3QgYSBvZiB0aGlzLmNvbXBvc2l0ZXMpZSs9YS53cml0ZShlLHQpO3JldHVybiBlLWF9c2NhbGUoZSl7aWYoIXRoaXMuaGVhZGVyKXJldHVybjtjb25zdCB0PSh0aGlzLmhlYWRlci54TWluK3RoaXMuaGVhZGVyLnhNYXgpLzI7dGhpcy5oZWFkZXIuc2NhbGUodCxlKTtpZih0aGlzLnNpbXBsZSl0aGlzLnNpbXBsZS5zY2FsZSh0LGUpO2Vsc2UgZm9yKGNvbnN0IGEgb2YgdGhpcy5jb21wb3NpdGVzKWEuc2NhbGUodCxlKX19Y2xhc3MgR2x5cGhIZWFkZXJ7Y29uc3RydWN0b3IoZSl7bGV0e251bWJlck9mQ29udG91cnM6dCx4TWluOmEseU1pbjpyLHhNYXg6bix5TWF4Oml9PWU7dGhpcy5udW1iZXJPZkNvbnRvdXJzPXQ7dGhpcy54TWluPWE7dGhpcy55TWluPXI7dGhpcy54TWF4PW47dGhpcy55TWF4PWl9c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuWzEwLG5ldyBHbHlwaEhlYWRlcih7bnVtYmVyT2ZDb250b3Vyczp0LmdldEludDE2KGUpLHhNaW46dC5nZXRJbnQxNihlKzIpLHlNaW46dC5nZXRJbnQxNihlKzQpLHhNYXg6dC5nZXRJbnQxNihlKzYpLHlNYXg6dC5nZXRJbnQxNihlKzgpfSldfWdldFNpemUoKXtyZXR1cm4gMTB9d3JpdGUoZSx0KXt0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKTt0LnNldEludDE2KGUrMix0aGlzLnhNaW4pO3Quc2V0SW50MTYoZSs0LHRoaXMueU1pbik7dC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KTt0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpO3JldHVybiAxMH1zY2FsZShlLHQpe3RoaXMueE1pbj1NYXRoLnJvdW5kKGUrKHRoaXMueE1pbi1lKSp0KTt0aGlzLnhNYXg9TWF0aC5yb3VuZChlKyh0aGlzLnhNYXgtZSkqdCl9fWNsYXNzIENvbnRvdXJ7Y29uc3RydWN0b3IoZSl7bGV0e2ZsYWdzOnQseENvb3JkaW5hdGVzOmEseUNvb3JkaW5hdGVzOnJ9PWU7dGhpcy54Q29vcmRpbmF0ZXM9YTt0aGlzLnlDb29yZGluYXRlcz1yO3RoaXMuZmxhZ3M9dH19Y2xhc3MgU2ltcGxlR2x5cGh7Y29uc3RydWN0b3IoZSl7bGV0e2NvbnRvdXJzOnQsaW5zdHJ1Y3Rpb25zOmF9PWU7dGhpcy5jb250b3Vycz10O3RoaXMuaW5zdHJ1Y3Rpb25zPWF9c3RhdGljIHBhcnNlKGUsdCxhKXtjb25zdCByPVtdO2ZvcihsZXQgbj0wO248YTtuKyspe2NvbnN0IGE9dC5nZXRVaW50MTYoZSk7ZSs9MjtyLnB1c2goYSl9Y29uc3Qgbj1yW2EtMV0rMSxpPXQuZ2V0VWludDE2KGUpO2UrPTI7Y29uc3Qgcz1uZXcgVWludDhBcnJheSh0KS5zbGljZShlLGUraSk7ZSs9aTtjb25zdCBvPVtdO2ZvcihsZXQgYT0wO2E8bjtlKyssYSsrKXtsZXQgcj10LmdldFVpbnQ4KGUpO28ucHVzaChyKTtpZig4JnIpe2NvbnN0IG49dC5nZXRVaW50OCgrK2UpO3JePTg7Zm9yKGxldCBlPTA7ZTxuO2UrKylvLnB1c2gocik7YSs9bn19Y29uc3QgYz1bXTtsZXQgbD1bXSxoPVtdLHU9W107Y29uc3QgZD1bXTtsZXQgZj0wLGc9MDtmb3IobGV0IGE9MDthPG47YSsrKXtjb25zdCBuPW9bYV07aWYoMiZuKXtjb25zdCBhPXQuZ2V0VWludDgoZSsrKTtnKz0xNiZuP2E6LWE7bC5wdXNoKGcpfWVsc2UgaWYoMTYmbilsLnB1c2goZyk7ZWxzZXtnKz10LmdldEludDE2KGUpO2UrPTI7bC5wdXNoKGcpfWlmKHJbZl09PT1hKXtmKys7Yy5wdXNoKGwpO2w9W119fWc9MDtmPTA7Zm9yKGxldCBhPTA7YTxuO2ErKyl7Y29uc3Qgbj1vW2FdO2lmKDQmbil7Y29uc3QgYT10LmdldFVpbnQ4KGUrKyk7Zys9MzImbj9hOi1hO2gucHVzaChnKX1lbHNlIGlmKDMyJm4paC5wdXNoKGcpO2Vsc2V7Zys9dC5nZXRJbnQxNihlKTtlKz0yO2gucHVzaChnKX11LnB1c2goMSZufDY0Jm4pO2lmKHJbZl09PT1hKXtsPWNbZl07ZisrO2QucHVzaChuZXcgQ29udG91cih7ZmxhZ3M6dSx4Q29vcmRpbmF0ZXM6bCx5Q29vcmRpbmF0ZXM6aH0pKTtoPVtdO3U9W119fXJldHVybiBuZXcgU2ltcGxlR2x5cGgoe2NvbnRvdXJzOmQsaW5zdHJ1Y3Rpb25zOnN9KX1nZXRTaXplKCl7bGV0IGU9Mip0aGlzLmNvbnRvdXJzLmxlbmd0aCsyK3RoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCx0PTAsYT0wO2Zvcihjb25zdCByIG9mIHRoaXMuY29udG91cnMpe2UrPXIuZmxhZ3MubGVuZ3RoO2ZvcihsZXQgbj0wLGk9ci54Q29vcmRpbmF0ZXMubGVuZ3RoO248aTtuKyspe2NvbnN0IGk9ci54Q29vcmRpbmF0ZXNbbl0scz1yLnlDb29yZGluYXRlc1tuXTtsZXQgbz1NYXRoLmFicyhpLXQpO28+MjU1P2UrPTI6bz4wJiYoZSs9MSk7dD1pO289TWF0aC5hYnMocy1hKTtvPjI1NT9lKz0yOm8+MCYmKGUrPTEpO2E9c319cmV0dXJuIGV9d3JpdGUoZSx0KXtjb25zdCBhPWUscj1bXSxuPVtdLGk9W107bGV0IHM9MCxvPTA7Zm9yKGNvbnN0IGEgb2YgdGhpcy5jb250b3Vycyl7Zm9yKGxldCBlPTAsdD1hLnhDb29yZGluYXRlcy5sZW5ndGg7ZTx0O2UrKyl7bGV0IHQ9YS5mbGFnc1tlXTtjb25zdCBjPWEueENvb3JkaW5hdGVzW2VdO2xldCBsPWMtcztpZigwPT09bCl7dHw9MTY7ci5wdXNoKDApfWVsc2V7Y29uc3QgZT1NYXRoLmFicyhsKTtpZihlPD0yNTUpe3R8PWw+PTA/MTg6MjtyLnB1c2goZSl9ZWxzZSByLnB1c2gobCl9cz1jO2NvbnN0IGg9YS55Q29vcmRpbmF0ZXNbZV07bD1oLW87aWYoMD09PWwpe3R8PTMyO24ucHVzaCgwKX1lbHNle2NvbnN0IGU9TWF0aC5hYnMobCk7aWYoZTw9MjU1KXt0fD1sPj0wPzM2OjQ7bi5wdXNoKGUpfWVsc2Ugbi5wdXNoKGwpfW89aDtpLnB1c2godCl9dC5zZXRVaW50MTYoZSxyLmxlbmd0aC0xKTtlKz0yfXQuc2V0VWludDE2KGUsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtlKz0yO2lmKHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCl7bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSk7ZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RofWZvcihjb25zdCBhIG9mIGkpdC5zZXRVaW50OChlKyssYSk7Zm9yKGxldCBhPTAsbj1yLmxlbmd0aDthPG47YSsrKXtjb25zdCBuPXJbYV0scz1pW2FdO2lmKDImcyl0LnNldFVpbnQ4KGUrKyxuKTtlbHNlIGlmKCEoMTYmcykpe3Quc2V0SW50MTYoZSxuKTtlKz0yfX1mb3IobGV0IGE9MCxyPW4ubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9blthXSxzPWlbYV07aWYoNCZzKXQuc2V0VWludDgoZSsrLHIpO2Vsc2UgaWYoISgzMiZzKSl7dC5zZXRJbnQxNihlLHIpO2UrPTJ9fXJldHVybiBlLWF9c2NhbGUoZSx0KXtmb3IoY29uc3QgYSBvZiB0aGlzLmNvbnRvdXJzKWlmKDAhPT1hLnhDb29yZGluYXRlcy5sZW5ndGgpZm9yKGxldCByPTAsbj1hLnhDb29yZGluYXRlcy5sZW5ndGg7cjxuO3IrKylhLnhDb29yZGluYXRlc1tyXT1NYXRoLnJvdW5kKGUrKGEueENvb3JkaW5hdGVzW3JdLWUpKnQpfX1jbGFzcyBDb21wb3NpdGVHbHlwaHtjb25zdHJ1Y3RvcihlKXtsZXR7ZmxhZ3M6dCxnbHlwaEluZGV4OmEsYXJndW1lbnQxOnIsYXJndW1lbnQyOm4sdHJhbnNmOmksaW5zdHJ1Y3Rpb25zOnN9PWU7dGhpcy5mbGFncz10O3RoaXMuZ2x5cGhJbmRleD1hO3RoaXMuYXJndW1lbnQxPXI7dGhpcy5hcmd1bWVudDI9bjt0aGlzLnRyYW5zZj1pO3RoaXMuaW5zdHJ1Y3Rpb25zPXN9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3QgYT1lLHI9W107bGV0IG49dC5nZXRVaW50MTYoZSk7Y29uc3QgaT10LmdldFVpbnQxNihlKzIpO2UrPTQ7bGV0IHMsbztpZigxJm4pe2lmKDImbil7cz10LmdldEludDE2KGUpO289dC5nZXRJbnQxNihlKzIpfWVsc2V7cz10LmdldFVpbnQxNihlKTtvPXQuZ2V0VWludDE2KGUrMil9ZSs9NDtuXj0xfWVsc2V7aWYoMiZuKXtzPXQuZ2V0SW50OChlKTtvPXQuZ2V0SW50OChlKzEpfWVsc2V7cz10LmdldFVpbnQ4KGUpO289dC5nZXRVaW50OChlKzEpfWUrPTJ9aWYoOCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSkpO2UrPTJ9ZWxzZSBpZig2NCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSk7ZSs9NH1lbHNlIGlmKDEyOCZuKXtyLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSx0LmdldFVpbnQxNihlKzQpLHQuZ2V0VWludDE2KGUrNikpO2UrPTh9bGV0IGM9bnVsbDtpZigyNTYmbil7Y29uc3QgYT10LmdldFVpbnQxNihlKTtlKz0yO2M9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK2EpO2UrPWF9cmV0dXJuW2UtYSxuZXcgQ29tcG9zaXRlR2x5cGgoe2ZsYWdzOm4sZ2x5cGhJbmRleDppLGFyZ3VtZW50MTpzLGFyZ3VtZW50MjpvLHRyYW5zZjpyLGluc3RydWN0aW9uczpjfSldfWdldFNpemUoKXtsZXQgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoOzI1NiZ0aGlzLmZsYWdzJiYoZSs9Mit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7MiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KGUrPTIpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KGUrPTIpO3JldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgYT1lOzImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fCh0aGlzLmZsYWdzfD0xKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fCh0aGlzLmZsYWdzfD0xKTt0LnNldFVpbnQxNihlLHRoaXMuZmxhZ3MpO3Quc2V0VWludDE2KGUrMix0aGlzLmdseXBoSW5kZXgpO2UrPTQ7aWYoMSZ0aGlzLmZsYWdzKXtpZigyJnRoaXMuZmxhZ3Mpe3Quc2V0SW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRJbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpfWVsc2V7dC5zZXRVaW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRVaW50MTYoZSsyLHRoaXMuYXJndW1lbnQyKX1lKz00fWVsc2V7dC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKTt0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50Mik7ZSs9Mn1pZigyNTYmdGhpcy5mbGFncyl7dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7aWYodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKXtuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKTtlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGh9fXJldHVybiBlLWF9c2NhbGUoZSx0KXt9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9dm9pZCAwO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDE0MCk7YSgyKTt2YXIgcj1hKDE1MCksbj1hKDE0NSk7ZnVuY3Rpb24gd3JpdGVJbnQxNihlLHQsYSl7ZVt0XT1hPj44JjI1NTtlW3QrMV09MjU1JmF9ZnVuY3Rpb24gd3JpdGVJbnQzMihlLHQsYSl7ZVt0XT1hPj4yNCYyNTU7ZVt0KzFdPWE+PjE2JjI1NTtlW3QrMl09YT4+OCYyNTU7ZVt0KzNdPTI1NSZhfWZ1bmN0aW9uIHdyaXRlRGF0YShlLHQsYSl7aWYoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpZS5zZXQoYSx0KTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgYSlmb3IobGV0IHI9MCxuPWEubGVuZ3RoO3I8bjtyKyspZVt0KytdPTI1NSZhLmNoYXJDb2RlQXQocik7ZWxzZSBmb3IoY29uc3QgciBvZiBhKWVbdCsrXT0yNTUmcn1jbGFzcyBPcGVuVHlwZUZpbGVCdWlsZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuc2ZudD1lO3RoaXMudGFibGVzPU9iamVjdC5jcmVhdGUobnVsbCl9c3RhdGljIGdldFNlYXJjaFBhcmFtcyhlLHQpe2xldCBhPTEscj0wO2Zvcig7KGFeZSk+YTspe2E8PD0xO3IrK31jb25zdCBuPWEqdDtyZXR1cm57cmFuZ2U6bixlbnRyeTpyLHJhbmdlU2hpZnQ6dCplLW59fXRvQXJyYXkoKXtsZXQgZT10aGlzLnNmbnQ7Y29uc3QgdD10aGlzLnRhYmxlcyxhPU9iamVjdC5rZXlzKHQpO2Euc29ydCgpO2NvbnN0IGk9YS5sZW5ndGg7bGV0IHMsbyxjLGwsaCx1PTEyKzE2Kmk7Y29uc3QgZD1bdV07Zm9yKHM9MDtzPGk7cysrKXtsPXRbYVtzXV07dSs9KGwubGVuZ3RoKzMmLTQpPj4+MDtkLnB1c2godSl9Y29uc3QgZj1uZXcgVWludDhBcnJheSh1KTtmb3Iocz0wO3M8aTtzKyspe2w9dFthW3NdXTt3cml0ZURhdGEoZixkW3NdLGwpfSJ0cnVlIj09PWUmJihlPSgwLG4uc3RyaW5nMzIpKDY1NTM2KSk7ZlswXT0yNTUmZS5jaGFyQ29kZUF0KDApO2ZbMV09MjU1JmUuY2hhckNvZGVBdCgxKTtmWzJdPTI1NSZlLmNoYXJDb2RlQXQoMik7ZlszXT0yNTUmZS5jaGFyQ29kZUF0KDMpO3dyaXRlSW50MTYoZiw0LGkpO2NvbnN0IGc9T3BlblR5cGVGaWxlQnVpbGRlci5nZXRTZWFyY2hQYXJhbXMoaSwxNik7d3JpdGVJbnQxNihmLDYsZy5yYW5nZSk7d3JpdGVJbnQxNihmLDgsZy5lbnRyeSk7d3JpdGVJbnQxNihmLDEwLGcucmFuZ2VTaGlmdCk7dT0xMjtmb3Iocz0wO3M8aTtzKyspe2g9YVtzXTtmW3VdPTI1NSZoLmNoYXJDb2RlQXQoMCk7Zlt1KzFdPTI1NSZoLmNoYXJDb2RlQXQoMSk7Zlt1KzJdPTI1NSZoLmNoYXJDb2RlQXQoMik7Zlt1KzNdPTI1NSZoLmNoYXJDb2RlQXQoMyk7bGV0IGU9MDtmb3Iobz1kW3NdLGM9ZFtzKzFdO288YztvKz00KXtlPWUrKDAsci5yZWFkVWludDMyKShmLG8pPj4+MH13cml0ZUludDMyKGYsdSs0LGUpO3dyaXRlSW50MzIoZix1KzgsZFtzXSk7d3JpdGVJbnQzMihmLHUrMTIsdFtoXS5sZW5ndGgpO3UrPTE2fXJldHVybiBmfWFkZFRhYmxlKGUsdCl7aWYoZSBpbiB0aGlzLnRhYmxlcyl0aHJvdyBuZXcgRXJyb3IoIlRhYmxlICIrZSsiIGFscmVhZHkgZXhpc3RzIik7dGhpcy50YWJsZXNbZV09dH19dC5PcGVuVHlwZUZpbGVCdWlsZGVyPU9wZW5UeXBlRmlsZUJ1aWxkZXJ9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5UeXBlMUZvbnQ9dm9pZCAwO2EoMTQwKTt2YXIgcj1hKDE4Niksbj1hKDE0NSksaT1hKDE4OSkscz1hKDE1MCksbz1hKDE1NSksYz1hKDIwMCk7ZnVuY3Rpb24gZmluZEJsb2NrKGUsdCxhKXtjb25zdCByPWUubGVuZ3RoLG49dC5sZW5ndGgsaT1yLW47bGV0IG89YSxjPSExO2Zvcig7bzxpOyl7bGV0IGE9MDtmb3IoO2E8biYmZVtvK2FdPT09dFthXTspYSsrO2lmKGE+PW4pe28rPWE7Zm9yKDtvPHImJigwLHMuaXNXaGl0ZVNwYWNlKShlW29dKTspbysrO2M9ITA7YnJlYWt9bysrfXJldHVybntmb3VuZDpjLGxlbmd0aDpvfX10LlR5cGUxRm9udD1jbGFzcyBUeXBlMUZvbnR7Y29uc3RydWN0b3IoZSx0LGEpe2xldCByPWEubGVuZ3RoMSxzPWEubGVuZ3RoMixsPXQucGVla0J5dGVzKDYpO2NvbnN0IGg9MTI4PT09bFswXSYmMT09PWxbMV07aWYoaCl7dC5za2lwKDYpO3I9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IHU9ZnVuY3Rpb24gZ2V0SGVhZGVyQmxvY2soZSx0KXtjb25zdCBhPVsxMDEsMTAxLDEyMCwxMDEsOTldLHI9ZS5wb3M7bGV0IGkscyxjLGw7dHJ5e2k9ZS5nZXRCeXRlcyh0KTtzPWkubGVuZ3RofWNhdGNoe31pZihzPT09dCl7Yz1maW5kQmxvY2soaSxhLHQtMiphLmxlbmd0aCk7aWYoYy5mb3VuZCYmYy5sZW5ndGg9PT10KXJldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGkpLGxlbmd0aDp0fX0oMCxuLndhcm4pKCdJbnZhbGlkICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO2UucG9zPXI7Zm9yKDs7KXtjPWZpbmRCbG9jayhlLnBlZWtCeXRlcygyMDQ4KSxhLDApO2lmKDA9PT1jLmxlbmd0aClicmVhaztlLnBvcys9Yy5sZW5ndGg7aWYoYy5mb3VuZCl7bD1lLnBvcy1yO2JyZWFrfX1lLnBvcz1yO2lmKGwpcmV0dXJue3N0cmVhbTpuZXcgby5TdHJlYW0oZS5nZXRCeXRlcyhsKSksbGVuZ3RoOmx9OygwLG4ud2FybikoJ1VuYWJsZSB0byByZWNvdmVyICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHVzaW5nIGFzIGlzLicpO3JldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGUuZ2V0Qnl0ZXModCkpLGxlbmd0aDp0fX0odCxyKTtuZXcgYy5UeXBlMVBhcnNlcih1LnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIoYSk7aWYoaCl7bD10LmdldEJ5dGVzKDYpO3M9bFs1XTw8MjR8bFs0XTw8MTZ8bFszXTw8OHxsWzJdfWNvbnN0IGQ9ZnVuY3Rpb24gZ2V0RWV4ZWNCbG9jayhlLHQpe2NvbnN0IGE9ZS5nZXRCeXRlcygpO2lmKDA9PT1hLmxlbmd0aCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiZ2V0RWV4ZWNCbG9jayAtIG5vIGZvbnQgcHJvZ3JhbSBmb3VuZC4iKTtyZXR1cm57c3RyZWFtOm5ldyBvLlN0cmVhbShhKSxsZW5ndGg6YS5sZW5ndGh9fSh0KSxmPW5ldyBjLlR5cGUxUGFyc2VyKGQuc3RyZWFtLCEwLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKS5leHRyYWN0Rm9udFByb2dyYW0oYSk7Zm9yKGNvbnN0IGUgaW4gZi5wcm9wZXJ0aWVzKWFbZV09Zi5wcm9wZXJ0aWVzW2VdO2NvbnN0IGc9Zi5jaGFyc3RyaW5ncyxwPXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhnKSxtPXRoaXMuZ2V0VHlwZTJTdWJycyhmLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPWc7dGhpcy5kYXRhPXRoaXMud3JhcChlLHAsdGhpcy5jaGFyc3RyaW5ncyxtLGEpO3RoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhmLmNoYXJzdHJpbmdzKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9Z2V0Q2hhcnNldCgpe2NvbnN0IGU9WyIubm90ZGVmIl07Zm9yKGNvbnN0e2dseXBoTmFtZTp0fW9mIHRoaXMuY2hhcnN0cmluZ3MpZS5wdXNoKHQpO3JldHVybiBlfWdldEdseXBoTWFwcGluZyhlKXtjb25zdCB0PXRoaXMuY2hhcnN0cmluZ3M7aWYoZS5jb21wb3NpdGUpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe2FbZS5jTWFwLmNoYXJDb2RlT2YocildPXIrMX1yZXR1cm4gYX1jb25zdCBhPVsiLm5vdGRlZiJdO2xldCByLG47Zm9yKG49MDtuPHQubGVuZ3RoO24rKylhLnB1c2godFtuXS5nbHlwaE5hbWUpO2NvbnN0IHM9ZS5idWlsdEluRW5jb2Rpbmc7aWYocyl7cj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdCBlIGluIHMpe249YS5pbmRleE9mKHNbZV0pO24+PTAmJihyW2VdPW4pfX1yZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxyLGEpfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLm51bUdseXBocylyZXR1cm4hMTtpZigwPT09ZSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5jaGFyc3RyaW5nc1tlLTFdLmNoYXJzdHJpbmcubGVuZ3RoPjB9Z2V0U2VhY3MoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthXTtyLnNlYWMmJih0W2ErMV09ci5zZWFjKX1yZXR1cm4gdH1nZXRUeXBlMkNoYXJzdHJpbmdzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGEgb2YgZSl0LnB1c2goYS5jaGFyc3RyaW5nKTtyZXR1cm4gdH1nZXRUeXBlMlN1YnJzKGUpe2xldCB0PTA7Y29uc3QgYT1lLmxlbmd0aDt0PWE8MTEzMz8xMDc6YTwzMzc2OT8xMTMxOjMyNzY4O2NvbnN0IHI9W107bGV0IG47Zm9yKG49MDtuPHQ7bisrKXIucHVzaChbMTFdKTtmb3Iobj0wO248YTtuKyspci5wdXNoKGVbbl0pO3JldHVybiByfXdyYXAoZSx0LGEsbixpKXtjb25zdCBzPW5ldyByLkNGRjtzLmhlYWRlcj1uZXcgci5DRkZIZWFkZXIoMSwwLDQsNCk7cy5uYW1lcz1bZV07Y29uc3Qgbz1uZXcgci5DRkZUb3BEaWN0O28uc2V0QnlOYW1lKCJ2ZXJzaW9uIiwzOTEpO28uc2V0QnlOYW1lKCJOb3RpY2UiLDM5Mik7by5zZXRCeU5hbWUoIkZ1bGxOYW1lIiwzOTMpO28uc2V0QnlOYW1lKCJGYW1pbHlOYW1lIiwzOTQpO28uc2V0QnlOYW1lKCJXZWlnaHQiLDM5NSk7by5zZXRCeU5hbWUoIkVuY29kaW5nIixudWxsKTtvLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsaS5mb250TWF0cml4KTtvLnNldEJ5TmFtZSgiRm9udEJCb3giLGkuYmJveCk7by5zZXRCeU5hbWUoImNoYXJzZXQiLG51bGwpO28uc2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIsbnVsbCk7by5zZXRCeU5hbWUoIlByaXZhdGUiLG51bGwpO3MudG9wRGljdD1vO2NvbnN0IGM9bmV3IHIuQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIik7Yy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKTtjLmFkZChlKTtjLmFkZChlKTtjLmFkZCgiTWVkaXVtIik7cy5zdHJpbmdzPWM7cy5nbG9iYWxTdWJySW5kZXg9bmV3IHIuQ0ZGSW5kZXg7Y29uc3QgbD10Lmxlbmd0aCxoPVsiLm5vdGRlZiJdO2xldCB1LGQ7Zm9yKHU9MDt1PGw7dSsrKXtjb25zdCBlPWFbdV0uZ2x5cGhOYW1lOy0xPT09ci5DRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihlKSYmYy5hZGQoZSk7aC5wdXNoKGUpfXMuY2hhcnNldD1uZXcgci5DRkZDaGFyc2V0KCExLDAsaCk7Y29uc3QgZj1uZXcgci5DRkZJbmRleDtmLmFkZChbMTM5LDE0XSk7Zm9yKHU9MDt1PGw7dSsrKWYuYWRkKHRbdV0pO3MuY2hhclN0cmluZ3M9Zjtjb25zdCBnPW5ldyByLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7Y29uc3QgcD1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2Zvcih1PTAsZD1wLmxlbmd0aDt1PGQ7dSsrKXtjb25zdCBlPXBbdV07aWYoIShlIGluIGkucHJpdmF0ZURhdGEpKWNvbnRpbnVlO2NvbnN0IHQ9aS5wcml2YXRlRGF0YVtlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+MDtlLS0pdFtlXS09dFtlLTFdO2cuc2V0QnlOYW1lKGUsdCl9cy50b3BEaWN0LnByaXZhdGVEaWN0PWc7Y29uc3QgbT1uZXcgci5DRkZJbmRleDtmb3IodT0wLGQ9bi5sZW5ndGg7dTxkO3UrKyltLmFkZChuW3VdKTtnLnN1YnJzSW5kZXg9bTtyZXR1cm4gbmV3IHIuQ0ZGQ29tcGlsZXIocykuY29tcGlsZSgpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5UeXBlMVBhcnNlcj12b2lkIDA7YSgxNDApO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDE2MCk7dmFyIHI9YSgxODgpLG49YSgxNTApLGk9YSgxNTUpLHM9YSgxNDUpO2NvbnN0IG89WzRdLGM9WzVdLGw9WzZdLGg9WzddLHU9WzhdLGQ9WzEyLDM1XSxmPVsxNF0sZz1bMjFdLHA9WzIyXSxtPVszMF0sYj1bMzFdO2NsYXNzIFR5cGUxQ2hhclN0cmluZ3tjb25zdHJ1Y3Rvcigpe3RoaXMud2lkdGg9MDt0aGlzLmxzYj0wO3RoaXMuZmxleGluZz0hMTt0aGlzLm91dHB1dD1bXTt0aGlzLnN0YWNrPVtdfWNvbnZlcnQoZSx0LGEpe2NvbnN0IHI9ZS5sZW5ndGg7bGV0IG4saSx5LHc9ITE7Zm9yKGxldCBTPTA7UzxyO1MrKyl7bGV0IHI9ZVtTXTtpZihyPDMyKXsxMj09PXImJihyPShyPDw4KStlWysrU10pO3N3aXRjaChyKXtjYXNlIDE6Y2FzZSAzOmNhc2UgOTpjYXNlIDMwNzI6Y2FzZSAzMDczOmNhc2UgMzA3NDpjYXNlIDMxMDU6dGhpcy5zdGFjaz1bXTticmVhaztjYXNlIDQ6aWYodGhpcy5mbGV4aW5nKXtpZih0aGlzLnN0YWNrLmxlbmd0aDwxKXt3PSEwO2JyZWFrfWNvbnN0IGU9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goMCxlKTticmVha313PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxvKTticmVhaztjYXNlIDU6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYyk7YnJlYWs7Y2FzZSA2Onc9dGhpcy5leGVjdXRlQ29tbWFuZCgxLGwpO2JyZWFrO2Nhc2UgNzp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxoKTticmVhaztjYXNlIDg6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDYsdSk7YnJlYWs7Y2FzZSAxMDppZih0aGlzLnN0YWNrLmxlbmd0aDwxKXt3PSEwO2JyZWFrfXk9dGhpcy5zdGFjay5wb3AoKTtpZighdFt5XSl7dz0hMDticmVha313PXRoaXMuY29udmVydCh0W3ldLHQsYSk7YnJlYWs7Y2FzZSAxMTpyZXR1cm4gdztjYXNlIDEzOmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe3c9ITA7YnJlYWt9bj10aGlzLnN0YWNrLnBvcCgpO2k9dGhpcy5zdGFjay5wb3AoKTt0aGlzLmxzYj1pO3RoaXMud2lkdGg9bjt0aGlzLnN0YWNrLnB1c2gobixpKTt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMixwKTticmVhaztjYXNlIDE0OnRoaXMub3V0cHV0LnB1c2goZlswXSk7YnJlYWs7Y2FzZSAyMTppZih0aGlzLmZsZXhpbmcpYnJlYWs7dz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsZyk7YnJlYWs7Y2FzZSAyMjppZih0aGlzLmZsZXhpbmcpe3RoaXMuc3RhY2sucHVzaCgwKTticmVha313PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxwKTticmVhaztjYXNlIDMwOnc9dGhpcy5leGVjdXRlQ29tbWFuZCg0LG0pO2JyZWFrO2Nhc2UgMzE6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsYik7YnJlYWs7Y2FzZSAzMDc4OmlmKGEpe2NvbnN0IGU9dGhpcy5zdGFjay5hdCgtNSk7dGhpcy5zZWFjPXRoaXMuc3RhY2suc3BsaWNlKC00LDQpO3RoaXMuc2VhY1swXSs9dGhpcy5sc2ItZTt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMCxmKX1lbHNlIHc9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGYpO2JyZWFrO2Nhc2UgMzA3OTppZih0aGlzLnN0YWNrLmxlbmd0aDw0KXt3PSEwO2JyZWFrfXRoaXMuc3RhY2sucG9wKCk7bj10aGlzLnN0YWNrLnBvcCgpO2NvbnN0IGU9dGhpcy5zdGFjay5wb3AoKTtpPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5sc2I9aTt0aGlzLndpZHRoPW47dGhpcy5zdGFjay5wdXNoKG4saSxlKTt3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMyxnKTticmVhaztjYXNlIDMwODQ6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7dz0hMDticmVha31jb25zdCBTPXRoaXMuc3RhY2sucG9wKCkseD10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCh4L1MpO2JyZWFrO2Nhc2UgMzA4ODppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXt3PSEwO2JyZWFrfXk9dGhpcy5zdGFjay5wb3AoKTtjb25zdCBDPXRoaXMuc3RhY2sucG9wKCk7aWYoMD09PXkmJjM9PT1DKXtjb25zdCBlPXRoaXMuc3RhY2suc3BsaWNlKC0xNywxNyk7dGhpcy5zdGFjay5wdXNoKGVbMl0rZVswXSxlWzNdK2VbMV0sZVs0XSxlWzVdLGVbNl0sZVs3XSxlWzhdLGVbOV0sZVsxMF0sZVsxMV0sZVsxMl0sZVsxM10sZVsxNF0pO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgxMyxkLCEwKTt0aGlzLmZsZXhpbmc9ITE7dGhpcy5zdGFjay5wdXNoKGVbMTVdLGVbMTZdKX1lbHNlIDE9PT15JiYwPT09QyYmKHRoaXMuZmxleGluZz0hMCk7YnJlYWs7Y2FzZSAzMDg5OmJyZWFrO2RlZmF1bHQ6KDAscy53YXJuKSgnVW5rbm93biB0eXBlIDEgY2hhcnN0cmluZyBjb21tYW5kIG9mICInK3IrJyInKX1pZih3KWJyZWFrfWVsc2V7cjw9MjQ2P3ItPTEzOTpyPXI8PTI1MD8yNTYqKHItMjQ3KStlWysrU10rMTA4OnI8PTI1ND8tMjU2KihyLTI1MSktZVsrK1NdLTEwODooMjU1JmVbKytTXSk8PDI0fCgyNTUmZVsrK1NdKTw8MTZ8KDI1NSZlWysrU10pPDw4fCgyNTUmZVsrK1NdKTw8MDt0aGlzLnN0YWNrLnB1c2gocil9fXJldHVybiB3fWV4ZWN1dGVDb21tYW5kKGUsdCxhKXtjb25zdCByPXRoaXMuc3RhY2subGVuZ3RoO2lmKGU+cilyZXR1cm4hMDtjb25zdCBuPXItZTtmb3IobGV0IGU9bjtlPHI7ZSsrKXtsZXQgdD10aGlzLnN0YWNrW2VdO2lmKE51bWJlci5pc0ludGVnZXIodCkpdGhpcy5vdXRwdXQucHVzaCgyOCx0Pj44JjI1NSwyNTUmdCk7ZWxzZXt0PTY1NTM2KnR8MDt0aGlzLm91dHB1dC5wdXNoKDI1NSx0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0KX19dGhpcy5vdXRwdXQucHVzaCguLi50KTthP3RoaXMuc3RhY2suc3BsaWNlKG4sZSk6dGhpcy5zdGFjay5sZW5ndGg9MDtyZXR1cm4hMX19ZnVuY3Rpb24gaXNIZXhEaWdpdChlKXtyZXR1cm4gZT49NDgmJmU8PTU3fHxlPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDJ9ZnVuY3Rpb24gZGVjcnlwdChlLHQsYSl7aWYoYT49ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2xldCByLG4saT0wfHQ7Zm9yKHI9MDtyPGE7cisrKWk9NTI4NDUqKGVbcl0raSkrMjI3MTkmNjU1MzU7Y29uc3Qgcz1lLmxlbmd0aC1hLG89bmV3IFVpbnQ4QXJyYXkocyk7Zm9yKHI9YSxuPTA7bjxzO3IrKyxuKyspe2NvbnN0IHQ9ZVtyXTtvW25dPXReaT4+ODtpPTUyODQ1Kih0K2kpKzIyNzE5JjY1NTM1fXJldHVybiBvfWZ1bmN0aW9uIGlzU3BlY2lhbChlKXtyZXR1cm4gNDc9PT1lfHw5MT09PWV8fDkzPT09ZXx8MTIzPT09ZXx8MTI1PT09ZXx8NDA9PT1lfHw0MT09PWV9dC5UeXBlMVBhcnNlcj1jbGFzcyBUeXBlMVBhcnNlcntjb25zdHJ1Y3RvcihlLHQsYSl7aWYodCl7Y29uc3QgdD1lLmdldEJ5dGVzKCksYT0hKChpc0hleERpZ2l0KHRbMF0pfHwoMCxuLmlzV2hpdGVTcGFjZSkodFswXSkpJiZpc0hleERpZ2l0KHRbMV0pJiZpc0hleERpZ2l0KHRbMl0pJiZpc0hleERpZ2l0KHRbM10pJiZpc0hleERpZ2l0KHRbNF0pJiZpc0hleERpZ2l0KHRbNV0pJiZpc0hleERpZ2l0KHRbNl0pJiZpc0hleERpZ2l0KHRbN10pKTtlPW5ldyBpLlN0cmVhbShhP2RlY3J5cHQodCw1NTY2NSw0KTpmdW5jdGlvbiBkZWNyeXB0QXNjaWkoZSx0LGEpe2xldCByPTB8dDtjb25zdCBuPWUubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkobj4+PjEpO2xldCBzLG87Zm9yKHM9MCxvPTA7czxuO3MrKyl7Y29uc3QgdD1lW3NdO2lmKCFpc0hleERpZ2l0KHQpKWNvbnRpbnVlO3MrKztsZXQgYTtmb3IoO3M8biYmIWlzSGV4RGlnaXQoYT1lW3NdKTspcysrO2lmKHM8bil7Y29uc3QgZT1wYXJzZUludChTdHJpbmcuZnJvbUNoYXJDb2RlKHQsYSksMTYpO2lbbysrXT1lXnI+Pjg7cj01Mjg0NSooZStyKSsyMjcxOSY2NTUzNX19cmV0dXJuIGkuc2xpY2UoYSxvKX0odCw1NTY2NSw0KSl9dGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkPSEhYTt0aGlzLnN0cmVhbT1lO3RoaXMubmV4dENoYXIoKX1yZWFkTnVtYmVyQXJyYXkoKXt0aGlzLmdldFRva2VuKCk7Y29uc3QgZT1bXTtmb3IoOzspe2NvbnN0IHQ9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT10fHwiXSI9PT10fHwifSI9PT10KWJyZWFrO2UucHVzaChwYXJzZUZsb2F0KHR8fDApKX1yZXR1cm4gZX1yZWFkTnVtYmVyKCl7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9cmVhZEludCgpe2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO3JldHVybiAwfHBhcnNlSW50KGV8fDAsMTApfXJlYWRCb29sZWFuKCl7cmV0dXJuInRydWUiPT09dGhpcy5nZXRUb2tlbigpPzE6MH1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wcmV2Q2hhcigpe3RoaXMuc3RyZWFtLnNraXAoLTIpO3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1nZXRUb2tlbigpe2xldCBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjtmb3IoOzspe2lmKC0xPT09dClyZXR1cm4gbnVsbDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxuLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9aWYoaXNTcGVjaWFsKHQpKXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9bGV0IGE9IiI7ZG97YSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KTt0PXRoaXMubmV4dENoYXIoKX13aGlsZSh0Pj0wJiYhKDAsbi5pc1doaXRlU3BhY2UpKHQpJiYhaXNTcGVjaWFsKHQpKTtyZXR1cm4gYX1yZWFkQ2hhclN0cmluZ3MoZSx0KXtyZXR1cm4tMT09PXQ/ZTpkZWNyeXB0KGUsNDMzMCx0KX1leHRyYWN0Rm9udFByb2dyYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbSxhPVtdLHI9W10sbj1PYmplY3QuY3JlYXRlKG51bGwpO24ubGVuSVY9NDtjb25zdCBpPXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTpufX07bGV0IHMsbyxjLGw7Zm9yKDtudWxsIT09KHM9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09cyl7cz10aGlzLmdldFRva2VuKCk7c3dpdGNoKHMpe2Nhc2UiQ2hhclN0cmluZ3MiOnRoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTtmb3IoOzspe3M9dGhpcy5nZXRUb2tlbigpO2lmKG51bGw9PT1zfHwiZW5kIj09PXMpYnJlYWs7aWYoIi8iIT09cyljb250aW51ZTtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApO2w9aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO2NvbnN0IGE9dGhpcy5yZWFkQ2hhclN0cmluZ3MoYyxsKTt0aGlzLm5leHRDaGFyKCk7cz10aGlzLmdldFRva2VuKCk7Im5vYWNjZXNzIj09PXM/dGhpcy5nZXRUb2tlbigpOiIvIj09PXMmJnRoaXMucHJldkNoYXIoKTtyLnB1c2goe2dseXBoOmUsZW5jb2RlZDphfSl9YnJlYWs7Y2FzZSJTdWJycyI6dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2Zvcig7ImR1cCI9PT10aGlzLmdldFRva2VuKCk7KXtjb25zdCBlPXRoaXMucmVhZEludCgpO289dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2M9bz4wP3QuZ2V0Qnl0ZXMobyk6bmV3IFVpbnQ4QXJyYXkoMCk7bD1pLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7Y29uc3Qgcj10aGlzLnJlYWRDaGFyU3RyaW5ncyhjLGwpO3RoaXMubmV4dENoYXIoKTtzPXRoaXMuZ2V0VG9rZW4oKTsibm9hY2Nlc3MiPT09cyYmdGhpcy5nZXRUb2tlbigpO2FbZV09cn1icmVhaztjYXNlIkJsdWVWYWx1ZXMiOmNhc2UiT3RoZXJCbHVlcyI6Y2FzZSJGYW1pbHlCbHVlcyI6Y2FzZSJGYW1pbHlPdGhlckJsdWVzIjpjb25zdCBlPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5sZW5ndGg+MCYmZS5sZW5ndGgsMDticmVhaztjYXNlIlN0ZW1TbmFwSCI6Y2FzZSJTdGVtU25hcFYiOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2JyZWFrO2Nhc2UiU3RkSFciOmNhc2UiU3RkVlciOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXJBcnJheSgpWzBdO2JyZWFrO2Nhc2UiQmx1ZVNoaWZ0IjpjYXNlImxlbklWIjpjYXNlIkJsdWVGdXp6IjpjYXNlIkJsdWVTY2FsZSI6Y2FzZSJMYW5ndWFnZUdyb3VwIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSJFeHBhbnNpb25GYWN0b3IiOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXIoKXx8LjA2O2JyZWFrO2Nhc2UiRm9yY2VCb2xkIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkQm9vbGVhbigpfX1mb3IoY29uc3R7ZW5jb2RlZDp0LGdseXBoOm59b2Ygcil7Y29uc3Qgcj1uZXcgVHlwZTFDaGFyU3RyaW5nLHM9ci5jb252ZXJ0KHQsYSx0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpO2xldCBvPXIub3V0cHV0O3MmJihvPVsxNF0pO2NvbnN0IGM9e2dseXBoTmFtZTpuLGNoYXJzdHJpbmc6byx3aWR0aDpyLndpZHRoLGxzYjpyLmxzYixzZWFjOnIuc2VhY307Ii5ub3RkZWYiPT09bj9pLmNoYXJzdHJpbmdzLnVuc2hpZnQoYyk6aS5jaGFyc3RyaW5ncy5wdXNoKGMpO2lmKGUuYnVpbHRJbkVuY29kaW5nKXtjb25zdCB0PWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2Yobik7dD4tMSYmdm9pZCAwPT09ZS53aWR0aHNbdF0mJnQ+PWUuZmlyc3RDaGFyJiZ0PD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbdF09ci53aWR0aCl9fXJldHVybiBpfWV4dHJhY3RGb250SGVhZGVyKGUpe2xldCB0O2Zvcig7bnVsbCE9PSh0PXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PXQpe3Q9dGhpcy5nZXRUb2tlbigpO3N3aXRjaCh0KXtjYXNlIkZvbnRNYXRyaXgiOmNvbnN0IGE9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9YTticmVhaztjYXNlIkVuY29kaW5nIjpjb25zdCBuPXRoaXMuZ2V0VG9rZW4oKTtsZXQgaTtpZigvXlxkKyQvLnRlc3Qobikpe2k9W107Y29uc3QgZT0wfHBhcnNlSW50KG4sMTApO3RoaXMuZ2V0VG9rZW4oKTtmb3IobGV0IGE9MDthPGU7YSsrKXt0PXRoaXMuZ2V0VG9rZW4oKTtmb3IoOyJkdXAiIT09dCYmImRlZiIhPT10Oyl7dD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXQpcmV0dXJufWlmKCJkZWYiPT09dClicmVhaztjb25zdCBlPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjb25zdCBhPXRoaXMuZ2V0VG9rZW4oKTtpW2VdPWE7dGhpcy5nZXRUb2tlbigpfX1lbHNlIGk9KDAsci5nZXRFbmNvZGluZykobik7ZS5idWlsdEluRW5jb2Rpbmc9aTticmVhaztjYXNlIkZvbnRCQm94Ijpjb25zdCBzPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgoc1szXSxzWzFdKTtlLmRlc2NlbnQ9TWF0aC5taW4oc1sxXSxzWzNdKTtlLmFzY2VudFNjYWxlZD0hMH19fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QYXR0ZXJuPXZvaWQgMDt0LmNsZWFyUGF0dGVybkNhY2hlcz1mdW5jdGlvbiBjbGVhclBhdHRlcm5DYWNoZXMoKXtmPU9iamVjdC5jcmVhdGUobnVsbCl9O3QuZ2V0VGlsaW5nUGF0dGVybklSPWZ1bmN0aW9uIGdldFRpbGluZ1BhdHRlcm5JUihlLHQsYSl7Y29uc3Qgbj10LmdldEFycmF5KCJNYXRyaXgiKSxpPXIuVXRpbC5ub3JtYWxpemVSZWN0KHQuZ2V0QXJyYXkoIkJCb3giKSkscz10LmdldCgiWFN0ZXAiKSxvPXQuZ2V0KCJZU3RlcCIpLGM9dC5nZXQoIlBhaW50VHlwZSIpLGw9dC5nZXQoIlRpbGluZ1R5cGUiKTtpZihpWzJdLWlbMF09PTB8fGlbM10taVsxXT09MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL0JCb3ggYXJyYXk6IFske2l9XS5gKTtyZXR1cm5bIlRpbGluZ1BhdHRlcm4iLGEsZSxuLGkscyxvLGMsbF19O2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDE0MCk7YSgxNjApO3ZhciByPWEoMTQ1KSxuPWEoMTUyKSxpPWEoMTYzKSxzPWEoMTUwKTtjb25zdCBvPTIsYz0zLGw9NCxoPTUsdT02LGQ9Nzt0LlBhdHRlcm49Y2xhc3MgUGF0dGVybntjb25zdHJ1Y3RvcigpeygwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBQYXR0ZXJuLiIpfXN0YXRpYyBwYXJzZVNoYWRpbmcoZSx0LGEsaSxmKXtjb25zdCBnPWUgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW0/ZS5kaWN0OmUscD1nLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKHApe2Nhc2UgbzpjYXNlIGM6cmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmcoZyx0LGEsaSxmKTtjYXNlIGw6Y2FzZSBoOmNhc2UgdTpjYXNlIGQ6cmV0dXJuIG5ldyBNZXNoU2hhZGluZyhlLHQsYSxpLGYpO2RlZmF1bHQ6dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK3ApfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoZSk7cmV0dXJuIG5ldyBEdW1teVNoYWRpbmd9fX07Y2xhc3MgQmFzZVNoYWRpbmd7c3RhdGljIFNNQUxMX05VTUJFUj0xZS02O2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VTaGFkaW5nJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNoYWRpbmcuIil9Z2V0SVIoKXsoMCxyLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1jbGFzcyBSYWRpYWxBeGlhbFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tjb25zdHJ1Y3RvcihlLHQsYSxuLHMpe3N1cGVyKCk7dGhpcy5jb29yZHNBcnI9ZS5nZXRBcnJheSgiQ29vcmRzIik7dGhpcy5zaGFkaW5nVHlwZT1lLmdldCgiU2hhZGluZ1R5cGUiKTtjb25zdCBvPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZS5nZXRSYXcoIkNTIil8fGUuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjp0LHJlc291cmNlczphLHBkZkZ1bmN0aW9uRmFjdG9yeTpuLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnN9KSxsPWUuZ2V0QXJyYXkoIkJCb3giKTt0aGlzLmJib3g9QXJyYXkuaXNBcnJheShsKSYmND09PWwubGVuZ3RoP3IuVXRpbC5ub3JtYWxpemVSZWN0KGwpOm51bGw7bGV0IGg9MCx1PTE7aWYoZS5oYXMoIkRvbWFpbiIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2g9dFswXTt1PXRbMV19bGV0IGQ9ITEsZj0hMTtpZihlLmhhcygiRXh0ZW5kIikpe2NvbnN0IHQ9ZS5nZXRBcnJheSgiRXh0ZW5kIik7ZD10WzBdO2Y9dFsxXX1pZighKHRoaXMuc2hhZGluZ1R5cGUhPT1jfHxkJiZmKSl7Y29uc3RbZSx0LGEsbixpLHNdPXRoaXMuY29vcmRzQXJyLG89TWF0aC5oeXBvdChlLW4sdC1pKTthPD1zK28mJnM8PWErbyYmKDAsci53YXJuKSgiVW5zdXBwb3J0ZWQgcmFkaWFsIGdyYWRpZW50LiIpfXRoaXMuZXh0ZW5kU3RhcnQ9ZDt0aGlzLmV4dGVuZEVuZD1mO2NvbnN0IGc9ZS5nZXRSYXcoIkZ1bmN0aW9uIikscD1uLmNyZWF0ZUZyb21BcnJheShnKSxtPSh1LWgpLzg0MCxiPXRoaXMuY29sb3JTdG9wcz1bXTtpZihoPj11fHxtPD0wKXsoMCxyLmluZm8pKCJCYWQgc2hhZGluZyBkb21haW4uIik7cmV0dXJufWNvbnN0IHk9bmV3IEZsb2F0MzJBcnJheShvLm51bUNvbXBzKSx3PW5ldyBGbG9hdDMyQXJyYXkoMSk7bGV0IFMseD0wO3dbMF09aDtwKHcsMCx5LDApO2xldCBDPW8uZ2V0UmdiKHksMCk7Y29uc3Qgdj1yLlV0aWwubWFrZUhleENvbG9yKENbMF0sQ1sxXSxDWzJdKTtiLnB1c2goWzAsdl0pO2xldCBrPTE7d1swXT1oK207cCh3LDAseSwwKTtsZXQgTz1vLmdldFJnYih5LDApLFQ9T1swXS1DWzBdKzEsTT1PWzFdLUNbMV0rMSxFPU9bMl0tQ1syXSsxLEQ9T1swXS1DWzBdLTEsUj1PWzFdLUNbMV0tMSxOPU9bMl0tQ1syXS0xO2ZvcihsZXQgZT0yO2U8ODQwO2UrKyl7d1swXT1oK2UqbTtwKHcsMCx5LDApO1M9by5nZXRSZ2IoeSwwKTtjb25zdCB0PWUteDtUPU1hdGgubWluKFQsKFNbMF0tQ1swXSsxKS90KTtNPU1hdGgubWluKE0sKFNbMV0tQ1sxXSsxKS90KTtFPU1hdGgubWluKEUsKFNbMl0tQ1syXSsxKS90KTtEPU1hdGgubWF4KEQsKFNbMF0tQ1swXS0xKS90KTtSPU1hdGgubWF4KFIsKFNbMV0tQ1sxXS0xKS90KTtOPU1hdGgubWF4KE4sKFNbMl0tQ1syXS0xKS90KTtpZighKEQ8PVQmJlI8PU0mJk48PUUpKXtjb25zdCBlPXIuVXRpbC5tYWtlSGV4Q29sb3IoT1swXSxPWzFdLE9bMl0pO2IucHVzaChbay84NDAsZV0pO1Q9U1swXS1PWzBdKzE7TT1TWzFdLU9bMV0rMTtFPVNbMl0tT1syXSsxO0Q9U1swXS1PWzBdLTE7Uj1TWzFdLU9bMV0tMTtOPVNbMl0tT1syXS0xO3g9aztDPU99az1lO089U31jb25zdCBMPXIuVXRpbC5tYWtlSGV4Q29sb3IoT1swXSxPWzFdLE9bMl0pO2IucHVzaChbMSxMXSk7bGV0ICQ9InRyYW5zcGFyZW50IjtpZihlLmhhcygiQmFja2dyb3VuZCIpKXtTPW8uZ2V0UmdiKGUuZ2V0KCJCYWNrZ3JvdW5kIiksMCk7JD1yLlV0aWwubWFrZUhleENvbG9yKFNbMF0sU1sxXSxTWzJdKX1pZighZCl7Yi51bnNoaWZ0KFswLCRdKTtiWzFdWzBdKz1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVJ9aWYoIWYpe2IuYXQoLTEpWzBdLT1CYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7Yi5wdXNoKFsxLCRdKX10aGlzLmNvbG9yU3RvcHM9Yn1nZXRJUigpe2NvbnN0IGU9dGhpcy5jb29yZHNBcnIsdD10aGlzLnNoYWRpbmdUeXBlO2xldCBhLG4saSxzLGw7aWYodD09PW8pe249W2VbMF0sZVsxXV07aT1bZVsyXSxlWzNdXTtzPW51bGw7bD1udWxsO2E9ImF4aWFsIn1lbHNlIGlmKHQ9PT1jKXtuPVtlWzBdLGVbMV1dO2k9W2VbM10sZVs0XV07cz1lWzJdO2w9ZVs1XTthPSJyYWRpYWwifWVsc2UoMCxyLnVucmVhY2hhYmxlKShgZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICR7dH1gKTtyZXR1cm5bIlJhZGlhbEF4aWFsIixhLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsbixpLHMsbF19fWNsYXNzIE1lc2hTdHJlYW1SZWFkZXJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0cmVhbT1lO3RoaXMuY29udGV4dD10O3RoaXMuYnVmZmVyPTA7dGhpcy5idWZmZXJMZW5ndGg9MDtjb25zdCBhPXQubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KGEpO2NvbnN0IHI9dC5jb2xvclNwYWNlLm51bUNvbXBzO3RoaXMudG1wQ3NDb21wc0J1Zj10LmNvbG9yRm4/bmV3IEZsb2F0MzJBcnJheShyKTp0aGlzLnRtcENvbXBzQnVmfWdldCBoYXNEYXRhKCl7aWYodGhpcy5zdHJlYW0uZW5kKXJldHVybiB0aGlzLnN0cmVhbS5wb3M8dGhpcy5zdHJlYW0uZW5kO2lmKHRoaXMuYnVmZmVyTGVuZ3RoPjApcmV0dXJuITA7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7aWYoZTwwKXJldHVybiExO3RoaXMuYnVmZmVyPWU7dGhpcy5idWZmZXJMZW5ndGg9ODtyZXR1cm4hMH1yZWFkQml0cyhlKXtsZXQgdD10aGlzLmJ1ZmZlcixhPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDMyPT09ZSl7aWYoMD09PWEpcmV0dXJuKHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpKT4+PjA7dD10PDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7dGhpcy5idWZmZXI9ZSYoMTw8YSktMTtyZXR1cm4odDw8OC1hfCgyNTUmZSk+PmEpPj4+MH1pZig4PT09ZSYmMD09PWEpcmV0dXJuIHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtmb3IoO2E8ZTspe3Q9dDw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7YSs9OH1hLT1lO3RoaXMuYnVmZmVyTGVuZ3RoPWE7dGhpcy5idWZmZXI9dCYoMTw8YSktMTtyZXR1cm4gdD4+YX1hbGlnbigpe3RoaXMuYnVmZmVyPTA7dGhpcy5idWZmZXJMZW5ndGg9MH1yZWFkRmxhZygpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9cmVhZENvb3JkaW5hdGUoKXtjb25zdCBlPXRoaXMuY29udGV4dC5iaXRzUGVyQ29vcmRpbmF0ZSx0PXRoaXMucmVhZEJpdHMoZSksYT10aGlzLnJlYWRCaXRzKGUpLHI9dGhpcy5jb250ZXh0LmRlY29kZSxuPWU8MzI/MS8oKDE8PGUpLTEpOjIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7cmV0dXJuW3QqbiooclsxXS1yWzBdKStyWzBdLGEqbiooclszXS1yWzJdKStyWzJdXX1yZWFkQ29tcG9uZW50cygpe2NvbnN0IGU9dGhpcy5jb250ZXh0Lm51bUNvbXBzLHQ9dGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQsYT10PDMyPzEvKCgxPDx0KS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwLHI9dGhpcy5jb250ZXh0LmRlY29kZSxuPXRoaXMudG1wQ29tcHNCdWY7Zm9yKGxldCBpPTAscz00O2k8ZTtpKysscys9Mil7Y29uc3QgZT10aGlzLnJlYWRCaXRzKHQpO25baV09ZSphKihyW3MrMV0tcltzXSkrcltzXX1jb25zdCBpPXRoaXMudG1wQ3NDb21wc0J1Zjt0aGlzLmNvbnRleHQuY29sb3JGbiYmdGhpcy5jb250ZXh0LmNvbG9yRm4obiwwLGksMCk7cmV0dXJuIHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihpLDApfX1sZXQgZj1PYmplY3QuY3JlYXRlKG51bGwpO2Z1bmN0aW9uIGdldEIoZSl7cmV0dXJuIGZbZV18fD1mdW5jdGlvbiBidWlsZEIoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGE9MDthPD1lO2ErKyl7Y29uc3Qgcj1hL2Usbj0xLXI7dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW24qKjMsMypyKm4qKjIsMypyKioyKm4scioqM10pKX1yZXR1cm4gdH0oZSl9Y2xhc3MgTWVzaFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tzdGF0aWMgTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MztzdGF0aWMgTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MjA7c3RhdGljIFRSSUFOR0xFX0RFTlNJVFk9MjA7Y29uc3RydWN0b3IoZSx0LGEscyxvKXtzdXBlcigpO2lmKCEoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTtjb25zdCBjPWUuZGljdDt0aGlzLnNoYWRpbmdUeXBlPWMuZ2V0KCJTaGFkaW5nVHlwZSIpO2NvbnN0IGY9Yy5nZXRBcnJheSgiQkJveCIpO3RoaXMuYmJveD1BcnJheS5pc0FycmF5KGYpJiY0PT09Zi5sZW5ndGg/ci5VdGlsLm5vcm1hbGl6ZVJlY3QoZik6bnVsbDtjb25zdCBnPWkuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6Yy5nZXRSYXcoIkNTIil8fGMuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjp0LHJlc291cmNlczphLHBkZkZ1bmN0aW9uRmFjdG9yeTpzLGxvY2FsQ29sb3JTcGFjZUNhY2hlOm99KTt0aGlzLmJhY2tncm91bmQ9Yy5oYXMoIkJhY2tncm91bmQiKT9nLmdldFJnYihjLmdldCgiQmFja2dyb3VuZCIpLDApOm51bGw7Y29uc3QgcD1jLmdldFJhdygiRnVuY3Rpb24iKSxtPXA/cy5jcmVhdGVGcm9tQXJyYXkocCk6bnVsbDt0aGlzLmNvb3Jkcz1bXTt0aGlzLmNvbG9ycz1bXTt0aGlzLmZpZ3VyZXM9W107Y29uc3QgYj17Yml0c1BlckNvb3JkaW5hdGU6Yy5nZXQoIkJpdHNQZXJDb29yZGluYXRlIiksYml0c1BlckNvbXBvbmVudDpjLmdldCgiQml0c1BlckNvbXBvbmVudCIpLGJpdHNQZXJGbGFnOmMuZ2V0KCJCaXRzUGVyRmxhZyIpLGRlY29kZTpjLmdldEFycmF5KCJEZWNvZGUiKSxjb2xvckZuOm0sY29sb3JTcGFjZTpnLG51bUNvbXBzOm0/MTpnLm51bUNvbXBzfSx5PW5ldyBNZXNoU3RyZWFtUmVhZGVyKGUsYik7bGV0IHc9ITE7c3dpdGNoKHRoaXMuc2hhZGluZ1R5cGUpe2Nhc2UgbDp0aGlzLl9kZWNvZGVUeXBlNFNoYWRpbmcoeSk7YnJlYWs7Y2FzZSBoOmNvbnN0IGU9MHxjLmdldCgiVmVydGljZXNQZXJSb3ciKTtpZihlPDIpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgVmVydGljZXNQZXJSb3ciKTt0aGlzLl9kZWNvZGVUeXBlNVNoYWRpbmcoeSxlKTticmVhaztjYXNlIHU6dGhpcy5fZGVjb2RlVHlwZTZTaGFkaW5nKHkpO3c9ITA7YnJlYWs7Y2FzZSBkOnRoaXMuX2RlY29kZVR5cGU3U2hhZGluZyh5KTt3PSEwO2JyZWFrO2RlZmF1bHQ6KDAsci51bnJlYWNoYWJsZSkoIlVuc3VwcG9ydGVkIG1lc2ggdHlwZS4iKX1pZih3KXt0aGlzLl91cGRhdGVCb3VuZHMoKTtmb3IobGV0IGU9MCx0PXRoaXMuZmlndXJlcy5sZW5ndGg7ZTx0O2UrKyl0aGlzLl9idWlsZEZpZ3VyZUZyb21QYXRjaChlKX10aGlzLl91cGRhdGVCb3VuZHMoKTt0aGlzLl9wYWNrRGF0YSgpfV9kZWNvZGVUeXBlNFNoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLG49W10saT1bXTtsZXQgcz0wO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgbz1lLnJlYWRGbGFnKCksYz1lLnJlYWRDb29yZGluYXRlKCksbD1lLnJlYWRDb21wb25lbnRzKCk7aWYoMD09PXMpe2lmKCEoMDw9byYmbzw9MikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTQgZmxhZyIpO3N3aXRjaChvKXtjYXNlIDA6cz0zO2JyZWFrO2Nhc2UgMTppLnB1c2goaS5hdCgtMiksaS5hdCgtMSkpO3M9MTticmVhaztjYXNlIDI6aS5wdXNoKGkuYXQoLTMpLGkuYXQoLTEpKTtzPTF9bi5wdXNoKG8pfWkucHVzaCh0Lmxlbmd0aCk7dC5wdXNoKGMpO2EucHVzaChsKTtzLS07ZS5hbGlnbigpfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJ0cmlhbmdsZXMiLGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX1fZGVjb2RlVHlwZTVTaGFkaW5nKGUsdCl7Y29uc3QgYT10aGlzLmNvb3JkcyxyPXRoaXMuY29sb3JzLG49W107Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCB0PWUucmVhZENvb3JkaW5hdGUoKSxpPWUucmVhZENvbXBvbmVudHMoKTtuLnB1c2goYS5sZW5ndGgpO2EucHVzaCh0KTtyLnB1c2goaSl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShuKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobiksdmVydGljZXNQZXJSb3c6dH0pfV9kZWNvZGVUeXBlNlNoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLG49bmV3IEludDMyQXJyYXkoMTYpLGk9bmV3IEludDMyQXJyYXkoNCk7Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCBzPWUucmVhZEZsYWcoKTtpZighKDA8PXMmJnM8PTMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU2IGZsYWciKTtjb25zdCBvPXQubGVuZ3RoO2ZvcihsZXQgYT0wLHI9MCE9PXM/ODoxMjthPHI7YSsrKXQucHVzaChlLnJlYWRDb29yZGluYXRlKCkpO2NvbnN0IGM9YS5sZW5ndGg7Zm9yKGxldCB0PTAscj0wIT09cz8yOjQ7dDxyO3QrKylhLnB1c2goZS5yZWFkQ29tcG9uZW50cygpKTtsZXQgbCxoLHUsZDtzd2l0Y2gocyl7Y2FzZSAwOm5bMTJdPW8rMztuWzEzXT1vKzQ7blsxNF09bys1O25bMTVdPW8rNjtuWzhdPW8rMjtuWzExXT1vKzc7bls0XT1vKzE7bls3XT1vKzg7blswXT1vO25bMV09bysxMTtuWzJdPW8rMTA7blszXT1vKzk7aVsyXT1jKzE7aVszXT1jKzI7aVswXT1jO2lbMV09YyszO2JyZWFrO2Nhc2UgMTpsPW5bMTJdO2g9blsxM107dT1uWzE0XTtkPW5bMTVdO25bMTJdPWQ7blsxM109byswO25bMTRdPW8rMTtuWzE1XT1vKzI7bls4XT11O25bMTFdPW8rMztuWzRdPWg7bls3XT1vKzQ7blswXT1sO25bMV09bys3O25bMl09bys2O25bM109bys1O2w9aVsyXTtoPWlbM107aVsyXT1oO2lbM109YztpWzBdPWw7aVsxXT1jKzE7YnJlYWs7Y2FzZSAyOmw9blsxNV07aD1uWzExXTtuWzEyXT1uWzNdO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09bls3XTtuWzExXT1vKzM7bls0XT1oO25bN109bys0O25bMF09bDtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtsPWlbM107aVsyXT1pWzFdO2lbM109YztpWzBdPWw7aVsxXT1jKzE7YnJlYWs7Y2FzZSAzOm5bMTJdPW5bMF07blsxM109byswO25bMTRdPW8rMTtuWzE1XT1vKzI7bls4XT1uWzFdO25bMTFdPW8rMztuWzRdPW5bMl07bls3XT1vKzQ7blswXT1uWzNdO25bMV09bys3O25bMl09bys2O25bM109bys1O2lbMl09aVswXTtpWzNdPWM7aVswXT1pWzFdO2lbMV09YysxfW5bNV09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtuWzBdXVswXS10W25bMTVdXVswXSs2Kih0W25bNF1dWzBdK3RbblsxXV1bMF0pLTIqKHRbblsxMl1dWzBdK3RbblszXV1bMF0pKzMqKHRbblsxM11dWzBdK3Rbbls3XV1bMF0pKS85LCgtNCp0W25bMF1dWzFdLXRbblsxNV1dWzFdKzYqKHRbbls0XV1bMV0rdFtuWzFdXVsxXSktMioodFtuWzEyXV1bMV0rdFtuWzNdXVsxXSkrMyoodFtuWzEzXV1bMV0rdFtuWzddXVsxXSkpLzldKTtuWzZdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbblszXV1bMF0tdFtuWzEyXV1bMF0rNioodFtuWzJdXVswXSt0W25bN11dWzBdKS0yKih0W25bMF1dWzBdK3RbblsxNV1dWzBdKSszKih0W25bNF1dWzBdK3RbblsxNF1dWzBdKSkvOSwoLTQqdFtuWzNdXVsxXS10W25bMTJdXVsxXSs2Kih0W25bMl1dWzFdK3Rbbls3XV1bMV0pLTIqKHRbblswXV1bMV0rdFtuWzE1XV1bMV0pKzMqKHRbbls0XV1bMV0rdFtuWzE0XV1bMV0pKS85XSk7bls5XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W25bMTJdXVswXS10W25bM11dWzBdKzYqKHRbbls4XV1bMF0rdFtuWzEzXV1bMF0pLTIqKHRbblswXV1bMF0rdFtuWzE1XV1bMF0pKzMqKHRbblsxMV1dWzBdK3RbblsxXV1bMF0pKS85LCgtNCp0W25bMTJdXVsxXS10W25bM11dWzFdKzYqKHRbbls4XV1bMV0rdFtuWzEzXV1bMV0pLTIqKHRbblswXV1bMV0rdFtuWzE1XV1bMV0pKzMqKHRbblsxMV1dWzFdK3RbblsxXV1bMV0pKS85XSk7blsxMF09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFtuWzE1XV1bMF0tdFtuWzBdXVswXSs2Kih0W25bMTFdXVswXSt0W25bMTRdXVswXSktMioodFtuWzEyXV1bMF0rdFtuWzNdXVswXSkrMyoodFtuWzJdXVswXSt0W25bOF1dWzBdKSkvOSwoLTQqdFtuWzE1XV1bMV0tdFtuWzBdXVsxXSs2Kih0W25bMTFdXVsxXSt0W25bMTRdXVsxXSktMioodFtuWzEyXV1bMV0rdFtuWzNdXVsxXSkrMyoodFtuWzJdXVsxXSt0W25bOF1dWzFdKSkvOV0pO3RoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJwYXRjaCIsY29vcmRzOm5ldyBJbnQzMkFycmF5KG4pLGNvbG9yczpuZXcgSW50MzJBcnJheShpKX0pfX1fZGVjb2RlVHlwZTdTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxuPW5ldyBJbnQzMkFycmF5KDE2KSxpPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCk7aWYoISgwPD1zJiZzPD0zKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNyBmbGFnIik7Y29uc3Qgbz10Lmxlbmd0aDtmb3IobGV0IGE9MCxyPTAhPT1zPzEyOjE2O2E8cjthKyspdC5wdXNoKGUucmVhZENvb3JkaW5hdGUoKSk7Y29uc3QgYz1hLmxlbmd0aDtmb3IobGV0IHQ9MCxyPTAhPT1zPzI6NDt0PHI7dCsrKWEucHVzaChlLnJlYWRDb21wb25lbnRzKCkpO2xldCBsLGgsdSxkO3N3aXRjaChzKXtjYXNlIDA6blsxMl09byszO25bMTNdPW8rNDtuWzE0XT1vKzU7blsxNV09bys2O25bOF09bysyO25bOV09bysxMztuWzEwXT1vKzE0O25bMTFdPW8rNztuWzRdPW8rMTtuWzVdPW8rMTI7bls2XT1vKzE1O25bN109bys4O25bMF09bztuWzFdPW8rMTE7blsyXT1vKzEwO25bM109bys5O2lbMl09YysxO2lbM109YysyO2lbMF09YztpWzFdPWMrMzticmVhaztjYXNlIDE6bD1uWzEyXTtoPW5bMTNdO3U9blsxNF07ZD1uWzE1XTtuWzEyXT1kO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09dTtuWzldPW8rOTtuWzEwXT1vKzEwO25bMTFdPW8rMztuWzRdPWg7bls1XT1vKzg7bls2XT1vKzExO25bN109bys0O25bMF09bDtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtsPWlbMl07aD1pWzNdO2lbMl09aDtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMjpsPW5bMTVdO2g9blsxMV07blsxMl09blszXTtuWzEzXT1vKzA7blsxNF09bysxO25bMTVdPW8rMjtuWzhdPW5bN107bls5XT1vKzk7blsxMF09bysxMDtuWzExXT1vKzM7bls0XT1oO25bNV09bys4O25bNl09bysxMTtuWzddPW8rNDtuWzBdPWw7blsxXT1vKzc7blsyXT1vKzY7blszXT1vKzU7bD1pWzNdO2lbMl09aVsxXTtpWzNdPWM7aVswXT1sO2lbMV09YysxO2JyZWFrO2Nhc2UgMzpuWzEyXT1uWzBdO25bMTNdPW8rMDtuWzE0XT1vKzE7blsxNV09bysyO25bOF09blsxXTtuWzldPW8rOTtuWzEwXT1vKzEwO25bMTFdPW8rMztuWzRdPW5bMl07bls1XT1vKzg7bls2XT1vKzExO25bN109bys0O25bMF09blszXTtuWzFdPW8rNztuWzJdPW8rNjtuWzNdPW8rNTtpWzJdPWlbMF07aVszXT1jO2lbMF09aVsxXTtpWzFdPWMrMX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShuKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX19X2J1aWxkRmlndXJlRnJvbVBhdGNoKGUpe2NvbnN0IHQ9dGhpcy5maWd1cmVzW2VdOygwLHIuYXNzZXJ0KSgicGF0Y2giPT09dC50eXBlLCJVbmV4cGVjdGVkIHBhdGNoIG1lc2ggZmlndXJlIik7Y29uc3QgYT10aGlzLmNvb3JkcyxuPXRoaXMuY29sb3JzLGk9dC5jb29yZHMscz10LmNvbG9ycyxvPU1hdGgubWluKGFbaVswXV1bMF0sYVtpWzNdXVswXSxhW2lbMTJdXVswXSxhW2lbMTVdXVswXSksYz1NYXRoLm1pbihhW2lbMF1dWzFdLGFbaVszXV1bMV0sYVtpWzEyXV1bMV0sYVtpWzE1XV1bMV0pLGw9TWF0aC5tYXgoYVtpWzBdXVswXSxhW2lbM11dWzBdLGFbaVsxMl1dWzBdLGFbaVsxNV1dWzBdKSxoPU1hdGgubWF4KGFbaVswXV1bMV0sYVtpWzNdXVsxXSxhW2lbMTJdXVsxXSxhW2lbMTVdXVsxXSk7bGV0IHU9TWF0aC5jZWlsKChsLW8pKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzJdLXRoaXMuYm91bmRzWzBdKSk7dT1NYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCx1KSk7bGV0IGQ9TWF0aC5jZWlsKChoLWMpKk1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzNdLXRoaXMuYm91bmRzWzFdKSk7ZD1NYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxNYXRoLm1pbihNZXNoU2hhZGluZy5NQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCxkKSk7Y29uc3QgZj11KzEsZz1uZXcgSW50MzJBcnJheSgoZCsxKSpmKSxwPW5ldyBJbnQzMkFycmF5KChkKzEpKmYpO2xldCBtPTA7Y29uc3QgYj1uZXcgVWludDhBcnJheSgzKSx5PW5ldyBVaW50OEFycmF5KDMpLHc9bltzWzBdXSxTPW5bc1sxXV0seD1uW3NbMl1dLEM9bltzWzNdXSx2PWdldEIoZCksaz1nZXRCKHUpO2ZvcihsZXQgZT0wO2U8PWQ7ZSsrKXtiWzBdPSh3WzBdKihkLWUpK3hbMF0qZSkvZHwwO2JbMV09KHdbMV0qKGQtZSkreFsxXSplKS9kfDA7YlsyXT0od1syXSooZC1lKSt4WzJdKmUpL2R8MDt5WzBdPShTWzBdKihkLWUpK0NbMF0qZSkvZHwwO3lbMV09KFNbMV0qKGQtZSkrQ1sxXSplKS9kfDA7eVsyXT0oU1syXSooZC1lKStDWzJdKmUpL2R8MDtmb3IobGV0IHQ9MDt0PD11O3QrKyxtKyspe2lmKCEoMCE9PWUmJmUhPT1kfHwwIT09dCYmdCE9PXUpKWNvbnRpbnVlO2xldCByPTAscz0wLG89MDtmb3IobGV0IG49MDtuPD0zO24rKylmb3IobGV0IGM9MDtjPD0zO2MrKyxvKyspe2NvbnN0IGw9dltlXVtuXSprW3RdW2NdO3IrPWFbaVtvXV1bMF0qbDtzKz1hW2lbb11dWzFdKmx9Z1ttXT1hLmxlbmd0aDthLnB1c2goW3Isc10pO3BbbV09bi5sZW5ndGg7Y29uc3QgYz1uZXcgVWludDhBcnJheSgzKTtjWzBdPShiWzBdKih1LXQpK3lbMF0qdCkvdXwwO2NbMV09KGJbMV0qKHUtdCkreVsxXSp0KS91fDA7Y1syXT0oYlsyXSoodS10KSt5WzJdKnQpL3V8MDtuLnB1c2goYyl9fWdbMF09aVswXTtwWzBdPXNbMF07Z1t1XT1pWzNdO3BbdV09c1sxXTtnW2YqZF09aVsxMl07cFtmKmRdPXNbMl07Z1tmKmQrdV09aVsxNV07cFtmKmQrdV09c1szXTt0aGlzLmZpZ3VyZXNbZV09e3R5cGU6ImxhdHRpY2UiLGNvb3JkczpnLGNvbG9yczpwLHZlcnRpY2VzUGVyUm93OmZ9fV91cGRhdGVCb3VuZHMoKXtsZXQgZT10aGlzLmNvb3Jkc1swXVswXSx0PXRoaXMuY29vcmRzWzBdWzFdLGE9ZSxyPXQ7Zm9yKGxldCBuPTEsaT10aGlzLmNvb3Jkcy5sZW5ndGg7bjxpO24rKyl7Y29uc3QgaT10aGlzLmNvb3Jkc1tuXVswXSxzPXRoaXMuY29vcmRzW25dWzFdO2U9ZT5pP2k6ZTt0PXQ+cz9zOnQ7YT1hPGk/aTphO3I9cjxzP3M6cn10aGlzLmJvdW5kcz1bZSx0LGEscl19X3BhY2tEYXRhKCl7bGV0IGUsdCxhLHI7Y29uc3Qgbj10aGlzLmNvb3JkcyxpPW5ldyBGbG9hdDMyQXJyYXkoMipuLmxlbmd0aCk7Zm9yKGU9MCxhPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PW5bZV07aVthKytdPXRbMF07aVthKytdPXRbMV19dGhpcy5jb29yZHM9aTtjb25zdCBzPXRoaXMuY29sb3JzLG89bmV3IFVpbnQ4QXJyYXkoMypzLmxlbmd0aCk7Zm9yKGU9MCxhPTAsdD1zLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXNbZV07b1thKytdPXRbMF07b1thKytdPXRbMV07b1thKytdPXRbMl19dGhpcy5jb2xvcnM9bztjb25zdCBjPXRoaXMuZmlndXJlcztmb3IoZT0wLHQ9Yy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1jW2VdLG49dC5jb29yZHMsaT10LmNvbG9ycztmb3IoYT0wLHI9bi5sZW5ndGg7YTxyO2ErKyl7blthXSo9MjtpW2FdKj0zfX19Z2V0SVIoKXtyZXR1cm5bIk1lc2giLHRoaXMuc2hhZGluZ1R5cGUsdGhpcy5jb29yZHMsdGhpcy5jb2xvcnMsdGhpcy5maWd1cmVzLHRoaXMuYm91bmRzLHRoaXMuYmJveCx0aGlzLmJhY2tncm91bmRdfX1jbGFzcyBEdW1teVNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tnZXRJUigpe3JldHVyblsiRHVtbXkiXX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24gZ2V0WGZhRm9udERpY3QoZSl7Y29uc3QgdD1mdW5jdGlvbiBnZXRYZmFGb250V2lkdGhzKGUpe2NvbnN0IHQ9Z2V0WGZhRm9udE5hbWUoZSk7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3R7YmFzZVdpZHRoczphLGJhc2VNYXBwaW5nOnIsZmFjdG9yczpufT10LGk9bj9hLm1hcCgoKGUsdCk9PmUqblt0XSkpOmE7bGV0IHMsbz0tMjtjb25zdCBjPVtdO2Zvcihjb25zdFtlLHRdb2Ygci5tYXAoKChlLHQpPT5bZSx0XSkpLnNvcnQoKChlLHQpPT57bGV0W2FdPWUsW3JdPXQ7cmV0dXJuIGEtcn0pKSlpZigtMSE9PWUpaWYoZT09PW8rMSl7cy5wdXNoKGlbdF0pO28rPTF9ZWxzZXtvPWU7cz1baVt0XV07Yy5wdXNoKGUscyl9cmV0dXJuIGN9KGUpLGE9bmV3IG4uRGljdChudWxsKTthLnNldCgiQmFzZUZvbnQiLG4uTmFtZS5nZXQoZSkpO2Euc2V0KCJUeXBlIixuLk5hbWUuZ2V0KCJGb250IikpO2Euc2V0KCJTdWJ0eXBlIixuLk5hbWUuZ2V0KCJDSURGb250VHlwZTIiKSk7YS5zZXQoIkVuY29kaW5nIixuLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpO2Euc2V0KCJDSURUb0dJRE1hcCIsbi5OYW1lLmdldCgiSWRlbnRpdHkiKSk7YS5zZXQoIlciLHQpO2Euc2V0KCJGaXJzdENoYXIiLHRbMF0pO2Euc2V0KCJMYXN0Q2hhciIsdC5hdCgtMikrdC5hdCgtMSkubGVuZ3RoLTEpO2NvbnN0IHI9bmV3IG4uRGljdChudWxsKTthLnNldCgiRm9udERlc2NyaXB0b3IiLHIpO2NvbnN0IGk9bmV3IG4uRGljdChudWxsKTtpLnNldCgiT3JkZXJpbmciLCJJZGVudGl0eSIpO2kuc2V0KCJSZWdpc3RyeSIsIkFkb2JlIik7aS5zZXQoIlN1cHBsZW1lbnQiLDApO2Euc2V0KCJDSURTeXN0ZW1JbmZvIixpKTtyZXR1cm4gYX07dC5nZXRYZmFGb250TmFtZT1nZXRYZmFGb250TmFtZTthKDE0MCk7dmFyIHI9YSgyMDMpLG49YSgxNTEpLGk9YSgyMDQpLHM9YSgyMDUpLG89YSgyMDYpLGM9YSgyMDcpLGw9YSgxNTApLGg9YSgxODkpO2NvbnN0IHU9KDAsbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJNeXJpYWRQcm8tUmVndWxhciJdPWVbIlBkZkpTLUZhbGxiYWNrLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpvLk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9SZWd1bGFyTWV0cmljc307ZVsiTXlyaWFkUHJvLUJvbGQiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6by5NeXJpYWRQcm9Cb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm8uTXlyaWFkUHJvQm9sZE1ldHJpY3N9O2VbIk15cmlhZFByby1JdCJdPWVbIk15cmlhZFByby1JdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOm8uTXlyaWFkUHJvSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpvLk15cmlhZFByb0l0YWxpY01ldHJpY3N9O2VbIk15cmlhZFByby1Cb2xkSXQiXT1lWyJNeXJpYWRQcm8tQm9sZEl0YWxpYyJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpvLk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljc307ZS5BcmlhbE1UPWUuQXJpYWw9ZVsiQXJpYWwtUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZ307ZVsiQXJpYWwtQm9sZE1UIl09ZVsiQXJpYWwtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZ307ZVsiQXJpYWwtSXRhbGljTVQiXT1lWyJBcmlhbC1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmd9O2VbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPWVbIkFyaWFsLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmd9O2VbIkNhbGlicmktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOnIuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpUmVndWxhck1ldHJpY3N9O2VbIkNhbGlicmktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZE1ldHJpY3N9O2VbIkNhbGlicmktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpyLkNhbGlicmlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOnIuQ2FsaWJyaUl0YWxpY01ldHJpY3N9O2VbIkNhbGlicmktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOnIuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6ci5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmMuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpUmVndWxhck1ldHJpY3N9O2VbIlNlZ29ldWktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZE1ldHJpY3N9O2VbIlNlZ29ldWktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUl0YWxpY01ldHJpY3N9O2VbIlNlZ29ldWktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1SZWd1bGFyIl09ZS5IZWx2ZXRpY2E9e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6aS5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhUmVndWxhck1ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZE1ldHJpY3N9O2VbIkhlbHZldGljYS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUl0YWxpY01ldHJpY3N9O2VbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3N9fSkpO2Z1bmN0aW9uIGdldFhmYUZvbnROYW1lKGUpe2NvbnN0IHQ9KDAsaC5ub3JtYWxpemVGb250TmFtZSkoZSk7cmV0dXJuIHUoKVt0XX19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzPXQuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzPXQuQ2FsaWJyaUl0YWxpY01ldHJpY3M9dC5DYWxpYnJpSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljTWV0cmljcz10LkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycz10LkNhbGlicmlCb2xkRmFjdG9ycz12b2lkIDA7dC5DYWxpYnJpQm9sZEZhY3RvcnM9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU0NjU3LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MzI5MywuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkxMjEsLjg2OTQzLC43OTc5NSwuODgxOTgsLjc3OTU4LC43MDg2NCwuODEwNTUsLjkwMzk5LC44ODY1MywuOTYwMTcsLjgyNTc3LC43Nzg5MiwuNzgyNTcsLjk3NTA3LDEuNTQ2NTcsLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC44ODc2MiwuODc4NSwuNzUyNDEsLjg3ODUsLjkwNTE4LC45NTAxNSwuNzc2MTgsLjg3ODUsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MTQ4OCwuODc4NSwuODgwMSwuODc4NSwuODc4NSwuOTEzNDMsLjcxNzMsMS4wNDEwNiwuODc4NSwuODUwNzUsLjk1Nzk0LC44MjYxNiwuODUxNjIsLjc5NDkyLC44ODMzMSwxLjY5ODA4LC44ODMzMSwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjc4MDEsLjg5NTUyLDEuMjQ0ODcsMS4xMzI1NCwxLjEyNDAxLC45NjgzOSwuODUyODQsLjY4Nzg3LC43MDY0NSwuODU1OTIsLjkwNzQ3LDEuMDE0NjYsMS4wMDg4LC45MDMyMywxLDEuMDc0NjMsMSwuOTEwNTYsLjc1ODA2LDEuMTkxMTgsLjk2ODM5LC43ODg2NCwuODI4NDUsLjg0MTMzLC43NTg1OSwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuNzc1MzksLjczMjkzLC43MzEzMywuNzMxMzMsLjczMTMzLC43MzEzMywuOTU5NTgsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjg4NTA2LC45MTIxLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODY5NDMsLjg1Mjg0LC44NzUwOCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg3MTUsLjc1MjQxLC45MDUxOCwuOTA1MTgsLjkwNTE4LC45MDUxOCwuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg3ODUsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjg4MDEsLjkwNzQ3LC44OTA0OSwuODc4NSwuODc4NSwuODc4NSwuODc4NSwuODUxNjIsLjg3ODUsLjg1MTYyLC44MzkwOCwuODg3NjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjg3Mjg5LC44MzAxNiwuODg1MDYsLjkzMTI1LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuODE5MjEsLjc3NjE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwxLDEsLjg3MzU2LC44Nzg1LC45MTA3NSwuODk2MDgsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjIyOSwuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzk0NjgsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MTIxLC44Nzg1LDEsMSwuOTEyMSwuODc4NSwuODc4MDIsLjg4NjU2LC44Nzg1LC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg2OTQzLC44ODAxLC44NzQwMiwuODkyOTEsLjc3OTU4LC45MTM0MywxLDEsLjc3OTU4LC45MTM0MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjk2MDE3LC45NTc5NCwuNzc4OTIsLjg1MTYyLC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC44ODc2MiwuNzc1MzksLjg3MTUsLjg3NTA4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzA2NzQsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuMDYzMDMsLjgzOTA4LC44MDM1MiwuNTcxODQsLjY5NjUsLjU2Mjg5LC44MjAwMSwuNTYwMjksLjgxMjM1LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42ODE1NiwuODAzNjcsLjczMTMzLC43ODI1NywuODczNTYsLjg2OTQzLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkxMjEsLjc2NDgsLjg2OTQzLC44NzM1NiwuNzk3OTUsLjc4Mjc1LC44MTA1NSwuNzc4OTIsLjk3NjIsLjgyNTc3LC45OTgxOSwuODQ4OTYsLjk1OTU4LC43Nzg5MiwuOTYxMDgsMS4wMTQwNywuODkwNDksMS4wMjk4OCwuOTQyMTEsLjk2MTA4LC44OTM2LC44NDAyMSwuODc4NDIsLjk2Mzk5LC43OTEwOSwuODkwNDksMS4wMDgxMywxLjAyOTg4LC44NjA3NywuODc0NDUsLjkyMDk5LC44NDcyMywuODY1MTMsLjg4MDEsLjc1NjM4LC44NTcxNCwuNzgyMTYsLjc5NTg2LC44Nzk2NSwuOTQyMTEsLjk3NzQ3LC43ODI4NywuOTc5MjYsLjg0OTcxLDEuMDI5ODgsLjk0MjExLC44ODAxLC45NDIxMSwuODQ5NzEsLjczMTMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDI2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1MTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNTQ4LDEsMSwxLDEsMSwxLC45NjAxNywuOTU3OTQsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAzNjMsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44NzAxMiwuODcwMTIsLjg3MDEyLC44OTU1MiwuODk1NTIsMS40MjI1OSwuNzExNDMsMS4wNjE1MiwxLDEsMS4wMzM3MiwxLjAzMzcyLC45NzE3MSwxLjQ5NTYsMi4yODA3LC45MzgzNSwuODM0MDYsLjkxMTMzLC44NDEwNywuOTExMzMsMSwxLDEsLjcyMDIxLDEsMS4yMzEwOCwuODM0ODksLjg4NTI1LC44ODUyNSwuODE0OTksLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4zMTAwNiwxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9O3QuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsLjk3ODAxLC45MjQ4MiwuODk1NTIsLjkxMTMzLC44MTk4OCwuOTc1NjYsLjk4MTUyLC45MzU0OCwuOTM1NDgsMS4yNzk4LC44NTI4NCwuOTI3OTQsMSwuOTYxMzQsMS41NjIzOSwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjgyODQ1LC44Mjg0NSwuODUyODQsLjg1Mjg0LC44NTI4NCwuNzU4NTksLjkyMTM4LC44MzkwOCwuNzc2MiwuNzE4MDUsLjg3Mjg5LC43MzEzMywuNzUxNCwuODE5MjEsLjg3MzU2LC45NTk1OCwuNTk1MjYsLjc1NzI3LC42OTIyNSwxLjA0OTI0LC45MDg3MiwuODU5MzgsLjc5Nzk1LC44NzA2OCwuNzc5NTgsLjY5NzY2LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjA2OCwuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41MjksLjk3NTA3LC44NTI4NCwuODk1NTIsLjkwMTc2LC45NDkwOCwuODY0MTEsLjc0MDEyLC44NjQxMSwuODgzMjMsLjk1MDE1LC44NjQxMSwuODYzMzEsLjg4NDAxLC45MTkxNiwuODYzMDQsLjg4NDAxLC45MDM5LC44NjMzMSwuODYzMzEsLjg2NDExLC44NjQxMSwuOTA0NjQsLjcwODUyLDEuMDQxMDYsLjg2MzMxLC44NDM3MiwuOTU3OTQsLjgyNjE2LC44NDU0OCwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTkxMjksLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzE4MDUsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkwODcyLC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1Mjg0LC44NzA2OCwuOTAzOTksLjkwMzk5LC45MDM5OSwuOTAzOTksLjc3ODkyLC43OTc5NSwuOTA4MDcsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjg1ODg3LC43NDAxMiwuODgzMjMsLjg4MzIzLC44ODMyMywuODgzMjMsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg4NDAxLC44Nzg1LC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC45MDc0NywuODkwNDksLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NDU0OCwuODY0MTEsLjg0NTQ4LC44MzkwOCwuOTQ5MDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjg3Mjg5LC43OTUzOCwuODg1MDYsLjkyNzI2LC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuODE5MjEsLjg2NDExLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwxLDEsLjg3MzU2LC44NjMzMSwuOTEwNzUsLjg3NzcsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC43NjQ2NywuOTAxNjcsLjU5NTI2LC45MTkxNiwxLDEsLjg2MzA0LC42OTIyNSwuODg0MDEsMSwxLC43MDQyNCwuNzczMTIsLjkxOTI2LC44ODE3NSwuNzA4MjMsLjk0OTAzLC45MDg3MiwuODYzMzEsMSwxLC45MDg3MiwuODYzMzEsLjg2OTA2LC44ODExNiwuODYzMzEsLjg1OTM4LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg3NDAyLC44NjU0OSwuNzc5NTgsLjkwNDY0LDEsMSwuNzc5NTgsLjkwNDY0LC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsMSwxLC44MTA1NSwuNzU4NDEsLjgxMDU1LDEuMDY0NTIsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LC43Nzg5MiwuNzgyNTcsLjc5NDkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuOTI5NywuNTY4OTIsLjgzOTA4LC45NDkwOCwuNzc1MzksLjg1ODg3LC44NzA2OCwuODkwNDksMSwxLC44MTA1NSwxLjA0MTA2LDEuMjA1MjgsMS4yMDUyOCwxLDEuMTU1NDMsLjcwMDg4LC45ODM4NywuOTQ3MjEsMS4zMzQzMSwxLjQ1ODk0LC45NTE2MSwxLjQ4Mzg3LC44MzkwOCwuODAzNTIsLjU3MTE4LC42OTY1LC41NjM0NywuNzkxNzksLjU1ODUzLC44MDM0NiwxLjAyOTg4LC44MzkwOCwuNzc2MiwuNjcxNzQsLjg2MDM2LC43MzEzMywuNzgyNTcsLjg3MzU2LC44NjQ0MSwuOTU5NTgsLjc1NzI3LC44OTAxOSwxLjA0OTI0LC45MDg3MiwuNzQ4ODksLjg1OTM4LC44Nzg5MSwuNzk3OTUsLjc5NTcsLjgxMDU1LC43Nzg5MiwuOTc0NDcsLjgyNTc3LC45NzQ2NiwuODcxNzksLjk1OTU4LC43Nzg5MiwuOTQyNTIsLjk1NjEyLC44NzUzLDEuMDI5ODgsLjkyNzMzLC45NDI1MiwuODc0MTEsLjg0MDIxLC44NzI4LC45NTYxMiwuNzQwODEsLjg3NTMsMS4wMjE4OSwxLjAyOTg4LC44NDgxNCwuODc0NDUsLjkxODIyLC44NDcyMywuODU2NjgsLjg2MzMxLC44MTM0NCwuODc1ODEsLjc2NDIyLC44MjA0NiwuOTYwNTcsLjkyNzMzLC45OTM3NSwuNzgwMjIsLjk1NDUyLC44NjAxNSwxLjAyOTg4LC45MjczMywuODYzMzEsLjkyNzMzLC44NjAxNSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNjMxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODMyMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODUxNzQsMSwxLDEsMSwxLDEsLjk2MDY4LC45NTc5NCwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjc3ODkyLC44NDU0OCwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuODk4MDcsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTA5NCwxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkyOTcyLC44MzQwNiwuOTExMzMsLjgzMzI2LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA2MTYsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDcsMS41MzcxMSwuOTQ0MzQsMS4wODY5NiwxLC45NTAxOCwuNzcxOTIsLjg1Mjg0LC45MDc0NywxLjE3NTM0LC42OTgyNSwuOTcxNiwxLjM3MDc3LC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wODAwNCwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDcyNywuOTA3MjcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlJdGFsaWNGYWN0b3JzPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTU0MywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzIzNDYsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5MjQ5LC44NDExOCwuNzc0NTIsLjg1Mzc0LC43NTE4NiwuNjc3ODksLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MzA5LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM4MzEzLDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjkyNDUsLjkyNDUsLjgzMjAzLC45MjQ1LC44NTg2NSwxLjA5ODQyLC45MjQ1LC45MjQ1LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTQ5NTksLjkyNDUsLjkyMjc0LC45MjQ1LC45MjQ1LDEuMDI5MzMsLjc3ODMyLDEuMjA1NjIsLjkyNDUsLjg5MTYsLjk4OTg2LC44NjYyMSwuODk0NTMsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4xNjM1OSwuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MjM0NiwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkyNDksLjg0MTE4LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODUyODQsLjg0NTU3LC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44NDg0MywuODMyMDMsLjg1ODY1LC44NTg2NSwuODU4NjUsLjg1ODY1LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjkyNDUsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTA3NDcsLjg2NjUxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44OTQ1MywuOTI0NSwuODk0NTMsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuODUxOTMsLjg4NzUsLjg2NDc3LC45OTAzNCwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjgxMTA1LC45MjQ1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsMSwxLC44NjI3NSwuOTI0NSwuOTA4NzIsLjkzNTkxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3ODk2LDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkzNzUsLjk4MTU2LC45MzQwNywuNzcyNjEsMS4xMTQyOSwuODkyNDksLjkyNDUsMSwxLC44OTI0OSwuOTI0NSwuOTI1MzQsLjg2Njk4LC45MjQ1LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODQxMTgsLjkyMjc0LC44NjY3LC44NjI5MSwuNzUxODYsMS4wMjkzMywxLDEsLjc1MTg2LDEuMDI5MzMsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwxLDEsLjc5Nzc2LC45NzY1NSwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuOTI0NSwuNzYzMTgsLjg0ODQzLC44NDU1NywuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjcwMDksLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2NzUsLjkwODYxLC42MTkyLC43MzYzLC42NDgyNCwuODI0MTEsLjU2MzIxLC44NTY5NiwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzI4NiwuODQxMzQsLjczMjA2LC43NjY1OSwuODYyNzUsLjg0MzY5LC45MDY4NSwuNzc4OTIsLjg1ODcxLDEuMDI2MzgsLjg5MjQ5LC43NTgyOCwuODQxMTgsLjg1OTg0LC43NzQ1MiwuNzY0NjYsLjc5Nzc2LC43MzA2LC45MDc4MiwuNzc4MTgsLjkwMywuODcyOTEsLjkwNjg1LC43MzA2LC45OTA1OCwxLjAzNjY3LC45NDYzNSwxLjIzNTE2LC45ODQ5LC45OTA1OCwuOTIzOTMsLjg5MTYsLjk0MiwxLjAzNjY3LC43NTAyNiwuOTQ2MzUsMS4wMjk3LDEuMjM1MTYsLjkwOTE4LC45NDA0OCwuOTgyMTcsLjg5NzQ2LC44NDE1MywuOTIyNzQsLjgyNTA3LC44ODgzMiwuODQ0MzgsLjg4MTc4LDEuMDM1MjUsLjk4NDksMS4wMDIyNSwuNzgwODYsLjk3MjQ4LC44OTQwNCwxLjIzNTE2LC45ODQ5LC45MjI3NCwuOTg0OSwuODk0MDQsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTY5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODU4NjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwOTMzLDEsMSwxLDEsMSwxLC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjg5OTQsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45Nzg1OCwuODI2MTYsLjkxMTMzLC44MzQzNywuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDU3MiwxLjgxMDU1LC45MDc0OSwxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1Mjg0LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkNhbGlicmlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fTt0LkNhbGlicmlSZWd1bGFyRmFjdG9ycz1bMS4zODc3LDEsMSwxLDEuMTcyMjMsMS4xMjkzLC44OTU1MiwuOTExMzMsLjgwMzk1LDEuMDIyNjksMS4xNTYwMSwuOTEwNTYsLjkxMDU2LDEuMjc5OCwuODUyODQsLjg5ODA3LDEsLjkwODYxLDEuMzkwMTYsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45NjMwOSwuOTYzMDksLjg1Mjg0LC44NTI4NCwuODUyODQsLjgzMzE5LC44ODA3MSwuODY3NSwuODE1NTIsLjczODM0LC44NTE5MywuNzMyMDYsLjc1MjIsLjgxMTA1LC44NjI3NSwuOTA2ODUsLjYzNzcsLjc3ODkyLC43NTU5MywxLjAyNjM4LC44OTM4NSwuODUxMjIsLjc3NDUyLC44NjUwMywuNzUxODYsLjY4ODg3LC43OTc3NiwuODg4NDQsLjg1MDY2LC45NDI1OCwuNzc4MTgsLjczMDYsLjc2NjU5LDEuMTAzNjksMS4zOTAxNiwxLjEwMzY5LDEuMDYxMzksLjg5NTUyLC44NzM5LC44NjEyOCwuOTQ0NjksLjg0NTcsLjk0NDY5LC44OTQ2NCwxLjA5ODQyLC44NDYzNiwuOTQ0NjksMS4wMzI5NywxLjA3NjkyLC45MDkxOCwxLjAzMjk3LC45NTg5NywuOTQ0NjksLjk0ODIsLjk0NDY5LC45NDQ2OSwxLjA0NjkyLC43ODIyMywxLjIwNTYyLC45NDQ2OSwuOTAzMzIsLjk4OTg2LC44NjYyMSwuOTA1MjcsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4wODcwNywuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MzgzNCwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkzODUsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUyODQsLjg1MzExLC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjkzLC44NDU3LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44OTQ2NCwuODI2MDEsLjgyNjAxLC44MjYwMSwuODI2MDEsLjk0NDY5LC45NDQ2OSwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTQ4MiwuOTA3NDcsLjg2NjUxLC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTA1MjcsLjk0NDY5LC45MDUyNywuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjg1MTkzLC45MjQ1NCwuODY0NzcsLjk5MjEsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LDEsMSwuODYyNzUsLjk0NDY5LC45MDg3MiwuOTU3ODYsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LDEuMDMyOTcsLjkwNjg1LC44MjYwMSwuNzc3NDEsMS4wNTYxMSwuNjM3NywxLjA3NjkyLDEsMSwuOTA5MTgsLjc1NTkzLDEuMDMyOTcsMSwxLC43NjAzMiwuOTA0NTIsLjk4MTU2LDEuMTE4NDIsLjc3MjYxLDEuMTE0MjksLjg5Mzg1LC45NDQ2OSwxLDEsLjg5Mzg1LC45NDQ2OSwuOTU4NzcsLjg2OTAxLC45NDQ2OSwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODY2NywuOTAwMTYsLjc1MTg2LDEuMDQ2OTIsMSwxLC43NTE4NiwxLjA0NjkyLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsMSwxLC43OTc3NiwuOTIxODgsLjc5Nzc2LDEuMjMwMjMsLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsLjczMDYsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsMS4wOTIzMSwuNTQ4NzMsLjg2NzUsLjg2MTI4LC43NjMxOCwuODY5MywuODUzMTEsLjg2NjUxLDEsMSwuNzk3NzYsMS4yMDU2MiwxLjE4NjIyLDEuMTg2MjIsMSwxLjE0MzcsLjY3NzQyLC45NjMzNCwuOTM2OTUsMS4zNTE5MSwxLjQwOTA5LC45NTE2MSwxLjQ4Mzg3LC44NjY4NiwuOTA4NjEsLjYyMjY3LC43NDM1OSwuNjU2NDksLjg1NDk4LC41Njk2MywuODgyNTQsMS4yMzUxNiwuODY3NSwuODE1NTIsLjc1NDQzLC44NDUwMywuNzMyMDYsLjc2NjU5LC44NjI3NSwuODUxMjIsLjkwNjg1LC43Nzg5MiwuODU3NDYsMS4wMjYzOCwuODkzODUsLjc1NjU3LC44NTEyMiwuODYyNzUsLjc3NDUyLC43NDE3MSwuNzk3NzYsLjczMDYsLjk1MTY1LC43NzgxOCwuODk3NzIsLjg4ODMxLC45MDY4NSwuNzMwNiwuOTgxNDIsMS4wMjE5MSwuOTY1NzYsMS4yMzUxNiwuOTkwMTgsLjk4MTQyLC45MjM2LC44OTI1OCwuOTQwMzUsMS4wMjE5MSwuNzg4NDgsLjk2NTc2LC45NTYxLDEuMjM1MTYsLjkwOTE4LC45MjU3OCwuOTU0MjQsLjg5NzQ2LC44Mzk2OSwuOTQ4MiwuODAxMTMsLjg5NDQyLC44NTIwOCwuODYxNTUsLjk4MDIyLC45OTAxOCwxLjAwNDUyLC44MTIwOSwuOTkyNDcsLjg5MTgxLDEuMjM1MTYsLjk5MDE4LC45NDgyLC45OTAxOCwuODkxODEsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44ODg0NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk0NjQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NzY2LDEsMSwxLDEsMSwxLC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjkwNDMsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45OTMzMSwuODI2MTYsLjkxMTMzLC44NDI4NiwuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDUyNywxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1MzU2LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEuMDcxODUsLjk5NDEzLC45NjMzNCwxLjA4MDY1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5DYWxpYnJpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXQuSGVsdmV0aWNhUmVndWxhckZhY3RvcnM9dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXQuSGVsdmV0aWNhSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRNZXRyaWNzPXQuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz10LkhlbHZldGljYUJvbGRGYWN0b3JzPXZvaWQgMDt0LkhlbHZldGljYUJvbGRGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwuOTk5OTgsLjk5OTc0LC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3NywxLjAwMDg3LC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywxLjAwMDI2LC45OTk5LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LC45OTk3MywuOTk5NzcsMS4wMDAyNiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5OTgsMS4wMDA2LC45OTk5OCwxLjAwMDAzLC45OTk3MywuOTk5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk5OCwxLjAwMDI2LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsMS4wMDA2LC45OTk4MiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk1OSwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3MywxLC45OTk1OSwxLjAwMDc3LC45OTk1OSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3NywuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTczLDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjA2NDA5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsMS4wMzM3NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNDIsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwxLjAzODI4LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsMS4wMDA2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTkzLC45OTk4LDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMSwxLjAwMDE2LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LDEuMDAwMjYsLjgxMjEsMS4wMDAyNiwuOTk5OTgsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDA2LC45OTk3MywuOTk5NzcsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAzNCwuOTk5NzcsMSwuOTk5OTcsMS4wMDAyNiwxLjAwMDc4LDEuMDAwMzYsLjk5OTczLDEuMDAwMTMsMS4wMDA2LC45OTk3NywuOTk5NzcsLjk5OTg4LC44NTE0OCwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LC45OTk3NywxLjAwMDAxLC45OTk5OSwuOTk5NzcsMS4wMDA2OSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLC45OTk4NCwxLjAwMDI2LDEuMDAwMDEsMS4wMDAyNCwxLjAwMDAxLC45OTk5LDEsMS4wMDA2LDEuMDAwMDEsMS4wMDA0MSwuOTk5NjIsMS4wMDAyNiwxLjAwMDYsLjk5OTk1LDEuMDAwNDEsLjk5OTQyLC45OTk3MywuOTk5MjcsMS4wMDA4MiwuOTk5MDIsMS4wMDAyNiwxLjAwMDg3LDEuMDAwNiwxLjAwMDY5LC45OTk3MywuOTk4NjcsLjk5OTczLC45OTkzLDEuMDAwMjYsMS4wMDA0OSwxLjAwMDU2LDEsLjk5OTg4LC45OTkzNSwuOTk5OTUsLjk5OTU0LDEuMDAwNTUsLjk5OTQ1LDEuMDAwMzIsMS4wMDA2LC45OTk5NSwxLjAwMDI2LC45OTk5NSwxLjAwMDMyLDEuMDAwMDEsMS4wMDAwOCwuOTk5NzEsMS4wMDAxOSwuOTk5NCwxLjAwMDAxLDEuMDAwNiwxLjAwMDQ0LC45OTk3MywxLjAwMDIzLDEuMDAwNDcsMSwuOTk5NDIsLjk5NTYxLC45OTk4OSwxLjAwMDM1LC45OTk3NywxLjAwMDM1LC45OTk3NywxLjAwMDE5LC45OTk0NCwxLjAwMDAxLDEuMDAwMjEsLjk5OTI2LDEuMDAwMzUsMS4wMDAzNSwuOTk5NDIsMS4wMDA0OCwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAzNSwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk4OSwxLjAwMDU3LDEuMDAwMDEsLjk5OTM2LDEuMDAwNTIsMS4wMDAxMiwuOTk5OTYsMS4wMDA0MywxLDEuMDAwMzUsLjk5OTQsLjk5OTc2LDEuMDAwMzUsLjk5OTczLDEuMDAwNTIsMS4wMDA0MSwxLjAwMTE5LDEuMDAwMzcsLjk5OTczLDEuMDAwMDIsLjk5OTg2LDEuMDAwNDEsMS4wMDA0MSwuOTk5MDIsLjk5OTYsMS4wMDAzNCwuOTk5OTksMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwuOTk5NzMsMS4wMDA1MiwuOTk5NzMsMSwuOTk5NzMsMS4wMDA0MSwxLjAwMDc1LC45OTk0LDEuMDAwMywuOTk5OTksMSwxLjAwMDQxLC45OTk1NSwxLC45OTkxNSwuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDExOSwuOTk5NTUsLjk5OTczLDEuMDAwNiwuOTk5MTEsMS4wMDA2LDEuMDAwMjYsLjk5OTcyLDEuMDAwMjYsLjk5OTAyLDEuMDAwNDEsLjk5OTczLC45OTk5OSwxLDEsMS4wMDAzOCwxLjAwMDUsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMSwxLC45OTk3MywxLDEsLjk5OTU1LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLDEsMSwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDEwNiwuOTk5OTksLjk5OTk4LC45OTk5OCwuOTk5OTksLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwxLjAwMDQ3LDEuMDAwMjMsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMSwxLDEsMSwxLDEsMSwuOTk5NzIsMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywxLjAwMDMxLDEuMDAwMTUsMSwuOTk1NjEsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTcyLC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDA0NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDEwMTEsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTc3LDEsMSwxLjAwMDI2LC45OTk2OSwuOTk5NzIsLjk5OTgxLC45OTk4LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsLjkxMTU1LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5NjYsMS4wMDAyMiwxLjAwMDMyLDEuMDAwMDEsLjk5OTQ0LDEuMDAwMjYsMS4wMDAwMSwuOTk5NjgsMS4wMDAwMSwxLjAwMDQ3LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTgxLDEuMDAxMDEsMS4wMDAyNiwxLjAwMDYsLjk5OTQ4LC45OTk4MSwxLjAwMDY0LC45OTk3MywuOTk5NDIsMS4wMDEwMSwxLjAwMDYxLDEuMDAwMjYsMS4wMDA2OSwxLjAwMDYsMS4wMDAxNCwuOTk5NzMsMS4wMTMyMiwuOTk5NzMsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMTIsLjk5OTIzLDEsMS4wMDA2NCwxLjAwMDc2LC45OTk0OCwxLjAwMDU1LDEuMDAwNjMsMS4wMDAwNywuOTk5NDMsMS4wMDA2LC45OTk0OCwxLjAwMDI2LC45OTk0OCwuOTk5NDMsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjksMS4wMDAzOCwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTc4LDEuMDAwMDEsMS4wMDA1NywuOTk5ODksLjk5OTY3LC45OTk2NCwuOTk5NjcsLjk5OTc3LC45OTk5OSwuOTk5NzcsMS4wMDAzOCwuOTk5NzcsMS4wMDAwMSwuOTk5NzMsMS4wMDA2NiwuOTk5NjcsLjk5OTY3LDEuMDAwNDEsLjk5OTk4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwuOTk5NjcsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NjQsMS4wMDAzMSwxLjAwMDAxLC45OTk5OSwuOTk5OTksMSwxLjAwMDIzLDEsMSwuOTk5OTksMS4wMDAzNSwxLjAwMDAxLC45OTk5OSwuOTk5NzMsLjk5OTc3LC45OTk5OSwxLjAwMDU4LC45OTk3MywuOTk5NzMsLjk5OTU1LC45OTk1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45OTk4OSwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsLjQ1OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDAxLC45OTk5OSwuOTk5ODIsLjk5OTk0LC45OTk5NiwxLDEuMDAwNDIsMS4wMDA0NCwxLjAwMDI5LDEuMDAwMjMsLjk5OTczLC45OTk3MywxLjAwMDI2LC45OTk0OSwxLjAwMDAyLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzUsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMzIsLjk4Njg1LC45OTk3MywxLjAwMDI2LDEsMSwuOTk5NjYsMS4wMDA0NCwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTcxLC45OTk3OCwxLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwOTgsMSwxLDEsMS4wMDA0OSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zNSxsaW5lR2FwOi4yfTt0LkhlbHZldGljYUl0YWxpY0ZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjAyODgsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LC45OTk0NiwxLjAwMDM0LDEsLjk5OTI0LDEuMDAwMDEsMSwxLC45OTk3MywuOTk5MjQsLjk5OTczLC45OTkyNCwuOTk5NzMsMS4wNjMxMSwuOTk5NzMsMS4wMDAyNCwuOTk5NzMsLjk5OTI0LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNDEsLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODk1NDcsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAwMSwxLDEuMDAwNTQsLjk5OTc3LDEuMDAwODQsMS4wMDAwNywuOTk5NzMsMS4wMDAxMywuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLC45OTk0NSwuOTEyMjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5MzMsMS4wMDAyMiwxLjAwMDU0LDEuMDAwMDEsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMDEsMS4wMDAxLDEuMDAwMDEsMS4wMDA1MiwxLDEuMDAwNiwxLjAwMDAxLC45OTk0NSwuOTk4OTcsLjk5OTY4LC45OTkyNCwxLjAwMDM2LC45OTk0NSwuOTk5NDksMSwxLjAwMDYsLjk5ODk3LC45OTkxOCwuOTk5NjgsLjk5OTExLC45OTkyNCwxLC45OTk2MiwxLjAxNDg3LDEsMS4wMDA1LC45OTk3MywxLjAwMDEyLDEuMDAwNDMsMSwuOTk5OTUsLjk5OTk0LDEuMDAwMzYsLjk5OTQ3LDEuMDAwMTksMS4wMDA2MywxLjAwMDI1LC45OTkyNCwxLjAwMDM2LC45OTk3MywxLjAwMDM2LDEuMDAwMjUsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjcsMS4wMDAxLDEuMDAwNjgsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsMS4wMDAwOCwuOTk5NTcsLjk5OTcyLC45OTk0LC45OTk1NCwuOTk5NzUsMS4wMDA1MSwxLjAwMDAxLDEuMDAwMTksMS4wMDAwMSwxLjAwMDEsLjk5OTg2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDM4LC45OTk1NCwuOTk5NTQsLjk5OTQsMS4wMDA2NiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk3NSwxLjAwMDEsMS4wMDAwMSwuOTk5OTMsLjk5OTUsLjk5OTU1LDEuMDAwMTYsLjk5OTc4LC45OTk3NCwxLjAwMDE5LDEuMDAwMjIsLjk5OTU1LDEuMDAwNTMsLjk5OTczLDEuMDAwODksMS4wMDAwNSwuOTk5NjcsMS4wMDA0OCwuOTk5NzMsMS4wMDAwMiwxLjAwMDM0LC45OTk3MywuOTk5NzMsLjk5OTY0LDEuMDAwMDYsMS4wMDA2NiwuOTk5NDcsLjk5OTczLC45ODg5NCwuOTk5NzMsMSwuNDQ4OTgsMSwuOTk5NDYsMSwxLjAwMDM5LDEuMDAwODIsLjk5OTkxLC45OTk5MSwuOTk5ODUsMS4wMDAyMiwxLjAwMDIzLDEuMDAwNjEsMS4wMDAwNiwuOTk5NjYsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDAxOSwxLjAwMDgsMSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5ODMsMS4wMDA0NCwuOTk5NzMsLjk5OTY0LC45ODMzMiwxLC45OTk3MywxLDEsLjk5OTYyLC45OTg5NSwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywxLjAwNDIzLC45OTkyNSwuOTk5OTksMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDA0OSwxLDEuMDAyNDUsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwxLjAwMDAzLDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk1MzE3LC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn07dC5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsMS4wMDA2LDEuMDAwMDYsLjk5OTczLC45OTk3MywuOTk5ODIsMS4wMDAwMSwxLjAwMDQzLC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywuOTk5NzMsLjk5OTg3LDEuMDAwMDEsMS4wMDAwMSwuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsMSwxLjAwMDAxLC45OTk3MywuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NDksLjk5OTczLC45OTk5OCwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5MjQsLjk5OTI0LDEsLjk5OTI0LC45OTk5OSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDA2LC45OTk3MywxLC45OTk3NywxLDEsMSwxLjAwMDA1LDEuMDAwOSwxLjAwMDA1LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDksLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk4LDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsMSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjA2NDA5LDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEsLjk5OTczLDEsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEuMDQ1OTYsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LDEuMDAwMTksMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDI1NzIsLjk5OTczLDEuMDAwMDUsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5OTksLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODQ1MzMsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTI4LDEsLjk5OTc3LDEuMDAwMTMsMS4wMDA1NSwuOTk5NDcsLjk5OTQ1LC45OTk0MSwuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNCwuOTE2MjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDUsLjk5OTk5LC45OTk3NywxLjAwMDE1LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsLjk5OTQ2LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTc4LDEuMDAwNDUsLjk5OTczLC45OTkyNCwxLjAwMDIzLC45OTk3OCwuOTk5NjYsMSwxLjAwMDY1LDEuMDAwNDUsMS4wMDAxOSwuOTk5NzMsLjk5OTczLC45OTkyNCwxLDEsLjk2NDk5LDEsMS4wMDA1NSwuOTk5NzMsMS4wMDAwOCwxLjAwMDI3LDEsLjk5OTcsLjk5OTk1LDEuMDAwMjMsLjk5OTMzLDEuMDAwMTksMS4wMDAxNSwxLjAwMDMxLC45OTkyNCwxLjAwMDIzLC45OTk3MywxLjAwMDIzLDEuMDAwMzEsMS4wMDAwMSwuOTk5MjgsMS4wMDAyOSwxLjAwMDkyLDEuMDAwMzUsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsLjk5OTg4LC45OTk3NSwxLDEuMDAwODIsLjk5NTYxLC45OTk2LDEuMDAwMzUsMS4wMDAwMSwuOTk5NjIsMS4wMDAwMSwxLjAwMDkyLC45OTk2NCwxLjAwMDAxLC45OTk2MywuOTk5OTksMS4wMDAzNSwxLjAwMDM1LDEuMDAwODIsLjk5OTYyLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTYsLjk5OTY3LDEuMDAwMDEsMS4wMDAzNCwxLjAwMDc0LDEuMDAwNTQsMS4wMDA1MywxLjAwMDYzLC45OTk3MSwuOTk5NjIsMS4wMDAzNSwuOTk5NzUsLjk5OTc3LC45OTk3MywxLjAwMDQzLC45OTk1MywxLjAwMDcsLjk5OTE1LC45OTk3MywxLjAwMDA4LC45OTg5MiwxLjAwMDczLDEuMDAwNzMsMS4wMDExNCwuOTk5MTUsMS4wMDA3MywuOTk5NTUsLjk5OTczLDEuMDAwOTIsLjk5OTczLDEsLjk5OTk4LDEsMS4wMDAzLDEsMS4wMDA0MywxLjAwMDAxLC45OTk2OSwxLjAwMDMsMSwxLjAwMDM1LDEuMDAwMDEsLjk5OTUsMSwxLjAwMDkyLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNywuOTk5NSwxLC45OTkyNCwxLjAwMDYsLjk5OTI0LC45OTk3MiwxLjAwMDYyLC45OTk3MywxLjAwMTE0LDEuMDAwNzMsMSwuOTk5NTUsMSwxLDEuMDAwNDcsLjk5OTY4LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLDEsLjk5OTczLDEsMSwuOTk5NTUsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMjY3LC45OTk5OSwuOTk5OTgsLjk5OTk4LDEsLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwuOTk5MjUsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45NjMyOSwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLC44MjU0LDEuMDAwMTUsMSwxLjAwMDM1LDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzPXQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZz12b2lkIDA7dC5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHM9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3MTksNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4NSw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM4NSw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDQ2NSw3MjIsMzMzLDg1Myw5MDYsNDc0LDgyNSw5MjcsODM4LDI3OCw3MjIsNzIyLDYwMSw3MTksNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjQ0LDc3OCw3MjIsNjY3LDYwMCw2MTEsNjY3LDgyMSw2NjcsODA5LDgwMiwyNzgsNjY3LDYxNSw0NTEsNjExLDI3OCw1ODIsNjE1LDYxMCw1NTYsNjA2LDQ3NSw0NjAsNjExLDU0MSwyNzgsNTU4LDU1Niw2MTIsNTU2LDQ0NSw2MTEsNzY2LDYxOSw1MjAsNjg0LDQ0Niw1ODIsNzE1LDU3Niw3NTMsODQ1LDI3OCw1ODIsNjExLDU4Miw4NDUsNjY3LDY2OSw4ODUsNTY3LDcxMSw2NjcsMjc4LDI3Niw1NTYsMTA5NCwxMDYyLDg3NSw2MTAsNzIyLDYyMiw3MTksNzIyLDcxOSw3MjIsNTY3LDcxMiw2NjcsOTA0LDYyNiw3MTksNzE5LDYxMCw3MDIsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYyMiw4NTQsNjY3LDczMCw3MDMsMTAwNSwxMDE5LDg3MCw5NzksNzE5LDcxMSwxMDMxLDcxOSw1NTYsNjE4LDYxNSw0MTcsNjM1LDU1Niw3MDksNDk3LDYxNSw2MTUsNTAwLDYzNSw3NDAsNjA0LDYxMSw2MDQsNjExLDU1Niw0OTAsNTU2LDg3NSw1NTYsNjE1LDU4MSw4MzMsODQ0LDcyOSw4NTQsNjE1LDU1Miw4NTQsNTgzLDU1Niw1NTYsNjExLDQxNyw1NTIsNTU2LDI3OCwyODEsMjc4LDk2OSw5MDYsNjExLDUwMCw2MTUsNTU2LDYwNCw3NzgsNjExLDQ4Nyw0NDcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTA5NCw1NTYsODg1LDQ4OSwxMTE1LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocz1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDc0MCw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzgyLDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzk2LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDcyMiwzMzMsODU0LDkwNiw0NzMsODQ0LDkzMCw4NDcsMjc4LDcyMiw3MjIsNjEwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NTcsNzc4LDcxOCw2NjcsNTkwLDYxMSw2NjcsODIyLDY2Nyw4MjksNzgxLDI3OCw2NjcsNjIwLDQ3OSw2MTEsMjc4LDU5MSw2MjAsNjIxLDU1Niw2MTAsNDc5LDQ5Miw2MTEsNTU4LDI3OCw1NjYsNTU2LDYwMyw1NTYsNDUwLDYxMSw3MTIsNjA1LDUzMiw2NjQsNDA5LDU5MSw3MDQsNTc4LDc3Myw4MzQsMjc4LDU5MSw2MTEsNTkxLDgzNCw2NjcsNjY3LDg4Niw2MTQsNzE5LDY2NywyNzgsMjc4LDU1NiwxMDk0LDEwNDIsODU0LDYyMiw3MTksNjc3LDcxOSw3MjIsNzA4LDcyMiw2MTQsNzIyLDY2Nyw5MjcsNjQzLDcxOSw3MTksNjE1LDY4Nyw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjc3LDc4MSw2NjcsNzI5LDcwOCw5NzksOTg5LDg1NCwxZTMsNzA4LDcxOSwxMDQyLDcyOSw1NTYsNjE5LDYwNCw1MzQsNjE4LDU1Niw3MzYsNTEwLDYxMSw2MTEsNTA3LDYyMiw3NDAsNjA0LDYxMSw2MTEsNjExLDU1Niw4ODksNTU2LDg4NSw1NTYsNjQ2LDU4Myw4ODksOTM1LDcwNyw4NTQsNTk0LDU1Miw4NjUsNTg5LDU1Niw1NTYsNjExLDQ2OSw1NjMsNTU2LDI3OCwyNzgsMjc4LDk2OSw5MDYsNjExLDUwNyw2MTksNTU2LDYxMSw3NzgsNjExLDU3NSw0NjcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTEwNCw1NTYsODg1LDUxNiwxMTQ2LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCw5OTksNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM107dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXTt0LkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzPVszNjUsMCwzMzMsMjc4LDI3OCwzNTUsNTU2LDU1Niw4ODksNjY3LDE5MSwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDU4NCw1ODQsNTg0LDU1NiwxMDE1LDY2Nyw2NjcsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDUwMCw2NjcsNTU2LDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMjc4LDI3OCwyNzgsNDY5LDU1NiwzMzMsNTU2LDU1Niw1MDAsNTU2LDU1NiwyNzgsNTU2LDU1NiwyMjIsMjIyLDUwMCwyMjIsODMzLDU1Niw1NTYsNTU2LDU1NiwzMzMsNTAwLDI3OCw1NTYsNTAwLDcyMiw1MDAsNTAwLDUwMCwzMzQsMjYwLDMzNCw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyNjAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1MzcsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTAwLDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU0OSw2MTEsNTU2LDU1Niw1NTYsNTU2LDUwMCw1NTYsNTAwLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDYyNSw3MjIsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDcyMiw1NTYsNzIyLDU1NiwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjIyLDI3OCwyNzgsNzMzLDQ0NCw1MDAsMjIyLDY2Nyw1MDAsNTAwLDU1NiwyMjIsNTU2LDIyMiw1NTYsMjgxLDU1Niw0MDAsNTU2LDIyMiw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw2MTUsNzIzLDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1NiwxZTMsOTQ0LDcyMiwzMzMsNzIyLDMzMyw3MjIsMzMzLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjExLDI3OCw2MTEsMzU0LDYxMSwyNzgsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsOTQ0LDcyMiw2NjcsNTAwLDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyMjIsNTU2LDY2Nyw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1MDAsNjExLDI3OCwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDY2NywyNzgsNzg5LDg0NiwzODksNzk0LDg2NSw3NzUsMjIyLDY2Nyw2NjcsNTcwLDY3MSw2NjcsNjExLDcyMiw3NzgsMjc4LDY2Nyw2NjcsODMzLDcyMiw2NDgsNzc4LDcyNSw2NjcsNjAwLDYxMSw2NjcsODM3LDY2Nyw4MzEsNzYxLDI3OCw2NjcsNTcwLDQzOSw1NTUsMjIyLDU1MCw1NzAsNTcxLDUwMCw1NTYsNDM5LDQ2Myw1NTUsNTQyLDIyMiw1MDAsNDkyLDU0OCw1MDAsNDQ3LDU1Niw2NzAsNTczLDQ4Niw2MDMsMzc0LDU1MCw2NTIsNTQ2LDcyOCw3NzksMjIyLDU1MCw1NTYsNTUwLDc3OSw2NjcsNjY3LDg0Myw1NDQsNzA4LDY2NywyNzgsMjc4LDUwMCwxMDY2LDk4Miw4NDQsNTg5LDcxNSw2MzksNzI0LDY2Nyw2NTEsNjY3LDU0NCw3MDQsNjY3LDkxNyw2MTQsNzE1LDcxNSw1ODksNjg2LDgzMyw3MjIsNzc4LDcyNSw2NjcsNzIyLDYxMSw2MzksNzk1LDY2Nyw3MjcsNjczLDkyMCw5MjMsODA1LDg4Niw2NTEsNjk0LDEwMjIsNjgyLDU1Niw1NjIsNTIyLDQ5Myw1NTMsNTU2LDY4OCw0NjUsNTU2LDU1Niw0NzIsNTY0LDY4Niw1NTAsNTU2LDU1Niw1NTYsNTAwLDgzMyw1MDAsODM1LDUwMCw1NzIsNTE4LDgzMCw4NTEsNjIxLDczNiw1MjYsNDkyLDc1Miw1MzQsNTU2LDU1Niw1NTYsMzc4LDQ5Niw1MDAsMjIyLDIyMiwyMjIsOTEwLDgyOCw1NTYsNDcyLDU2NSw1MDAsNTU2LDc3OCw1NTYsNDkyLDMzOSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwODMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsOTk4LDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODQsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV07dC5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHM9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjE1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzUsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyOTIsNTU2LDMzNCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYwNCw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNzUsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODQsODM4LDM4NCw3NzQsODU1LDc1MiwyMjIsNjY3LDY2Nyw1NTEsNjY4LDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2OCw4MzMsNzIyLDY1MCw3NzgsNzIyLDY2Nyw2MTgsNjExLDY2Nyw3OTgsNjY3LDgzNSw3NDgsMjc4LDY2Nyw1NzgsNDQ2LDU1NiwyMjIsNTQ3LDU3OCw1NzUsNTAwLDU1Nyw0NDYsNDQxLDU1Niw1NTYsMjIyLDUwMCw1MDAsNTc2LDUwMCw0NDgsNTU2LDY5MCw1NjksNDgyLDYxNywzOTUsNTQ3LDY0OCw1MjUsNzEzLDc4MSwyMjIsNTQ3LDU1Niw1NDcsNzgxLDY2Nyw2NjcsODY1LDU0Miw3MTksNjY3LDI3OCwyNzgsNTAwLDEwNTcsMTAxMCw4NTQsNTgzLDcyMiw2MzUsNzE5LDY2Nyw2NTYsNjY3LDU0Miw2NzcsNjY3LDkyMyw2MDQsNzE5LDcxOSw1ODMsNjU2LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2MzUsNzYwLDY2Nyw3NDAsNjY3LDkxNyw5MzgsNzkyLDg4NSw2NTYsNzE5LDEwMTAsNzIyLDU1Niw1NzMsNTMxLDM2NSw1ODMsNTU2LDY2OSw0NTgsNTU5LDU1OSw0MzgsNTgzLDY4OCw1NTIsNTU2LDU0Miw1NTYsNTAwLDQ1OCw1MDAsODIzLDUwMCw1NzMsNTIxLDgwMiw4MjMsNjI1LDcxOSw1MjEsNTEwLDc1MCw1NDIsNTU2LDU1Niw1NTYsMzY1LDUxMCw1MDAsMjIyLDI3OCwyMjIsOTA2LDgxMiw1NTYsNDM4LDU1OSw1MDAsNTUyLDc3OCw1NTYsNDg5LDQxMSw5NDQsNzIyLDk0NCw3MjIsOTQ0LDcyMiw2NjcsNTAwLDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDIyMiwyMjIsMjIyLDIyMiwzMzMsMzMzLDMzMyw1NTYsNTU2LDM1MCwxZTMsMWUzLDE4OCwzNTQsMzMzLDMzMyw1MDAsMzMzLDE2NywzNjUsNTU2LDU1NiwxMDk0LDU1Niw4ODUsMzIzLDEwNzMsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcxOSwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw1MDAsNTAwLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwyOTQsMjk0LDMyNCwzMjQsMzE2LDMyOCwzOTgsMjg1XTt0LkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzPXQuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9dC5NeXJpYWRQcm9JdGFsaWNNZXRyaWNzPXQuTXlyaWFkUHJvSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRNZXRyaWNzPXQuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3M9dC5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycz10Lk15cmlhZFByb0JvbGRGYWN0b3JzPXZvaWQgMDt0Lk15cmlhZFByb0JvbGRGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNzI3MDYsLjgwNDc5LC44MzczNCwuOTg4OTQsLjk5NzkzLC45ODk3LC45Mzg4NCwuODYyMDksLjk0MjkyLC45NDI5MiwxLjE2NjYxLDEuMDIwNTgsLjkzNTgyLC45NjY5NCwuOTM1ODIsMS4xOTEzNywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjc4MDc2LC43ODA3NiwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzI4NTEsLjc4OTY2LC45MDgzOCwuODM2MzcsLjgyMzkxLC45NjM3NiwuODAwNjEsLjg2Mjc1LC44NzY4LC45NTQwNywxLjAyNTgsLjczOTAxLC44NTAyMiwuODM2NTUsMS4wMTU2LC45NTU0NiwuOTIxNzksLjg3MTA3LC45MjE3OSwuODIxMTQsLjgwOTYsLjg5NzEzLC45NDQzOCwuOTUzNTMsLjk0MDgzLC45MTkwNSwuOTA0MDYsLjk0NDYsLjk0MjkyLDEuMTg3NzcsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLC45MDA4OCwuOTQ5MzgsLjk3ODk4LC44MTA5MywuOTc1NzEsLjk0OTM4LDEuMDI0LC45NTc3LC45NTkzMywuOTg2MjEsMS4wNDc0LC45NzQ1NSwuOTg5ODEsLjk2NzIsLjk1OTMzLC45NDQ2LC45Nzg5OCwuOTc0MDcsLjk3NjQ2LC43ODAzNiwxLjEwMjA4LC45NTQ0MiwuOTUyOTgsLjk3NTc5LC45MzMyLC45NDAzOSwuOTM4LC44MDY4NywxLjAxMTQ5LC44MDY4NywxLjAyMDU4LC44MDQ3OSwuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsMS4wMTE0OSwxLjAwODcyLC45MDA4OCwuOTE4ODIsMS4wMjEzLC44MzYxLDEuMDIwNTgsLjYyMjk1LC41NDMyNCwuODkwMjIsMS4wODU5NSwxLDEsLjkwMDg4LDEsLjk3NDU1LC45MzU4MiwuOTAwODgsMSwxLjA1Njg2LC44MzYxLC45OTY0MiwuOTk2NDIsLjk5NjQyLC43Mjg1MSwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuODY4LC44MjM5MSwuODAwNjEsLjgwMDYxLC44MDA2MSwuODAwNjEsMS4wMjU4LDEuMDI1OCwxLjAyNTgsMS4wMjU4LC45NzQ4NCwuOTU1NDYsLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwxLjAyMDU4LC45MjE3OSwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjkwNDA2LC44Njk1OCwuOTgyMjUsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjkwMzEsLjgxMDkzLC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjkzOTY5LC45NTkzMywuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwuOTQ0NiwxLjA4NTk1LC45NDQ2LC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTQwMzksLjk3ODk4LC45NDAzOSwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC45NjM3NiwuODQzMTMsLjk3NDg0LC45NzU3MSwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsLjg3NjgsLjk1NzcsMSwxLC45NTQwNywuOTU5MzMsLjk3MDY5LC45NTkzMywxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsLjg4NywxLjAxNTkxLC43MzkwMSwxLjA0NzQsMSwxLC45NzQ1NSwuODM2NTUsLjk4OTgxLDEsMSwuODM2NTUsLjczOTc3LC44MzY1NSwuNzM5MDMsLjg0NjM4LDEuMDMzLC45NTU0NiwuOTU5MzMsMSwxLC45NTU0NiwuOTU5MzMsLjgyNzEsLjk1NDE3LC45NTkzMywuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTM2LC45MTk2NCwuODIxMTQsLjk3NjQ2LDEsMSwuODIxMTQsLjk3NjQ2LC44MDk2LC43ODAzNiwuODA5NiwuNzgwMzYsMSwxLC44MDk2LC43ODAzNiwxLDEsLjg5NzEzLC43NzQ1MiwuODk3MTMsMS4xMDIwOCwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjkwNDA2LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LDEsLjk5NzkzLC45MDgzOCwuOTQ5MzgsLjg2OCwuOTAzMSwuOTIxNzksLjk0NDYsMSwxLC44OTcxMywxLjEwMjA4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDk4OSwuOTM1OCwuOTE5NDUsLjgzMTgxLC43NTI2MSwuODc5OTIsLjgyOTc2LC45NjAzNCwuODM2ODksLjk3MjY4LDEuMDA3OCwuOTA4MzgsLjgzNjM3LC44MDE5LC45MDE1NywuODAwNjEsLjk0NDYsLjk1NDA3LC45MjQzNiwxLjAyNTgsLjg1MDIyLC45NzE1MywxLjAxNTYsLjk1NTQ2LC44OTE5MiwuOTIxNzksLjkyMzYxLC44NzEwNywuOTYzMTgsLjg5NzEzLC45MzcwNCwuOTU2MzgsLjkxOTA1LC45MTcwOSwuOTI3OTYsMS4wMjU4LC45MzcwNCwuOTQ4MzYsMS4wMzczLC45NTkzMywxLjAwNzgsLjk1ODcxLC45NDgzNiwuOTYxNzQsLjkyNjAxLC45NDk4LC45ODYwNywuOTU3NzYsLjk1OTMzLDEuMDU0NTMsMS4wMDc4LC45ODI3NSwuOTMxNCwuOTU2MTcsLjkxNzAxLDEuMDU5OTMsLjk0NDYsLjc4MzY3LC45NTUzLDEsLjg2ODMyLDEuMDEyOCwuOTU4NzEsLjk5Mzk0LC44NzU0OCwuOTYzNjEsLjg2Nzc0LDEuMDA3OCwuOTU4NzEsLjk0NDYsLjk1ODcxLC44Njc3NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45MDQwNiwuOTQwMzksLjk2Njk0LDEsLjg5OTAzLDEsMSwxLC45MzU4MiwuOTM1ODIsLjkzNTgyLDEsLjkwOCwuOTA4LC45MTgsLjk0MjE5LC45NDIxOSwuOTY1NDQsMSwxLjI4NSwxLDEsLjgxMDc5LC44MTA3OSwxLDEsLjc0ODU0LDEsMSwxLDEsLjk5NzkzLDEsMSwxLC42NSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTcxNzMsMSwuODA1MzUsLjc2MTY5LDEuMDIwNTgsMS4wNzMyLDEuMDU0ODYsMSwxLDEuMzA2OTIsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNjE2MSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0JvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfTt0Lk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjYyMjcsLjgwNzc5LC44MTYyNSwuOTcyNzYsLjk3Mjc2LC45NzczMywuOTIyMjIsLjgzMjY2LC45NDI5MiwuOTQyOTIsMS4xNjE0OCwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTczMzcsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcxNTQxLC43NjgxMywuODU1NzYsLjgwNTkxLC44MDcyOSwuOTQyOTksLjc3NTEyLC44MzY1NSwuODY1MjMsLjkyMjIyLC45ODYyMSwuNzE3NDMsLjgxNjk4LC43OTcyNiwuOTg1NTgsLjkyMjIyLC45MDYzNywuODM4MDksLjkwNjM3LC44MDcyOSwuNzY0NjMsLjg2Mjc1LC45MDY5OSwuOTE2MDUsLjkxNTQsLjg1MzA4LC44NTQ1OCwuOTA1MzEsLjk0MjkyLDEuMjEyOTYsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLDEuMTg2MTYsLjk5NjEzLC45MTY3NywuNzgyMTYsLjkxNjc3LC45MDA4MywuOTg3OTYsLjkxMzUsLjkyMTY4LC45NTM4MSwuOTg5ODEsLjk1Mjk4LC45NTM4MSwuOTM0NTksLjkyMTY4LC45MTUxMywuOTIwMDQsLjkxNjc3LC45NTA3NywuNzQ4LDEuMDQ1MDIsLjkxNjc3LC45MjA2MSwuOTQyMzYsLjg5NTQ0LC44OTM2NCwuOSwuODA2ODcsLjg1NzgsLjgwNjg3LDEuMDIwNTgsLjgwNzc5LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuODU3OCwuOTk5NzMsMS4xODYxNiwuOTEzMzksMS4wODA3NCwuODI4OTEsMS4wMjA1OCwuNTU1MDksLjcxNTI2LC44OTAyMiwxLjA4NTk1LDEsMSwxLjE4NjE2LDEsLjk2NzM2LC45MzU4MiwxLjE4NjE2LDEsMS4wNDg2NCwuODI3MTEsLjk5MDQzLC45OTA0MywuOTkwNDMsLjcxNTQxLC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NDUsLjgwNzI5LC43NzUxMiwuNzc1MTIsLjc3NTEyLC43NzUxMiwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk1OTYxLC45MjIyMiwuOTA2MzcsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LDEuMDIwNTgsLjkwMjUxLC45MDY5OSwuOTA2OTksLjkwNjk5LC45MDY5OSwuODU0NTgsLjgzNjU5LC45NDk1MSwuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuODU4MTEsLjc4MjE2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuOTUzODEsLjk1MzgxLC45NTM4MSwuOTUzODEsLjkxMzUsLjkyMTY4LC45MTUxMywuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsMS4wODU5NSwuOTE2NzcsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC44OTM2NCwuOTIzMzIsLjg5MzY0LC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODU1NzYsLjk5NjEzLC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjk0Mjk5LC43Njc4MywuOTU5NjEsLjkxNjc3LC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuODY1MjMsLjkxMzUsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwxLDEsLjkyMjIyLC45MjE2OCwuOTIyMjIsLjkyMTY4LC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuODYwMzYsLjk3MDk2LC43MTc0MywuOTg5ODEsMSwxLC45NTI5OCwuNzk3MjYsLjk1MzgxLDEsMSwuNzk3MjYsLjY4OTQsLjc5NzI2LC43NDMyMSwuODE2OTEsMS4wMDA2LC45MjIyMiwuOTIxNjgsMSwxLC45MjIyMiwuOTIxNjgsLjc5NDY0LC45MjA5OCwuOTIxNjgsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDYzNywuOTE1MTMsLjkwOSwuODc1MTQsLjgwNzI5LC45NTA3NywxLDEsLjgwNzI5LC45NTA3NywuNzY0NjMsLjc0OCwuNzY0NjMsLjc0OCwxLDEsLjc2NDYzLC43NDgsMSwxLC44NjI3NSwuNzI2NTEsLjg2Mjc1LDEuMDQ1MDIsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjg1NDU4LC45MDUzMSwuOSwuOTA1MzEsLjksLjkwNTMxLC45LDEsLjk3Mjc2LC44NTU3NiwuOTk2MTMsLjg0NSwuODU4MTEsLjkwMjUxLC45MTY3NywxLDEsLjg2Mjc1LDEuMDQ1MDIsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4wMDg5OSwxLjMwNjI4LC44NTU3NiwuODAxNzgsLjY2ODYyLC43OTI3LC42OTMyMywuODgxMjcsLjcyNDU5LC44OTcxMSwuOTUzODEsLjg1NTc2LC44MDU5MSwuNzgwNSwuOTQ3MjksLjc3NTEyLC45MDUzMSwuOTIyMjIsLjkwNjM3LC45ODYyMSwuODE2OTgsLjkyNjU1LC45ODU1OCwuOTIyMjIsLjg1MzU5LC45MDYzNywuOTA5NzYsLjgzODA5LC45NDUyMywuODYyNzUsLjgzNTA5LC45MzE1NywuODUzMDgsLjgzMzkyLC45MjM0NiwuOTg2MjEsLjgzNTA5LC45Mjg4NiwuOTEzMjQsLjkyMTY4LC45NTM4MSwuOTA2NDYsLjkyODg2LC45MDU1NywuODY4NDcsLjkwMjc2LC45MTMyNCwuODY4NDIsLjkyMTY4LC45OTUzMSwuOTUzODEsLjkyMjQsLjg1NDA4LC45MjY5OSwuODY4NDcsMS4wMDUxLC45MTUxMywuODA0ODcsLjkzNDgxLDEsLjg4MTU5LDEuMDUyMTQsLjkwNjQ2LC45NzM1NSwuODE1MzksLjg5Mzk4LC44NTkyMywuOTUzODEsLjkwNjQ2LC45MTUxMywuOTA2NDYsLjg1OTIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkxNTQsLjk0MjM2LC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjg1NDU4LC44OTM2NCwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkxNzgyLC45MTc4MiwuOTE3ODIsMSwuODk2LC44OTYsLjg5NiwuOTMzMiwuOTMzMiwuOTU5NzMsMSwxLjI2LDEsMSwuODA0NzksLjgwMTc4LDEsMSwuODU2MzMsMSwxLDEsMSwuOTcyNzYsMSwxLDEsLjY5OCwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTQ1NDIsMSwuNzkxOTksLjc4Njk0LDEuMDIwNTgsMS4wMzQ5MywxLjA1NDg2LDEsMSwxLjIzMDI2LDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMjAwMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn07dC5NeXJpYWRQcm9JdGFsaWNGYWN0b3JzPVsxLjM2ODk4LDEsMSwuNjU1MDcsLjg0OTQzLC44NTYzOSwuODg0NjUsLjg4NDY1LC44NjkzNiwuODgzMDcsLjg2OTQ4LC44NTI4MywuODUyODMsMS4wNjM4MywxLjAyMDU4LC43NTk0NSwuOTIxOSwuNzU5NDUsMS4xNzMzNywuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjc1OTQ1LC43NTk0NSwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNjkwNDYsLjcwOTI2LC44NTE1OCwuNzc4MTIsLjc2ODUyLC44OTU5MSwuNzA0NjYsLjc2MTI1LC44MDA5NCwuODY4MjIsLjgzODY0LC43MjgsLjc3MjEyLC43OTQ3NSwuOTM2MzcsLjg3NTE0LC44NTg4LC43NjAxMywuODU4OCwuNzI0MjEsLjY5ODY2LC43NzU5OCwuODU5OTEsLjgwODExLC44NzgzMiwuNzgxMTIsLjc3NTEyLC44NTYyLDEuMDIyMiwxLjE4NDE3LDEuMDIyMiwxLjI3MDE0LC44OTkwMywxLjE1MDEyLC45Mzg1OSwuOTQzOTksLjg0NiwuOTQzOTksLjgxNDUzLDEuMDE4NiwuOTQyMTksLjk2MDE3LDEuMDMwNzUsMS4wMjE3NSwuOTEyLDEuMDMwNzUsLjk2OTk4LC45NjAxNywuOTM4NTksLjk0Mzk5LC45NDM5OSwuOTU0OTMsLjc0NiwxLjEyNjU4LC45NDU3OCwuOTEsLjk3OSwuODgyLC44ODIsLjgzLC44NTAzNCwuODM1MzcsLjg1MDM0LDEuMDIwNTgsLjcwODY5LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODM1MzcsLjkwMDgzLDEuMTUwMTIsLjkxNjEsLjk0NTY1LC43MzU0MSwxLjAyMDU4LC41MzYwOSwuNjkzNTMsLjc5NTE5LDEuMDg1OTUsMSwxLDEuMTUwMTIsMSwuOTE5NzQsLjc1OTQ1LDEuMTUwMTIsMSwuOTQ0NiwuNzMzNjEsLjkwMDUsLjkwMDUsLjkwMDUsLjYyODY0LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC43NzMsLjc2ODUyLC43MDQ2NiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuODM4NjQsLjgzODY0LC44Mzg2NCwuODM4NjQsLjkwNTYxLC44NzUxNCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwxLjAyMDU4LC44NTc1MSwuODU5OTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjc3NTEyLC43NjAxMywuODgwNzUsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjgwNzUsLjg0NiwuODE0NTMsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgyNDI0LC44MjQyNCwuODI0MjQsLjgyNDI0LC45Mjc4LC45NjAxNywuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LDEuMDg1OTUsLjg1NjIsLjk0NTc4LC45NDU3OCwuOTQ1NzgsLjk0NTc4LC44ODIsLjk0NTc4LC44ODIsLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC44NTE1OCwuOTM4NTksLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjg5NTkxLC44NTQ0LC45MDU2MSwuOTQzOTksLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwuODAwOTQsLjk0MjE5LDEsMSwuODY4MjIsLjk2MDE3LC44NjgyMiwuOTYwMTcsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwuODI0MjQsLjgzODY0LDEuMDMwNzUsLjgzODY0LC44MjQyNCwuODE0MDIsMS4wMjczOCwuNzI4LDEuMDIxNzUsMSwxLC45MTIsLjc5NDc1LDEuMDMwNzUsMSwxLC43OTQ3NSwuODM5MTEsLjc5NDc1LC42NjI2NiwuODA1NTMsMS4wNjY3NiwuODc1MTQsLjk2MDE3LDEsMSwuODc1MTQsLjk2MDE3LC44Njg2NSwuODczOTYsLjk2MDE3LC44NTg4LC45Mzg1OSwuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NjcsLjg0NzU5LC43MjQyMSwuOTU0OTMsMSwxLC43MjQyMSwuOTU0OTMsLjY5ODY2LC43NDYsLjY5ODY2LC43NDYsMSwxLC42OTg2NiwuNzQ2LDEsMSwuNzc1OTgsLjg4NDE3LC43NzU5OCwxLjEyNjU4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC43NzUxMiwuODU2MiwuODMsLjg1NjIsLjgzLC44NTYyLC44MywxLC44ODQ2NSwuODUxNTgsLjkzODU5LC43NzMsLjgwNzUsLjg1NzUxLC44NTYyLDEsMSwuNzc1OTgsMS4xMjY1OCwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTMxMywxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjA4MTA2LDEuMDM5MDEsLjg1MTU4LC43NzAyNSwuNjIyNjQsLjc2NDYsLjY1MzUxLC44NjAyNiwuNjk0NjEsLjg5OTQ3LDEuMDMwNzUsLjg1MTU4LC43NzgxMiwuNzY0NDksLjg4ODM2LC43MDQ2NiwuODU2MiwuODY4MjIsLjg1ODgsLjgzODY0LC43NzIxMiwuODUzMDgsLjkzNjM3LC44NzUxNCwuODIzNTIsLjg1ODgsLjg1NzAxLC43NjAxMywuODkwNTgsLjc3NTk4LC44MTU2LC44MjU2NSwuNzgxMTIsLjc3ODk5LC44OTM4NiwuODM4NjQsLjgxNTYsLjk0ODYsLjkyMzg4LC45NjE4NiwxLjAzMDc1LC45MTEyMywuOTQ4NiwuOTMyOTgsLjg3OCwuOTM5NDIsLjkyMzg4LC44NDU5NiwuOTYxODYsLjk1MTE5LDEuMDMwNzUsLjkyMiwuODg3ODcsLjk1ODI5LC44OCwuOTM1NTksLjkzODU5LC43ODgxNSwuOTM3NTgsMSwuODkyMTcsMS4wMzczNywuOTExMjMsLjkzOTY5LC43NzQ4NywuODU3NjksLjg2Nzk5LDEuMDMwNzUsLjkxMTIzLC45Mzg1OSwuOTExMjMsLjg2Nzk5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjc3NTEyLC44ODIsLjkyMTksMSwuODk5MDMsMSwxLDEsLjg3MzIxLC44NzMyMSwuODczMjEsMSwxLjAyNywxLjAyNywxLjAyNywuODY4NDcsLjg2ODQ3LC43OTEyMSwxLDEuMTI0LDEsMSwuNzM1NzIsLjczNTcyLDEsMSwuODUwMzQsMSwxLDEsMSwuODg0NjUsMSwxLDEsLjY2OSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQ4MjgsMSwuNzQ5NDgsLjc1MTg3LDEuMDIwNTgsLjk4MzkxLDEuMDIxMTksMSwxLDEuMDYyMzMsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTIzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0Lk15cmlhZFByb0l0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9O3QuTXlyaWFkUHJvUmVndWxhckZhY3RvcnM9WzEuMzY4OTgsMSwxLC43NjMwNSwuODI3ODQsLjk0OTM1LC44OTM2NCwuOTIyNDEsLjg5MDczLC45MDcwNiwuOTg0NzIsLjg1MjgzLC44NTI4MywxLjA2NjQsMS4wMjA1OCwuNzQ1MDUsLjkyMTksLjc0NTA1LDEuMjM0NTYsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC43NDUwNSwuNzQ1MDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjczMDAyLC43MjYwMSwuOTE3NTUsLjgxMjYsLjgwMzE0LC45MjIyMiwuNzM3NjQsLjc5NzI2LC44MzA1MSwuOTAyODQsLjg2MDIzLC43NCwuODEyNiwuODQ4NjksLjk2NTE4LC45MTExNSwuODg1OCwuNzk3NjEsLjg4NTgsLjc0NDk4LC43MzkxNCwuODEzNjMsLjg5NTkxLC44MzY1OSwuODk2MzMsLjg1NjA4LC44MTExLC45MDUzMSwxLjAyMjIsMS4yMjczNiwxLjAyMjIsMS4yNzAxNCwuODk5MDMsLjkwMDg4LC44NjY2NywxLjAyMzEsLjg5NiwxLjAxNDExLC45MDA4MywxLjA1MDk5LDEuMDA1MTIsLjk5NzkzLDEuMDUzMjYsMS4wOTM3NywuOTM4LDEuMDYyMjYsMS4wMDExOSwuOTk3OTMsLjk4NzE0LDEuMDIzMSwxLjAxMjMxLC45ODE5NiwuNzkyLDEuMTkxMzcsLjk5MDc0LC45NjIsMS4wMTkxNSwuOTI2LC45NDIsLjg1NiwuODUwMzQsLjkyMDA2LC44NTAzNCwxLjAyMDU4LC42OTA2NywuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMDA2LC45MzMyLC45MDA4OCwuOTE4ODIsLjkzNDg0LC43NTMzOSwxLjAyMDU4LC41Njg2NiwuNTQzMjQsLjc5NTE5LDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NTMyNSwuNzQ1MDUsLjkwMDg4LDEsLjk3MTk4LC43NTMzOSwuOTEwMDksLjkxMDA5LC45MTAwOSwuNjY0NjYsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjc4OCwuODAzMTQsLjczNzY0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC44NjAyMywuODYwMjMsLjg2MDIzLC44NjAyMywuOTI5MTUsLjkxMTE1LC44ODU4LC44ODU4LC44ODU4LC44ODU4LC44ODU4LDEuMDIwNTgsLjg4NTgsLjg5NTkxLC44OTU5MSwuODk1OTEsLjg5NTkxLC44MTExLC43OTYxMSwuODk3MTMsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2OTM2LC44OTYsLjkwMDgzLC45MDA4MywuOTAwODMsLjkwMDgzLC44NDIyNCwuODQyMjQsLjg0MjI0LC44NDIyNCwuOTcyNzYsLjk5NzkzLC45ODcxNCwuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsMS4wODU5NSwuODk4NzYsLjk5MDc0LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45NDIsMS4wMjMxLC45NDIsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC45MTc1NSwuODY2NjcsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjkyMjIyLC45MzM3MiwuOTI5MTUsMS4wMTQxMSwuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsMSwxLC45MDI4NCwuOTk3OTMsLjkwOTc2LC45OTc5MywuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLC44NDIyNCwuODYwMjMsMS4wNTMyNiwuODYwMjMsLjg0MjI0LC44Mjg3MywxLjA3NDY5LC43NCwxLjA5Mzc3LDEsMSwuOTM4LC44NDg2OSwxLjA2MjI2LDEsMSwuODQ4NjksLjgzNzA0LC44NDg2OSwuODE0NDEsLjg1NTg4LDEuMDg5MjcsLjkxMTE1LC45OTc5MywxLDEsLjkxMTE1LC45OTc5MywuOTE4ODcsLjkwOTkxLC45OTc5MywuODg1OCwuOTg3MTQsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODk0LC45MTQzNCwuNzQ0OTgsLjk4MTk2LDEsMSwuNzQ0OTgsLjk4MTk2LC43MzkxNCwuNzkyLC43MzkxNCwuNzkyLDEsMSwuNzM5MTQsLjc5MiwxLDEsLjgxMzYzLC45MDQsLjgxMzYzLDEuMTkxMzcsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuODExMSwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwxLC45MjI0MSwuOTE3NTUsLjg2NjY3LC43ODgsLjg2OTM2LC44ODU4LC44OTg3NiwxLDEsLjgxMzYzLDEuMTkxMzcsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMzg4LDEuMDM5MDEsLjkyMTM4LC43ODEwNSwuNzE1NCwuODYxNjksLjgwNTEzLC45NDAwNywuODI1MjgsLjk4NjEyLDEuMDYyMjYsLjkxNzU1LC44MTI2LC44MTg4NCwuOTI4MTksLjczNzY0LC45MDUzMSwuOTAyODQsLjg4NTgsLjg2MDIzLC44MTI2LC45MTE3MiwuOTY1MTgsLjkxMTE1LC44MzA4OSwuODg1OCwuODc3OTEsLjc5NzYxLC44OTI5NywuODEzNjMsLjg4MTU3LC44OTk5MiwuODU2MDgsLjgxOTkyLC45NDMwNywuODYwMjMsLjg4MTU3LC45NTMwOCwuOTg2OTksLjk5NzkzLDEuMDYyMjYsLjk1ODE3LC45NTMwOCwuOTczNTgsLjkyOCwuOTgwODgsLjk4Njk5LC45Mjc2MSwuOTk3OTMsLjk2MDE3LDEuMDYyMjYsLjk4NiwuOTQ0LC45NTk3OCwuOTM4LC45NjcwNSwuOTg3MTQsLjgwNDQyLC45ODk3MiwxLC44OTc2MiwxLjA0NTUyLC45NTgxNywuOTkwMDcsLjg3MDY0LC45MTg3OSwuODg4ODgsMS4wNjIyNiwuOTU4MTcsLjk4NzE0LC45NTgxNywuODg4ODgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODExMSwuOTQyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC45MzE3MywuOTMxNzMsLjkzMTczLDEsMS4wNjMwNCwxLjA2MzA0LDEuMDY5MDQsLjg5OTAzLC44OTkwMywuODA1NDksMSwxLjE1NiwxLDEsLjc2NTc1LC43NjU3NSwxLDEsLjcyNDU4LDEsMSwxLDEsLjkyMjQxLDEsMSwxLC42MTksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA3MjU3LDEsLjc0NzA1LC43MTExOSwxLjAyMDU4LDEuMDI0LDEuMDIxMTksMSwxLDEuMTUzNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1NjM4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuTXlyaWFkUHJvUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlNlZ29ldWlSZWd1bGFyTWV0cmljcz10LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz10LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXQuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZE1ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9dC5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnM9dC5TZWdvZXVpQm9sZEZhY3RvcnM9dm9pZCAwO3QuU2Vnb2V1aUJvbGRGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTkyOTcsLjk4MjQsMS4wNDAxNiwxLjA2NDk3LDEuMDM0MjQsLjk3NTI5LDEuMTc2NDcsMS4yMzIwMywxLjEwODUsMS4xMDg1LDEuMTY5MzksMS4yMTA3LC45NzU0LDEuMjE0MDgsLjk3NTQsMS41OTU3OCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LC44MTM3OCwuODEzNzgsMS4yMTA3LDEuMjEwNywxLjIxMDcsLjcxNzAzLC45Nzg0NywuOTczNjMsLjg4Nzc2LC44NjQxLDEuMDIwOTYsLjc5Nzk1LC44NTEzMiwuOTE0LDEuMDYwODUsMS4xNDA2LC44MDA3LC44OTg1OCwuODM2OTMsMS4xNDg4OSwxLjA5Mzk4LC45NzQ4OSwuOTIwOTQsLjk3NDg5LC45MDM5OSwuODQwNDEsLjk1OTIzLDEuMDAxMzUsMSwxLjA2NDY3LC45ODI0MywuOTA5OTYsLjk5MzYxLDEuMTA4NSwxLjU2OTQyLDEuMTA4NSwxLjIxMDcsLjc0NjI3LC45NDI4MiwuOTY3NTIsMS4wMTUxOSwuODYzMDQsMS4wMTM1OSwuOTcyNzgsMS4xNTEwMywxLjAxMzU5LC45ODU2MSwxLjAyMjg1LDEuMDIyODUsMS4wMDUyNywxLjAyMjg1LDEuMDMwMiwuOTkwNDEsMS4wMDA4LDEuMDE1MTksMS4wMTM1OSwxLjAyMjU4LC43OTEwNCwxLjE2ODYyLC45OTA0MSwuOTc0NTQsMS4wMjUxMSwuOTkyOTgsLjk2NzUyLC45NTgwMSwuOTQ4NTYsMS4xNjU3OSwuOTQ4NTYsMS4yMTA3LC45ODI0LDEuMDM0MjQsMS4wMzQyNCwxLDEuMDM0MjQsMS4xNjU3OSwuODcyNywxLjM4NzEsMS4xODYyMiwxLjEwODE4LDEuMDQ0NzgsMS4yMTA3LDEuMTg2MjIsLjc1MTU1LC45NDk5NCwxLjI4ODI2LDEuMjE0MDgsMS4yMTQwOCwuOTEwNTYsMSwuOTE1NzIsLjk3NTQsLjY0NjYzLDEuMTgzMjgsMS4yNDg2NiwxLjA0NDc4LDEuMTQxNjksMS4xNTc0OSwxLjE3Mzg5LC43MTcwMywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTM1MDYsLjg2NDEsLjc5Nzk1LC43OTc5NSwuNzk3OTUsLjc5Nzk1LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjAyMDk2LDEuMDkzOTgsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwxLjIxMDcsLjk3NDg5LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkwOTk2LC45MjA5NCwxLjAyNzk4LC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45MzEzNiwuODYzMDQsLjk3Mjc4LC45NzI3OCwuOTcyNzgsLjk3Mjc4LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsLjk3MTIyLC45OTA0MSwxLDEsMSwxLDEsMS4yODgyNiwxLjAwMDgsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk5MDQxLC45Njc1MiwxLjAxNTE5LC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsMS4wMjA5NiwxLjAzMDU3LDEuMDIwOTYsMS4wMzUxNywuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksMSwxLDEuMDYwODUsLjk4NTYxLDEuMDYwODUsMS4wMDg3OSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwxLjE0MDYsMS4wMjI4NSwuOTcxMzgsMS4wODY5MiwuODAwNywxLjAyMjg1LDEsMSwxLjAwNTI3LC44MzY5MywxLjAyMjg1LDEsMSwuODM2OTMsLjk0NTUsLjgzNjkzLC45MDQxOCwuODM2OTMsMS4xMzAwNSwxLjA5Mzk4LC45OTA0MSwxLDEsMS4wOTM5OCwuOTkwNDEsLjk2NjkyLDEuMDkyNTEsLjk5MDQxLC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45Mzk5NCwuOTc5MzEsLjkwMzk5LDEuMDIyNTgsMSwxLC45MDM5OSwxLjAyMjU4LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsMSwxLC45NTkyMywxLjA3MDM0LC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDAxMzUsLjk5MDQxLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLC45MDk5NiwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwxLjA3NzMzLDEuMDM0MjQsLjk3MzYzLC45Njc1MiwuOTM1MDYsLjkzMTM2LC45NzQ4OSwxLjAwMDgsMSwxLC45NTkyMywxLjE2ODYyLDEuMTUxMDMsMS4xNTEwMywxLjAxMTczLDEuMDM5NTksLjc1OTUzLC44MTM3OCwuNzk5MTIsMS4xNTEwMywxLjIxOTk0LC45NTE2MSwuODc4MTUsMS4wMTE0OSwuODE1MjUsLjc2NzYsLjk4MTY3LDEuMDExMzQsMS4wMjU0NiwuODQwOTcsMS4wMzA4OSwxLjE4MTAyLC45NzM2MywuODg3NzYsLjg1MTM0LC45NzgyNiwuNzk3OTUsLjk5MzYxLDEuMDYwODUsLjk3NDg5LDEuMTQwNiwuODk4NTgsMS4wMzg4LDEuMTQ4ODksMS4wOTM5OCwuODYwMzksLjk3NDg5LDEuMDU5NSwuOTIwOTQsLjk0NzkzLC45NTkyMywuOTA5OTYsLjk5MzQ2LC45ODI0MywxLjAyMTEyLC45NTQ5MywxLjE0MDYsLjkwOTk2LDEuMDM1NzQsMS4wMjU5NywxLjAwMDgsMS4xODEwMiwxLjA2NjI4LDEuMDM1NzQsMS4wMTkyLDEuMDE5MzIsMS4wMDg4NiwuOTc1MzEsMS4wMTA2LDEuMDAwOCwxLjEzMTg5LDEuMTgxMDIsMS4wMjI3NywuOTg2ODMsMS4wMDE2LC45OTU2MSwxLjA3MjM3LDEuMDAwOCwuOTA0MzQsLjk5OTIxLC45MzgwMywuODk2NSwxLjIzMDg1LDEuMDY2MjgsMS4wNDk4MywuOTYyNjgsMS4wNDk5LC45ODQzOSwxLjE4MTAyLDEuMDY2MjgsMS4wMDA4LDEuMDY2MjgsLjk4NDM5LC43OTc5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5NDY2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NzI3OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAyMDY1LDEsMSwxLDEsMSwxLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsMSwxLjIxNDA4LC44OTkwMywxLDEsLjc1MTU1LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjczMDQ3LC43MzA0NywxLjIwNjQyLC45MTIxMSwxLjI1NjM1LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4xMjQ1NCwuOTM1MDMsMS4wMzQyNCwxLjE5Njg3LDEuMDM0MjQsMSwxLDEsLjc3MSwxLDEsMS4xNTc0OSwxLjE1NzQ5LDEuMTU3NDksMS4xMDk0OCwuODYyNzksLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjE2ODk3LDEsLjk2MDg1LC45MDEzNywxLjIxMDcsMS4xODQxNiwxLjEzOTczLC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMTcyLDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg4NzQsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjA5MTkzLDEuMDkxOTMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdO3QuU2Vnb2V1aUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4OTQ2LDEuMDM5NTksMS4wNDAxNiwxLjAyODA5LDEuMDM2LC45NzYzOSwxLjEwOTUzLDEuMjMyMDMsMS4xMTE0NCwxLjExMTQ0LDEuMTY5MzksMS4yMTIzNywuOTc1NCwxLjIxMjYxLC45NzU0LDEuNTk3NTQsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsMS4wMzYsLjgxMzc4LC44MTM3OCwxLjIxMjM3LDEuMjEyMzcsMS4yMTIzNywuNzM1NDEsLjk3ODQ3LC45NzM2MywuODk3MjMsLjg3ODk3LDEuMDQyNiwuNzk0MjksLjg1MjkyLC45MTE0OSwxLjA1ODE1LDEuMTQwNiwuNzk2MzEsLjkwMTI4LC44Mzg1MywxLjA0Mzk2LDEuMTA2MTUsLjk3NTUyLC45NDQzNiwuOTc1NTIsLjg4NjQxLC44MDUyNywuOTYwODMsMS4wMDEzNSwxLDEuMDY3NzcsLjk4MTcsLjkxMTQyLC45OTM2MSwxLjExMTQ0LDEuNTcyOTMsMS4xMTE0NCwxLjIxMjM3LC43NDYyNywxLjMxODE4LDEuMDY1ODUsLjk3MDQyLC44MzA1NSwuOTcwNDIsLjkzNTAzLDEuMTI2MSwuOTcwNDIsLjk3OTIyLDEuMTQyMzYsLjk0NTUyLDEuMDEwNTQsMS4xNDIzNiwxLjAyNDcxLC45NzkyMiwuOTQxNjUsLjk3MDQyLC45NzA0MiwxLjAyNzYsLjc4OTI5LDEuMTI2MSwuOTc5MjIsLjk1ODc0LDEuMDIxOTcsLjk4NTA3LC45Njc1MiwuOTcxNjgsLjk1MTA3LDEuMTY1NzksLjk1MTA3LDEuMjEyMzcsMS4wMzk1OSwxLjAzNiwxLjAzNiwxLDEuMDM2LDEuMTY1NzksLjg3MzU3LDEuMzE4MTgsMS4xODc1NCwxLjI2NzgxLDEuMDUzNTYsMS4yMTIzNywxLjE4NjIyLC43OTQ4NywuOTQ5OTQsMS4yOTAwNCwxLjI0MDQ3LDEuMjQwNDcsMS4zMTgxOCwxLC45MTQ4NCwuOTc1NCwxLjMxODE4LDEuMTM0OSwxLjI0ODY2LDEuMDUzNTYsMS4xMzkzNCwxLjE1NTc0LDEuMTczODksLjczNTQxLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NDM4NSwuODc4OTcsLjc5NDI5LC43OTQyOSwuNzk0MjksLjc5NDI5LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjA0MjYsMS4xMDYxNSwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLDEuMjEyMzcsLjk3NTUyLDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsLjkxMTQyLC45NDQzNiwuOTg3MjEsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsLjk2NzA1LC44MzA1NSwuOTM1MDMsLjkzNTAzLC45MzUwMywuOTM1MDMsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwuOTMxMjUsLjk3OTIyLC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsMS4yOTAwNCwuOTQxNjUsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk3OTIyLC45Njc1MiwuOTcwNDIsLjk2NzUyLC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC45NzM2MywxLjA2NTg1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsMS4wNDI2LDEuMDAzMywxLjA0MjYsLjk3MDQyLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwxLDEsMS4wNTgxNSwuOTc5MjIsMS4wNTgxNSwuOTc5MjIsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsMS4xNDA2LDEuMTQyMzYsLjk3NDQxLDEuMDQzMDIsLjc5NjMxLDEuMDE1ODIsMSwxLDEuMDEwNTQsLjgzODUzLDEuMTQyMzYsMSwxLC44Mzg1MywxLjA5MTI1LC44Mzg1MywuOTA0MTgsLjgzODUzLDEuMTk1MDgsMS4xMDYxNSwuOTc5MjIsMSwxLDEuMTA2MTUsLjk3OTIyLDEuMDEwMzQsMS4xMDQ2NiwuOTc5MjIsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjkxNjAyLC45MTk4MSwuODg2NDEsMS4wMjc2LDEsMSwuODg2NDEsMS4wMjc2LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksMSwxLC45NjA4MywxLjA1NDAzLC45NTkyMywxLjE2ODYyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDAxMzUsLjk3OTIyLDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLC45MTE0MiwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwxLjIzMTk5LDEuMDM2LC45NzM2MywxLjA2NTg1LC45NDM4NSwuOTY3MDUsLjk3NTUyLC45NDE2NSwxLDEsLjk2MDgzLDEuMTI2MSwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwuOTUxNjEsMS4yNzEyNiwxLjAwODExLC44MzI4NCwuNzc3MDIsLjk5MTM3LC45NTI1MywxLjAzNDcsLjg2MTQyLDEuMDcyMDUsMS4xNDIzNiwuOTczNjMsLjg5NzIzLC44Njg2OSwxLjA5ODE4LC43OTQyOSwuOTkzNjEsMS4wNTgxNSwuOTc1NTIsMS4xNDA2LC45MDEyOCwxLjA2NjYyLDEuMDQzOTYsMS4xMDYxNSwuODQ5MTgsLjk3NTUyLDEuMDQ2OTQsLjk0NDM2LC45ODAxNSwuOTYwODMsLjkxMTQyLDEuMDAzNTYsLjk4MTcsMS4wMTk0NSwuOTg5OTksMS4xNDA2LC45MTE0MiwxLjA0OTYxLC45ODk4LDEuMDA2MzksMS4xNDIzNiwxLjA3NTE0LDEuMDQ5NjEsLjk5NjA3LDEuMDI4OTcsMS4wMDgsLjk4OTgsLjk1MTM0LDEuMDA2MzksMS4xMTEyMSwxLjE0MjM2LDEuMDA1MTgsLjk3OTgxLDEuMDIxODYsMSwxLjA4NTc4LC45NDE2NSwuOTkzMTQsLjk4Mzg3LC45MzAyOCwuOTMzNzcsMS4zNTEyNSwxLjA3NTE0LDEuMTA2ODcsLjkzNDkxLDEuMDQyMzIsMS4wMDM1MSwxLjE0MjM2LDEuMDc1MTQsLjk0MTY1LDEuMDc1MTQsMS4wMDM1MSwuNzk0MjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTA5NywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTM1MDMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk2NjA5LDEsMSwxLDEsMSwxLDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsMSwxLjIxMjYxLC44OTkwMywxLDEsLjc1MTU1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQzOTQsLjk4NjMzLC45ODYzMywuOTg2MzMsLjcyOTU5LC43Mjk1OSwxLjIwNTAyLC45MTQwNiwxLjI2NTE0LDEuMjIyLDEuMDI5NTYsMS4wMzM3MiwxLjAzMzcyLC45NjAzOSwxLjI0NjMzLDEsMS4wOTEyNSwuOTMzMjcsMS4wMzMzNiwxLjE2NTQxLDEuMDM2LDEsMSwxLC43NzEsMSwxLDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsLjg2MzY0LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjIyNCwxLDEsMS4xNjc5OCwxLC45NjA4NSwuOTAwNjgsMS4yMTIzNywxLjE4NDE2LDEuMTM5MDQsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjEzMzksMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODc3NSwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTMyNjksMS4xMzI2OSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9O3QuU2Vnb2V1aUl0YWxpY0ZhY3RvcnM9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjE0NzYzLDEuMDUzNjUsMS4wNjIzNCwuOTY5MjcsLjkyNTg2LDEuMTUzNzMsMS4xODQxNCwuOTEzNDksLjkxMzQ5LDEuMDc0MDMsMS4xNzMwOCwuNzgzODMsMS4yMDA4OCwuNzgzODMsMS40MjUzMSwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MzgzLC43ODM4MywxLjE3MzA4LDEuMTczMDgsMS4xNzMwOCwuNzczNDksLjk0NTY1LC45NDcyOSwuODU5NDQsLjg4NTA2LC45ODU4LC43NDgxNywuODAwMTYsLjg4NDQ5LC45ODAzOSwuOTU3ODIsLjY5MjM4LC44OTg5OCwuODMyMzEsLjk4MTgzLDEuMDM5ODksLjk2OTI0LC44NjIzNywuOTY5MjQsLjgwNTk1LC43NDUyNCwuODYwOTEsLjk1NDAyLC45NDE0MywuOTg0NDgsLjg4NTgsLjgzMDg5LC45MzI4NSwxLjA5NDksMS4zOTAxNiwxLjA5NDksMS40NTk5NCwuNzQ2MjcsMS4wNDgzOSwuOTc0NTQsLjk3NDU0LC44NzIwNywuOTc0NTQsLjg3NTMzLDEuMDYxNTEsLjk3NDU0LDEuMDAxNzYsMS4xNjQ4NCwxLjA4MTMyLC45ODA0NywxLjE2NDg0LDEuMDI5ODksMS4wMTA1NCwuOTYyMjUsLjk3NDU0LC45NzQ1NCwxLjA2NTk4LC43OTAwNCwxLjE2MzQ0LDEuMDAzNTEsLjk0NjI5LC45OTczLC45MTAxNiwuOTY3NzcsLjkwNDMsLjkxMDgyLC45MjQ4MSwuOTEwODIsMS4xNzMwOCwuOTU3NDgsLjk2OTI3LC45NjkyNywxLC45NjkyNywuOTI0ODEsLjgwNTk3LDEuMDQ4MzksMS4yMzM5MywxLjE3ODEsLjkyNDUsMS4xNzMwOCwxLjIwODA4LC42MzIxOCwuOTQyNjEsMS4yNDgyMiwxLjA5OTcxLDEuMDk5NzEsMS4wNDgzOSwxLC44NTI3MywuNzgwMzIsMS4wNDgzOSwxLjA5OTcxLDEuMjIzMjYsLjkyNDUsMS4wOTgzNiwxLjEzNTI1LDEuMTUyMjIsLjcwNDI0LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC44NTQ5OCwuODg1MDYsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjc0ODE3LC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTg1OCwxLjAzOTg5LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzMwOCwuOTY5MjQsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjk1NDAyLC44MzA4OSwuODYyMzcsLjg4NDA5LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45MjkxNiwuODcyMDcsLjg3NTMzLC44NzUzMywuODc1MzMsLjg3NTMzLC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45MzE0NiwuOTM4NTQsMS4wMTA1NCwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsLjk2MjI1LDEuMjQ4MjIsLjg3NjEsMS4wMDM1MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwuOTY3NzcsLjk3NDU0LC45Njc3NywuOTQ3MjksLjk3NDU0LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC45ODU4LC45NTM5MSwuOTg1OCwuOTc0NTQsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC44ODQ0OSwuOTc0NTQsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LDEsMSwuOTgwMzksMS4wMDE3NiwuOTgwMzksMS4wMDE3NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsMS4xNjQ4NCwuOTU3ODIsLjkzMTQ2LC44NDQyMSwxLjEyNzYxLC42OTIzOCwxLjA4MTMyLDEsMSwuOTgwNDcsLjgzMjMxLDEuMTY0ODQsMSwxLC44NDcyMywxLjA0ODYxLC44NDcyMywuNzg3NTUsLjgzMjMxLDEuMjM3MzYsMS4wMzk4OSwxLjAxMDU0LDEsMSwxLjAzOTg5LDEuMDEwNTQsLjk4NTcsMS4wMzg0OSwxLjAxMDU0LC45NjkyNCwuOTYyMjUsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45MjM4MywuOTAxNzEsLjgwNTk1LDEuMDY1OTgsMSwxLC44MDU5NSwxLjA2NTk4LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsMSwxLC44NjA5MSwxLjAyNzU5LC44NTc3MSwxLjE2MzQ0LC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45NTQwMiwxLjAwMzUxLC45ODQ0OCwuOTk3MywuODMwODksLjk2Nzc3LC44MzA4OSwuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLC45MzI4NSwuOTA0MywxLjMxODY4LC45NjkyNywuOTQ3MjksLjk3NDU0LC44NTQ5OCwuOTI5MTYsLjk2OTI0LC44NzYxLDEsMSwuODYwOTEsMS4xNjM0NCwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwuODE5NjUsLjgxOTY1LC45NDcyOSwuNzgwMzIsLjcxMDIyLC45MDg4MywuODQxNzEsLjk5ODc3LC43NzU5NiwxLjA1NzM0LDEuMiwuOTQ3MjksLjg1OTQ0LC44Mjc5MSwuOTYwNywuNzQ4MTcsLjkzMjg1LC45ODAzOSwuOTY5MjQsLjk1NzgyLC44OTg5OCwuOTgzMTYsLjk4MTgzLDEuMDM5ODksLjc4NjE0LC45NjkyNCwuOTc2NDIsLjg2MjM3LC44NjA3NSwuODYwOTEsLjgzMDg5LC45MDA4MiwuODg1OCwuOTcyOTYsMS4wMTI4NCwuOTU3ODIsLjgzMDg5LDEuMDk3NiwxLjA0LDEuMDMzNDIsMS4yLDEuMDY3NSwxLjA5NzYsLjk4MjA1LDEuMDM4MDksMS4wNTA5NywxLjA0LC45NTM2NCwxLjAzMzQyLDEuMDU0MDEsMS4yLDEuMDIxNDgsMS4wMTE5LDEuMDQ3MjQsMS4wMTI3LDEuMDI3MzIsLjk2MjI1LC44OTY1LC45Nzc4MywuOTM1NzQsLjk0ODE4LDEuMzA2NzksMS4wNjc1LDEuMTE4MjYsLjk5ODIxLDEuMDU1NywxLjAzMjYsMS4yLDEuMDY3NSwuOTYyMjUsMS4wNjc1LDEuMDMyNiwuNzQ4MTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMzc1NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc1MzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk4NzA1LDEsMSwxLDEsMSwxLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LC45NDk0NSwxLjEyMzE3LDEuMTIzMTcsMS4xMjMxNywuNjc2MDMsLjY3NjAzLDEuMTU2MjEsLjczNTg0LDEuMjExOTEsMS4yMjEzNSwxLjA2NDgzLC45NDg2OCwuOTQ4NjgsLjk1OTk2LDEuMjQ2MzMsMSwxLjA3NDk3LC44NzcwOSwuOTY5MjcsMS4wMTQ3MywuOTY5MjcsMSwxLDEsLjc3Mjk1LDEsMSwxLjA5ODM2LDEuMDk4MzYsMS4wOTgzNiwxLjAxNTIyLC44NjMyMSwuOTQ0MzQsLjg2NDksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NDM4LDEuMTczMDgsMS4xODQxNiwxLjE0NTg5LC42OTgyNSwuOTc2MjIsMS45Njc5MSwxLjI0ODIyLDEuMjQ4MjIsMS4xNzMwOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE3OTg0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDc0MiwxLjEwNzQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXTt0LlNlZ29ldWlJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfTt0LlNlZ29ldWlSZWd1bGFyRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4NTk0LDEuMDIyODUsMS4xMDQ1NCwxLjA2MjM0LC45NjkyNywuOTIwMzcsMS4xOTk4NSwxLjIwNDYsLjkwNjE2LC45MDYxNiwxLjA3MTUyLDEuMTcxNCwuNzgwMzIsMS4yMDA4OCwuNzgwMzIsMS40MDI0NiwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MDMyLC43ODAzMiwxLjE3MTQsMS4xNzE0LDEuMTcxNCwuODA1OTcsLjk0MDg0LC45NjcwNiwuODU5NDQsLjg1NzM0LC45NzA5MywuNzU4NDIsLjc5OTM2LC44ODE5OCwuOTgzMSwuOTU3ODIsLjcxMzg3LC44Njk2OSwuODQ2MzYsMS4wNzc5NiwxLjAzNTg0LC45NjkyNCwuODM5NjgsLjk2OTI0LC44MjgyNiwuNzk2NDksLjg1NzcxLC45NTEzMiwuOTMxMTksLjk4OTY1LC44ODQzMywuODI4NywuOTMzNjUsMS4wODYxMiwxLjM2MzgsMS4wODYxMiwxLjQ1Nzg2LC43NDYyNywuODA0OTksLjkxNDg0LDEuMDU3MDcsLjkyMzgzLDEuMDU4ODIsLjk0MDMsMS4xMjY1NCwxLjA1ODgyLDEuMDE3NTYsMS4wOTAxMSwxLjA5MDExLC45OTQxNCwxLjA5MDExLDEuMDM0LDEuMDE3NTYsMS4wNTM1NiwxLjA1NzA3LDEuMDU4ODIsMS4wNDM5OSwuODQ4NjMsMS4yMTk2OCwxLjAxNzU2LC45NTgwMSwxLjAwMDY4LC45MTc5NywuOTY3NzcsLjkwNDMsLjkwMzUxLC45MjEwNSwuOTAzNTEsMS4xNzE0LC44NTMzNywuOTY5MjcsLjk2OTI3LC45OTkxMiwuOTY5MjcsLjkyMTA1LC44MDU5NywxLjI0MzQsMS4yMDgwOCwxLjA1OTM3LC45MDk1NywxLjE3MTQsMS4yMDgwOCwuNzUxNTUsLjk0MjYxLDEuMjQ2NDQsMS4wOTk3MSwxLjA5OTcxLC44NDc1MSwxLC44NTI3MywuNzgwMzIsLjYxNTg0LDEuMDU0MjUsMS4xNzkxNCwuOTA5NTcsMS4wODY2NSwxLjExNTkzLDEuMTQxNjksLjczMzgxLC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC44NjAzNSwuODU3MzQsLjc1ODQyLC43NTg0MiwuNzU4NDIsLjc1ODQyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTcwOTMsMS4wMzU4NCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTcxNCwuOTY5MjQsLjk1MTMyLC45NTEzMiwuOTUxMzIsLjk1MTMyLC44Mjg3LC44Mzk2OCwuODkwNDksLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkzNTc1LC45MjM4MywuOTQwMywuOTQwMywuOTQwMywuOTQwMywuODcxNywuODcxNywuODcxNywuODcxNywxLjAwNTI3LDEuMDE3NTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMjQ2NDQsLjk1OTIzLDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LDEuMDE3NTYsLjk2Nzc3LDEuMDU3MDcsLjk2Nzc3LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuOTY3MDYsLjkxNDg0LC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjk3MDkzLDEuMDk2OSwuOTcwOTMsMS4wNTg4MiwuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLDEsMSwuOTgzMSwxLjAxNzU2LC45ODMxLDEuMDE3NTYsLjk1NzgyLC44NzE3LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLDEuMDkwMTEsLjk1NzgyLC44NzE3LC44NDc4NCwxLjExNTUxLC43MTM4NywxLjA5MDExLDEsMSwuOTk0MTQsLjg0NjM2LDEuMDkwMTEsMSwxLC44NDYzNiwxLjA1MzYsLjg0NjM2LC45NDI5OCwuODQ2MzYsMS4yMzI5NywxLjAzNTg0LDEuMDE3NTYsMSwxLDEuMDM1ODQsMS4wMTc1NiwxLjAwMzIzLDEuMDM0NDQsMS4wMTc1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTMwNjYsLjk4MjkzLC44MjgyNiwxLjA0Mzk5LDEsMSwuODI4MjYsMS4wNDM5OSwuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLDEsMSwuODU3NzEsMS4xNzMxOCwuODU3NzEsMS4yMTk2OCwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTg5NjUsMS4wMDA2OCwuODI4NywuOTY3NzcsLjgyODcsLjkzMzY1LC45MDQzLC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsMS4wODU3MSwuOTY5MjcsLjk2NzA2LC45MTQ4NCwuODYwMzUsLjkzNTc1LC45NjkyNCwuOTU5MjMsMSwxLC44NTc3MSwxLjIxOTY4LDEuMTE0MzcsMS4xMTQzNywuOTMxMDksLjkxMjAyLC42MDQxMSwuODQxNjQsLjU1NTcyLDEuMDExNzMsLjk3MzYxLC44MTgxOCwuODE4MTgsLjk2NjM1LC43ODAzMiwuNzI3MjcsLjkyMzY2LC45ODYwMSwxLjAzNDA1LC43Nzk2OCwxLjA5Nzk5LDEuMiwuOTY3MDYsLjg1OTQ0LC44NTYzOCwuOTY0OTEsLjc1ODQyLC45MzM2NSwuOTgzMSwuOTY5MjQsLjk1NzgyLC44Njk2OSwuOTQxNTIsMS4wNzc5NiwxLjAzNTg0LC43ODQzNywuOTY5MjQsLjk4NzE1LC44Mzk2OCwuODM0OTEsLjg1NzcxLC44Mjg3LC45NDQ5MiwuODg0MzMsLjkyODcsMS4wMDk4LC45NTc4MiwuODI4NywxLjA2MjUsLjk4MjQ4LDEuMDM0MjQsMS4yLDEuMDEwNzEsMS4wNjI1LC45NTI0NiwxLjAzODA5LDEuMDQ5MTIsLjk4MjQ4LDEuMDAyMjEsMS4wMzQyNCwxLjA1NDQzLDEuMiwxLjA0Nzg1LC45OTYwOSwxLjAwMTY5LDEuMDUxNzYsLjk5MzQ2LDEuMDUzNTYsLjkwODcsMS4wMzAwNCwuOTU1NDIsLjkzMTE3LDEuMjMzNjIsMS4wMTA3MSwxLjA3ODMxLDEuMDI1MTIsMS4wNTIwNSwxLjAzNTAyLDEuMiwxLjAxMDcxLDEuMDUzNTYsMS4wMTA3MSwxLjAzNTAyLC43NTg0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzE5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQwMjEsMSwxLDEsMSwxLDEsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjAzMDc3LDEuMTMxOTYsMS4xMzE5NiwxLjEzMTk2LC42NzQyOCwuNjc0MjgsMS4xNjAzOSwuNzMyOTEsMS4yMDk5NiwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3Nzk2LC45NjkyNywxLjAxNTE4LC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMTA1MzksMS4xMDUzOSwxLjExMzU4LDEuMDY5NjcsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NTA3LDEuMTcxNCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2OTcsMS4yNDgyMiwxLjI0ODIyLDEuMTcyMzgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODA4MywxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA5MzgsMS4xMDkzOCwxLDEsMSwxLjA1NDI1LDEuMDk5NzEsMS4wOTk3MSwxLjA5OTcxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV07dC5TZWdvZXVpUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdEV2YWx1YXRvcj10LlBvc3RTY3JpcHRDb21waWxlcj10LlBERkZ1bmN0aW9uRmFjdG9yeT12b2lkIDA7dC5pc1BERkZ1bmN0aW9uPWZ1bmN0aW9uIGlzUERGRnVuY3Rpb24oZSl7bGV0IHQ7aWYoZSBpbnN0YW5jZW9mIHIuRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBzLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9O2EoMik7YSgxNDApO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDE2MCk7dmFyIHI9YSgxNTEpLG49YSgxNDUpLGk9YSgyMDkpLHM9YSgxNTIpLG89YSgyMTApO3QuUERGRnVuY3Rpb25GYWN0b3J5PWNsYXNzIFBERkZ1bmN0aW9uRmFjdG9yeXtjb25zdHJ1Y3RvcihlKXtsZXR7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDphPSEwfT1lO3RoaXMueHJlZj10O3RoaXMuaXNFdmFsU3VwcG9ydGVkPSExIT09YX1jcmVhdGUoZSl7Y29uc3QgdD10aGlzLmdldENhY2hlZChlKTtpZih0KXJldHVybiB0O2NvbnN0IGE9UERGRnVuY3Rpb24ucGFyc2Uoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbjplIGluc3RhbmNlb2Ygci5SZWY/dGhpcy54cmVmLmZldGNoKGUpOmV9KTt0aGlzLl9jYWNoZShlLGEpO3JldHVybiBhfWNyZWF0ZUZyb21BcnJheShlKXtjb25zdCB0PXRoaXMuZ2V0Q2FjaGVkKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3QgYT1QREZGdW5jdGlvbi5wYXJzZUFycmF5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm5PYmo6ZSBpbnN0YW5jZW9mIHIuUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7dGhpcy5fY2FjaGUoZSxhKTtyZXR1cm4gYX1nZXRDYWNoZWQoZSl7bGV0IHQ7ZSBpbnN0YW5jZW9mIHIuUmVmP3Q9ZTplIGluc3RhbmNlb2Ygci5EaWN0P3Q9ZS5vYmpJZDplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYodD1lLmRpY3Q/Lm9iaklkKTtpZih0KXtjb25zdCBlPXRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5nZXRCeVJlZih0KTtpZihlKXJldHVybiBlfXJldHVybiBudWxsfV9jYWNoZShlLHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcignUERGRnVuY3Rpb25GYWN0b3J5Ll9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRGdW5jdGlvbiIgYXJndW1lbnQuJyk7bGV0IGE7ZSBpbnN0YW5jZW9mIHIuUmVmP2E9ZTplIGluc3RhbmNlb2Ygci5EaWN0P2E9ZS5vYmpJZDplIGluc3RhbmNlb2Ygcy5CYXNlU3RyZWFtJiYoYT1lLmRpY3Q/Lm9iaklkKTthJiZ0aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0KG51bGwsYSx0KX1nZXQgX2xvY2FsRnVuY3Rpb25DYWNoZSgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJfbG9jYWxGdW5jdGlvbkNhY2hlIixuZXcgby5Mb2NhbEZ1bmN0aW9uQ2FjaGUpfX07ZnVuY3Rpb24gdG9OdW1iZXJBcnJheShlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gbnVsbDtjb25zdCB0PWUubGVuZ3RoO2ZvcihsZXQgYT0wO2E8dDthKyspaWYoIm51bWJlciIhPXR5cGVvZiBlW2FdKXtjb25zdCBhPW5ldyBBcnJheSh0KTtmb3IobGV0IHI9MDtyPHQ7cisrKWFbcl09K2Vbcl07cmV0dXJuIGF9cmV0dXJuIGV9Y2xhc3MgUERGRnVuY3Rpb257c3RhdGljIGdldFNhbXBsZUFycmF5KGUsdCxhLHIpe2xldCBuLGkscz0xO2ZvcihuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXMqPWVbbl07cyo9dDtjb25zdCBvPW5ldyBBcnJheShzKTtsZXQgYz0wLGw9MDtjb25zdCBoPTEvKDIqKmEtMSksdT1yLmdldEJ5dGVzKChzKmErNykvOCk7bGV0IGQ9MDtmb3Iobj0wO248cztuKyspe2Zvcig7YzxhOyl7bDw8PTg7bHw9dVtkKytdO2MrPTh9Yy09YTtvW25dPShsPj5jKSpoO2wmPSgxPDxjKS0xfXJldHVybiBvfXN0YXRpYyBwYXJzZShlKXtsZXR7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDphLGZuOnJ9PWU7Y29uc3QgaT1yLmRpY3R8fHI7c3dpdGNoKGkuZ2V0KCJGdW5jdGlvblR5cGUiKSl7Y2FzZSAwOnJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6YSxmbjpyLGRpY3Q6aX0pO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOmEsZGljdDppfSk7Y2FzZSAzOnJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6YSxkaWN0Oml9KTtjYXNlIDQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDphLGZuOnIsZGljdDppfSl9dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZSBvZiBmdW5jdGlvbiIpfXN0YXRpYyBwYXJzZUFycmF5KGUpe2xldHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOmEsZm5PYmo6cn09ZTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4gdGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDphLGZuOnJ9KTtjb25zdCBuPVtdO2Zvcihjb25zdCBlIG9mIHIpbi5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6YSxmbjp0LmZldGNoSWZSZWYoZSl9KSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxhLHIpe2ZvcihsZXQgaT0wLHM9bi5sZW5ndGg7aTxzO2krKyluW2ldKGUsdCxhLHIraSl9fXN0YXRpYyBjb25zdHJ1Y3RTYW1wbGVkKGUpe2xldHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOmEsZm46cixkaWN0Oml9PWU7ZnVuY3Rpb24gdG9NdWx0aUFycmF5KGUpe2NvbnN0IHQ9ZS5sZW5ndGgsYT1bXTtsZXQgcj0wO2ZvcihsZXQgbj0wO248dDtuKz0yKWFbcisrXT1bZVtuXSxlW24rMV1dO3JldHVybiBhfWZ1bmN0aW9uIGludGVycG9sYXRlKGUsdCxhLHIsbil7cmV0dXJuIHIrKG4tcikvKGEtdCkqKGUtdCl9bGV0IHM9dG9OdW1iZXJBcnJheShpLmdldEFycmF5KCJEb21haW4iKSksbz10b051bWJlckFycmF5KGkuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFzfHwhbyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gZG9tYWluIG9yIHJhbmdlIik7Y29uc3QgYz1zLmxlbmd0aC8yLGw9by5sZW5ndGgvMjtzPXRvTXVsdGlBcnJheShzKTtvPXRvTXVsdGlBcnJheShvKTtjb25zdCBoPXRvTnVtYmVyQXJyYXkoaS5nZXRBcnJheSgiU2l6ZSIpKSx1PWkuZ2V0KCJCaXRzUGVyU2FtcGxlIiksZD1pLmdldCgiT3JkZXIiKXx8MTsxIT09ZCYmKDAsbi5pbmZvKSgiTm8gc3VwcG9ydCBmb3IgY3ViaWMgc3BsaW5lIGludGVycG9sYXRpb246ICIrZCk7bGV0IGY9dG9OdW1iZXJBcnJheShpLmdldEFycmF5KCJFbmNvZGUiKSk7aWYoZilmPXRvTXVsdGlBcnJheShmKTtlbHNle2Y9W107Zm9yKGxldCBlPTA7ZTxjOysrZSlmLnB1c2goWzAsaFtlXS0xXSl9bGV0IGc9dG9OdW1iZXJBcnJheShpLmdldEFycmF5KCJEZWNvZGUiKSk7Zz1nP3RvTXVsdGlBcnJheShnKTpvO2NvbnN0IHA9dGhpcy5nZXRTYW1wbGVBcnJheShoLGwsdSxyKTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U2FtcGxlZEZuKGUsdCxhLHIpe2NvbnN0IG49MTw8YyxpPW5ldyBGbG9hdDY0QXJyYXkobiksdT1uZXcgVWludDMyQXJyYXkobik7bGV0IGQsbTtmb3IobT0wO208bjttKyspaVttXT0xO2xldCBiPWwseT0xO2ZvcihkPTA7ZDxjOysrZCl7Y29uc3QgYT1zW2RdWzBdLHI9c1tkXVsxXTtsZXQgbz1pbnRlcnBvbGF0ZShNYXRoLm1pbihNYXRoLm1heChlW3QrZF0sYSksciksYSxyLGZbZF1bMF0sZltkXVsxXSk7Y29uc3QgYz1oW2RdO289TWF0aC5taW4oTWF0aC5tYXgobywwKSxjLTEpO2NvbnN0IGw9bzxjLTE/TWF0aC5mbG9vcihvKTpvLTEsZz1sKzEtbyxwPW8tbCx3PWwqYixTPXcrYjtmb3IobT0wO208bjttKyspaWYobSZ5KXtpW21dKj1wO3VbbV0rPVN9ZWxzZXtpW21dKj1nO3VbbV0rPXd9Yio9Yzt5PDw9MX1mb3IobT0wO208bDsrK20pe2xldCBlPTA7Zm9yKGQ9MDtkPG47ZCsrKWUrPXBbdVtkXSttXSppW2RdO2U9aW50ZXJwb2xhdGUoZSwwLDEsZ1ttXVswXSxnW21dWzFdKTthW3IrbV09TWF0aC5taW4oTWF0aC5tYXgoZSxvW21dWzBdKSxvW21dWzFdKX19fXN0YXRpYyBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoZSl7bGV0e3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6YSxkaWN0OnJ9PWU7Y29uc3Qgbj10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIkMwIikpfHxbMF0saT10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIkMxIikpfHxbMV0scz1yLmdldCgiTiIpLG89W107Zm9yKGxldCBlPTAsdD1uLmxlbmd0aDtlPHQ7KytlKW8ucHVzaChpW2VdLW5bZV0pO2NvbnN0IGM9by5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKGUsdCxhLHIpe2NvbnN0IGk9MT09PXM/ZVt0XTplW3RdKipzO2ZvcihsZXQgZT0wO2U8YzsrK2UpYVtyK2VdPW5bZV0raSpvW2VdfX1zdGF0aWMgY29uc3RydWN0U3RpY2hlZChlKXtsZXR7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDphLGRpY3Q6cn09ZTtjb25zdCBpPXRvTnVtYmVyQXJyYXkoci5nZXRBcnJheSgiRG9tYWluIikpO2lmKCFpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT09aS5sZW5ndGgvMil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGRvbWFpbiBmb3Igc3RpY2hlZCBmdW5jdGlvbiIpO2NvbnN0IHM9W107Zm9yKGNvbnN0IGUgb2Ygci5nZXQoIkZ1bmN0aW9ucyIpKXMucHVzaCh0aGlzLnBhcnNlKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOmEsZm46dC5mZXRjaElmUmVmKGUpfSkpO2NvbnN0IG89dG9OdW1iZXJBcnJheShyLmdldEFycmF5KCJCb3VuZHMiKSksYz10b051bWJlckFycmF5KHIuZ2V0QXJyYXkoIkVuY29kZSIpKSxsPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGbihlLHQsYSxyKXtjb25zdCBuPWZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGcm9tSVJDbGlwKGUsdCxhKXtlPmE/ZT1hOmU8dCYmKGU9dCk7cmV0dXJuIGV9KGVbdF0saVswXSxpWzFdKSxoPW8ubGVuZ3RoO2xldCB1O2Zvcih1PTA7dTxoJiYhKG48b1t1XSk7Kyt1KTtsZXQgZD1pWzBdO3U+MCYmKGQ9b1t1LTFdKTtsZXQgZj1pWzFdO3U8by5sZW5ndGgmJihmPW9bdV0pO2NvbnN0IGc9Y1syKnVdLHA9Y1syKnUrMV07bFswXT1kPT09Zj9nOmcrKG4tZCkqKHAtZykvKGYtZCk7c1t1XShsLDAsYSxyKX19c3RhdGljIGNvbnN0cnVjdFBvc3RTY3JpcHQoZSl7bGV0e3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6YSxmbjpyLGRpY3Q6c309ZTtjb25zdCBvPXRvTnVtYmVyQXJyYXkocy5nZXRBcnJheSgiRG9tYWluIikpLGM9dG9OdW1iZXJBcnJheShzLmdldEFycmF5KCJSYW5nZSIpKTtpZighbyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFjKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTtjb25zdCBsPW5ldyBpLlBvc3RTY3JpcHRMZXhlcihyKSxoPW5ldyBpLlBvc3RTY3JpcHRQYXJzZXIobCkucGFyc2UoKTtpZihhJiZuLkZlYXR1cmVUZXN0LmlzRXZhbFN1cHBvcnRlZCl7Y29uc3QgZT0obmV3IFBvc3RTY3JpcHRDb21waWxlcikuY29tcGlsZShoLG8sYyk7aWYoZSlyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIsZSl9KDAsbi5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTtjb25zdCB1PWMubGVuZ3RoPj4xLGQ9by5sZW5ndGg+PjEsZj1uZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihoKSxnPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHA9ODE5Mjtjb25zdCBtPW5ldyBGbG9hdDMyQXJyYXkoZCk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFBvc3RTY3JpcHRGbihlLHQsYSxyKXtsZXQgbixpLHM9IiI7Y29uc3Qgbz1tO2ZvcihuPTA7bjxkO24rKyl7aT1lW3Qrbl07b1tuXT1pO3MrPWkrIl8ifWNvbnN0IGw9Z1tzXTtpZih2b2lkIDAhPT1sKXthLnNldChsLHIpO3JldHVybn1jb25zdCBoPW5ldyBGbG9hdDMyQXJyYXkodSksYj1mLmV4ZWN1dGUobykseT1iLmxlbmd0aC11O2ZvcihuPTA7bjx1O24rKyl7aT1iW3krbl07bGV0IGU9Y1syKm5dO2lmKGk8ZSlpPWU7ZWxzZXtlPWNbMipuKzFdO2k+ZSYmKGk9ZSl9aFtuXT1pfWlmKHA+MCl7cC0tO2dbc109aH1hLnNldChoLHIpfX19Y2xhc3MgUG9zdFNjcmlwdFN0YWNre3N0YXRpYyBNQVhfU1RBQ0tfU0laRT0xMDA7Y29uc3RydWN0b3IoZSl7dGhpcy5zdGFjaz1lP0FycmF5LmZyb20oZSk6W119cHVzaChlKXtpZih0aGlzLnN0YWNrLmxlbmd0aD49UG9zdFNjcmlwdFN0YWNrLk1BWF9TVEFDS19TSVpFKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy4iKTt0aGlzLnN0YWNrLnB1c2goZSl9cG9wKCl7aWYodGhpcy5zdGFjay5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy4iKTtyZXR1cm4gdGhpcy5zdGFjay5wb3AoKX1jb3B5KGUpe2lmKHRoaXMuc3RhY2subGVuZ3RoK2U+PVBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Y29uc3QgdD10aGlzLnN0YWNrO2ZvcihsZXQgYT10Lmxlbmd0aC1lLHI9ZS0xO3I+PTA7ci0tLGErKyl0LnB1c2godFthXSl9aW5kZXgoZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9cm9sbChlLHQpe2NvbnN0IGE9dGhpcy5zdGFjayxyPWEubGVuZ3RoLWUsbj1hLmxlbmd0aC0xLGk9cisodC1NYXRoLmZsb29yKHQvZSkqZSk7Zm9yKGxldCBlPXIsdD1uO2U8dDtlKyssdC0tKXtjb25zdCByPWFbZV07YVtlXT1hW3RdO2FbdF09cn1mb3IobGV0IGU9cix0PWktMTtlPHQ7ZSsrLHQtLSl7Y29uc3Qgcj1hW2VdO2FbZV09YVt0XTthW3RdPXJ9Zm9yKGxldCBlPWksdD1uO2U8dDtlKyssdC0tKXtjb25zdCByPWFbZV07YVtlXT1hW3RdO2FbdF09cn19fWNsYXNzIFBvc3RTY3JpcHRFdmFsdWF0b3J7Y29uc3RydWN0b3IoZSl7dGhpcy5vcGVyYXRvcnM9ZX1leGVjdXRlKGUpe2NvbnN0IHQ9bmV3IFBvc3RTY3JpcHRTdGFjayhlKTtsZXQgYT0wO2NvbnN0IHI9dGhpcy5vcGVyYXRvcnMsaT1yLmxlbmd0aDtsZXQgcyxvLGM7Zm9yKDthPGk7KXtzPXJbYSsrXTtpZigibnVtYmVyIiE9dHlwZW9mIHMpc3dpdGNoKHMpe2Nhc2UianoiOmM9dC5wb3AoKTtvPXQucG9wKCk7b3x8KGE9Yyk7YnJlYWs7Y2FzZSJqIjpvPXQucG9wKCk7YT1vO2JyZWFrO2Nhc2UiYWJzIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguYWJzKG8pKTticmVhaztjYXNlImFkZCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobytjKTticmVhaztjYXNlImFuZCI6Yz10LnBvcCgpO289dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBvJiYiYm9vbGVhbiI9PXR5cGVvZiBjP3QucHVzaChvJiZjKTp0LnB1c2gobyZjKTticmVhaztjYXNlImF0YW4iOmM9dC5wb3AoKTtvPXQucG9wKCk7bz1NYXRoLmF0YW4yKG8sYykvTWF0aC5QSSoxODA7bzwwJiYobys9MzYwKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJiaXRzaGlmdCI6Yz10LnBvcCgpO289dC5wb3AoKTtvPjA/dC5wdXNoKG88PGMpOnQucHVzaChvPj5jKTticmVhaztjYXNlImNlaWxpbmciOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jZWlsKG8pKTticmVhaztjYXNlImNvcHkiOm89dC5wb3AoKTt0LmNvcHkobyk7YnJlYWs7Y2FzZSJjb3MiOm89dC5wb3AoKTt0LnB1c2goTWF0aC5jb3MobyUzNjAvMTgwKk1hdGguUEkpKTticmVhaztjYXNlImN2aSI6bz0wfHQucG9wKCk7dC5wdXNoKG8pO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2goby9jKTticmVhaztjYXNlImR1cCI6dC5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG89PT1jKTticmVhaztjYXNlImV4Y2giOnQucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvKipjKTticmVhaztjYXNlImZhbHNlIjp0LnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOm89dC5wb3AoKTt0LnB1c2goTWF0aC5mbG9vcihvKSk7YnJlYWs7Y2FzZSJnZSI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobz49Yyk7YnJlYWs7Y2FzZSJndCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnB1c2gobz5jKTticmVhaztjYXNlImlkaXYiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8vY3wwKTticmVhaztjYXNlImluZGV4IjpvPXQucG9wKCk7dC5pbmRleChvKTticmVhaztjYXNlImxlIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPD1jKTticmVhaztjYXNlImxuIjpvPXQucG9wKCk7dC5wdXNoKE1hdGgubG9nKG8pKTticmVhaztjYXNlImxvZyI6bz10LnBvcCgpO3QucHVzaChNYXRoLmxvZzEwKG8pKTticmVhaztjYXNlImx0IjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvPGMpO2JyZWFrO2Nhc2UibW9kIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvJWMpO2JyZWFrO2Nhc2UibXVsIjpjPXQucG9wKCk7bz10LnBvcCgpO3QucHVzaChvKmMpO2JyZWFrO2Nhc2UibmUiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8hPT1jKTticmVhaztjYXNlIm5lZyI6bz10LnBvcCgpO3QucHVzaCgtbyk7YnJlYWs7Y2FzZSJub3QiOm89dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBvP3QucHVzaCghbyk6dC5wdXNoKH5vKTticmVhaztjYXNlIm9yIjpjPXQucG9wKCk7bz10LnBvcCgpOyJib29sZWFuIj09dHlwZW9mIG8mJiJib29sZWFuIj09dHlwZW9mIGM/dC5wdXNoKG98fGMpOnQucHVzaChvfGMpO2JyZWFrO2Nhc2UicG9wIjp0LnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6Yz10LnBvcCgpO289dC5wb3AoKTt0LnJvbGwobyxjKTticmVhaztjYXNlInJvdW5kIjpvPXQucG9wKCk7dC5wdXNoKE1hdGgucm91bmQobykpO2JyZWFrO2Nhc2Uic2luIjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc2luKG8lMzYwLzE4MCpNYXRoLlBJKSk7YnJlYWs7Y2FzZSJzcXJ0IjpvPXQucG9wKCk7dC5wdXNoKE1hdGguc3FydChvKSk7YnJlYWs7Y2FzZSJzdWIiOmM9dC5wb3AoKTtvPXQucG9wKCk7dC5wdXNoKG8tYyk7YnJlYWs7Y2FzZSJ0cnVlIjp0LnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOm89dC5wb3AoKTtvPW88MD9NYXRoLmNlaWwobyk6TWF0aC5mbG9vcihvKTt0LnB1c2gobyk7YnJlYWs7Y2FzZSJ4b3IiOmM9dC5wb3AoKTtvPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gobyE9PWMpOnQucHVzaChvXmMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYFVua25vd24gb3BlcmF0b3IgJHtzfWApfWVsc2UgdC5wdXNoKHMpfXJldHVybiB0LnN0YWNrfX10LlBvc3RTY3JpcHRFdmFsdWF0b3I9UG9zdFNjcmlwdEV2YWx1YXRvcjtjbGFzcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUpe3RoaXMudHlwZT1lfXZpc2l0KGUpeygwLG4udW5yZWFjaGFibGUpKCJhYnN0cmFjdCBtZXRob2QiKX19Y2xhc3MgQXN0QXJndW1lbnQgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigiYXJncyIpO3RoaXMuaW5kZXg9ZTt0aGlzLm1pbj10O3RoaXMubWF4PWF9dmlzaXQoZSl7ZS52aXNpdEFyZ3VtZW50KHRoaXMpfX1jbGFzcyBBc3RMaXRlcmFsIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigibGl0ZXJhbCIpO3RoaXMubnVtYmVyPWU7dGhpcy5taW49ZTt0aGlzLm1heD1lfXZpc2l0KGUpe2UudmlzaXRMaXRlcmFsKHRoaXMpfX1jbGFzcyBBc3RCaW5hcnlPcGVyYXRpb24gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhLHIsbil7c3VwZXIoImJpbmFyeSIpO3RoaXMub3A9ZTt0aGlzLmFyZzE9dDt0aGlzLmFyZzI9YTt0aGlzLm1pbj1yO3RoaXMubWF4PW59dmlzaXQoZSl7ZS52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKX19Y2xhc3MgQXN0TWluIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJtYXgiKTt0aGlzLmFyZz1lO3RoaXMubWluPWUubWluO3RoaXMubWF4PXR9dmlzaXQoZSl7ZS52aXNpdE1pbih0aGlzKX19Y2xhc3MgQXN0VmFyaWFibGUgZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcigidmFyIik7dGhpcy5pbmRleD1lO3RoaXMubWluPXQ7dGhpcy5tYXg9YX12aXNpdChlKXtlLnZpc2l0VmFyaWFibGUodGhpcyl9fWNsYXNzIEFzdFZhcmlhYmxlRGVmaW5pdGlvbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiZGVmaW5pdGlvbiIpO3RoaXMudmFyaWFibGU9ZTt0aGlzLmFyZz10fXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZURlZmluaXRpb24odGhpcyl9fWNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcntjb25zdHJ1Y3Rvcigpe3RoaXMucGFydHM9W119dmlzaXRBcmd1bWVudChlKXt0aGlzLnBhcnRzLnB1c2goIk1hdGgubWF4KCIsZS5taW4sIiwgTWF0aC5taW4oIixlLm1heCwiLCBzcmNbc3JjT2Zmc2V0ICsgIixlLmluZGV4LCJdKSkiKX12aXNpdFZhcmlhYmxlKGUpe3RoaXMucGFydHMucHVzaCgidiIsZS5pbmRleCl9dmlzaXRMaXRlcmFsKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9dmlzaXRCaW5hcnlPcGVyYXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCIoIik7ZS5hcmcxLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiICIsZS5vcCwiICIpO2UuYXJnMi52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIikiKX12aXNpdFZhcmlhYmxlRGVmaW5pdGlvbihlKXt0aGlzLnBhcnRzLnB1c2goInZhciAiKTtlLnZhcmlhYmxlLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiID0gIik7ZS5hcmcudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCI7Iil9dmlzaXRNaW4oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKTtlLmFyZy52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMucGFydHMuam9pbigiIil9fWZ1bmN0aW9uIGJ1aWxkQWRkT3BlcmF0aW9uKGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBBc3RMaXRlcmFsKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIGJ1aWxkTXVsT3BlcmF0aW9uKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fWNvbnN0IGE9TWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLHI9TWF0aC5tYXgoZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpO3JldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCIqIixlLHQsYSxyKX1mdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IEFzdExpdGVyYWwoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCItIixlLHQsZS5taW4tdC5tYXgsZS5tYXgtdC5taW4pfWZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyBBc3RMaXRlcmFsKHQpOmUubWF4PD10P2U6bmV3IEFzdE1pbihlLHQpfWNsYXNzIFBvc3RTY3JpcHRDb21waWxlcntjb21waWxlKGUsdCxhKXtjb25zdCByPVtdLG49W10saT10Lmxlbmd0aD4+MSxzPWEubGVuZ3RoPj4xO2xldCBvLGMsbCxoLHUsZCxmLGcscD0wO2ZvcihsZXQgZT0wO2U8aTtlKyspci5wdXNoKG5ldyBBc3RBcmd1bWVudChlLHRbMiplXSx0WzIqZSsxXSkpO2ZvcihsZXQgdD0wLGE9ZS5sZW5ndGg7dDxhO3QrKyl7Zz1lW3RdO2lmKCJudW1iZXIiIT10eXBlb2YgZylzd2l0Y2goZyl7Y2FzZSJhZGQiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRBZGRPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJjdnIiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJzdWIiOmlmKHIubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1yLnBvcCgpO2w9ci5wb3AoKTtyLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obCxoKSk7YnJlYWs7Y2FzZSJleGNoIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO3U9ci5wb3AoKTtkPXIucG9wKCk7ci5wdXNoKHUsZCk7YnJlYWs7Y2FzZSJwb3AiOmlmKHIubGVuZ3RoPDEpcmV0dXJuIG51bGw7ci5wb3AoKTticmVhaztjYXNlImluZGV4IjppZihyLmxlbmd0aDwxKXJldHVybiBudWxsO2w9ci5wb3AoKTtpZigibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7bz1sLm51bWJlcjtpZihvPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxyLmxlbmd0aDxvKXJldHVybiBudWxsO3U9cltyLmxlbmd0aC1vLTFdO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtby0xXT1mO3IucHVzaChmKTtuLnB1c2gobmV3IEFzdFZhcmlhYmxlRGVmaW5pdGlvbihmLHUpKTticmVhaztjYXNlImR1cCI6aWYoci5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibnVtYmVyIj09dHlwZW9mIGVbdCsxXSYmImd0Ij09PWVbdCsyXSYmZVt0KzNdPT09dCs3JiYianoiPT09ZVt0KzRdJiYicG9wIj09PWVbdCs1XSYmZVt0KzZdPT09ZVt0KzFdKXtsPXIucG9wKCk7ci5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKGwsZVt0KzFdKSk7dCs9NjticmVha311PXIuYXQoLTEpO2lmKCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe3IucHVzaCh1KTticmVha31mPW5ldyBBc3RWYXJpYWJsZShwKyssdS5taW4sdS5tYXgpO3Jbci5sZW5ndGgtMV09ZjtyLnB1c2goZik7bi5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24oZix1KSk7YnJlYWs7Y2FzZSJyb2xsIjppZihyLmxlbmd0aDwyKXJldHVybiBudWxsO2g9ci5wb3AoKTtsPXIucG9wKCk7aWYoImxpdGVyYWwiIT09aC50eXBlfHwibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7Yz1oLm51bWJlcjtvPWwubnVtYmVyO2lmKG88PTB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKXx8ci5sZW5ndGg8bylyZXR1cm4gbnVsbDtjPShjJW8rbyklbztpZigwPT09YylicmVhaztyLnB1c2goLi4uci5zcGxpY2Uoci5sZW5ndGgtbyxvLWMpKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfWVsc2Ugci5wdXNoKG5ldyBBc3RMaXRlcmFsKGcpKX1pZihyLmxlbmd0aCE9PXMpcmV0dXJuIG51bGw7Y29uc3QgbT1bXTtmb3IoY29uc3QgZSBvZiBuKXtjb25zdCB0PW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7ZS52aXNpdCh0KTttLnB1c2godC50b1N0cmluZygpKX1mb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9cltlXSxuPW5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3I7dC52aXNpdChuKTtjb25zdCBpPWFbMiplXSxzPWFbMiplKzFdLG89W24udG9TdHJpbmcoKV07aWYoaT50Lm1pbil7by51bnNoaWZ0KCJNYXRoLm1heCgiLGksIiwgIik7by5wdXNoKCIpIil9aWYoczx0Lm1heCl7by51bnNoaWZ0KCJNYXRoLm1pbigiLHMsIiwgIik7by5wdXNoKCIpIil9by51bnNoaWZ0KCJkZXN0W2Rlc3RPZmZzZXQgKyAiLGUsIl0gPSAiKTtvLnB1c2goIjsiKTttLnB1c2goby5qb2luKCIiKSl9cmV0dXJuIG0uam9pbigiXG4iKX19dC5Qb3N0U2NyaXB0Q29tcGlsZXI9UG9zdFNjcmlwdENvbXBpbGVyfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUG9zdFNjcmlwdFBhcnNlcj10LlBvc3RTY3JpcHRMZXhlcj12b2lkIDA7YSgxNDApO3ZhciByPWEoMTQ1KSxuPWEoMTUxKSxpPWEoMTUwKTt0LlBvc3RTY3JpcHRQYXJzZXI9Y2xhc3MgUG9zdFNjcmlwdFBhcnNlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmxleGVyPWU7dGhpcy5vcGVyYXRvcnM9W107dGhpcy50b2tlbj1udWxsO3RoaXMucHJldj1udWxsfW5leHRUb2tlbigpe3RoaXMucHJldj10aGlzLnRva2VuO3RoaXMudG9rZW49dGhpcy5sZXhlci5nZXRUb2tlbigpfWFjY2VwdChlKXtpZih0aGlzLnRva2VuLnR5cGU9PT1lKXt0aGlzLm5leHRUb2tlbigpO3JldHVybiEwfXJldHVybiExfWV4cGVjdChlKXtpZih0aGlzLmFjY2VwdChlKSlyZXR1cm4hMDt0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICR7dGhpcy50b2tlbi50eXBlfSBleHBlY3RlZCAke2V9LmApfXBhcnNlKCl7dGhpcy5uZXh0VG9rZW4oKTt0aGlzLmV4cGVjdChzLkxCUkFDRSk7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qocy5SQlJBQ0UpO3JldHVybiB0aGlzLm9wZXJhdG9yc31wYXJzZUJsb2NrKCl7Zm9yKDs7KWlmKHRoaXMuYWNjZXB0KHMuTlVNQkVSKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZSBpZih0aGlzLmFjY2VwdChzLk9QRVJBVE9SKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZXtpZighdGhpcy5hY2NlcHQocy5MQlJBQ0UpKXJldHVybjt0aGlzLnBhcnNlQ29uZGl0aW9uKCl9fXBhcnNlQ29uZGl0aW9uKCl7Y29uc3QgZT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnMucHVzaChudWxsLG51bGwpO3RoaXMucGFyc2VCbG9jaygpO3RoaXMuZXhwZWN0KHMuUkJSQUNFKTtpZih0aGlzLmFjY2VwdChzLklGKSl7dGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoO3RoaXMub3BlcmF0b3JzW2UrMV09Imp6In1lbHNle2lmKCF0aGlzLmFjY2VwdChzLkxCUkFDRSkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3tjb25zdCB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7Y29uc3QgYT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qocy5SQlJBQ0UpO3RoaXMuZXhwZWN0KHMuSUZFTFNFKTt0aGlzLm9wZXJhdG9yc1t0XT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnNbdCsxXT0iaiI7dGhpcy5vcGVyYXRvcnNbZV09YTt0aGlzLm9wZXJhdG9yc1tlKzFdPSJqeiJ9fX19O2NvbnN0IHM9e0xCUkFDRTowLFJCUkFDRToxLE5VTUJFUjoyLE9QRVJBVE9SOjMsSUY6NCxJRkVMU0U6NX07Y2xhc3MgUG9zdFNjcmlwdFRva2Vue3N0YXRpYyBnZXQgb3BDYWNoZSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJvcENhY2hlIixPYmplY3QuY3JlYXRlKG51bGwpKX1jb25zdHJ1Y3RvcihlLHQpe3RoaXMudHlwZT1lO3RoaXMudmFsdWU9dH1zdGF0aWMgZ2V0T3BlcmF0b3IoZSl7cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5vcENhY2hlW2VdfHw9bmV3IFBvc3RTY3JpcHRUb2tlbihzLk9QRVJBVE9SLGUpfXN0YXRpYyBnZXQgTEJSQUNFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IFBvc3RTY3JpcHRUb2tlbihzLkxCUkFDRSwieyIpKX1zdGF0aWMgZ2V0IFJCUkFDRSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5SQlJBQ0UsIn0iKSl9c3RhdGljIGdldCBJRigpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJJRiIsbmV3IFBvc3RTY3JpcHRUb2tlbihzLklGLCJJRiIpKX1zdGF0aWMgZ2V0IElGRUxTRSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBQb3N0U2NyaXB0VG9rZW4ocy5JRkVMU0UsIklGRUxTRSIpKX19dC5Qb3N0U2NyaXB0TGV4ZXI9Y2xhc3MgUG9zdFNjcmlwdExleGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RyZWFtPWU7dGhpcy5uZXh0Q2hhcigpO3RoaXMuc3RyQnVmPVtdfW5leHRDaGFyKCl7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfWdldFRva2VuKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYodDwwKXJldHVybiBuLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxpLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IFBvc3RTY3JpcHRUb2tlbihzLk5VTUJFUix0aGlzLmdldE51bWJlcigpKTtjYXNlIDEyMzp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5MQlJBQ0U7Y2FzZSAxMjU6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBQb3N0U2NyaXB0VG9rZW4uUkJSQUNFfWNvbnN0IGE9dGhpcy5zdHJCdWY7YS5sZW5ndGg9MDthWzBdPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7Zm9yKDsodD10aGlzLm5leHRDaGFyKCkpPj0wJiYodD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyKTspYS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO2NvbnN0IHI9YS5qb2luKCIiKTtzd2l0Y2goci50b0xvd2VyQ2FzZSgpKXtjYXNlImlmIjpyZXR1cm4gUG9zdFNjcmlwdFRva2VuLklGO2Nhc2UiaWZlbHNlIjpyZXR1cm4gUG9zdFNjcmlwdFRva2VuLklGRUxTRTtkZWZhdWx0OnJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Iocil9fWdldE51bWJlcigpe2xldCBlPXRoaXMuY3VycmVudENoYXI7Y29uc3QgdD10aGlzLnN0ckJ1Zjt0Lmxlbmd0aD0wO3RbMF09U3RyaW5nLmZyb21DaGFyQ29kZShlKTtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTAmJihlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lKTspdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnN0IGE9cGFyc2VGbG9hdCh0LmpvaW4oIiIpKTtpZihpc05hTihhKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICR7YX1gKTtyZXR1cm4gYX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuUmVnaW9uYWxJbWFnZUNhY2hlPXQuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGU9dC5Mb2NhbEltYWdlQ2FjaGU9dC5Mb2NhbEdTdGF0ZUNhY2hlPXQuTG9jYWxGdW5jdGlvbkNhY2hlPXQuTG9jYWxDb2xvclNwYWNlQ2FjaGU9dC5HbG9iYWxJbWFnZUNhY2hlPXZvaWQgMDthKDIpO2EoMTE2KTthKDEyNyk7YSgxMjkpO2EoMTMyKTthKDEzNCk7YSgxMzYpO2EoMTM4KTt2YXIgcj1hKDE0NSksbj1hKDE1MSk7Y2xhc3MgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PUJhc2VMb2NhbENhY2hlJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUxvY2FsQ2FjaGUuIik7dGhpcy5fb25seVJlZnM9ITA9PT1lPy5vbmx5UmVmcztpZighdGhpcy5fb25seVJlZnMpe3RoaXMuX25hbWVSZWZNYXA9bmV3IE1hcDt0aGlzLl9pbWFnZU1hcD1uZXcgTWFwfXRoaXMuX2ltYWdlQ2FjaGU9bmV3IG4uUmVmU2V0Q2FjaGV9Z2V0QnlOYW1lKGUpe3RoaXMuX29ubHlSZWZzJiYoMCxyLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBnZXRCeU5hbWVgIG1ldGhvZC4iKTtjb25zdCB0PXRoaXMuX25hbWVSZWZNYXAuZ2V0KGUpO3JldHVybiB0P3RoaXMuZ2V0QnlSZWYodCk6dGhpcy5faW1hZ2VNYXAuZ2V0KGUpfHxudWxsfWdldEJ5UmVmKGUpe3JldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChlKXx8bnVsbH1zZXQoZSx0LGEpeygwLHIudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNldGAgY2FsbGVkLiIpfX10LkxvY2FsSW1hZ2VDYWNoZT1jbGFzcyBMb2NhbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbEltYWdlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgIm5hbWUiIGFyZ3VtZW50LicpO2lmKHQpe2lmKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpKXJldHVybjt0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpO3RoaXMuX2ltYWdlQ2FjaGUucHV0KHQsYSl9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLGEpfX07dC5Mb2NhbENvbG9yU3BhY2VDYWNoZT1jbGFzcyBMb2NhbENvbG9yU3BhY2VDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle3NldCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigic3RyaW5nIiE9dHlwZW9mIGUmJiF0KXRocm93IG5ldyBFcnJvcignTG9jYWxDb2xvclNwYWNlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgIm5hbWUiIGFuZC9vciAicmVmIiBhcmd1bWVudC4nKTtpZih0KXtpZih0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSlyZXR1cm47bnVsbCE9PWUmJnRoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxhKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsYSl9fTt0LkxvY2FsRnVuY3Rpb25DYWNoZT1jbGFzcyBMb2NhbEZ1bmN0aW9uQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx0PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCFlKXRocm93IG5ldyBFcnJvcignTG9jYWxGdW5jdGlvbkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dChlLHQpfX07dC5Mb2NhbEdTdGF0ZUNhY2hlPWNsYXNzIExvY2FsR1N0YXRlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbEdTdGF0ZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhcmd1bWVudC4nKTtpZih0KXtpZih0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSlyZXR1cm47dGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KTt0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGEpfWVsc2UgdGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxhKX19O3QuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGU9Y2xhc3MgTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx0PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCFlKXRocm93IG5ldyBFcnJvcignTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXMoZSl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KGUsdCl9fTt0LlJlZ2lvbmFsSW1hZ2VDYWNoZT1jbGFzcyBSZWdpb25hbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx0PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCFlKXRocm93IG5ldyBFcnJvcignUmVnaW9uYWxJbWFnZUNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dChlLHQpfX07Y2xhc3MgR2xvYmFsSW1hZ2VDYWNoZXtzdGF0aWMgTlVNX1BBR0VTX1RIUkVTSE9MRD0yO3N0YXRpYyBNSU5fSU1BR0VTX1RPX0NBQ0hFPTEwO3N0YXRpYyBNQVhfQllURV9TSVpFPTUqci5NQVhfSU1BR0VfU0laRV9UT19DQUNIRTtjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlZkNhY2hlPW5ldyBuLlJlZlNldENhY2hlO3RoaXMuX2ltYWdlQ2FjaGU9bmV3IG4uUmVmU2V0Q2FjaGV9Z2V0IF9ieXRlU2l6ZSgpe2xldCBlPTA7Zm9yKGNvbnN0IHQgb2YgdGhpcy5faW1hZ2VDYWNoZSllKz10LmJ5dGVTaXplO3JldHVybiBlfWdldCBfY2FjaGVMaW1pdFJlYWNoZWQoKXtyZXR1cm4hKHRoaXMuX2ltYWdlQ2FjaGUuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk1JTl9JTUFHRVNfVE9fQ0FDSEUpJiYhKHRoaXMuX2J5dGVTaXplPEdsb2JhbEltYWdlQ2FjaGUuTUFYX0JZVEVfU0laRSl9c2hvdWxkQ2FjaGUoZSx0KXtsZXQgYT10aGlzLl9yZWZDYWNoZS5nZXQoZSk7aWYoIWEpe2E9bmV3IFNldDt0aGlzLl9yZWZDYWNoZS5wdXQoZSxhKX1hLmFkZCh0KTtyZXR1cm4hKGEuc2l6ZTxHbG9iYWxJbWFnZUNhY2hlLk5VTV9QQUdFU19USFJFU0hPTEQpJiYhKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhlKSYmdGhpcy5fY2FjaGVMaW1pdFJlYWNoZWQpfWFkZEJ5dGVTaXplKGUsdCl7Y29uc3QgYT10aGlzLl9pbWFnZUNhY2hlLmdldChlKTthJiYoYS5ieXRlU2l6ZXx8KGEuYnl0ZVNpemU9dCkpfWdldERhdGEoZSx0KXtjb25zdCBhPXRoaXMuX3JlZkNhY2hlLmdldChlKTtpZighYSlyZXR1cm4gbnVsbDtpZihhLnNpemU8R2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKXJldHVybiBudWxsO2NvbnN0IHI9dGhpcy5faW1hZ2VDYWNoZS5nZXQoZSk7aWYoIXIpcmV0dXJuIG51bGw7YS5hZGQodCk7cmV0dXJuIHJ9c2V0RGF0YShlLHQpe2lmKCF0aGlzLl9yZWZDYWNoZS5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKCdHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBleHBlY3RlZCAic2hvdWxkQ2FjaGUiIHRvIGhhdmUgYmVlbiBjYWxsZWQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXMoZSl8fCh0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZD8oMCxyLndhcm4pKCJHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBjYWNoZSBsaW1pdCByZWFjaGVkLiIpOnRoaXMuX2ltYWdlQ2FjaGUucHV0KGUsdCkpfWNsZWFyKCl7YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5fcmVmQ2FjaGUuY2xlYXIoKTt0aGlzLl9pbWFnZUNhY2hlLmNsZWFyKCl9fXQuR2xvYmFsSW1hZ2VDYWNoZT1HbG9iYWxJbWFnZUNhY2hlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuYmlkaT1mdW5jdGlvbiBiaWRpKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sYz0hMDtjb25zdCBsPWUubGVuZ3RoO2lmKDA9PT1sfHxhKXJldHVybiBjcmVhdGVCaWRpVGV4dChlLGMsYSk7cy5sZW5ndGg9bDtvLmxlbmd0aD1sO2xldCBoLHUsZD0wO2ZvcihoPTA7aDxsOysraCl7c1toXT1lLmNoYXJBdChoKTtjb25zdCB0PWUuY2hhckNvZGVBdChoKTtsZXQgYT0iTCI7aWYodDw9MjU1KWE9blt0XTtlbHNlIGlmKDE0MjQ8PXQmJnQ8PTE1MjQpYT0iUiI7ZWxzZSBpZigxNTM2PD10JiZ0PD0xNzkxKXthPWlbMjU1JnRdO2F8fCgwLHIud2FybikoIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIit0LnRvU3RyaW5nKDE2KSl9ZWxzZSgxNzkyPD10JiZ0PD0yMjIwfHw2NDMzNjw9dCYmdDw9NjUwMjN8fDY1MTM2PD10JiZ0PD02NTI3OSkmJihhPSJBTCIpOyJSIiE9PWEmJiJBTCIhPT1hJiYiQU4iIT09YXx8ZCsrO29baF09YX1pZigwPT09ZCl7Yz0hMDtyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxjKX1pZigtMT09PXQpaWYoZC9sPC4zJiZsPjQpe2M9ITA7dD0wfWVsc2V7Yz0hMTt0PTF9Y29uc3QgZj1bXTtmb3IoaD0wO2g8bDsrK2gpZltoXT10O2NvbnN0IGc9aXNPZGQodCk/IlIiOiJMIixwPWcsbT1wO2xldCBiLHk9cDtmb3IoaD0wO2g8bDsrK2gpIk5TTSI9PT1vW2hdP29baF09eTp5PW9baF07eT1wO2ZvcihoPTA7aDxsOysraCl7Yj1vW2hdOyJFTiI9PT1iP29baF09IkFMIj09PXk/IkFOIjoiRU4iOiJSIiE9PWImJiJMIiE9PWImJiJBTCIhPT1ifHwoeT1iKX1mb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiQUwiPT09YiYmKG9baF09IlIiKX1mb3IoaD0xO2g8bC0xOysraCl7IkVTIj09PW9baF0mJiJFTiI9PT1vW2gtMV0mJiJFTiI9PT1vW2grMV0mJihvW2hdPSJFTiIpOyJDUyIhPT1vW2hdfHwiRU4iIT09b1toLTFdJiYiQU4iIT09b1toLTFdfHxvW2grMV0hPT1vW2gtMV18fChvW2hdPW9baC0xXSl9Zm9yKGg9MDtoPGw7KytoKWlmKCJFTiI9PT1vW2hdKXtmb3IobGV0IGU9aC0xO2U+PTAmJiJFVCI9PT1vW2VdOy0tZSlvW2VdPSJFTiI7Zm9yKGxldCBlPWgrMTtlPGwmJiJFVCI9PT1vW2VdOysrZSlvW2VdPSJFTiJ9Zm9yKGg9MDtoPGw7KytoKXtiPW9baF07IldTIiE9PWImJiJFUyIhPT1iJiYiRVQiIT09YiYmIkNTIiE9PWJ8fChvW2hdPSJPTiIpfXk9cDtmb3IoaD0wO2g8bDsrK2gpe2I9b1toXTsiRU4iPT09Yj9vW2hdPSJMIj09PXk/IkwiOiJFTiI6IlIiIT09YiYmIkwiIT09Ynx8KHk9Yil9Zm9yKGg9MDtoPGw7KytoKWlmKCJPTiI9PT1vW2hdKXtjb25zdCBlPWZpbmRVbmVxdWFsKG8saCsxLCJPTiIpO2xldCB0PXA7aD4wJiYodD1vW2gtMV0pO2xldCBhPW07ZSsxPGwmJihhPW9bZSsxXSk7IkwiIT09dCYmKHQ9IlIiKTsiTCIhPT1hJiYoYT0iUiIpO3Q9PT1hJiZzZXRWYWx1ZXMobyxoLGUsdCk7aD1lLTF9Zm9yKGg9MDtoPGw7KytoKSJPTiI9PT1vW2hdJiYob1toXT1nKTtmb3IoaD0wO2g8bDsrK2gpe2I9b1toXTtpc0V2ZW4oZltoXSk/IlIiPT09Yj9mW2hdKz0xOiJBTiIhPT1iJiYiRU4iIT09Ynx8KGZbaF0rPTIpOiJMIiE9PWImJiJBTiIhPT1iJiYiRU4iIT09Ynx8KGZbaF0rPTEpfWxldCB3LFM9LTEseD05OTtmb3IoaD0wLHU9Zi5sZW5ndGg7aDx1OysraCl7dz1mW2hdO1M8dyYmKFM9dyk7eD53JiZpc09kZCh3KSYmKHg9dyl9Zm9yKHc9Uzt3Pj14Oy0tdyl7bGV0IGU9LTE7Zm9yKGg9MCx1PWYubGVuZ3RoO2g8dTsrK2gpaWYoZltoXTx3KXtpZihlPj0wKXtyZXZlcnNlVmFsdWVzKHMsZSxoKTtlPS0xfX1lbHNlIGU8MCYmKGU9aCk7ZT49MCYmcmV2ZXJzZVZhbHVlcyhzLGUsZi5sZW5ndGgpfWZvcihoPTAsdT1zLmxlbmd0aDtoPHU7KytoKXtjb25zdCBlPXNbaF07IjwiIT09ZSYmIj4iIT09ZXx8KHNbaF09IiIpfXJldHVybiBjcmVhdGVCaWRpVGV4dChzLmpvaW4oIiIpLGMpfTt2YXIgcj1hKDE0NSk7Y29uc3Qgbj1bIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIlMiLCJCIiwiUyIsIldTIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQiIsIkIiLCJTIiwiV1MiLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkVTIiwiQ1MiLCJFUyIsIkNTIiwiQ1MiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkNTIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJDUyIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJPTiIsIk9OIiwiQk4iLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVOIiwiRU4iLCJPTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJFTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIl0saT1bIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIk9OIiwiT04iLCJBTCIsIkVUIiwiRVQiLCJBTCIsIkNTIiwiQUwiLCJPTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiRVQiLCJBTiIsIkFOIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiXTtmdW5jdGlvbiBpc09kZChlKXtyZXR1cm4gMCE9KDEmZSl9ZnVuY3Rpb24gaXNFdmVuKGUpe3JldHVybiAwPT0oMSZlKX1mdW5jdGlvbiBmaW5kVW5lcXVhbChlLHQsYSl7bGV0IHIsbjtmb3Iocj10LG49ZS5sZW5ndGg7cjxuOysrcilpZihlW3JdIT09YSlyZXR1cm4gcjtyZXR1cm4gcn1mdW5jdGlvbiBzZXRWYWx1ZXMoZSx0LGEscil7Zm9yKGxldCBuPXQ7bjxhOysrbillW25dPXJ9ZnVuY3Rpb24gcmV2ZXJzZVZhbHVlcyhlLHQsYSl7Zm9yKGxldCByPXQsbj1hLTE7cjxuOysrciwtLW4pe2NvbnN0IHQ9ZVtyXTtlW3JdPWVbbl07ZVtuXT10fX1mdW5jdGlvbiBjcmVhdGVCaWRpVGV4dChlLHQpe2xldCBhPSJsdHIiO2FyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0/YT0idHRiIjp0fHwoYT0icnRsIik7cmV0dXJue3N0cjplLGRpcjphfX1jb25zdCBzPVtdLG89W119LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5nZXRGb250U3Vic3RpdHV0aW9uPWZ1bmN0aW9uIGdldEZvbnRTdWJzdGl0dXRpb24oZSx0LGEsdSxkKXtjb25zdCBmPXU9KDAsci5ub3JtYWxpemVGb250TmFtZSkodSk7bGV0IGc9ZS5nZXQoZik7aWYoZylyZXR1cm4gZztsZXQgcD1sLmdldCh1KTtpZighcClmb3IoY29uc3RbZSx0XW9mIGgpaWYodS5zdGFydHNXaXRoKGUpKXt1PWAke3R9JHt1LnN1YnN0cmluZyhlLmxlbmd0aCl9YDtwPWwuZ2V0KHUpO2JyZWFrfWxldCBtPSExO2lmKCFwKXtwPWwuZ2V0KGQpO209ITB9Y29uc3QgYj1gJHt0LmdldERvY0lkKCl9X3Mke3QuY3JlYXRlRm9udElkKCl9YDtpZighcCl7aWYoISgwLG4udmFsaWRhdGVGb250TmFtZSkodSkpe2Uuc2V0KGYsbnVsbCk7cmV0dXJuIG51bGx9Y29uc3QgdD0vYm9sZC9naS50ZXN0KHUpLGE9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QodSk7Zz17Y3NzOmIsZ3Vlc3NGYWxsYmFjazohMCxsb2FkZWROYW1lOmIsYmFzZUZvbnROYW1lOnUsc3JjOmBsb2NhbCgke3V9KWAsc3R5bGU6dCYmYSYmY3x8dCYmc3x8YSYmb3x8aX07ZS5zZXQoZixnKTtyZXR1cm4gZ31jb25zdCB5PVtdO20mJigwLG4udmFsaWRhdGVGb250TmFtZSkodSkmJnkucHVzaChgbG9jYWwoJHt1fSlgKTtjb25zdHtzdHlsZTp3LHVsdGltYXRlOlN9PWdlbmVyYXRlRm9udChwLHksYSkseD1udWxsPT09UztnPXtjc3M6YCR7Yn0ke3g/IiI6YCwke1N9YH1gLGd1ZXNzRmFsbGJhY2s6eCxsb2FkZWROYW1lOmIsYmFzZUZvbnROYW1lOnUsc3JjOnkuam9pbigiLCIpLHN0eWxlOnd9O2Uuc2V0KGYsZyk7cmV0dXJuIGd9O2EoMTQwKTt2YXIgcj1hKDE4OSksbj1hKDE1MCk7Y29uc3QgaT17c3R5bGU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwifSxzPXtzdHlsZToibm9ybWFsIix3ZWlnaHQ6ImJvbGQifSxvPXtzdHlsZToiaXRhbGljIix3ZWlnaHQ6Im5vcm1hbCJ9LGM9e3N0eWxlOiJpdGFsaWMiLHdlaWdodDoiYm9sZCJ9LGw9bmV3IE1hcChbWyJUaW1lcy1Sb21hbiIse2xvY2FsOlsiVGltZXMgTmV3IFJvbWFuIiwiVGltZXMtUm9tYW4iLCJUaW1lcyIsIkxpYmVyYXRpb24gU2VyaWYiLCJOaW1idXMgUm9tYW4iLCJOaW1idXMgUm9tYW4gTCIsIlRpbm9zIiwiVGhvcm5kYWxlIiwiVGVYIEd5cmUgVGVybWVzIiwiRnJlZVNlcmlmIiwiRGVqYVZ1IFNlcmlmIiwiQml0c3RyZWFtIFZlcmEgU2VyaWYiLCJVYnVudHUiXSxzdHlsZTppLHVsdGltYXRlOiJzZXJpZiJ9XSxbIlRpbWVzLUJvbGQiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOnMsdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtSXRhbGljIix7YWxpYXM6IlRpbWVzLVJvbWFuIixzdHlsZTpvLHVsdGltYXRlOiJzZXJpZiJ9XSxbIlRpbWVzLUJvbGRJdGFsaWMiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOmMsdWx0aW1hdGU6InNlcmlmIn1dLFsiSGVsdmV0aWNhIix7bG9jYWw6WyJIZWx2ZXRpY2EiLCJIZWx2ZXRpY2EgTmV1ZSIsIkFyaWFsIiwiQXJpYWwgTm92YSIsIkxpYmVyYXRpb24gU2FucyIsIkFyaW1vIiwiTmltYnVzIFNhbnMiLCJOaW1idXMgU2FucyBMIiwiQTAzMCIsIlRlWCBHeXJlIEhlcm9zIiwiRnJlZVNhbnMiLCJEZWphVnUgU2FucyIsIkFsYmFueSIsIkJpdHN0cmVhbSBWZXJhIFNhbnMiLCJBcmlhbCBVbmljb2RlIE1TIiwiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCJBcHBsZSBTeW1ib2xzIiwiQ2FudGFyZWxsIl0scGF0aDoiTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiLHN0eWxlOmksdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtQm9sZCIse2FsaWFzOiJIZWx2ZXRpY2EiLHBhdGg6IkxpYmVyYXRpb25TYW5zLUJvbGQudHRmIixzdHlsZTpzLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiSGVsdmV0aWNhLU9ibGlxdWUiLHthbGlhczoiSGVsdmV0aWNhIixwYXRoOiJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIixzdHlsZTpvLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIix7YWxpYXM6IkhlbHZldGljYSIscGF0aDoiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLHN0eWxlOmMsdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJDb3VyaWVyIix7bG9jYWw6WyJDb3VyaWVyIiwiQ291cmllciBOZXciLCJMaWJlcmF0aW9uIE1vbm8iLCJOaW1idXMgTW9ubyIsIk5pbWJ1cyBNb25vIEwiLCJDb3VzaW5lIiwiQ3VtYmVybGFuZCIsIlRlWCBHeXJlIEN1cnNvciIsIkZyZWVNb25vIl0sc3R5bGU6aSx1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQ291cmllci1Cb2xkIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOnMsdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkNvdXJpZXItT2JsaXF1ZSIse2FsaWFzOiJDb3VyaWVyIixzdHlsZTpvLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJDb3VyaWVyLUJvbGRPYmxpcXVlIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOmMsdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkFyaWFsQmxhY2siLHtsb2NhbDpbIkFyaWFsIEJsYWNrIl0sc3R5bGU6e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiOTAwIn0sZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxCbGFjay1Cb2xkIix7YWxpYXM6IkFyaWFsQmxhY2sifV0sWyJBcmlhbEJsYWNrLUl0YWxpYyIse2FsaWFzOiJBcmlhbEJsYWNrIixzdHlsZTp7c3R5bGU6Iml0YWxpYyIsd2VpZ2h0OiI5MDAifSxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiQXJpYWxCbGFjay1Cb2xkSXRhbGljIix7YWxpYXM6IkFyaWFsQmxhY2stSXRhbGljIn1dLFsiQXJpYWxOYXJyb3ciLHtsb2NhbDpbIkFyaWFsIE5hcnJvdyIsIkxpYmVyYXRpb24gU2FucyBOYXJyb3ciLCJIZWx2ZXRpY2EgQ29uZGVuc2VkIiwiTmltYnVzIFNhbnMgTmFycm93IiwiVGVYIEd5cmUgSGVyb3MgQ24iXSxzdHlsZTppLGZhbGxiYWNrOiJIZWx2ZXRpY2EifV0sWyJBcmlhbE5hcnJvdy1Cb2xkIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpzLGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZCJ9XSxbIkFyaWFsTmFycm93LUl0YWxpYyIse2FsaWFzOiJBcmlhbE5hcnJvdyIsc3R5bGU6byxmYWxsYmFjazoiSGVsdmV0aWNhLU9ibGlxdWUifV0sWyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpjLGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUifV0sWyJDYWxpYnJpIix7bG9jYWw6WyJDYWxpYnJpIiwiQ2FybGl0byJdLHN0eWxlOmksZmFsbGJhY2s6IkhlbHZldGljYSJ9XSxbIkNhbGlicmktQm9sZCIse2FsaWFzOiJDYWxpYnJpIixzdHlsZTpzLGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZCJ9XSxbIkNhbGlicmktSXRhbGljIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOm8sZmFsbGJhY2s6IkhlbHZldGljYS1PYmxpcXVlIn1dLFsiQ2FsaWJyaS1Cb2xkSXRhbGljIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOmMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJ9XSxbIldpbmdkaW5ncyIse2xvY2FsOlsiV2luZ2RpbmdzIiwiVVJXIERpbmdiYXRzIl0sc3R5bGU6aX1dLFsiV2luZ2RpbmdzLVJlZ3VsYXIiLHthbGlhczoiV2luZ2RpbmdzIn1dLFsiV2luZ2RpbmdzLUJvbGQiLHthbGlhczoiV2luZ2RpbmdzIn1dXSksaD1uZXcgTWFwKFtbIkFyaWFsLUJsYWNrIiwiQXJpYWxCbGFjayJdXSk7ZnVuY3Rpb24gZ2VuZXJhdGVGb250KGUsdCxhKXtsZXR7YWxpYXM6cixsb2NhbDpuLHBhdGg6aSxmYWxsYmFjazpoLHN0eWxlOnUsdWx0aW1hdGU6ZH09ZSxmPSEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM10sZz0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdLHA9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOiIiO2NvbnN0IG09e3N0eWxlOm51bGwsdWx0aW1hdGU6bnVsbH07aWYobil7Y29uc3QgZT1wP2AgJHtwfWA6IiI7Zm9yKGNvbnN0IGEgb2Ygbil0LnB1c2goYGxvY2FsKCR7YX0ke2V9KWApfWlmKHIpe2NvbnN0IGU9bC5nZXQociksbj1wfHxmdW5jdGlvbiBnZXRTdHlsZVRvQXBwZW5kKGUpe3N3aXRjaChlKXtjYXNlIHM6cmV0dXJuIkJvbGQiO2Nhc2UgbzpyZXR1cm4iSXRhbGljIjtjYXNlIGM6cmV0dXJuIkJvbGQgSXRhbGljIjtkZWZhdWx0OmlmKCJib2xkIj09PWU/LndlaWdodClyZXR1cm4iQm9sZCI7aWYoIml0YWxpYyI9PT1lPy5zdHlsZSlyZXR1cm4iSXRhbGljIn1yZXR1cm4iIn0odSk7T2JqZWN0LmFzc2lnbihtLGdlbmVyYXRlRm9udChlLHQsYSxmJiYhaCxnJiYhaSxuKSl9dSYmKG0uc3R5bGU9dSk7ZCYmKG0udWx0aW1hdGU9ZCk7aWYoZiYmaCl7Y29uc3QgZT1sLmdldChoKSx7dWx0aW1hdGU6cn09Z2VuZXJhdGVGb250KGUsdCxhLGYsZyYmIWkscCk7bS51bHRpbWF0ZXx8PXJ9ZyYmaSYmYSYmdC5wdXNoKGB1cmwoJHthfSR7aX0pYCk7cmV0dXJuIG19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSW1hZ2VSZXNpemVyPXZvaWQgMDthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgyKTt2YXIgcj1hKDE0NSk7Y2xhc3MgSW1hZ2VSZXNpemVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faW1nRGF0YT1lO3RoaXMuX2lzTWFzaz10fXN0YXRpYyBuZWVkc1RvQmVSZXNpemVkKGUsdCl7aWYoZTw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCYmdDw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aClyZXR1cm4hMTtjb25zdHtNQVhfRElNOmF9PXRoaXM7aWYoZT5hfHx0PmEpcmV0dXJuITA7Y29uc3Qgcj1lKnQ7aWYodGhpcy5faGFzTWF4QXJlYSlyZXR1cm4gcj50aGlzLk1BWF9BUkVBO2lmKHI8dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCoqMilyZXR1cm4hMTtpZih0aGlzLl9hcmVHb29kRGltcyhlLHQpKXt0aGlzLl9nb29kU3F1YXJlTGVuZ3RoPU1hdGgubWF4KHRoaXMuX2dvb2RTcXVhcmVMZW5ndGgsTWF0aC5mbG9vcihNYXRoLnNxcnQoZSp0KSkpO3JldHVybiExfXRoaXMuX2dvb2RTcXVhcmVMZW5ndGg9dGhpcy5fZ3Vlc3NNYXgodGhpcy5fZ29vZFNxdWFyZUxlbmd0aCxhLDEyOCwwKTtyZXR1cm4gcj4odGhpcy5NQVhfQVJFQT10aGlzLl9nb29kU3F1YXJlTGVuZ3RoKioyKX1zdGF0aWMgZ2V0IE1BWF9ESU0oKXtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUFYX0RJTSIsdGhpcy5fZ3Vlc3NNYXgoMjA0OCw2NTUzNywwLDEpKX1zdGF0aWMgZ2V0IE1BWF9BUkVBKCl7dGhpcy5faGFzTWF4QXJlYT0hMDtyZXR1cm4oMCxyLnNoYWRvdykodGhpcywiTUFYX0FSRUEiLHRoaXMuX2d1ZXNzTWF4KEltYWdlUmVzaXplci5fZ29vZFNxdWFyZUxlbmd0aCx0aGlzLk1BWF9ESU0sMTI4LDApKioyKX1zdGF0aWMgc2V0IE1BWF9BUkVBKGUpe2lmKGU+PTApe3RoaXMuX2hhc01heEFyZWE9ITA7KDAsci5zaGFkb3cpKHRoaXMsIk1BWF9BUkVBIixlKX19c3RhdGljIHNldE1heEFyZWEoZSl7dGhpcy5faGFzTWF4QXJlYXx8KHRoaXMuTUFYX0FSRUE9ZT4+Mil9c3RhdGljIF9hcmVHb29kRGltcyhlLHQpe3RyeXtjb25zdCBhPW5ldyBPZmZzY3JlZW5DYW52YXMoZSx0KSxyPWEuZ2V0Q29udGV4dCgiMmQiKTtyLmZpbGxSZWN0KDAsMCwxLDEpO2NvbnN0IG49ci5nZXRJbWFnZURhdGEoMCwwLDEsMSkuZGF0YVszXTthLndpZHRoPWEuaGVpZ2h0PTE7cmV0dXJuIDAhPT1ufWNhdGNoe3JldHVybiExfX1zdGF0aWMgX2d1ZXNzTWF4KGUsdCxhLHIpe2Zvcig7ZSthKzE8dDspe2NvbnN0IGE9TWF0aC5mbG9vcigoZSt0KS8yKSxuPXJ8fGE7dGhpcy5fYXJlR29vZERpbXMoYSxuKT9lPWE6dD1hfXJldHVybiBlfXN0YXRpYyBhc3luYyBjcmVhdGVJbWFnZShlKXtyZXR1cm4gbmV3IEltYWdlUmVzaXplcihlLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pLl9jcmVhdGVJbWFnZSgpfWFzeW5jIF9jcmVhdGVJbWFnZSgpe2NvbnN0IGU9dGhpcy5fZW5jb2RlQk1QKCksdD1uZXcgQmxvYihbZS5idWZmZXJdLHt0eXBlOiJpbWFnZS9ibXAifSksYT1jcmVhdGVJbWFnZUJpdG1hcCh0KSx7TUFYX0FSRUE6cixNQVhfRElNOm59PUltYWdlUmVzaXplcix7X2ltZ0RhdGE6aX09dGhpcyx7d2lkdGg6cyxoZWlnaHQ6b309aSxjPU1hdGgubWF4KHMvbixvL24sTWF0aC5zcXJ0KHMqby9yKSksbD1NYXRoLm1heChjLDIpLGg9TWF0aC5yb3VuZCgxMCooYysxLjI1KSkvMTAvbCx1PU1hdGguZmxvb3IoTWF0aC5sb2cyKGgpKSxkPW5ldyBBcnJheSh1KzIpLmZpbGwoMik7ZFswXT1sO2Quc3BsaWNlKC0xLDEsaC8oMTw8dSkpO2xldCBmPXMsZz1vLHA9YXdhaXQgYTtmb3IoY29uc3QgZSBvZiBkKXtjb25zdCB0PWYsYT1nO2Y9TWF0aC5mbG9vcihmL2UpLTE7Zz1NYXRoLmZsb29yKGcvZSktMTtjb25zdCByPW5ldyBPZmZzY3JlZW5DYW52YXMoZixnKTtyLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHAsMCwwLHQsYSwwLDAsZixnKTtwPXIudHJhbnNmZXJUb0ltYWdlQml0bWFwKCl9aS5kYXRhPW51bGw7aS5iaXRtYXA9cDtpLndpZHRoPWY7aS5oZWlnaHQ9ZztyZXR1cm4gaX1fZW5jb2RlQk1QKCl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6dCxraW5kOmF9PXRoaXMuX2ltZ0RhdGE7bGV0IG4saT10aGlzLl9pbWdEYXRhLmRhdGEscz1uZXcgVWludDhBcnJheSgwKSxvPXMsYz0wO3N3aXRjaChhKXtjYXNlIHIuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOntuPTE7cz1uZXcgVWludDhBcnJheSh0aGlzLl9pc01hc2s/WzI1NSwyNTUsMjU1LDI1NSwwLDAsMCwwXTpbMCwwLDAsMCwyNTUsMjU1LDI1NSwyNTVdKTtjb25zdCBhPWUrNz4+MyxyPWErMyYtNDtpZihhIT09cil7Y29uc3QgZT1uZXcgVWludDhBcnJheShyKnQpO2xldCBuPTA7Zm9yKGxldCBzPTAsbz10KmE7czxvO3MrPWEsbis9cillLnNldChpLnN1YmFycmF5KHMscythKSxuKTtpPWV9YnJlYWt9Y2FzZSByLkltYWdlS2luZC5SR0JfMjRCUFA6bj0yNDtpZigzJmUpe2NvbnN0IGE9MyplLHI9YSszJi00LG49ci1hLHM9bmV3IFVpbnQ4QXJyYXkocip0KTtsZXQgbz0wO2ZvcihsZXQgZT0wLHI9dCphO2U8cjtlKz1hKXtjb25zdCB0PWkuc3ViYXJyYXkoZSxlK2EpO2ZvcihsZXQgZT0wO2U8YTtlKz0zKXtzW28rK109dFtlKzJdO3NbbysrXT10W2UrMV07c1tvKytdPXRbZV19bys9bn1pPXN9ZWxzZSBmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKz0zKXtjb25zdCB0PWlbZV07aVtlXT1pW2UrMl07aVtlKzJdPXR9YnJlYWs7Y2FzZSByLkltYWdlS2luZC5SR0JBXzMyQlBQOm49MzI7Yz0zO289bmV3IFVpbnQ4QXJyYXkoNjgpO2NvbnN0IGE9bmV3IERhdGFWaWV3KG8uYnVmZmVyKTtpZihyLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKXthLnNldFVpbnQzMigwLDI1NSwhMCk7YS5zZXRVaW50MzIoNCw2NTI4MCwhMCk7YS5zZXRVaW50MzIoOCwxNjcxMTY4MCwhMCk7YS5zZXRVaW50MzIoMTIsNDI3ODE5MDA4MCwhMCl9ZWxzZXthLnNldFVpbnQzMigwLDQyNzgxOTAwODAsITApO2Euc2V0VWludDMyKDQsMTY3MTE2ODAsITApO2Euc2V0VWludDMyKDgsNjUyODAsITApO2Euc2V0VWludDMyKDEyLDI1NSwhMCl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9bGV0IGw9MDtjb25zdCBoPTQwK28ubGVuZ3RoLHU9MTQraCtzLmxlbmd0aCtpLmxlbmd0aCxkPW5ldyBVaW50OEFycmF5KHUpLGY9bmV3IERhdGFWaWV3KGQuYnVmZmVyKTtmLnNldFVpbnQxNihsLDE5Nzc4LCEwKTtsKz0yO2Yuc2V0VWludDMyKGwsdSwhMCk7bCs9NDtmLnNldFVpbnQzMihsLDAsITApO2wrPTQ7Zi5zZXRVaW50MzIobCwxNCtoK3MubGVuZ3RoLCEwKTtsKz00O2Yuc2V0VWludDMyKGwsaCwhMCk7bCs9NDtmLnNldEludDMyKGwsZSwhMCk7bCs9NDtmLnNldEludDMyKGwsLXQsITApO2wrPTQ7Zi5zZXRVaW50MTYobCwxLCEwKTtsKz0yO2Yuc2V0VWludDE2KGwsbiwhMCk7bCs9MjtmLnNldFVpbnQzMihsLGMsITApO2wrPTQ7Zi5zZXRVaW50MzIobCwwLCEwKTtsKz00O2Yuc2V0SW50MzIobCwwLCEwKTtsKz00O2Yuc2V0SW50MzIobCwwLCEwKTtsKz00O2Yuc2V0VWludDMyKGwscy5sZW5ndGgvNCwhMCk7bCs9NDtmLnNldFVpbnQzMihsLDAsITApO2wrPTQ7ZC5zZXQobyxsKTtsKz1vLmxlbmd0aDtkLnNldChzLGwpO2wrPXMubGVuZ3RoO2Quc2V0KGksbCk7cmV0dXJuIGR9fXQuSW1hZ2VSZXNpemVyPUltYWdlUmVzaXplcjtJbWFnZVJlc2l6ZXIuX2dvb2RTcXVhcmVMZW5ndGg9MjA0OH0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk11cm11ckhhc2gzXzY0PXZvaWQgMDthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgyKTt2YXIgcj1hKDE0NSk7Y29uc3Qgbj0zMjg1Mzc3NTIwLGk9NDI5NDkwMTc2MCxzPTY1NTM1O3QuTXVybXVySGFzaDNfNjQ9Y2xhc3MgTXVybXVySGFzaDNfNjR7Y29uc3RydWN0b3IoZSl7dGhpcy5oMT1lPzQyOTQ5NjcyOTUmZTpuO3RoaXMuaDI9ZT80Mjk0OTY3Mjk1JmU6bn11cGRhdGUoZSl7bGV0IHQsYTtpZigic3RyaW5nIj09dHlwZW9mIGUpe3Q9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7YT0wO2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQocik7aWYobjw9MjU1KXRbYSsrXT1uO2Vsc2V7dFthKytdPW4+Pj44O3RbYSsrXT0yNTUmbn19fWVsc2V7aWYoISgwLHIuaXNBcnJheUJ1ZmZlcikoZSkpdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIElucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuIik7dD1lLnNsaWNlKCk7YT10LmJ5dGVMZW5ndGh9Y29uc3Qgbj1hPj4yLG89YS00Km4sYz1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCxuKTtsZXQgbD0wLGg9MCx1PXRoaXMuaDEsZD10aGlzLmgyO2NvbnN0IGY9MzQzMjkxODM1MyxnPTQ2MTg0NTkwNyxwPTExNjAxLG09MTM3MTU7Zm9yKGxldCBlPTA7ZTxuO2UrKylpZigxJmUpe2w9Y1tlXTtsPWwqZiZpfGwqcCZzO2w9bDw8MTV8bD4+PjE3O2w9bCpnJml8bCptJnM7dV49bDt1PXU8PDEzfHU+Pj4xOTt1PTUqdSszODY0MjkyMTk2fWVsc2V7aD1jW2VdO2g9aCpmJml8aCpwJnM7aD1oPDwxNXxoPj4+MTc7aD1oKmcmaXxoKm0mcztkXj1oO2Q9ZDw8MTN8ZD4+PjE5O2Q9NSpkKzM4NjQyOTIxOTZ9bD0wO3N3aXRjaChvKXtjYXNlIDM6bF49dFs0Km4rMl08PDE2O2Nhc2UgMjpsXj10WzQqbisxXTw8ODtjYXNlIDE6bF49dFs0Km5dO2w9bCpmJml8bCpwJnM7bD1sPDwxNXxsPj4+MTc7bD1sKmcmaXxsKm0mczsxJm4/dV49bDpkXj1sfXRoaXMuaDE9dTt0aGlzLmgyPWR9aGV4ZGlnZXN0KCl7bGV0IGU9dGhpcy5oMSx0PXRoaXMuaDI7ZV49dD4+PjE7ZT0zOTgxODA2Nzk3KmUmaXwzNjA0NSplJnM7dD00MjgzNTQzNTExKnQmaXwoMjk1MDE2Mzc5NyoodDw8MTZ8ZT4+PjE2KSZpKT4+PjE2O2VePXQ+Pj4xO2U9NDQ0OTg0NDAzKmUmaXw2MDQ5OSplJnM7dD0zMzAxODgyMzY2KnQmaXwoMzEyMDQzNzg5MyoodDw8MTZ8ZT4+PjE2KSZpKT4+PjE2O2VePXQ+Pj4xO3JldHVybihlPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9wZXJhdG9yTGlzdD12b2lkIDA7YSgyKTthKDE0MCk7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO2EoMTE2KTthKDEyNyk7YSgxMjkpO2EoMTMyKTthKDEzNCk7YSgxMzYpO2EoMTM4KTt2YXIgcj1hKDE0NSk7ZnVuY3Rpb24gYWRkU3RhdGUoZSx0LGEscixuKXtsZXQgaT1lO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGgtMTtlPGE7ZSsrKXtjb25zdCBhPXRbZV07aT1pW2FdfHw9W119aVt0LmF0KC0xKV09e2NoZWNrRm46YSxpdGVyYXRlRm46cixwcm9jZXNzRm46bn19Y29uc3Qgbj1bXTthZGRTdGF0ZShuLFtyLk9QUy5zYXZlLHIuT1BTLnRyYW5zZm9ybSxyLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxyLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbiBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gYVt0XT09PXIuT1BTLnNhdmU7Y2FzZSAxOnJldHVybiBhW3RdPT09ci5PUFMudHJhbnNmb3JtO2Nhc2UgMjpyZXR1cm4gYVt0XT09PXIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gYVt0XT09PXIuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke259YCl9KSwoZnVuY3Rpb24gZm91bmRJbmxpbmVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPWUuaUN1cnIscz1pLTMsbz1pLTIsYz1pLTEsbD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LXMpLzQpLDIwMCk7aWYobDwxMClyZXR1cm4gdC0odC1zKSU0O2xldCBoPTA7Y29uc3QgdT1bXTtsZXQgZD0wLGY9MSxnPTE7Zm9yKGxldCBlPTA7ZTxsO2UrKyl7Y29uc3QgdD1uW28rKGU8PDIpXSxhPW5bYysoZTw8MildWzBdO2lmKGYrYS53aWR0aD4xZTMpe2g9TWF0aC5tYXgoaCxmKTtnKz1kKzI7Zj0wO2Q9MH11LnB1c2goe3RyYW5zZm9ybTp0LHg6Zix5OmcsdzphLndpZHRoLGg6YS5oZWlnaHR9KTtmKz1hLndpZHRoKzI7ZD1NYXRoLm1heChkLGEuaGVpZ2h0KX1jb25zdCBwPU1hdGgubWF4KGgsZikrMSxtPWcrZCsxLGI9bmV3IFVpbnQ4QXJyYXkocCptKjQpLHk9cDw8Mjtmb3IobGV0IGU9MDtlPGw7ZSsrKXtjb25zdCB0PW5bYysoZTw8MildWzBdLmRhdGEsYT11W2VdLnc8PDI7bGV0IHI9MCxpPXVbZV0ueCt1W2VdLnkqcDw8MjtiLnNldCh0LnN1YmFycmF5KDAsYSksaS15KTtmb3IobGV0IG49MCxzPXVbZV0uaDtuPHM7bisrKXtiLnNldCh0LnN1YmFycmF5KHIscithKSxpKTtyKz1hO2krPXl9Yi5zZXQodC5zdWJhcnJheShyLWEsciksaSk7Zm9yKDtpPj0wOyl7dFtpLTRdPXRbaV07dFtpLTNdPXRbaSsxXTt0W2ktMl09dFtpKzJdO3RbaS0xXT10W2krM107dFtpK2FdPXRbaSthLTRdO3RbaSthKzFdPXRbaSthLTNdO3RbaSthKzJdPXRbaSthLTJdO3RbaSthKzNdPXRbaSthLTFdO2ktPXl9fWNvbnN0IHc9e3dpZHRoOnAsaGVpZ2h0Om19O2lmKGUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcyhwLG0pO2UuZ2V0Q29udGV4dCgiMmQiKS5wdXRJbWFnZURhdGEobmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkoYi5idWZmZXIpLHAsbSksMCwwKTt3LmJpdG1hcD1lLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpO3cuZGF0YT1udWxsfWVsc2V7dy5raW5kPXIuSW1hZ2VLaW5kLlJHQkFfMzJCUFA7dy5kYXRhPWJ9YS5zcGxpY2Uocyw0Kmwsci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCk7bi5zcGxpY2Uocyw0KmwsW3csdV0pO3JldHVybiBzKzF9KSk7YWRkU3RhdGUobixbci5PUFMuc2F2ZSxyLk9QUy50cmFuc2Zvcm0sci5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LHIuT1BTLnJlc3RvcmVdLG51bGwsKGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZU1hc2tHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gYVt0XT09PXIuT1BTLnNhdmU7Y2FzZSAxOnJldHVybiBhW3RdPT09ci5PUFMudHJhbnNmb3JtO2Nhc2UgMjpyZXR1cm4gYVt0XT09PXIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDtjYXNlIDM6cmV0dXJuIGFbdF09PT1yLk9QUy5yZXN0b3JlfXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUltYWdlTWFza0dyb3VwIC0gaW52YWxpZCBwb3M6ICR7bn1gKX0pLChmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPWUuaUN1cnIscz1pLTMsbz1pLTIsYz1pLTE7bGV0IGw9TWF0aC5mbG9vcigodC1zKS80KTtpZihsPDEwKXJldHVybiB0LSh0LXMpJTQ7bGV0IGgsdSxkPSExO2NvbnN0IGY9bltjXVswXSxnPW5bb11bMF0scD1uW29dWzFdLG09bltvXVsyXSxiPW5bb11bM107aWYocD09PW0pe2Q9ITA7aD1vKzQ7bGV0IGU9Yys0O2ZvcihsZXQgdD0xO3Q8bDt0KyssaCs9NCxlKz00KXt1PW5baF07aWYobltlXVswXSE9PWZ8fHVbMF0hPT1nfHx1WzFdIT09cHx8dVsyXSE9PW18fHVbM10hPT1iKXt0PDEwP2Q9ITE6bD10O2JyZWFrfX19aWYoZCl7bD1NYXRoLm1pbihsLDFlMyk7Y29uc3QgZT1uZXcgRmxvYXQzMkFycmF5KDIqbCk7aD1vO2ZvcihsZXQgdD0wO3Q8bDt0KyssaCs9NCl7dT1uW2hdO2VbdDw8MV09dVs0XTtlWzErKHQ8PDEpXT11WzVdfWEuc3BsaWNlKHMsNCpsLHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCk7bi5zcGxpY2Uocyw0KmwsW2YsZyxwLG0sYixlXSl9ZWxzZXtsPU1hdGgubWluKGwsMTAwKTtjb25zdCBlPVtdO2ZvcihsZXQgdD0wO3Q8bDt0Kyspe3U9bltvKyh0PDwyKV07Y29uc3QgYT1uW2MrKHQ8PDIpXVswXTtlLnB1c2goe2RhdGE6YS5kYXRhLHdpZHRoOmEud2lkdGgsaGVpZ2h0OmEuaGVpZ2h0LGludGVycG9sYXRlOmEuaW50ZXJwb2xhdGUsY291bnQ6YS5jb3VudCx0cmFuc2Zvcm06dX0pfWEuc3BsaWNlKHMsNCpsLHIuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwKTtuLnNwbGljZShzLDQqbCxbZV0pfXJldHVybiBzKzF9KSk7YWRkU3RhdGUobixbci5PUFMuc2F2ZSxyLk9QUy50cmFuc2Zvcm0sci5PUFMucGFpbnRJbWFnZVhPYmplY3Qsci5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5hcmdzQXJyYXksYT1lLmlDdXJyLTI7cmV0dXJuIDA9PT10W2FdWzFdJiYwPT09dFthXVsyXX0pLChmdW5jdGlvbiBpdGVyYXRlSW1hZ2VHcm91cChlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LG49ZS5hcmdzQXJyYXksaT0odC0oZS5pQ3Vyci0zKSklNDtzd2l0Y2goaSl7Y2FzZSAwOnJldHVybiBhW3RdPT09ci5PUFMuc2F2ZTtjYXNlIDE6aWYoYVt0XSE9PXIuT1BTLnRyYW5zZm9ybSlyZXR1cm4hMTtjb25zdCBpPWUuaUN1cnItMixzPW5baV1bMF0sbz1uW2ldWzNdO3JldHVybiBuW3RdWzBdPT09cyYmMD09PW5bdF1bMV0mJjA9PT1uW3RdWzJdJiZuW3RdWzNdPT09bztjYXNlIDI6aWYoYVt0XSE9PXIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0KXJldHVybiExO2NvbnN0IGM9bltlLmlDdXJyLTFdWzBdO3JldHVybiBuW3RdWzBdPT09YztjYXNlIDM6cmV0dXJuIGFbdF09PT1yLk9QUy5yZXN0b3JlfXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogJHtpfWApfSksKGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxpPWUuaUN1cnIscz1pLTMsbz1pLTIsYz1uW2ktMV1bMF0sbD1uW29dWzBdLGg9bltvXVszXSx1PU1hdGgubWluKE1hdGguZmxvb3IoKHQtcykvNCksMWUzKTtpZih1PDMpcmV0dXJuIHQtKHQtcyklNDtjb25zdCBkPW5ldyBGbG9hdDMyQXJyYXkoMip1KTtsZXQgZj1vO2ZvcihsZXQgZT0wO2U8dTtlKyssZis9NCl7Y29uc3QgdD1uW2ZdO2RbZTw8MV09dFs0XTtkWzErKGU8PDEpXT10WzVdfWNvbnN0IGc9W2MsbCxoLGRdO2Euc3BsaWNlKHMsNCp1LHIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0KTtuLnNwbGljZShzLDQqdSxnKTtyZXR1cm4gcysxfSkpO2FkZFN0YXRlKG4sW3IuT1BTLmJlZ2luVGV4dCxyLk9QUy5zZXRGb250LHIuT1BTLnNldFRleHRNYXRyaXgsci5PUFMuc2hvd1RleHQsci5PUFMuZW5kVGV4dF0sbnVsbCwoZnVuY3Rpb24gaXRlcmF0ZVNob3dUZXh0R3JvdXAoZSx0KXtjb25zdCBhPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gYVt0XT09PXIuT1BTLmJlZ2luVGV4dDtjYXNlIDE6cmV0dXJuIGFbdF09PT1yLk9QUy5zZXRGb250O2Nhc2UgMjpyZXR1cm4gYVt0XT09PXIuT1BTLnNldFRleHRNYXRyaXg7Y2FzZSAzOmlmKGFbdF0hPT1yLk9QUy5zaG93VGV4dClyZXR1cm4hMTtjb25zdCBpPWUuaUN1cnItMyxzPW5baV1bMF0sbz1uW2ldWzFdO3JldHVybiBuW3RdWzBdPT09cyYmblt0XVsxXT09PW87Y2FzZSA0OnJldHVybiBhW3RdPT09ci5PUFMuZW5kVGV4dH10aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVTaG93VGV4dEdyb3VwIC0gaW52YWxpZCBwb3M6ICR7aX1gKX0pLChmdW5jdGlvbihlLHQpe2NvbnN0IGE9ZS5mbkFycmF5LHI9ZS5hcmdzQXJyYXksbj1lLmlDdXJyLGk9bi00LHM9bi0zLG89bi0yLGM9bi0xLGw9bixoPXJbc11bMF0sdT1yW3NdWzFdO2xldCBkPU1hdGgubWluKE1hdGguZmxvb3IoKHQtaSkvNSksMWUzKTtpZihkPDMpcmV0dXJuIHQtKHQtaSklNTtsZXQgZj1pO2lmKGk+PTQmJmFbaS00XT09PWFbc10mJmFbaS0zXT09PWFbb10mJmFbaS0yXT09PWFbY10mJmFbaS0xXT09PWFbbF0mJnJbaS00XVswXT09PWgmJnJbaS00XVsxXT09PXUpe2QrKztmLT01fWxldCBnPWYrNDtmb3IobGV0IGU9MTtlPGQ7ZSsrKXthLnNwbGljZShnLDMpO3Iuc3BsaWNlKGcsMyk7Zys9Mn1yZXR1cm4gZysxfSkpO2NsYXNzIE51bGxPcHRpbWl6ZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5xdWV1ZT1lfV9vcHRpbWl6ZSgpe31wdXNoKGUsdCl7dGhpcy5xdWV1ZS5mbkFycmF5LnB1c2goZSk7dGhpcy5xdWV1ZS5hcmdzQXJyYXkucHVzaCh0KTt0aGlzLl9vcHRpbWl6ZSgpfWZsdXNoKCl7fXJlc2V0KCl7fX1jbGFzcyBRdWV1ZU9wdGltaXplciBleHRlbmRzIE51bGxPcHRpbWl6ZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5zdGF0ZT1udWxsO3RoaXMuY29udGV4dD17aUN1cnI6MCxmbkFycmF5OmUuZm5BcnJheSxhcmdzQXJyYXk6ZS5hcmdzQXJyYXksaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITF9O3RoaXMubWF0Y2g9bnVsbDt0aGlzLmxhc3RQcm9jZXNzZWQ9MH1zZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoZSl7dGhpcy5jb250ZXh0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWV9X29wdGltaXplKCl7Y29uc3QgZT10aGlzLnF1ZXVlLmZuQXJyYXk7bGV0IHQ9dGhpcy5sYXN0UHJvY2Vzc2VkLGE9ZS5sZW5ndGgscj10aGlzLnN0YXRlLGk9dGhpcy5tYXRjaDtpZighciYmIWkmJnQrMT09PWEmJiFuW2VbdF1dKXt0aGlzLmxhc3RQcm9jZXNzZWQ9YTtyZXR1cm59Y29uc3Qgcz10aGlzLmNvbnRleHQ7Zm9yKDt0PGE7KXtpZihpKXtpZigoMCxpLml0ZXJhdGVGbikocyx0KSl7dCsrO2NvbnRpbnVlfXQ9KDAsaS5wcm9jZXNzRm4pKHMsdCsxKTthPWUubGVuZ3RoO2k9bnVsbDtyPW51bGw7aWYodD49YSlicmVha31yPShyfHxuKVtlW3RdXTtpZihyJiYhQXJyYXkuaXNBcnJheShyKSl7cy5pQ3Vycj10O3QrKztpZighci5jaGVja0ZufHwoMCxyLmNoZWNrRm4pKHMpKXtpPXI7cj1udWxsfWVsc2Ugcj1udWxsfWVsc2UgdCsrfXRoaXMuc3RhdGU9cjt0aGlzLm1hdGNoPWk7dGhpcy5sYXN0UHJvY2Vzc2VkPXR9Zmx1c2goKXtmb3IoO3RoaXMubWF0Y2g7KXtjb25zdCBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSk7dGhpcy5tYXRjaD1udWxsO3RoaXMuc3RhdGU9bnVsbDt0aGlzLl9vcHRpbWl6ZSgpfX1yZXNldCgpe3RoaXMuc3RhdGU9bnVsbDt0aGlzLm1hdGNoPW51bGw7dGhpcy5sYXN0UHJvY2Vzc2VkPTB9fWNsYXNzIE9wZXJhdG9yTGlzdHtzdGF0aWMgQ0hVTktfU0laRT0xZTM7c3RhdGljIENIVU5LX1NJWkVfQUJPVVQ9dGhpcy5DSFVOS19TSVpFLTU7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MCx0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuX3N0cmVhbVNpbms9dDt0aGlzLmZuQXJyYXk9W107dGhpcy5hcmdzQXJyYXk9W107dGhpcy5vcHRpbWl6ZXI9IXR8fGUmci5SZW5kZXJpbmdJbnRlbnRGbGFnLk9QTElTVD9uZXcgTnVsbE9wdGltaXplcih0aGlzKTpuZXcgUXVldWVPcHRpbWl6ZXIodGhpcyk7dGhpcy5kZXBlbmRlbmNpZXM9bmV3IFNldDt0aGlzLl90b3RhbExlbmd0aD0wO3RoaXMud2VpZ2h0PTA7dGhpcy5fcmVzb2x2ZWQ9dD9udWxsOlByb21pc2UucmVzb2x2ZSgpfXNldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZChlKXt0aGlzLm9wdGltaXplci5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RofWdldCByZWFkeSgpe3JldHVybiB0aGlzLl9yZXNvbHZlZHx8dGhpcy5fc3RyZWFtU2luay5yZWFkeX1nZXQgdG90YWxMZW5ndGgoKXtyZXR1cm4gdGhpcy5fdG90YWxMZW5ndGgrdGhpcy5sZW5ndGh9YWRkT3AoZSx0KXt0aGlzLm9wdGltaXplci5wdXNoKGUsdCk7dGhpcy53ZWlnaHQrKzt0aGlzLl9zdHJlYW1TaW5rJiYodGhpcy53ZWlnaHQ+PU9wZXJhdG9yTGlzdC5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49T3BlcmF0b3JMaXN0LkNIVU5LX1NJWkVfQUJPVVQmJihlPT09ci5PUFMucmVzdG9yZXx8ZT09PXIuT1BTLmVuZFRleHQpKSYmdGhpcy5mbHVzaCgpfWFkZEltYWdlT3BzKGUsdCxhKXt2b2lkIDAhPT1hJiZ0aGlzLmFkZE9wKHIuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGFdKTt0aGlzLmFkZE9wKGUsdCk7dm9pZCAwIT09YSYmdGhpcy5hZGRPcChyLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX1hZGREZXBlbmRlbmN5KGUpe2lmKCF0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSkpe3RoaXMuZGVwZW5kZW5jaWVzLmFkZChlKTt0aGlzLmFkZE9wKHIuT1BTLmRlcGVuZGVuY3ksW2VdKX19YWRkRGVwZW5kZW5jaWVzKGUpe2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hZGREZXBlbmRlbmN5KHQpfWFkZE9wTGlzdChlKXtpZihlIGluc3RhbmNlb2YgT3BlcmF0b3JMaXN0KXtmb3IoY29uc3QgdCBvZiBlLmRlcGVuZGVuY2llcyl0aGlzLmRlcGVuZGVuY2llcy5hZGQodCk7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKXRoaXMuYWRkT3AoZS5mbkFycmF5W3RdLGUuYXJnc0FycmF5W3RdKX1lbHNlKDAsci53YXJuKSgnYWRkT3BMaXN0IC0gaWdub3JpbmcgaW52YWxpZCAib3BMaXN0IiBwYXJhbWV0ZXIuJyl9Z2V0SVIoKXtyZXR1cm57Zm5BcnJheTp0aGlzLmZuQXJyYXksYXJnc0FycmF5OnRoaXMuYXJnc0FycmF5LGxlbmd0aDp0aGlzLmxlbmd0aH19Z2V0IF90cmFuc2ZlcnMoKXtjb25zdCBlPVtdLHtmbkFycmF5OnQsYXJnc0FycmF5OmEsbGVuZ3RoOm59PXRoaXM7Zm9yKGxldCBpPTA7aTxuO2krKylzd2l0Y2godFtpXSl7Y2FzZSByLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDpjYXNlIHIuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6Y2FzZSByLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6Y29uc3QgdD1hW2ldWzBdOyF0LmNhY2hlZCYmdC5kYXRhPy5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmZS5wdXNoKHQuZGF0YS5idWZmZXIpfXJldHVybiBlfWZsdXNoKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMub3B0aW1pemVyLmZsdXNoKCk7Y29uc3QgYT10aGlzLmxlbmd0aDt0aGlzLl90b3RhbExlbmd0aCs9YTt0aGlzLl9zdHJlYW1TaW5rLmVucXVldWUoe2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsYXN0Q2h1bms6ZSxzZXBhcmF0ZUFubm90czp0LGxlbmd0aDphfSwxLHRoaXMuX3RyYW5zZmVycyk7dGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTt0aGlzLmZuQXJyYXkubGVuZ3RoPTA7dGhpcy5hcmdzQXJyYXkubGVuZ3RoPTA7dGhpcy53ZWlnaHQ9MDt0aGlzLm9wdGltaXplci5yZXNldCgpfX10Lk9wZXJhdG9yTGlzdD1PcGVyYXRvckxpc3R9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QREZJbWFnZT12b2lkIDA7YSg4NCk7YSg5Myk7YSg5NCk7YSg5Nyk7YSg5OSk7YSgxMDEpO2EoMTA1KTthKDEwOCk7YSgxMTUpO2EoMik7dmFyIHI9YSgxNDUpLG49YSgxNzkpLGk9YSgxNTIpLHM9YSgxNjMpLG89YSgxNjkpLGM9YSgyMTMpLGw9YSgxNzcpLGg9YSgxODEpLHU9YSgxNTEpO2Z1bmN0aW9uIGRlY29kZUFuZENsYW1wKGUsdCxhLHIpeyhlPXQrZSphKTwwP2U9MDplPnImJihlPXIpO3JldHVybiBlfWZ1bmN0aW9uIHJlc2l6ZUltYWdlTWFzayhlLHQsYSxyLG4saSl7Y29uc3Qgcz1uKmk7bGV0IG87bz10PD04P25ldyBVaW50OEFycmF5KHMpOnQ8PTE2P25ldyBVaW50MTZBcnJheShzKTpuZXcgVWludDMyQXJyYXkocyk7Y29uc3QgYz1hL24sbD1yL2k7bGV0IGgsdSxkLGYsZz0wO2NvbnN0IHA9bmV3IFVpbnQxNkFycmF5KG4pLG09YTtmb3IoaD0wO2g8bjtoKyspcFtoXT1NYXRoLmZsb29yKGgqYyk7Zm9yKGg9MDtoPGk7aCsrKXtkPU1hdGguZmxvb3IoaCpsKSptO2Zvcih1PTA7dTxuO3UrKyl7Zj1kK3BbdV07b1tnKytdPWVbZl19fXJldHVybiBvfWNsYXNzIFBERkltYWdle2NvbnN0cnVjdG9yKGUpe2xldHt4cmVmOnQscmVzOmEsaW1hZ2U6bixpc0lubGluZTpvPSExLHNtYXNrOmM9bnVsbCxtYXNrOmw9bnVsbCxpc01hc2s6ZD0hMSxwZGZGdW5jdGlvbkZhY3Rvcnk6Zixsb2NhbENvbG9yU3BhY2VDYWNoZTpnfT1lO3RoaXMuaW1hZ2U9bjtjb25zdCBwPW4uZGljdCxtPXAuZ2V0KCJGIiwiRmlsdGVyIik7bGV0IGI7aWYobSBpbnN0YW5jZW9mIHUuTmFtZSliPW0ubmFtZTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobSkpe2NvbnN0IGU9dC5mZXRjaElmUmVmKG1bMF0pO2UgaW5zdGFuY2VvZiB1Lk5hbWUmJihiPWUubmFtZSl9c3dpdGNoKGIpe2Nhc2UiSlBYRGVjb2RlIjpjb25zdCBlPW5ldyBoLkpweEltYWdlO2UucGFyc2VJbWFnZVByb3BlcnRpZXMobi5zdHJlYW0pO24uc3RyZWFtLnJlc2V0KCk7bi53aWR0aD1lLndpZHRoO24uaGVpZ2h0PWUuaGVpZ2h0O24uYml0c1BlckNvbXBvbmVudD1lLmJpdHNQZXJDb21wb25lbnQ7bi5udW1Db21wcz1lLmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpuLmJpdHNQZXJDb21wb25lbnQ9MTtuLm51bUNvbXBzPTF9bGV0IHk9cC5nZXQoIlciLCJXaWR0aCIpLHc9cC5nZXQoIkgiLCJIZWlnaHQiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKG4ud2lkdGgpJiZuLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIobi5oZWlnaHQpJiZuLmhlaWdodD4wJiYobi53aWR0aCE9PXl8fG4uaGVpZ2h0IT09dykpeygwLHIud2FybikoIlBERkltYWdlIC0gdXNpbmcgdGhlIFdpZHRoL0hlaWdodCBvZiB0aGUgaW1hZ2UgZGF0YSwgcmF0aGVyIHRoYW4gdGhlIGltYWdlIGRpY3Rpb25hcnkuIik7eT1uLndpZHRoO3c9bi5oZWlnaHR9aWYoeTwxfHx3PDEpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgaW1hZ2Ugd2lkdGg6ICR7eX0gb3IgaGVpZ2h0OiAke3d9YCk7dGhpcy53aWR0aD15O3RoaXMuaGVpZ2h0PXc7dGhpcy5pbnRlcnBvbGF0ZT1wLmdldCgiSSIsIkludGVycG9sYXRlIik7dGhpcy5pbWFnZU1hc2s9cC5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExO3RoaXMubWF0dGU9cC5nZXQoIk1hdHRlIil8fCExO2xldCBTPW4uYml0c1BlckNvbXBvbmVudDtpZighUyl7Uz1wLmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpO2lmKCFTKXtpZighdGhpcy5pbWFnZU1hc2spdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAke3RoaXMuaW1hZ2VNYXNrfWApO1M9MX19dGhpcy5icGM9UztpZighdGhpcy5pbWFnZU1hc2spe2xldCBlPXAuZ2V0UmF3KCJDUyIpfHxwLmdldFJhdygiQ29sb3JTcGFjZSIpO2lmKCFlKXsoMCxyLmluZm8pKCJKUFggaW1hZ2VzICh3aGljaCBkbyBub3QgcmVxdWlyZSBjb2xvciBzcGFjZXMpIik7c3dpdGNoKG4ubnVtQ29tcHMpe2Nhc2UgMTplPXUuTmFtZS5nZXQoIkRldmljZUdyYXkiKTticmVhaztjYXNlIDM6ZT11Lk5hbWUuZ2V0KCJEZXZpY2VSR0IiKTticmVhaztjYXNlIDQ6ZT11Lk5hbWUuZ2V0KCJEZXZpY2VDTVlLIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEpQWCBpbWFnZXMgd2l0aCAke24ubnVtQ29tcHN9IGNvbG9yIGNvbXBvbmVudHMgbm90IHN1cHBvcnRlZC5gKX19dGhpcy5jb2xvclNwYWNlPXMuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZSx4cmVmOnQscmVzb3VyY2VzOm8/YTpudWxsLHBkZkZ1bmN0aW9uRmFjdG9yeTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmd9KTt0aGlzLm51bUNvbXBzPXRoaXMuY29sb3JTcGFjZS5udW1Db21wc310aGlzLmRlY29kZT1wLmdldEFycmF5KCJEIiwiRGVjb2RlIik7dGhpcy5uZWVkc0RlY29kZT0hMTtpZih0aGlzLmRlY29kZSYmKHRoaXMuY29sb3JTcGFjZSYmIXRoaXMuY29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsUyl8fGQmJiFzLkNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLDEpKSl7dGhpcy5uZWVkc0RlY29kZT0hMDtjb25zdCBlPSgxPDxTKS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdO3RoaXMuZGVjb2RlQWRkZW5kcz1bXTtjb25zdCB0PSJJbmRleGVkIj09PXRoaXMuY29sb3JTcGFjZT8ubmFtZTtmb3IobGV0IGE9MCxyPTA7YTx0aGlzLmRlY29kZS5sZW5ndGg7YSs9MiwrK3Ipe2NvbnN0IG49dGhpcy5kZWNvZGVbYV0saT10aGlzLmRlY29kZVthKzFdO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzW3JdPXQ/KGktbikvZTppLW47dGhpcy5kZWNvZGVBZGRlbmRzW3JdPXQ/bjplKm59fWlmKGMpdGhpcy5zbWFzaz1uZXcgUERGSW1hZ2Uoe3hyZWY6dCxyZXM6YSxpbWFnZTpjLGlzSW5saW5lOm8scGRmRnVuY3Rpb25GYWN0b3J5OmYsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Z30pO2Vsc2UgaWYobClpZihsIGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtKXtsLmRpY3QuZ2V0KCJJTSIsIkltYWdlTWFzayIpP3RoaXMubWFzaz1uZXcgUERGSW1hZ2Uoe3hyZWY6dCxyZXM6YSxpbWFnZTpsLGlzSW5saW5lOm8saXNNYXNrOiEwLHBkZkZ1bmN0aW9uRmFjdG9yeTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmd9KTooMCxyLndhcm4pKCJJZ25vcmluZyAvTWFzayBpbiBpbWFnZSB3aXRob3V0IC9JbWFnZU1hc2suIil9ZWxzZSB0aGlzLm1hc2s9bH1zdGF0aWMgYXN5bmMgYnVpbGRJbWFnZShlKXtsZXR7eHJlZjp0LHJlczphLGltYWdlOm4saXNJbmxpbmU6cz0hMSxwZGZGdW5jdGlvbkZhY3Rvcnk6byxsb2NhbENvbG9yU3BhY2VDYWNoZTpjfT1lO2NvbnN0IGw9bjtsZXQgaD1udWxsLHU9bnVsbDtjb25zdCBkPW4uZGljdC5nZXQoIlNNYXNrIiksZj1uLmRpY3QuZ2V0KCJNYXNrIik7ZD9kIGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP2g9ZDooMCxyLndhcm4pKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOmYmJihmIGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KGYpP3U9ZjooMCxyLndhcm4pKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpO3JldHVybiBuZXcgUERGSW1hZ2Uoe3hyZWY6dCxyZXM6YSxpbWFnZTpsLGlzSW5saW5lOnMsc21hc2s6aCxtYXNrOnUscGRmRnVuY3Rpb25GYWN0b3J5Om8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Y30pfXN0YXRpYyBjcmVhdGVSYXdNYXNrKGUpe2xldHtpbWdBcnJheTp0LHdpZHRoOmEsaGVpZ2h0OnIsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06bixpbnZlcnNlRGVjb2RlOmksaW50ZXJwb2xhdGU6c309ZTtjb25zdCBvPShhKzc+PjMpKnIsYz10LmJ5dGVMZW5ndGg7bGV0IGwsaDtpZighbnx8aSYmIShvPT09YykpaWYoaSl7bD1uZXcgVWludDhBcnJheShvKTtsLnNldCh0KTtsLmZpbGwoMjU1LGMpfWVsc2UgbD1uZXcgVWludDhBcnJheSh0KTtlbHNlIGw9dDtpZihpKWZvcihoPTA7aDxjO2grKylsW2hdXj0yNTU7cmV0dXJue2RhdGE6bCx3aWR0aDphLGhlaWdodDpyLGludGVycG9sYXRlOnN9fXN0YXRpYyBhc3luYyBjcmVhdGVNYXNrKGUpe2xldHtpbWdBcnJheTp0LHdpZHRoOmEsaGVpZ2h0OmksaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06cyxpbnZlcnNlRGVjb2RlOm8saW50ZXJwb2xhdGU6bCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpoPSExfT1lO2NvbnN0IHU9MT09PWEmJjE9PT1pJiZvPT09KDA9PT10Lmxlbmd0aHx8ISEoMTI4JnRbMF0pKTtpZih1KXJldHVybntpc1NpbmdsZU9wYXF1ZVBpeGVsOnV9O2lmKGgpe2lmKGMuSW1hZ2VSZXNpemVyLm5lZWRzVG9CZVJlc2l6ZWQoYSxpKSl7Y29uc3QgZT1uZXcgVWludDhDbGFtcGVkQXJyYXkoYSppKjQpOygwLG4uY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEpKHtzcmM6dCxkZXN0OmUsd2lkdGg6YSxoZWlnaHQ6aSxub25CbGFja0NvbG9yOjAsaW52ZXJzZURlY29kZTpvfSk7cmV0dXJuIGMuSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKHtraW5kOnIuSW1hZ2VLaW5kLlJHQkFfMzJCUFAsZGF0YTplLHdpZHRoOmEsaGVpZ2h0OmksaW50ZXJwb2xhdGU6bH0pfWNvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcyhhLGkpLHM9ZS5nZXRDb250ZXh0KCIyZCIpLGg9cy5jcmVhdGVJbWFnZURhdGEoYSxpKTsoMCxuLmNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKSh7c3JjOnQsZGVzdDpoLmRhdGEsd2lkdGg6YSxoZWlnaHQ6aSxub25CbGFja0NvbG9yOjAsaW52ZXJzZURlY29kZTpvfSk7cy5wdXRJbWFnZURhdGEoaCwwLDApO3JldHVybntkYXRhOm51bGwsd2lkdGg6YSxoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpsLGJpdG1hcDplLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpfX1yZXR1cm4gdGhpcy5jcmVhdGVSYXdNYXNrKHtpbWdBcnJheTp0LHdpZHRoOmEsaGVpZ2h0OmksaW52ZXJzZURlY29kZTpvLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnMsaW50ZXJwb2xhdGU6bH0pfWdldCBkcmF3V2lkdGgoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCx0aGlzLnNtYXNrPy53aWR0aHx8MCx0aGlzLm1hc2s/LndpZHRofHwwKX1nZXQgZHJhd0hlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlaWdodCx0aGlzLnNtYXNrPy5oZWlnaHR8fDAsdGhpcy5tYXNrPy5oZWlnaHR8fDApfWRlY29kZUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMuYnBjLGE9dGhpcy5udW1Db21wcyxyPXRoaXMuZGVjb2RlQWRkZW5kcyxuPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLGk9KDE8PHQpLTE7bGV0IHMsbztpZigxPT09dCl7Zm9yKHM9MCxvPWUubGVuZ3RoO3M8bztzKyspZVtzXT0rIWVbc107cmV0dXJufWxldCBjPTA7Zm9yKHM9MCxvPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7czxvO3MrKylmb3IobGV0IHQ9MDt0PGE7dCsrKXtlW2NdPWRlY29kZUFuZENsYW1wKGVbY10sclt0XSxuW3RdLGkpO2MrK319Z2V0Q29tcG9uZW50cyhlKXtjb25zdCB0PXRoaXMuYnBjO2lmKDg9PT10KXJldHVybiBlO2NvbnN0IGE9dGhpcy53aWR0aCxyPXRoaXMuaGVpZ2h0LG49dGhpcy5udW1Db21wcyxpPWEqcipuO2xldCBzLG89MDtzPXQ8PTg/bmV3IFVpbnQ4QXJyYXkoaSk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KGkpOm5ldyBVaW50MzJBcnJheShpKTtjb25zdCBjPWEqbixsPSgxPDx0KS0xO2xldCBoLHUsZD0wO2lmKDE9PT10KXtsZXQgdCxhLG47Zm9yKGxldCBpPTA7aTxyO2krKyl7YT1kKygtOCZjKTtuPWQrYztmb3IoO2Q8YTspe3U9ZVtvKytdO3NbZF09dT4+NyYxO3NbZCsxXT11Pj42JjE7c1tkKzJdPXU+PjUmMTtzW2QrM109dT4+NCYxO3NbZCs0XT11Pj4zJjE7c1tkKzVdPXU+PjImMTtzW2QrNl09dT4+MSYxO3NbZCs3XT0xJnU7ZCs9OH1pZihkPG4pe3U9ZVtvKytdO3Q9MTI4O2Zvcig7ZDxuOyl7c1tkKytdPSshISh1JnQpO3Q+Pj0xfX19fWVsc2V7bGV0IGE9MDt1PTA7Zm9yKGQ9MCxoPWk7ZDxoOysrZCl7aWYoZCVjPT0wKXt1PTA7YT0wfWZvcig7YTx0Oyl7dT11PDw4fGVbbysrXTthKz04fWNvbnN0IHI9YS10O2xldCBuPXU+PnI7bjwwP249MDpuPmwmJihuPWwpO3NbZF09bjt1Jj0oMTw8ciktMTthPXJ9fXJldHVybiBzfWZpbGxPcGFjaXR5KGUsdCxhLG4saSl7Y29uc3Qgcz10aGlzLnNtYXNrLG89dGhpcy5tYXNrO2xldCBjLGwsaCx1LGQsZjtpZihzKXtsPXMud2lkdGg7aD1zLmhlaWdodDtjPW5ldyBVaW50OENsYW1wZWRBcnJheShsKmgpO3MuZmlsbEdyYXlCdWZmZXIoYyk7bD09PXQmJmg9PT1hfHwoYz1yZXNpemVJbWFnZU1hc2soYyxzLmJwYyxsLGgsdCxhKSl9ZWxzZSBpZihvKWlmKG8gaW5zdGFuY2VvZiBQREZJbWFnZSl7bD1vLndpZHRoO2g9by5oZWlnaHQ7Yz1uZXcgVWludDhDbGFtcGVkQXJyYXkobCpoKTtvLm51bUNvbXBzPTE7by5maWxsR3JheUJ1ZmZlcihjKTtmb3IodT0wLGQ9bCpoO3U8ZDsrK3UpY1t1XT0yNTUtY1t1XTtsPT09dCYmaD09PWF8fChjPXJlc2l6ZUltYWdlTWFzayhjLG8uYnBjLGwsaCx0LGEpKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG8pKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJVbmtub3duIG1hc2sgZm9ybWF0LiIpO3tjPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KmEpO2NvbnN0IGU9dGhpcy5udW1Db21wcztmb3IodT0wLGQ9dCphO3U8ZDsrK3Upe2xldCB0PTA7Y29uc3QgYT11KmU7Zm9yKGY9MDtmPGU7KytmKXtjb25zdCBlPWlbYStmXSxyPTIqZjtpZihlPG9bcl18fGU+b1tyKzFdKXt0PTI1NTticmVha319Y1t1XT10fX19aWYoYylmb3IodT0wLGY9MyxkPXQqbjt1PGQ7Kyt1LGYrPTQpZVtmXT1jW3VdO2Vsc2UgZm9yKHU9MCxmPTMsZD10Km47dTxkOysrdSxmKz00KWVbZl09MjU1fXVuZG9QcmVibGVuZChlLHQsYSl7Y29uc3Qgcj10aGlzLnNtYXNrPy5tYXR0ZTtpZighcilyZXR1cm47Y29uc3Qgbj10aGlzLmNvbG9yU3BhY2UuZ2V0UmdiKHIsMCksaT1uWzBdLHM9blsxXSxvPW5bMl0sYz10KmEqNDtmb3IobGV0IHQ9MDt0PGM7dCs9NCl7Y29uc3QgYT1lW3QrM107aWYoMD09PWEpe2VbdF09MjU1O2VbdCsxXT0yNTU7ZVt0KzJdPTI1NTtjb250aW51ZX1jb25zdCByPTI1NS9hO2VbdF09KGVbdF0taSkqcitpO2VbdCsxXT0oZVt0KzFdLXMpKnIrcztlW3QrMl09KGVbdCsyXS1vKSpyK299fWFzeW5jIGNyZWF0ZUltYWdlRGF0YSgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGE9dGhpcy5kcmF3V2lkdGgsbj10aGlzLmRyYXdIZWlnaHQsaT17d2lkdGg6YSxoZWlnaHQ6bixpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlLGtpbmQ6MCxkYXRhOm51bGx9LHM9dGhpcy5udW1Db21wcyxvPXRoaXMud2lkdGgsaD10aGlzLmhlaWdodCx1PXRoaXMuYnBjLGQ9bypzKnUrNz4+MyxmPXQmJmMuSW1hZ2VSZXNpemVyLm5lZWRzVG9CZVJlc2l6ZWQoYSxuKTtpZighZSl7bGV0IGU7IkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT11P2U9ci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PXV8fHRoaXMubmVlZHNEZWNvZGV8fChlPXIuSW1hZ2VLaW5kLlJHQl8yNEJQUCk7aWYoZSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJmE9PT1vJiZuPT09aCl7Y29uc3Qgcz10aGlzLmdldEltYWdlQnl0ZXMoaCpkLHt9KTtpZih0KXJldHVybiBmP2MuSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKHtkYXRhOnMsa2luZDplLHdpZHRoOmEsaGVpZ2h0Om4saW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX0sdGhpcy5uZWVkc0RlY29kZSk6dGhpcy5jcmVhdGVCaXRtYXAoZSxvLGgscyk7aS5raW5kPWU7aS5kYXRhPXM7aWYodGhpcy5uZWVkc0RlY29kZSl7KDAsci5hc3NlcnQpKGU9PT1yLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCwiUERGSW1hZ2UuY3JlYXRlSW1hZ2VEYXRhOiBUaGUgaW1hZ2UgbXVzdCBiZSBncmF5c2NhbGUuIik7Y29uc3QgdD1pLmRhdGE7Zm9yKGxldCBlPTAsYT10Lmxlbmd0aDtlPGE7ZSsrKXRbZV1ePTI1NX1yZXR1cm4gaX1pZih0aGlzLmltYWdlIGluc3RhbmNlb2YgbC5KcGVnU3RyZWFtJiYhdGhpcy5zbWFzayYmIXRoaXMubWFzayYmIXRoaXMubmVlZHNEZWNvZGUpe2xldCBlPWgqZDtpZih0JiYhZil7bGV0IHQ9ITE7c3dpdGNoKHRoaXMuY29sb3JTcGFjZS5uYW1lKXtjYXNlIkRldmljZUdyYXkiOmUqPTQ7dD0hMDticmVhaztjYXNlIkRldmljZVJHQiI6ZT1lLzMqNDt0PSEwO2JyZWFrO2Nhc2UiRGV2aWNlQ01ZSyI6dD0hMH1pZih0KXtjb25zdCB0PXRoaXMuZ2V0SW1hZ2VCeXRlcyhlLHtkcmF3V2lkdGg6YSxkcmF3SGVpZ2h0Om4sZm9yY2VSR0JBOiEwfSk7cmV0dXJuIHRoaXMuY3JlYXRlQml0bWFwKHIuSW1hZ2VLaW5kLlJHQkFfMzJCUFAsYSxuLHQpfX1lbHNlIHN3aXRjaCh0aGlzLmNvbG9yU3BhY2UubmFtZSl7Y2FzZSJEZXZpY2VHcmF5IjplKj0zO2Nhc2UiRGV2aWNlUkdCIjpjYXNlIkRldmljZUNNWUsiOmkua2luZD1yLkltYWdlS2luZC5SR0JfMjRCUFA7aS5kYXRhPXRoaXMuZ2V0SW1hZ2VCeXRlcyhlLHtkcmF3V2lkdGg6YSxkcmF3SGVpZ2h0Om4sZm9yY2VSR0I6ITB9KTtyZXR1cm4gZj9jLkltYWdlUmVzaXplci5jcmVhdGVJbWFnZShpKTppfX19Y29uc3QgZz10aGlzLmdldEltYWdlQnl0ZXMoaCpkLHtpbnRlcm5hbDohMH0pLHA9MHxnLmxlbmd0aC9kKm4vaCxtPXRoaXMuZ2V0Q29tcG9uZW50cyhnKTtsZXQgYix5LHcsUyx4LEM7aWYodCYmIWYpe3c9bmV3IE9mZnNjcmVlbkNhbnZhcyhhLG4pO1M9dy5nZXRDb250ZXh0KCIyZCIpO3g9Uy5jcmVhdGVJbWFnZURhdGEoYSxuKTtDPXguZGF0YX1pLmtpbmQ9ci5JbWFnZUtpbmQuUkdCQV8zMkJQUDtpZihlfHx0aGlzLnNtYXNrfHx0aGlzLm1hc2spe3QmJiFmfHwoQz1uZXcgVWludDhDbGFtcGVkQXJyYXkoYSpuKjQpKTtiPTE7eT0hMDt0aGlzLmZpbGxPcGFjaXR5KEMsYSxuLHAsbSl9ZWxzZXtpZighdHx8Zil7aS5raW5kPXIuSW1hZ2VLaW5kLlJHQl8yNEJQUDtDPW5ldyBVaW50OENsYW1wZWRBcnJheShhKm4qMyk7Yj0wfWVsc2V7bmV3IFVpbnQzMkFycmF5KEMuYnVmZmVyKS5maWxsKHIuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUpO2I9MX15PSExfXRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKG0pO3RoaXMuY29sb3JTcGFjZS5maWxsUmdiKEMsbyxoLGEsbixwLHUsbSxiKTt5JiZ0aGlzLnVuZG9QcmVibGVuZChDLGEscCk7aWYodCYmIWYpe1MucHV0SW1hZ2VEYXRhKHgsMCwwKTtyZXR1cm57ZGF0YTpudWxsLHdpZHRoOmEsaGVpZ2h0Om4sYml0bWFwOncudHJhbnNmZXJUb0ltYWdlQml0bWFwKCksaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX19aS5kYXRhPUM7cmV0dXJuIGY/Yy5JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2UoaSk6aX1maWxsR3JheUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYFJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICR7dH1gKTtjb25zdCBhPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxpPXRoaXMuYnBjLHM9YSp0KmkrNz4+MyxvPXRoaXMuZ2V0SW1hZ2VCeXRlcyhuKnMse2ludGVybmFsOiEwfSksYz10aGlzLmdldENvbXBvbmVudHMobyk7bGV0IGwsaDtpZigxPT09aSl7aD1hKm47aWYodGhpcy5uZWVkc0RlY29kZSlmb3IobD0wO2w8aDsrK2wpZVtsXT1jW2xdLTEmMjU1O2Vsc2UgZm9yKGw9MDtsPGg7KytsKWVbbF09MjU1Ji1jW2xdO3JldHVybn10aGlzLm5lZWRzRGVjb2RlJiZ0aGlzLmRlY29kZUJ1ZmZlcihjKTtoPWEqbjtjb25zdCB1PTI1NS8oKDE8PGkpLTEpO2ZvcihsPTA7bDxoOysrbCllW2xdPXUqY1tsXX1jcmVhdGVCaXRtYXAoZSx0LGEsaSl7Y29uc3Qgcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKHQsYSksbz1zLmdldENvbnRleHQoIjJkIik7bGV0IGM7aWYoZT09PXIuSW1hZ2VLaW5kLlJHQkFfMzJCUFApYz1uZXcgSW1hZ2VEYXRhKGksdCxhKTtlbHNle2M9by5jcmVhdGVJbWFnZURhdGEodCxhKTsoMCxuLmNvbnZlcnRUb1JHQkEpKHtraW5kOmUsc3JjOmksZGVzdDpuZXcgVWludDMyQXJyYXkoYy5kYXRhLmJ1ZmZlciksd2lkdGg6dCxoZWlnaHQ6YSxpbnZlcnNlRGVjb2RlOnRoaXMubmVlZHNEZWNvZGV9KX1vLnB1dEltYWdlRGF0YShjLDAsMCk7cmV0dXJue2RhdGE6bnVsbCx3aWR0aDp0LGhlaWdodDphLGJpdG1hcDpzLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGV9fWdldEltYWdlQnl0ZXMoZSx0KXtsZXR7ZHJhd1dpZHRoOmEsZHJhd0hlaWdodDpuLGZvcmNlUkdCQTppPSExLGZvcmNlUkdCOnM9ITEsaW50ZXJuYWw6Yz0hMX09dDt0aGlzLmltYWdlLnJlc2V0KCk7dGhpcy5pbWFnZS5kcmF3V2lkdGg9YXx8dGhpcy53aWR0aDt0aGlzLmltYWdlLmRyYXdIZWlnaHQ9bnx8dGhpcy5oZWlnaHQ7dGhpcy5pbWFnZS5mb3JjZVJHQkE9ISFpO3RoaXMuaW1hZ2UuZm9yY2VSR0I9ISFzO2NvbnN0IGw9dGhpcy5pbWFnZS5nZXRCeXRlcyhlKTtpZihjfHx0aGlzLmltYWdlIGluc3RhbmNlb2Ygby5EZWNvZGVTdHJlYW0pcmV0dXJuIGw7KDAsci5hc3NlcnQpKGwgaW5zdGFuY2VvZiBVaW50OEFycmF5LCdQREZJbWFnZS5nZXRJbWFnZUJ5dGVzOiBVbnN1cHBvcnRlZCAiaW1hZ2VCeXRlcyIgdHlwZS4nKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobCl9fXQuUERGSW1hZ2U9UERGSW1hZ2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5DYXRhbG9nPXZvaWQgMDthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxNDApO2EoMik7dmFyIHI9YSgxNTApLG49YSgxNDUpLGk9YSgxNTEpLHM9YSgyMTgpLG89YSgxNTIpLGM9YSgyMTkpLGw9YSgxNjMpLGg9YSgyMjApLHU9YSgyMTApLGQ9YSgyMjEpLGY9YSgyMjMpO2Z1bmN0aW9uIGZldGNoRGVzdGluYXRpb24oZSl7ZSBpbnN0YW5jZW9mIGkuRGljdCYmKGU9ZS5nZXQoIkQiKSk7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpudWxsfWNsYXNzIENhdGFsb2d7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnBkZk1hbmFnZXI9ZTt0aGlzLnhyZWY9dDt0aGlzLl9jYXREaWN0PXQuZ2V0Q2F0YWxvZ09iaigpO2lmKCEodGhpcy5fY2F0RGljdCBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsO3RoaXMuZm9udENhY2hlPW5ldyBpLlJlZlNldENhY2hlO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1uZXcgTWFwO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW5ldyBNYXA7dGhpcy5nbG9iYWxJbWFnZUNhY2hlPW5ldyB1Lkdsb2JhbEltYWdlQ2FjaGU7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGU7dGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZTt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IGkuUmVmU2V0O3RoaXMuc3lzdGVtRm9udENhY2hlPW5ldyBNYXB9Y2xvbmVEaWN0KCl7cmV0dXJuIHRoaXMuX2NhdERpY3QuY2xvbmUoKX1nZXQgdmVyc2lvbigpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlZlcnNpb24iKTtpZihlIGluc3RhbmNlb2YgaS5OYW1lKXtpZihyLlBERl9WRVJTSU9OX1JFR0VYUC50ZXN0KGUubmFtZSkpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZlcnNpb24iLGUubmFtZSk7KDAsbi53YXJuKShgSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAke2UubmFtZX1gKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmVyc2lvbiIsbnVsbCl9Z2V0IGxhbmcoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJMYW5nIik7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImxhbmciLCJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsKX1nZXQgbmVlZHNSZW5kZXJpbmcoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOZWVkc1JlbmRlcmluZyIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJuZWVkc1JlbmRlcmluZyIsImJvb2xlYW4iPT10eXBlb2YgZSYmZSl9Z2V0IGNvbGxlY3Rpb24oKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIGkuRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi5pbmZvKSgiQ2Fubm90IGZldGNoIENvbGxlY3Rpb24gZW50cnk7IGFzc3VtaW5nIG5vIGNvbGxlY3Rpb24gaXMgcHJlc2VudC4iKX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiY29sbGVjdGlvbiIsZSl9Z2V0IGFjcm9Gb3JtKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiQWNyb0Zvcm0iKTt0IGluc3RhbmNlb2YgaS5EaWN0JiZ0LnNpemU+MCYmKGU9dCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKCJDYW5ub3QgZmV0Y2ggQWNyb0Zvcm0gZW50cnk7IGFzc3VtaW5nIG5vIGZvcm1zIGFyZSBwcmVzZW50LiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJhY3JvRm9ybSIsZSl9Z2V0IGFjcm9Gb3JtUmVmKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiQWNyb0Zvcm0iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYWNyb0Zvcm1SZWYiLGUgaW5zdGFuY2VvZiBpLlJlZj9lOm51bGwpfWdldCBtZXRhZGF0YSgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIk1ldGFkYXRhIik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJtZXRhZGF0YSIsbnVsbCk7bGV0IHQ9bnVsbDt0cnl7Y29uc3QgYT10aGlzLnhyZWYuZmV0Y2goZSwhdGhpcy54cmVmLmVuY3J5cHQ/LmVuY3J5cHRNZXRhZGF0YSk7aWYoYSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmYS5kaWN0IGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPWEuZGljdC5nZXQoIlR5cGUiKSxyPWEuZGljdC5nZXQoIlN1YnR5cGUiKTtpZigoMCxpLmlzTmFtZSkoZSwiTWV0YWRhdGEiKSYmKDAsaS5pc05hbWUpKHIsIlhNTCIpKXtjb25zdCBlPSgwLG4uc3RyaW5nVG9VVEY4U3RyaW5nKShhLmdldFN0cmluZygpKTtlJiYodD1uZXcgZC5NZXRhZGF0YVBhcnNlcihlKS5zZXJpYWxpemFibGUpfX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKGBTa2lwcGluZyBpbnZhbGlkIE1ldGFkYXRhOiAiJHtlfSIuYCl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIix0KX1nZXQgbWFya0luZm8oKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiByLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJtYXJrSW5mbyIsZSl9X3JlYWRNYXJrSW5mbygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk1hcmtJbmZvIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtjb25zdCB0PXtNYXJrZWQ6ITEsVXNlclByb3BlcnRpZXM6ITEsU3VzcGVjdHM6ITF9O2Zvcihjb25zdCBhIGluIHQpe2NvbnN0IHI9ZS5nZXQoYSk7ImJvb2xlYW4iPT10eXBlb2YgciYmKHRbYV09cil9cmV0dXJuIHR9Z2V0IHN0cnVjdFRyZWVSb290KCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkU3RydWN0VHJlZVJvb3QoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSByZWFkIHRvIHN0cnVjdFRyZWVSb290IGluZm8uIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInN0cnVjdFRyZWVSb290IixlKX1fcmVhZFN0cnVjdFRyZWVSb290KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiU3RydWN0VHJlZVJvb3QiKSx0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO2lmKCEodCBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgZi5TdHJ1Y3RUcmVlUm9vdCh0LGUpO2EuaW5pdCgpO3JldHVybiBhfWdldCB0b3BsZXZlbFBhZ2VzRGljdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfWdldCBkb2N1bWVudE91dGxpbmUoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9X3JlYWREb2N1bWVudE91dGxpbmUoKXtsZXQgZT10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2U9ZS5nZXRSYXcoIkZpcnN0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKXJldHVybiBudWxsO2NvbnN0IHQ9e2l0ZW1zOltdfSxhPVt7b2JqOmUscGFyZW50OnR9XSxyPW5ldyBpLlJlZlNldDtyLnB1dChlKTtjb25zdCBzPXRoaXMueHJlZixvPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtmb3IoO2EubGVuZ3RoPjA7KXtjb25zdCB0PWEuc2hpZnQoKSxjPXMuZmV0Y2hJZlJlZih0Lm9iaik7aWYobnVsbD09PWMpY29udGludWU7aWYoIWMuaGFzKCJUaXRsZSIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTtjb25zdCBoPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YyxyZXN1bHRPYmo6aCxkb2NCYXNlVXJsOnRoaXMuYmFzZVVybCxkb2NBdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzfSk7Y29uc3QgdT1jLmdldCgiVGl0bGUiKSxkPWMuZ2V0KCJGIil8fDAsZj1jLmdldEFycmF5KCJDIiksZz1jLmdldCgiQ291bnQiKTtsZXQgcD1vOyFBcnJheS5pc0FycmF5KGYpfHwzIT09Zi5sZW5ndGh8fDA9PT1mWzBdJiYwPT09ZlsxXSYmMD09PWZbMl18fChwPWwuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZiwwKSk7Y29uc3QgbT17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodSksY29sb3I6cCxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKGcpP2c6dm9pZCAwLGJvbGQ6ISEoMiZkKSxpdGFsaWM6ISEoMSZkKSxpdGVtczpbXX07dC5wYXJlbnQuaXRlbXMucHVzaChtKTtlPWMuZ2V0UmF3KCJGaXJzdCIpO2lmKGUgaW5zdGFuY2VvZiBpLlJlZiYmIXIuaGFzKGUpKXthLnB1c2goe29iajplLHBhcmVudDptfSk7ci5wdXQoZSl9ZT1jLmdldFJhdygiTmV4dCIpO2lmKGUgaW5zdGFuY2VvZiBpLlJlZiYmIXIuaGFzKGUpKXthLnB1c2goe29iajplLHBhcmVudDp0LnBhcmVudH0pO3IucHV0KGUpfX1yZXR1cm4gdC5pdGVtcy5sZW5ndGg+MD90Lml0ZW1zOm51bGx9Z2V0IHBlcm1pc3Npb25zKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGVybWlzc2lvbnMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIHBlcm1pc3Npb25zLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJwZXJtaXNzaW9ucyIsZSl9X3JlYWRQZXJtaXNzaW9ucygpe2NvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtsZXQgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz0yKiozMjtjb25zdCBhPVtdO2Zvcihjb25zdCBlIGluIG4uUGVybWlzc2lvbkZsYWcpe2NvbnN0IHI9bi5QZXJtaXNzaW9uRmxhZ1tlXTt0JnImJmEucHVzaChyKX1yZXR1cm4gYX1nZXQgb3B0aW9uYWxDb250ZW50Q29uZmlnKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiT0NQcm9wZXJ0aWVzIik7aWYoIXQpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3QgYT10LmdldCgiRCIpO2lmKCFhKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IHI9dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShyKSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBzPVtdLG89W107Zm9yKGNvbnN0IGUgb2Ygcil7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKWNvbnRpbnVlO28ucHVzaChlKTtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO3MucHVzaCh7aWQ6ZS50b1N0cmluZygpLG5hbWU6InN0cmluZyI9PXR5cGVvZiB0LmdldCgiTmFtZSIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJOYW1lIikpOm51bGwsaW50ZW50OiJzdHJpbmciPT10eXBlb2YgdC5nZXQoIkludGVudCIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJJbnRlbnQiKSk6bnVsbH0pfWU9dGhpcy5fcmVhZE9wdGlvbmFsQ29udGVudENvbmZpZyhhLG8pO2UuZ3JvdXBzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHIuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLndhcm4pKGBVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogJHtlfWApfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfV9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGUsdCl7ZnVuY3Rpb24gcGFyc2VPbk9mZihlKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IHIgb2YgZSlyIGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXMocikmJmEucHVzaChyLnRvU3RyaW5nKCkpO3JldHVybiBhfWZ1bmN0aW9uIHBhcnNlT3JkZXIoZSl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtmb3IoY29uc3QgcyBvZiBlKXtpZihzIGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXMocykpe3IucHV0KHMpO24ucHVzaChzLnRvU3RyaW5nKCkpO2NvbnRpbnVlfWNvbnN0IGU9cGFyc2VOZXN0ZWRPcmRlcihzLGEpO2UmJm4ucHVzaChlKX1pZihhPjApcmV0dXJuIG47Y29uc3Qgcz1bXTtmb3IoY29uc3QgZSBvZiB0KXIuaGFzKGUpfHxzLnB1c2goZS50b1N0cmluZygpKTtzLmxlbmd0aCYmbi5wdXNoKHtuYW1lOm51bGwsb3JkZXI6c30pO3JldHVybiBufWZ1bmN0aW9uIHBhcnNlTmVzdGVkT3JkZXIoZSx0KXtpZigrK3Q+cyl7KDAsbi53YXJuKSgicGFyc2VOZXN0ZWRPcmRlciAtIHJlYWNoZWQgTUFYX05FU1RFRF9MRVZFTFMuIik7cmV0dXJuIG51bGx9Y29uc3Qgcj1hLmZldGNoSWZSZWYoZSk7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuIG51bGw7Y29uc3QgaT1hLmZldGNoSWZSZWYoclswXSk7aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBudWxsO2NvbnN0IG89cGFyc2VPcmRlcihyLnNsaWNlKDEpLHQpO3JldHVybiBvJiZvLmxlbmd0aD97bmFtZTooMCxuLnN0cmluZ1RvUERGU3RyaW5nKShpKSxvcmRlcjpvfTpudWxsfWNvbnN0IGE9dGhpcy54cmVmLHI9bmV3IGkuUmVmU2V0LHM9MTA7cmV0dXJue25hbWU6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiTmFtZSIpPygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJOYW1lIikpOm51bGwsY3JlYXRvcjoic3RyaW5nIj09dHlwZW9mIGUuZ2V0KCJDcmVhdG9yIik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIkNyZWF0b3IiKSk6bnVsbCxiYXNlU3RhdGU6ZS5nZXQoIkJhc2VTdGF0ZSIpaW5zdGFuY2VvZiBpLk5hbWU/ZS5nZXQoIkJhc2VTdGF0ZSIpLm5hbWU6bnVsbCxvbjpwYXJzZU9uT2ZmKGUuZ2V0KCJPTiIpKSxvZmY6cGFyc2VPbk9mZihlLmdldCgiT0ZGIikpLG9yZGVyOnBhcnNlT3JkZXIoZS5nZXQoIk9yZGVyIikpLGdyb3VwczpudWxsfX1zZXRBY3R1YWxOdW1QYWdlcygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3RoaXMuX2FjdHVhbE51bVBhZ2VzPWV9Z2V0IGhhc0FjdHVhbE51bVBhZ2VzKCl7cmV0dXJuIG51bGwhPT10aGlzLl9hY3R1YWxOdW1QYWdlc31nZXQgX3BhZ2VzQ291bnQoKXtjb25zdCBlPXRoaXMudG9wbGV2ZWxQYWdlc0RpY3QuZ2V0KCJDb3VudCIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGluIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJfcGFnZXNDb3VudCIsZSl9Z2V0IG51bVBhZ2VzKCl7cmV0dXJuIHRoaXMuaGFzQWN0dWFsTnVtUGFnZXM/dGhpcy5fYWN0dWFsTnVtUGFnZXM6dGhpcy5fcGFnZXNDb3VudH1nZXQgZGVzdGluYXRpb25zKCl7Y29uc3QgZT10aGlzLl9yZWFkRGVzdHMoKSx0PU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZSBpbnN0YW5jZW9mIHMuTmFtZVRyZWUpZm9yKGNvbnN0W2Escl1vZiBlLmdldEFsbCgpKXtjb25zdCBlPWZldGNoRGVzdGluYXRpb24ocik7ZSYmKHRbKDAsbi5zdHJpbmdUb1BERlN0cmluZykoYSldPWUpfWVsc2UgZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5mb3JFYWNoKChmdW5jdGlvbihlLGEpe2NvbnN0IHI9ZmV0Y2hEZXN0aW5hdGlvbihhKTtyJiYodFtlXT1yKX0pKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZGVzdGluYXRpb25zIix0KX1nZXREZXN0aW5hdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlYWREZXN0cygpO2lmKHQgaW5zdGFuY2VvZiBzLk5hbWVUcmVlKXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGE7Y29uc3Qgcj10aGlzLmRlc3RpbmF0aW9uc1tlXTtpZihyKXsoMCxuLndhcm4pKGBGb3VuZCAiJHtlfSIgYXQgYW4gaW5jb3JyZWN0IHBvc2l0aW9uIGluIHRoZSBOYW1lVHJlZS5gKTtyZXR1cm4gcn19ZWxzZSBpZih0IGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBhPWZldGNoRGVzdGluYXRpb24odC5nZXQoZSkpO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9X3JlYWREZXN0cygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGU/LmhhcygiRGVzdHMiKT9uZXcgcy5OYW1lVHJlZShlLmdldFJhdygiRGVzdHMiKSx0aGlzLnhyZWYpOnRoaXMuX2NhdERpY3QuaGFzKCJEZXN0cyIpP3RoaXMuX2NhdERpY3QuZ2V0KCJEZXN0cyIpOnZvaWQgMH1nZXQgcGFnZUxhYmVscygpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFBhZ2VMYWJlbHMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygci5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4ud2FybikoIlVuYWJsZSB0byByZWFkIHBhZ2UgbGFiZWxzLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJwYWdlTGFiZWxzIixlKX1fcmVhZFBhZ2VMYWJlbHMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7bGV0IGE9bnVsbCxvPSIiO2NvbnN0IGM9bmV3IHMuTnVtYmVyVHJlZShlLHRoaXMueHJlZikuZ2V0QWxsKCk7bGV0IGw9IiIsaD0xO2ZvcihsZXQgZT0wLHM9dGhpcy5udW1QYWdlcztlPHM7ZSsrKXtjb25zdCBzPWMuZ2V0KGUpO2lmKHZvaWQgMCE9PXMpe2lmKCEocyBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBhZ2VMYWJlbCBpcyBub3QgYSBkaWN0aW9uYXJ5LiIpO2lmKHMuaGFzKCJUeXBlIikmJiEoMCxpLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiUGFnZUxhYmVsIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtpZihzLmhhcygiUyIpKXtjb25zdCBlPXMuZ2V0KCJTIik7aWYoIShlIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTthPWUubmFtZX1lbHNlIGE9bnVsbDtpZihzLmhhcygiUCIpKXtjb25zdCBlPXMuZ2V0KCJQIik7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtvPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpfWVsc2Ugbz0iIjtpZihzLmhhcygiU3QiKSl7Y29uc3QgZT1zLmdldCgiU3QiKTtpZighKE51bWJlci5pc0ludGVnZXIoZSkmJmU+PTEpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIHN0YXJ0IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2g9ZX1lbHNlIGg9MX1zd2l0Y2goYSl7Y2FzZSJEIjpsPWg7YnJlYWs7Y2FzZSJSIjpjYXNlInIiOmw9KDAsci50b1JvbWFuTnVtZXJhbHMpKGgsInIiPT09YSk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNvbnN0IGU9MjYsdD0iYSI9PT1hPzk3OjY1LGk9aC0xO2w9U3RyaW5nLmZyb21DaGFyQ29kZSh0K2klZSkucmVwZWF0KE1hdGguZmxvb3IoaS9lKSsxKTticmVhaztkZWZhdWx0OmlmKGEpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYEludmFsaWQgc3R5bGUgIiR7YX0iIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LmApO2w9IiJ9dFtlXT1vK2w7aCsrfXJldHVybiB0fWdldCBwYWdlTGF5b3V0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiUGFnZUxheW91dCIpO2xldCB0PSIiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfWdldCBwYWdlTW9kZSgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VNb2RlIik7bGV0IHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfWdldCB2aWV3ZXJQcmVmZXJlbmNlcygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlZpZXdlclByZWZlcmVuY2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG51bGwpO2xldCB0PW51bGw7Zm9yKGNvbnN0IGEgb2YgZS5nZXRLZXlzKCkpe2NvbnN0IHI9ZS5nZXQoYSk7bGV0IHM7c3dpdGNoKGEpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiByJiYocz1yKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYociBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihyIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChyLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6cz1yLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYociBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goci5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnM9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnM9ci5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKHIgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjpzPXIubmFtZTticmVhaztkZWZhdWx0OnM9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOmlmKEFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoJTI9PTApe3IuZXZlcnkoKChlLHQsYSk9Pk51bWJlci5pc0ludGVnZXIoZSkmJmU+MCYmKDA9PT10fHxlPj1hW3QtMV0pJiZlPD10aGlzLm51bVBhZ2VzKSkmJihzPXIpfWJyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKHIpJiZyPjAmJihzPXIpO2JyZWFrO2RlZmF1bHQ6KDAsbi53YXJuKShgSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogJHthfS5gKTtjb250aW51ZX1pZih2b2lkIDAhPT1zKXt0fHwodD1PYmplY3QuY3JlYXRlKG51bGwpKTt0W2FdPXN9ZWxzZSgwLG4ud2FybikoYEJhZCB2YWx1ZSwgZm9yIGtleSAiJHthfSIsIGluIFZpZXdlclByZWZlcmVuY2VzOiAke3J9LmApfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsdCl9Z2V0IG9wZW5BY3Rpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJPcGVuQWN0aW9uIiksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGE9bmV3IGkuRGljdCh0aGlzLnhyZWYpO2Euc2V0KCJBIixlKTtjb25zdCByPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O0NhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6YSxyZXN1bHRPYmo6cn0pO0FycmF5LmlzQXJyYXkoci5kZXN0KT90LmRlc3Q9ci5kZXN0OnIuYWN0aW9uJiYodC5hY3Rpb249ci5hY3Rpb24pfWVsc2UgQXJyYXkuaXNBcnJheShlKSYmKHQuZGVzdD1lKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3BlbkFjdGlvbiIsKDAsbi5vYmplY3RTaXplKSh0KT4wP3Q6bnVsbCl9Z2V0IGF0dGFjaG1lbnRzKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJFbWJlZGRlZEZpbGVzIikpe2NvbnN0IGE9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLHJdb2YgYS5nZXRBbGwoKSl7Y29uc3QgYT1uZXcgaC5GaWxlU3BlYyhyLHRoaXMueHJlZik7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dFsoMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKV09YS5zZXJpYWxpemFibGV9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJhdHRhY2htZW50cyIsdCl9Z2V0IHhmYUltYWdlcygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiWEZBSW1hZ2VzIikpe2NvbnN0IGE9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIlhGQUltYWdlcyIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2Uscl1vZiBhLmdldEFsbCgpKXt0fHwodD1uZXcgaS5EaWN0KHRoaXMueHJlZikpO3Quc2V0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpLHIpfX1yZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhSW1hZ2VzIix0KX1fY29sbGVjdEphdmFTY3JpcHQoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7ZnVuY3Rpb24gYXBwZW5kSWZKYXZhU2NyaXB0RGljdChlLGEpe2lmKCEoYSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuO2lmKCEoMCxpLmlzTmFtZSkoYS5nZXQoIlMiKSwiSmF2YVNjcmlwdCIpKXJldHVybjtsZXQgcj1hLmdldCgiSlMiKTtpZihyIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKXI9ci5nZXRTdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgcilyZXR1cm47cj0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShyKS5yZXBsYWNlQWxsKCJcMCIsIiIpO3ImJih0fHw9bmV3IE1hcCkuc2V0KGUscil9aWYoZSBpbnN0YW5jZW9mIGkuRGljdCYmZS5oYXMoIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1uZXcgcy5OYW1lVHJlZShlLmdldFJhdygiSmF2YVNjcmlwdCIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2UsYV1vZiB0LmdldEFsbCgpKWFwcGVuZElmSmF2YVNjcmlwdERpY3QoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSksYSl9Y29uc3QgYT10aGlzLl9jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpO2EmJmFwcGVuZElmSmF2YVNjcmlwdERpY3QoIk9wZW5BY3Rpb24iLGEpO3JldHVybiB0fWdldCBqc0FjdGlvbnMoKXtjb25zdCBlPXRoaXMuX2NvbGxlY3RKYXZhU2NyaXB0KCk7bGV0IHQ9KDAsci5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMuX2NhdERpY3Qsbi5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSk7aWYoZSl7dHx8PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W2Escl1vZiBlKWEgaW4gdD90W2FdLnB1c2gocik6dFthXT1bcl19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImpzQWN0aW9ucyIsdCl9YXN5bmMgZm9udEZhbGxiYWNrKGUsdCl7Y29uc3QgYT1hd2FpdCBQcm9taXNlLmFsbCh0aGlzLmZvbnRDYWNoZSk7Zm9yKGNvbnN0IHIgb2YgYSlpZihyLmxvYWRlZE5hbWU9PT1lKXtyLmZhbGxiYWNrKHQpO3JldHVybn19YXN5bmMgY2xlYW51cCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07KDAsYy5jbGVhckdsb2JhbENhY2hlcykoKTt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuY2xlYXIoZSk7dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTt0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCk7dGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCk7Y29uc3QgdD1hd2FpdCBQcm9taXNlLmFsbCh0aGlzLmZvbnRDYWNoZSk7Zm9yKGNvbnN0e2RpY3Q6ZX1vZiB0KWRlbGV0ZSBlLmNhY2hlS2V5O3RoaXMuZm9udENhY2hlLmNsZWFyKCk7dGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuY2xlYXIoKTt0aGlzLnN5c3RlbUZvbnRDYWNoZS5jbGVhcigpfWFzeW5jIGdldFBhZ2VEaWN0KGUpe2NvbnN0IHQ9W3RoaXMudG9wbGV2ZWxQYWdlc0RpY3RdLGE9bmV3IGkuUmVmU2V0LHI9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIik7ciBpbnN0YW5jZW9mIGkuUmVmJiZhLnB1dChyKTtjb25zdCBzPXRoaXMueHJlZixvPXRoaXMucGFnZUtpZHNDb3VudENhY2hlLGM9dGhpcy5wYWdlSW5kZXhDYWNoZTtsZXQgbD0wO2Zvcig7dC5sZW5ndGg7KXtjb25zdCByPXQucG9wKCk7aWYociBpbnN0YW5jZW9mIGkuUmVmKXtjb25zdCBoPW8uZ2V0KHIpO2lmKGg+PTAmJmwraDw9ZSl7bCs9aDtjb250aW51ZX1pZihhLmhhcyhyKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIik7YS5wdXQocik7Y29uc3QgdT1hd2FpdCBzLmZldGNoQXN5bmMocik7aWYodSBpbnN0YW5jZW9mIGkuRGljdCl7bGV0IHQ9dS5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2YgaS5SZWYmJih0PWF3YWl0IHMuZmV0Y2hBc3luYyh0KSk7aWYoKDAsaS5pc05hbWUpKHQsIlBhZ2UiKXx8IXUuaGFzKCJLaWRzIikpe28uaGFzKHIpfHxvLnB1dChyLDEpO2MuaGFzKHIpfHxjLnB1dChyLGwpO2lmKGw9PT1lKXJldHVyblt1LHJdO2wrKztjb250aW51ZX19dC5wdXNoKHUpO2NvbnRpbnVlfWlmKCEociBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKTtjb25zdHtvYmpJZDpofT1yO2xldCB1PXIuZ2V0UmF3KCJDb3VudCIpO3UgaW5zdGFuY2VvZiBpLlJlZiYmKHU9YXdhaXQgcy5mZXRjaEFzeW5jKHUpKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHUpJiZ1Pj0wKXtoJiYhby5oYXMoaCkmJm8ucHV0KGgsdSk7aWYobCt1PD1lKXtsKz11O2NvbnRpbnVlfX1sZXQgZD1yLmdldFJhdygiS2lkcyIpO2QgaW5zdGFuY2VvZiBpLlJlZiYmKGQ9YXdhaXQgcy5mZXRjaEFzeW5jKGQpKTtpZighQXJyYXkuaXNBcnJheShkKSl7bGV0IHQ9ci5nZXRSYXcoIlR5cGUiKTt0IGluc3RhbmNlb2YgaS5SZWYmJih0PWF3YWl0IHMuZmV0Y2hBc3luYyh0KSk7aWYoKDAsaS5pc05hbWUpKHQsIlBhZ2UiKXx8IXIuaGFzKCJLaWRzIikpe2lmKGw9PT1lKXJldHVybltyLG51bGxdO2wrKztjb250aW51ZX10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKX1mb3IobGV0IGU9ZC5sZW5ndGgtMTtlPj0wO2UtLSl0LnB1c2goZFtlXSl9dGhyb3cgbmV3IEVycm9yKGBQYWdlIGluZGV4ICR7ZX0gbm90IGZvdW5kLmApfWFzeW5jIGdldEFsbFBhZ2VEaWN0cygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7aWdub3JlRXJyb3JzOnR9PXRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zLGE9W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0scz1uZXcgaS5SZWZTZXQsbz10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTtvIGluc3RhbmNlb2YgaS5SZWYmJnMucHV0KG8pO2NvbnN0IGM9bmV3IE1hcCxsPXRoaXMueHJlZixoPXRoaXMucGFnZUluZGV4Q2FjaGU7bGV0IHU9MDtmdW5jdGlvbiBhZGRQYWdlRGljdChlLHQpe3QmJiFoLmhhcyh0KSYmaC5wdXQodCx1KTtjLnNldCh1KyssW2UsdF0pfWZ1bmN0aW9uIGFkZFBhZ2VFcnJvcihhKXtpZihhIGluc3RhbmNlb2Ygci5YUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IGE7aWYoZSYmdCYmMD09PXUpeygwLG4ud2FybikoYGdldEFsbFBhZ2VEaWN0cyAtIFNraXBwaW5nIGludmFsaWQgZmlyc3QgcGFnZTogIiR7YX0iLmApO2E9aS5EaWN0LmVtcHR5fWMuc2V0KHUrKyxbYSxudWxsXSl9Zm9yKDthLmxlbmd0aD4wOyl7Y29uc3QgZT1hLmF0KC0xKSx7Y3VycmVudE5vZGU6dCxwb3NJbktpZHM6cn09ZTtsZXQgbz10LmdldFJhdygiS2lkcyIpO2lmKG8gaW5zdGFuY2VvZiBpLlJlZil0cnl7bz1hd2FpdCBsLmZldGNoQXN5bmMobyl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfWlmKCFBcnJheS5pc0FycmF5KG8pKXthZGRQYWdlRXJyb3IobmV3IG4uRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIikpO2JyZWFrfWlmKHI+PW8ubGVuZ3RoKXthLnBvcCgpO2NvbnRpbnVlfWNvbnN0IGM9b1tyXTtsZXQgaDtpZihjIGluc3RhbmNlb2YgaS5SZWYpe2lmKHMuaGFzKGMpKXthZGRQYWdlRXJyb3IobmV3IG4uRm9ybWF0RXJyb3IoIlBhZ2VzIHRyZWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlLiIpKTticmVha31zLnB1dChjKTt0cnl7aD1hd2FpdCBsLmZldGNoQXN5bmMoYyl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfX1lbHNlIGg9YztpZighKGggaW5zdGFuY2VvZiBpLkRpY3QpKXthZGRQYWdlRXJyb3IobmV3IG4uRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWQgcmVmZXJlbmNlIHBvaW50cyB0byB3cm9uZyB0eXBlIG9mIG9iamVjdC4iKSk7YnJlYWt9bGV0IHU9aC5nZXRSYXcoIlR5cGUiKTtpZih1IGluc3RhbmNlb2YgaS5SZWYpdHJ5e3U9YXdhaXQgbC5mZXRjaEFzeW5jKHUpfWNhdGNoKGUpe2FkZFBhZ2VFcnJvcihlKTticmVha30oMCxpLmlzTmFtZSkodSwiUGFnZSIpfHwhaC5oYXMoIktpZHMiKT9hZGRQYWdlRGljdChoLGMgaW5zdGFuY2VvZiBpLlJlZj9jOm51bGwpOmEucHVzaCh7Y3VycmVudE5vZGU6aCxwb3NJbktpZHM6MH0pO2UucG9zSW5LaWRzKyt9cmV0dXJuIGN9Z2V0UGFnZUluZGV4KGUpe2NvbnN0IHQ9dGhpcy5wYWdlSW5kZXhDYWNoZS5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO2NvbnN0IGE9dGhpcy54cmVmO2xldCByPTA7Y29uc3QgbmV4dD10PT5mdW5jdGlvbiBwYWdlc0JlZm9yZVJlZih0KXtsZXQgcixzPTA7cmV0dXJuIGEuZmV0Y2hBc3luYyh0KS50aGVuKChmdW5jdGlvbihhKXtpZigoMCxpLmlzUmVmc0VxdWFsKSh0LGUpJiYhKDAsaS5pc0RpY3QpKGEsIlBhZ2UiKSYmIShhIGluc3RhbmNlb2YgaS5EaWN0JiYhYS5oYXMoIlR5cGUiKSYmYS5oYXMoIkNvbnRlbnRzIikpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJUaGUgcmVmZXJlbmNlIGRvZXMgbm90IHBvaW50IHRvIGEgL1BhZ2UgZGljdGlvbmFyeS4iKTtpZighYSlyZXR1cm4gbnVsbDtpZighKGEgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3I9YS5nZXRSYXcoIlBhcmVudCIpO3JldHVybiBhLmdldEFzeW5jKCJQYXJlbnQiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtjb25zdCBvPVtdO2xldCBjPSExO2Zvcihjb25zdCByIG9mIGUpe2lmKCEociBpbnN0YW5jZW9mIGkuUmVmKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiS2lkIG11c3QgYmUgYSByZWZlcmVuY2UuIik7aWYoKDAsaS5pc1JlZnNFcXVhbCkocix0KSl7Yz0hMDticmVha31vLnB1c2goYS5mZXRjaEFzeW5jKHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIktpZCBub2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO2UuaGFzKCJDb3VudCIpP3MrPWUuZ2V0KCJDb3VudCIpOnMrK30pKSl9aWYoIWMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIktpZCByZWZlcmVuY2Ugbm90IGZvdW5kIGluIHBhcmVudCdzIGtpZHMuIik7cmV0dXJuIFByb21pc2UuYWxsKG8pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuW3Mscl19KSl9KSl9KHQpLnRoZW4oKHQ9PntpZighdCl7dGhpcy5wYWdlSW5kZXhDYWNoZS5wdXQoZSxyKTtyZXR1cm4gcn1jb25zdFthLG5dPXQ7cis9YTtyZXR1cm4gbmV4dChuKX0pKTtyZXR1cm4gbmV4dChlKX1nZXQgYmFzZVVybCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlVSSSIpO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IHQ9ZS5nZXQoIkJhc2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2NvbnN0IGU9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKGUpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLGUuaHJlZil9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJiYXNlVXJsIix0aGlzLnBkZk1hbmFnZXIuZG9jQmFzZVVybCl9c3RhdGljIHBhcnNlRGVzdERpY3Rpb25hcnkoZSl7bGV0e2Rlc3REaWN0OnQscmVzdWx0T2JqOmEsZG9jQmFzZVVybDpzPW51bGwsZG9jQXR0YWNobWVudHM6Yz1udWxsfT1lO2lmKCEodCBpbnN0YW5jZW9mIGkuRGljdCkpeygwLG4ud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJufWxldCBsLGgsdT10LmdldCgiQSIpO2lmKCEodSBpbnN0YW5jZW9mIGkuRGljdCkpaWYodC5oYXMoIkRlc3QiKSl1PXQuZ2V0KCJEZXN0Iik7ZWxzZXt1PXQuZ2V0KCJBQSIpO3UgaW5zdGFuY2VvZiBpLkRpY3QmJih1LmhhcygiRCIpP3U9dS5nZXQoIkQiKTp1LmhhcygiVSIpJiYodT11LmdldCgiVSIpKSl9aWYodSBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3QgZT11LmdldCgiUyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuTmFtZSkpeygwLG4ud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IEludmFsaWQgdHlwZSBpbiBBY3Rpb24gZGljdGlvbmFyeS4iKTtyZXR1cm59Y29uc3QgdD1lLm5hbWU7c3dpdGNoKHQpe2Nhc2UiUmVzZXRGb3JtIjpjb25zdCBlPXUuZ2V0KCJGbGFncyIpLHM9MD09KDEmKCJudW1iZXIiPT10eXBlb2YgZT9lOjApKSxkPVtdLGY9W107Zm9yKGNvbnN0IGUgb2YgdS5nZXQoIkZpZWxkcyIpfHxbXSllIGluc3RhbmNlb2YgaS5SZWY/Zi5wdXNoKGUudG9TdHJpbmcoKSk6InN0cmluZyI9PXR5cGVvZiBlJiZkLnB1c2goKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSkpO2EucmVzZXRGb3JtPXtmaWVsZHM6ZCxyZWZzOmYsaW5jbHVkZTpzfTticmVhaztjYXNlIlVSSSI6bD11LmdldCgiVVJJIik7bCBpbnN0YW5jZW9mIGkuTmFtZSYmKGw9Ii8iK2wubmFtZSk7YnJlYWs7Y2FzZSJHb1RvIjpoPXUuZ2V0KCJEIik7YnJlYWs7Y2FzZSJMYXVuY2giOmNhc2UiR29Ub1IiOmNvbnN0IGc9dS5nZXQoIkYiKTtnIGluc3RhbmNlb2YgaS5EaWN0P2w9Zy5nZXQoIkYiKXx8bnVsbDoic3RyaW5nIj09dHlwZW9mIGcmJihsPWcpO2xldCBwPXUuZ2V0KCJEIik7aWYocCl7cCBpbnN0YW5jZW9mIGkuTmFtZSYmKHA9cC5uYW1lKTtpZigic3RyaW5nIj09dHlwZW9mIGwpe2NvbnN0IGU9bC5zcGxpdCgiIyIpWzBdOyJzdHJpbmciPT10eXBlb2YgcD9sPWUrIiMiK3A6QXJyYXkuaXNBcnJheShwKSYmKGw9ZSsiIyIrSlNPTi5zdHJpbmdpZnkocCkpfX1jb25zdCBtPXUuZ2V0KCJOZXdXaW5kb3ciKTsiYm9vbGVhbiI9PXR5cGVvZiBtJiYoYS5uZXdXaW5kb3c9bSk7YnJlYWs7Y2FzZSJHb1RvRSI6Y29uc3QgYj11LmdldCgiVCIpO2xldCB5O2lmKGMmJmIgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9Yi5nZXQoIlIiKSx0PWIuZ2V0KCJOIik7KDAsaS5pc05hbWUpKGUsIkMiKSYmInN0cmluZyI9PXR5cGVvZiB0JiYoeT1jWygwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQpXSl9eT9hLmF0dGFjaG1lbnQ9eTooMCxuLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5pbXBsZW1lbnRlZCAiR29Ub0UiIGFjdGlvbi4nKTticmVhaztjYXNlIk5hbWVkIjpjb25zdCB3PXUuZ2V0KCJOIik7dyBpbnN0YW5jZW9mIGkuTmFtZSYmKGEuYWN0aW9uPXcubmFtZSk7YnJlYWs7Y2FzZSJTZXRPQ0dTdGF0ZSI6Y29uc3QgUz11LmdldCgiU3RhdGUiKSx4PXUuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkoUyl8fDA9PT1TLmxlbmd0aClicmVhaztjb25zdCBDPVtdO2Zvcihjb25zdCBlIG9mIFMpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6Y2FzZSJUb2dnbGUiOkMucHVzaChlLm5hbWUpfWVsc2UgZSBpbnN0YW5jZW9mIGkuUmVmJiZDLnB1c2goZS50b1N0cmluZygpKTtpZihDLmxlbmd0aCE9PVMubGVuZ3RoKWJyZWFrO2Euc2V0T0NHU3RhdGU9e3N0YXRlOkMscHJlc2VydmVSQjoiYm9vbGVhbiIhPXR5cGVvZiB4fHx4fTticmVhaztjYXNlIkphdmFTY3JpcHQiOmNvbnN0IHY9dS5nZXQoIkpTIik7bGV0IGs7diBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbT9rPXYuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiB2JiYoaz12KTtjb25zdCBPPWsmJigwLHIucmVjb3ZlckpzVVJMKSgoMCxuLnN0cmluZ1RvUERGU3RyaW5nKShrKSk7aWYoTyl7bD1PLnVybDthLm5ld1dpbmRvdz1PLm5ld1dpbmRvdzticmVha31kZWZhdWx0OmlmKCJKYXZhU2NyaXB0Ij09PXR8fCJTdWJtaXRGb3JtIj09PXQpYnJlYWs7KDAsbi53YXJuKShgcGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuc3VwcG9ydGVkIGFjdGlvbjogIiR7dH0iLmApfX1lbHNlIHQuaGFzKCJEZXN0IikmJihoPXQuZ2V0KCJEZXN0IikpO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7Y29uc3QgZT0oMCxuLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGwscyx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO2UmJihhLnVybD1lLmhyZWYpO2EudW5zYWZlVXJsPWx9aWYoaCl7aCBpbnN0YW5jZW9mIGkuTmFtZSYmKGg9aC5uYW1lKTsic3RyaW5nIj09dHlwZW9mIGg/YS5kZXN0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGgpOkFycmF5LmlzQXJyYXkoaCkmJihhLmRlc3Q9aCl9fX10LkNhdGFsb2c9Q2F0YWxvZ30sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk51bWJlclRyZWU9dC5OYW1lVHJlZT12b2lkIDA7YSgxNDApO3ZhciByPWEoMTUxKSxuPWEoMTQ1KTtjbGFzcyBOYW1lT3JOdW1iZXJUcmVle2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmNvbnN0cnVjdG9yPT09TmFtZU9yTnVtYmVyVHJlZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIik7dGhpcy5yb290PWU7dGhpcy54cmVmPXQ7dGhpcy5fdHlwZT1hfWdldEFsbCgpe2NvbnN0IGU9bmV3IE1hcDtpZighdGhpcy5yb290KXJldHVybiBlO2NvbnN0IHQ9dGhpcy54cmVmLGE9bmV3IHIuUmVmU2V0O2EucHV0KHRoaXMucm9vdCk7Y29uc3QgaT1bdGhpcy5yb290XTtmb3IoO2kubGVuZ3RoPjA7KXtjb25zdCBzPXQuZmV0Y2hJZlJlZihpLnNoaWZ0KCkpO2lmKCEocyBpbnN0YW5jZW9mIHIuRGljdCkpY29udGludWU7aWYocy5oYXMoIktpZHMiKSl7Y29uc3QgZT1zLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGUpKWNvbnRpbnVlO2Zvcihjb25zdCB0IG9mIGUpe2lmKGEuaGFzKHQpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGBEdXBsaWNhdGUgZW50cnkgaW4gIiR7dGhpcy5fdHlwZX0iIHRyZWUuYCk7aS5wdXNoKHQpO2EucHV0KHQpfWNvbnRpbnVlfWNvbnN0IG89cy5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShvKSlmb3IobGV0IGE9MCxyPW8ubGVuZ3RoO2E8cjthKz0yKWUuc2V0KHQuZmV0Y2hJZlJlZihvW2FdKSx0LmZldGNoSWZSZWYob1thKzFdKSl9cmV0dXJuIGV9Z2V0KGUpe2lmKCF0aGlzLnJvb3QpcmV0dXJuIG51bGw7Y29uc3QgdD10aGlzLnhyZWY7bGV0IGE9dC5mZXRjaElmUmVmKHRoaXMucm9vdCkscj0wO2Zvcig7YS5oYXMoIktpZHMiKTspe2lmKCsrcj4xMCl7KDAsbi53YXJuKShgU2VhcmNoIGRlcHRoIGxpbWl0IHJlYWNoZWQgZm9yICIke3RoaXMuX3R5cGV9IiB0cmVlLmApO3JldHVybiBudWxsfWNvbnN0IGk9YS5nZXQoIktpZHMiKTtpZighQXJyYXkuaXNBcnJheShpKSlyZXR1cm4gbnVsbDtsZXQgcz0wLG89aS5sZW5ndGgtMTtmb3IoO3M8PW87KXtjb25zdCByPXMrbz4+MSxuPXQuZmV0Y2hJZlJlZihpW3JdKSxjPW4uZ2V0KCJMaW1pdHMiKTtpZihlPHQuZmV0Y2hJZlJlZihjWzBdKSlvPXItMTtlbHNle2lmKCEoZT50LmZldGNoSWZSZWYoY1sxXSkpKXthPW47YnJlYWt9cz1yKzF9fWlmKHM+bylyZXR1cm4gbnVsbH1jb25zdCBpPWEuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkoaSkpe2xldCBhPTAscj1pLmxlbmd0aC0yO2Zvcig7YTw9cjspe2NvbnN0IG49YStyPj4xLHM9bisoMSZuKSxvPXQuZmV0Y2hJZlJlZihpW3NdKTtpZihlPG8pcj1zLTI7ZWxzZXtpZighKGU+bykpcmV0dXJuIHQuZmV0Y2hJZlJlZihpW3MrMV0pO2E9cysyfX19cmV0dXJuIG51bGx9fXQuTmFtZVRyZWU9Y2xhc3MgTmFtZVRyZWUgZXh0ZW5kcyBOYW1lT3JOdW1iZXJUcmVle2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LCJOYW1lcyIpfX07dC5OdW1iZXJUcmVlPWNsYXNzIE51bWJlclRyZWUgZXh0ZW5kcyBOYW1lT3JOdW1iZXJUcmVle2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LCJOdW1zIil9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNsZWFyR2xvYmFsQ2FjaGVzPWZ1bmN0aW9uIGNsZWFyR2xvYmFsQ2FjaGVzKCl7KDAsci5jbGVhclBhdHRlcm5DYWNoZXMpKCk7KDAsbi5jbGVhclByaW1pdGl2ZUNhY2hlcykoKTsoMCxpLmNsZWFyVW5pY29kZUNhY2hlcykoKX07dmFyIHI9YSgyMDEpLG49YSgxNTEpLGk9YSgxOTEpfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRmlsZVNwZWM9dm9pZCAwO3ZhciByPWEoMTQ1KSxuPWEoMTUyKSxpPWEoMTUxKTtmdW5jdGlvbiBwaWNrUGxhdGZvcm1JdGVtKGUpe3JldHVybiBlLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsfXQuRmlsZVNwZWM9Y2xhc3MgRmlsZVNwZWN7Y29uc3RydWN0b3IoZSx0KXtpZihlIGluc3RhbmNlb2YgaS5EaWN0KXt0aGlzLnhyZWY9dDt0aGlzLnJvb3Q9ZTtlLmhhcygiRlMiKSYmKHRoaXMuZnM9ZS5nZXQoIkZTIikpO3RoaXMuZGVzY3JpcHRpb249ZS5oYXMoIkRlc2MiKT8oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiRGVzYyIpKToiIjtlLmhhcygiUkYiKSYmKDAsci53YXJuKSgiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5jb250ZW50QXZhaWxhYmxlPSEwO2lmKCFlLmhhcygiRUYiKSl7dGhpcy5jb250ZW50QXZhaWxhYmxlPSExOygwLHIud2FybikoIk5vbi1lbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIil9fX1nZXQgZmlsZW5hbWUoKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7Y29uc3QgZT1waWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdCl8fCJ1bm5hbWVkIjt0aGlzLl9maWxlbmFtZT0oMCxyLnN0cmluZ1RvUERGU3RyaW5nKShlKS5yZXBsYWNlQWxsKCJcXFxcIiwiXFwiKS5yZXBsYWNlQWxsKCJcXC8iLCIvIikucmVwbGFjZUFsbCgiXFwiLCIvIil9cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfWdldCBjb250ZW50KCl7aWYoIXRoaXMuY29udGVudEF2YWlsYWJsZSlyZXR1cm4gbnVsbDshdGhpcy5jb250ZW50UmVmJiZ0aGlzLnJvb3QmJih0aGlzLmNvbnRlbnRSZWY9cGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QuZ2V0KCJFRiIpKSk7bGV0IGU9bnVsbDtpZih0aGlzLmNvbnRlbnRSZWYpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYodGhpcy5jb250ZW50UmVmKTt0IGluc3RhbmNlb2Ygbi5CYXNlU3RyZWFtP2U9dC5nZXRCeXRlcygpOigwLHIud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgY29udGVudCIpfWVsc2UoMCxyLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhIGNvbnRlbnQiKTtyZXR1cm4gZX1nZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5NZXRhZGF0YVBhcnNlcj12b2lkIDA7YSgyKTthKDE0MCk7dmFyIHI9YSgyMjIpO3QuTWV0YWRhdGFQYXJzZXI9Y2xhc3MgTWV0YWRhdGFQYXJzZXJ7Y29uc3RydWN0b3IoZSl7ZT10aGlzLl9yZXBhaXIoZSk7Y29uc3QgdD1uZXcgci5TaW1wbGVYTUxQYXJzZXIoe2xvd2VyQ2FzZU5hbWU6ITB9KS5wYXJzZUZyb21TdHJpbmcoZSk7dGhpcy5fbWV0YWRhdGFNYXA9bmV3IE1hcDt0aGlzLl9kYXRhPWU7dCYmdGhpcy5fcGFyc2UodCl9X3JlcGFpcihlKXtyZXR1cm4gZS5yZXBsYWNlKC9eW148XSsvLCIiKS5yZXBsYWNlQWxsKC8+XFwzNzZcXDM3NyhbXjxdKykvZywoZnVuY3Rpb24oZSx0KXtjb25zdCBhPXQucmVwbGFjZUFsbCgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LGEscil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KmErMSpyKX0pKS5yZXBsYWNlQWxsKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKGBfcmVwYWlyOiAke3R9IGlzbid0IGRlZmluZWQuYCl9KSkscj1bIj4iXTtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKXtjb25zdCB0PTI1NiphLmNoYXJDb2RlQXQoZSkrYS5jaGFyQ29kZUF0KGUrMSk7dD49MzImJnQ8MTI3JiY2MCE9PXQmJjYyIT09dCYmMzghPT10P3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTpyLnB1c2goIiYjeCIrKDY1NTM2K3QpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSkrIjsiKX1yZXR1cm4gci5qb2luKCIiKX0pKX1fZ2V0U2VxdWVuY2UoZSl7Y29uc3QgdD1lLm5vZGVOYW1lO3JldHVybiJyZGY6YmFnIiE9PXQmJiJyZGY6c2VxIiE9PXQmJiJyZGY6YWx0IiE9PXQ/bnVsbDplLmNoaWxkTm9kZXMuZmlsdGVyKChlPT4icmRmOmxpIj09PWUubm9kZU5hbWUpKX1fcGFyc2VBcnJheShlKXtpZighZS5oYXNDaGlsZE5vZGVzKCkpcmV0dXJuO2NvbnN0W3RdPWUuY2hpbGROb2RlcyxhPXRoaXMuX2dldFNlcXVlbmNlKHQpfHxbXTt0aGlzLl9tZXRhZGF0YU1hcC5zZXQoZS5ub2RlTmFtZSxhLm1hcCgoZT0+ZS50ZXh0Q29udGVudC50cmltKCkpKSl9X3BhcnNlKGUpe2xldCB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUpe3Q9dC5maXJzdENoaWxkO2Zvcig7dCYmInJkZjpyZGYiIT09dC5ub2RlTmFtZTspdD10Lm5leHRTaWJsaW5nfWlmKHQmJiJyZGY6cmRmIj09PXQubm9kZU5hbWUmJnQuaGFzQ2hpbGROb2RlcygpKWZvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcylpZigicmRmOmRlc2NyaXB0aW9uIj09PWUubm9kZU5hbWUpZm9yKGNvbnN0IHQgb2YgZS5jaGlsZE5vZGVzKXtjb25zdCBlPXQubm9kZU5hbWU7c3dpdGNoKGUpe2Nhc2UiI3RleHQiOmNvbnRpbnVlO2Nhc2UiZGM6Y3JlYXRvciI6Y2FzZSJkYzpzdWJqZWN0Ijp0aGlzLl9wYXJzZUFycmF5KHQpO2NvbnRpbnVlfXRoaXMuX21ldGFkYXRhTWFwLnNldChlLHQudGV4dENvbnRlbnQudHJpbSgpKX19Z2V0IHNlcmlhbGl6YWJsZSgpe3JldHVybntwYXJzZWREYXRhOnRoaXMuX21ldGFkYXRhTWFwLHJhd0RhdGE6dGhpcy5fZGF0YX19fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhNTFBhcnNlckVycm9yQ29kZT10LlhNTFBhcnNlckJhc2U9dC5TaW1wbGVYTUxQYXJzZXI9dC5TaW1wbGVET01Ob2RlPXZvaWQgMDthKDE0MCk7dmFyIHI9YSgxNTApO2NvbnN0IG49e05vRXJyb3I6MCxFbmRPZkRvY3VtZW50Oi0xLFVudGVybWluYXRlZENkYXQ6LTIsVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb246LTMsVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uOi00LFVudGVybWluYXRlZENvbW1lbnQ6LTUsTWFsZm9ybWVkRWxlbWVudDotNixPdXRPZk1lbW9yeTotNyxVbnRlcm1pbmF0ZWRBdHRyaWJ1dGVWYWx1ZTotOCxVbnRlcm1pbmF0ZWRFbGVtZW50Oi05LEVsZW1lbnROZXZlckJlZ3VuOi0xMH07dC5YTUxQYXJzZXJFcnJvckNvZGU9bjtmdW5jdGlvbiBpc1doaXRlc3BhY2UoZSx0KXtjb25zdCBhPWVbdF07cmV0dXJuIiAiPT09YXx8IlxuIj09PWF8fCJcciI9PT1hfHwiXHQiPT09YX1jbGFzcyBYTUxQYXJzZXJCYXNle19yZXNvbHZlRW50aXRpZXMoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvJihbXjtdKyk7L2csKChlLHQpPT57aWYoIiN4Ij09PXQuc3Vic3RyaW5nKDAsMikpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHQuc3Vic3RyaW5nKDIpLDE2KSk7aWYoIiMiPT09dC5zdWJzdHJpbmcoMCwxKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2godCl7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInO2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiB0aGlzLm9uUmVzb2x2ZUVudGl0eSh0KX0pKX1fcGFyc2VDb250ZW50KGUsdCl7Y29uc3QgYT1bXTtsZXQgcj10O2Z1bmN0aW9uIHNraXBXcygpe2Zvcig7cjxlLmxlbmd0aCYmaXNXaGl0ZXNwYWNlKGUscik7KSsrcn1mb3IoO3I8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxyKSYmIj4iIT09ZVtyXSYmIi8iIT09ZVtyXTspKytyO2NvbnN0IG49ZS5zdWJzdHJpbmcodCxyKTtza2lwV3MoKTtmb3IoO3I8ZS5sZW5ndGgmJiI+IiE9PWVbcl0mJiIvIiE9PWVbcl0mJiI/IiE9PWVbcl07KXtza2lwV3MoKTtsZXQgdD0iIixuPSIiO2Zvcig7cjxlLmxlbmd0aCYmIWlzV2hpdGVzcGFjZShlLHIpJiYiPSIhPT1lW3JdOyl7dCs9ZVtyXTsrK3J9c2tpcFdzKCk7aWYoIj0iIT09ZVtyXSlyZXR1cm4gbnVsbDsrK3I7c2tpcFdzKCk7Y29uc3QgaT1lW3JdO2lmKCciJyE9PWkmJiInIiE9PWkpcmV0dXJuIG51bGw7Y29uc3Qgcz1lLmluZGV4T2YoaSwrK3IpO2lmKHM8MClyZXR1cm4gbnVsbDtuPWUuc3Vic3RyaW5nKHIscyk7YS5wdXNoKHtuYW1lOnQsdmFsdWU6dGhpcy5fcmVzb2x2ZUVudGl0aWVzKG4pfSk7cj1zKzE7c2tpcFdzKCl9cmV0dXJue25hbWU6bixhdHRyaWJ1dGVzOmEscGFyc2VkOnItdH19X3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsdCl7bGV0IGE9dDtmb3IoO2E8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxhKSYmIj4iIT09ZVthXSYmIj8iIT09ZVthXSYmIi8iIT09ZVthXTspKythO2NvbnN0IHI9ZS5zdWJzdHJpbmcodCxhKTshZnVuY3Rpb24gc2tpcFdzKCl7Zm9yKDthPGUubGVuZ3RoJiZpc1doaXRlc3BhY2UoZSxhKTspKythfSgpO2NvbnN0IG49YTtmb3IoO2E8ZS5sZW5ndGgmJigiPyIhPT1lW2FdfHwiPiIhPT1lW2ErMV0pOykrK2E7cmV0dXJue25hbWU6cix2YWx1ZTplLnN1YnN0cmluZyhuLGEpLHBhcnNlZDphLXR9fXBhcnNlWG1sKGUpe2xldCB0PTA7Zm9yKDt0PGUubGVuZ3RoOyl7bGV0IGE9dDtpZigiPCI9PT1lW3RdKXsrK2E7bGV0IHQ7c3dpdGNoKGVbYV0pe2Nhc2UiLyI6KythO3Q9ZS5pbmRleE9mKCI+IixhKTtpZih0PDApe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZEVsZW1lbnQpO3JldHVybn10aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhhLHQpKTthPXQrMTticmVhaztjYXNlIj8iOisrYTtjb25zdCByPXRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsYSk7aWYoIj8+IiE9PWUuc3Vic3RyaW5nKGErci5wYXJzZWQsYStyLnBhcnNlZCsyKSl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO3JldHVybn10aGlzLm9uUGkoci5uYW1lLHIudmFsdWUpO2ErPXIucGFyc2VkKzI7YnJlYWs7Y2FzZSIhIjppZigiLS0iPT09ZS5zdWJzdHJpbmcoYSsxLGErMykpe3Q9ZS5pbmRleE9mKCItLVx4M2UiLGErMyk7aWYodDwwKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWRDb21tZW50KTtyZXR1cm59dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcoYSszLHQpKTthPXQrM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKGErMSxhKzgpKXt0PWUuaW5kZXhPZigiXV0+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkQ2RhdCk7cmV0dXJufXRoaXMub25DZGF0YShlLnN1YnN0cmluZyhhKzgsdCkpO2E9dCszfWVsc2V7aWYoIkRPQ1RZUEUiIT09ZS5zdWJzdHJpbmcoYSsxLGErOCkpe3RoaXMub25FcnJvcihuLk1hbGZvcm1lZEVsZW1lbnQpO3JldHVybn17Y29uc3Qgcj1lLmluZGV4T2YoIlsiLGErOCk7bGV0IGk9ITE7dD1lLmluZGV4T2YoIj4iLGErOCk7aWYodDwwKXt0aGlzLm9uRXJyb3Iobi5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO3JldHVybn1pZihyPjAmJnQ+cil7dD1lLmluZGV4T2YoIl0+IixhKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKG4uVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uKTtyZXR1cm59aT0hMH1jb25zdCBzPWUuc3Vic3RyaW5nKGErOCx0KyhpPzE6MCkpO3RoaXMub25Eb2N0eXBlKHMpO2E9dCsoaT8yOjEpfX1icmVhaztkZWZhdWx0OmNvbnN0IGk9dGhpcy5fcGFyc2VDb250ZW50KGUsYSk7aWYobnVsbD09PWkpe3RoaXMub25FcnJvcihuLk1hbGZvcm1lZEVsZW1lbnQpO3JldHVybn1sZXQgcz0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcoYStpLnBhcnNlZCxhK2kucGFyc2VkKzIpKXM9ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhhK2kucGFyc2VkLGEraS5wYXJzZWQrMSkpe3RoaXMub25FcnJvcihuLlVudGVybWluYXRlZEVsZW1lbnQpO3JldHVybn10aGlzLm9uQmVnaW5FbGVtZW50KGkubmFtZSxpLmF0dHJpYnV0ZXMscyk7YSs9aS5wYXJzZWQrKHM/MjoxKX19ZWxzZXtmb3IoO2E8ZS5sZW5ndGgmJiI8IiE9PWVbYV07KWErKztjb25zdCByPWUuc3Vic3RyaW5nKHQsYSk7dGhpcy5vblRleHQodGhpcy5fcmVzb2x2ZUVudGl0aWVzKHIpKX10PWF9fW9uUmVzb2x2ZUVudGl0eShlKXtyZXR1cm5gJiR7ZX07YH1vblBpKGUsdCl7fW9uQ29tbWVudChlKXt9b25DZGF0YShlKXt9b25Eb2N0eXBlKGUpe31vblRleHQoZSl7fW9uQmVnaW5FbGVtZW50KGUsdCxhKXt9b25FbmRFbGVtZW50KGUpe31vbkVycm9yKGUpe319dC5YTUxQYXJzZXJCYXNlPVhNTFBhcnNlckJhc2U7Y2xhc3MgU2ltcGxlRE9NTm9kZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubm9kZU5hbWU9ZTt0aGlzLm5vZGVWYWx1ZT10O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJwYXJlbnROb2RlIix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcz8uWzBdfWdldCBuZXh0U2libGluZygpe2NvbnN0IGU9dGhpcy5wYXJlbnROb2RlLmNoaWxkTm9kZXM7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5pbmRleE9mKHRoaXMpO3JldHVybi0xIT09dD9lW3QrMV06dm9pZCAwfWdldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXN8fFtdfWhhc0NoaWxkTm9kZXMoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzPy5sZW5ndGg+MH1zZWFyY2hOb2RlKGUsdCl7aWYodD49ZS5sZW5ndGgpcmV0dXJuIHRoaXM7Y29uc3QgYT1lW3RdO2lmKGEubmFtZS5zdGFydHNXaXRoKCIjIikmJnQ8ZS5sZW5ndGgtMSlyZXR1cm4gdGhpcy5zZWFyY2hOb2RlKGUsdCsxKTtjb25zdCByPVtdO2xldCBuPXRoaXM7Zm9yKDs7KXtpZihhLm5hbWU9PT1uLm5vZGVOYW1lKXtpZigwIT09YS5wb3Mpe2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gbnVsbDt7Y29uc3RbaV09ci5wb3AoKTtsZXQgcz0wO2Zvcihjb25zdCByIG9mIGkuY2hpbGROb2RlcylpZihhLm5hbWU9PT1yLm5vZGVOYW1lKXtpZihzPT09YS5wb3MpcmV0dXJuIHIuc2VhcmNoTm9kZShlLHQrMSk7cysrfXJldHVybiBuLnNlYXJjaE5vZGUoZSx0KzEpfX17Y29uc3QgYT1uLnNlYXJjaE5vZGUoZSx0KzEpO2lmKG51bGwhPT1hKXJldHVybiBhfX1pZihuLmNoaWxkTm9kZXM/Lmxlbmd0aD4wKXtyLnB1c2goW24sMF0pO249bi5jaGlsZE5vZGVzWzBdfWVsc2V7aWYoMD09PXIubGVuZ3RoKXJldHVybiBudWxsO2Zvcig7MCE9PXIubGVuZ3RoOyl7Y29uc3RbZSx0XT1yLnBvcCgpLGE9dCsxO2lmKGE8ZS5jaGlsZE5vZGVzLmxlbmd0aCl7ci5wdXNoKFtlLGFdKTtuPWUuY2hpbGROb2Rlc1thXTticmVha319aWYoMD09PXIubGVuZ3RoKXJldHVybiBudWxsfX19ZHVtcChlKXtpZigiI3RleHQiIT09dGhpcy5ub2RlTmFtZSl7ZS5wdXNoKGA8JHt0aGlzLm5vZGVOYW1lfWApO2lmKHRoaXMuYXR0cmlidXRlcylmb3IoY29uc3QgdCBvZiB0aGlzLmF0dHJpYnV0ZXMpZS5wdXNoKGAgJHt0Lm5hbWV9PSIkeygwLHIuZW5jb2RlVG9YbWxTdHJpbmcpKHQudmFsdWUpfSJgKTtpZih0aGlzLmhhc0NoaWxkTm9kZXMoKSl7ZS5wdXNoKCI+Iik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5jaGlsZE5vZGVzKXQuZHVtcChlKTtlLnB1c2goYDwvJHt0aGlzLm5vZGVOYW1lfT5gKX1lbHNlIHRoaXMubm9kZVZhbHVlP2UucHVzaChgPiR7KDAsci5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpfTwvJHt0aGlzLm5vZGVOYW1lfT5gKTplLnB1c2goIi8+Iil9ZWxzZSBlLnB1c2goKDAsci5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpKX19dC5TaW1wbGVET01Ob2RlPVNpbXBsZURPTU5vZGU7dC5TaW1wbGVYTUxQYXJzZXI9Y2xhc3MgU2ltcGxlWE1MUGFyc2VyIGV4dGVuZHMgWE1MUGFyc2VyQmFzZXtjb25zdHJ1Y3RvcihlKXtsZXR7aGFzQXR0cmlidXRlczp0PSExLGxvd2VyQ2FzZU5hbWU6YT0hMX09ZTtzdXBlcigpO3RoaXMuX2N1cnJlbnRGcmFnbWVudD1udWxsO3RoaXMuX3N0YWNrPW51bGw7dGhpcy5fZXJyb3JDb2RlPW4uTm9FcnJvcjt0aGlzLl9oYXNBdHRyaWJ1dGVzPXQ7dGhpcy5fbG93ZXJDYXNlTmFtZT1hfXBhcnNlRnJvbVN0cmluZyhlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W107dGhpcy5fc3RhY2s9W107dGhpcy5fZXJyb3JDb2RlPW4uTm9FcnJvcjt0aGlzLnBhcnNlWG1sKGUpO2lmKHRoaXMuX2Vycm9yQ29kZSE9PW4uTm9FcnJvcilyZXR1cm47Y29uc3RbdF09dGhpcy5fY3VycmVudEZyYWdtZW50O3JldHVybiB0P3tkb2N1bWVudEVsZW1lbnQ6dH06dm9pZCAwfW9uVGV4dChlKXtpZihmdW5jdGlvbiBpc1doaXRlc3BhY2VTdHJpbmcoZSl7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKWlmKCFpc1doaXRlc3BhY2UoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0oZSkpcmV0dXJuO2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkNkYXRhKGUpe2NvbnN0IHQ9bmV3IFNpbXBsZURPTU5vZGUoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkJlZ2luRWxlbWVudChlLHQsYSl7dGhpcy5fbG93ZXJDYXNlTmFtZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKTtjb25zdCByPW5ldyBTaW1wbGVET01Ob2RlKGUpO3IuY2hpbGROb2Rlcz1bXTt0aGlzLl9oYXNBdHRyaWJ1dGVzJiYoci5hdHRyaWJ1dGVzPXQpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHIpO2lmKCFhKXt0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCk7dGhpcy5fY3VycmVudEZyYWdtZW50PXIuY2hpbGROb2Rlc319b25FbmRFbGVtZW50KGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107Y29uc3QgdD10aGlzLl9jdXJyZW50RnJhZ21lbnQuYXQoLTEpO2lmKCF0KXJldHVybiBudWxsO2Zvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcyllLnBhcmVudE5vZGU9dDtyZXR1cm4gdH1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TdHJ1Y3RUcmVlUm9vdD10LlN0cnVjdFRyZWVQYWdlPXZvaWQgMDthKDE0MCk7dmFyIHI9YSgxNDUpLG49YSgxNTEpLGk9YSgyMTgpLHM9YSgyMjQpO2NvbnN0IG89MSxjPTIsbD0zLGg9NCx1PTU7Y2xhc3MgU3RydWN0VHJlZVJvb3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRpY3Q9ZTt0aGlzLnJlZj10IGluc3RhbmNlb2Ygbi5SZWY/dDpudWxsO3RoaXMucm9sZU1hcD1uZXcgTWFwO3RoaXMuc3RydWN0UGFyZW50SWRzPW51bGx9aW5pdCgpe3RoaXMucmVhZFJvbGVNYXAoKX0jQyhlLHQsYSl7aWYoIShlIGluc3RhbmNlb2Ygbi5SZWYpfHx0PDApcmV0dXJuO3RoaXMuc3RydWN0UGFyZW50SWRzfHw9bmV3IG4uUmVmU2V0Q2FjaGU7bGV0IHI9dGhpcy5zdHJ1Y3RQYXJlbnRJZHMuZ2V0KGUpO2lmKCFyKXtyPVtdO3RoaXMuc3RydWN0UGFyZW50SWRzLnB1dChlLHIpfXIucHVzaChbdCxhXSl9YWRkQW5ub3RhdGlvbklkVG9QYWdlKGUsdCl7dGhpcy4jQyhlLHQsaCl9cmVhZFJvbGVNYXAoKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIlJvbGVNYXAiKTtlIGluc3RhbmNlb2Ygbi5EaWN0JiZlLmZvckVhY2goKChlLHQpPT57dCBpbnN0YW5jZW9mIG4uTmFtZSYmdGhpcy5yb2xlTWFwLnNldChlLHQubmFtZSl9KSl9c3RhdGljIGFzeW5jIGNhbkNyZWF0ZVN0cnVjdHVyZVRyZWUoZSl7bGV0e2NhdGFsb2dSZWY6dCxwZGZNYW5hZ2VyOmEsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6aX09ZTtpZighKHQgaW5zdGFuY2VvZiBuLlJlZikpeygwLHIud2FybikoIkNhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogbm8gY2F0YWxvZyByZWZlcmVuY2UuIik7cmV0dXJuITF9bGV0IHM9MCxvPSEwO2Zvcihjb25zdFtlLHRdb2YgaSl7Y29uc3R7cmVmOml9PWF3YWl0IGEuZ2V0UGFnZShlKTtpZighKGkgaW5zdGFuY2VvZiBuLlJlZikpeygwLHIud2FybikoYENhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogcGFnZSAke2V9IGhhcyBubyByZWYuYCk7bz0hMDticmVha31mb3IoY29uc3QgZSBvZiB0KWlmKGUuYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpe2UucGFyZW50VHJlZUlkPXMrKztvPSExfX1pZihvKXtmb3IoY29uc3QgZSBvZiBpLnZhbHVlcygpKWZvcihjb25zdCB0IG9mIGUpZGVsZXRlIHQucGFyZW50VHJlZUlkO3JldHVybiExfXJldHVybiEwfXN0YXRpYyBhc3luYyBjcmVhdGVTdHJ1Y3R1cmVUcmVlKGUpe2xldHtuZXdBbm5vdGF0aW9uc0J5UGFnZTp0LHhyZWY6YSxjYXRhbG9nUmVmOnIscGRmTWFuYWdlcjppLG5ld1JlZnM6b309ZTtjb25zdCBjPWkuY2F0YWxvZy5jbG9uZURpY3QoKSxsPWEuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7Yy5zZXQoIlN0cnVjdFRyZWVSb290IixsKTtjb25zdCBoPVtdO2F3YWl0KDAscy53cml0ZU9iamVjdCkocixjLGgsYSk7by5wdXNoKHtyZWY6cixkYXRhOmguam9pbigiIil9KTtjb25zdCB1PW5ldyBuLkRpY3QoYSk7dS5zZXQoIlR5cGUiLG4uTmFtZS5nZXQoIlN0cnVjdFRyZWVSb290IikpO2NvbnN0IGQ9YS5nZXROZXdUZW1wb3JhcnlSZWYoKTt1LnNldCgiUGFyZW50VHJlZSIsZCk7Y29uc3QgZj1bXTt1LnNldCgiSyIsZik7Y29uc3QgZz1uZXcgbi5EaWN0KGEpLHA9W107Zy5zZXQoIk51bXMiLHApO2NvbnN0IG09YXdhaXQgdGhpcy4jdih7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6dCxzdHJ1Y3RUcmVlUm9vdFJlZjpsLGtpZHM6ZixudW1zOnAseHJlZjphLHBkZk1hbmFnZXI6aSxuZXdSZWZzOm8sYnVmZmVyOmh9KTt1LnNldCgiUGFyZW50VHJlZU5leHRLZXkiLG0pO2gubGVuZ3RoPTA7YXdhaXQoMCxzLndyaXRlT2JqZWN0KShkLGcsaCxhKTtvLnB1c2goe3JlZjpkLGRhdGE6aC5qb2luKCIiKX0pO2gubGVuZ3RoPTA7YXdhaXQoMCxzLndyaXRlT2JqZWN0KShsLHUsaCxhKTtvLnB1c2goe3JlZjpsLGRhdGE6aC5qb2luKCIiKX0pfWFzeW5jIGNhblVwZGF0ZVN0cnVjdFRyZWUoZSl7bGV0e3BkZk1hbmFnZXI6dCxuZXdBbm5vdGF0aW9uc0J5UGFnZTphfT1lO2lmKCF0aGlzLnJlZil7KDAsci53YXJuKSgiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IG5vIHJvb3QgcmVmZXJlbmNlLiIpO3JldHVybiExfWxldCBpPXRoaXMuZGljdC5nZXQoIlBhcmVudFRyZWVOZXh0S2V5Iik7aWYoIU51bWJlci5pc0ludGVnZXIoaSl8fGk8MCl7KDAsci53YXJuKSgiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IGludmFsaWQgbmV4dCBrZXkuIik7cmV0dXJuITF9Y29uc3Qgcz10aGlzLmRpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIShzIGluc3RhbmNlb2Ygbi5EaWN0KSl7KDAsci53YXJuKSgiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IFBhcmVudFRyZWUgaXNuJ3QgYSBkaWN0LiIpO3JldHVybiExfWNvbnN0IG89cy5nZXQoIk51bXMiKTtpZighQXJyYXkuaXNBcnJheShvKSl7KDAsci53YXJuKSgiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IG51bXMgaXNuJ3QgYW4gYXJyYXkuIik7cmV0dXJuITF9Y29uc3R7bnVtUGFnZXM6Y309dC5jYXRhbG9nO2Zvcihjb25zdCBlIG9mIGEua2V5cygpKXtjb25zdHtwYWdlRGljdDphLHJlZjppfT1hd2FpdCB0LmdldFBhZ2UoZSk7aWYoIShpIGluc3RhbmNlb2Ygbi5SZWYpKXsoMCxyLndhcm4pKGBDYW5ub3Qgc2F2ZSB0aGUgc3RydWN0IHRyZWU6IHBhZ2UgJHtlfSBoYXMgbm8gcmVmLmApO3JldHVybiExfWNvbnN0IHM9YS5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcihzKXx8czwwfHxzPj1jKXsoMCxyLndhcm4pKGBDYW5ub3Qgc2F2ZSB0aGUgc3RydWN0IHRyZWU6IHBhZ2UgJHtlfSBoYXMgbm8gaWQuYCk7cmV0dXJuITF9fWxldCBsPSEwO2Zvcihjb25zdFtlLHJdb2YgYSl7Y29uc3R7cGFnZURpY3Q6YX09YXdhaXQgdC5nZXRQYWdlKGUpO1N0cnVjdFRyZWVSb290LiNrKHtlbGVtZW50czpyLHhyZWY6dGhpcy5kaWN0LnhyZWYscGFnZURpY3Q6YSxwYXJlbnRUcmVlOnN9KTtmb3IoY29uc3QgZSBvZiByKWlmKGUuYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpe2UucGFyZW50VHJlZUlkPWkrKztsPSExfX1pZihsKXtmb3IoY29uc3QgZSBvZiBhLnZhbHVlcygpKWZvcihjb25zdCB0IG9mIGUpe2RlbGV0ZSB0LnBhcmVudFRyZWVJZDtkZWxldGUgdC5zdHJ1Y3RUcmVlUGFyZW50fXJldHVybiExfXJldHVybiEwfWFzeW5jIHVwZGF0ZVN0cnVjdHVyZVRyZWUoZSl7bGV0e25ld0Fubm90YXRpb25zQnlQYWdlOnQscGRmTWFuYWdlcjphLG5ld1JlZnM6cn09ZTtjb25zdCBpPXRoaXMuZGljdC54cmVmLG89dGhpcy5kaWN0LmNsb25lKCksYz10aGlzLnJlZjtsZXQgbCxoPW8uZ2V0UmF3KCJQYXJlbnRUcmVlIik7aWYoaCBpbnN0YW5jZW9mIG4uUmVmKWw9aS5mZXRjaChoKTtlbHNle2w9aDtoPWkuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7by5zZXQoIlBhcmVudFRyZWUiLGgpfWw9bC5jbG9uZSgpO2xldCB1PWwuZ2V0UmF3KCJOdW1zIiksZD1udWxsO2lmKHUgaW5zdGFuY2VvZiBuLlJlZil7ZD11O3U9aS5mZXRjaChkKX11PXUuc2xpY2UoKTtkfHxsLnNldCgiTnVtcyIsdSk7bGV0IGY9by5nZXRSYXcoIksiKSxnPW51bGw7aWYoZiBpbnN0YW5jZW9mIG4uUmVmKXtnPWY7Zj1pLmZldGNoKGcpfWVsc2V7Zz1pLmdldE5ld1RlbXBvcmFyeVJlZigpO28uc2V0KCJLIixnKX1mPUFycmF5LmlzQXJyYXkoZik/Zi5zbGljZSgpOltmXTtjb25zdCBwPVtdLG09YXdhaXQgU3RydWN0VHJlZVJvb3QuI3Yoe25ld0Fubm90YXRpb25zQnlQYWdlOnQsc3RydWN0VHJlZVJvb3RSZWY6YyxraWRzOmYsbnVtczp1LHhyZWY6aSxwZGZNYW5hZ2VyOmEsbmV3UmVmczpyLGJ1ZmZlcjpwfSk7by5zZXQoIlBhcmVudFRyZWVOZXh0S2V5IixtKTtwLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkoZyxmLHAsaSk7ci5wdXNoKHtyZWY6ZyxkYXRhOnAuam9pbigiIil9KTtpZihkKXtwLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkoZCx1LHAsaSk7ci5wdXNoKHtyZWY6ZCxkYXRhOnAuam9pbigiIil9KX1wLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkoaCxsLHAsaSk7ci5wdXNoKHtyZWY6aCxkYXRhOnAuam9pbigiIil9KTtwLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkoYyxvLHAsaSk7ci5wdXNoKHtyZWY6YyxkYXRhOnAuam9pbigiIil9KX1zdGF0aWMgYXN5bmMjdihlKXtsZXR7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6dCxzdHJ1Y3RUcmVlUm9vdFJlZjphLGtpZHM6cixudW1zOmkseHJlZjpvLHBkZk1hbmFnZXI6YyxuZXdSZWZzOmwsYnVmZmVyOmh9PWU7Y29uc3QgdT1uLk5hbWUuZ2V0KCJPQkpSIik7bGV0IGQ9LTEvMDtmb3IoY29uc3RbZSxmXW9mIHQpe2NvbnN0e3JlZjp0fT1hd2FpdCBjLmdldFBhZ2UoZSk7Zm9yKGNvbnN0e2FjY2Vzc2liaWxpdHlEYXRhOnt0eXBlOmUsdGl0bGU6YyxsYW5nOmcsYWx0OnAsZXhwYW5kZWQ6bSxhY3R1YWxUZXh0OmJ9LHJlZjp5LHBhcmVudFRyZWVJZDp3LHN0cnVjdFRyZWVQYXJlbnQ6U31vZiBmKXtkPU1hdGgubWF4KGQsdyk7Y29uc3QgZj1vLmdldE5ld1RlbXBvcmFyeVJlZigpLHg9bmV3IG4uRGljdChvKTt4LnNldCgiUyIsbi5OYW1lLmdldChlKSk7YyYmeC5zZXQoIlQiLGMpO2cmJnguc2V0KCJMYW5nIixnKTtwJiZ4LnNldCgiQWx0IixwKTttJiZ4LnNldCgiRSIsbSk7YiYmeC5zZXQoIkFjdHVhbFRleHQiLGIpO1M/YXdhaXQgdGhpcy4jRih7c3RydWN0VHJlZVBhcmVudDpTLHRhZ0RpY3Q6eCxuZXdUYWdSZWY6ZixmYWxsYmFja1JlZjphLHhyZWY6byxuZXdSZWZzOmwsYnVmZmVyOmh9KTp4LnNldCgiUCIsYSk7Y29uc3QgQz1uZXcgbi5EaWN0KG8pO3guc2V0KCJLIixDKTtDLnNldCgiVHlwZSIsdSk7Qy5zZXQoIlBnIix0KTtDLnNldCgiT2JqIix5KTtoLmxlbmd0aD0wO2F3YWl0KDAscy53cml0ZU9iamVjdCkoZix4LGgsbyk7bC5wdXNoKHtyZWY6ZixkYXRhOmguam9pbigiIil9KTtpLnB1c2godyxmKTtyLnB1c2goZil9fXJldHVybiBkKzF9c3RhdGljI2soZSl7bGV0e2VsZW1lbnRzOnQseHJlZjphLHBhZ2VEaWN0OnIscGFyZW50VHJlZTpzfT1lO2NvbnN0IG89bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0KWlmKGUuc3RydWN0VHJlZVBhcmVudElkKXtjb25zdCB0PXBhcnNlSW50KGUuc3RydWN0VHJlZVBhcmVudElkLnNwbGl0KCJfbWMiKVsxXSwxMCk7by5zZXQodCxlKX1jb25zdCBjPXIuZ2V0KCJTdHJ1Y3RQYXJlbnRzIiksbD1uZXcgaS5OdW1iZXJUcmVlKHMsYSkuZ2V0KGMpO2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybjtjb25zdCB1cGRhdGVFbGVtZW50PShlLHQscik9Pntjb25zdCBpPW8uZ2V0KGUpO2lmKGkpe2NvbnN0IGU9dC5nZXRSYXcoIlAiKSxzPWEuZmV0Y2hJZlJlZihlKTtlIGluc3RhbmNlb2Ygbi5SZWYmJnMgaW5zdGFuY2VvZiBuLkRpY3QmJihpLnN0cnVjdFRyZWVQYXJlbnQ9e3JlZjpyLGRpY3Q6dH0pO3JldHVybiEwfXJldHVybiExfTtmb3IoY29uc3QgZSBvZiBsKXtpZighKGUgaW5zdGFuY2VvZiBuLlJlZikpY29udGludWU7Y29uc3QgdD1hLmZldGNoKGUpLHI9dC5nZXQoIksiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHIpKXVwZGF0ZUVsZW1lbnQocix0LGUpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSlmb3IobGV0IG4gb2Ygcil7bj1hLmZldGNoSWZSZWYobik7aWYoTnVtYmVyLmlzSW50ZWdlcihuKSYmdXBkYXRlRWxlbWVudChuLHQsZSkpYnJlYWt9fX1zdGF0aWMgYXN5bmMjRihlKXtsZXR7c3RydWN0VHJlZVBhcmVudDp7cmVmOnQsZGljdDphfSx0YWdEaWN0OmksbmV3VGFnUmVmOm8sZmFsbGJhY2tSZWY6Yyx4cmVmOmwsbmV3UmVmczpoLGJ1ZmZlcjp1fT1lO2NvbnN0IGQ9YS5nZXRSYXcoIlAiKTtsZXQgZj1sLmZldGNoSWZSZWYoZCk7aS5zZXQoIlAiLGQpO2xldCBnLHA9ITEsbT1mLmdldFJhdygiSyIpO2lmKG0gaW5zdGFuY2VvZiBuLlJlZilnPWwuZmV0Y2gobSk7ZWxzZXtnPW07bT1sLmdldE5ld1RlbXBvcmFyeVJlZigpO2Y9Zi5jbG9uZSgpO2Yuc2V0KCJLIixtKTtwPSEwfWlmKEFycmF5LmlzQXJyYXkoZykpe2NvbnN0IGU9Zy5pbmRleE9mKHQpO2lmKCEoZT49MCkpeygwLHIud2FybikoIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBwYXJlbnQga2lkIG5vdCBmb3VuZC4iKTtpLnNldCgiUCIsYyk7cmV0dXJufWc9Zy5zbGljZSgpO2cuc3BsaWNlKGUrMSwwLG8pfWVsc2UgaWYoZyBpbnN0YW5jZW9mIG4uRGljdCl7Zz1bbSxvXTttPWwuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7Zi5zZXQoIksiLG0pO3A9ITB9dS5sZW5ndGg9MDthd2FpdCgwLHMud3JpdGVPYmplY3QpKG0sZyx1LGwpO2gucHVzaCh7cmVmOm0sZGF0YTp1LmpvaW4oIiIpfSk7aWYocCl7dS5sZW5ndGg9MDthd2FpdCgwLHMud3JpdGVPYmplY3QpKGQsZix1LGwpO2gucHVzaCh7cmVmOmQsZGF0YTp1LmpvaW4oIiIpfSl9fX10LlN0cnVjdFRyZWVSb290PVN0cnVjdFRyZWVSb290O2NsYXNzIFN0cnVjdEVsZW1lbnROb2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy50cmVlPWU7dGhpcy5kaWN0PXQ7dGhpcy5raWRzPVtdO3RoaXMucGFyc2VLaWRzKCl9Z2V0IHJvbGUoKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIlMiKSx0PWUgaW5zdGFuY2VvZiBuLk5hbWU/ZS5uYW1lOiIiLHtyb290OmF9PXRoaXMudHJlZTtyZXR1cm4gYS5yb2xlTWFwLmhhcyh0KT9hLnJvbGVNYXAuZ2V0KHQpOnR9cGFyc2VLaWRzKCl7bGV0IGU9bnVsbDtjb25zdCB0PXRoaXMuZGljdC5nZXRSYXcoIlBnIik7dCBpbnN0YW5jZW9mIG4uUmVmJiYoZT10LnRvU3RyaW5nKCkpO2NvbnN0IGE9dGhpcy5kaWN0LmdldCgiSyIpO2lmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IHQgb2YgYSl7Y29uc3QgYT10aGlzLnBhcnNlS2lkKGUsdCk7YSYmdGhpcy5raWRzLnB1c2goYSl9ZWxzZXtjb25zdCB0PXRoaXMucGFyc2VLaWQoZSxhKTt0JiZ0aGlzLmtpZHMucHVzaCh0KX19cGFyc2VLaWQoZSx0KXtpZihOdW1iZXIuaXNJbnRlZ2VyKHQpKXJldHVybiB0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQhPT1lP251bGw6bmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6byxtY2lkOnQscGFnZU9iaklkOmV9KTtsZXQgYT1udWxsO3QgaW5zdGFuY2VvZiBuLlJlZj9hPXRoaXMuZGljdC54cmVmLmZldGNoKHQpOnQgaW5zdGFuY2VvZiBuLkRpY3QmJihhPXQpO2lmKCFhKXJldHVybiBudWxsO2NvbnN0IHI9YS5nZXRSYXcoIlBnIik7ciBpbnN0YW5jZW9mIG4uUmVmJiYoZT1yLnRvU3RyaW5nKCkpO2NvbnN0IGk9YS5nZXQoIlR5cGUiKWluc3RhbmNlb2Ygbi5OYW1lP2EuZ2V0KCJUeXBlIikubmFtZTpudWxsO2lmKCJNQ1IiPT09aSl7aWYodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkIT09ZSlyZXR1cm4gbnVsbDtjb25zdCB0PWEuZ2V0UmF3KCJTdG0iKTtyZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6YyxyZWZPYmpJZDp0IGluc3RhbmNlb2Ygbi5SZWY/dC50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmUsbWNpZDphLmdldCgiTUNJRCIpfSl9aWYoIk9CSlIiPT09aSl7aWYodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkIT09ZSlyZXR1cm4gbnVsbDtjb25zdCB0PWEuZ2V0UmF3KCJPYmoiKTtyZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6bCxyZWZPYmpJZDp0IGluc3RhbmNlb2Ygbi5SZWY/dC50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmV9KX1yZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6dSxkaWN0OmF9KX19Y2xhc3MgU3RydWN0RWxlbWVudHtjb25zdHJ1Y3RvcihlKXtsZXR7dHlwZTp0LGRpY3Q6YT1udWxsLG1jaWQ6cj1udWxsLHBhZ2VPYmpJZDpuPW51bGwscmVmT2JqSWQ6aT1udWxsfT1lO3RoaXMudHlwZT10O3RoaXMuZGljdD1hO3RoaXMubWNpZD1yO3RoaXMucGFnZU9iaklkPW47dGhpcy5yZWZPYmpJZD1pO3RoaXMucGFyZW50Tm9kZT1udWxsfX10LlN0cnVjdFRyZWVQYWdlPWNsYXNzIFN0cnVjdFRyZWVQYWdle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5yb290PWU7dGhpcy5yb290RGljdD1lP2UuZGljdDpudWxsO3RoaXMucGFnZURpY3Q9dDt0aGlzLm5vZGVzPVtdfXBhcnNlKGUpe2lmKCF0aGlzLnJvb3R8fCF0aGlzLnJvb3REaWN0KXJldHVybjtjb25zdCB0PXRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIXQpcmV0dXJuO2NvbnN0IGE9dGhpcy5wYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKSxyPWUgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5yb290LnN0cnVjdFBhcmVudElkcz8uZ2V0KGUpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpJiYhcilyZXR1cm47Y29uc3Qgcz1uZXcgTWFwLG89bmV3IGkuTnVtYmVyVHJlZSh0LHRoaXMucm9vdERpY3QueHJlZik7aWYoTnVtYmVyLmlzSW50ZWdlcihhKSl7Y29uc3QgZT1vLmdldChhKTtpZihBcnJheS5pc0FycmF5KGUpKWZvcihjb25zdCB0IG9mIGUpdCBpbnN0YW5jZW9mIG4uUmVmJiZ0aGlzLmFkZE5vZGUodGhpcy5yb290RGljdC54cmVmLmZldGNoKHQpLHMpfWlmKHIpZm9yKGNvbnN0W2UsdF1vZiByKXtjb25zdCBhPW8uZ2V0KGUpO2lmKGEpe2NvbnN0IGU9dGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaElmUmVmKGEpLHMpOzE9PT1lPy5raWRzPy5sZW5ndGgmJmUua2lkc1swXS50eXBlPT09bCYmKGUua2lkc1swXS50eXBlPXQpfX19YWRkTm9kZShlLHQpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2lmKGE+NDApeygwLHIud2FybikoIlN0cnVjdFRyZWUgTUFYX0RFUFRIIHJlYWNoZWQuIik7cmV0dXJuIG51bGx9aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO2NvbnN0IGk9bmV3IFN0cnVjdEVsZW1lbnROb2RlKHRoaXMsZSk7dC5zZXQoZSxpKTtjb25zdCBzPWUuZ2V0KCJQIik7aWYoIXN8fCgwLG4uaXNOYW1lKShzLmdldCgiVHlwZSIpLCJTdHJ1Y3RUcmVlUm9vdCIpKXt0aGlzLmFkZFRvcExldmVsTm9kZShlLGkpfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1jb25zdCBvPXRoaXMuYWRkTm9kZShzLHQsYSsxKTtpZighbylyZXR1cm4gaTtsZXQgYz0hMTtmb3IoY29uc3QgdCBvZiBvLmtpZHMpaWYodC50eXBlPT09dSYmdC5kaWN0PT09ZSl7dC5wYXJlbnROb2RlPWk7Yz0hMH1jfHx0LmRlbGV0ZShlKTtyZXR1cm4gaX1hZGRUb3BMZXZlbE5vZGUoZSx0KXtjb25zdCBhPXRoaXMucm9vdERpY3QuZ2V0KCJLIik7aWYoIWEpcmV0dXJuITE7aWYoYSBpbnN0YW5jZW9mIG4uRGljdCl7aWYoYS5vYmpJZCE9PWUub2JqSWQpcmV0dXJuITE7dGhpcy5ub2Rlc1swXT10O3JldHVybiEwfWlmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiEwO2xldCByPSExO2ZvcihsZXQgbj0wO248YS5sZW5ndGg7bisrKXtjb25zdCBpPWFbbl07aWYoaT8udG9TdHJpbmcoKT09PWUub2JqSWQpe3RoaXMubm9kZXNbbl09dDtyPSEwfX1yZXR1cm4gcn1nZXQgc2VyaWFsaXphYmxlKCl7ZnVuY3Rpb24gbm9kZVRvU2VyaWFsaXphYmxlKGUsdCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYoYT40MCl7KDAsci53YXJuKSgiU3RydWN0VHJlZSB0b28gZGVlcCB0byBiZSBmdWxseSBzZXJpYWxpemVkLiIpO3JldHVybn1jb25zdCBuPU9iamVjdC5jcmVhdGUobnVsbCk7bi5yb2xlPWUucm9sZTtuLmNoaWxkcmVuPVtdO3QuY2hpbGRyZW4ucHVzaChuKTtjb25zdCBpPWUuZGljdC5nZXQoIkFsdCIpOyJzdHJpbmciPT10eXBlb2YgaSYmKG4uYWx0PSgwLHIuc3RyaW5nVG9QREZTdHJpbmcpKGkpKTtjb25zdCBzPWUuZGljdC5nZXQoIkxhbmciKTsic3RyaW5nIj09dHlwZW9mIHMmJihuLmxhbmc9KDAsci5zdHJpbmdUb1BERlN0cmluZykocykpO2Zvcihjb25zdCB0IG9mIGUua2lkcyl7Y29uc3QgZT10LnR5cGU9PT11P3QucGFyZW50Tm9kZTpudWxsO2U/bm9kZVRvU2VyaWFsaXphYmxlKGUsbixhKzEpOnQudHlwZT09PW98fHQudHlwZT09PWM/bi5jaGlsZHJlbi5wdXNoKHt0eXBlOiJjb250ZW50IixpZDpgcCR7dC5wYWdlT2JqSWR9X21jJHt0Lm1jaWR9YH0pOnQudHlwZT09PWw/bi5jaGlsZHJlbi5wdXNoKHt0eXBlOiJvYmplY3QiLGlkOnQucmVmT2JqSWR9KTp0LnR5cGU9PT1oJiZuLmNoaWxkcmVuLnB1c2goe3R5cGU6ImFubm90YXRpb24iLGlkOmAke3IuQW5ub3RhdGlvblByZWZpeH0ke3QucmVmT2JqSWR9YH0pfX1jb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZS5jaGlsZHJlbj1bXTtlLnJvbGU9IlJvb3QiO2Zvcihjb25zdCB0IG9mIHRoaXMubm9kZXMpdCYmbm9kZVRvU2VyaWFsaXphYmxlKHQsZSk7cmV0dXJuIGV9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmluY3JlbWVudGFsVXBkYXRlPWFzeW5jIGZ1bmN0aW9uIGluY3JlbWVudGFsVXBkYXRlKGUpe2xldHtvcmlnaW5hbERhdGE6dCx4cmVmSW5mbzphLG5ld1JlZnM6byx4cmVmOmw9bnVsbCxoYXNYZmE6aD0hMSx4ZmFEYXRhc2V0c1JlZjp1PW51bGwsaGFzWGZhRGF0YXNldHNFbnRyeTpkPSExLG5lZWRBcHBlYXJhbmNlczpmLGFjcm9Gb3JtUmVmOmc9bnVsbCxhY3JvRm9ybTpwPW51bGwseGZhRGF0YTptPW51bGx9PWU7YXdhaXQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWNyb2Zvcm0oZSl7bGV0e3hyZWY6dCxhY3JvRm9ybTphLGFjcm9Gb3JtUmVmOm4saGFzWGZhOmksaGFzWGZhRGF0YXNldHNFbnRyeTpzLHhmYURhdGFzZXRzUmVmOm8sbmVlZEFwcGVhcmFuY2VzOmMsbmV3UmVmczpsfT1lOyFpfHxzfHxvfHwoMCxyLndhcm4pKCJYRkEgLSBDYW5ub3Qgc2F2ZSBpdCIpO2lmKCFjJiYoIWl8fCFvfHxzKSlyZXR1cm47Y29uc3QgaD1hLmNsb25lKCk7aWYoaSYmIXMpe2NvbnN0IGU9YS5nZXQoIlhGQSIpLnNsaWNlKCk7ZS5zcGxpY2UoMiwwLCJkYXRhc2V0cyIpO2Uuc3BsaWNlKDMsMCxvKTtoLnNldCgiWEZBIixlKX1jJiZoLnNldCgiTmVlZEFwcGVhcmFuY2VzIiwhMCk7Y29uc3QgdT1bXTthd2FpdCB3cml0ZU9iamVjdChuLGgsdSx0KTtsLnB1c2goe3JlZjpuLGRhdGE6dS5qb2luKCIiKX0pfSh7eHJlZjpsLGFjcm9Gb3JtOnAsYWNyb0Zvcm1SZWY6ZyxoYXNYZmE6aCxoYXNYZmFEYXRhc2V0c0VudHJ5OmQseGZhRGF0YXNldHNSZWY6dSxuZWVkQXBwZWFyYW5jZXM6ZixuZXdSZWZzOm99KTtoJiZmdW5jdGlvbiB1cGRhdGVYRkEoZSl7bGV0e3hmYURhdGE6dCx4ZmFEYXRhc2V0c1JlZjphLG5ld1JlZnM6bix4cmVmOm99PWU7aWYobnVsbD09PXQpe3Q9ZnVuY3Rpb24gd3JpdGVYRkFEYXRhRm9yQWNyb2Zvcm0oZSx0KXtjb25zdCBhPW5ldyBzLlNpbXBsZVhNTFBhcnNlcih7aGFzQXR0cmlidXRlczohMH0pLnBhcnNlRnJvbVN0cmluZyhlKTtmb3IoY29uc3R7eGZhOmV9b2YgdCl7aWYoIWUpY29udGludWU7Y29uc3R7cGF0aDp0LHZhbHVlOm59PWU7aWYoIXQpY29udGludWU7Y29uc3Qgbz0oMCxpLnBhcnNlWEZBUGF0aCkodCk7bGV0IGM9YS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZShvLDApOyFjJiZvLmxlbmd0aD4xJiYoYz1hLmRvY3VtZW50RWxlbWVudC5zZWFyY2hOb2RlKFtvLmF0KC0xKV0sMCkpO2M/Yy5jaGlsZE5vZGVzPUFycmF5LmlzQXJyYXkobik/bi5tYXAoKGU9Pm5ldyBzLlNpbXBsZURPTU5vZGUoInZhbHVlIixlKSkpOltuZXcgcy5TaW1wbGVET01Ob2RlKCIjdGV4dCIsbildOigwLHIud2FybikoYE5vZGUgbm90IGZvdW5kIGZvciBwYXRoOiAke3R9YCl9Y29uc3Qgbj1bXTthLmRvY3VtZW50RWxlbWVudC5kdW1wKG4pO3JldHVybiBuLmpvaW4oIiIpfShvLmZldGNoSWZSZWYoYSkuZ2V0U3RyaW5nKCksbil9Y29uc3QgYz1vLmVuY3J5cHQ7aWYoYyl7dD1jLmNyZWF0ZUNpcGhlclRyYW5zZm9ybShhLm51bSxhLmdlbikuZW5jcnlwdFN0cmluZyh0KX1jb25zdCBsPWAke2EubnVtfSAke2EuZ2VufSBvYmpcbjw8IC9UeXBlIC9FbWJlZGRlZEZpbGUgL0xlbmd0aCAke3QubGVuZ3RofT4+XG5zdHJlYW1cbmArdCsiXG5lbmRzdHJlYW1cbmVuZG9ialxuIjtuLnB1c2goe3JlZjphLGRhdGE6bH0pfSh7eGZhRGF0YTptLHhmYURhdGFzZXRzUmVmOnUsbmV3UmVmczpvLHhyZWY6bH0pO2NvbnN0IGI9bmV3IG4uRGljdChudWxsKSx5PWEubmV3UmVmO2xldCB3LFM7Y29uc3QgeD10LmF0KC0xKTtpZigxMD09PXh8fDEzPT09eCl7dz1bXTtTPXQubGVuZ3RofWVsc2V7dz1bIlxuIl07Uz10Lmxlbmd0aCsxfWIuc2V0KCJTaXplIix5Lm51bSsxKTtiLnNldCgiUHJldiIsYS5zdGFydFhSZWYpO2Iuc2V0KCJUeXBlIixuLk5hbWUuZ2V0KCJYUmVmIikpO251bGwhPT1hLnJvb3RSZWYmJmIuc2V0KCJSb290IixhLnJvb3RSZWYpO251bGwhPT1hLmluZm9SZWYmJmIuc2V0KCJJbmZvIixhLmluZm9SZWYpO251bGwhPT1hLmVuY3J5cHRSZWYmJmIuc2V0KCJFbmNyeXB0IixhLmVuY3J5cHRSZWYpO28ucHVzaCh7cmVmOnksZGF0YToiIn0pO289by5zb3J0KCgoZSx0KT0+ZS5yZWYubnVtLXQucmVmLm51bSkpO2NvbnN0IEM9W1swLDEsNjU1MzVdXSx2PVswLDFdO2xldCBrPTA7Zm9yKGNvbnN0e3JlZjplLGRhdGE6dH1vZiBvKXtrPU1hdGgubWF4KGssUyk7Qy5wdXNoKFsxLFMsTWF0aC5taW4oZS5nZW4sNjU1MzUpXSk7Uys9dC5sZW5ndGg7di5wdXNoKGUubnVtLDEpO3cucHVzaCh0KX1iLnNldCgiSW5kZXgiLHYpO2lmKEFycmF5LmlzQXJyYXkoYS5maWxlSWRzKSYmYS5maWxlSWRzLmxlbmd0aD4wKXtjb25zdCBlPWZ1bmN0aW9uIGNvbXB1dGVNRDUoZSx0KXtjb25zdCBhPU1hdGguZmxvb3IoRGF0ZS5ub3coKS8xZTMpLG49dC5maWxlbmFtZXx8IiIsaT1bYS50b1N0cmluZygpLG4sZS50b1N0cmluZygpXTtsZXQgcz1pLnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLDApO2Zvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModC5pbmZvKSl7aS5wdXNoKGUpO3MrPWUubGVuZ3RofWNvbnN0IG89bmV3IFVpbnQ4QXJyYXkocyk7bGV0IGw9MDtmb3IoY29uc3QgZSBvZiBpKXt3cml0ZVN0cmluZyhlLGwsbyk7bCs9ZS5sZW5ndGh9cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKSgoMCxjLmNhbGN1bGF0ZU1ENSkobykpfShTLGEpO2Iuc2V0KCJJRCIsW2EuZmlsZUlkc1swXSxlXSl9Y29uc3QgTz1bMSxNYXRoLmNlaWwoTWF0aC5sb2cyKGspLzgpLDJdLFQ9KE9bMF0rT1sxXStPWzJdKSpDLmxlbmd0aDtiLnNldCgiVyIsTyk7Yi5zZXQoIkxlbmd0aCIsVCk7dy5wdXNoKGAke3kubnVtfSAke3kuZ2VufSBvYmpcbmApO2F3YWl0IHdyaXRlRGljdChiLHcsbnVsbCk7dy5wdXNoKCIgc3RyZWFtXG4iKTtjb25zdCBNPXcucmVkdWNlKCgoZSx0KT0+ZSt0Lmxlbmd0aCksMCksRT1gXG5lbmRzdHJlYW1cbmVuZG9ialxuc3RhcnR4cmVmXG4ke1N9XG4lJUVPRlxuYCxEPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoK00rVCtFLmxlbmd0aCk7RC5zZXQodCk7bGV0IFI9dC5sZW5ndGg7Zm9yKGNvbnN0IGUgb2Ygdyl7d3JpdGVTdHJpbmcoZSxSLEQpO1IrPWUubGVuZ3RofWZvcihjb25zdFtlLHQsYV1vZiBDKXtSPXdyaXRlSW50KGUsT1swXSxSLEQpO1I9d3JpdGVJbnQodCxPWzFdLFIsRCk7Uj13cml0ZUludChhLE9bMl0sUixEKX13cml0ZVN0cmluZyhFLFIsRCk7cmV0dXJuIER9O3Qud3JpdGVEaWN0PXdyaXRlRGljdDt0LndyaXRlT2JqZWN0PXdyaXRlT2JqZWN0O2EoMTQwKTthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7dmFyIHI9YSgxNDUpLG49YSgxNTEpLGk9YSgxNTApLHM9YSgyMjIpLG89YSgxNTIpLGM9YSgyMjUpO2FzeW5jIGZ1bmN0aW9uIHdyaXRlT2JqZWN0KGUsdCxhLHIpe2xldHtlbmNyeXB0Omk9bnVsbH09cjtjb25zdCBzPWk/LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLm51bSxlLmdlbik7YS5wdXNoKGAke2UubnVtfSAke2UuZ2VufSBvYmpcbmApO3QgaW5zdGFuY2VvZiBuLkRpY3Q/YXdhaXQgd3JpdGVEaWN0KHQsYSxzKTp0IGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2F3YWl0IHdyaXRlU3RyZWFtKHQsYSxzKTpBcnJheS5pc0FycmF5KHQpJiZhd2FpdCB3cml0ZUFycmF5KHQsYSxzKTthLnB1c2goIlxuZW5kb2JqXG4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZURpY3QoZSx0LGEpe3QucHVzaCgiPDwiKTtmb3IoY29uc3QgciBvZiBlLmdldEtleXMoKSl7dC5wdXNoKGAgLyR7KDAsaS5lc2NhcGVQREZOYW1lKShyKX0gYCk7YXdhaXQgd3JpdGVWYWx1ZShlLmdldFJhdyhyKSx0LGEpfXQucHVzaCgiPj4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZVN0cmVhbShlLHQsYSl7bGV0IGk9ZS5nZXRTdHJpbmcoKTtjb25zdHtkaWN0OnN9PWUsW28sY109YXdhaXQgUHJvbWlzZS5hbGwoW3MuZ2V0QXN5bmMoIkZpbHRlciIpLHMuZ2V0QXN5bmMoIkRlY29kZVBhcm1zIildKSxsPUFycmF5LmlzQXJyYXkobyk/YXdhaXQgcy54cmVmLmZldGNoSWZSZWZBc3luYyhvWzBdKTpvLGg9KDAsbi5pc05hbWUpKGwsIkZsYXRlRGVjb2RlIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBDb21wcmVzc2lvblN0cmVhbSYmKGkubGVuZ3RoPj0yNTZ8fGgpKXRyeXtjb25zdCBlPSgwLHIuc3RyaW5nVG9CeXRlcykoaSksdD1uZXcgQ29tcHJlc3Npb25TdHJlYW0oImRlZmxhdGUiKSxhPXQud3JpdGFibGUuZ2V0V3JpdGVyKCk7YS53cml0ZShlKTthLmNsb3NlKCk7Y29uc3QgbD1hd2FpdCBuZXcgUmVzcG9uc2UodC5yZWFkYWJsZSkuYXJyYXlCdWZmZXIoKTtpPSgwLHIuYnl0ZXNUb1N0cmluZykobmV3IFVpbnQ4QXJyYXkobCkpO2xldCB1LGQ7aWYobyl7aWYoIWgpe3U9QXJyYXkuaXNBcnJheShvKT9bbi5OYW1lLmdldCgiRmxhdGVEZWNvZGUiKSwuLi5vXTpbbi5OYW1lLmdldCgiRmxhdGVEZWNvZGUiKSxvXTtjJiYoZD1BcnJheS5pc0FycmF5KGMpP1tudWxsLC4uLmNdOltudWxsLGNdKX19ZWxzZSB1PW4uTmFtZS5nZXQoIkZsYXRlRGVjb2RlIik7dSYmcy5zZXQoIkZpbHRlciIsdSk7ZCYmcy5zZXQoIkRlY29kZVBhcm1zIixkKX1jYXRjaChlKXsoMCxyLmluZm8pKGB3cml0ZVN0cmVhbSAtIGNhbm5vdCBjb21wcmVzcyBkYXRhOiAiJHtlfSIuYCl9YSYmKGk9YS5lbmNyeXB0U3RyaW5nKGkpKTtzLnNldCgiTGVuZ3RoIixpLmxlbmd0aCk7YXdhaXQgd3JpdGVEaWN0KHMsdCxhKTt0LnB1c2goIiBzdHJlYW1cbiIsaSwiXG5lbmRzdHJlYW0iKX1hc3luYyBmdW5jdGlvbiB3cml0ZUFycmF5KGUsdCxhKXt0LnB1c2goIlsiKTtsZXQgcj0hMDtmb3IoY29uc3QgbiBvZiBlKXtyP3I9ITE6dC5wdXNoKCIgIik7YXdhaXQgd3JpdGVWYWx1ZShuLHQsYSl9dC5wdXNoKCJdIil9YXN5bmMgZnVuY3Rpb24gd3JpdGVWYWx1ZShlLHQsYSl7aWYoZSBpbnN0YW5jZW9mIG4uTmFtZSl0LnB1c2goYC8keygwLGkuZXNjYXBlUERGTmFtZSkoZS5uYW1lKX1gKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBuLlJlZil0LnB1c2goYCR7ZS5udW19ICR7ZS5nZW59IFJgKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpYXdhaXQgd3JpdGVBcnJheShlLHQsYSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpe2EmJihlPWEuZW5jcnlwdFN0cmluZyhlKSk7dC5wdXNoKGAoJHsoMCxpLmVzY2FwZVN0cmluZykoZSl9KWApfWVsc2UibnVtYmVyIj09dHlwZW9mIGU/dC5wdXNoKCgwLGkubnVtYmVyVG9TdHJpbmcpKGUpKToiYm9vbGVhbiI9PXR5cGVvZiBlP3QucHVzaChlLnRvU3RyaW5nKCkpOmUgaW5zdGFuY2VvZiBuLkRpY3Q/YXdhaXQgd3JpdGVEaWN0KGUsdCxhKTplIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2F3YWl0IHdyaXRlU3RyZWFtKGUsdCxhKTpudWxsPT09ZT90LnB1c2goIm51bGwiKTooMCxyLndhcm4pKGBVbmhhbmRsZWQgdmFsdWUgaW4gd3JpdGVyOiAke3R5cGVvZiBlfSwgcGxlYXNlIGZpbGUgYSBidWcuYCl9ZnVuY3Rpb24gd3JpdGVJbnQoZSx0LGEscil7Zm9yKGxldCBuPXQrYS0xO24+YS0xO24tLSl7cltuXT0yNTUmZTtlPj49OH1yZXR1cm4gYSt0fWZ1bmN0aW9uIHdyaXRlU3RyaW5nKGUsdCxhKXtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspYVt0K3JdPTI1NSZlLmNoYXJDb2RlQXQocil9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuY2FsY3VsYXRlU0hBMjU2PXQuY2FsY3VsYXRlTUQ1PXQuUERGMjA9dC5QREYxNz10LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9dC5BUkNGb3VyQ2lwaGVyPXQuQUVTMjU2Q2lwaGVyPXQuQUVTMTI4Q2lwaGVyPXZvaWQgMDt0LmNhbGN1bGF0ZVNIQTM4ND1jYWxjdWxhdGVTSEEzODQ7dC5jYWxjdWxhdGVTSEE1MTI9dm9pZCAwO2EoODQpO2EoOTMpO2EoOTQpO2EoOTcpO2EoOTkpO2EoMTAxKTthKDEwNSk7YSgxMDgpO2EoMTE1KTthKDE0MCk7dmFyIHI9YSgxNDUpLG49YSgxNTEpLGk9YSgyMjYpO2NsYXNzIEFSQ0ZvdXJDaXBoZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5hPTA7dGhpcy5iPTA7Y29uc3QgdD1uZXcgVWludDhBcnJheSgyNTYpLGE9ZS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXRbZV09ZTtmb3IobGV0IHI9MCxuPTA7cjwyNTY7KytyKXtjb25zdCBpPXRbcl07bj1uK2krZVtyJWFdJjI1NTt0W3JdPXRbbl07dFtuXT1pfXRoaXMucz10fWVuY3J5cHRCbG9jayhlKXtsZXQgdD10aGlzLmEsYT10aGlzLmI7Y29uc3Qgcj10aGlzLnMsbj1lLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KG4pO2ZvcihsZXQgcz0wO3M8bjsrK3Mpe3Q9dCsxJjI1NTtjb25zdCBuPXJbdF07YT1hK24mMjU1O2NvbnN0IG89clthXTtyW3RdPW87clthXT1uO2lbc109ZVtzXV5yW24rbyYyNTVdfXRoaXMuYT10O3RoaXMuYj1hO3JldHVybiBpfWRlY3J5cHRCbG9jayhlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9ZW5jcnlwdChlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fXQuQVJDRm91ckNpcGhlcj1BUkNGb3VyQ2lwaGVyO2NvbnN0IHM9ZnVuY3Rpb24gY2FsY3VsYXRlTUQ1Q2xvc3VyZSgpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoWzcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjEsNiwxMCwxNSwyMV0pLHQ9bmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsLTM4OTU2NDU4Niw2MDYxMDU4MTksLTEwNDQ1MjUzMzAsLTE3NjQxODg5NywxMjAwMDgwNDI2LC0xNDczMjMxMzQxLC00NTcwNTk4MywxNzcwMDM1NDE2LC0xOTU4NDE0NDE3LC00MjA2MywtMTk5MDQwNDE2MiwxODA0NjAzNjgyLC00MDM0MTEwMSwtMTUwMjAwMjI5MCwxMjM2NTM1MzI5LC0xNjU3OTY1MTAsLTEwNjk1MDE2MzIsNjQzNzE3NzEzLC0zNzM4OTczMDIsLTcwMTU1ODY5MSwzODAxNjA4MywtNjYwNDc4MzM1LC00MDU1Mzc4NDgsNTY4NDQ2NDM4LC0xMDE5ODAzNjkwLC0xODczNjM5NjEsMTE2MzUzMTUwMSwtMTQ0NDY4MTQ2NywtNTE0MDM3ODQsMTczNTMyODQ3MywtMTkyNjYwNzczNCwtMzc4NTU4LC0yMDIyNTc0NDYzLDE4MzkwMzA1NjIsLTM1MzA5NTU2LC0xNTMwOTkyMDYwLDEyNzI4OTMzNTMsLTE1NTQ5NzYzMiwtMTA5NDczMDY0MCw2ODEyNzkxNzQsLTM1ODUzNzIyMiwtNzIyNTIxOTc5LDc2MDI5MTg5LC02NDAzNjQ0ODcsLTQyMTgxNTgzNSw1MzA3NDI1MjAsLTk5NTMzODY1MSwtMTk4NjMwODQ0LDExMjY4OTE0MTUsLTE0MTYzNTQ5MDUsLTU3NDM0MDU1LDE3MDA0ODU1NzEsLTE4OTQ5ODY2MDYsLTEwNTE1MjMsLTIwNTQ5MjI3OTksMTg3MzMxMzM1OSwtMzA2MTE3NDQsLTE1NjAxOTgzODAsMTMwOTE1MTY0OSwtMTQ1NTIzMDcwLC0xMTIwMjEwMzc5LDcxODc4NzI1OSwtMzQzNDg1NTUxXSk7cmV0dXJuIGZ1bmN0aW9uIGhhc2goYSxyLG4pe2xldCBpPTE3MzI1ODQxOTMscz0tMjcxNzMzODc5LG89LTE3MzI1ODQxOTQsYz0yNzE3MzM4Nzg7Y29uc3QgbD1uKzcyJi02NCxoPW5ldyBVaW50OEFycmF5KGwpO2xldCB1LGQ7Zm9yKHU9MDt1PG47Kyt1KWhbdV09YVtyKytdO2hbdSsrXT0xMjg7Y29uc3QgZj1sLTg7Zm9yKDt1PGY7KWhbdSsrXT0wO2hbdSsrXT1uPDwzJjI1NTtoW3UrK109bj4+NSYyNTU7aFt1KytdPW4+PjEzJjI1NTtoW3UrK109bj4+MjEmMjU1O2hbdSsrXT1uPj4+MjkmMjU1O2hbdSsrXT0wO2hbdSsrXT0wO2hbdSsrXT0wO2NvbnN0IGc9bmV3IEludDMyQXJyYXkoMTYpO2Zvcih1PTA7dTxsOyl7Zm9yKGQ9MDtkPDE2OysrZCx1Kz00KWdbZF09aFt1XXxoW3UrMV08PDh8aFt1KzJdPDwxNnxoW3UrM108PDI0O2xldCBhLHIsbj1pLGw9cyxmPW8scD1jO2ZvcihkPTA7ZDw2NDsrK2Qpe2lmKGQ8MTYpe2E9bCZmfH5sJnA7cj1kfWVsc2UgaWYoZDwzMil7YT1wJmx8fnAmZjtyPTUqZCsxJjE1fWVsc2UgaWYoZDw0OCl7YT1sXmZecDtyPTMqZCs1JjE1fWVsc2V7YT1mXihsfH5wKTtyPTcqZCYxNX1jb25zdCBpPXAscz1uK2ErdFtkXStnW3JdfDAsbz1lW2RdO3A9ZjtmPWw7bD1sKyhzPDxvfHM+Pj4zMi1vKXwwO249aX1pPWkrbnwwO3M9cytsfDA7bz1vK2Z8MDtjPWMrcHwwfXJldHVybiBuZXcgVWludDhBcnJheShbMjU1JmksaT4+OCYyNTUsaT4+MTYmMjU1LGk+Pj4yNCYyNTUsMjU1JnMscz4+OCYyNTUscz4+MTYmMjU1LHM+Pj4yNCYyNTUsMjU1Jm8sbz4+OCYyNTUsbz4+MTYmMjU1LG8+Pj4yNCYyNTUsMjU1JmMsYz4+OCYyNTUsYz4+MTYmMjU1LGM+Pj4yNCYyNTVdKX19KCk7dC5jYWxjdWxhdGVNRDU9cztjbGFzcyBXb3JkNjR7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmhpZ2g9MHxlO3RoaXMubG93PTB8dH1hbmQoZSl7dGhpcy5oaWdoJj1lLmhpZ2g7dGhpcy5sb3cmPWUubG93fXhvcihlKXt0aGlzLmhpZ2hePWUuaGlnaDt0aGlzLmxvd149ZS5sb3d9b3IoZSl7dGhpcy5oaWdofD1lLmhpZ2g7dGhpcy5sb3d8PWUubG93fXNoaWZ0UmlnaHQoZSl7aWYoZT49MzIpe3RoaXMubG93PXRoaXMuaGlnaD4+PmUtMzJ8MDt0aGlzLmhpZ2g9MH1lbHNle3RoaXMubG93PXRoaXMubG93Pj4+ZXx0aGlzLmhpZ2g8PDMyLWU7dGhpcy5oaWdoPXRoaXMuaGlnaD4+PmV8MH19c2hpZnRMZWZ0KGUpe2lmKGU+PTMyKXt0aGlzLmhpZ2g9dGhpcy5sb3c8PGUtMzI7dGhpcy5sb3c9MH1lbHNle3RoaXMuaGlnaD10aGlzLmhpZ2g8PGV8dGhpcy5sb3c+Pj4zMi1lO3RoaXMubG93PDw9ZX19cm90YXRlUmlnaHQoZSl7bGV0IHQsYTtpZigzMiZlKXthPXRoaXMubG93O3Q9dGhpcy5oaWdofWVsc2V7dD10aGlzLmxvdzthPXRoaXMuaGlnaH1lJj0zMTt0aGlzLmxvdz10Pj4+ZXxhPDwzMi1lO3RoaXMuaGlnaD1hPj4+ZXx0PDwzMi1lfW5vdCgpe3RoaXMuaGlnaD1+dGhpcy5oaWdoO3RoaXMubG93PX50aGlzLmxvd31hZGQoZSl7Y29uc3QgdD0odGhpcy5sb3c+Pj4wKSsoZS5sb3c+Pj4wKTtsZXQgYT0odGhpcy5oaWdoPj4+MCkrKGUuaGlnaD4+PjApO3Q+NDI5NDk2NzI5NSYmKGErPTEpO3RoaXMubG93PTB8dDt0aGlzLmhpZ2g9MHxhfWNvcHlUbyhlLHQpe2VbdF09dGhpcy5oaWdoPj4+MjQmMjU1O2VbdCsxXT10aGlzLmhpZ2g+PjE2JjI1NTtlW3QrMl09dGhpcy5oaWdoPj44JjI1NTtlW3QrM109MjU1JnRoaXMuaGlnaDtlW3QrNF09dGhpcy5sb3c+Pj4yNCYyNTU7ZVt0KzVdPXRoaXMubG93Pj4xNiYyNTU7ZVt0KzZdPXRoaXMubG93Pj44JjI1NTtlW3QrN109MjU1JnRoaXMubG93fWFzc2lnbihlKXt0aGlzLmhpZ2g9ZS5oaWdoO3RoaXMubG93PWUubG93fX1jb25zdCBvPWZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTI1NkNsb3N1cmUoKXtmdW5jdGlvbiByb3RyKGUsdCl7cmV0dXJuIGU+Pj50fGU8PDMyLXR9ZnVuY3Rpb24gY2goZSx0LGEpe3JldHVybiBlJnRefmUmYX1mdW5jdGlvbiBtYWooZSx0LGEpe3JldHVybiBlJnReZSZhXnQmYX1mdW5jdGlvbiBzaWdtYShlKXtyZXR1cm4gcm90cihlLDIpXnJvdHIoZSwxMylecm90cihlLDIyKX1mdW5jdGlvbiBzaWdtYVByaW1lKGUpe3JldHVybiByb3RyKGUsNilecm90cihlLDExKV5yb3RyKGUsMjUpfWZ1bmN0aW9uIGxpdHRsZVNpZ21hKGUpe3JldHVybiByb3RyKGUsNylecm90cihlLDE4KV5lPj4+M31jb25zdCBlPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO3JldHVybiBmdW5jdGlvbiBoYXNoKHQsYSxyKXtsZXQgbj0xNzc5MDMzNzAzLGk9MzE0NDEzNDI3NyxzPTEwMTM5MDQyNDIsbz0yNzczNDgwNzYyLGM9MTM1OTg5MzExOSxsPTI2MDA4MjI5MjQsaD01Mjg3MzQ2MzUsdT0xNTQxNDU5MjI1O2NvbnN0IGQ9NjQqTWF0aC5jZWlsKChyKzkpLzY0KSxmPW5ldyBVaW50OEFycmF5KGQpO2xldCBnLHA7Zm9yKGc9MDtnPHI7KytnKWZbZ109dFthKytdO2ZbZysrXT0xMjg7Y29uc3QgbT1kLTg7Zm9yKDtnPG07KWZbZysrXT0wO2ZbZysrXT0wO2ZbZysrXT0wO2ZbZysrXT0wO2ZbZysrXT1yPj4+MjkmMjU1O2ZbZysrXT1yPj4yMSYyNTU7ZltnKytdPXI+PjEzJjI1NTtmW2crK109cj4+NSYyNTU7ZltnKytdPXI8PDMmMjU1O2NvbnN0IGI9bmV3IFVpbnQzMkFycmF5KDY0KTtmb3IoZz0wO2c8ZDspe2ZvcihwPTA7cDwxNjsrK3Ape2JbcF09ZltnXTw8MjR8ZltnKzFdPDwxNnxmW2crMl08PDh8ZltnKzNdO2crPTR9Zm9yKHA9MTY7cDw2NDsrK3ApYltwXT0ocm90cih5PWJbcC0yXSwxNylecm90cih5LDE5KV55Pj4+MTApK2JbcC03XStsaXR0bGVTaWdtYShiW3AtMTVdKStiW3AtMTZdfDA7bGV0IHQsYSxyPW4sZD1pLG09cyx3PW8sUz1jLHg9bCxDPWgsdj11O2ZvcihwPTA7cDw2NDsrK3Ape3Q9ditzaWdtYVByaW1lKFMpK2NoKFMseCxDKStlW3BdK2JbcF07YT1zaWdtYShyKSttYWoocixkLG0pO3Y9QztDPXg7eD1TO1M9dyt0fDA7dz1tO209ZDtkPXI7cj10K2F8MH1uPW4rcnwwO2k9aStkfDA7cz1zK218MDtvPW8rd3wwO2M9YytTfDA7bD1sK3h8MDtoPWgrQ3wwO3U9dSt2fDB9dmFyIHk7cmV0dXJuIG5ldyBVaW50OEFycmF5KFtuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLGk+PjI0JjI1NSxpPj4xNiYyNTUsaT4+OCYyNTUsMjU1Jmkscz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyxvPj4yNCYyNTUsbz4+MTYmMjU1LG8+PjgmMjU1LDI1NSZvLGM+PjI0JjI1NSxjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMsbD4+MjQmMjU1LGw+PjE2JjI1NSxsPj44JjI1NSwyNTUmbCxoPj4yNCYyNTUsaD4+MTYmMjU1LGg+PjgmMjU1LDI1NSZoLHU+PjI0JjI1NSx1Pj4xNiYyNTUsdT4+OCYyNTUsMjU1JnVdKX19KCk7dC5jYWxjdWxhdGVTSEEyNTY9bztjb25zdCBjPWZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTUxMkNsb3N1cmUoKXtmdW5jdGlvbiBjaChlLHQsYSxyLG4pe2UuYXNzaWduKHQpO2UuYW5kKGEpO24uYXNzaWduKHQpO24ubm90KCk7bi5hbmQocik7ZS54b3Iobil9ZnVuY3Rpb24gbWFqKGUsdCxhLHIsbil7ZS5hc3NpZ24odCk7ZS5hbmQoYSk7bi5hc3NpZ24odCk7bi5hbmQocik7ZS54b3Iobik7bi5hc3NpZ24oYSk7bi5hbmQocik7ZS54b3Iobil9ZnVuY3Rpb24gc2lnbWEoZSx0LGEpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMjgpO2EuYXNzaWduKHQpO2Eucm90YXRlUmlnaHQoMzQpO2UueG9yKGEpO2EuYXNzaWduKHQpO2Eucm90YXRlUmlnaHQoMzkpO2UueG9yKGEpfWZ1bmN0aW9uIHNpZ21hUHJpbWUoZSx0LGEpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMTQpO2EuYXNzaWduKHQpO2Eucm90YXRlUmlnaHQoMTgpO2UueG9yKGEpO2EuYXNzaWduKHQpO2Eucm90YXRlUmlnaHQoNDEpO2UueG9yKGEpfWZ1bmN0aW9uIGxpdHRsZVNpZ21hKGUsdCxhKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDEpO2EuYXNzaWduKHQpO2Eucm90YXRlUmlnaHQoOCk7ZS54b3IoYSk7YS5hc3NpZ24odCk7YS5zaGlmdFJpZ2h0KDcpO2UueG9yKGEpfWZ1bmN0aW9uIGxpdHRsZVNpZ21hUHJpbWUoZSx0LGEpe2UuYXNzaWduKHQpO2Uucm90YXRlUmlnaHQoMTkpO2EuYXNzaWduKHQpO2Eucm90YXRlUmlnaHQoNjEpO2UueG9yKGEpO2EuYXNzaWduKHQpO2Euc2hpZnRSaWdodCg2KTtlLnhvcihhKX1jb25zdCBlPVtuZXcgV29yZDY0KDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IFdvcmQ2NCgxODk5NDQ3NDQxLDYwMjg5MTcyNSksbmV3IFdvcmQ2NCgzMDQ5MzIzNDcxLDM5NjQ0ODQzOTkpLG5ldyBXb3JkNjQoMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgV29yZDY0KDk2MTk4NzE2Myw0MDgxNjI4NDcyKSxuZXcgV29yZDY0KDE1MDg5NzA5OTMsMzA1MzgzNDI2NSksbmV3IFdvcmQ2NCgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyBXb3JkNjQoMjg3MDc2MzIyMSwzNjY0NjA5NTYwKSxuZXcgV29yZDY0KDM2MjQzODEwODAsMjczNDg4MzM5NCksbmV3IFdvcmQ2NCgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IFdvcmQ2NCg2MDcyMjUyNzgsMTMyMzYxMDc2NCksbmV3IFdvcmQ2NCgxNDI2ODgxOTg3LDM1OTAzMDQ5OTQpLG5ldyBXb3JkNjQoMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgV29yZDY0KDIxNjIwNzgyMDYsOTkxMzM2MTEzKSxuZXcgV29yZDY0KDI2MTQ4ODgxMDMsNjMzODAzMzE3KSxuZXcgV29yZDY0KDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IFdvcmQ2NCgzODM1MzkwNDAxLDI2NjY2MTM0NTgpLG5ldyBXb3JkNjQoNDAyMjIyNDc3NCw5NDQ3MTExMzkpLG5ldyBXb3JkNjQoMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyBXb3JkNjQoNjA0ODA3NjI4LDIwMDc4MDA5MzMpLG5ldyBXb3JkNjQoNzcwMjU1OTgzLDE0OTU5OTA5MDEpLG5ldyBXb3JkNjQoMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgV29yZDY0KDE1NTUwODE2OTIsMzE3NTIxODEzMiksbmV3IFdvcmQ2NCgxOTk2MDY0OTg2LDIxOTg5NTA4MzcpLG5ldyBXb3JkNjQoMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgV29yZDY0KDI4MjE4MzQzNDksNzY2Nzg0MDE2KSxuZXcgV29yZDY0KDI5NTI5OTY4MDgsMjU2NjU5NDg3OSksbmV3IFdvcmQ2NCgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyBXb3JkNjQoMzMzNjU3MTg5MSwxMDM0NDU3MDI2KSxuZXcgV29yZDY0KDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSksbmV3IFdvcmQ2NCgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IFdvcmQ2NCgzMzgyNDE4OTUsMTY4NzE3OTM2KSxuZXcgV29yZDY0KDY2NjMwNzIwNSwxMTg4MTc5OTY0KSxuZXcgV29yZDY0KDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgV29yZDY0KDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSksbmV3IFdvcmQ2NCgxMzk2MTgyMjkxLDI2NDM4MzM4MjMpLG5ldyBXb3JkNjQoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgV29yZDY0KDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksbmV3IFdvcmQ2NCgyMTc3MDI2MzUwLDEyMDY3NTkxNDIpLG5ldyBXb3JkNjQoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyBXb3JkNjQoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxuZXcgV29yZDY0KDI4MjAzMDI0MTEsMzE1ODQ1NDI3MyksbmV3IFdvcmQ2NCgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyBXb3JkNjQoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLG5ldyBXb3JkNjQoMzUxNjA2NTgxNywzNjA2MDA4MzQ0KSxuZXcgV29yZDY0KDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IFdvcmQ2NCg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLG5ldyBXb3JkNjQoMjc1NDIzMzQ0LDg1MTE2OTcyMCksbmV3IFdvcmQ2NCg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IFdvcmQ2NCg1MDY5NDg2MTYsMTM2MzI1ODE5NSksbmV3IFdvcmQ2NCg2NTkwNjA1NTYsMzc1MDY4NTU5MyksbmV3IFdvcmQ2NCg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IFdvcmQ2NCg5NTgxMzk1NzEsMzMxODMwNzQyNyksbmV3IFdvcmQ2NCgxMzIyODIyMjE4LDM4MTI3MjM0MDMpLG5ldyBXb3JkNjQoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgV29yZDY0KDE3NDc4NzM3NzksMzYwMjAzNjg5OSksbmV3IFdvcmQ2NCgxOTU1NTYyMjIyLDE1NzU5OTAwMTIpLG5ldyBXb3JkNjQoMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgV29yZDY0KDIyMjc3MzA0NTIsMjcxNjkwNDMwNiksbmV3IFdvcmQ2NCgyMzYxODUyNDI0LDQ0Mjc3NjA0NCksbmV3IFdvcmQ2NCgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IFdvcmQ2NCgyNzU2NzM0MTg3LDM3MzMxMTAyNDkpLG5ldyBXb3JkNjQoMzIwNDAzMTQ3OSwyOTk5MzUxNTczKSxuZXcgV29yZDY0KDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IFdvcmQ2NCgzMzkxNTY5NjE0LDM5MjgzODM5MDApLG5ldyBXb3JkNjQoMzUxNTI2NzI3MSw1NjYyODA3MTEpLG5ldyBXb3JkNjQoMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgV29yZDY0KDQxMTg2MzAyNzEsNDAwMDIzOTk5MiksbmV3IFdvcmQ2NCgxMTY0MTg0NzQsMTkxNDEzODU1NCksbmV3IFdvcmQ2NCgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IFdvcmQ2NCgyODkzODAzNTYsMzIwMzk5MzAwNiksbmV3IFdvcmQ2NCg0NjAzOTMyNjksMzIwNjIwMzE1KSxuZXcgV29yZDY0KDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyBXb3JkNjQoODUyMTQyOTcxLDEwODY3OTI4NTEpLG5ldyBXb3JkNjQoMTAxNzAzNjI5OCwzNjU1NDMxMDApLG5ldyBXb3JkNjQoMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgV29yZDY0KDEyODgwMzM0NzAsMzQwOTg1NTE1OCksbmV3IFdvcmQ2NCgxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYpLG5ldyBXb3JkNjQoMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyBXb3JkNjQoMTgxNjQwMjMxNiwxMjQ2MTg5NTkxKV07cmV0dXJuIGZ1bmN0aW9uIGhhc2godCxhLHIpe2xldCBuLGkscyxvLGMsbCxoLHUsZD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2lmKGQpe249bmV3IFdvcmQ2NCgzNDE4MDcwMzY1LDMyMzgzNzEwMzIpO2k9bmV3IFdvcmQ2NCgxNjU0MjcwMjUwLDkxNDE1MDY2Myk7cz1uZXcgV29yZDY0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KTtvPW5ldyBXb3JkNjQoMzU1NDYyMzYwLDQxNDQ5MTI2OTcpO2M9bmV3IFdvcmQ2NCgxNzMxNDA1NDE1LDQyOTA3NzU4NTcpO2w9bmV3IFdvcmQ2NCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpO2g9bmV3IFdvcmQ2NCgzNjc1MDA4NTI1LDE2OTQwNzY4MzkpO3U9bmV3IFdvcmQ2NCgxMjAzMDYyODEzLDMyMDQwNzU0MjgpfWVsc2V7bj1uZXcgV29yZDY0KDE3NzkwMzM3MDMsNDA4OTIzNTcyMCk7aT1uZXcgV29yZDY0KDMxNDQxMzQyNzcsMjIyNzg3MzU5NSk7cz1uZXcgV29yZDY0KDEwMTM5MDQyNDIsNDI3MTE3NTcyMyk7bz1uZXcgV29yZDY0KDI3NzM0ODA3NjIsMTU5NTc1MDEyOSk7Yz1uZXcgV29yZDY0KDEzNTk4OTMxMTksMjkxNzU2NTEzNyk7bD1uZXcgV29yZDY0KDI2MDA4MjI5MjQsNzI1NTExMTk5KTtoPW5ldyBXb3JkNjQoNTI4NzM0NjM1LDQyMTUzODk1NDcpO3U9bmV3IFdvcmQ2NCgxNTQxNDU5MjI1LDMyNzAzMzIwOSl9Y29uc3QgZj0xMjgqTWF0aC5jZWlsKChyKzE3KS8xMjgpLGc9bmV3IFVpbnQ4QXJyYXkoZik7bGV0IHAsbTtmb3IocD0wO3A8cjsrK3ApZ1twXT10W2ErK107Z1twKytdPTEyODtjb25zdCBiPWYtMTY7Zm9yKDtwPGI7KWdbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT0wO2dbcCsrXT1yPj4+MjkmMjU1O2dbcCsrXT1yPj4yMSYyNTU7Z1twKytdPXI+PjEzJjI1NTtnW3ArK109cj4+NSYyNTU7Z1twKytdPXI8PDMmMjU1O2NvbnN0IHk9bmV3IEFycmF5KDgwKTtmb3IocD0wO3A8ODA7cCsrKXlbcF09bmV3IFdvcmQ2NCgwLDApO2xldCB3PW5ldyBXb3JkNjQoMCwwKSxTPW5ldyBXb3JkNjQoMCwwKSx4PW5ldyBXb3JkNjQoMCwwKSxDPW5ldyBXb3JkNjQoMCwwKSx2PW5ldyBXb3JkNjQoMCwwKSxrPW5ldyBXb3JkNjQoMCwwKSxPPW5ldyBXb3JkNjQoMCwwKSxUPW5ldyBXb3JkNjQoMCwwKTtjb25zdCBNPW5ldyBXb3JkNjQoMCwwKSxFPW5ldyBXb3JkNjQoMCwwKSxEPW5ldyBXb3JkNjQoMCwwKSxSPW5ldyBXb3JkNjQoMCwwKTtsZXQgTixMO2ZvcihwPTA7cDxmOyl7Zm9yKG09MDttPDE2OysrbSl7eVttXS5oaWdoPWdbcF08PDI0fGdbcCsxXTw8MTZ8Z1twKzJdPDw4fGdbcCszXTt5W21dLmxvdz1nW3ArNF08PDI0fGdbcCs1XTw8MTZ8Z1twKzZdPDw4fGdbcCs3XTtwKz04fWZvcihtPTE2O208ODA7KyttKXtOPXlbbV07bGl0dGxlU2lnbWFQcmltZShOLHlbbS0yXSxSKTtOLmFkZCh5W20tN10pO2xpdHRsZVNpZ21hKEQseVttLTE1XSxSKTtOLmFkZChEKTtOLmFkZCh5W20tMTZdKX13LmFzc2lnbihuKTtTLmFzc2lnbihpKTt4LmFzc2lnbihzKTtDLmFzc2lnbihvKTt2LmFzc2lnbihjKTtrLmFzc2lnbihsKTtPLmFzc2lnbihoKTtULmFzc2lnbih1KTtmb3IobT0wO208ODA7KyttKXtNLmFzc2lnbihUKTtzaWdtYVByaW1lKEQsdixSKTtNLmFkZChEKTtjaChELHYsayxPLFIpO00uYWRkKEQpO00uYWRkKGVbbV0pO00uYWRkKHlbbV0pO3NpZ21hKEUsdyxSKTttYWooRCx3LFMseCxSKTtFLmFkZChEKTtOPVQ7VD1PO089aztrPXY7Qy5hZGQoTSk7dj1DO0M9eDt4PVM7Uz13O04uYXNzaWduKE0pO04uYWRkKEUpO3c9Tn1uLmFkZCh3KTtpLmFkZChTKTtzLmFkZCh4KTtvLmFkZChDKTtjLmFkZCh2KTtsLmFkZChrKTtoLmFkZChPKTt1LmFkZChUKX1pZihkKXtMPW5ldyBVaW50OEFycmF5KDQ4KTtuLmNvcHlUbyhMLDApO2kuY29weVRvKEwsOCk7cy5jb3B5VG8oTCwxNik7by5jb3B5VG8oTCwyNCk7Yy5jb3B5VG8oTCwzMik7bC5jb3B5VG8oTCw0MCl9ZWxzZXtMPW5ldyBVaW50OEFycmF5KDY0KTtuLmNvcHlUbyhMLDApO2kuY29weVRvKEwsOCk7cy5jb3B5VG8oTCwxNik7by5jb3B5VG8oTCwyNCk7Yy5jb3B5VG8oTCwzMik7bC5jb3B5VG8oTCw0MCk7aC5jb3B5VG8oTCw0OCk7dS5jb3B5VG8oTCw1Nil9cmV0dXJuIEx9fSgpO3QuY2FsY3VsYXRlU0hBNTEyPWM7ZnVuY3Rpb24gY2FsY3VsYXRlU0hBMzg0KGUsdCxhKXtyZXR1cm4gYyhlLHQsYSwhMCl9Y2xhc3MgTnVsbENpcGhlcntkZWNyeXB0QmxvY2soZSl7cmV0dXJuIGV9ZW5jcnlwdChlKXtyZXR1cm4gZX19Y2xhc3MgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1BRVNCYXNlQ2lwaGVyJiYoMCxyLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQUVTQmFzZUNpcGhlci4iKTt0aGlzLl9zPW5ldyBVaW50OEFycmF5KFs5OSwxMjQsMTE5LDEyMywyNDIsMTA3LDExMSwxOTcsNDgsMSwxMDMsNDMsMjU0LDIxNSwxNzEsMTE4LDIwMiwxMzAsMjAxLDEyNSwyNTAsODksNzEsMjQwLDE3MywyMTIsMTYyLDE3NSwxNTYsMTY0LDExNCwxOTIsMTgzLDI1MywxNDcsMzgsNTQsNjMsMjQ3LDIwNCw1MiwxNjUsMjI5LDI0MSwxMTMsMjE2LDQ5LDIxLDQsMTk5LDM1LDE5NSwyNCwxNTAsNSwxNTQsNywxOCwxMjgsMjI2LDIzNSwzOSwxNzgsMTE3LDksMTMxLDQ0LDI2LDI3LDExMCw5MCwxNjAsODIsNTksMjE0LDE3OSw0MSwyMjcsNDcsMTMyLDgzLDIwOSwwLDIzNywzMiwyNTIsMTc3LDkxLDEwNiwyMDMsMTkwLDU3LDc0LDc2LDg4LDIwNywyMDgsMjM5LDE3MCwyNTEsNjcsNzcsNTEsMTMzLDY5LDI0OSwyLDEyNyw4MCw2MCwxNTksMTY4LDgxLDE2Myw2NCwxNDMsMTQ2LDE1Nyw1NiwyNDUsMTg4LDE4MiwyMTgsMzMsMTYsMjU1LDI0MywyMTAsMjA1LDEyLDE5LDIzNiw5NSwxNTEsNjgsMjMsMTk2LDE2NywxMjYsNjEsMTAwLDkzLDI1LDExNSw5NiwxMjksNzksMjIwLDM0LDQyLDE0NCwxMzYsNzAsMjM4LDE4NCwyMCwyMjIsOTQsMTEsMjE5LDIyNCw1MCw1OCwxMCw3Myw2LDM2LDkyLDE5NCwyMTEsMTcyLDk4LDE0NSwxNDksMjI4LDEyMSwyMzEsMjAwLDU1LDEwOSwxNDEsMjEzLDc4LDE2OSwxMDgsODYsMjQ0LDIzNCwxMDEsMTIyLDE3NCw4LDE4NiwxMjAsMzcsNDYsMjgsMTY2LDE4MCwxOTgsMjMyLDIyMSwxMTYsMzEsNzUsMTg5LDEzOSwxMzgsMTEyLDYyLDE4MSwxMDIsNzIsMywyNDYsMTQsOTcsNTMsODcsMTg1LDEzNCwxOTMsMjksMTU4LDIyNSwyNDgsMTUyLDE3LDEwNSwyMTcsMTQyLDE0OCwxNTUsMzAsMTM1LDIzMywyMDYsODUsNDAsMjIzLDE0MCwxNjEsMTM3LDEzLDE5MSwyMzAsNjYsMTA0LDY1LDE1Myw0NSwxNSwxNzYsODQsMTg3LDIyXSk7dGhpcy5faW52X3M9bmV3IFVpbnQ4QXJyYXkoWzgyLDksMTA2LDIxMyw0OCw1NCwxNjUsNTYsMTkxLDY0LDE2MywxNTgsMTI5LDI0MywyMTUsMjUxLDEyNCwyMjcsNTcsMTMwLDE1NSw0NywyNTUsMTM1LDUyLDE0Miw2Nyw2OCwxOTYsMjIyLDIzMywyMDMsODQsMTIzLDE0OCw1MCwxNjYsMTk0LDM1LDYxLDIzOCw3NiwxNDksMTEsNjYsMjUwLDE5NSw3OCw4LDQ2LDE2MSwxMDIsNDAsMjE3LDM2LDE3OCwxMTgsOTEsMTYyLDczLDEwOSwxMzksMjA5LDM3LDExNCwyNDgsMjQ2LDEwMCwxMzQsMTA0LDE1MiwyMiwyMTIsMTY0LDkyLDIwNCw5MywxMDEsMTgyLDE0NiwxMDgsMTEyLDcyLDgwLDI1MywyMzcsMTg1LDIxOCw5NCwyMSw3MCw4NywxNjcsMTQxLDE1NywxMzIsMTQ0LDIxNiwxNzEsMCwxNDAsMTg4LDIxMSwxMCwyNDcsMjI4LDg4LDUsMTg0LDE3OSw2OSw2LDIwOCw0NCwzMCwxNDMsMjAyLDYzLDE1LDIsMTkzLDE3NSwxODksMywxLDE5LDEzOCwxMDcsNTgsMTQ1LDE3LDY1LDc5LDEwMywyMjAsMjM0LDE1MSwyNDIsMjA3LDIwNiwyNDAsMTgwLDIzMCwxMTUsMTUwLDE3MiwxMTYsMzQsMjMxLDE3Myw1MywxMzMsMjI2LDI0OSw1NSwyMzIsMjgsMTE3LDIyMywxMTAsNzEsMjQxLDI2LDExMywyOSw0MSwxOTcsMTM3LDExMSwxODMsOTgsMTQsMTcwLDI0LDE5MCwyNywyNTIsODYsNjIsNzUsMTk4LDIxMCwxMjEsMzIsMTU0LDIxOSwxOTIsMjU0LDEyMCwyMDUsOTAsMjQ0LDMxLDIyMSwxNjgsNTEsMTM2LDcsMTk5LDQ5LDE3NywxOCwxNiw4OSwzOSwxMjgsMjM2LDk1LDk2LDgxLDEyNywxNjksMjUsMTgxLDc0LDEzLDQ1LDIyOSwxMjIsMTU5LDE0NywyMDEsMTU2LDIzOSwxNjAsMjI0LDU5LDc3LDE3NCw0MiwyNDUsMTc2LDIwMCwyMzUsMTg3LDYwLDEzMSw4MywxNTMsOTcsMjMsNDMsNCwxMjYsMTg2LDExOSwyMTQsMzgsMjI1LDEwNSwyMCw5OSw4NSwzMywxMiwxMjVdKTt0aGlzLl9taXg9bmV3IFVpbnQzMkFycmF5KFswLDIzNTQ3NDE4Nyw0NzA5NDgzNzQsMzAzNzY1Mjc3LDk0MTg5Njc0OCw5MDg5MzM0MTUsNjA3NTMwNTU0LDcwODc4MDg0OSwxODgzNzkzNDk2LDIxMTgyMTQ5OTUsMTgxNzg2NjgzMCwxNjQ5NjM5MjM3LDEyMTUwNjExMDgsMTE4MTA0NTExOSwxNDE3NTYxNjk4LDE1MTc3Njc1MjksMzc2NzU4Njk5Miw0MDAzMDYxMTc5LDQyMzY0Mjk5OTAsNDA2OTI0Njg5MywzNjM1NzMzNjYwLDM2MDI3NzAzMjcsMzI5OTI3ODQ3NCwzNDAwNTI4NzY5LDI0MzAxMjIyMTYsMjY2NDU0MzcxNSwyMzYyMDkwMjM4LDIxOTM4NjI2NDUsMjgzNTEyMzM5NiwyODAxMTA3NDA3LDMwMzU1MzUwNTgsMzEzNTc0MDg4OSwzNjc4MTI0OTIzLDM1NzY4NzA1MTIsMzM0MTM5NDI4NSwzMzc0MzYxNzAyLDM4MTA0OTYzNDMsMzk3NzY3NTM1Niw0Mjc5MDgwMjU3LDQwNDM2MTAxODYsMjg3NjQ5NDYyNywyNzc2MjkyOTA0LDMwNzY2MzkwMjksMzExMDY1MDk0MiwyNDcyMDExNTM1LDI2NDAyNDMyMDQsMjQwMzcyODY2NSwyMTY5MzAzMDU4LDEwMDEwODk5OTUsODk5ODM1NTg0LDY2NjQ2NDczMyw2OTk0MzIxNTAsNTk3Mjc4NDcsMjI2OTA2ODYwLDUzMDQwMDc1MywyOTQ5MzA2ODIsMTI3MzE2ODc4NywxMTcyOTY3MDY0LDE0NzU0MTg1MDEsMTUwOTQzMDQxNCwxOTQyNDM1Nzc1LDIxMTA2Njc0NDQsMTg3NjI0MTgzMywxNjQxODE2MjI2LDI5MTAyMTk3NjYsMjc0MzAzNDEwOSwyOTc2MTUxNTIwLDMyMTE2MjMxNDcsMjUwNTIwMjEzOCwyNjA2NDUzOTY5LDIzMDI2OTAyNTIsMjI2OTcyODQ1NSwzNzExODI5NDIyLDM1NDM1OTkyNjksMzI0MDg5NDM5MiwzNDc1MzEzMzMxLDM4NDM2OTkwNzQsMzk0MzkwNjQ0MSw0MTc4MDYyMjI4LDQxNDQwNDc3NzUsMTMwNjk2NzM2NiwxMTM5NzgxNzA5LDEzNzQ5ODgxMTIsMTYxMDQ1OTczOSwxOTc1NjgzNDM0LDIwNzY5MzUyNjUsMTc3NTI3NjkyNCwxNzQyMzE1MTI3LDEwMzQ4Njc5OTgsODY2NjM3ODQ1LDU2NjAyMTg5Niw4MDA0NDA4MzUsOTI5ODc2OTgsMTkzMTk1MDY1LDQyOTQ1NjE2NCwzOTU0NDE3MTEsMTk4NDgxMjY4NSwyMDE3Nzc4NTY2LDE3ODQ2NjMxOTUsMTY4MzQwNzI0OCwxMzE1NTYyMTQ1LDEwODAwOTQ2MzQsMTM4Mzg1NjMxMSwxNTUxMDM3ODg0LDEwMTAzOTgyOSwxMzUwNTAyMDYsNDM3NzU3MTIzLDMzNzU1Mzg2NCwxMDQyMzg1NjU3LDgwNzk2MjYxMCw1NzM4MDQ3ODMsNzQyMDM5MDEyLDI1MzEwNjc0NTMsMjU2NDAzMzMzNCwyMzI4ODI4OTcxLDIyMjc1NzMwMjQsMjkzNTU2Njg2NSwyNzAwMDk5MzU0LDMwMDE3NTU2NTUsMzE2ODkzNzIyOCwzODY4NTUyODA1LDM5MDI1NjMxODIsNDIwMzE4MTE3MSw0MTAyOTc3OTEyLDM3MzYxNjQ5MzcsMzUwMTc0MTg5MCwzMjY1NDc4NzUxLDM0MzM3MTI5ODAsMTEwNjA0MTU5MSwxMzQwNDYzMTAwLDE1NzY5NzY2MDksMTQwODc0OTAzNCwyMDQzMjExNDgzLDIwMDkxOTU0NzIsMTcwODg0ODMzMywxODA5MDU0MTUwLDgzMjg3NzIzMSwxMDY4MzUxMzk2LDc2Njk0NTQ2NSw1OTk3NjIzNTQsMTU5NDE3OTg3LDEyNjQ1NDY2NCwzNjE5Mjk4NzcsNDYzMTgwMTkwLDI3MDkyNjA4NzEsMjk0MzY4MjM4MCwzMTc4MTA2OTYxLDMwMDk4NzkzODYsMjU3MjY5NzE5NSwyNTM4NjgxMTg0LDIyMzYyMjg3MzMsMjMzNjQzNDU1MCwzNTA5ODcxMTM1LDM3NDUzNDUzMDAsMzQ0MTg1MDM3NywzMjc0NjY3MjY2LDM5MTAxNjE5NzEsMzg3NzE5ODY0OCw0MTEwNTY4NDg1LDQyMTE4MTg3OTgsMjU5NzgwNjQ3NiwyNDk3NjA0NzQzLDIyNjEwODkxNzgsMjI5NTEwMTA3MywyNzMzODU2MTYwLDI5MDIwODc4NTEsMzIwMjQzNzA0NiwyOTY4MDExNDUzLDM5MzYyOTEyODQsMzgzNTAzNjg5NSw0MTM2NDQwNzcwLDQxNjk0MDgyMDEsMzUzNTQ4NjQ1NiwzNzAyNjY1NDU5LDM0NjcxOTIzMDIsMzIzMTcyMjIxMywyMDUxNTE4NzgwLDE5NTEzMTcwNDcsMTcxNjg5MDQxMCwxNzUwOTAyMzA1LDExMTM4MTgzODQsMTI4MjA1MDA3NSwxNTg0NTA0NTgyLDEzNTAwNzg5ODksMTY4ODEwODUyLDY3NTU2NDYzLDM3MTA0OTMzMCw0MDQwMTY3NjEsODQxNzM5NTkyLDEwMDg5MTg1OTUsNzc1NTUwODE0LDU0MDA4MDcyNSwzOTY5NTYyMzY5LDM4MDEzMzIyMzQsNDAzNTQ4OTA0Nyw0MjY5OTA3OTk2LDM1NjkyNTUyMTMsMzY2OTQ2MjU2NiwzMzY2NzU0NjE5LDMzMzI3NDAxNDQsMjYzMTA2NTQzMywyNDYzODc5NzYyLDIxNjAxMTcwNzEsMjM5NTU4ODY3NiwyNzY3NjQ1NTU3LDI4Njg4OTc0MDYsMzEwMjAxMTc0NywzMDY5MDQ5OTYwLDIwMjAwODQ5NywzMzc3ODM2MiwyNzAwNDA0ODcsNTA0NDU5NDM2LDg3NTQ1MTI5Myw5NzU2NTg2NDYsNjc1MDM5NjI3LDY0MTAyNTE1MiwyMDg0NzA0MjMzLDE5MTc1MTg1NjIsMTYxNTg2MTI0NywxODUxMzMyODUyLDExNDc1NTA2NjEsMTI0ODgwMjUxMCwxNDg0MDA1ODQzLDE0NTEwNDQwNTYsOTMzMzAxMzcwLDk2NzMxMTcyOSw3MzMxNTY5NzIsNjMyOTUzNzAzLDI2MDM4ODk1MCwyNTk2NTkxNywzMjg2NzE4MDgsNDk2OTA2MDU5LDEyMDY0Nzc4NTgsMTIzOTQ0Mzc1MywxNTQzMjA4NTAwLDE0NDE5NTI1NzUsMjE0NDE2MTgwNiwxOTA4Njk0Mjc3LDE2NzU1Nzc4ODAsMTg0Mjc1OTQ0MywzNjEwMzY5MjI2LDM2NDQzNzk1ODUsMzQwODExOTUxNiwzMzA3OTE2MjQ3LDQwMTExOTA1MDIsMzc3Njc2NzQ2OSw0MDc3Mzg0NDMyLDQyNDU2MTg2ODMsMjgwOTc3MTE1NCwyODQyNzM3MDQ5LDMxNDQzOTY0MjAsMzA0MzE0MDQ5NSwyNjczNzA1MTUwLDI0MzgyMzc2MjEsMjIwMzAzMjIzMiwyMzcwMjEzNzk1XSk7dGhpcy5fbWl4Q29sPW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXRoaXMuX21peENvbFtlXT1lPDEyOD9lPDwxOmU8PDFeMjc7dGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpO3RoaXMuYnVmZmVyUG9zaXRpb249MH1fZXhwYW5kS2V5KGUpeygwLHIudW5yZWFjaGFibGUpKCJDYW5ub3QgY2FsbCBgX2V4cGFuZEtleWAgb24gdGhlIGJhc2UgY2xhc3MiKX1fZGVjcnlwdChlLHQpe2xldCBhLHIsbjtjb25zdCBpPW5ldyBVaW50OEFycmF5KDE2KTtpLnNldChlKTtmb3IobGV0IGU9MCxhPXRoaXMuX2tleVNpemU7ZTwxNjsrK2UsKythKWlbZV1ePXRbYV07Zm9yKGxldCBlPXRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbi0xO2U+PTE7LS1lKXthPWlbMTNdO2lbMTNdPWlbOV07aVs5XT1pWzVdO2lbNV09aVsxXTtpWzFdPWE7YT1pWzE0XTtyPWlbMTBdO2lbMTRdPWlbNl07aVsxMF09aVsyXTtpWzZdPWE7aVsyXT1yO2E9aVsxNV07cj1pWzExXTtuPWlbN107aVsxNV09aVszXTtpWzExXT1hO2lbN109cjtpWzNdPW47Zm9yKGxldCBlPTA7ZTwxNjsrK2UpaVtlXT10aGlzLl9pbnZfc1tpW2VdXTtmb3IobGV0IGE9MCxyPTE2KmU7YTwxNjsrK2EsKytyKWlbYV1ePXRbcl07Zm9yKGxldCBlPTA7ZTwxNjtlKz00KXtjb25zdCB0PXRoaXMuX21peFtpW2VdXSxyPXRoaXMuX21peFtpW2UrMV1dLG49dGhpcy5fbWl4W2lbZSsyXV0scz10aGlzLl9taXhbaVtlKzNdXTthPXRecj4+Pjhecjw8MjRebj4+PjE2Xm48PDE2XnM+Pj4yNF5zPDw4O2lbZV09YT4+PjI0JjI1NTtpW2UrMV09YT4+MTYmMjU1O2lbZSsyXT1hPj44JjI1NTtpW2UrM109MjU1JmF9fWE9aVsxM107aVsxM109aVs5XTtpWzldPWlbNV07aVs1XT1pWzFdO2lbMV09YTthPWlbMTRdO3I9aVsxMF07aVsxNF09aVs2XTtpWzEwXT1pWzJdO2lbNl09YTtpWzJdPXI7YT1pWzE1XTtyPWlbMTFdO249aVs3XTtpWzE1XT1pWzNdO2lbMTFdPWE7aVs3XT1yO2lbM109bjtmb3IobGV0IGU9MDtlPDE2OysrZSl7aVtlXT10aGlzLl9pbnZfc1tpW2VdXTtpW2VdXj10W2VdfXJldHVybiBpfV9lbmNyeXB0KGUsdCl7Y29uc3QgYT10aGlzLl9zO2xldCByLG4saTtjb25zdCBzPW5ldyBVaW50OEFycmF5KDE2KTtzLnNldChlKTtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdXj10W2VdO2ZvcihsZXQgZT0xO2U8dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uO2UrKyl7Zm9yKGxldCBlPTA7ZTwxNjsrK2Upc1tlXT1hW3NbZV1dO2k9c1sxXTtzWzFdPXNbNV07c1s1XT1zWzldO3NbOV09c1sxM107c1sxM109aTtpPXNbMl07bj1zWzZdO3NbMl09c1sxMF07c1s2XT1zWzE0XTtzWzEwXT1pO3NbMTRdPW47aT1zWzNdO249c1s3XTtyPXNbMTFdO3NbM109c1sxNV07c1s3XT1pO3NbMTFdPW47c1sxNV09cjtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9c1tlKzBdLGE9c1tlKzFdLG49c1tlKzJdLGk9c1tlKzNdO3I9dF5hXm5eaTtzW2UrMF1ePXJedGhpcy5fbWl4Q29sW3ReYV07c1tlKzFdXj1yXnRoaXMuX21peENvbFthXm5dO3NbZSsyXV49cl50aGlzLl9taXhDb2xbbl5pXTtzW2UrM11ePXJedGhpcy5fbWl4Q29sW2ledF19Zm9yKGxldCBhPTAscj0xNiplO2E8MTY7KythLCsrcilzW2FdXj10W3JdfWZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV09YVtzW2VdXTtpPXNbMV07c1sxXT1zWzVdO3NbNV09c1s5XTtzWzldPXNbMTNdO3NbMTNdPWk7aT1zWzJdO249c1s2XTtzWzJdPXNbMTBdO3NbNl09c1sxNF07c1sxMF09aTtzWzE0XT1uO2k9c1szXTtuPXNbN107cj1zWzExXTtzWzNdPXNbMTVdO3NbN109aTtzWzExXT1uO3NbMTVdPXI7Zm9yKGxldCBlPTAsYT10aGlzLl9rZXlTaXplO2U8MTY7KytlLCsrYSlzW2VdXj10W2FdO3JldHVybiBzfV9kZWNyeXB0QmxvY2syKGUsdCl7Y29uc3QgYT1lLmxlbmd0aDtsZXQgcj10aGlzLmJ1ZmZlcixuPXRoaXMuYnVmZmVyUG9zaXRpb247Y29uc3QgaT1bXTtsZXQgcz10aGlzLml2O2ZvcihsZXQgdD0wO3Q8YTsrK3Qpe3Jbbl09ZVt0XTsrK247aWYobjwxNiljb250aW51ZTtjb25zdCBhPXRoaXMuX2RlY3J5cHQocix0aGlzLl9rZXkpO2ZvcihsZXQgZT0wO2U8MTY7KytlKWFbZV1ePXNbZV07cz1yO2kucHVzaChhKTtyPW5ldyBVaW50OEFycmF5KDE2KTtuPTB9dGhpcy5idWZmZXI9cjt0aGlzLmJ1ZmZlckxlbmd0aD1uO3RoaXMuaXY9cztpZigwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2xldCBvPTE2KmkubGVuZ3RoO2lmKHQpe2NvbnN0IGU9aS5hdCgtMSk7bGV0IHQ9ZVsxNV07aWYodDw9MTYpe2ZvcihsZXQgYT0xNSxyPTE2LXQ7YT49cjstLWEpaWYoZVthXSE9PXQpe3Q9MDticmVha31vLT10O2lbaS5sZW5ndGgtMV09ZS5zdWJhcnJheSgwLDE2LXQpfX1jb25zdCBjPW5ldyBVaW50OEFycmF5KG8pO2ZvcihsZXQgZT0wLHQ9MCxhPWkubGVuZ3RoO2U8YTsrK2UsdCs9MTYpYy5zZXQoaVtlXSx0KTtyZXR1cm4gY31kZWNyeXB0QmxvY2soZSx0KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtjb25zdCByPWUubGVuZ3RoLG49dGhpcy5idWZmZXI7bGV0IGk9dGhpcy5idWZmZXJQb3NpdGlvbjtpZihhKXRoaXMuaXY9YTtlbHNle2ZvcihsZXQgdD0wO2k8MTYmJnQ8cjsrK3QsKytpKW5baV09ZVt0XTtpZihpPDE2KXt0aGlzLmJ1ZmZlckxlbmd0aD1pO3JldHVybiBuZXcgVWludDhBcnJheSgwKX10aGlzLml2PW47ZT1lLnN1YmFycmF5KDE2KX10aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syO3JldHVybiB0aGlzLmRlY3J5cHRCbG9jayhlLHQpfWVuY3J5cHQoZSx0KXtjb25zdCBhPWUubGVuZ3RoO2xldCByPXRoaXMuYnVmZmVyLG49dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBpPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKGxldCBzPTA7czxhOysrcyl7cltuXT1lW3NdOysrbjtpZihuPDE2KWNvbnRpbnVlO2ZvcihsZXQgZT0wO2U8MTY7KytlKXJbZV1ePXRbZV07Y29uc3QgYT10aGlzLl9lbmNyeXB0KHIsdGhpcy5fa2V5KTt0PWE7aS5wdXNoKGEpO3I9bmV3IFVpbnQ4QXJyYXkoMTYpO249MH10aGlzLmJ1ZmZlcj1yO3RoaXMuYnVmZmVyTGVuZ3RoPW47dGhpcy5pdj10O2lmKDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7Y29uc3Qgcz0xNippLmxlbmd0aCxvPW5ldyBVaW50OEFycmF5KHMpO2ZvcihsZXQgZT0wLHQ9MCxhPWkubGVuZ3RoO2U8YTsrK2UsdCs9MTYpby5zZXQoaVtlXSx0KTtyZXR1cm4gb319Y2xhc3MgQUVTMTI4Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMDt0aGlzLl9rZXlTaXplPTE2MDt0aGlzLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSk7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxhPXRoaXMuX3Jjb24scj1uZXcgVWludDhBcnJheSgxNzYpO3Iuc2V0KGUpO2ZvcihsZXQgZT0xNixuPTE7ZTwxNzY7KytuKXtsZXQgaT1yW2UtM10scz1yW2UtMl0sbz1yW2UtMV0sYz1yW2UtNF07aT10W2ldO3M9dFtzXTtvPXRbb107Yz10W2NdO2lePWFbbl07Zm9yKGxldCB0PTA7dDw0OysrdCl7cltlXT1pXj1yW2UtMTZdO2UrKztyW2VdPXNePXJbZS0xNl07ZSsrO3JbZV09b149cltlLTE2XTtlKys7cltlXT1jXj1yW2UtMTZdO2UrK319cmV0dXJuIHJ9fXQuQUVTMTI4Q2lwaGVyPUFFUzEyOENpcGhlcjtjbGFzcyBBRVMyNTZDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCk7dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0O3RoaXMuX2tleVNpemU9MjI0O3RoaXMuX2tleT10aGlzLl9leHBhbmRLZXkoZSl9X2V4cGFuZEtleShlKXtjb25zdCB0PXRoaXMuX3MsYT1uZXcgVWludDhBcnJheSgyNDApO2Euc2V0KGUpO2xldCByLG4saSxzLG89MTtmb3IobGV0IGU9MzIsYz0xO2U8MjQwOysrYyl7aWYoZSUzMj09MTYpe3I9dFtyXTtuPXRbbl07aT10W2ldO3M9dFtzXX1lbHNlIGlmKGUlMzI9PTApe3I9YVtlLTNdO249YVtlLTJdO2k9YVtlLTFdO3M9YVtlLTRdO3I9dFtyXTtuPXRbbl07aT10W2ldO3M9dFtzXTtyXj1vOyhvPDw9MSk+PTI1NiYmKG89MjU1JigyN15vKSl9Zm9yKGxldCB0PTA7dDw0OysrdCl7YVtlXT1yXj1hW2UtMzJdO2UrKzthW2VdPW5ePWFbZS0zMl07ZSsrO2FbZV09aV49YVtlLTMyXTtlKys7YVtlXT1zXj1hW2UtMzJdO2UrK319cmV0dXJuIGF9fXQuQUVTMjU2Q2lwaGVyPUFFUzI1NkNpcGhlcjtjbGFzcyBQREYxN3tjaGVja093bmVyUGFzc3dvcmQoZSx0LGEsbil7Y29uc3QgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKTtpLnNldCh0LGUubGVuZ3RoKTtpLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBzPW8oaSwwLGkubGVuZ3RoKTtyZXR1cm4oMCxyLmlzQXJyYXlFcXVhbCkocyxuKX1jaGVja1VzZXJQYXNzd29yZChlLHQsYSl7Y29uc3Qgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApO24uc2V0KHQsZS5sZW5ndGgpO2NvbnN0IGk9byhuLDAsbi5sZW5ndGgpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShpLGEpfWdldE93bmVyS2V5KGUsdCxhLHIpe2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO24uc2V0KGUsMCk7bi5zZXQodCxlLmxlbmd0aCk7bi5zZXQoYSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3QgaT1vKG4sMCxuLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIoaSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxhKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7Y29uc3Qgbj1vKHIsMCxyLmxlbmd0aCk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIobikuZGVjcnlwdEJsb2NrKGEsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19dC5QREYxNz1QREYxNztjbGFzcyBQREYyMHtfaGFzaChlLHQsYSl7bGV0IHI9byh0LDAsdC5sZW5ndGgpLnN1YmFycmF5KDAsMzIpLG49WzBdLGk9MDtmb3IoO2k8NjR8fG4uYXQoLTEpPmktMzI7KXtjb25zdCB0PWUubGVuZ3RoK3IubGVuZ3RoK2EubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkodCk7bGV0IGw9MDtzLnNldChlLGwpO2wrPWUubGVuZ3RoO3Muc2V0KHIsbCk7bCs9ci5sZW5ndGg7cy5zZXQoYSxsKTtjb25zdCBoPW5ldyBVaW50OEFycmF5KDY0KnQpO2ZvcihsZXQgZT0wLGE9MDtlPDY0O2UrKyxhKz10KWguc2V0KHMsYSk7bj1uZXcgQUVTMTI4Q2lwaGVyKHIuc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQoaCxyLnN1YmFycmF5KDE2LDMyKSk7Y29uc3QgdT1uLnNsaWNlKDAsMTYpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCklMzswPT09dT9yPW8obiwwLG4ubGVuZ3RoKToxPT09dT9yPWNhbGN1bGF0ZVNIQTM4NChuLDAsbi5sZW5ndGgpOjI9PT11JiYocj1jKG4sMCxuLmxlbmd0aCkpO2krK31yZXR1cm4gci5zdWJhcnJheSgwLDMyKX1jaGVja093bmVyUGFzc3dvcmQoZSx0LGEsbil7Y29uc3QgaT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7aS5zZXQoZSwwKTtpLnNldCh0LGUubGVuZ3RoKTtpLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBzPXRoaXMuX2hhc2goZSxpLGEpO3JldHVybigwLHIuaXNBcnJheUVxdWFsKShzLG4pfWNoZWNrVXNlclBhc3N3b3JkKGUsdCxhKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO24uc2V0KGUsMCk7bi5zZXQodCxlLmxlbmd0aCk7Y29uc3QgaT10aGlzLl9oYXNoKGUsbixbXSk7cmV0dXJuKDAsci5pc0FycmF5RXF1YWwpKGksYSl9Z2V0T3duZXJLZXkoZSx0LGEscil7Y29uc3Qgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7bi5zZXQoZSwwKTtuLnNldCh0LGUubGVuZ3RoKTtuLnNldChhLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBpPXRoaXMuX2hhc2goZSxuLGEpO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGkpLmRlY3J5cHRCbG9jayhyLCExLG5ldyBVaW50OEFycmF5KDE2KSl9Z2V0VXNlcktleShlLHQsYSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtyLnNldChlLDApO3Iuc2V0KHQsZS5sZW5ndGgpO2NvbnN0IG49dGhpcy5faGFzaChlLHIsW10pO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKG4pLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fXQuUERGMjA9UERGMjA7Y2xhc3MgQ2lwaGVyVHJhbnNmb3Jte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvcj1lO3RoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I9dH1jcmVhdGVTdHJlYW0oZSx0KXtjb25zdCBhPW5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yO3JldHVybiBuZXcgaS5EZWNyeXB0U3RyZWFtKGUsdCwoZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShlLHQpe3JldHVybiBhLmRlY3J5cHRCbG9jayhlLHQpfSkpfWRlY3J5cHRTdHJpbmcoZSl7Y29uc3QgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtsZXQgYT0oMCxyLnN0cmluZ1RvQnl0ZXMpKGUpO2E9dC5kZWNyeXB0QmxvY2soYSwhMCk7cmV0dXJuKDAsci5ieXRlc1RvU3RyaW5nKShhKX1lbmNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7aWYodCBpbnN0YW5jZW9mIEFFU0Jhc2VDaXBoZXIpe2NvbnN0IGE9MTYtZS5sZW5ndGglMTY7ZSs9U3RyaW5nLmZyb21DaGFyQ29kZShhKS5yZXBlYXQoYSk7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgxNik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8pY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuKTtlbHNlIGZvcihsZXQgZT0wO2U8MTY7ZSsrKW5bZV09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7bGV0IGk9KDAsci5zdHJpbmdUb0J5dGVzKShlKTtpPXQuZW5jcnlwdChpLG4pO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYraS5sZW5ndGgpO3Muc2V0KG4pO3Muc2V0KGksMTYpO3JldHVybigwLHIuYnl0ZXNUb1N0cmluZykocyl9bGV0IGE9KDAsci5zdHJpbmdUb0J5dGVzKShlKTthPXQuZW5jcnlwdChhKTtyZXR1cm4oMCxyLmJ5dGVzVG9TdHJpbmcpKGEpfX1jbGFzcyBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5e3N0YXRpYyNPPW5ldyBVaW50OEFycmF5KFs0MCwxOTEsNzgsOTQsNzgsMTE3LDEzOCw2NSwxMDAsMCw3OCw4NiwyNTUsMjUwLDEsOCw0Niw0NiwwLDE4MiwyMDgsMTA0LDYyLDEyOCw0NywxMiwxNjksMjU0LDEwMCw4MywxMDUsMTIyXSk7I0koZSx0LGEscixuLGkscyxvLGMsbCxoLHUpe2lmKHQpe2NvbnN0IGU9TWF0aC5taW4oMTI3LHQubGVuZ3RoKTt0PXQuc3ViYXJyYXkoMCxlKX1lbHNlIHQ9W107Y29uc3QgZD02PT09ZT9uZXcgUERGMjA6bmV3IFBERjE3O3JldHVybiBkLmNoZWNrVXNlclBhc3N3b3JkKHQsbyxzKT9kLmdldFVzZXJLZXkodCxjLGgpOnQubGVuZ3RoJiZkLmNoZWNrT3duZXJQYXNzd29yZCh0LHIsaSxhKT9kLmdldE93bmVyS2V5KHQsbixpLGwpOm51bGx9I1QoZSx0LGEscixuLGksbyxjKXtjb25zdCBsPTQwK2EubGVuZ3RoK2UubGVuZ3RoLGg9bmV3IFVpbnQ4QXJyYXkobCk7bGV0IHUsZCxmPTA7aWYodCl7ZD1NYXRoLm1pbigzMix0Lmxlbmd0aCk7Zm9yKDtmPGQ7KytmKWhbZl09dFtmXX11PTA7Zm9yKDtmPDMyOyloW2YrK109Q2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4jT1t1KytdO2Zvcih1PTAsZD1hLmxlbmd0aDt1PGQ7Kyt1KWhbZisrXT1hW3VdO2hbZisrXT0yNTUmbjtoW2YrK109bj4+OCYyNTU7aFtmKytdPW4+PjE2JjI1NTtoW2YrK109bj4+PjI0JjI1NTtmb3IodT0wLGQ9ZS5sZW5ndGg7dTxkOysrdSloW2YrK109ZVt1XTtpZihpPj00JiYhYyl7aFtmKytdPTI1NTtoW2YrK109MjU1O2hbZisrXT0yNTU7aFtmKytdPTI1NX1sZXQgZz1zKGgsMCxmKTtjb25zdCBwPW8+PjM7aWYoaT49Mylmb3IodT0wO3U8NTA7Kyt1KWc9cyhnLDAscCk7Y29uc3QgbT1nLnN1YmFycmF5KDAscCk7bGV0IGIseTtpZihpPj0zKXtmb3IoZj0wO2Y8MzI7KytmKWhbZl09Q2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4jT1tmXTtmb3IodT0wLGQ9ZS5sZW5ndGg7dTxkOysrdSloW2YrK109ZVt1XTtiPW5ldyBBUkNGb3VyQ2lwaGVyKG0pO3k9Yi5lbmNyeXB0QmxvY2socyhoLDAsZikpO2Q9bS5sZW5ndGg7Y29uc3QgdD1uZXcgVWludDhBcnJheShkKTtmb3IodT0xO3U8PTE5OysrdSl7Zm9yKGxldCBlPTA7ZTxkOysrZSl0W2VdPW1bZV1edTtiPW5ldyBBUkNGb3VyQ2lwaGVyKHQpO3k9Yi5lbmNyeXB0QmxvY2soeSl9Zm9yKHU9MCxkPXkubGVuZ3RoO3U8ZDsrK3UpaWYoclt1XSE9PXlbdV0pcmV0dXJuIG51bGx9ZWxzZXtiPW5ldyBBUkNGb3VyQ2lwaGVyKG0pO3k9Yi5lbmNyeXB0QmxvY2soQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4jTyk7Zm9yKHU9MCxkPXkubGVuZ3RoO3U8ZDsrK3UpaWYoclt1XSE9PXlbdV0pcmV0dXJuIG51bGx9cmV0dXJuIG19I00oZSx0LGEscil7Y29uc3Qgbj1uZXcgVWludDhBcnJheSgzMik7bGV0IGk9MDtjb25zdCBvPU1hdGgubWluKDMyLGUubGVuZ3RoKTtmb3IoO2k8bzsrK2kpbltpXT1lW2ldO2xldCBjPTA7Zm9yKDtpPDMyOyluW2krK109Q2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4jT1tjKytdO2xldCBsPXMobiwwLGkpO2NvbnN0IGg9cj4+MztpZihhPj0zKWZvcihjPTA7Yzw1MDsrK2MpbD1zKGwsMCxsLmxlbmd0aCk7bGV0IHUsZDtpZihhPj0zKXtkPXQ7Y29uc3QgZT1uZXcgVWludDhBcnJheShoKTtmb3IoYz0xOTtjPj0wO2MtLSl7Zm9yKGxldCB0PTA7dDxoOysrdCllW3RdPWxbdF1eYzt1PW5ldyBBUkNGb3VyQ2lwaGVyKGUpO2Q9dS5lbmNyeXB0QmxvY2soZCl9fWVsc2V7dT1uZXcgQVJDRm91ckNpcGhlcihsLnN1YmFycmF5KDAsaCkpO2Q9dS5lbmNyeXB0QmxvY2sodCl9cmV0dXJuIGR9I1AoZSx0LGEpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3Qgbj1uZXcgVWludDhBcnJheShhLmxlbmd0aCs5KSxpPWEubGVuZ3RoO2xldCBvO2ZvcihvPTA7bzxpOysrbyluW29dPWFbb107bltvKytdPTI1NSZlO25bbysrXT1lPj44JjI1NTtuW28rK109ZT4+MTYmMjU1O25bbysrXT0yNTUmdDtuW28rK109dD4+OCYyNTU7aWYocil7bltvKytdPTExNTtuW28rK109NjU7bltvKytdPTEwODtuW28rK109ODR9cmV0dXJuIHMobiwwLG8pLnN1YmFycmF5KDAsTWF0aC5taW4oYS5sZW5ndGgrNSwxNikpfSNFKGUsdCxhLGkscyl7aWYoISh0IGluc3RhbmNlb2Ygbi5OYW1lKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBjcnlwdCBmaWx0ZXIgbmFtZS4iKTtjb25zdCBvPXRoaXMsYz1lLmdldCh0Lm5hbWUpLGw9Yz8uZ2V0KCJDRk0iKTtpZighbHx8Ik5vbmUiPT09bC5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgTnVsbENpcGhlcn07aWYoIlYyIj09PWwubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIoby4jUChhLGkscywhMSkpfTtpZigiQUVTVjIiPT09bC5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgQUVTMTI4Q2lwaGVyKG8uI1AoYSxpLHMsITApKX07aWYoIkFFU1YzIj09PWwubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihzKX07dGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIlVua25vd24gY3J5cHRvIG1ldGhvZCIpfWNvbnN0cnVjdG9yKGUsdCxhKXtjb25zdCBpPWUuZ2V0KCJGaWx0ZXIiKTtpZighKDAsbi5pc05hbWUpKGksIlN0YW5kYXJkIikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInVua25vd24gZW5jcnlwdGlvbiBtZXRob2QiKTt0aGlzLmZpbHRlck5hbWU9aS5uYW1lO3RoaXMuZGljdD1lO2NvbnN0IHM9ZS5nZXQoIlYiKTtpZighTnVtYmVyLmlzSW50ZWdlcihzKXx8MSE9PXMmJjIhPT1zJiY0IT09cyYmNSE9PXMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoInVuc3VwcG9ydGVkIGVuY3J5cHRpb24gYWxnb3JpdGhtIik7dGhpcy5hbGdvcml0aG09cztsZXQgbz1lLmdldCgiTGVuZ3RoIik7aWYoIW8paWYoczw9MylvPTQwO2Vsc2V7Y29uc3QgdD1lLmdldCgiQ0YiKSxhPWUuZ2V0KCJTdG1GIik7aWYodCBpbnN0YW5jZW9mIG4uRGljdCYmYSBpbnN0YW5jZW9mIG4uTmFtZSl7dC5zdXBwcmVzc0VuY3J5cHRpb249ITA7Y29uc3QgZT10LmdldChhLm5hbWUpO289ZT8uZ2V0KCJMZW5ndGgiKXx8MTI4O288NDAmJihvPDw9Myl9fWlmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxvPDQwfHxvJTghPTApdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO2NvbnN0IGM9KDAsci5zdHJpbmdUb0J5dGVzKShlLmdldCgiTyIpKSxsPSgwLHIuc3RyaW5nVG9CeXRlcykoZS5nZXQoIlUiKSksaD1jLnN1YmFycmF5KDAsMzIpLHU9bC5zdWJhcnJheSgwLDMyKSxkPWUuZ2V0KCJQIiksZj1lLmdldCgiUiIpLGc9KDQ9PT1zfHw1PT09cykmJiExIT09ZS5nZXQoIkVuY3J5cHRNZXRhZGF0YSIpO3RoaXMuZW5jcnlwdE1ldGFkYXRhPWc7Y29uc3QgcD0oMCxyLnN0cmluZ1RvQnl0ZXMpKHQpO2xldCBtLGI7aWYoYSl7aWYoNj09PWYpdHJ5e2E9KDAsci51dGY4U3RyaW5nVG9TdHJpbmcpKGEpfWNhdGNoeygwLHIud2FybikoIkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk6IFVuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC4iKX1tPSgwLHIuc3RyaW5nVG9CeXRlcykoYSl9aWYoNSE9PXMpYj10aGlzLiNUKHAsbSxoLHUsZCxmLG8sZyk7ZWxzZXtjb25zdCB0PWMuc3ViYXJyYXkoMzIsNDApLGE9Yy5zdWJhcnJheSg0MCw0OCksbj1sLnN1YmFycmF5KDAsNDgpLGk9bC5zdWJhcnJheSgzMiw0MCkscz1sLnN1YmFycmF5KDQwLDQ4KSxvPSgwLHIuc3RyaW5nVG9CeXRlcykoZS5nZXQoIk9FIikpLGQ9KDAsci5zdHJpbmdUb0J5dGVzKShlLmdldCgiVUUiKSksZz0oMCxyLnN0cmluZ1RvQnl0ZXMpKGUuZ2V0KCJQZXJtcyIpKTtiPXRoaXMuI0koZixtLGgsdCxhLG4sdSxpLHMsbyxkLGcpfWlmKCFiJiYhYSl0aHJvdyBuZXcgci5QYXNzd29yZEV4Y2VwdGlvbigiTm8gcGFzc3dvcmQgZ2l2ZW4iLHIuUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7aWYoIWImJmEpe2NvbnN0IGU9dGhpcy4jTShtLGgsZixvKTtiPXRoaXMuI1QocCxlLGgsdSxkLGYsbyxnKX1pZighYil0aHJvdyBuZXcgci5QYXNzd29yZEV4Y2VwdGlvbigiSW5jb3JyZWN0IFBhc3N3b3JkIixyLlBhc3N3b3JkUmVzcG9uc2VzLklOQ09SUkVDVF9QQVNTV09SRCk7dGhpcy5lbmNyeXB0aW9uS2V5PWI7aWYocz49NCl7Y29uc3QgdD1lLmdldCgiQ0YiKTt0IGluc3RhbmNlb2Ygbi5EaWN0JiYodC5zdXBwcmVzc0VuY3J5cHRpb249ITApO3RoaXMuY2Y9dDt0aGlzLnN0bWY9ZS5nZXQoIlN0bUYiKXx8bi5OYW1lLmdldCgiSWRlbnRpdHkiKTt0aGlzLnN0cmY9ZS5nZXQoIlN0ckYiKXx8bi5OYW1lLmdldCgiSWRlbnRpdHkiKTt0aGlzLmVmZj1lLmdldCgiRUZGIil8fHRoaXMuc3RtZn19Y3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGUsdCl7aWYoND09PXRoaXMuYWxnb3JpdGhtfHw1PT09dGhpcy5hbGdvcml0aG0pcmV0dXJuIG5ldyBDaXBoZXJUcmFuc2Zvcm0odGhpcy4jRSh0aGlzLmNmLHRoaXMuc3RyZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSx0aGlzLiNFKHRoaXMuY2YsdGhpcy5zdG1mLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpKTtjb25zdCBhPXRoaXMuI1AoZSx0LHRoaXMuZW5jcnlwdGlvbktleSwhMSksY2lwaGVyQ29uc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIoYSl9O3JldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKGNpcGhlckNvbnN0cnVjdG9yLGNpcGhlckNvbnN0cnVjdG9yKX19dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PUNpcGhlclRyYW5zZm9ybUZhY3Rvcnl9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgcj1hKDE2OSk7Y2xhc3MgRGVjcnlwdFN0cmVhbSBleHRlbmRzIHIuRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxhKXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5kZWNyeXB0PWE7dGhpcy5uZXh0Q2h1bms9bnVsbDt0aGlzLmluaXRpYWxpemVkPSExfXJlYWRCbG9jaygpe2xldCBlO2lmKHRoaXMuaW5pdGlhbGl6ZWQpZT10aGlzLm5leHRDaHVuaztlbHNle2U9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKTt0aGlzLmluaXRpYWxpemVkPSEwfWlmKCFlfHwwPT09ZS5sZW5ndGgpe3RoaXMuZW9mPSEwO3JldHVybn10aGlzLm5leHRDaHVuaz10aGlzLnN0ci5nZXRCeXRlcyg1MTIpO2NvbnN0IHQ9dGhpcy5uZXh0Q2h1bms/Lmxlbmd0aD4wO2U9KDAsdGhpcy5kZWNyeXB0KShlLCF0KTtjb25zdCBhPXRoaXMuYnVmZmVyTGVuZ3RoLHI9YStlLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihyKS5zZXQoZSxhKTt0aGlzLmJ1ZmZlckxlbmd0aD1yfX10LkRlY3J5cHRTdHJlYW09RGVjcnlwdFN0cmVhbX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0Lk9iamVjdExvYWRlcj12b2lkIDA7YSgxNDApO3ZhciByPWEoMTUxKSxuPWEoMTUyKSxpPWEoMTUwKSxzPWEoMTQ1KTtmdW5jdGlvbiBhZGRDaGlsZHJlbihlLHQpe2lmKGUgaW5zdGFuY2VvZiByLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjtmb3IoY29uc3QgaSBvZiBlKSgoYT1pKWluc3RhbmNlb2Ygci5SZWZ8fGEgaW5zdGFuY2VvZiByLkRpY3R8fGEgaW5zdGFuY2VvZiBuLkJhc2VTdHJlYW18fEFycmF5LmlzQXJyYXkoYSkpJiZ0LnB1c2goaSk7dmFyIGF9dC5PYmplY3RMb2FkZXI9Y2xhc3MgT2JqZWN0TG9hZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLmRpY3Q9ZTt0aGlzLmtleXM9dDt0aGlzLnhyZWY9YTt0aGlzLnJlZlNldD1udWxsfWFzeW5jIGxvYWQoKXtpZih0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZClyZXR1cm47Y29uc3R7a2V5czplLGRpY3Q6dH09dGhpczt0aGlzLnJlZlNldD1uZXcgci5SZWZTZXQ7Y29uc3QgYT1bXTtmb3IoY29uc3QgciBvZiBlKXtjb25zdCBlPXQuZ2V0UmF3KHIpO3ZvaWQgMCE9PWUmJmEucHVzaChlKX1yZXR1cm4gdGhpcy5fd2FsayhhKX1hc3luYyBfd2FsayhlKXtjb25zdCB0PVtdLGE9W107Zm9yKDtlLmxlbmd0aDspe2xldCBvPWUucG9wKCk7aWYobyBpbnN0YW5jZW9mIHIuUmVmKXtpZih0aGlzLnJlZlNldC5oYXMobykpY29udGludWU7dHJ5e3RoaXMucmVmU2V0LnB1dChvKTtvPXRoaXMueHJlZi5mZXRjaChvKX1jYXRjaChlKXtpZighKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSl7KDAscy53YXJuKShgT2JqZWN0TG9hZGVyLl93YWxrIC0gcmVxdWVzdGluZyBhbGwgZGF0YTogIiR7ZX0iLmApO3RoaXMucmVmU2V0PW51bGw7Y29uc3R7bWFuYWdlcjp0fT10aGlzLnhyZWYuc3RyZWFtO3JldHVybiB0LnJlcXVlc3RBbGxDaHVua3MoKX10LnB1c2gobyk7YS5wdXNoKHtiZWdpbjplLmJlZ2luLGVuZDplLmVuZH0pfX1pZihvIGluc3RhbmNlb2Ygbi5CYXNlU3RyZWFtKXtjb25zdCBlPW8uZ2V0QmFzZVN0cmVhbXMoKTtpZihlKXtsZXQgcj0hMTtmb3IoY29uc3QgdCBvZiBlKWlmKCF0LmlzRGF0YUxvYWRlZCl7cj0hMDthLnB1c2goe2JlZ2luOnQuc3RhcnQsZW5kOnQuZW5kfSl9ciYmdC5wdXNoKG8pfX1hZGRDaGlsZHJlbihvLGUpfWlmKGEubGVuZ3RoKXthd2FpdCB0aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhhKTtmb3IoY29uc3QgZSBvZiB0KWUgaW5zdGFuY2VvZiByLlJlZiYmdGhpcy5yZWZTZXQucmVtb3ZlKGUpO3JldHVybiB0aGlzLl93YWxrKHQpfXRoaXMucmVmU2V0PW51bGx9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhGQUZhY3Rvcnk9dm9pZCAwO2EoMTQwKTt2YXIgcj1hKDIyOSksbj1hKDIzMCksaT1hKDI0Mykscz1hKDIzOSksbz1hKDIzOCksYz1hKDE0NSksbD1hKDI0NCksaD1hKDI1NCk7Y2xhc3MgWEZBRmFjdG9yeXtjb25zdHJ1Y3RvcihlKXt0cnl7dGhpcy5yb290PShuZXcgbC5YRkFQYXJzZXIpLnBhcnNlKFhGQUZhY3RvcnkuX2NyZWF0ZURvY3VtZW50KGUpKTtjb25zdCB0PW5ldyBuLkJpbmRlcih0aGlzLnJvb3QpO3RoaXMuZm9ybT10LmJpbmQoKTt0aGlzLmRhdGFIYW5kbGVyPW5ldyBpLkRhdGFIYW5kbGVyKHRoaXMucm9vdCx0LmdldERhdGEoKSk7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLnRlbXBsYXRlPXRoaXMuZm9ybX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApfX1pc1ZhbGlkKCl7cmV0dXJuIHRoaXMucm9vdCYmdGhpcy5mb3JtfV9jcmVhdGVQYWdlc0hlbHBlcigpe2NvbnN0IGU9dGhpcy5mb3JtW3IuJHRvUGFnZXNdKCk7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxhKT0+e2NvbnN0IG5leHRJdGVyYXRpb249KCk9Pnt0cnl7Y29uc3QgYT1lLm5leHQoKTthLmRvbmU/dChhLnZhbHVlKTpzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9Y2F0Y2goZSl7YShlKX19O3NldFRpbWVvdXQobmV4dEl0ZXJhdGlvbiwwKX0pKX1hc3luYyBfY3JlYXRlUGFnZXMoKXt0cnl7dGhpcy5wYWdlcz1hd2FpdCB0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO3RoaXMuZGltcz10aGlzLnBhZ2VzLmNoaWxkcmVuLm1hcCgoZT0+e2NvbnN0e3dpZHRoOnQsaGVpZ2h0OmF9PWUuYXR0cmlidXRlcy5zdHlsZTtyZXR1cm5bMCwwLHBhcnNlSW50KHQpLHBhcnNlSW50KGEpXX0pKX1jYXRjaChlKXsoMCxjLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAke2V9YCl9fWdldEJvdW5kaW5nQm94KGUpe3JldHVybiB0aGlzLmRpbXNbZV19YXN5bmMgZ2V0TnVtUGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO3JldHVybiB0aGlzLmRpbXMubGVuZ3RofXNldEltYWdlcyhlKXt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uaW1hZ2VzPWV9c2V0Rm9udHMoZSl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI9bmV3IHMuRm9udEZpbmRlcihlKTtjb25zdCB0PVtdO2ZvcihsZXQgZSBvZiB0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcyl7ZT0oMCxvLnN0cmlwUXVvdGVzKShlKTt0aGlzLmZvcm1bci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKGUpfHx0LnB1c2goZSl9cmV0dXJuIHQubGVuZ3RoPjA/dDpudWxsfWFwcGVuZEZvbnRzKGUsdCl7dGhpcy5mb3JtW3IuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuYWRkKGUsdCl9YXN5bmMgZ2V0UGFnZXMoKXt0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO2NvbnN0IGU9dGhpcy5wYWdlczt0aGlzLnBhZ2VzPW51bGw7cmV0dXJuIGV9c2VyaWFsaXplRGF0YShlKXtyZXR1cm4gdGhpcy5kYXRhSGFuZGxlci5zZXJpYWxpemUoZSl9c3RhdGljIF9jcmVhdGVEb2N1bWVudChlKXtyZXR1cm4gZVsiL3hkcDp4ZHAiXT9PYmplY3QudmFsdWVzKGUpLmpvaW4oIiIpOmVbInhkcDp4ZHAiXX1zdGF0aWMgZ2V0UmljaFRleHRBc0h0bWwoZSl7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bGV0IHQ9bmV3IGwuWEZBUGFyc2VyKGguWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbci4kbm9kZU5hbWVdKSl7Y29uc3QgZT1oLlhodG1sTmFtZXNwYWNlLmJvZHkoe30pO2Vbci4kYXBwZW5kQ2hpbGRdKHQpO3Q9ZX1jb25zdCBhPXRbci4kdG9IVE1MXSgpO2lmKCFhLnN1Y2Nlc3MpcmV0dXJuIG51bGw7Y29uc3R7aHRtbDpufT1hLHthdHRyaWJ1dGVzOml9PW47aWYoaSl7aS5jbGFzcyYmKGkuY2xhc3M9aS5jbGFzcy5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoInhmYSIpKSkpO2kuZGlyPSJhdXRvIn1yZXR1cm57aHRtbDpuLHN0cjp0W3IuJHRleHRdKCl9fWNhdGNoKGUpeygwLGMud2FybikoYFhGQSAtIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIG9mIHJpY2ggdGV4dDogJHtlfWApfXJldHVybiBudWxsfX10LlhGQUZhY3Rvcnk9WEZBRmFjdG9yeX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC4kdWlkPXQuJHRvU3R5bGU9dC4kdG9TdHJpbmc9dC4kdG9QYWdlcz10LiR0b0hUTUw9dC4kdGV4dD10LiR0YWJJbmRleD10LiRzZXRWYWx1ZT10LiRzZXRTZXRBdHRyaWJ1dGVzPXQuJHNldElkPXQuJHNlYXJjaE5vZGU9dC4kcm9vdD10LiRyZXNvbHZlUHJvdG90eXBlcz10LiRyZW1vdmVDaGlsZD10LiRwdXNoUGFyYT10LiRwdXNoR2x5cGhzPXQuJHBvcFBhcmE9dC4kb25UZXh0PXQuJG9uQ2hpbGRDaGVjaz10LiRvbkNoaWxkPXQuJG5zQXR0cmlidXRlcz10LiRub2RlTmFtZT10LiRuYW1lc3BhY2VJZD10LiRsYXN0QXR0cmlidXRlPXQuJGlzVXNhYmxlPXQuJGlzVHJhbnNwYXJlbnQ9dC4kaXNUaGVyZU1vcmVXaWR0aD10LiRpc1NwbGl0dGFibGU9dC4kaXNOc0Fnbm9zdGljPXQuJGlzRGVzY2VuZGVudD10LiRpc0RhdGFWYWx1ZT10LiRpc0NEQVRBWG1sPXQuJGlzQmluZGFibGU9dC4kaW5zZXJ0QXQ9dC4kaW5kZXhPZj10LiRpZHM9dC4kaGFzU2V0dGFibGVWYWx1ZT10LiRnbG9iYWxEYXRhPXQuJGdldFRlbXBsYXRlUm9vdD10LiRnZXRTdWJmb3JtUGFyZW50PXQuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0PXQuJGdldFBhcmVudD10LiRnZXROZXh0UGFnZT10LiRnZXRFeHRyYT10LiRnZXREYXRhVmFsdWU9dC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW49dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD10LiRnZXRDaGlsZHJlbkJ5TmFtZT10LiRnZXRDaGlsZHJlbkJ5Q2xhc3M9dC4kZ2V0Q2hpbGRyZW49dC4kZ2V0QXZhaWxhYmxlU3BhY2U9dC4kZ2V0QXR0cmlidXRlcz10LiRnZXRBdHRyaWJ1dGVJdD10LiRmbHVzaEhUTUw9dC4kZmluYWxpemU9dC4kZXh0cmE9dC4kZHVtcD10LiRkYXRhPXQuJGNvbnRlbnQ9dC4kY29uc3VtZWQ9dC4kY2xvbmU9dC4kY2xlYW51cD10LiRjbGVhblBhZ2U9dC4kY2xlYW49dC4kY2hpbGRyZW5Ub0hUTUw9dC4kYXBwZW5kQ2hpbGQ9dC4kYWRkSFRNTD10LiRhY2NlcHRXaGl0ZXNwYWNlPXZvaWQgMDtjb25zdCBhPVN5bWJvbCgpO3QuJGFjY2VwdFdoaXRlc3BhY2U9YTtjb25zdCByPVN5bWJvbCgpO3QuJGFkZEhUTUw9cjtjb25zdCBuPVN5bWJvbCgpO3QuJGFwcGVuZENoaWxkPW47Y29uc3QgaT1TeW1ib2woKTt0LiRjaGlsZHJlblRvSFRNTD1pO2NvbnN0IHM9U3ltYm9sKCk7dC4kY2xlYW49cztjb25zdCBvPVN5bWJvbCgpO3QuJGNsZWFuUGFnZT1vO2NvbnN0IGM9U3ltYm9sKCk7dC4kY2xlYW51cD1jO2NvbnN0IGw9U3ltYm9sKCk7dC4kY2xvbmU9bDtjb25zdCBoPVN5bWJvbCgpO3QuJGNvbnN1bWVkPWg7Y29uc3QgdT1TeW1ib2woImNvbnRlbnQiKTt0LiRjb250ZW50PXU7Y29uc3QgZD1TeW1ib2woImRhdGEiKTt0LiRkYXRhPWQ7Y29uc3QgZj1TeW1ib2woKTt0LiRkdW1wPWY7Y29uc3QgZz1TeW1ib2woImV4dHJhIik7dC4kZXh0cmE9Zztjb25zdCBwPVN5bWJvbCgpO3QuJGZpbmFsaXplPXA7Y29uc3QgbT1TeW1ib2woKTt0LiRmbHVzaEhUTUw9bTtjb25zdCBiPVN5bWJvbCgpO3QuJGdldEF0dHJpYnV0ZUl0PWI7Y29uc3QgeT1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVzPXk7Y29uc3Qgdz1TeW1ib2woKTt0LiRnZXRBdmFpbGFibGVTcGFjZT13O2NvbnN0IFM9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPVM7Y29uc3QgeD1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbkJ5TmFtZT14O2NvbnN0IEM9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWVJdD1DO2NvbnN0IHY9U3ltYm9sKCk7dC4kZ2V0RGF0YVZhbHVlPXY7Y29uc3Qgaz1TeW1ib2woKTt0LiRnZXRFeHRyYT1rO2NvbnN0IE89U3ltYm9sKCk7dC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXQ9Tztjb25zdCBUPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuPVQ7Y29uc3QgTT1TeW1ib2woKTt0LiRnZXRDb250YWluZWRDaGlsZHJlbj1NO2NvbnN0IEU9U3ltYm9sKCk7dC4kZ2V0TmV4dFBhZ2U9RTtjb25zdCBEPVN5bWJvbCgpO3QuJGdldFN1YmZvcm1QYXJlbnQ9RDtjb25zdCBSPVN5bWJvbCgpO3QuJGdldFBhcmVudD1SO2NvbnN0IE49U3ltYm9sKCk7dC4kZ2V0VGVtcGxhdGVSb290PU47Y29uc3QgTD1TeW1ib2woKTt0LiRnbG9iYWxEYXRhPUw7Y29uc3QgJD1TeW1ib2woKTt0LiRoYXNTZXR0YWJsZVZhbHVlPSQ7Y29uc3QgXz1TeW1ib2woKTt0LiRpZHM9Xztjb25zdCBqPVN5bWJvbCgpO3QuJGluZGV4T2Y9ajtjb25zdCBVPVN5bWJvbCgpO3QuJGluc2VydEF0PVU7Y29uc3QgWD1TeW1ib2woKTt0LiRpc0NEQVRBWG1sPVg7Y29uc3QgSD1TeW1ib2woKTt0LiRpc0JpbmRhYmxlPUg7Y29uc3QgcT1TeW1ib2woKTt0LiRpc0RhdGFWYWx1ZT1xO2NvbnN0IHo9U3ltYm9sKCk7dC4kaXNEZXNjZW5kZW50PXo7Y29uc3QgVz1TeW1ib2woKTt0LiRpc05zQWdub3N0aWM9Vztjb25zdCBHPVN5bWJvbCgpO3QuJGlzU3BsaXR0YWJsZT1HO2NvbnN0IFY9U3ltYm9sKCk7dC4kaXNUaGVyZU1vcmVXaWR0aD1WO2NvbnN0IEs9U3ltYm9sKCk7dC4kaXNUcmFuc3BhcmVudD1LO2NvbnN0IFk9U3ltYm9sKCk7dC4kaXNVc2FibGU9WTtjb25zdCBKPVN5bWJvbCgpO3QuJGxhc3RBdHRyaWJ1dGU9Sjtjb25zdCBaPVN5bWJvbCgibmFtZXNwYWNlSWQiKTt0LiRuYW1lc3BhY2VJZD1aO2NvbnN0IFE9U3ltYm9sKCJub2RlTmFtZSIpO3QuJG5vZGVOYW1lPVE7Y29uc3QgZWU9U3ltYm9sKCk7dC4kbnNBdHRyaWJ1dGVzPWVlO2NvbnN0IHRlPVN5bWJvbCgpO3QuJG9uQ2hpbGQ9dGU7Y29uc3QgYWU9U3ltYm9sKCk7dC4kb25DaGlsZENoZWNrPWFlO2NvbnN0IHJlPVN5bWJvbCgpO3QuJG9uVGV4dD1yZTtjb25zdCBuZT1TeW1ib2woKTt0LiRwdXNoR2x5cGhzPW5lO2NvbnN0IGllPVN5bWJvbCgpO3QuJHBvcFBhcmE9aWU7Y29uc3Qgc2U9U3ltYm9sKCk7dC4kcHVzaFBhcmE9c2U7Y29uc3Qgb2U9U3ltYm9sKCk7dC4kcmVtb3ZlQ2hpbGQ9b2U7Y29uc3QgY2U9U3ltYm9sKCJyb290Iik7dC4kcm9vdD1jZTtjb25zdCBsZT1TeW1ib2woKTt0LiRyZXNvbHZlUHJvdG90eXBlcz1sZTtjb25zdCBoZT1TeW1ib2woKTt0LiRzZWFyY2hOb2RlPWhlO2NvbnN0IHVlPVN5bWJvbCgpO3QuJHNldElkPXVlO2NvbnN0IGRlPVN5bWJvbCgpO3QuJHNldFNldEF0dHJpYnV0ZXM9ZGU7Y29uc3QgZmU9U3ltYm9sKCk7dC4kc2V0VmFsdWU9ZmU7Y29uc3QgZ2U9U3ltYm9sKCk7dC4kdGFiSW5kZXg9Z2U7Y29uc3QgcGU9U3ltYm9sKCk7dC4kdGV4dD1wZTtjb25zdCBtZT1TeW1ib2woKTt0LiR0b1BhZ2VzPW1lO2NvbnN0IGJlPVN5bWJvbCgpO3QuJHRvSFRNTD1iZTtjb25zdCB5ZT1TeW1ib2woKTt0LiR0b1N0cmluZz15ZTtjb25zdCB3ZT1TeW1ib2woKTt0LiR0b1N0eWxlPXdlO2NvbnN0IFNlPVN5bWJvbCgidWlkIik7dC4kdWlkPVNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQmluZGVyPXZvaWQgMDthKDE0MCk7dmFyIHI9YSgyMjkpLG49YSgyMzEpLGk9YSgyNDIpLHM9YSgyNDEpLG89YSgyMzUpLGM9YSgxNDUpO2NvbnN0IGw9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gY3JlYXRlVGV4dChlKXtjb25zdCB0PW5ldyBuLlRleHQoe30pO3Rbci4kY29udGVudF09ZTtyZXR1cm4gdH10LkJpbmRlcj1jbGFzcyBCaW5kZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5yb290PWU7dGhpcy5kYXRhc2V0cz1lLmRhdGFzZXRzO3RoaXMuZGF0YT1lLmRhdGFzZXRzPy5kYXRhfHxuZXcgcy5YbWxPYmplY3Qoby5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQsImRhdGEiKTt0aGlzLmVtcHR5TWVyZ2U9MD09PXRoaXMuZGF0YVtyLiRnZXRDaGlsZHJlbl0oKS5sZW5ndGg7dGhpcy5yb290LmZvcm09dGhpcy5mb3JtPWUudGVtcGxhdGVbci4kY2xvbmVdKCl9X2lzQ29uc3VtZURhdGEoKXtyZXR1cm4hdGhpcy5lbXB0eU1lcmdlJiZ0aGlzLl9tZXJnZU1vZGV9X2lzTWF0Y2hUZW1wbGF0ZSgpe3JldHVybiF0aGlzLl9pc0NvbnN1bWVEYXRhKCl9YmluZCgpe3RoaXMuX2JpbmRFbGVtZW50KHRoaXMuZm9ybSx0aGlzLmRhdGEpO3JldHVybiB0aGlzLmZvcm19Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGF9X2JpbmRWYWx1ZShlLHQsYSl7ZVtyLiRkYXRhXT10O2lmKGVbci4kaGFzU2V0dGFibGVWYWx1ZV0oKSlpZih0W3IuJGlzRGF0YVZhbHVlXSgpKXtjb25zdCBhPXRbci4kZ2V0RGF0YVZhbHVlXSgpO2Vbci4kc2V0VmFsdWVdKGNyZWF0ZVRleHQoYSkpfWVsc2UgaWYoZSBpbnN0YW5jZW9mIG4uRmllbGQmJiJtdWx0aVNlbGVjdCI9PT1lLnVpPy5jaG9pY2VMaXN0Py5vcGVuKXtjb25zdCBhPXRbci4kZ2V0Q2hpbGRyZW5dKCkubWFwKChlPT5lW3IuJGNvbnRlbnRdLnRyaW0oKSkpLmpvaW4oIlxuIik7ZVtyLiRzZXRWYWx1ZV0oY3JlYXRlVGV4dChhKSl9ZWxzZSB0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJigwLGMud2FybikoIlhGQSAtIE5vZGVzIGhhdmVuJ3QgdGhlIHNhbWUgdHlwZS4iKTtlbHNlIXRbci4kaXNEYXRhVmFsdWVdKCl8fHRoaXMuX2lzTWF0Y2hUZW1wbGF0ZSgpP3RoaXMuX2JpbmRFbGVtZW50KGUsdCk6KDAsYy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpfV9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShlLHQsYSxuKXtpZighZSlyZXR1cm4gbnVsbDtsZXQgaSxzO2ZvcihsZXQgbj0wO248MztuKyspe2k9YVtyLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oZSwhMSwhMCk7Zm9yKDs7KXtzPWkubmV4dCgpLnZhbHVlO2lmKCFzKWJyZWFrO2lmKHQ9PT1zW3IuJGlzRGF0YVZhbHVlXSgpKXJldHVybiBzfWlmKGFbci4kbmFtZXNwYWNlSWRdPT09by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQmJiJkYXRhIj09PWFbci4kbm9kZU5hbWVdKWJyZWFrO2E9YVtyLiRnZXRQYXJlbnRdKCl9aWYoIW4pcmV0dXJuIG51bGw7aT10aGlzLmRhdGFbci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsITAsITEpO3M9aS5uZXh0KCkudmFsdWU7aWYocylyZXR1cm4gcztpPXRoaXMuZGF0YVtyLiRnZXRBdHRyaWJ1dGVJdF0oZSwhMCk7cz1pLm5leHQoKS52YWx1ZTtyZXR1cm4gcz8uW3IuJGlzRGF0YVZhbHVlXSgpP3M6bnVsbH1fc2V0UHJvcGVydGllcyhlLHQpe2lmKGUuaGFzT3duUHJvcGVydHkoInNldFByb3BlcnR5IikpZm9yKGNvbnN0e3JlZjphLHRhcmdldDpvLGNvbm5lY3Rpb246bH1vZiBlLnNldFByb3BlcnR5LmNoaWxkcmVuKXtpZihsKWNvbnRpbnVlO2lmKCFhKWNvbnRpbnVlO2NvbnN0IGg9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxhLCExLCExKTtpZighaCl7KDAsYy53YXJuKShgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7YX0uYCk7Y29udGludWV9Y29uc3RbdV09aDtpZighdVtyLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YSkpeygwLGMud2FybikoIlhGQSAtIEludmFsaWQgbm9kZTogbXVzdCBiZSBhIGRhdGEgbm9kZS4iKTtjb250aW51ZX1jb25zdCBkPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LGUsbywhMSwhMSk7aWYoIWQpeygwLGMud2FybikoYFhGQSAtIEludmFsaWQgdGFyZ2V0OiAke299LmApO2NvbnRpbnVlfWNvbnN0W2ZdPWQ7aWYoIWZbci4kaXNEZXNjZW5kZW50XShlKSl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCB0YXJnZXQ6IG11c3QgYmUgYSBwcm9wZXJ0eSBvciBzdWJwcm9wZXJ0eS4iKTtjb250aW51ZX1jb25zdCBnPWZbci4kZ2V0UGFyZW50XSgpO2lmKGYgaW5zdGFuY2VvZiBuLlNldFByb3BlcnR5fHxnIGluc3RhbmNlb2Ygbi5TZXRQcm9wZXJ0eSl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIHNldFByb3BlcnR5IG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1pZihmIGluc3RhbmNlb2Ygbi5CaW5kSXRlbXN8fGcgaW5zdGFuY2VvZiBuLkJpbmRJdGVtcyl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIGJpbmRJdGVtcyBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuIik7Y29udGludWV9Y29uc3QgcD11W3IuJHRleHRdKCksbT1mW3IuJG5vZGVOYW1lXTtpZihmIGluc3RhbmNlb2Ygcy5YRkFBdHRyaWJ1dGUpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTtlW21dPXA7Y29uc3QgdD1SZWZsZWN0LmNvbnN0cnVjdChPYmplY3QuZ2V0UHJvdG90eXBlT2YoZykuY29uc3RydWN0b3IsW2VdKTtnW21dPXRbbV19ZWxzZSBpZihmLmhhc093blByb3BlcnR5KHIuJGNvbnRlbnQpKXtmW3IuJGRhdGFdPXU7ZltyLiRjb250ZW50XT1wO2Zbci4kZmluYWxpemVdKCl9ZWxzZSgwLGMud2FybikoIlhGQSAtIEludmFsaWQgbm9kZSB0byB1c2UgaW4gc2V0UHJvcGVydHkiKX19X2JpbmRJdGVtcyhlLHQpe2lmKCFlLmhhc093blByb3BlcnR5KCJpdGVtcyIpfHwhZS5oYXNPd25Qcm9wZXJ0eSgiYmluZEl0ZW1zIil8fGUuYmluZEl0ZW1zLmlzRW1wdHkoKSlyZXR1cm47Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcy5jaGlsZHJlbillW3IuJHJlbW92ZUNoaWxkXSh0KTtlLml0ZW1zLmNsZWFyKCk7Y29uc3QgYT1uZXcgbi5JdGVtcyh7fSkscz1uZXcgbi5JdGVtcyh7fSk7ZVtyLiRhcHBlbmRDaGlsZF0oYSk7ZS5pdGVtcy5wdXNoKGEpO2Vbci4kYXBwZW5kQ2hpbGRdKHMpO2UuaXRlbXMucHVzaChzKTtmb3IoY29uc3R7cmVmOm4sbGFiZWxSZWY6byx2YWx1ZVJlZjpsLGNvbm5lY3Rpb246aH1vZiBlLmJpbmRJdGVtcy5jaGlsZHJlbil7aWYoaCljb250aW51ZTtpZighbiljb250aW51ZTtjb25zdCBlPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsbiwhMSwhMSk7aWYoZSlmb3IoY29uc3QgdCBvZiBlKXtpZighdFtyLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXsoMCxjLndhcm4pKGBYRkEgLSBJbnZhbGlkIHJlZiAoJHtufSk6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC5gKTtjb250aW51ZX1jb25zdCBlPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsbywhMCwhMSk7aWYoIWUpeygwLGMud2FybikoYFhGQSAtIEludmFsaWQgbGFiZWw6ICR7b30uYCk7Y29udGludWV9Y29uc3RbaF09ZTtpZighaFtyLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIGxhYmVsOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuIik7Y29udGludWV9Y29uc3QgdT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGwsITAsITEpO2lmKCF1KXsoMCxjLndhcm4pKGBYRkEgLSBJbnZhbGlkIHZhbHVlOiAke2x9LmApO2NvbnRpbnVlfWNvbnN0W2RdPXU7aWYoIWRbci4kaXNEZXNjZW5kZW50XSh0aGlzLmRhdGFzZXRzKSl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCB2YWx1ZTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpO2NvbnRpbnVlfWNvbnN0IGY9Y3JlYXRlVGV4dChoW3IuJHRleHRdKCkpLGc9Y3JlYXRlVGV4dChkW3IuJHRleHRdKCkpO2Fbci4kYXBwZW5kQ2hpbGRdKGYpO2EudGV4dC5wdXNoKGYpO3Nbci4kYXBwZW5kQ2hpbGRdKGcpO3MudGV4dC5wdXNoKGcpfWVsc2UoMCxjLndhcm4pKGBYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogJHtufS5gKX19X2JpbmRPY2N1cnJlbmNlcyhlLHQsYSl7bGV0IG47aWYodC5sZW5ndGg+MSl7bj1lW3IuJGNsb25lXSgpO25bci4kcmVtb3ZlQ2hpbGRdKG4ub2NjdXIpO24ub2NjdXI9bnVsbH10aGlzLl9iaW5kVmFsdWUoZSx0WzBdLGEpO3RoaXMuX3NldFByb3BlcnRpZXMoZSx0WzBdKTt0aGlzLl9iaW5kSXRlbXMoZSx0WzBdKTtpZigxPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IGk9ZVtyLiRnZXRQYXJlbnRdKCkscz1lW3IuJG5vZGVOYW1lXSxvPWlbci4kaW5kZXhPZl0oZSk7Zm9yKGxldCBlPTEsYz10Lmxlbmd0aDtlPGM7ZSsrKXtjb25zdCBjPXRbZV0sbD1uW3IuJGNsb25lXSgpO2lbc10ucHVzaChsKTtpW3IuJGluc2VydEF0XShvK2UsbCk7dGhpcy5fYmluZFZhbHVlKGwsYyxhKTt0aGlzLl9zZXRQcm9wZXJ0aWVzKGwsYyk7dGhpcy5fYmluZEl0ZW1zKGwsYyl9fV9jcmVhdGVPY2N1cnJlbmNlcyhlKXtpZighdGhpcy5lbXB0eU1lcmdlKXJldHVybjtjb25zdHtvY2N1cjp0fT1lO2lmKCF0fHx0LmluaXRpYWw8PTEpcmV0dXJuO2NvbnN0IGE9ZVtyLiRnZXRQYXJlbnRdKCksbj1lW3IuJG5vZGVOYW1lXTtpZighKGFbbl1pbnN0YW5jZW9mIHMuWEZBT2JqZWN0QXJyYXkpKXJldHVybjtsZXQgaTtpPWUubmFtZT9hW25dLmNoaWxkcmVuLmZpbHRlcigodD0+dC5uYW1lPT09ZS5uYW1lKSkubGVuZ3RoOmFbbl0uY2hpbGRyZW4ubGVuZ3RoO2NvbnN0IG89YVtyLiRpbmRleE9mXShlKSsxLGM9dC5pbml0aWFsLWk7aWYoYyl7Y29uc3QgdD1lW3IuJGNsb25lXSgpO3Rbci4kcmVtb3ZlQ2hpbGRdKHQub2NjdXIpO3Qub2NjdXI9bnVsbDthW25dLnB1c2godCk7YVtyLiRpbnNlcnRBdF0obyx0KTtmb3IobGV0IGU9MTtlPGM7ZSsrKXtjb25zdCBpPXRbci4kY2xvbmVdKCk7YVtuXS5wdXNoKGkpO2Fbci4kaW5zZXJ0QXRdKG8rZSxpKX19fV9nZXRPY2N1ckluZm8oZSl7Y29uc3R7bmFtZTp0LG9jY3VyOmF9PWU7aWYoIWF8fCF0KXJldHVyblsxLDFdO2NvbnN0IHI9LTE9PT1hLm1heD8xLzA6YS5tYXg7cmV0dXJuW2EubWluLHJdfV9zZXRBbmRCaW5kKGUsdCl7dGhpcy5fc2V0UHJvcGVydGllcyhlLHQpO3RoaXMuX2JpbmRJdGVtcyhlLHQpO3RoaXMuX2JpbmRFbGVtZW50KGUsdCl9X2JpbmRFbGVtZW50KGUsdCl7Y29uc3QgYT1bXTt0aGlzLl9jcmVhdGVPY2N1cnJlbmNlcyhlKTtmb3IoY29uc3QgbiBvZiBlW3IuJGdldENoaWxkcmVuXSgpKXtpZihuW3IuJGRhdGFdKWNvbnRpbnVlO2lmKHZvaWQgMD09PXRoaXMuX21lcmdlTW9kZSYmInN1YmZvcm0iPT09bltyLiRub2RlTmFtZV0pe3RoaXMuX21lcmdlTW9kZT0iY29uc3VtZURhdGEiPT09bi5tZXJnZU1vZGU7Y29uc3QgZT10W3IuJGdldENoaWxkcmVuXSgpO2lmKGUubGVuZ3RoPjApdGhpcy5fYmluZE9jY3VycmVuY2VzKG4sW2VbMF1dLG51bGwpO2Vsc2UgaWYodGhpcy5lbXB0eU1lcmdlKXtjb25zdCBlPXRbci4kbmFtZXNwYWNlSWRdPT09bD8tMTp0W3IuJG5hbWVzcGFjZUlkXSxhPW5bci4kZGF0YV09bmV3IHMuWG1sT2JqZWN0KGUsbi5uYW1lfHwicm9vdCIpO3Rbci4kYXBwZW5kQ2hpbGRdKGEpO3RoaXMuX2JpbmRFbGVtZW50KG4sYSl9Y29udGludWV9aWYoIW5bci4kaXNCaW5kYWJsZV0oKSljb250aW51ZTtsZXQgZT0hMSxvPW51bGwsaD1udWxsLHU9bnVsbDtpZihuLmJpbmQpe3N3aXRjaChuLmJpbmQubWF0Y2gpe2Nhc2Uibm9uZSI6dGhpcy5fc2V0QW5kQmluZChuLHQpO2NvbnRpbnVlO2Nhc2UiZ2xvYmFsIjplPSEwO2JyZWFrO2Nhc2UiZGF0YVJlZiI6aWYoIW4uYmluZC5yZWYpeygwLGMud2FybikoYFhGQSAtIHJlZiBpcyBlbXB0eSBpbiBub2RlICR7bltyLiRub2RlTmFtZV19LmApO3RoaXMuX3NldEFuZEJpbmQobix0KTtjb250aW51ZX1oPW4uYmluZC5yZWZ9bi5iaW5kLnBpY3R1cmUmJihvPW4uYmluZC5waWN0dXJlW3IuJGNvbnRlbnRdKX1jb25zdFtkLGZdPXRoaXMuX2dldE9jY3VySW5mbyhuKTtpZihoKXt1PSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsaCwhMCwhMSk7aWYobnVsbD09PXUpe3U9KDAsaS5jcmVhdGVEYXRhTm9kZSkodGhpcy5kYXRhLHQsaCk7aWYoIXUpY29udGludWU7dGhpcy5faXNDb25zdW1lRGF0YSgpJiYodVtyLiRjb25zdW1lZF09ITApO3RoaXMuX3NldEFuZEJpbmQobix1KTtjb250aW51ZX10aGlzLl9pc0NvbnN1bWVEYXRhKCkmJih1PXUuZmlsdGVyKChlPT4hZVtyLiRjb25zdW1lZF0pKSk7dS5sZW5ndGg+Zj91PXUuc2xpY2UoMCxmKTowPT09dS5sZW5ndGgmJih1PW51bGwpO3UmJnRoaXMuX2lzQ29uc3VtZURhdGEoKSYmdS5mb3JFYWNoKChlPT57ZVtyLiRjb25zdW1lZF09ITB9KSl9ZWxzZXtpZighbi5uYW1lKXt0aGlzLl9zZXRBbmRCaW5kKG4sdCk7Y29udGludWV9aWYodGhpcy5faXNDb25zdW1lRGF0YSgpKXtjb25zdCBhPVtdO2Zvcig7YS5sZW5ndGg8Zjspe2NvbnN0IGk9dGhpcy5fZmluZERhdGFCeU5hbWVUb0NvbnN1bWUobi5uYW1lLG5bci4kaGFzU2V0dGFibGVWYWx1ZV0oKSx0LGUpO2lmKCFpKWJyZWFrO2lbci4kY29uc3VtZWRdPSEwO2EucHVzaChpKX11PWEubGVuZ3RoPjA/YTpudWxsfWVsc2V7dT10W3IuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShuLm5hbWUsITEsdGhpcy5lbXB0eU1lcmdlKS5uZXh0KCkudmFsdWU7aWYoIXUpe2lmKDA9PT1kKXthLnB1c2gobik7Y29udGludWV9Y29uc3QgZT10W3IuJG5hbWVzcGFjZUlkXT09PWw/LTE6dFtyLiRuYW1lc3BhY2VJZF07dT1uW3IuJGRhdGFdPW5ldyBzLlhtbE9iamVjdChlLG4ubmFtZSk7dGhpcy5lbXB0eU1lcmdlJiYodVtyLiRjb25zdW1lZF09ITApO3Rbci4kYXBwZW5kQ2hpbGRdKHUpO3RoaXMuX3NldEFuZEJpbmQobix1KTtjb250aW51ZX10aGlzLmVtcHR5TWVyZ2UmJih1W3IuJGNvbnN1bWVkXT0hMCk7dT1bdV19fXU/dGhpcy5fYmluZE9jY3VycmVuY2VzKG4sdSxvKTpkPjA/dGhpcy5fc2V0QW5kQmluZChuLHQpOmEucHVzaChuKX1hLmZvckVhY2goKGU9PmVbci4kZ2V0UGFyZW50XSgpW3IuJHJlbW92ZUNoaWxkXShlKSkpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5WYWx1ZT10LlRleHQ9dC5UZW1wbGF0ZU5hbWVzcGFjZT10LlRlbXBsYXRlPXQuU2V0UHJvcGVydHk9dC5JdGVtcz10LkZpZWxkPXQuQmluZEl0ZW1zPXZvaWQgMDthKDExNik7YSgxMjcpO2EoMTI5KTthKDEzMik7YSgxMzQpO2EoMTM2KTthKDEzOCk7YSgxNDApO2EoMjMyKTthKDE0Nik7YSgxNDgpO2EoMTQ5KTt2YXIgcj1hKDIyOSksbj1hKDIzNSksaT1hKDIzNikscz1hKDIzNyksbz1hKDI0MSksYz1hKDIzOCksbD1hKDE0NSksaD1hKDIzOSksdT1hKDE1MCksZD1hKDI0Mik7Y29uc3QgZj1uLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCxnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIscD0vXkgoXGQrKSQvLG09bmV3IFNldChbImltYWdlL2dpZiIsImltYWdlL2pwZWciLCJpbWFnZS9qcGciLCJpbWFnZS9wanBlZyIsImltYWdlL3BuZyIsImltYWdlL2FwbmciLCJpbWFnZS94LXBuZyIsImltYWdlL2JtcCIsImltYWdlL3gtbXMtYm1wIiwiaW1hZ2UvdGlmZiIsImltYWdlL3RpZiIsImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJdKSxiPVtbWzY2LDc3XSwiaW1hZ2UvYm1wIl0sW1syNTUsMjE2LDI1NV0sImltYWdlL2pwZWciXSxbWzczLDczLDQyLDBdLCJpbWFnZS90aWZmIl0sW1s3Nyw3NywwLDQyXSwiaW1hZ2UvdGlmZiJdLFtbNzEsNzMsNzAsNTYsNTcsOTddLCJpbWFnZS9naWYiXSxbWzEzNyw4MCw3OCw3MSwxMywxMCwyNiwxMF0sImltYWdlL3BuZyJdXTtmdW5jdGlvbiBnZXRCb3JkZXJEaW1zKGUpe2lmKCFlfHwhZS5ib3JkZXIpcmV0dXJue3c6MCxoOjB9O2NvbnN0IHQ9ZS5ib3JkZXJbci4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/e3c6dC53aWR0aHNbMF0rdC53aWR0aHNbMl0rdC5pbnNldHNbMF0rdC5pbnNldHNbMl0saDp0LndpZHRoc1sxXSt0LndpZHRoc1szXSt0Lmluc2V0c1sxXSt0Lmluc2V0c1szXX06e3c6MCxoOjB9fWZ1bmN0aW9uIGhhc01hcmdpbihlKXtyZXR1cm4gZS5tYXJnaW4mJihlLm1hcmdpbi50b3BJbnNldHx8ZS5tYXJnaW4ucmlnaHRJbnNldHx8ZS5tYXJnaW4uYm90dG9tSW5zZXR8fGUubWFyZ2luLmxlZnRJbnNldCl9ZnVuY3Rpb24gX3NldFZhbHVlKGUsdCl7aWYoIWUudmFsdWUpe2NvbnN0IHQ9bmV3IFZhbHVlKHt9KTtlW3IuJGFwcGVuZENoaWxkXSh0KTtlLnZhbHVlPXR9ZS52YWx1ZVtyLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24qZ2V0Q29udGFpbmVkQ2hpbGRyZW4oZSl7Zm9yKGNvbnN0IHQgb2YgZVtyLiRnZXRDaGlsZHJlbl0oKSl0IGluc3RhbmNlb2YgU3ViZm9ybVNldD95aWVsZCp0W3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpOnlpZWxkIHR9ZnVuY3Rpb24gaXNSZXF1aXJlZChlKXtyZXR1cm4iZXJyb3IiPT09ZS52YWxpZGF0ZT8ubnVsbFRlc3R9ZnVuY3Rpb24gc2V0VGFiSW5kZXgoZSl7Zm9yKDtlOyl7aWYoIWUudHJhdmVyc2FsKXtlW3IuJHRhYkluZGV4XT1lW3IuJGdldFBhcmVudF0oKVtyLiR0YWJJbmRleF07cmV0dXJufWlmKGVbci4kdGFiSW5kZXhdKXJldHVybjtsZXQgdD1udWxsO2Zvcihjb25zdCBhIG9mIGUudHJhdmVyc2FsW3IuJGdldENoaWxkcmVuXSgpKWlmKCJuZXh0Ij09PWEub3BlcmF0aW9uKXt0PWE7YnJlYWt9aWYoIXR8fCF0LnJlZil7ZVtyLiR0YWJJbmRleF09ZVtyLiRnZXRQYXJlbnRdKClbci4kdGFiSW5kZXhdO3JldHVybn1jb25zdCBhPWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO2Vbci4kdGFiSW5kZXhdPSsrYVtyLiR0YWJJbmRleF07Y29uc3Qgbj1hW3IuJHNlYXJjaE5vZGVdKHQucmVmLGUpO2lmKCFuKXJldHVybjtlPW5bMF19fWZ1bmN0aW9uIGFwcGx5QXNzaXN0KGUsdCl7Y29uc3QgYT1lLmFzc2lzdDtpZihhKXtjb25zdCBlPWFbci4kdG9IVE1MXSgpO2UmJih0LnRpdGxlPWUpO2NvbnN0IG49YS5yb2xlLm1hdGNoKHApO2lmKG4pe2NvbnN0IGU9ImhlYWRpbmciLGE9blsxXTt0LnJvbGU9ZTt0WyJhcmlhLWxldmVsIl09YX19aWYoInRhYmxlIj09PWUubGF5b3V0KXQucm9sZT0idGFibGUiO2Vsc2UgaWYoInJvdyI9PT1lLmxheW91dCl0LnJvbGU9InJvdyI7ZWxzZXtjb25zdCBhPWVbci4kZ2V0UGFyZW50XSgpOyJyb3ciPT09YS5sYXlvdXQmJih0LnJvbGU9IlRIIj09PWEuYXNzaXN0Py5yb2xlPyJjb2x1bW5oZWFkZXIiOiJjZWxsIil9fWZ1bmN0aW9uIGFyaWFMYWJlbChlKXtpZighZS5hc3Npc3QpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW3IuJGNvbnRlbnRdP3Quc3BlYWtbci4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtyLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIHZhbHVlVG9IdG1sKGUpe3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVJpY2giXSxzdHlsZTpPYmplY3QuY3JlYXRlKG51bGwpfSxjaGlsZHJlbjpbe25hbWU6InNwYW4iLGF0dHJpYnV0ZXM6e3N0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LHZhbHVlOmV9XX0pfWZ1bmN0aW9uIHNldEZpcnN0VW5zcGxpdHRhYmxlKGUpe2NvbnN0IHQ9ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCk7aWYobnVsbD09PXRbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlKXt0W3IuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZT1lO3Rbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMH19ZnVuY3Rpb24gdW5zZXRGaXJzdFVuc3BsaXR0YWJsZShlKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO3Rbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlPT09ZSYmKHRbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMSl9ZnVuY3Rpb24gaGFuZGxlQnJlYWsoZSl7aWYoZVtyLiRleHRyYV0pcmV0dXJuITE7ZVtyLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKTtpZigiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7Y29uc3QgdD1lW3IuJGdldFRlbXBsYXRlUm9vdF0oKTtsZXQgYT1udWxsO2lmKGUudGFyZ2V0KXthPXRbci4kc2VhcmNoTm9kZV0oZS50YXJnZXQsZVtyLiRnZXRQYXJlbnRdKCkpO2lmKCFhKXJldHVybiExO2E9YVswXX1jb25zdHtjdXJyZW50UGFnZUFyZWE6bixjdXJyZW50Q29udGVudEFyZWE6aX09dFtyLiRleHRyYV07aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSl7YSBpbnN0YW5jZW9mIFBhZ2VBcmVhfHwoYT1udWxsKTtpZihlLnN0YXJ0TmV3KXtlW3IuJGV4dHJhXS50YXJnZXQ9YXx8bjtyZXR1cm4hMH1pZihhJiZhIT09bil7ZVtyLiRleHRyYV0udGFyZ2V0PWE7cmV0dXJuITB9cmV0dXJuITF9YSBpbnN0YW5jZW9mIENvbnRlbnRBcmVhfHwoYT1udWxsKTtjb25zdCBzPWEmJmFbci4kZ2V0UGFyZW50XSgpO2xldCBvLGM9cztpZihlLnN0YXJ0TmV3KWlmKGEpe2NvbnN0IGU9cy5jb250ZW50QXJlYS5jaGlsZHJlbix0PWUuaW5kZXhPZihpKSxyPWUuaW5kZXhPZihhKTstMSE9PXQmJnQ8ciYmKGM9bnVsbCk7bz1yLTF9ZWxzZSBvPW4uY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihpKTtlbHNle2lmKCFhfHxhPT09aSlyZXR1cm4hMTtvPXMuY29udGVudEFyZWEuY2hpbGRyZW4uaW5kZXhPZihhKS0xO2M9cz09PW4/bnVsbDpzfWVbci4kZXh0cmFdLnRhcmdldD1jO2Vbci4kZXh0cmFdLmluZGV4PW87cmV0dXJuITB9ZnVuY3Rpb24gaGFuZGxlT3ZlcmZsb3coZSx0LGEpe2NvbnN0IG49ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKCksaT1uW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUscz10W3IuJGdldFN1YmZvcm1QYXJlbnRdO3Rbci4kZ2V0U3ViZm9ybVBhcmVudF09KCk9PmU7bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwO2NvbnN0IG89dFtyLiR0b0hUTUxdKGEpO2Vbci4kYWRkSFRNTF0oby5odG1sLG8uYmJveCk7bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPWk7dFtyLiRnZXRTdWJmb3JtUGFyZW50XT1zfWNsYXNzIEFwcGVhcmFuY2VGaWx0ZXIgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJhcHBlYXJhbmNlRmlsdGVyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBBcmMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJhcmMiLCEwKTt0aGlzLmNpcmN1bGFyPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jaXJjdWxhcixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaGFuZD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc3RhcnRBbmdsZT0oMCxjLmdldEZsb2F0KSh7ZGF0YTplLnN0YXJ0QW5nbGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnN3ZWVwQW5nbGU9KDAsYy5nZXRGbG9hdCkoe2RhdGE6ZS5zd2VlcEFuZ2xlLGRlZmF1bHRWYWx1ZTozNjAsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGw7dGhpcy5maWxsPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLHQ9ZVtyLiR0b1N0eWxlXSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTsidmlzaWJsZSI9PT10aGlzLmZpbGw/LnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbci4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCI7YS5zdHJva2VXaWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09ZS5wcmVzZW5jZT9lLnRoaWNrbmVzczowKTthLnN0cm9rZT10LmNvbG9yO2xldCBuO2NvbnN0IGk9e3htbG5zOmcsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn19O2lmKDM2MD09PXRoaXMuc3dlZXBBbmdsZSluPXtuYW1lOiJlbGxpcHNlIixhdHRyaWJ1dGVzOnt4bWxuczpnLGN4OiI1MCUiLGN5OiI1MCUiLHJ4OiI1MCUiLHJ5OiI1MCUiLHN0eWxlOmF9fTtlbHNle2NvbnN0IGU9dGhpcy5zdGFydEFuZ2xlKk1hdGguUEkvMTgwLHQ9dGhpcy5zd2VlcEFuZ2xlKk1hdGguUEkvMTgwLHI9dGhpcy5zd2VlcEFuZ2xlPjE4MD8xOjAsW3MsbyxjLGxdPVs1MCooMStNYXRoLmNvcyhlKSksNTAqKDEtTWF0aC5zaW4oZSkpLDUwKigxK01hdGguY29zKGUrdCkpLDUwKigxLU1hdGguc2luKGUrdCkpXTtuPXtuYW1lOiJwYXRoIixhdHRyaWJ1dGVzOnt4bWxuczpnLGQ6YE0gJHtzfSAke299IEEgNTAgNTAgMCAke3J9IDAgJHtjfSAke2x9YCx2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6YX19O09iamVjdC5hc3NpZ24oaSx7dmlld0JveDoiMCAwIDEwMCAxMDAiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSl9Y29uc3Qgbz17bmFtZToic3ZnIixjaGlsZHJlbjpbbl0sYXR0cmlidXRlczppfTtpZihoYXNNYXJnaW4odGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpKSlyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbb119KTtvLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Mobyl9fWNsYXNzIEFyZWEgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJhcmVhIiwhMCk7dGhpcy5jb2xTcGFuPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy54PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmFyZWE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBvLlhGQU9iamVjdEFycmF5fSpbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCl7eWllbGQqZ2V0Q29udGFpbmVkQ2hpbGRyZW4odGhpcyl9W3IuJGlzVHJhbnNwYXJlbnRdKCl7cmV0dXJuITB9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITB9W3IuJGFkZEhUTUxdKGUsdCl7Y29uc3RbYSxuLGksc109dDt0aGlzW3IuJGV4dHJhXS53aWR0aD1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS53aWR0aCxhK2kpO3RoaXNbci4kZXh0cmFdLmhlaWdodD1NYXRoLm1heCh0aGlzW3IuJGV4dHJhXS5oZWlnaHQsbitzKTt0aGlzW3IuJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGUpfVtyLiRnZXRBdmFpbGFibGVTcGFjZV0oKXtyZXR1cm4gdGhpc1tyLiRleHRyYV0uYXZhaWxhYmxlU3BhY2V9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsInBvc2l0aW9uIiksYT17c3R5bGU6dCxpZDp0aGlzW3IuJHVpZF0sY2xhc3M6WyJ4ZmFBcmVhIl19OygwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZhLmNsYXNzLnB1c2goInhmYVByaW50T25seSIpO3RoaXMubmFtZSYmKGEueGZhTmFtZT10aGlzLm5hbWUpO2NvbnN0IG49W107dGhpc1tyLiRleHRyYV09e2NoaWxkcmVuOm4sd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTtjb25zdCBpPXRoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZmllbGQiLCJleGNsR3JvdXAiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKSxpbmNsdWRlOiEwfSk7aWYoIWkuc3VjY2Vzcyl7aWYoaS5pc0JyZWFrKCkpcmV0dXJuIGk7ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRX10LndpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzW3IuJGV4dHJhXS53aWR0aCk7dC5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXNbci4kZXh0cmFdLmhlaWdodCk7Y29uc3Qgbz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmEsY2hpbGRyZW46bn0sbD1bdGhpcy54LHRoaXMueSx0aGlzW3IuJGV4dHJhXS53aWR0aCx0aGlzW3IuJGV4dHJhXS5oZWlnaHRdO2RlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MobyxsKX19Y2xhc3MgQXNzaXN0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYXNzaXN0IiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJvbGU9ZS5yb2xlfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zcGVhaz1udWxsO3RoaXMudG9vbFRpcD1udWxsfVtyLiR0b0hUTUxdKCl7cmV0dXJuIHRoaXMudG9vbFRpcD8uW3IuJGNvbnRlbnRdfHxudWxsfX1jbGFzcyBCYXJjb2RlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYmFyY29kZSIsITApO3RoaXMuY2hhckVuY29kaW5nPSgwLGMuZ2V0S2V5d29yZCkoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+WyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX0pO3RoaXMuY2hlY2tzdW09KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY2hlY2tzdW0sWyJub25lIiwiMW1vZDEwIiwiMW1vZDEwXzFtb2QxMSIsIjJtb2QxMCIsImF1dG8iXSk7dGhpcy5kYXRhQ29sdW1uQ291bnQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFDb2x1bW5Db3VudCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZGF0YUxlbmd0aD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZGF0YVByZXA9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZGF0YVByZXAsWyJub25lIiwiZmxhdGVDb21wcmVzcyJdKTt0aGlzLmRhdGFSb3dDb3VudD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YVJvd0NvdW50LGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5lbmRDaGFyPWUuZW5kQ2hhcnx8IiI7dGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZXJyb3JDb3JyZWN0aW9uTGV2ZWwsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTh9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubW9kdWxlSGVpZ2h0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlSGVpZ2h0LCI1bW0iKTt0aGlzLm1vZHVsZVdpZHRoPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpO3RoaXMucHJpbnRDaGVja0RpZ2l0PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnJvd0NvbHVtblJhdGlvPSgwLGMuZ2V0UmF0aW8pKGUucm93Q29sdW1uUmF0aW8pO3RoaXMuc3RhcnRDaGFyPWUuc3RhcnRDaGFyfHwiIjt0aGlzLnRleHRMb2NhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50ZXh0TG9jYXRpb24sWyJiZWxvdyIsImFib3ZlIiwiYWJvdmVFbWJlZGRlZCIsImJlbG93RW1iZWRkZWQiLCJub25lIl0pO3RoaXMudHJ1bmNhdGU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnRydW5jYXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGU/ZS50eXBlLnRvTG93ZXJDYXNlKCk6IiIsWyJhenRlYyIsImNvZGFiYXIiLCJjb2RlMm9mNWluZHVzdHJpYWwiLCJjb2RlMm9mNWludGVybGVhdmVkIiwiY29kZTJvZjVtYXRyaXgiLCJjb2RlMm9mNXN0YW5kYXJkIiwiY29kZTNvZjkiLCJjb2RlM29mOWV4dGVuZGVkIiwiY29kZTExIiwiY29kZTQ5IiwiY29kZTkzIiwiY29kZTEyOCIsImNvZGUxMjhhIiwiY29kZTEyOGIiLCJjb2RlMTI4YyIsImNvZGUxMjhzc2NjIiwiZGF0YW1hdHJpeCIsImVhbjgiLCJlYW44YWRkMiIsImVhbjhhZGQ1IiwiZWFuMTMiLCJlYW4xM2FkZDIiLCJlYW4xM2FkZDUiLCJlYW4xM3B3Y2QiLCJmaW0iLCJsb2dtYXJzIiwibWF4aWNvZGUiLCJtc2kiLCJwZGY0MTciLCJwZGY0MTdtYWNybyIsInBsZXNzZXkiLCJwb3N0YXVzY3VzdDIiLCJwb3N0YXVzY3VzdDMiLCJwb3N0YXVzcmVwbHlwYWlkIiwicG9zdGF1c3N0YW5kYXJkIiwicG9zdHVrcm00c2NjIiwicG9zdHVzZHBiYyIsInBvc3R1c2ltYiIsInBvc3R1c3N0YW5kYXJkIiwicG9zdHVzNXppcCIsInFyY29kZSIsInJmaWQiLCJyc3MxNCIsInJzczE0ZXhwYW5kZWQiLCJyc3MxNGxpbWl0ZWQiLCJyc3MxNHN0YWNrZWQiLCJyc3MxNHN0YWNrZWRvbW5pIiwicnNzMTR0cnVuY2F0ZWQiLCJ0ZWxlcGVuIiwidWNjMTI4IiwidWNjMTI4cmFuZG9tIiwidWNjMTI4c3NjYyIsInVwY2EiLCJ1cGNhYWRkMiIsInVwY2FhZGQ1IiwidXBjYXB3Y2QiLCJ1cGNlIiwidXBjZWFkZDIiLCJ1cGNlYWRkNSIsInVwY2VhbjIiLCJ1cGNlYW41IiwidXBzbWF4aWNvZGUiXSk7dGhpcy51cHNNb2RlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnVwc01vZGUsWyJ1c0NhcnJpZXIiLCJpbnRlcm5hdGlvbmFsQ2FycmllciIsInNlY3VyZVN5bWJvbCIsInN0YW5kYXJkU3ltYm9sIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLndpZGVOYXJyb3dSYXRpbz0oMCxjLmdldFJhdGlvKShlLndpZGVOYXJyb3dSYXRpbyk7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgQmluZCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJpbmQiLCEwKTt0aGlzLm1hdGNoPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm1hdGNoLFsib25jZSIsImRhdGFSZWYiLCJnbG9iYWwiLCJub25lIl0pO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnBpY3R1cmU9bnVsbH19Y2xhc3MgQmluZEl0ZW1zIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYmluZEl0ZW1zIik7dGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiI7dGhpcy5sYWJlbFJlZj1lLmxhYmVsUmVmfHwiIjt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy52YWx1ZVJlZj1lLnZhbHVlUmVmfHwiIn19dC5CaW5kSXRlbXM9QmluZEl0ZW1zO2NsYXNzIEJvb2tlbmQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJib29rZW5kIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBCb29sZWFuRWxlbWVudCBleHRlbmRzIG8uT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYm9vbGVhbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiR0b0hUTUxdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCgxPT09dGhpc1tyLiRjb250ZW50XT8iMSI6IjAiKX19Y2xhc3MgQm9yZGVyIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYm9yZGVyIiwhMCk7dGhpcy5icmVhaz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5icmVhayxbImNsb3NlIiwib3BlbiJdKTt0aGlzLmhhbmQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9KDAsYy5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29ybmVyPW5ldyBvLlhGQU9iamVjdEFycmF5KDQpO3RoaXMuZWRnZT1uZXcgby5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsbD1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJGdldEV4dHJhXSgpe2lmKCF0aGlzW3IuJGV4dHJhXSl7Y29uc3QgZT10aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtpZihlLmxlbmd0aDw0KXtjb25zdCB0PWUuYXQoLTEpfHxuZXcgRWRnZSh7fSk7Zm9yKGxldCBhPWUubGVuZ3RoO2E8NDthKyspZS5wdXNoKHQpfWNvbnN0IHQ9ZS5tYXAoKGU9PmUudGhpY2tuZXNzKSksYT1bMCwwLDAsMF07aWYodGhpcy5tYXJnaW4pe2FbMF09dGhpcy5tYXJnaW4udG9wSW5zZXQ7YVsxXT10aGlzLm1hcmdpbi5yaWdodEluc2V0O2FbMl09dGhpcy5tYXJnaW4uYm90dG9tSW5zZXQ7YVszXT10aGlzLm1hcmdpbi5sZWZ0SW5zZXR9dGhpc1tyLiRleHRyYV09e3dpZHRoczp0LGluc2V0czphLGVkZ2VzOmV9fXJldHVybiB0aGlzW3IuJGV4dHJhXX1bci4kdG9TdHlsZV0oKXtjb25zdHtlZGdlczplfT10aGlzW3IuJGdldEV4dHJhXSgpLHQ9ZS5tYXAoKGU9Pntjb25zdCB0PWVbci4kdG9TdHlsZV0oKTt0LmNvbG9yfHw9IiMwMDAwMDAiO3JldHVybiB0fSkpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLm1hcmdpbiYmT2JqZWN0LmFzc2lnbihhLHRoaXMubWFyZ2luW3IuJHRvU3R5bGVdKCkpOyJ2aXNpYmxlIj09PXRoaXMuZmlsbD8ucHJlc2VuY2UmJk9iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbci4kdG9TdHlsZV0oKSk7aWYodGhpcy5jb3JuZXIuY2hpbGRyZW4uc29tZSgoZT0+MCE9PWUucmFkaXVzKSkpe2NvbnN0IGU9dGhpcy5jb3JuZXIuY2hpbGRyZW4ubWFwKChlPT5lW3IuJHRvU3R5bGVdKCkpKTtpZigyPT09ZS5sZW5ndGh8fDM9PT1lLmxlbmd0aCl7Y29uc3QgdD1lLmF0KC0xKTtmb3IobGV0IGE9ZS5sZW5ndGg7YTw0O2ErKyllLnB1c2godCl9YS5ib3JkZXJSYWRpdXM9ZS5tYXAoKGU9PmUucmFkaXVzKSkuam9pbigiICIpfXN3aXRjaCh0aGlzLnByZXNlbmNlKXtjYXNlImludmlzaWJsZSI6Y2FzZSJoaWRkZW4iOmEuYm9yZGVyU3R5bGU9IiI7YnJlYWs7Y2FzZSJpbmFjdGl2ZSI6YS5ib3JkZXJTdHlsZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDphLmJvcmRlclN0eWxlPXQubWFwKChlPT5lLnN0eWxlKSkuam9pbigiICIpfWEuYm9yZGVyV2lkdGg9dC5tYXAoKGU9PmUud2lkdGgpKS5qb2luKCIgIik7YS5ib3JkZXJDb2xvcj10Lm1hcCgoZT0+ZS5jb2xvcikpLmpvaW4oIiAiKTtyZXR1cm4gYX19Y2xhc3MgQnJlYWsgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJicmVhayIsITApO3RoaXMuYWZ0ZXI9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWZ0ZXIsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKTt0aGlzLmFmdGVyVGFyZ2V0PWUuYWZ0ZXJUYXJnZXR8fCIiO3RoaXMuYmVmb3JlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmJlZm9yZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIiwicGFnZUV2ZW4iLCJwYWdlT2RkIl0pO3RoaXMuYmVmb3JlVGFyZ2V0PWUuYmVmb3JlVGFyZ2V0fHwiIjt0aGlzLmJvb2tlbmRMZWFkZXI9ZS5ib29rZW5kTGVhZGVyfHwiIjt0aGlzLmJvb2tlbmRUcmFpbGVyPWUuYm9va2VuZFRyYWlsZXJ8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVyZmxvd0xlYWRlcj1lLm92ZXJmbG93TGVhZGVyfHwiIjt0aGlzLm92ZXJmbG93VGFyZ2V0PWUub3ZlcmZsb3dUYXJnZXR8fCIiO3RoaXMub3ZlcmZsb3dUcmFpbGVyPWUub3ZlcmZsb3dUcmFpbGVyfHwiIjt0aGlzLnN0YXJ0TmV3PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBCcmVha0FmdGVyIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYnJlYWtBZnRlciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMuc3RhcnROZXc9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGFyZ2V0VHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSk7dGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc2NyaXB0PW51bGx9fWNsYXNzIEJyZWFrQmVmb3JlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYnJlYWtCZWZvcmUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnN0YXJ0TmV3PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRhcmdldFR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudGFyZ2V0VHlwZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl0pO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnNjcmlwdD1udWxsfVtyLiR0b0hUTUxdKGUpe3RoaXNbci4kZXh0cmFdPXt9O3JldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRX19Y2xhc3MgQnV0dG9uIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYnV0dG9uIiwhMCk7dGhpcy5oaWdobGlnaHQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaGlnaGxpZ2h0LFsiaW52ZXJ0ZWQiLCJub25lIiwib3V0bGluZSIsInB1c2giXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxhPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbci4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2YgdC5ldmVudC5jaGlsZHJlbil7aWYoImNsaWNrIiE9PWUuYWN0aXZpdHl8fCFlLnNjcmlwdCljb250aW51ZTtjb25zdCB0PSgwLHUucmVjb3ZlckpzVVJMKShlLnNjcmlwdFtyLiRjb250ZW50XSk7aWYoIXQpY29udGludWU7Y29uc3Qgbj0oMCxzLmZpeFVSTCkodC51cmwpO24mJmEuY2hpbGRyZW4ucHVzaCh7bmFtZToiYSIsYXR0cmlidXRlczp7aWQ6ImxpbmsiK3RoaXNbci4kdWlkXSxocmVmOm4sbmV3V2luZG93OnQubmV3V2luZG93LGNsYXNzOlsieGZhTGluayJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0pfXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcyhhKX19Y2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY2FsY3VsYXRlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJyaWRlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm92ZXJyaWRlLFsiZGlzYWJsZWQiLCJlcnJvciIsImlnbm9yZSIsIndhcm5pbmciXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZXNzYWdlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgQ2FwdGlvbiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNhcHRpb24iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGxhY2VtZW50PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnBsYWNlbWVudCxbImxlZnQiLCJib3R0b20iLCJpbmxpbmUiLCJyaWdodCIsInRvcCJdKTt0aGlzLnByZXNlbmNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVzZXJ2ZT1NYXRoLmNlaWwoKDAsYy5nZXRNZWFzdXJlbWVudCkoZS5yZXNlcnZlKSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnZhbHVlPW51bGx9W3IuJHNldFZhbHVlXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bci4kZ2V0RXh0cmFdKGUpe2lmKCF0aGlzW3IuJGV4dHJhXSl7bGV0e3dpZHRoOnQsaGVpZ2h0OmF9PWU7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0PXRoaXMucmVzZXJ2ZTw9MD90OnRoaXMucmVzZXJ2ZTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmE9dGhpcy5yZXNlcnZlPD0wP2E6dGhpcy5yZXNlcnZlfXRoaXNbci4kZXh0cmFdPSgwLHMubGF5b3V0Tm9kZSkodGhpcyx7d2lkdGg6dCxoZWlnaHQ6YX0pfXJldHVybiB0aGlzW3IuJGV4dHJhXX1bci4kdG9IVE1MXShlKXtpZighdGhpcy52YWx1ZSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO3RoaXNbci4kcHVzaFBhcmFdKCk7Y29uc3QgdD10aGlzLnZhbHVlW3IuJHRvSFRNTF0oZSkuaHRtbDtpZighdCl7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBjLkhUTUxSZXN1bHQuRU1QVFl9Y29uc3QgYT10aGlzLnJlc2VydmU7aWYodGhpcy5yZXNlcnZlPD0wKXtjb25zdHt3OnQsaDphfT10aGlzW3IuJGdldEV4dHJhXShlKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnRoaXMucmVzZXJ2ZT10O2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPWF9fWNvbnN0IG49W107InN0cmluZyI9PXR5cGVvZiB0P24ucHVzaCh7bmFtZToiI3RleHQiLHZhbHVlOnR9KTpuLnB1c2godCk7Y29uc3QgaT0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJtYXJnaW4iLCJ2aXNpYmlsaXR5Iik7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOnRoaXMucmVzZXJ2ZT4wJiYoaS53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjp0aGlzLnJlc2VydmU+MCYmKGkuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJlc2VydmUpKX0oMCxzLnNldFBhcmEpKHRoaXMsbnVsbCx0KTt0aGlzW3IuJHBvcFBhcmFdKCk7dGhpcy5yZXNlcnZlPWE7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOmksY2xhc3M6WyJ4ZmFDYXB0aW9uIl19LGNoaWxkcmVuOm59KX19Y2xhc3MgQ2VydGlmaWNhdGUgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjZXJ0aWZpY2F0ZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBDZXJ0aWZpY2F0ZXMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjZXJ0aWZpY2F0ZXMiLCEwKTt0aGlzLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVybD1lLnVybHx8IiI7dGhpcy51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVuY3J5cHRpb249bnVsbDt0aGlzLmlzc3VlcnM9bnVsbDt0aGlzLmtleVVzYWdlPW51bGw7dGhpcy5vaWRzPW51bGw7dGhpcy5zaWduaW5nPW51bGw7dGhpcy5zdWJqZWN0RE5zPW51bGx9fWNsYXNzIENoZWNrQnV0dG9uIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY2hlY2tCdXR0b24iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWFyaz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5tYXJrLFsiZGVmYXVsdCIsImNoZWNrIiwiY2lyY2xlIiwiY3Jvc3MiLCJkaWFtb25kIiwic3F1YXJlIiwic3RhciJdKTt0aGlzLnNoYXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnNoYXBlLFsic3F1YXJlIiwicm91bmQiXSk7dGhpcy5zaXplPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuc2l6ZSwiMTBwdCIpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkoIm1hcmdpbiIpLGE9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc2l6ZSk7dC53aWR0aD10LmhlaWdodD1hO2xldCBuLGksbztjb25zdCBsPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxoPWwuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoJiZsLml0ZW1zLmNoaWxkcmVuWzBdW3IuJHRvSFRNTF0oKS5odG1sfHxbXSx1PXtvbjoodm9pZCAwIT09aFswXT9oWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1oWzFdP2hbMV06Im9mZiIpLnRvU3RyaW5nKCl9LGQ9KGwudmFsdWU/LltyLiR0ZXh0XSgpfHwib2ZmIik9PT11Lm9ufHx2b2lkIDAsZj1sW3IuJGdldFN1YmZvcm1QYXJlbnRdKCksZz1sW3IuJHVpZF07bGV0IHA7aWYoZiBpbnN0YW5jZW9mIEV4Y2xHcm91cCl7bz1mW3IuJHVpZF07bj0icmFkaW8iO2k9InhmYVJhZGlvIjtwPWZbci4kZGF0YV0/LltyLiR1aWRdfHxmW3IuJHVpZF19ZWxzZXtuPSJjaGVja2JveCI7aT0ieGZhQ2hlY2tib3giO3A9bFtyLiRkYXRhXT8uW3IuJHVpZF18fGxbci4kdWlkXX1jb25zdCBtPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7Y2xhc3M6W2ldLHN0eWxlOnQsZmllbGRJZDpnLGRhdGFJZDpwLHR5cGU6bixjaGVja2VkOmQseGZhT246dS5vbix4ZmFPZmY6dS5vZmYsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChsKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtvJiYobS5hdHRyaWJ1dGVzLm5hbWU9byk7aWYoaXNSZXF1aXJlZChsKSl7bS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7bS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W21dfSl9fWNsYXNzIENob2ljZUxpc3QgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjaG9pY2VMaXN0IiwhMCk7dGhpcy5jb21taXRPbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5jb21taXRPbixbInNlbGVjdCIsImV4aXQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm9wZW49KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUub3BlbixbInVzZXJDb250cm9sIiwiYWx3YXlzIiwibXVsdGlTZWxlY3QiLCJvbkVudHJ5Il0pO3RoaXMudGV4dEVudHJ5PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS50ZXh0RW50cnksZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLGE9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLG49e2ZvbnRTaXplOmBjYWxjKCR7YS5mb250Py5zaXplfHwxMH1weCAqIHZhcigtLXNjYWxlLWZhY3RvcikpYH0saT1bXTtpZihhLml0ZW1zLmNoaWxkcmVuLmxlbmd0aD4wKXtjb25zdCBlPWEuaXRlbXM7bGV0IHQ9MCxzPTA7aWYoMj09PWUuY2hpbGRyZW4ubGVuZ3RoKXt0PWUuY2hpbGRyZW5bMF0uc2F2ZTtzPTEtdH1jb25zdCBvPWUuY2hpbGRyZW5bdF1bci4kdG9IVE1MXSgpLmh0bWwsYz1lLmNoaWxkcmVuW3NdW3IuJHRvSFRNTF0oKS5odG1sO2xldCBsPSExO2NvbnN0IGg9YS52YWx1ZT8uW3IuJHRleHRdKCl8fCIiO2ZvcihsZXQgZT0wLHQ9by5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD17bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOnt2YWx1ZTpjW2VdfHxvW2VdLHN0eWxlOm59LHZhbHVlOm9bZV19O2NbZV09PT1oJiYodC5hdHRyaWJ1dGVzLnNlbGVjdGVkPWw9ITApO2kucHVzaCh0KX1sfHxpLnNwbGljZSgwLDAse25hbWU6Im9wdGlvbiIsYXR0cmlidXRlczp7aGlkZGVuOiEwLHNlbGVjdGVkOiEwfSx2YWx1ZToiICJ9KX1jb25zdCBvPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6YVtyLiR1aWRdLGRhdGFJZDphW3IuJGRhdGFdPy5bci4kdWlkXXx8YVtyLiR1aWRdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChhKSwiYXJpYS1yZXF1aXJlZCI6ITF9O2lmKGlzUmVxdWlyZWQoYSkpe29bImFyaWEtcmVxdWlyZWQiXT0hMDtvLnJlcXVpcmVkPSEwfSJtdWx0aVNlbGVjdCI9PT10aGlzLm9wZW4mJihvLm11bHRpcGxlPSEwKTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt7bmFtZToic2VsZWN0IixjaGlsZHJlbjppLGF0dHJpYnV0ZXM6b31dfSl9fWNsYXNzIENvbG9yIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY29sb3IiLCEwKTt0aGlzLmNTcGFjZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5jU3BhY2UsWyJTUkdCIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmFsdWU9ZS52YWx1ZT8oMCxjLmdldENvbG9yKShlLnZhbHVlKToiIjt0aGlzLmV4dHJhcz1udWxsfVtyLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiExfVtyLiR0b1N0eWxlXSgpe3JldHVybiB0aGlzLnZhbHVlP2wuVXRpbC5tYWtlSGV4Q29sb3IodGhpcy52YWx1ZS5yLHRoaXMudmFsdWUuZyx0aGlzLnZhbHVlLmIpOm51bGx9fWNsYXNzIENvbWIgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjb21iIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm51bWJlck9mQ2VsbHM9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm51bWJlck9mQ2VsbHMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgQ29ubmVjdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNvbm5lY3QiLCEwKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzYWdlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnVzYWdlLFsiZXhwb3J0QW5kSW1wb3J0IiwiZXhwb3J0T25seSIsImltcG9ydE9ubHkiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNvbnRlbnRBcmVhIiwhMCk7dGhpcy5oPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuaCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS53KTt0aGlzLng9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKTt0aGlzLnk9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKTt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9e2xlZnQ6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueCksdG9wOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnkpLHdpZHRoOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLncpLGhlaWdodDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5oKX0sYT1bInhmYUNvbnRlbnRhcmVhIl07KDAscy5pc1ByaW50T25seSkodGhpcykmJmEucHVzaCgieGZhUHJpbnRPbmx5Iik7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e3N0eWxlOnQsY2xhc3M6YSxpZDp0aGlzW3IuJHVpZF19fSl9fWNsYXNzIENvcm5lciBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNvcm5lciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnZlcnRlZD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmpvaW49KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuam9pbixbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yYWRpdXM9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5yYWRpdXMpO3RoaXMuc3Ryb2tlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSk7dGhpcy50aGlja25lc3M9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS50aGlja25lc3MsIjAuNXB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJ2aXNpYmlsaXR5Iik7ZS5yYWRpdXM9KDAscy5tZWFzdXJlVG9TdHJpbmcpKCJzcXVhcmUiPT09dGhpcy5qb2luPzA6dGhpcy5yYWRpdXMpO3JldHVybiBlfX1jbGFzcyBEYXRlRWxlbWVudCBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkYXRlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tyLiRjb250ZW50XS50cmltKCk7dGhpc1tyLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBvLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZGF0ZVRpbWUiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW3IuJGNvbnRlbnRdLnRyaW0oKTt0aGlzW3IuJGNvbnRlbnRdPWU/bmV3IERhdGUoZSk6bnVsbH1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBEYXRlVGltZUVkaXQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkYXRlVGltZUVkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGlja2VyPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY29tYj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bci4kdG9IVE1MXShlKXtjb25zdCB0PSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGE9dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kZ2V0UGFyZW50XSgpLG49e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOmFbci4kdWlkXSxkYXRhSWQ6YVtyLiRkYXRhXT8uW3IuJHVpZF18fGFbci4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtpZihpc1JlcXVpcmVkKGEpKXtuLmF0dHJpYnV0ZXNbImFyaWEtcmVxdWlyZWQiXT0hMDtuLmF0dHJpYnV0ZXMucmVxdWlyZWQ9ITB9cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbbl19KX19Y2xhc3MgRGVjaW1hbCBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkZWNpbWFsIik7dGhpcy5mcmFjRGlnaXRzPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mcmFjRGlnaXRzLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWREaWdpdHM9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxlYWREaWdpdHMsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXBhcnNlRmxvYXQodGhpc1tyLiRjb250ZW50XS50cmltKCkpO3RoaXNbci4kY29udGVudF09aXNOYU4oZSk/bnVsbDplfVtyLiR0b0hUTUxdKGUpe3JldHVybiB2YWx1ZVRvSHRtbChudWxsIT09dGhpc1tyLiRjb250ZW50XT90aGlzW3IuJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBEZWZhdWx0VWkgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkZWZhdWx0VWkiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBEZXNjIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZGVzYyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBEaWdlc3RNZXRob2QgZXh0ZW5kcyBvLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkaWdlc3RNZXRob2QiLFsiIiwiU0hBMSIsIlNIQTI1NiIsIlNIQTUxMiIsIlJJUEVNRDE2MCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRGlnZXN0TWV0aG9kcyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImRpZ2VzdE1ldGhvZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5kaWdlc3RNZXRob2Q9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIERyYXcgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkcmF3IiwhMCk7dGhpcy5hbmNob3JUeXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuaD1lLmg/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sb2NhbGU9ZS5sb2NhbGV8fCIiO3RoaXMubWF4SD0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1heEgsIjBwdCIpO3RoaXMubWF4Vz0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1heFcsIjBwdCIpO3RoaXMubWluSD0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpO3RoaXMubWluVz0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnJvdGF0ZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUucm90YXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmUlOTA9PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PWUudz8oMCxjLmdldE1lYXN1cmVtZW50KShlLncpOiIiO3RoaXMueD0oMCxjLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxjLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuYXNzaXN0PW51bGw7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNhcHRpb249bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZm9udD1udWxsO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnVpPW51bGw7dGhpcy52YWx1ZT1udWxsO3RoaXMuc2V0UHJvcGVydHk9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W3IuJHNldFZhbHVlXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bci4kdG9IVE1MXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKTt0aGlzW3IuJHB1c2hQYXJhXSgpO2NvbnN0IHQ9dGhpcy53LGE9dGhpcy5oLHt3Om4saDpvLGlzQnJva2VuOmx9PSgwLHMubGF5b3V0Tm9kZSkodGhpcyxlKTtpZihuJiYiIj09PXRoaXMudyl7aWYobCYmdGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpW3IuJGlzVGhlcmVNb3JlV2lkdGhdKCkpe3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gYy5IVE1MUmVzdWx0LkZBSUxVUkV9dGhpcy53PW59byYmIiI9PT10aGlzLmgmJih0aGlzLmg9byk7c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXt0aGlzLnc9dDt0aGlzLmg9YTt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGMuSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3QgaD0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJoQWxpZ24iLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsInJvdGF0ZSIsImFuY2hvclR5cGUiLCJib3JkZXIiLCJtYXJnaW4iKTsoMCxzLnNldE1pbk1heERpbWVuc2lvbnMpKHRoaXMsaCk7aWYoaC5tYXJnaW4pe2gucGFkZGluZz1oLm1hcmdpbjtkZWxldGUgaC5tYXJnaW59Y29uc3QgdT1bInhmYURyYXciXTt0aGlzLmZvbnQmJnUucHVzaCgieGZhRm9udCIpOygwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZ1LnB1c2goInhmYVByaW50T25seSIpO2NvbnN0IGQ9e3N0eWxlOmgsaWQ6dGhpc1tyLiR1aWRdLGNsYXNzOnV9O3RoaXMubmFtZSYmKGQueGZhTmFtZT10aGlzLm5hbWUpO2NvbnN0IGY9e25hbWU6ImRpdiIsYXR0cmlidXRlczpkLGNoaWxkcmVuOltdfTthcHBseUFzc2lzdCh0aGlzLGQpO2NvbnN0IGc9KDAscy5jb21wdXRlQmJveCkodGhpcyxmLGUpLHA9dGhpcy52YWx1ZT90aGlzLnZhbHVlW3IuJHRvSFRNTF0oZSkuaHRtbDpudWxsO2lmKG51bGw9PT1wKXt0aGlzLnc9dDt0aGlzLmg9YTt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxmKSxnKX1mLmNoaWxkcmVuLnB1c2gocCk7KDAscy5zZXRQYXJhKSh0aGlzLGgscCk7dGhpcy53PXQ7dGhpcy5oPWE7dGhpc1tyLiRwb3BQYXJhXSgpO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsZiksZyl9fWNsYXNzIEVkZ2UgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJlZGdlIiwhMCk7dGhpcy5jYXA9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY2FwLFsic3F1YXJlIiwiYnV0dCIsInJvdW5kIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnN0cm9rZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5zdHJva2UsWyJzb2xpZCIsImRhc2hEb3QiLCJkYXNoRG90RG90IiwiZGFzaGVkIiwiZG90dGVkIiwiZW1ib3NzZWQiLCJldGNoZWQiLCJsb3dlcmVkIiwicmFpc2VkIl0pO3RoaXMudGhpY2tuZXNzPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudGhpY2tuZXNzLCIwLjVwdCIpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNvbG9yPW51bGw7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oKXtjb25zdCBlPSgwLHMudG9TdHlsZSkodGhpcywidmlzaWJpbGl0eSIpO09iamVjdC5hc3NpZ24oZSx7bGluZWNhcDp0aGlzLmNhcCx3aWR0aDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50aGlja25lc3MpLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvcltyLiR0b1N0eWxlXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pO2lmKCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1jbGFzcyBFbmNvZGluZyBleHRlbmRzIG8uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY29kaW5nIixbImFkYmUueDUwOS5yc2Ffc2hhMSIsImFkYmUucGtjczcuZGV0YWNoZWQiLCJhZGJlLnBrY3M3LnNoYTEiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVuY29kaW5ncyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY29kaW5ncyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVuY29kaW5nPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFbmNyeXB0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZW5jcnlwdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bnVsbH19Y2xhc3MgRW5jcnlwdERhdGEgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJlbmNyeXB0RGF0YSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUub3BlcmF0aW9uLFsiZW5jcnlwdCIsImRlY3J5cHQiXSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgRW5jcnlwdGlvbiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY3J5cHRpb24iLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgRW5jcnlwdGlvbk1ldGhvZCBleHRlbmRzIG8uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY3J5cHRpb25NZXRob2QiLFsiIiwiQUVTMjU2LUNCQyIsIlRSSVBMRURFUy1DQkMiLCJBRVMxMjgtQ0JDIiwiQUVTMTkyLUNCQyJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRW5jcnlwdGlvbk1ldGhvZHMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJlbmNyeXB0aW9uTWV0aG9kcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmVuY3J5cHRpb25NZXRob2Q9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEV2ZW50IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZXZlbnQiLCEwKTt0aGlzLmFjdGl2aXR5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjdGl2aXR5LFsiY2xpY2siLCJjaGFuZ2UiLCJkb2NDbG9zZSIsImRvY1JlYWR5IiwiZW50ZXIiLCJleGl0IiwiZnVsbCIsImluZGV4Q2hhbmdlIiwiaW5pdGlhbGl6ZSIsIm1vdXNlRG93biIsIm1vdXNlRW50ZXIiLCJtb3VzZUV4aXQiLCJtb3VzZVVwIiwicG9zdEV4ZWN1dGUiLCJwb3N0T3BlbiIsInBvc3RQcmludCIsInBvc3RTYXZlIiwicG9zdFNpZ24iLCJwb3N0U3VibWl0IiwicHJlRXhlY3V0ZSIsInByZU9wZW4iLCJwcmVQcmludCIsInByZVNhdmUiLCJwcmVTaWduIiwicHJlU3VibWl0IiwicmVhZHkiLCJ2YWxpZGF0aW9uU3RhdGUiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxpc3Rlbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5saXN0ZW4sWyJyZWZPbmx5IiwicmVmQW5kRGVzY2VuZGVudHMiXSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZW5jcnlwdERhdGE9bnVsbDt0aGlzLmV4ZWN1dGU9bnVsbDt0aGlzLnNjcmlwdD1udWxsO3RoaXMuc2lnbkRhdGE9bnVsbDt0aGlzLnN1Ym1pdD1udWxsfX1jbGFzcyBFeERhdGEgZXh0ZW5kcyBvLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZXhEYXRhIik7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWF4TGVuZ3RoPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhMZW5ndGgsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PS0xfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRpc0NEQVRBWG1sXSgpe3JldHVybiJ0ZXh0L2h0bWwiPT09dGhpcy5jb250ZW50VHlwZX1bci4kb25DaGlsZF0oZSl7aWYoInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlJiZlW3IuJG5hbWVzcGFjZUlkXT09PW4uTmFtZXNwYWNlSWRzLnhodG1sLmlkKXt0aGlzW3IuJGNvbnRlbnRdPWU7cmV0dXJuITB9aWYoInRleHQveG1sIj09PXRoaXMuY29udGVudFR5cGUpe3RoaXNbci4kY29udGVudF09ZTtyZXR1cm4hMH1yZXR1cm4hMX1bci4kdG9IVE1MXShlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XVtyLiR0b0hUTUxdKGUpOmMuSFRNTFJlc3VsdC5FTVBUWX19Y2xhc3MgRXhPYmplY3QgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJleE9iamVjdCIsITApO3RoaXMuYXJjaGl2ZT1lLmFyY2hpdmV8fCIiO3RoaXMuY2xhc3NJZD1lLmNsYXNzSWR8fCIiO3RoaXMuY29kZUJhc2U9ZS5jb2RlQmFzZXx8IiI7dGhpcy5jb2RlVHlwZT1lLmNvZGVUeXBlfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMuYm9vbGVhbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEV4Y2xHcm91cCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImV4Y2xHcm91cCIsITApO3RoaXMuYWNjZXNzPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pO3RoaXMuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIjt0aGlzLmFuY2hvclR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD8oMCxjLmdldE1lYXN1cmVtZW50KShlLmgpOiIiO3RoaXMuaEFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxheW91dD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5sYXlvdXQsWyJwb3NpdGlvbiIsImxyLXRiIiwicmwtcm93IiwicmwtdGIiLCJyb3ciLCJ0YWJsZSIsInRiIl0pO3RoaXMubWF4SD0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1heEgsIjBwdCIpO3RoaXMubWF4Vz0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1heFcsIjBwdCIpO3RoaXMubWluSD0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpO3RoaXMubWluVz0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PWUudz8oMCxjLmdldE1lYXN1cmVtZW50KShlLncpOiIiO3RoaXMueD0oMCxjLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxjLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuYXNzaXN0PW51bGw7dGhpcy5iaW5kPW51bGw7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLmNvbm5lY3Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc2V0UHJvcGVydHk9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITB9W3IuJGhhc1NldHRhYmxlVmFsdWVdKCl7cmV0dXJuITB9W3IuJHNldFZhbHVlXShlKXtmb3IoY29uc3QgdCBvZiB0aGlzLmZpZWxkLmNoaWxkcmVuKXtpZighdC52YWx1ZSl7Y29uc3QgZT1uZXcgVmFsdWUoe30pO3Rbci4kYXBwZW5kQ2hpbGRdKGUpO3QudmFsdWU9ZX10LnZhbHVlW3IuJHNldFZhbHVlXShlKX19W3IuJGlzVGhlcmVNb3JlV2lkdGhdKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJnRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT4wfHx0aGlzW3IuJGdldFBhcmVudF0oKVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpfVtyLiRpc1NwbGl0dGFibGVdKCl7Y29uc3QgZT10aGlzW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYoIWVbci4kaXNTcGxpdHRhYmxlXSgpKXJldHVybiExO2lmKHZvaWQgMCE9PXRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGUpcmV0dXJuIHRoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU7aWYoInBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe3RoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYoZS5sYXlvdXQ/LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbci4kZXh0cmFdLm51bWJlckluTGluZSlyZXR1cm4hMTt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSEwO3JldHVybiEwfVtyLiRmbHVzaEhUTUxdKCl7cmV0dXJuKDAsaS5mbHVzaEhUTUwpKHRoaXMpfVtyLiRhZGRIVE1MXShlLHQpeygwLGkuYWRkSFRNTCkodGhpcyxlLHQpfVtyLiRnZXRBdmFpbGFibGVTcGFjZV0oKXtyZXR1cm4oMCxpLmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKX1bci4kdG9IVE1MXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKTtjb25zdCB0PVtdLGE9e2lkOnRoaXNbci4kdWlkXSxjbGFzczpbXX07KDAscy5zZXRBY2Nlc3MpKHRoaXMsYS5jbGFzcyk7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKTtPYmplY3QuYXNzaWduKHRoaXNbci4kZXh0cmFdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6YSxhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IG49dGhpc1tyLiRpc1NwbGl0dGFibGVdKCk7bnx8c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRTtjb25zdCBvPW5ldyBTZXQoWyJmaWVsZCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXt0aGlzW3IuJGV4dHJhXS5jb2x1bW5XaWR0aHM9ZTt0aGlzW3IuJGV4dHJhXS5jdXJyZW50Q29sdW1uPTB9fWNvbnN0IGw9KDAscy50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxoPVsieGZhRXhjbGdyb3VwIl0sdT0oMCxzLmxheW91dENsYXNzKSh0aGlzKTt1JiZoLnB1c2godSk7KDAscy5pc1ByaW50T25seSkodGhpcykmJmgucHVzaCgieGZhUHJpbnRPbmx5Iik7YS5zdHlsZT1sO2EuY2xhc3M9aDt0aGlzLm5hbWUmJihhLnhmYU5hbWU9dGhpcy5uYW1lKTt0aGlzW3IuJHB1c2hQYXJhXSgpO2NvbnN0IGQ9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsZj1kPzI6MTtmb3IoO3RoaXNbci4kZXh0cmFdLmF0dGVtcHQ8Zjt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0Kyspe2QmJjE9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiYodGhpc1tyLiRleHRyYV0ubnVtYmVySW5MaW5lPTApO2NvbnN0IGU9dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpvLGluY2x1ZGU6ITB9KTtpZihlLnN1Y2Nlc3MpYnJlYWs7aWYoZS5pc0JyZWFrKCkpe3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gZX1pZihkJiYwPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmMD09PXRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZSYmIXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbci4kZXh0cmFdLmF0dGVtcHQ9ZjticmVha319dGhpc1tyLiRwb3BQYXJhXSgpO258fHVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYodGhpc1tyLiRleHRyYV0uYXR0ZW1wdD09PWYpe258fGRlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4gYy5IVE1MUmVzdWx0LkZBSUxVUkV9bGV0IGc9MCxwPTA7aWYodGhpcy5tYXJnaW4pe2c9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7cD10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldH1jb25zdCBtPU1hdGgubWF4KHRoaXNbci4kZXh0cmFdLndpZHRoK2csdGhpcy53fHwwKSxiPU1hdGgubWF4KHRoaXNbci4kZXh0cmFdLmhlaWdodCtwLHRoaXMuaHx8MCkseT1bdGhpcy54LHRoaXMueSxtLGJdOyIiPT09dGhpcy53JiYobC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykobSkpOyIiPT09dGhpcy5oJiYobC5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKGIpKTtjb25zdCB3PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6YSxjaGlsZHJlbjp0fTthcHBseUFzc2lzdCh0aGlzLGEpO2RlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLHcpLHkpfX1jbGFzcyBFeGVjdXRlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZXhlY3V0ZSIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMuZXhlY3V0ZVR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5ydW5BdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFeHRyYXMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJleHRyYXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXh0cmFzPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgRmllbGQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJmaWVsZCIsITApO3RoaXMuYWNjZXNzPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pO3RoaXMuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIjt0aGlzLmFuY2hvclR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD8oMCxjLmdldE1lYXN1cmVtZW50KShlLmgpOiIiO3RoaXMuaEFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0Iik7dGhpcy5taW5IPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0Iik7dGhpcy5taW5XPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpO3RoaXMucm90YXRlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiI7dGhpcy54PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0Iik7dGhpcy55PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvcm1hdD1udWxsO3RoaXMuaXRlbXM9bmV3IG8uWEZBT2JqZWN0QXJyYXkoMik7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudWk9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy52YWx1ZT1udWxsO3RoaXMuYmluZEl0ZW1zPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc2V0UHJvcGVydHk9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W3IuJGlzQmluZGFibGVdKCl7cmV0dXJuITB9W3IuJHNldFZhbHVlXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bci4kdG9IVE1MXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZighdGhpcy51aSl7dGhpcy51aT1uZXcgVWkoe30pO3RoaXMudWlbci4kZ2xvYmFsRGF0YV09dGhpc1tyLiRnbG9iYWxEYXRhXTt0aGlzW3IuJGFwcGVuZENoaWxkXSh0aGlzLnVpKTtsZXQgZTtzd2l0Y2godGhpcy5pdGVtcy5jaGlsZHJlbi5sZW5ndGgpe2Nhc2UgMDplPW5ldyBUZXh0RWRpdCh7fSk7dGhpcy51aS50ZXh0RWRpdD1lO2JyZWFrO2Nhc2UgMTplPW5ldyBDaGVja0J1dHRvbih7fSk7dGhpcy51aS5jaGVja0J1dHRvbj1lO2JyZWFrO2Nhc2UgMjplPW5ldyBDaG9pY2VMaXN0KHt9KTt0aGlzLnVpLmNob2ljZUxpc3Q9ZX10aGlzLnVpW3IuJGFwcGVuZENoaWxkXShlKX1pZighdGhpcy51aXx8ImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZXx8MD09PXRoaXMuaHx8MD09PXRoaXMudylyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO3RoaXMuY2FwdGlvbiYmZGVsZXRlIHRoaXMuY2FwdGlvbltyLiRleHRyYV07dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCB0PXRoaXMuY2FwdGlvbj90aGlzLmNhcHRpb25bci4kdG9IVE1MXShlKS5odG1sOm51bGwsYT10aGlzLncsbj10aGlzLmg7bGV0IG89MCxsPTA7aWYodGhpcy5tYXJnaW4pe289dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7bD10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldH1sZXQgdT1udWxsO2lmKCIiPT09dGhpcy53fHwiIj09PXRoaXMuaCl7bGV0IHQ9bnVsbCxhPW51bGwsbj0wLGk9MDtpZih0aGlzLnVpLmNoZWNrQnV0dG9uKW49aT10aGlzLnVpLmNoZWNrQnV0dG9uLnNpemU7ZWxzZXtjb25zdHt3OnQsaDphfT0oMCxzLmxheW91dE5vZGUpKHRoaXMsZSk7aWYobnVsbCE9PXQpe249dDtpPWF9ZWxzZSBpPSgwLGguZ2V0TWV0cmljcykodGhpcy5mb250LCEwKS5saW5lTm9HYXB9dT1nZXRCb3JkZXJEaW1zKHRoaXMudWlbci4kZ2V0RXh0cmFdKCkpO24rPXUudztpKz11Lmg7aWYodGhpcy5jYXB0aW9uKXtjb25zdHt3OnMsaDpvLGlzQnJva2VuOmx9PXRoaXMuY2FwdGlvbltyLiRnZXRFeHRyYV0oZSk7aWYobCYmdGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpW3IuJGlzVGhlcmVNb3JlV2lkdGhdKCkpe3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gYy5IVE1MUmVzdWx0LkZBSUxVUkV9dD1zO2E9bztzd2l0Y2godGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dCs9bjticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmErPWl9fWVsc2V7dD1uO2E9aX1pZih0JiYiIj09PXRoaXMudyl7dCs9bzt0aGlzLnc9TWF0aC5taW4odGhpcy5tYXhXPD0wPzEvMDp0aGlzLm1heFcsdGhpcy5taW5XKzE8dD90OnRoaXMubWluVyl9aWYoYSYmIiI9PT10aGlzLmgpe2ErPWw7dGhpcy5oPU1hdGgubWluKHRoaXMubWF4SDw9MD8xLzA6dGhpcy5tYXhILHRoaXMubWluSCsxPGE/YTp0aGlzLm1pbkgpfX10aGlzW3IuJHBvcFBhcmFdKCk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKTtzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpe3RoaXMudz1hO3RoaXMuaD1uO3RoaXNbci4kcG9wUGFyYV0oKTtyZXR1cm4gYy5IVE1MUmVzdWx0LkZBSUxVUkV9dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtjb25zdCBkPSgwLHMudG9TdHlsZSkodGhpcywiZm9udCIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInJvdGF0ZSIsImFuY2hvclR5cGUiLCJwcmVzZW5jZSIsIm1hcmdpbiIsImhBbGlnbiIpOygwLHMuc2V0TWluTWF4RGltZW5zaW9ucykodGhpcyxkKTtjb25zdCBmPVsieGZhRmllbGQiXTt0aGlzLmZvbnQmJmYucHVzaCgieGZhRm9udCIpOygwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZmLnB1c2goInhmYVByaW50T25seSIpO2NvbnN0IGc9e3N0eWxlOmQsaWQ6dGhpc1tyLiR1aWRdLGNsYXNzOmZ9O2lmKGQubWFyZ2luKXtkLnBhZGRpbmc9ZC5tYXJnaW47ZGVsZXRlIGQubWFyZ2lufSgwLHMuc2V0QWNjZXNzKSh0aGlzLGYpO3RoaXMubmFtZSYmKGcueGZhTmFtZT10aGlzLm5hbWUpO2NvbnN0IHA9W10sbT17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmcsY2hpbGRyZW46cH07YXBwbHlBc3Npc3QodGhpcyxnKTtjb25zdCBiPXRoaXMuYm9yZGVyP3RoaXMuYm9yZGVyW3IuJHRvU3R5bGVdKCk6bnVsbCx5PSgwLHMuY29tcHV0ZUJib3gpKHRoaXMsbSxlKSx3PXRoaXMudWlbci4kdG9IVE1MXSgpLmh0bWw7aWYoIXcpe09iamVjdC5hc3NpZ24oZCxiKTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLG0pLHkpfXRoaXNbci4kdGFiSW5kZXhdJiYody5jaGlsZHJlbj8uWzBdP3cuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50YWJpbmRleD10aGlzW3IuJHRhYkluZGV4XTp3LmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tyLiR0YWJJbmRleF0pO3cuYXR0cmlidXRlcy5zdHlsZXx8KHcuYXR0cmlidXRlcy5zdHlsZT1PYmplY3QuY3JlYXRlKG51bGwpKTtsZXQgUz1udWxsO2lmKHRoaXMudWkuYnV0dG9uKXsxPT09dy5jaGlsZHJlbi5sZW5ndGgmJihbU109dy5jaGlsZHJlbi5zcGxpY2UoMCwxKSk7T2JqZWN0LmFzc2lnbih3LmF0dHJpYnV0ZXMuc3R5bGUsYil9ZWxzZSBPYmplY3QuYXNzaWduKGQsYik7cC5wdXNoKHcpO2lmKHRoaXMudmFsdWUpaWYodGhpcy51aS5pbWFnZUVkaXQpdy5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbci4kdG9IVE1MXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXtsZXQgZT0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSllPXRoaXMudmFsdWUuZXhEYXRhW3IuJHRleHRdKCk7ZWxzZSBpZih0aGlzLnZhbHVlLnRleHQpZT10aGlzLnZhbHVlLnRleHRbci4kZ2V0RXh0cmFdKCk7ZWxzZXtjb25zdCB0PXRoaXMudmFsdWVbci4kdG9IVE1MXSgpLmh0bWw7bnVsbCE9PXQmJihlPXQuY2hpbGRyZW5bMF0udmFsdWUpfXRoaXMudWkudGV4dEVkaXQmJnRoaXMudmFsdWUudGV4dD8ubWF4Q2hhcnMmJih3LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMubWF4TGVuZ3RoPXRoaXMudmFsdWUudGV4dC5tYXhDaGFycyk7aWYoZSl7aWYodGhpcy51aS5udW1lcmljRWRpdCl7ZT1wYXJzZUZsb2F0KGUpO2U9aXNOYU4oZSk/IiI6ZS50b1N0cmluZygpfSJ0ZXh0YXJlYSI9PT13LmNoaWxkcmVuWzBdLm5hbWU/dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRleHRDb250ZW50PWU6dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlPWV9fWlmKCF0aGlzLnVpLmltYWdlRWRpdCYmdy5jaGlsZHJlbj8uWzBdJiZ0aGlzLmgpe3U9dXx8Z2V0Qm9yZGVyRGltcyh0aGlzLnVpW3IuJGdldEV4dHJhXSgpKTtsZXQgdD0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7dD10aGlzLmNhcHRpb24ucmVzZXJ2ZTt0PD0wJiYodD10aGlzLmNhcHRpb25bci4kZ2V0RXh0cmFdKGUpLmgpO2NvbnN0IGE9dGhpcy5oLXQtbC11Lmg7dy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykoYSl9ZWxzZSB3LmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PSIxMDAlIn1TJiZ3LmNoaWxkcmVuLnB1c2goUyk7aWYoIXQpe3cuYXR0cmlidXRlcy5jbGFzcyYmdy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTt0aGlzLnc9YTt0aGlzLmg9bjtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLG0pLHkpfWlmKHRoaXMudWkuYnV0dG9uKXtkLnBhZGRpbmcmJmRlbGV0ZSBkLnBhZGRpbmc7ImRpdiI9PT10Lm5hbWUmJih0Lm5hbWU9InNwYW4iKTt3LmNoaWxkcmVuLnB1c2godCk7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKG0seSl9dGhpcy51aS5jaGVja0J1dHRvbiYmKHQuYXR0cmlidXRlcy5jbGFzc1swXT0ieGZhQ2FwdGlvbkZvckNoZWNrQnV0dG9uIik7dy5hdHRyaWJ1dGVzLmNsYXNzfHwody5hdHRyaWJ1dGVzLmNsYXNzPVtdKTt3LmNoaWxkcmVuLnNwbGljZSgwLDAsdCk7c3dpdGNoKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJpbmxpbmUiOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0Iik7YnJlYWs7Y2FzZSJyaWdodCI6dy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVJpZ2h0Iik7YnJlYWs7Y2FzZSJ0b3AiOncuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFUb3AiKTticmVhaztjYXNlImJvdHRvbSI6dy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUJvdHRvbSIpfXRoaXMudz1hO3RoaXMuaD1uO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsbSkseSl9fXQuRmllbGQ9RmllbGQ7Y2xhc3MgRmlsbCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImZpbGwiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubGluZWFyPW51bGw7dGhpcy5wYXR0ZXJuPW51bGw7dGhpcy5yYWRpYWw9bnVsbDt0aGlzLnNvbGlkPW51bGw7dGhpcy5zdGlwcGxlPW51bGx9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKSx0PWVbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IG49ImNvbG9yIixpPW47aWYoZSBpbnN0YW5jZW9mIEJvcmRlcil7bj0iYmFja2dyb3VuZC1jb2xvciI7aT0iYmFja2dyb3VuZCI7dCBpbnN0YW5jZW9mIFVpJiYoYS5iYWNrZ3JvdW5kQ29sb3I9IndoaXRlIil9aWYoZSBpbnN0YW5jZW9mIFJlY3RhbmdsZXx8ZSBpbnN0YW5jZW9mIEFyYyl7bj1pPSJmaWxsIjthLmZpbGw9IndoaXRlIn1mb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYoImV4dHJhcyI9PT1lfHwiY29sb3IiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYoISh0IGluc3RhbmNlb2Ygby5YRkFPYmplY3QpKWNvbnRpbnVlO2NvbnN0IHM9dFtyLiR0b1N0eWxlXSh0aGlzLmNvbG9yKTtzJiYoYVtzLnN0YXJ0c1dpdGgoIiMiKT9uOmldPXMpO3JldHVybiBhfWlmKHRoaXMuY29sb3I/LnZhbHVlKXtjb25zdCBlPXRoaXMuY29sb3Jbci4kdG9TdHlsZV0oKTthW2Uuc3RhcnRzV2l0aCgiIyIpP246aV09ZX1yZXR1cm4gYX19Y2xhc3MgRmlsdGVyIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZmlsdGVyIiwhMCk7dGhpcy5hZGRSZXZvY2F0aW9uSW5mbz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hZGRSZXZvY2F0aW9uSW5mbyxbIiIsInJlcXVpcmVkIiwib3B0aW9uYWwiLCJub25lIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmVyc2lvbj0oMCxjLmdldEludGVnZXIpKHtkYXRhOnRoaXMudmVyc2lvbixkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0xJiZlPD01fSk7dGhpcy5hcHBlYXJhbmNlRmlsdGVyPW51bGw7dGhpcy5jZXJ0aWZpY2F0ZXM9bnVsbDt0aGlzLmRpZ2VzdE1ldGhvZHM9bnVsbDt0aGlzLmVuY29kaW5ncz1udWxsO3RoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bnVsbDt0aGlzLmhhbmRsZXI9bnVsbDt0aGlzLmxvY2tEb2N1bWVudD1udWxsO3RoaXMubWRwPW51bGw7dGhpcy5yZWFzb25zPW51bGw7dGhpcy50aW1lU3RhbXA9bnVsbH19Y2xhc3MgRmxvYXQgZXh0ZW5kcyBvLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZmxvYXQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUZsb2F0KHRoaXNbci4kY29udGVudF0udHJpbSgpKTt0aGlzW3IuJGNvbnRlbnRdPWlzTmFOKGUpP251bGw6ZX1bci4kdG9IVE1MXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbci4kY29udGVudF0/dGhpc1tyLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgRm9udCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImZvbnQiLCEwKTt0aGlzLmJhc2VsaW5lU2hpZnQ9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5iYXNlbGluZVNoaWZ0KTt0aGlzLmZvbnRIb3Jpem9udGFsU2NhbGU9KDAsYy5nZXRGbG9hdCkoe2RhdGE6ZS5mb250SG9yaXpvbnRhbFNjYWxlLGRlZmF1bHRWYWx1ZToxMDAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZm9udFZlcnRpY2FsU2NhbGU9KDAsYy5nZXRGbG9hdCkoe2RhdGE6ZS5mb250VmVydGljYWxTY2FsZSxkZWZhdWx0VmFsdWU6MTAwLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMua2VybmluZ01vZGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUua2VybmluZ01vZGUsWyJub25lIiwicGFpciJdKTt0aGlzLmxldHRlclNwYWNpbmc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5sZXR0ZXJTcGFjaW5nLCIwIik7dGhpcy5saW5lVGhyb3VnaD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubGluZVRocm91Z2gsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy5saW5lVGhyb3VnaFBlcmlvZD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5saW5lVGhyb3VnaFBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy5vdmVybGluZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUub3ZlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy5vdmVybGluZVBlcmlvZD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vdmVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy5wb3N0dXJlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnBvc3R1cmUsWyJub3JtYWwiLCJpdGFsaWMiXSk7dGhpcy5zaXplPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuc2l6ZSwiMTBwdCIpO3RoaXMudHlwZWZhY2U9ZS50eXBlZmFjZXx8IkNvdXJpZXIiO3RoaXMudW5kZXJsaW5lPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS51bmRlcmxpbmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV8fDI9PT1lfSk7dGhpcy51bmRlcmxpbmVQZXJpb2Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudW5kZXJsaW5lUGVyaW9kLFsiYWxsIiwid29yZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53ZWlnaHQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUud2VpZ2h0LFsibm9ybWFsIiwiYm9sZCJdKTt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsbD1udWxsfVtyLiRjbGVhbl0oZSl7c3VwZXJbci4kY2xlYW5dKGUpO3RoaXNbci4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcy5hZGQodGhpcy50eXBlZmFjZSl9W3IuJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsImZpbGwiKSx0PWUuY29sb3I7aWYodClpZigiIzAwMDAwMCI9PT10KWRlbGV0ZSBlLmNvbG9yO2Vsc2UgaWYoIXQuc3RhcnRzV2l0aCgiIyIpKXtlLmJhY2tncm91bmQ9dDtlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IjtlLmNvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5iYXNlbGluZVNoaWZ0JiYoZS52ZXJ0aWNhbEFsaWduPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJhc2VsaW5lU2hpZnQpKTtlLmZvbnRLZXJuaW5nPSJub25lIj09PXRoaXMua2VybmluZ01vZGU/Im5vbmUiOiJub3JtYWwiO2UubGV0dGVyU3BhY2luZz0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5sZXR0ZXJTcGFjaW5nKTtpZigwIT09dGhpcy5saW5lVGhyb3VnaCl7ZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIjsyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9aWYoMCE9PXRoaXMub3ZlcmxpbmUpe2UudGV4dERlY29yYXRpb249Im92ZXJsaW5lIjsyPT09dGhpcy5vdmVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlO2UuZm9udFNpemU9KDAscy5tZWFzdXJlVG9TdHJpbmcpKC45OSp0aGlzLnNpemUpOygwLHMuc2V0Rm9udEZhbWlseSkodGhpcyx0aGlzLHRoaXNbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixlKTtpZigwIT09dGhpcy51bmRlcmxpbmUpe2UudGV4dERlY29yYXRpb249InVuZGVybGluZSI7Mj09PXRoaXMudW5kZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKX1lLmZvbnRXZWlnaHQ9dGhpcy53ZWlnaHQ7cmV0dXJuIGV9fWNsYXNzIEZvcm1hdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImZvcm1hdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJoYW5kbGVyIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBIeXBoZW5hdGlvbiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImh5cGhlbmF0aW9uIik7dGhpcy5leGNsdWRlQWxsQ2Fwcz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUFsbENhcHMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmV4Y2x1ZGVJbml0aWFsQ2FwPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlSW5pdGlhbENhcCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaHlwaGVuYXRlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHVzaENoYXJhY3RlckNvdW50PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wdXNoQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjMsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMucmVtYWluQ2hhcmFjdGVyQ291bnQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJlbWFpbkNoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTozLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53b3JkQ2hhcmFjdGVyQ291bnQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIEltYWdlIGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaW1hZ2UiKTt0aGlzLmFzcGVjdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSk7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiR0b0hUTUxdKCl7aWYodGhpcy5jb250ZW50VHlwZSYmIW0uaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWTtsZXQgZT10aGlzW3IuJGdsb2JhbERhdGFdLmltYWdlcyYmdGhpc1tyLiRnbG9iYWxEYXRhXS5pbWFnZXMuZ2V0KHRoaXMuaHJlZik7aWYoIWUmJih0aGlzLmhyZWZ8fCF0aGlzW3IuJGNvbnRlbnRdKSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO2V8fCJiYXNlNjQiIT09dGhpcy50cmFuc2ZlckVuY29kaW5nfHwoZT0oMCxsLnN0cmluZ1RvQnl0ZXMpKGF0b2IodGhpc1tyLiRjb250ZW50XSkpKTtpZighZSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO2lmKCF0aGlzLmNvbnRlbnRUeXBlKXtmb3IoY29uc3RbdCxhXW9mIGIpaWYoZS5sZW5ndGg+dC5sZW5ndGgmJnQuZXZlcnkoKCh0LGEpPT50PT09ZVthXSkpKXt0aGlzLmNvbnRlbnRUeXBlPWE7YnJlYWt9aWYoIXRoaXMuY29udGVudFR5cGUpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWX1jb25zdCB0PW5ldyBCbG9iKFtlXSx7dHlwZTp0aGlzLmNvbnRlbnRUeXBlfSk7bGV0IGE7c3dpdGNoKHRoaXMuYXNwZWN0KXtjYXNlImZpdCI6Y2FzZSJhY3R1YWwiOmJyZWFrO2Nhc2UiaGVpZ2h0IjphPXtoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uibm9uZSI6YT17d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn07YnJlYWs7Y2FzZSJ3aWR0aCI6YT17d2lkdGg6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9fWNvbnN0IG49dGhpc1tyLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJpbWciLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhSW1hZ2UiXSxzdHlsZTphLHNyYzpVUkwuY3JlYXRlT2JqZWN0VVJMKHQpLGFsdDpuP2FyaWFMYWJlbChuW3IuJGdldFBhcmVudF0oKSk6bnVsbH19KX19Y2xhc3MgSW1hZ2VFZGl0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaW1hZ2VFZGl0IiwhMCk7dGhpcy5kYXRhPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGEsWyJsaW5rIiwiZW1iZWQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9jLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6Yy5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBJbnRlZ2VyIGV4dGVuZHMgby5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImludGVnZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZmluYWxpemVdKCl7Y29uc3QgZT1wYXJzZUludCh0aGlzW3IuJGNvbnRlbnRdLnRyaW0oKSwxMCk7dGhpc1tyLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9W3IuJHRvSFRNTF0oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKG51bGwhPT10aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIElzc3VlcnMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJpc3N1ZXJzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY2VydGlmaWNhdGU9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEl0ZW1zIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaXRlbXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMuc2F2ZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuc2F2ZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kdG9IVE1MXSgpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpc1tyLiRnZXRDaGlsZHJlbl0oKSllLnB1c2godFtyLiR0ZXh0XSgpKTtyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9fXQuSXRlbXM9SXRlbXM7Y2xhc3MgS2VlcCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImtlZXAiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO2NvbnN0IHQ9WyJub25lIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdO3RoaXMuaW50YWN0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmludGFjdCx0KTt0aGlzLm5leHQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubmV4dCx0KTt0aGlzLnByZXZpb3VzPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXZpb3VzLHQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBLZXlVc2FnZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImtleVVzYWdlIik7Y29uc3QgdD1bIiIsInllcyIsIm5vIl07dGhpcy5jcmxTaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmNybFNpZ24sdCk7dGhpcy5kYXRhRW5jaXBoZXJtZW50PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGFFbmNpcGhlcm1lbnQsdCk7dGhpcy5kZWNpcGhlck9ubHk9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZGVjaXBoZXJPbmx5LHQpO3RoaXMuZGlnaXRhbFNpZ25hdHVyZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5kaWdpdGFsU2lnbmF0dXJlLHQpO3RoaXMuZW5jaXBoZXJPbmx5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmVuY2lwaGVyT25seSx0KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMua2V5QWdyZWVtZW50PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmtleUFncmVlbWVudCx0KTt0aGlzLmtleUNlcnRTaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmtleUNlcnRTaWduLHQpO3RoaXMua2V5RW5jaXBoZXJtZW50PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmtleUVuY2lwaGVybWVudCx0KTt0aGlzLm5vblJlcHVkaWF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm5vblJlcHVkaWF0aW9uLHQpO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIExpbmUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJsaW5lIiwhMCk7dGhpcy5oYW5kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5zbG9wZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lZGdlPW51bGx9W3IuJHRvSFRNTF0oKXtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSx0PXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLGE9dFtyLiR0b1N0eWxlXSgpLG49T2JqZWN0LmNyZWF0ZShudWxsKSxpPSJ2aXNpYmxlIj09PXQucHJlc2VuY2U/dC50aGlja25lc3M6MDtuLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKShpKTtuLnN0cm9rZT1hLmNvbG9yO2xldCBvLGwsaCx1LGQ9IjEwMCUiLGY9IjEwMCUiO2lmKGUudzw9aSl7W28sbCxoLHVdPVsiNTAlIiwwLCI1MCUiLCIxMDAlIl07ZD1uLnN0cm9rZVdpZHRofWVsc2UgaWYoZS5oPD1pKXtbbyxsLGgsdV09WzAsIjUwJSIsIjEwMCUiLCI1MCUiXTtmPW4uc3Ryb2tlV2lkdGh9ZWxzZSJcXCI9PT10aGlzLnNsb3BlP1tvLGwsaCx1XT1bMCwwLCIxMDAlIiwiMTAwJSJdOltvLGwsaCx1XT1bMCwiMTAwJSIsIjEwMCUiLDBdO2NvbnN0IHA9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJsaW5lIixhdHRyaWJ1dGVzOnt4bWxuczpnLHgxOm8seTE6bCx4MjpoLHkyOnUsc3R5bGU6bn19XSxhdHRyaWJ1dGVzOnt4bWxuczpnLHdpZHRoOmQsaGVpZ2h0OmYsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn19fTtpZihoYXNNYXJnaW4oZSkpcmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W3BdfSk7cC5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHApfX1jbGFzcyBMaW5lYXIgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJsaW5lYXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsidG9SaWdodCIsInRvQm90dG9tIiwidG9MZWZ0IiwidG9Ub3AiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtlPWU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjtyZXR1cm5gbGluZWFyLWdyYWRpZW50KCR7dGhpcy50eXBlLnJlcGxhY2UoLyhbUkJMVF0pLywiICQxIikudG9Mb3dlckNhc2UoKX0sICR7ZX0sICR7dGhpcy5jb2xvcj90aGlzLmNvbG9yW3IuJHRvU3R5bGVdKCk6IiMwMDAwMDAifSlgfX1jbGFzcyBMb2NrRG9jdW1lbnQgZXh0ZW5kcyBvLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibG9ja0RvY3VtZW50Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXt0aGlzW3IuJGNvbnRlbnRdPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKSh0aGlzW3IuJGNvbnRlbnRdLFsiYXV0byIsIjAiLCIxIl0pfX1jbGFzcyBNYW5pZmVzdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm1hbmlmZXN0IiwhMCk7dGhpcy5hY3Rpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWN0aW9uLFsiaW5jbHVkZSIsImFsbCIsImV4Y2x1ZGUiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLnJlZj1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWFyZ2luIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibWFyZ2luIiwhMCk7dGhpcy5ib3R0b21JbnNldD0oMCxjLmdldE1lYXN1cmVtZW50KShlLmJvdHRvbUluc2V0LCIwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlZnRJbnNldD0oMCxjLmdldE1lYXN1cmVtZW50KShlLmxlZnRJbnNldCwiMCIpO3RoaXMucmlnaHRJbnNldD0oMCxjLmdldE1lYXN1cmVtZW50KShlLnJpZ2h0SW5zZXQsIjAiKTt0aGlzLnRvcEluc2V0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudG9wSW5zZXQsIjAiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oKXtyZXR1cm57bWFyZ2luOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRvcEluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmlnaHRJbnNldCkrIiAiKygwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJvdHRvbUluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGVmdEluc2V0KX19fWNsYXNzIE1kcCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm1kcCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wZXJtaXNzaW9ucz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUucGVybWlzc2lvbnMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+MT09PWV8fDM9PT1lfSk7dGhpcy5zaWduYXR1cmVUeXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnNpZ25hdHVyZVR5cGUsWyJmaWxsZXIiLCJhdXRob3IiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBNZWRpdW0gZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJtZWRpdW0iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW1hZ2luZ0JCb3g9KDAsYy5nZXRCQm94KShlLmltYWdpbmdCQm94KTt0aGlzLmxvbmc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5sb25nKTt0aGlzLm9yaWVudGF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm9yaWVudGF0aW9uLFsicG9ydHJhaXQiLCJsYW5kc2NhcGUiXSk7dGhpcy5zaG9ydD0oMCxjLmdldE1lYXN1cmVtZW50KShlLnNob3J0KTt0aGlzLnN0b2NrPWUuc3RvY2t8fCIiO3RoaXMudHJheUluPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlJbixbImF1dG8iLCJkZWxlZ2F0ZSIsInBhZ2VGcm9udCJdKTt0aGlzLnRyYXlPdXQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHJheU91dCxbImF1dG8iLCJkZWxlZ2F0ZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJtZXNzYWdlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBOdW1lcmljRWRpdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm51bWVyaWNFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKSxhPXRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldFBhcmVudF0oKSxuPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDphW3IuJHVpZF0sZGF0YUlkOmFbci4kZGF0YV0/LltyLiR1aWRdfHxhW3IuJHVpZF0sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChhKSl7bi5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7bi5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W25dfSl9fWNsYXNzIE9jY3VyIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwib2NjdXIiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW5pdGlhbD0iIiE9PWUuaW5pdGlhbD8oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuaW5pdGlhbCxkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+ITB9KToiIjt0aGlzLm1heD0iIiE9PWUubWF4PygwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXgsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KToiIjt0aGlzLm1pbj0iIiE9PWUubWluPygwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5taW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KToiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kY2xlYW5dKCl7Y29uc3QgZT10aGlzW3IuJGdldFBhcmVudF0oKSx0PXRoaXMubWluOyIiPT09dGhpcy5taW4mJih0aGlzLm1pbj1lIGluc3RhbmNlb2YgUGFnZUFyZWF8fGUgaW5zdGFuY2VvZiBQYWdlU2V0PzA6MSk7IiI9PT10aGlzLm1heCYmKHRoaXMubWF4PSIiPT09dD9lIGluc3RhbmNlb2YgUGFnZUFyZWF8fGUgaW5zdGFuY2VvZiBQYWdlU2V0Py0xOjE6dGhpcy5taW4pOy0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pOyIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBUZW1wbGF0ZT8xOnRoaXMubWluKX19Y2xhc3MgT2lkIGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwib2lkIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE9pZHMgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJvaWRzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMub2lkPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBPdmVyZmxvdyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm92ZXJmbG93Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kZ2V0RXh0cmFdKCl7aWYoIXRoaXNbci4kZXh0cmFdKXtjb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpLHQ9dGhpc1tyLiRnZXRUZW1wbGF0ZVJvb3RdKCksYT10W3IuJHNlYXJjaE5vZGVdKHRoaXMudGFyZ2V0LGUpLG49dFtyLiRzZWFyY2hOb2RlXSh0aGlzLmxlYWRlcixlKSxpPXRbci4kc2VhcmNoTm9kZV0odGhpcy50cmFpbGVyLGUpO3RoaXNbci4kZXh0cmFdPXt0YXJnZXQ6YT8uWzBdfHxudWxsLGxlYWRlcjpuPy5bMF18fG51bGwsdHJhaWxlcjppPy5bMF18fG51bGwsYWRkTGVhZGVyOiExLGFkZFRyYWlsZXI6ITF9fXJldHVybiB0aGlzW3IuJGV4dHJhXX19Y2xhc3MgUGFnZUFyZWEgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJwYWdlQXJlYSIsITApO3RoaXMuYmxhbmtPck5vdEJsYW5rPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmluaXRpYWxOdW1iZXI9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLm51bWJlcmVkPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJlZCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pO3RoaXMub2RkT3JFdmVuPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm9kZE9yRXZlbixbImFueSIsImV2ZW4iLCJvZGQiXSk7dGhpcy5wYWdlUG9zaXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucGFnZVBvc2l0aW9uLFsiYW55IiwiZmlyc3QiLCJsYXN0Iiwib25seSIsInJlc3QiXSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1lZGl1bT1udWxsO3RoaXMub2NjdXI9bnVsbDt0aGlzLmFyZWE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jb250ZW50QXJlYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leGNsR3JvdXA9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IG8uWEZBT2JqZWN0QXJyYXl9W3IuJGlzVXNhYmxlXSgpe2lmKCF0aGlzW3IuJGV4dHJhXSl7dGhpc1tyLiRleHRyYV09e251bWJlck9mVXNlOjB9O3JldHVybiEwfXJldHVybiF0aGlzLm9jY3VyfHwtMT09PXRoaXMub2NjdXIubWF4fHx0aGlzW3IuJGV4dHJhXS5udW1iZXJPZlVzZTx0aGlzLm9jY3VyLm1heH1bci4kY2xlYW5QYWdlXSgpe2RlbGV0ZSB0aGlzW3IuJGV4dHJhXX1bci4kZ2V0TmV4dFBhZ2VdKCl7dGhpc1tyLiRleHRyYV18fCh0aGlzW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MH0pO2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCk7aWYoIm9yZGVyZWRPY2N1cnJlbmNlIj09PWUucmVsYXRpb24mJnRoaXNbci4kaXNVc2FibGVdKCkpe3RoaXNbci4kZXh0cmFdLm51bWJlck9mVXNlKz0xO3JldHVybiB0aGlzfXJldHVybiBlW3IuJGdldE5leHRQYWdlXSgpfVtyLiRnZXRBdmFpbGFibGVTcGFjZV0oKXtyZXR1cm4gdGhpc1tyLiRleHRyYV0uc3BhY2V8fHt3aWR0aDowLGhlaWdodDowfX1bci4kdG9IVE1MXSgpe3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09e251bWJlck9mVXNlOjF9KTtjb25zdCBlPVtdO3RoaXNbci4kZXh0cmFdLmNoaWxkcmVuPWU7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7dC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0uc2hvcnQpO3QuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5sb25nKTt0aGlzW3IuJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9O2lmKCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe2NvbnN0IGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0O3QuaGVpZ2h0PWU7dGhpc1tyLiRleHRyYV0uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLmxvbmcsaGVpZ2h0OnRoaXMubWVkaXVtLnNob3J0fX19ZWxzZSgwLGwud2FybikoIlhGQSAtIE5vIG1lZGl1bSBzcGVjaWZpZWQgaW4gcGFnZUFyZWE6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3RoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZmllbGQiLCJzdWJmb3JtIl0pLGluY2x1ZGU6ITB9KTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJjb250ZW50QXJlYSJdKSxpbmNsdWRlOiEwfSk7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOmUsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFQYWdlIl0saWQ6dGhpc1tyLiR1aWRdLHN0eWxlOnQseGZhTmFtZTp0aGlzLm5hbWV9fSl9fWNsYXNzIFBhZ2VTZXQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJwYWdlU2V0IiwhMCk7dGhpcy5kdXBsZXhJbXBvc2l0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmR1cGxleEltcG9zaXRpb24sWyJsb25nRWRnZSIsInNob3J0RWRnZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsYXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucmVsYXRpb24sWyJvcmRlcmVkT2NjdXJyZW5jZSIsImR1cGxleFBhZ2luYXRlZCIsInNpbXBsZXhQYWdpbmF0ZWQiXSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5wYWdlQXJlYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnBhZ2VTZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W3IuJGNsZWFuUGFnZV0oKXtmb3IoY29uc3QgZSBvZiB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuKWVbci4kY2xlYW5QYWdlXSgpO2Zvcihjb25zdCBlIG9mIHRoaXMucGFnZVNldC5jaGlsZHJlbillW3IuJGNsZWFuUGFnZV0oKX1bci4kaXNVc2FibGVdKCl7cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbci4kZXh0cmFdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fVtyLiRnZXROZXh0UGFnZV0oKXt0aGlzW3IuJGV4dHJhXXx8KHRoaXNbci4kZXh0cmFdPXtudW1iZXJPZlVzZToxLHBhZ2VJbmRleDotMSxwYWdlU2V0SW5kZXg6LTF9KTtpZigib3JkZXJlZE9jY3VycmVuY2UiPT09dGhpcy5yZWxhdGlvbil7aWYodGhpc1tyLiRleHRyYV0ucGFnZUluZGV4KzE8dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5sZW5ndGgpe3RoaXNbci4kZXh0cmFdLnBhZ2VJbmRleCs9MTtyZXR1cm4gdGhpcy5wYWdlQXJlYS5jaGlsZHJlblt0aGlzW3IuJGV4dHJhXS5wYWdlSW5kZXhdW3IuJGdldE5leHRQYWdlXSgpfWlmKHRoaXNbci4kZXh0cmFdLnBhZ2VTZXRJbmRleCsxPHRoaXMucGFnZVNldC5jaGlsZHJlbi5sZW5ndGgpe3RoaXNbci4kZXh0cmFdLnBhZ2VTZXRJbmRleCs9MTtyZXR1cm4gdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbci4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bci4kZ2V0TmV4dFBhZ2VdKCl9aWYodGhpc1tyLiRpc1VzYWJsZV0oKSl7dGhpc1tyLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE7dGhpc1tyLiRleHRyYV0ucGFnZUluZGV4PS0xO3RoaXNbci4kZXh0cmFdLnBhZ2VTZXRJbmRleD0tMTtyZXR1cm4gdGhpc1tyLiRnZXROZXh0UGFnZV0oKX1jb25zdCBlPXRoaXNbci4kZ2V0UGFyZW50XSgpO2lmKGUgaW5zdGFuY2VvZiBQYWdlU2V0KXJldHVybiBlW3IuJGdldE5leHRQYWdlXSgpO3RoaXNbci4kY2xlYW5QYWdlXSgpO3JldHVybiB0aGlzW3IuJGdldE5leHRQYWdlXSgpfWNvbnN0IGU9dGhpc1tyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLnBhZ2VOdW1iZXIsdD1lJTI9PTA/ImV2ZW4iOiJvZGQiLGE9MD09PWU/ImZpcnN0IjoicmVzdCI7bGV0IG49dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT5lLm9kZE9yRXZlbj09PXQmJmUucGFnZVBvc2l0aW9uPT09YSkpO2lmKG4pcmV0dXJuIG47bj10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoKGU9PiJhbnkiPT09ZS5vZGRPckV2ZW4mJmUucGFnZVBvc2l0aW9uPT09YSkpO2lmKG4pcmV0dXJuIG47bj10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoKGU9PiJhbnkiPT09ZS5vZGRPckV2ZW4mJiJhbnkiPT09ZS5wYWdlUG9zaXRpb24pKTtyZXR1cm4gbnx8dGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXX19Y2xhc3MgUGFyYSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInBhcmEiLCEwKTt0aGlzLmhBbGlnbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saW5lSGVpZ2h0PWUubGluZUhlaWdodD8oMCxjLmdldE1lYXN1cmVtZW50KShlLmxpbmVIZWlnaHQsIjBwdCIpOiIiO3RoaXMubWFyZ2luTGVmdD1lLm1hcmdpbkxlZnQ/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXJnaW5MZWZ0LCIwcHQiKToiIjt0aGlzLm1hcmdpblJpZ2h0PWUubWFyZ2luUmlnaHQ/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXJnaW5SaWdodCwiMHB0Iik6IiI7dGhpcy5vcnBoYW5zPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vcnBoYW5zLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnByZXNlcnZlPWUucHJlc2VydmV8fCIiO3RoaXMucmFkaXhPZmZzZXQ9ZS5yYWRpeE9mZnNldD8oMCxjLmdldE1lYXN1cmVtZW50KShlLnJhZGl4T2Zmc2V0LCIwcHQiKToiIjt0aGlzLnNwYWNlQWJvdmU9ZS5zcGFjZUFib3ZlPygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuc3BhY2VBYm92ZSwiMHB0Iik6IiI7dGhpcy5zcGFjZUJlbG93PWUuc3BhY2VCZWxvdz8oMCxjLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQmVsb3csIjBwdCIpOiIiO3RoaXMudGFiRGVmYXVsdD1lLnRhYkRlZmF1bHQ/KDAsYy5nZXRNZWFzdXJlbWVudCkodGhpcy50YWJEZWZhdWx0KToiIjt0aGlzLnRhYlN0b3BzPShlLnRhYlN0b3BzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKChlLHQpPT50JTI9PTE/KDAsYy5nZXRNZWFzdXJlbWVudCkoZSk6ZSkpO3RoaXMudGV4dEluZGVudD1lLnRleHRJbmRlbnQ/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHQiKToiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy52QWxpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudkFsaWduLFsidG9wIiwiYm90dG9tIiwibWlkZGxlIl0pO3RoaXMud2lkb3dzPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS53aWRvd3MsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuaHlwaGVuYXRpb249bnVsbH1bci4kdG9TdHlsZV0oKXtjb25zdCBlPSgwLHMudG9TdHlsZSkodGhpcywiaEFsaWduIik7IiIhPT10aGlzLm1hcmdpbkxlZnQmJihlLnBhZGRpbmdMZWZ0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1hcmdpbkxlZnQpKTsiIiE9PXRoaXMubWFyZ2luUmlnaHQmJihlLnBhZGRpbmdpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1hcmdpblJpZ2h0KSk7IiIhPT10aGlzLnNwYWNlQWJvdmUmJihlLnBhZGRpbmdUb3A9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VBYm92ZSkpOyIiIT09dGhpcy5zcGFjZUJlbG93JiYoZS5wYWRkaW5nQm90dG9tPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNwYWNlQmVsb3cpKTtpZigiIiE9PXRoaXMudGV4dEluZGVudCl7ZS50ZXh0SW5kZW50PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRleHRJbmRlbnQpOygwLHMuZml4VGV4dEluZGVudCkoZSl9dGhpcy5saW5lSGVpZ2h0PjAmJihlLmxpbmVIZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGluZUhlaWdodCkpOyIiIT09dGhpcy50YWJEZWZhdWx0JiYoZS50YWJTaXplPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRhYkRlZmF1bHQpKTt0aGlzLnRhYlN0b3BzLmxlbmd0aDt0aGlzLmh5cGhlbmF0YXRpb24mJk9iamVjdC5hc3NpZ24oZSx0aGlzLmh5cGhlbmF0YXRpb25bci4kdG9TdHlsZV0oKSk7cmV0dXJuIGV9fWNsYXNzIFBhc3N3b3JkRWRpdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInBhc3N3b3JkRWRpdCIsITApO3RoaXMuaFNjcm9sbFBvbGljeT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wYXNzd29yZENoYXI9ZS5wYXNzd29yZENoYXJ8fCIqIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9fWNsYXNzIFBhdHRlcm4gZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJwYXR0ZXJuIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbImNyb3NzSGF0Y2giLCJjcm9zc0RpYWdvbmFsIiwiZGlhZ29uYWxMZWZ0IiwiZGlhZ29uYWxSaWdodCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKGUpe2U9ZT9lW3IuJHRvU3R5bGVdKCk6IiNGRkZGRkYiO2NvbnN0IHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW3IuJHRvU3R5bGVdKCk6IiMwMDAwMDAiLGE9InJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLG49YCR7ZX0sJHtlfSA1cHgsJHt0fSA1cHgsJHt0fSAxMHB4YDtzd2l0Y2godGhpcy50eXBlKXtjYXNlImNyb3NzSGF0Y2giOnJldHVybmAke2F9KHRvIHRvcCwke259KSAke2F9KHRvIHJpZ2h0LCR7bn0pYDtjYXNlImNyb3NzRGlhZ29uYWwiOnJldHVybmAke2F9KDQ1ZGVnLCR7bn0pICR7YX0oLTQ1ZGVnLCR7bn0pYDtjYXNlImRpYWdvbmFsTGVmdCI6cmV0dXJuYCR7YX0oNDVkZWcsJHtufSlgO2Nhc2UiZGlhZ29uYWxSaWdodCI6cmV0dXJuYCR7YX0oLTQ1ZGVnLCR7bn0pYDtjYXNlImhvcml6b250YWwiOnJldHVybmAke2F9KHRvIHRvcCwke259KWA7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuYCR7YX0odG8gcmlnaHQsJHtufSlgfXJldHVybiIifX1jbGFzcyBQaWN0dXJlIGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicGljdHVyZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBQcm90byBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInByb3RvIiwhMCk7dGhpcy5hcHBlYXJhbmNlRmlsdGVyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYXJjPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYXJlYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmFzc2lzdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJhcmNvZGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5iaW5kSXRlbXM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5ib29rZW5kPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYm9vbGVhbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJvcmRlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtBZnRlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuYnV0dG9uPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY2FsY3VsYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY2FwdGlvbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmNlcnRpZmljYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY2VydGlmaWNhdGVzPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY2hlY2tCdXR0b249bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jaG9pY2VMaXN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY29sb3I9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5jb21iPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmNvbnRlbnRBcmVhPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuY29ybmVyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWVFZGl0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRlZmF1bHRVaT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRlc2M9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kaWdlc3RNZXRob2Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kaWdlc3RNZXRob2RzPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmVkZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNvZGluZz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmVuY29kaW5ncz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb249bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXhlY3V0ZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4dHJhcz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZmlsbD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZpbHRlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZm9udD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZvcm1hdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmhhbmRsZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5oeXBoZW5hdGlvbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2VFZGl0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmlzc3VlcnM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pdGVtcz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmtlZXA9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5rZXlVc2FnZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmxpbmU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5saW5lYXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5sb2NrRG9jdW1lbnQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5tYW5pZmVzdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm1hcmdpbj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm1kcD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm1lZGl1bT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm1lc3NhZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5udW1lcmljRWRpdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm9jY3VyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMub2lkPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMub2lkcz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLm92ZXJmbG93PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucGFnZUFyZWE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5wYWdlU2V0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucGFyYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnBhc3N3b3JkRWRpdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnBhdHRlcm49bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5waWN0dXJlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucmFkaWFsPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucmVhc29uPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucmVhc29ucz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnJlY3RhbmdsZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnJlZj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNjcmlwdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc2lnbkRhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduYXR1cmU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduaW5nPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc29saWQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zcGVhaz1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN0aXBwbGU9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmplY3RETj1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmplY3RETnM9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJtaXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGV4dEVkaXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGltZVN0YW1wPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudG9vbFRpcD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRyYXZlcnNhbD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnRyYXZlcnNlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudWk9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy52YWxpZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnZhbHVlPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudmFyaWFibGVzPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBSYWRpYWwgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJyYWRpYWwiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsidG9FZGdlIiwidG9DZW50ZXIiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtyLiR0b1N0eWxlXShlKXtlPWU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIjtjb25zdCB0PXRoaXMuY29sb3I/dGhpcy5jb2xvcltyLiR0b1N0eWxlXSgpOiIjMDAwMDAwIjtyZXR1cm5gcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsICR7InRvRWRnZSI9PT10aGlzLnR5cGU/YCR7ZX0sJHt0fWA6YCR7dH0sJHtlfWB9KWB9fWNsYXNzIFJlYXNvbiBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInJlYXNvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBSZWFzb25zIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicmVhc29ucyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnJlYXNvbj1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgUmVjdGFuZ2xlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicmVjdGFuZ2xlIiwhMCk7dGhpcy5oYW5kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29ybmVyPW5ldyBvLlhGQU9iamVjdEFycmF5KDQpO3RoaXMuZWRnZT1uZXcgby5YRkFPYmplY3RBcnJheSg0KTt0aGlzLmZpbGw9bnVsbH1bci4kdG9IVE1MXSgpe2NvbnN0IGU9dGhpcy5lZGdlLmNoaWxkcmVuLmxlbmd0aD90aGlzLmVkZ2UuY2hpbGRyZW5bMF06bmV3IEVkZ2Uoe30pLHQ9ZVtyLiR0b1N0eWxlXSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTsidmlzaWJsZSI9PT10aGlzLmZpbGw/LnByZXNlbmNlP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbci4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCI7YS5zdHJva2VXaWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09ZS5wcmVzZW5jZT9lLnRoaWNrbmVzczowKTthLnN0cm9rZT10LmNvbG9yO2NvbnN0IG49KHRoaXMuY29ybmVyLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNvcm5lci5jaGlsZHJlblswXTpuZXcgQ29ybmVyKHt9KSlbci4kdG9TdHlsZV0oKSxpPXtuYW1lOiJzdmciLGNoaWxkcmVuOlt7bmFtZToicmVjdCIsYXR0cmlidXRlczp7eG1sbnM6Zyx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIix4OjAseTowLHJ4Om4ucmFkaXVzLHJ5Om4ucmFkaXVzLHN0eWxlOmF9fV0sYXR0cmlidXRlczp7eG1sbnM6ZyxzdHlsZTp7b3ZlcmZsb3c6InZpc2libGUifSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19O2lmKGhhc01hcmdpbih0aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCkpKXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTp7ZGlzcGxheToiaW5saW5lIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19LGNoaWxkcmVuOltpXX0pO2kuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3JldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcyhpKX19Y2xhc3MgUmVmRWxlbWVudCBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInJlZiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTY3JpcHQgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzY3JpcHQiKTt0aGlzLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIjt0aGlzLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5ydW5BdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTZXRQcm9wZXJ0eSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNldFByb3BlcnR5Iik7dGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIn19dC5TZXRQcm9wZXJ0eT1TZXRQcm9wZXJ0eTtjbGFzcyBTaWduRGF0YSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNpZ25EYXRhIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm9wZXJhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLm1hbmlmZXN0PW51bGx9fWNsYXNzIFNpZ25hdHVyZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNpZ25hdHVyZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJQREYxLjMiLCJQREYxLjYiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbDt0aGlzLm1hcmdpbj1udWxsfX1jbGFzcyBTaWduaW5nIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic2lnbmluZyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBTb2xpZCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNvbGlkIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bci4kdG9TdHlsZV0oZSl7cmV0dXJuIGU/ZVtyLiR0b1N0eWxlXSgpOiIjRkZGRkZGIn19Y2xhc3MgU3BlYWsgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzcGVhayIpO3RoaXMuZGlzYWJsZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZGlzYWJsZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5wcmlvcml0eT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKTt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTdGlwcGxlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic3RpcHBsZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yYXRlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yYXRlLGRlZmF1bHRWYWx1ZTo1MCx2YWxpZGF0ZTplPT5lPj0wJiZlPD0xMDB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W3IuJHRvU3R5bGVdKGUpe2NvbnN0IHQ9dGhpcy5yYXRlLzEwMDtyZXR1cm4gbC5VdGlsLm1ha2VIZXhDb2xvcihNYXRoLnJvdW5kKGUudmFsdWUuciooMS10KSt0aGlzLnZhbHVlLnIqdCksTWF0aC5yb3VuZChlLnZhbHVlLmcqKDEtdCkrdGhpcy52YWx1ZS5nKnQpLE1hdGgucm91bmQoZS52YWx1ZS5iKigxLXQpK3RoaXMudmFsdWUuYip0KSl9fWNsYXNzIFN1YmZvcm0gZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzdWJmb3JtIiwhMCk7dGhpcy5hY2Nlc3M9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hbGxvd01hY3JvPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5hbGxvd01hY3JvLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5hbmNob3JUeXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSk7dGhpcy5jb2xTcGFuPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pO3RoaXMuY29sdW1uV2lkdGhzPShlLmNvbHVtbldpZHRoc3x8IiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4iLTEiPT09ZT8tMTooMCxjLmdldE1lYXN1cmVtZW50KShlKSkpO3RoaXMuaD1lLmg/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIjt0aGlzLmhBbGlnbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sYXlvdXQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKTt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0Iik7dGhpcy5tZXJnZU1vZGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubWVyZ2VNb2RlLFsiY29uc3VtZURhdGEiLCJtYXRjaFRlbXBsYXRlIl0pO3RoaXMubWluSD0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpO3RoaXMubWluVz0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnJlc3RvcmVTdGF0ZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5yZXN0b3JlU3RhdGUsWyJtYW51YWwiLCJhdXRvIl0pO3RoaXMuc2NvcGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJuYW1lIiwibm9uZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy53PWUudz8oMCxjLmdldE1lYXN1cmVtZW50KShlLncpOiIiO3RoaXMueD0oMCxjLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpO3RoaXMueT0oMCxjLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpO3RoaXMuYXNzaXN0PW51bGw7dGhpcy5iaW5kPW51bGw7dGhpcy5ib29rZW5kPW51bGw7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmJyZWFrPW51bGw7dGhpcy5jYWxjdWxhdGU9bnVsbDt0aGlzLmRlc2M9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMub3ZlcmZsb3c9bnVsbDt0aGlzLnBhZ2VTZXQ9bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnZhcmlhYmxlcz1udWxsO3RoaXMuYXJlYT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQWZ0ZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0JlZm9yZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZXZlbnQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMucHJvdG89bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBvLlhGQU9iamVjdEFycmF5fVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTdWJmb3JtU2V0P2Vbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTplfVtyLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW3IuJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tyLiRnZXRQYXJlbnRdKClbci4kaXNUaGVyZU1vcmVXaWR0aF0oKX0qW3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtyLiRmbHVzaEhUTUxdKCl7cmV0dXJuKDAsaS5mbHVzaEhUTUwpKHRoaXMpfVtyLiRhZGRIVE1MXShlLHQpeygwLGkuYWRkSFRNTCkodGhpcyxlLHQpfVtyLiRnZXRBdmFpbGFibGVTcGFjZV0oKXtyZXR1cm4oMCxpLmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKX1bci4kaXNTcGxpdHRhYmxlXSgpe2NvbnN0IGU9dGhpc1tyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2lmKCFlW3IuJGlzU3BsaXR0YWJsZV0oKSlyZXR1cm4hMTtpZih2b2lkIDAhPT10aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlKXJldHVybiB0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlO2lmKCJwb3NpdGlvbiI9PT10aGlzLmxheW91dHx8dGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXt0aGlzW3IuJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExO3JldHVybiExfWlmKHRoaXMua2VlcCYmIm5vbmUiIT09dGhpcy5rZWVwLmludGFjdCl7dGhpc1tyLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZihlLmxheW91dD8uZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtyLiRleHRyYV0ubnVtYmVySW5MaW5lKXJldHVybiExO3RoaXNbci4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITA7cmV0dXJuITB9W3IuJHRvSFRNTF0oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYodGhpcy5icmVhayl7aWYoImF1dG8iIT09dGhpcy5icmVhay5hZnRlcnx8IiIhPT10aGlzLmJyZWFrLmFmdGVyVGFyZ2V0KXtjb25zdCBlPW5ldyBCcmVha0FmdGVyKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYWZ0ZXIsdGFyZ2V0OnRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQsc3RhcnROZXc6dGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpfSk7ZVtyLiRnbG9iYWxEYXRhXT10aGlzW3IuJGdsb2JhbERhdGFdO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpO3RoaXMuYnJlYWtBZnRlci5wdXNoKGUpfWlmKCJhdXRvIiE9PXRoaXMuYnJlYWsuYmVmb3JlfHwiIiE9PXRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0KXtjb25zdCBlPW5ldyBCcmVha0JlZm9yZSh7dGFyZ2V0VHlwZTp0aGlzLmJyZWFrLmJlZm9yZSx0YXJnZXQ6dGhpcy5icmVhay5iZWZvcmVUYXJnZXQsc3RhcnROZXc6dGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpfSk7ZVtyLiRnbG9iYWxEYXRhXT10aGlzW3IuJGdsb2JhbERhdGFdO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpO3RoaXMuYnJlYWtCZWZvcmUucHVzaChlKX1pZigiIiE9PXRoaXMuYnJlYWsub3ZlcmZsb3dUYXJnZXQpe2NvbnN0IGU9bmV3IE92ZXJmbG93KHt0YXJnZXQ6dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCxsZWFkZXI6dGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcix0cmFpbGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dUcmFpbGVyfSk7ZVtyLiRnbG9iYWxEYXRhXT10aGlzW3IuJGdsb2JhbERhdGFdO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpO3RoaXMub3ZlcmZsb3cucHVzaChlKX10aGlzW3IuJHJlbW92ZUNoaWxkXSh0aGlzLmJyZWFrKTt0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZOyh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD4xfHx0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPjEpJiYoMCxsLndhcm4pKCJYRkEgLSBTZXZlcmFsIGJyZWFrQmVmb3JlIG9yIGJyZWFrQWZ0ZXIgaW4gc3ViZm9ybXM6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO2lmKHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXtjb25zdCBlPXRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07aWYoaGFuZGxlQnJlYWsoZSkpcmV0dXJuIGMuSFRNTFJlc3VsdC5icmVha05vZGUoZSl9aWYodGhpc1tyLiRleHRyYV0/LmFmdGVyQnJlYWtBZnRlcilyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7Y29uc3QgdD1bXSxhPXtpZDp0aGlzW3IuJHVpZF0sY2xhc3M6W119OygwLHMuc2V0QWNjZXNzKSh0aGlzLGEuY2xhc3MpO3RoaXNbci4kZXh0cmFdfHwodGhpc1tyLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSk7T2JqZWN0LmFzc2lnbih0aGlzW3IuJGV4dHJhXSx7Y2hpbGRyZW46dCxsaW5lOm51bGwsYXR0cmlidXRlczphLGF0dGVtcHQ6MCxudW1iZXJJbkxpbmU6MCxhdmFpbGFibGVTcGFjZTp7d2lkdGg6TWF0aC5taW4odGhpcy53fHwxLzAsZS53aWR0aCksaGVpZ2h0Ok1hdGgubWluKHRoaXMuaHx8MS8wLGUuaGVpZ2h0KX0sd2lkdGg6MCxoZWlnaHQ6MCxwcmV2SGVpZ2h0OjAsY3VycmVudFdpZHRoOjB9KTtjb25zdCBuPXRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpLG89bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlLGg9dGhpc1tyLiRpc1NwbGl0dGFibGVdKCk7aHx8c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRTtjb25zdCB1PW5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImV4Y2xHcm91cCIsImZpZWxkIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSk7aWYodGhpcy5sYXlvdXQuaW5jbHVkZXMoInJvdyIpKXtjb25zdCBlPXRoaXNbci4kZ2V0U3ViZm9ybVBhcmVudF0oKS5jb2x1bW5XaWR0aHM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dGhpc1tyLiRleHRyYV0uY29sdW1uV2lkdGhzPWU7dGhpc1tyLiRleHRyYV0uY3VycmVudENvbHVtbj0wfX1jb25zdCBkPSgwLHMudG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksZj1bInhmYVN1YmZvcm0iXSxnPSgwLHMubGF5b3V0Q2xhc3MpKHRoaXMpO2cmJmYucHVzaChnKTthLnN0eWxlPWQ7YS5jbGFzcz1mO3RoaXMubmFtZSYmKGEueGZhTmFtZT10aGlzLm5hbWUpO2lmKHRoaXMub3ZlcmZsb3cpe2NvbnN0IHQ9dGhpcy5vdmVyZmxvd1tyLiRnZXRFeHRyYV0oKTtpZih0LmFkZExlYWRlcil7dC5hZGRMZWFkZXI9ITE7aGFuZGxlT3ZlcmZsb3codGhpcyx0LmxlYWRlcixlKX19dGhpc1tyLiRwdXNoUGFyYV0oKTtjb25zdCBwPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LG09cD8yOjE7Zm9yKDt0aGlzW3IuJGV4dHJhXS5hdHRlbXB0PG07dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCsrKXtwJiYxPT09dGhpc1tyLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbci4kZXh0cmFdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbci4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6dSxpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXt0aGlzW3IuJHBvcFBhcmFdKCk7cmV0dXJuIGV9aWYocCYmMD09PXRoaXNbci4kZXh0cmFdLmF0dGVtcHQmJjA9PT10aGlzW3IuJGV4dHJhXS5udW1iZXJJbkxpbmUmJiFuW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbci4kZXh0cmFdLmF0dGVtcHQ9bTticmVha319dGhpc1tyLiRwb3BQYXJhXSgpO2h8fHVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7bltyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPW87aWYodGhpc1tyLiRleHRyYV0uYXR0ZW1wdD09PW0pe3RoaXMub3ZlcmZsb3cmJih0aGlzW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ub3ZlcmZsb3dOb2RlPXRoaXMub3ZlcmZsb3cpO2h8fGRlbGV0ZSB0aGlzW3IuJGV4dHJhXTtyZXR1cm4gYy5IVE1MUmVzdWx0LkZBSUxVUkV9aWYodGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W3IuJGdldEV4dHJhXSgpO2lmKHQuYWRkVHJhaWxlcil7dC5hZGRUcmFpbGVyPSExO2hhbmRsZU92ZXJmbG93KHRoaXMsdC50cmFpbGVyLGUpfX1sZXQgYj0wLHk9MDtpZih0aGlzLm1hcmdpbil7Yj10aGlzLm1hcmdpbi5sZWZ0SW5zZXQrdGhpcy5tYXJnaW4ucmlnaHRJbnNldDt5PXRoaXMubWFyZ2luLnRvcEluc2V0K3RoaXMubWFyZ2luLmJvdHRvbUluc2V0fWNvbnN0IHc9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0ud2lkdGgrYix0aGlzLnd8fDApLFM9TWF0aC5tYXgodGhpc1tyLiRleHRyYV0uaGVpZ2h0K3ksdGhpcy5ofHwwKSx4PVt0aGlzLngsdGhpcy55LHcsU107IiI9PT10aGlzLncmJihkLndpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh3KSk7IiI9PT10aGlzLmgmJihkLmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykoUykpO2lmKCgiMHB4Ij09PWQud2lkdGh8fCIwcHgiPT09ZC5oZWlnaHQpJiYwPT09dC5sZW5ndGgpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWTtjb25zdCBDPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6YSxjaGlsZHJlbjp0fTthcHBseUFzc2lzdCh0aGlzLGEpO2NvbnN0IHY9Yy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLEMpLHgpO2lmKHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGg+PTEpe2NvbnN0IGU9dGhpcy5icmVha0FmdGVyLmNoaWxkcmVuWzBdO2lmKGhhbmRsZUJyZWFrKGUpKXt0aGlzW3IuJGV4dHJhXS5hZnRlckJyZWFrQWZ0ZXI9djtyZXR1cm4gYy5IVE1MUmVzdWx0LmJyZWFrTm9kZShlKX19ZGVsZXRlIHRoaXNbci4kZXh0cmFdO3JldHVybiB2fX1jbGFzcyBTdWJmb3JtU2V0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic3ViZm9ybVNldCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yZWxhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5yZWxhdGlvbixbIm9yZGVyZWQiLCJjaG9pY2UiLCJ1bm9yZGVyZWQiXSk7dGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29rZW5kPW51bGw7dGhpcy5icmVhaz1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMub3ZlcmZsb3c9bnVsbDt0aGlzLmJyZWFrQWZ0ZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0JlZm9yZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBvLlhGQU9iamVjdEFycmF5fSpbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCl7eWllbGQqZ2V0Q29udGFpbmVkQ2hpbGRyZW4odGhpcyl9W3IuJGdldFN1YmZvcm1QYXJlbnRdKCl7bGV0IGU9dGhpc1tyLiRnZXRQYXJlbnRdKCk7Zm9yKDshKGUgaW5zdGFuY2VvZiBTdWJmb3JtKTspZT1lW3IuJGdldFBhcmVudF0oKTtyZXR1cm4gZX1bci4kaXNCaW5kYWJsZV0oKXtyZXR1cm4hMH19Y2xhc3MgU3ViamVjdEROIGV4dGVuZHMgby5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInN1YmplY3RETiIpO3RoaXMuZGVsaW1pdGVyPWUuZGVsaW1pdGVyfHwiLCI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3IuJGZpbmFsaXplXSgpe3RoaXNbci4kY29udGVudF09bmV3IE1hcCh0aGlzW3IuJGNvbnRlbnRdLnNwbGl0KHRoaXMuZGVsaW1pdGVyKS5tYXAoKGU9PnsoZT1lLnNwbGl0KCI9IiwyKSlbMF09ZVswXS50cmltKCk7cmV0dXJuIGV9KSkpfX1jbGFzcyBTdWJqZWN0RE5zIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic3ViamVjdEROcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnN1YmplY3RETj1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgU3VibWl0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic3VibWl0IiwhMCk7dGhpcy5lbWJlZFBERj0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZW1iZWRQREYsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmZvcm1hdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5mb3JtYXQsWyJ4ZHAiLCJmb3JtZGF0YSIsInBkZiIsInVybGVuY29kZWQiLCJ4ZmQiLCJ4bWwiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50ZXh0RW5jb2Rpbmc9KDAsYy5nZXRLZXl3b3JkKSh7ZGF0YTplLnRleHRFbmNvZGluZz9lLnRleHRFbmNvZGluZy50b0xvd2VyQ2FzZSgpOiIiLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTplPT5bInV0Zi04IiwiYmlnLWZpdmUiLCJmb250c3BlY2lmaWMiLCJnYmsiLCJnYi0xODAzMCIsImdiLTIzMTIiLCJrc2MtNTYwMSIsIm5vbmUiLCJzaGlmdC1qaXMiLCJ1Y3MtMiIsInV0Zi0xNiJdLmluY2x1ZGVzKGUpfHxlLm1hdGNoKC9pc28tODg1OS1cZHsyfS8pfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMueGRwQ29udGVudD1lLnhkcENvbnRlbnR8fCIiO3RoaXMuZW5jcnlwdD1udWxsO3RoaXMuZW5jcnlwdERhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduRGF0YT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0ZW1wbGF0ZSIsITApO3RoaXMuYmFzZVByb2ZpbGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKTt0aGlzLmV4dHJhcz1udWxsO3RoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kZmluYWxpemVdKCl7MD09PXRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGgmJigwLGwud2FybikoIlhGQSAtIE5vIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGUuIik7dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MiYmKDAsbC53YXJuKSgiWEZBIC0gU2V2ZXJhbCBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW3IuJHRhYkluZGV4XT01ZTN9W3IuJGlzU3BsaXR0YWJsZV0oKXtyZXR1cm4hMH1bci4kc2VhcmNoTm9kZV0oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbci4kaWRzXS5nZXQoZS5zbGljZSgxKSldOigwLGQuc2VhcmNoTm9kZSkodGhpcyx0LGUsITAsITApfSpbci4kdG9QYWdlc10oKXtpZighdGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W119KTt0aGlzW3IuJGV4dHJhXT17b3ZlcmZsb3dOb2RlOm51bGwsZmlyc3RVbnNwbGl0dGFibGU6bnVsbCxjdXJyZW50Q29udGVudEFyZWE6bnVsbCxjdXJyZW50UGFnZUFyZWE6bnVsbCxub0xheW91dEZhaWx1cmU6ITEscGFnZU51bWJlcjoxLHBhZ2VQb3NpdGlvbjoiZmlyc3QiLG9kZE9yRXZlbjoib2RkIixibGFua09yTm90Qmxhbms6Im5vbkJsYW5rIixwYXJhU3RhY2s6W119O2NvbnN0IGU9dGhpcy5zdWJmb3JtLmNoaWxkcmVuWzBdO2UucGFnZVNldFtyLiRjbGVhblBhZ2VdKCk7Y29uc3QgdD1lLnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4sYT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX07bGV0IG49bnVsbCxpPW51bGwscz1udWxsO2lmKGUuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXtpPWUuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07cz1pLnRhcmdldH1lbHNlIGlmKGUuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJmUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2k9ZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO3M9aS50YXJnZXR9ZWxzZSBpZihlLmJyZWFrPy5iZWZvcmVUYXJnZXQpe2k9ZS5icmVhaztzPWkuYmVmb3JlVGFyZ2V0fWVsc2UgaWYoZS5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MSYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrPy5iZWZvcmVUYXJnZXQpe2k9ZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrO3M9aS5iZWZvcmVUYXJnZXR9aWYoaSl7Y29uc3QgZT10aGlzW3IuJHNlYXJjaE5vZGVdKHMsaVtyLiRnZXRQYXJlbnRdKCkpO2lmKGUgaW5zdGFuY2VvZiBQYWdlQXJlYSl7bj1lO2lbci4kZXh0cmFdPXt9fX1ufHwobj10WzBdKTtuW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MX07Y29uc3Qgbz1uW3IuJGdldFBhcmVudF0oKTtvW3IuJGV4dHJhXT17bnVtYmVyT2ZVc2U6MSxwYWdlSW5kZXg6by5wYWdlQXJlYS5jaGlsZHJlbi5pbmRleE9mKG4pLHBhZ2VTZXRJbmRleDowfTtsZXQgaCx1PW51bGwsZD1udWxsLGY9ITAsZz0wLHA9MDtmb3IoOzspe2lmKGYpZz0wO2Vsc2V7YS5jaGlsZHJlbi5wb3AoKTtpZigzPT0rK2cpeygwLGwud2FybikoIlhGQSAtIFNvbWV0aGluZyBnb2VzIHdyb25nOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtyZXR1cm4gYX19aD1udWxsO3RoaXNbci4kZXh0cmFdLmN1cnJlbnRQYWdlQXJlYT1uO2NvbnN0IHQ9bltyLiR0b0hUTUxdKCkuaHRtbDthLmNoaWxkcmVuLnB1c2godCk7aWYodSl7dGhpc1tyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwO3QuY2hpbGRyZW4ucHVzaCh1W3IuJHRvSFRNTF0obltyLiRleHRyYV0uc3BhY2UpLmh0bWwpO3U9bnVsbH1pZihkKXt0aGlzW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITA7dC5jaGlsZHJlbi5wdXNoKGRbci4kdG9IVE1MXShuW3IuJGV4dHJhXS5zcGFjZSkuaHRtbCk7ZD1udWxsfWNvbnN0IGk9bi5jb250ZW50QXJlYS5jaGlsZHJlbixzPXQuY2hpbGRyZW4uZmlsdGVyKChlPT5lLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoInhmYUNvbnRlbnRhcmVhIikpKTtmPSExO3RoaXNbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlPW51bGw7dGhpc1tyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSExO2NvbnN0IGZsdXNoPXQ9Pntjb25zdCBhPWVbci4kZmx1c2hIVE1MXSgpO2lmKGEpe2Z8fD1hLmNoaWxkcmVuPy5sZW5ndGg+MDtzW3RdLmNoaWxkcmVuLnB1c2goYSl9fTtmb3IobGV0IHQ9cCxuPWkubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IG49dGhpc1tyLiRleHRyYV0uY3VycmVudENvbnRlbnRBcmVhPWlbdF0sbz17d2lkdGg6bi53LGhlaWdodDpuLmh9O3A9MDtpZih1KXtzW3RdLmNoaWxkcmVuLnB1c2godVtyLiR0b0hUTUxdKG8pLmh0bWwpO3U9bnVsbH1pZihkKXtzW3RdLmNoaWxkcmVuLnB1c2goZFtyLiR0b0hUTUxdKG8pLmh0bWwpO2Q9bnVsbH1jb25zdCBjPWVbci4kdG9IVE1MXShvKTtpZihjLnN1Y2Nlc3Mpe2lmKGMuaHRtbCl7Znx8PWMuaHRtbC5jaGlsZHJlbj8ubGVuZ3RoPjA7c1t0XS5jaGlsZHJlbi5wdXNoKGMuaHRtbCl9ZWxzZSFmJiZhLmNoaWxkcmVuLmxlbmd0aD4xJiZhLmNoaWxkcmVuLnBvcCgpO3JldHVybiBhfWlmKGMuaXNCcmVhaygpKXtjb25zdCBlPWMuYnJlYWtOb2RlO2ZsdXNoKHQpO2lmKCJhdXRvIj09PWUudGFyZ2V0VHlwZSljb250aW51ZTtpZihlLmxlYWRlcil7dT10aGlzW3IuJHNlYXJjaE5vZGVdKGUubGVhZGVyLGVbci4kZ2V0UGFyZW50XSgpKTt1PXU/dVswXTpudWxsfWlmKGUudHJhaWxlcil7ZD10aGlzW3IuJHNlYXJjaE5vZGVdKGUudHJhaWxlcixlW3IuJGdldFBhcmVudF0oKSk7ZD1kP2RbMF06bnVsbH1pZigicGFnZUFyZWEiPT09ZS50YXJnZXRUeXBlKXtoPWVbci4kZXh0cmFdLnRhcmdldDt0PTEvMH1lbHNlIGlmKGVbci4kZXh0cmFdLnRhcmdldCl7aD1lW3IuJGV4dHJhXS50YXJnZXQ7cD1lW3IuJGV4dHJhXS5pbmRleCsxO3Q9MS8wfWVsc2UgdD1lW3IuJGV4dHJhXS5pbmRleH1lbHNlIGlmKHRoaXNbci4kZXh0cmFdLm92ZXJmbG93Tm9kZSl7Y29uc3QgZT10aGlzW3IuJGV4dHJhXS5vdmVyZmxvd05vZGU7dGhpc1tyLiRleHRyYV0ub3ZlcmZsb3dOb2RlPW51bGw7Y29uc3QgYT1lW3IuJGdldEV4dHJhXSgpLG49YS50YXJnZXQ7YS5hZGRMZWFkZXI9bnVsbCE9PWEubGVhZGVyO2EuYWRkVHJhaWxlcj1udWxsIT09YS50cmFpbGVyO2ZsdXNoKHQpO2NvbnN0IHM9dDt0PTEvMDtpZihuIGluc3RhbmNlb2YgUGFnZUFyZWEpaD1uO2Vsc2UgaWYobiBpbnN0YW5jZW9mIENvbnRlbnRBcmVhKXtjb25zdCBlPWkuaW5kZXhPZihuKTtpZigtMSE9PWUpZT5zP3Q9ZS0xOnA9ZTtlbHNle2g9bltyLiRnZXRQYXJlbnRdKCk7cD1oLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yobil9fX1lbHNlIGZsdXNoKHQpfXRoaXNbci4kZXh0cmFdLnBhZ2VOdW1iZXIrPTE7aCYmKGhbci4kaXNVc2FibGVdKCk/aFtyLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE6aD1udWxsKTtuPWh8fG5bci4kZ2V0TmV4dFBhZ2VdKCk7eWllbGQgbnVsbH19fXQuVGVtcGxhdGU9VGVtcGxhdGU7Y2xhc3MgVGV4dCBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0ZXh0Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1heENoYXJzPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bci4kYWNjZXB0V2hpdGVzcGFjZV0oKXtyZXR1cm4hMH1bci4kb25DaGlsZF0oZSl7aWYoZVtyLiRuYW1lc3BhY2VJZF09PT1uLk5hbWVzcGFjZUlkcy54aHRtbC5pZCl7dGhpc1tyLiRjb250ZW50XT1lO3JldHVybiEwfSgwLGwud2FybikoYFhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAke2Vbci4kbm9kZU5hbWVdfS5gKTtyZXR1cm4hMX1bci4kb25UZXh0XShlKXt0aGlzW3IuJGNvbnRlbnRdaW5zdGFuY2VvZiBvLlhGQU9iamVjdHx8c3VwZXJbci4kb25UZXh0XShlKX1bci4kZmluYWxpemVdKCl7InN0cmluZyI9PXR5cGVvZiB0aGlzW3IuJGNvbnRlbnRdJiYodGhpc1tyLiRjb250ZW50XT10aGlzW3IuJGNvbnRlbnRdLnJlcGxhY2VBbGwoIlxyXG4iLCJcbiIpKX1bci4kZ2V0RXh0cmFdKCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0uc3BsaXQoL1tcdTIwMjlcdTIwMjhcbl0vKS5yZWR1Y2UoKChlLHQpPT57dCYmZS5wdXNoKHQpO3JldHVybiBlfSksW10pLmpvaW4oIlxuIik6dGhpc1tyLiRjb250ZW50XVtyLiR0ZXh0XSgpfVtyLiR0b0hUTUxdKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tyLiRjb250ZW50XSl7Y29uc3QgZT12YWx1ZVRvSHRtbCh0aGlzW3IuJGNvbnRlbnRdKS5odG1sO2lmKHRoaXNbci4kY29udGVudF0uaW5jbHVkZXMoIlx1MjAyOSIpKXtlLm5hbWU9ImRpdiI7ZS5jaGlsZHJlbj1bXTt0aGlzW3IuJGNvbnRlbnRdLnNwbGl0KCJcdTIwMjkiKS5tYXAoKGU9PmUuc3BsaXQoL1tcdTIwMjhcbl0vKS5yZWR1Y2UoKChlLHQpPT57ZS5wdXNoKHtuYW1lOiJzcGFuIix2YWx1ZTp0fSx7bmFtZToiYnIifSk7cmV0dXJuIGV9KSxbXSkpKS5mb3JFYWNoKCh0PT57ZS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJwIixjaGlsZHJlbjp0fSl9KSl9ZWxzZSBpZigvW1x1MjAyOFxuXS8udGVzdCh0aGlzW3IuJGNvbnRlbnRdKSl7ZS5uYW1lPSJkaXYiO2UuY2hpbGRyZW49W107dGhpc1tyLiRjb250ZW50XS5zcGxpdCgvW1x1MjAyOFxuXS8pLmZvckVhY2goKHQ9PntlLmNoaWxkcmVuLnB1c2goe25hbWU6InNwYW4iLHZhbHVlOnR9LHtuYW1lOiJiciJ9KX0pKX1yZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9cmV0dXJuIHRoaXNbci4kY29udGVudF1bci4kdG9IVE1MXShlKX19dC5UZXh0PVRleHQ7Y2xhc3MgVGV4dEVkaXQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0ZXh0RWRpdCIsITApO3RoaXMuYWxsb3dSaWNoVGV4dD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaFNjcm9sbFBvbGljeT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tdWx0aUxpbmU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm11bHRpTGluZSxkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+MD09PWV8fDE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudlNjcm9sbFBvbGljeT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS52U2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIik7bGV0IGE7Y29uc3Qgbj10aGlzW3IuJGdldFBhcmVudF0oKVtyLiRnZXRQYXJlbnRdKCk7IiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPW4gaW5zdGFuY2VvZiBEcmF3PzE6MCk7YT0xPT09dGhpcy5tdWx0aUxpbmU/e25hbWU6InRleHRhcmVhIixhdHRyaWJ1dGVzOntkYXRhSWQ6bltyLiRkYXRhXT8uW3IuJHVpZF18fG5bci4kdWlkXSxmaWVsZElkOm5bci4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOnQsImFyaWEtbGFiZWwiOmFyaWFMYWJlbChuKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTp7bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e3R5cGU6InRleHQiLGRhdGFJZDpuW3IuJGRhdGFdPy5bci4kdWlkXXx8bltyLiR1aWRdLGZpZWxkSWQ6bltyLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKG4pLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQobikpe2EuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO2EuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlthXX0pfX1jbGFzcyBUaW1lIGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidGltZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtyLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbci4kY29udGVudF0udHJpbSgpO3RoaXNbci4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfVtyLiR0b0hUTUxdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIFRpbWVTdGFtcCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRpbWVTdGFtcCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5zZXJ2ZXI9ZS5zZXJ2ZXJ8fCIiO3RoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFRvb2xUaXAgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0b29sVGlwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBUcmF2ZXJzYWwgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0cmF2ZXJzYWwiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMudHJhdmVyc2U9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRyYXZlcnNlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidHJhdmVyc2UiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3BlcmF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbIm5leHQiLCJiYWNrIiwiZG93biIsImZpcnN0IiwibGVmdCIsInJpZ2h0IiwidXAiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMuc2NyaXB0PW51bGx9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5vcGVyYXRpb259W3IuJGlzVHJhbnNwYXJlbnRdKCl7cmV0dXJuITF9fWNsYXNzIFVpIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidWkiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMucGljdHVyZT1udWxsO3RoaXMuYmFyY29kZT1udWxsO3RoaXMuYnV0dG9uPW51bGw7dGhpcy5jaGVja0J1dHRvbj1udWxsO3RoaXMuY2hvaWNlTGlzdD1udWxsO3RoaXMuZGF0ZVRpbWVFZGl0PW51bGw7dGhpcy5kZWZhdWx0VWk9bnVsbDt0aGlzLmltYWdlRWRpdD1udWxsO3RoaXMubnVtZXJpY0VkaXQ9bnVsbDt0aGlzLnBhc3N3b3JkRWRpdD1udWxsO3RoaXMuc2lnbmF0dXJlPW51bGw7dGhpcy50ZXh0RWRpdD1udWxsfVtyLiRnZXRFeHRyYV0oKXtpZih2b2lkIDA9PT10aGlzW3IuJGV4dHJhXSl7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8InBpY3R1cmUiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIG8uWEZBT2JqZWN0KXt0aGlzW3IuJGV4dHJhXT10O3JldHVybiB0fX10aGlzW3IuJGV4dHJhXT1udWxsfXJldHVybiB0aGlzW3IuJGV4dHJhXX1bci4kdG9IVE1MXShlKXtjb25zdCB0PXRoaXNbci4kZ2V0RXh0cmFdKCk7cmV0dXJuIHQ/dFtyLiR0b0hUTUxdKGUpOmMuSFRNTFJlc3VsdC5FTVBUWX19Y2xhc3MgVmFsaWRhdGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ2YWxpZGF0ZSIsITApO3RoaXMuZm9ybWF0VGVzdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5mb3JtYXRUZXN0LFsid2FybmluZyIsImRpc2FibGVkIiwiZXJyb3IiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm51bGxUZXN0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm51bGxUZXN0LFsiZGlzYWJsZWQiLCJlcnJvciIsIndhcm5pbmciXSk7dGhpcy5zY3JpcHRUZXN0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnNjcmlwdFRlc3QsWyJlcnJvciIsImRpc2FibGVkIiwid2FybmluZyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1lc3NhZ2U9bnVsbDt0aGlzLnBpY3R1cmU9bnVsbDt0aGlzLnNjcmlwdD1udWxsfX1jbGFzcyBWYWx1ZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInZhbHVlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJyaWRlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMucmVsZXZhbnQ9KDAsYy5nZXRSZWxldmFudCkoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYXJjPW51bGw7dGhpcy5ib29sZWFuPW51bGw7dGhpcy5kYXRlPW51bGw7dGhpcy5kYXRlVGltZT1udWxsO3RoaXMuZGVjaW1hbD1udWxsO3RoaXMuZXhEYXRhPW51bGw7dGhpcy5mbG9hdD1udWxsO3RoaXMuaW1hZ2U9bnVsbDt0aGlzLmludGVnZXI9bnVsbDt0aGlzLmxpbmU9bnVsbDt0aGlzLnJlY3RhbmdsZT1udWxsO3RoaXMudGV4dD1udWxsO3RoaXMudGltZT1udWxsfVtyLiRzZXRWYWx1ZV0oZSl7Y29uc3QgdD10aGlzW3IuJGdldFBhcmVudF0oKTtpZih0IGluc3RhbmNlb2YgRmllbGQmJnQudWk/LmltYWdlRWRpdCl7aWYoIXRoaXMuaW1hZ2Upe3RoaXMuaW1hZ2U9bmV3IEltYWdlKHt9KTt0aGlzW3IuJGFwcGVuZENoaWxkXSh0aGlzLmltYWdlKX10aGlzLmltYWdlW3IuJGNvbnRlbnRdPWVbci4kY29udGVudF07cmV0dXJufWNvbnN0IGE9ZVtyLiRub2RlTmFtZV07aWYobnVsbD09PXRoaXNbYV0pe2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIG8uWEZBT2JqZWN0KXt0aGlzW2VdPW51bGw7dGhpc1tyLiRyZW1vdmVDaGlsZF0odCl9fXRoaXNbZVtyLiRub2RlTmFtZV1dPWU7dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSl9ZWxzZSB0aGlzW2FdW3IuJGNvbnRlbnRdPWVbci4kY29udGVudF19W3IuJHRleHRdKCl7aWYodGhpcy5leERhdGEpcmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzLmV4RGF0YVtyLiRjb250ZW50XT90aGlzLmV4RGF0YVtyLiRjb250ZW50XS50cmltKCk6dGhpcy5leERhdGFbci4kY29udGVudF1bci4kdGV4dF0oKS50cmltKCk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJpbWFnZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2Ygby5YRkFPYmplY3QpcmV0dXJuKHRbci4kY29udGVudF18fCIiKS50b1N0cmluZygpLnRyaW0oKX1yZXR1cm4gbnVsbH1bci4kdG9IVE1MXShlKXtmb3IoY29uc3QgdCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgYT10aGlzW3RdO2lmKGEgaW5zdGFuY2VvZiBvLlhGQU9iamVjdClyZXR1cm4gYVtyLiR0b0hUTUxdKGUpfXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFl9fXQuVmFsdWU9VmFsdWU7Y2xhc3MgVmFyaWFibGVzIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidmFyaWFibGVzIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMubWFuaWZlc3Q9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy5zY3JpcHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgby5YRkFPYmplY3RBcnJheX1bci4kaXNUcmFuc3BhcmVudF0oKXtyZXR1cm4hMH19Y2xhc3MgVGVtcGxhdGVOYW1lc3BhY2V7c3RhdGljW24uJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFRlbXBsYXRlTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXtjb25zdCBhPVRlbXBsYXRlTmFtZXNwYWNlW2VdKHQpO2Fbci4kc2V0U2V0QXR0cmlidXRlc10odCk7cmV0dXJuIGF9fXN0YXRpYyBhcHBlYXJhbmNlRmlsdGVyKGUpe3JldHVybiBuZXcgQXBwZWFyYW5jZUZpbHRlcihlKX1zdGF0aWMgYXJjKGUpe3JldHVybiBuZXcgQXJjKGUpfXN0YXRpYyBhcmVhKGUpe3JldHVybiBuZXcgQXJlYShlKX1zdGF0aWMgYXNzaXN0KGUpe3JldHVybiBuZXcgQXNzaXN0KGUpfXN0YXRpYyBiYXJjb2RlKGUpe3JldHVybiBuZXcgQmFyY29kZShlKX1zdGF0aWMgYmluZChlKXtyZXR1cm4gbmV3IEJpbmQoZSl9c3RhdGljIGJpbmRJdGVtcyhlKXtyZXR1cm4gbmV3IEJpbmRJdGVtcyhlKX1zdGF0aWMgYm9va2VuZChlKXtyZXR1cm4gbmV3IEJvb2tlbmQoZSl9c3RhdGljIGJvb2xlYW4oZSl7cmV0dXJuIG5ldyBCb29sZWFuRWxlbWVudChlKX1zdGF0aWMgYm9yZGVyKGUpe3JldHVybiBuZXcgQm9yZGVyKGUpfXN0YXRpYyBicmVhayhlKXtyZXR1cm4gbmV3IEJyZWFrKGUpfXN0YXRpYyBicmVha0FmdGVyKGUpe3JldHVybiBuZXcgQnJlYWtBZnRlcihlKX1zdGF0aWMgYnJlYWtCZWZvcmUoZSl7cmV0dXJuIG5ldyBCcmVha0JlZm9yZShlKX1zdGF0aWMgYnV0dG9uKGUpe3JldHVybiBuZXcgQnV0dG9uKGUpfXN0YXRpYyBjYWxjdWxhdGUoZSl7cmV0dXJuIG5ldyBDYWxjdWxhdGUoZSl9c3RhdGljIGNhcHRpb24oZSl7cmV0dXJuIG5ldyBDYXB0aW9uKGUpfXN0YXRpYyBjZXJ0aWZpY2F0ZShlKXtyZXR1cm4gbmV3IENlcnRpZmljYXRlKGUpfXN0YXRpYyBjZXJ0aWZpY2F0ZXMoZSl7cmV0dXJuIG5ldyBDZXJ0aWZpY2F0ZXMoZSl9c3RhdGljIGNoZWNrQnV0dG9uKGUpe3JldHVybiBuZXcgQ2hlY2tCdXR0b24oZSl9c3RhdGljIGNob2ljZUxpc3QoZSl7cmV0dXJuIG5ldyBDaG9pY2VMaXN0KGUpfXN0YXRpYyBjb2xvcihlKXtyZXR1cm4gbmV3IENvbG9yKGUpfXN0YXRpYyBjb21iKGUpe3JldHVybiBuZXcgQ29tYihlKX1zdGF0aWMgY29ubmVjdChlKXtyZXR1cm4gbmV3IENvbm5lY3QoZSl9c3RhdGljIGNvbnRlbnRBcmVhKGUpe3JldHVybiBuZXcgQ29udGVudEFyZWEoZSl9c3RhdGljIGNvcm5lcihlKXtyZXR1cm4gbmV3IENvcm5lcihlKX1zdGF0aWMgZGF0ZShlKXtyZXR1cm4gbmV3IERhdGVFbGVtZW50KGUpfXN0YXRpYyBkYXRlVGltZShlKXtyZXR1cm4gbmV3IERhdGVUaW1lKGUpfXN0YXRpYyBkYXRlVGltZUVkaXQoZSl7cmV0dXJuIG5ldyBEYXRlVGltZUVkaXQoZSl9c3RhdGljIGRlY2ltYWwoZSl7cmV0dXJuIG5ldyBEZWNpbWFsKGUpfXN0YXRpYyBkZWZhdWx0VWkoZSl7cmV0dXJuIG5ldyBEZWZhdWx0VWkoZSl9c3RhdGljIGRlc2MoZSl7cmV0dXJuIG5ldyBEZXNjKGUpfXN0YXRpYyBkaWdlc3RNZXRob2QoZSl7cmV0dXJuIG5ldyBEaWdlc3RNZXRob2QoZSl9c3RhdGljIGRpZ2VzdE1ldGhvZHMoZSl7cmV0dXJuIG5ldyBEaWdlc3RNZXRob2RzKGUpfXN0YXRpYyBkcmF3KGUpe3JldHVybiBuZXcgRHJhdyhlKX1zdGF0aWMgZWRnZShlKXtyZXR1cm4gbmV3IEVkZ2UoZSl9c3RhdGljIGVuY29kaW5nKGUpe3JldHVybiBuZXcgRW5jb2RpbmcoZSl9c3RhdGljIGVuY29kaW5ncyhlKXtyZXR1cm4gbmV3IEVuY29kaW5ncyhlKX1zdGF0aWMgZW5jcnlwdChlKXtyZXR1cm4gbmV3IEVuY3J5cHQoZSl9c3RhdGljIGVuY3J5cHREYXRhKGUpe3JldHVybiBuZXcgRW5jcnlwdERhdGEoZSl9c3RhdGljIGVuY3J5cHRpb24oZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uKGUpfXN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZChlKX1zdGF0aWMgZW5jcnlwdGlvbk1ldGhvZHMoZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uTWV0aG9kcyhlKX1zdGF0aWMgZXZlbnQoZSl7cmV0dXJuIG5ldyBFdmVudChlKX1zdGF0aWMgZXhEYXRhKGUpe3JldHVybiBuZXcgRXhEYXRhKGUpfXN0YXRpYyBleE9iamVjdChlKXtyZXR1cm4gbmV3IEV4T2JqZWN0KGUpfXN0YXRpYyBleGNsR3JvdXAoZSl7cmV0dXJuIG5ldyBFeGNsR3JvdXAoZSl9c3RhdGljIGV4ZWN1dGUoZSl7cmV0dXJuIG5ldyBFeGVjdXRlKGUpfXN0YXRpYyBleHRyYXMoZSl7cmV0dXJuIG5ldyBFeHRyYXMoZSl9c3RhdGljIGZpZWxkKGUpe3JldHVybiBuZXcgRmllbGQoZSl9c3RhdGljIGZpbGwoZSl7cmV0dXJuIG5ldyBGaWxsKGUpfXN0YXRpYyBmaWx0ZXIoZSl7cmV0dXJuIG5ldyBGaWx0ZXIoZSl9c3RhdGljIGZsb2F0KGUpe3JldHVybiBuZXcgRmxvYXQoZSl9c3RhdGljIGZvbnQoZSl7cmV0dXJuIG5ldyBGb250KGUpfXN0YXRpYyBmb3JtYXQoZSl7cmV0dXJuIG5ldyBGb3JtYXQoZSl9c3RhdGljIGhhbmRsZXIoZSl7cmV0dXJuIG5ldyBIYW5kbGVyKGUpfXN0YXRpYyBoeXBoZW5hdGlvbihlKXtyZXR1cm4gbmV3IEh5cGhlbmF0aW9uKGUpfXN0YXRpYyBpbWFnZShlKXtyZXR1cm4gbmV3IEltYWdlKGUpfXN0YXRpYyBpbWFnZUVkaXQoZSl7cmV0dXJuIG5ldyBJbWFnZUVkaXQoZSl9c3RhdGljIGludGVnZXIoZSl7cmV0dXJuIG5ldyBJbnRlZ2VyKGUpfXN0YXRpYyBpc3N1ZXJzKGUpe3JldHVybiBuZXcgSXNzdWVycyhlKX1zdGF0aWMgaXRlbXMoZSl7cmV0dXJuIG5ldyBJdGVtcyhlKX1zdGF0aWMga2VlcChlKXtyZXR1cm4gbmV3IEtlZXAoZSl9c3RhdGljIGtleVVzYWdlKGUpe3JldHVybiBuZXcgS2V5VXNhZ2UoZSl9c3RhdGljIGxpbmUoZSl7cmV0dXJuIG5ldyBMaW5lKGUpfXN0YXRpYyBsaW5lYXIoZSl7cmV0dXJuIG5ldyBMaW5lYXIoZSl9c3RhdGljIGxvY2tEb2N1bWVudChlKXtyZXR1cm4gbmV3IExvY2tEb2N1bWVudChlKX1zdGF0aWMgbWFuaWZlc3QoZSl7cmV0dXJuIG5ldyBNYW5pZmVzdChlKX1zdGF0aWMgbWFyZ2luKGUpe3JldHVybiBuZXcgTWFyZ2luKGUpfXN0YXRpYyBtZHAoZSl7cmV0dXJuIG5ldyBNZHAoZSl9c3RhdGljIG1lZGl1bShlKXtyZXR1cm4gbmV3IE1lZGl1bShlKX1zdGF0aWMgbWVzc2FnZShlKXtyZXR1cm4gbmV3IE1lc3NhZ2UoZSl9c3RhdGljIG51bWVyaWNFZGl0KGUpe3JldHVybiBuZXcgTnVtZXJpY0VkaXQoZSl9c3RhdGljIG9jY3VyKGUpe3JldHVybiBuZXcgT2NjdXIoZSl9c3RhdGljIG9pZChlKXtyZXR1cm4gbmV3IE9pZChlKX1zdGF0aWMgb2lkcyhlKXtyZXR1cm4gbmV3IE9pZHMoZSl9c3RhdGljIG92ZXJmbG93KGUpe3JldHVybiBuZXcgT3ZlcmZsb3coZSl9c3RhdGljIHBhZ2VBcmVhKGUpe3JldHVybiBuZXcgUGFnZUFyZWEoZSl9c3RhdGljIHBhZ2VTZXQoZSl7cmV0dXJuIG5ldyBQYWdlU2V0KGUpfXN0YXRpYyBwYXJhKGUpe3JldHVybiBuZXcgUGFyYShlKX1zdGF0aWMgcGFzc3dvcmRFZGl0KGUpe3JldHVybiBuZXcgUGFzc3dvcmRFZGl0KGUpfXN0YXRpYyBwYXR0ZXJuKGUpe3JldHVybiBuZXcgUGF0dGVybihlKX1zdGF0aWMgcGljdHVyZShlKXtyZXR1cm4gbmV3IFBpY3R1cmUoZSl9c3RhdGljIHByb3RvKGUpe3JldHVybiBuZXcgUHJvdG8oZSl9c3RhdGljIHJhZGlhbChlKXtyZXR1cm4gbmV3IFJhZGlhbChlKX1zdGF0aWMgcmVhc29uKGUpe3JldHVybiBuZXcgUmVhc29uKGUpfXN0YXRpYyByZWFzb25zKGUpe3JldHVybiBuZXcgUmVhc29ucyhlKX1zdGF0aWMgcmVjdGFuZ2xlKGUpe3JldHVybiBuZXcgUmVjdGFuZ2xlKGUpfXN0YXRpYyByZWYoZSl7cmV0dXJuIG5ldyBSZWZFbGVtZW50KGUpfXN0YXRpYyBzY3JpcHQoZSl7cmV0dXJuIG5ldyBTY3JpcHQoZSl9c3RhdGljIHNldFByb3BlcnR5KGUpe3JldHVybiBuZXcgU2V0UHJvcGVydHkoZSl9c3RhdGljIHNpZ25EYXRhKGUpe3JldHVybiBuZXcgU2lnbkRhdGEoZSl9c3RhdGljIHNpZ25hdHVyZShlKXtyZXR1cm4gbmV3IFNpZ25hdHVyZShlKX1zdGF0aWMgc2lnbmluZyhlKXtyZXR1cm4gbmV3IFNpZ25pbmcoZSl9c3RhdGljIHNvbGlkKGUpe3JldHVybiBuZXcgU29saWQoZSl9c3RhdGljIHNwZWFrKGUpe3JldHVybiBuZXcgU3BlYWsoZSl9c3RhdGljIHN0aXBwbGUoZSl7cmV0dXJuIG5ldyBTdGlwcGxlKGUpfXN0YXRpYyBzdWJmb3JtKGUpe3JldHVybiBuZXcgU3ViZm9ybShlKX1zdGF0aWMgc3ViZm9ybVNldChlKXtyZXR1cm4gbmV3IFN1YmZvcm1TZXQoZSl9c3RhdGljIHN1YmplY3RETihlKXtyZXR1cm4gbmV3IFN1YmplY3RETihlKX1zdGF0aWMgc3ViamVjdEROcyhlKXtyZXR1cm4gbmV3IFN1YmplY3RETnMoZSl9c3RhdGljIHN1Ym1pdChlKXtyZXR1cm4gbmV3IFN1Ym1pdChlKX1zdGF0aWMgdGVtcGxhdGUoZSl7cmV0dXJuIG5ldyBUZW1wbGF0ZShlKX1zdGF0aWMgdGV4dChlKXtyZXR1cm4gbmV3IFRleHQoZSl9c3RhdGljIHRleHRFZGl0KGUpe3JldHVybiBuZXcgVGV4dEVkaXQoZSl9c3RhdGljIHRpbWUoZSl7cmV0dXJuIG5ldyBUaW1lKGUpfXN0YXRpYyB0aW1lU3RhbXAoZSl7cmV0dXJuIG5ldyBUaW1lU3RhbXAoZSl9c3RhdGljIHRvb2xUaXAoZSl7cmV0dXJuIG5ldyBUb29sVGlwKGUpfXN0YXRpYyB0cmF2ZXJzYWwoZSl7cmV0dXJuIG5ldyBUcmF2ZXJzYWwoZSl9c3RhdGljIHRyYXZlcnNlKGUpe3JldHVybiBuZXcgVHJhdmVyc2UoZSl9c3RhdGljIHVpKGUpe3JldHVybiBuZXcgVWkoZSl9c3RhdGljIHZhbGlkYXRlKGUpe3JldHVybiBuZXcgVmFsaWRhdGUoZSl9c3RhdGljIHZhbHVlKGUpe3JldHVybiBuZXcgVmFsdWUoZSl9c3RhdGljIHZhcmlhYmxlcyhlKXtyZXR1cm4gbmV3IFZhcmlhYmxlcyhlKX19dC5UZW1wbGF0ZU5hbWVzcGFjZT1UZW1wbGF0ZU5hbWVzcGFjZX0sKGUsdCxhKT0+e3ZhciByPWEoMyksbj1hKDQpLGk9YSgyNCkscz1hKDExKSxvPWEoNDUpLmYsYz1hKDM5KSxsPWEoMjMzKSxoPWEoNzUpLHU9YSg3NiksZD1hKDIzNCksZj1hKDgyKSxnPWEoNikscD1hKDM2KSxtPSJET01FeGNlcHRpb24iLGI9aSgiRXJyb3IiKSx5PWkobSksdz1mdW5jdGlvbiBET01FeGNlcHRpb24oKXtsKHRoaXMsUyk7dmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PXUoZTwxP3ZvaWQgMDphcmd1bWVudHNbMF0pLGE9dShlPDI/dm9pZCAwOmFyZ3VtZW50c1sxXSwiRXJyb3IiKSxyPW5ldyB5KHQsYSksbj1iKHQpO24ubmFtZT1tO28ociwic3RhY2siLHMoMSxmKG4uc3RhY2ssMSkpKTtoKHIsdGhpcyx3KTtyZXR1cm4gcn0sUz13LnByb3RvdHlwZT15LnByb3RvdHlwZSx4PSJzdGFjayJpbiBiKG0pLEM9InN0YWNrImluIG5ldyB5KDEsMiksdj15JiZnJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sbSksaz0hKCF2fHx2LndyaXRhYmxlJiZ2LmNvbmZpZ3VyYWJsZSksTz14JiYhayYmIUM7cih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDpwfHxPfSx7RE9NRXhjZXB0aW9uOk8/dzp5fSk7dmFyIFQ9aShtKSxNPVQucHJvdG90eXBlO2lmKE0uY29uc3RydWN0b3IhPT1UKXtwfHxvKE0sImNvbnN0cnVjdG9yIixzKDEsVCkpO2Zvcih2YXIgRSBpbiBkKWlmKGMoZCxFKSl7dmFyIEQ9ZFtFXSxSPUQucztjKFQsUil8fG8oVCxSLHMoNixELmMpKX19fSwoZSx0LGEpPT57dmFyIHI9YSgyNSksbj1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYocih0LGUpKXJldHVybiBlO3Rocm93IG4oIkluY29ycmVjdCBpbnZvY2F0aW9uIil9fSxlPT57ZS5leHBvcnRzPXtJbmRleFNpemVFcnJvcjp7czoiSU5ERVhfU0laRV9FUlIiLGM6MSxtOjF9LERPTVN0cmluZ1NpemVFcnJvcjp7czoiRE9NU1RSSU5HX1NJWkVfRVJSIixjOjIsbTowfSxIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6e3M6IkhJRVJBUkNIWV9SRVFVRVNUX0VSUiIsYzozLG06MX0sV3JvbmdEb2N1bWVudEVycm9yOntzOiJXUk9OR19ET0NVTUVOVF9FUlIiLGM6NCxtOjF9LEludmFsaWRDaGFyYWN0ZXJFcnJvcjp7czoiSU5WQUxJRF9DSEFSQUNURVJfRVJSIixjOjUsbToxfSxOb0RhdGFBbGxvd2VkRXJyb3I6e3M6Ik5PX0RBVEFfQUxMT1dFRF9FUlIiLGM6NixtOjB9LE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOntzOiJOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIiLGM6NyxtOjF9LE5vdEZvdW5kRXJyb3I6e3M6Ik5PVF9GT1VORF9FUlIiLGM6OCxtOjF9LE5vdFN1cHBvcnRlZEVycm9yOntzOiJOT1RfU1VQUE9SVEVEX0VSUiIsYzo5LG06MX0sSW5Vc2VBdHRyaWJ1dGVFcnJvcjp7czoiSU5VU0VfQVRUUklCVVRFX0VSUiIsYzoxMCxtOjF9LEludmFsaWRTdGF0ZUVycm9yOntzOiJJTlZBTElEX1NUQVRFX0VSUiIsYzoxMSxtOjF9LFN5bnRheEVycm9yOntzOiJTWU5UQVhfRVJSIixjOjEyLG06MX0sSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yOntzOiJJTlZBTElEX01PRElGSUNBVElPTl9FUlIiLGM6MTMsbToxfSxOYW1lc3BhY2VFcnJvcjp7czoiTkFNRVNQQUNFX0VSUiIsYzoxNCxtOjF9LEludmFsaWRBY2Nlc3NFcnJvcjp7czoiSU5WQUxJRF9BQ0NFU1NfRVJSIixjOjE1LG06MX0sVmFsaWRhdGlvbkVycm9yOntzOiJWQUxJREFUSU9OX0VSUiIsYzoxNixtOjB9LFR5cGVNaXNtYXRjaEVycm9yOntzOiJUWVBFX01JU01BVENIX0VSUiIsYzoxNyxtOjF9LFNlY3VyaXR5RXJyb3I6e3M6IlNFQ1VSSVRZX0VSUiIsYzoxOCxtOjF9LE5ldHdvcmtFcnJvcjp7czoiTkVUV09SS19FUlIiLGM6MTksbToxfSxBYm9ydEVycm9yOntzOiJBQk9SVF9FUlIiLGM6MjAsbToxfSxVUkxNaXNtYXRjaEVycm9yOntzOiJVUkxfTUlTTUFUQ0hfRVJSIixjOjIxLG06MX0sUXVvdGFFeGNlZWRlZEVycm9yOntzOiJRVU9UQV9FWENFRURFRF9FUlIiLGM6MjIsbToxfSxUaW1lb3V0RXJyb3I6e3M6IlRJTUVPVVRfRVJSIixjOjIzLG06MX0sSW52YWxpZE5vZGVUeXBlRXJyb3I6e3M6IklOVkFMSURfTk9ERV9UWVBFX0VSUiIsYzoyNCxtOjF9LERhdGFDbG9uZUVycm9yOntzOiJEQVRBX0NMT05FX0VSUiIsYzoyNSxtOjF9fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OYW1lc3BhY2VJZHM9dC4kYnVpbGRYRkFPYmplY3Q9dm9pZCAwO2NvbnN0IGE9U3ltYm9sKCk7dC4kYnVpbGRYRkFPYmplY3Q9YTt0Lk5hbWVzcGFjZUlkcz17Y29uZmlnOntpZDowLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94Y2kvIil9LGNvbm5lY3Rpb25TZXQ6e2lkOjEsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1jb25uZWN0aW9uLXNldC8iKX0sZGF0YXNldHM6e2lkOjIsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLyIpfSxmb3JtOntpZDozLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZm9ybS8iKX0sbG9jYWxlU2V0OntpZDo0LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtbG9jYWxlLXNldC8iKX0scGRmOntpZDo1LGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3hkcC9wZGYvIj09PWV9LHNpZ25hdHVyZTp7aWQ6NixjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI9PT1lfSxzb3VyY2VTZXQ6e2lkOjcsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1zb3VyY2Utc2V0LyIpfSxzdHlsZXNoZWV0OntpZDo4LGNoZWNrOmU9PiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPT09ZX0sdGVtcGxhdGU6e2lkOjksY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS10ZW1wbGF0ZS8iKX0seGRjOntpZDoxMCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGRjLyIpfSx4ZHA6e2lkOjExLGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3hkcC8iPT09ZX0seGZkZjp7aWQ6MTIsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi8iPT09ZX0seGh0bWw6e2lkOjEzLGNoZWNrOmU9PiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj09PWV9LHhtcG1ldGE6e2lkOjE0LGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3htcG1ldGEvIj09PWV9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmFkZEhUTUw9ZnVuY3Rpb24gYWRkSFRNTChlLHQsYSl7Y29uc3QgaT1lW3IuJGV4dHJhXSxzPWkuYXZhaWxhYmxlU3BhY2UsW28sYyxsLGhdPWE7c3dpdGNoKGUubGF5b3V0KXtjYXNlInBvc2l0aW9uIjppLndpZHRoPU1hdGgubWF4KGkud2lkdGgsbytsKTtpLmhlaWdodD1NYXRoLm1heChpLmhlaWdodCxjK2gpO2kuY2hpbGRyZW4ucHVzaCh0KTticmVhaztjYXNlImxyLXRiIjpjYXNlInJsLXRiIjppZighaS5saW5lfHwxPT09aS5hdHRlbXB0KXtpLmxpbmU9Y3JlYXRlTGluZShlLFtdKTtpLmNoaWxkcmVuLnB1c2goaS5saW5lKTtpLm51bWJlckluTGluZT0wfWkubnVtYmVySW5MaW5lKz0xO2kubGluZS5jaGlsZHJlbi5wdXNoKHQpO2lmKDA9PT1pLmF0dGVtcHQpe2kuY3VycmVudFdpZHRoKz1sO2kuaGVpZ2h0PU1hdGgubWF4KGkuaGVpZ2h0LGkucHJldkhlaWdodCtoKX1lbHNle2kuY3VycmVudFdpZHRoPWw7aS5wcmV2SGVpZ2h0PWkuaGVpZ2h0O2kuaGVpZ2h0Kz1oO2kuYXR0ZW1wdD0wfWkud2lkdGg9TWF0aC5tYXgoaS53aWR0aCxpLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93Ijp7aS5jaGlsZHJlbi5wdXNoKHQpO2kud2lkdGgrPWw7aS5oZWlnaHQ9TWF0aC5tYXgoaS5oZWlnaHQsaCk7Y29uc3QgZT0oMCxuLm1lYXN1cmVUb1N0cmluZykoaS5oZWlnaHQpO2Zvcihjb25zdCB0IG9mIGkuY2hpbGRyZW4pdC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1lO2JyZWFrfWNhc2UidGFibGUiOmNhc2UidGIiOmkud2lkdGg9TWF0aC5taW4ocy53aWR0aCxNYXRoLm1heChpLndpZHRoLGwpKTtpLmhlaWdodCs9aDtpLmNoaWxkcmVuLnB1c2godCl9fTt0LmNoZWNrRGltZW5zaW9ucz1mdW5jdGlvbiBjaGVja0RpbWVuc2lvbnMoZSx0KXtpZihudWxsPT09ZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlKXJldHVybiEwO2lmKDA9PT1lLnd8fDA9PT1lLmgpcmV0dXJuITA7Y29uc3QgYT1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCksbj1hW3IuJGV4dHJhXT8uYXR0ZW1wdHx8MCxbLGkscyxvXT1mdW5jdGlvbiBnZXRUcmFuc2Zvcm1lZEJCb3goZSl7bGV0IHQsYSxyPSIiPT09ZS53P05hTjplLncsbj0iIj09PWUuaD9OYU46ZS5oLFtpLHNdPVswLDBdO3N3aXRjaChlLmFuY2hvclR5cGV8fCIiKXtjYXNlImJvdHRvbUNlbnRlciI6W2ksc109W3IvMixuXTticmVhaztjYXNlImJvdHRvbUxlZnQiOltpLHNdPVswLG5dO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOltpLHNdPVtyLG5dO2JyZWFrO2Nhc2UibWlkZGxlQ2VudGVyIjpbaSxzXT1bci8yLG4vMl07YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjpbaSxzXT1bMCxuLzJdO2JyZWFrO2Nhc2UibWlkZGxlUmlnaHQiOltpLHNdPVtyLG4vMl07YnJlYWs7Y2FzZSJ0b3BDZW50ZXIiOltpLHNdPVtyLzIsMF07YnJlYWs7Y2FzZSJ0b3BSaWdodCI6W2ksc109W3IsMF19c3dpdGNoKGUucm90YXRlfHwwKXtjYXNlIDA6W3QsYV09Wy1pLC1zXTticmVhaztjYXNlIDkwOlt0LGFdPVstcyxpXTtbcixuXT1bbiwtcl07YnJlYWs7Y2FzZSAxODA6W3QsYV09W2ksc107W3Isbl09Wy1yLC1uXTticmVhaztjYXNlIDI3MDpbdCxhXT1bcywtaV07W3Isbl09Wy1uLHJdfXJldHVybltlLngrdCtNYXRoLm1pbigwLHIpLGUueSthK01hdGgubWluKDAsbiksTWF0aC5hYnMociksTWF0aC5hYnMobildfShlKTtzd2l0Y2goYS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09bj9lW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPyIiIT09ZS53P01hdGgucm91bmQocy10LndpZHRoKTw9Mjp0LndpZHRoPjI6ISgiIiE9PWUuaCYmTWF0aC5yb3VuZChvLXQuaGVpZ2h0KT4yKSYmKCIiIT09ZS53P01hdGgucm91bmQocy10LndpZHRoKTw9Mnx8MD09PWFbci4kZXh0cmFdLm51bWJlckluTGluZSYmdC5oZWlnaHQ+Mjp0LndpZHRoPjIpOiEhZVtyLiRnZXRUZW1wbGF0ZVJvb3RdKClbci4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8ISgiIiE9PWUuaCYmTWF0aC5yb3VuZChvLXQuaGVpZ2h0KT4yKSYmKCgiIj09PWUud3x8TWF0aC5yb3VuZChzLXQud2lkdGgpPD0yfHwhYVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKSYmdC5oZWlnaHQ+Mik7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cmV0dXJuISFlW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlfHwoIiI9PT1lLmh8fGVbci4kaXNTcGxpdHRhYmxlXSgpPygiIj09PWUud3x8TWF0aC5yb3VuZChzLXQud2lkdGgpPD0yfHwhYVtyLiRpc1RoZXJlTW9yZVdpZHRoXSgpKSYmdC5oZWlnaHQ+MjpNYXRoLnJvdW5kKG8tdC5oZWlnaHQpPD0yKTtjYXNlInBvc2l0aW9uIjppZihlW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXJldHVybiEwO2lmKCIiPT09ZS5ofHxNYXRoLnJvdW5kKG8raS10LmhlaWdodCk8PTIpcmV0dXJuITA7cmV0dXJuIG8raT5lW3IuJGdldFRlbXBsYXRlUm9vdF0oKVtyLiRleHRyYV0uY3VycmVudENvbnRlbnRBcmVhLmg7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm4hIWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8TWF0aC5yb3VuZChvLXQuaGVpZ2h0KTw9Mik7ZGVmYXVsdDpyZXR1cm4hMH19O3QuZmx1c2hIVE1MPWZ1bmN0aW9uIGZsdXNoSFRNTChlKXtpZighZVtyLiRleHRyYV0pcmV0dXJuIG51bGw7Y29uc3QgdD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmVbci4kZXh0cmFdLmF0dHJpYnV0ZXMsY2hpbGRyZW46ZVtyLiRleHRyYV0uY2hpbGRyZW59O2lmKGVbci4kZXh0cmFdLmZhaWxpbmdOb2RlKXtjb25zdCBhPWVbci4kZXh0cmFdLmZhaWxpbmdOb2RlW3IuJGZsdXNoSFRNTF0oKTthJiYoZS5sYXlvdXQuZW5kc1dpdGgoIi10YiIpP3QuY2hpbGRyZW4ucHVzaChjcmVhdGVMaW5lKGUsW2FdKSk6dC5jaGlsZHJlbi5wdXNoKGEpKX1pZigwPT09dC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIG51bGw7cmV0dXJuIHR9O3QuZ2V0QXZhaWxhYmxlU3BhY2U9ZnVuY3Rpb24gZ2V0QXZhaWxhYmxlU3BhY2UoZSl7Y29uc3QgdD1lW3IuJGV4dHJhXS5hdmFpbGFibGVTcGFjZSxhPWUubWFyZ2luP2UubWFyZ2luLnRvcEluc2V0K2UubWFyZ2luLmJvdHRvbUluc2V0OjAsbj1lLm1hcmdpbj9lLm1hcmdpbi5sZWZ0SW5zZXQrZS5tYXJnaW4ucmlnaHRJbnNldDowO3N3aXRjaChlLmxheW91dCl7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cmV0dXJuIDA9PT1lW3IuJGV4dHJhXS5hdHRlbXB0P3t3aWR0aDp0LndpZHRoLW4tZVtyLiRleHRyYV0uY3VycmVudFdpZHRoLGhlaWdodDp0LmhlaWdodC1hLWVbci4kZXh0cmFdLnByZXZIZWlnaHR9Ont3aWR0aDp0LndpZHRoLW4saGVpZ2h0OnQuaGVpZ2h0LWEtZVtyLiRleHRyYV0uaGVpZ2h0fTtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybnt3aWR0aDplW3IuJGV4dHJhXS5jb2x1bW5XaWR0aHMuc2xpY2UoZVtyLiRleHRyYV0uY3VycmVudENvbHVtbikucmVkdWNlKCgoZSx0KT0+ZSt0KSksaGVpZ2h0OnQuaGVpZ2h0LW59O2Nhc2UidGFibGUiOmNhc2UidGIiOnJldHVybnt3aWR0aDp0LndpZHRoLW4saGVpZ2h0OnQuaGVpZ2h0LWEtZVtyLiRleHRyYV0uaGVpZ2h0fTtkZWZhdWx0OnJldHVybiB0fX07YSgxNDApO3ZhciByPWEoMjI5KSxuPWEoMjM3KTtmdW5jdGlvbiBjcmVhdGVMaW5lKGUsdCl7cmV0dXJue25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJsci10YiI9PT1lLmxheW91dD8ieGZhTHIiOiJ4ZmFSbCJdfSxjaGlsZHJlbjp0fX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5jb21wdXRlQmJveD1mdW5jdGlvbiBjb21wdXRlQmJveChlLHQsYSl7bGV0IG47aWYoIiIhPT1lLncmJiIiIT09ZS5oKW49W2UueCxlLnksZS53LGUuaF07ZWxzZXtpZighYSlyZXR1cm4gbnVsbDtsZXQgaT1lLnc7aWYoIiI9PT1pKXtpZigwPT09ZS5tYXhXKXtjb25zdCB0PWVbci4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpPSJwb3NpdGlvbiI9PT10LmxheW91dCYmIiIhPT10Lnc/MDplLm1pbld9ZWxzZSBpPU1hdGgubWluKGUubWF4VyxhLndpZHRoKTt0LmF0dHJpYnV0ZXMuc3R5bGUud2lkdGg9bWVhc3VyZVRvU3RyaW5nKGkpfWxldCBzPWUuaDtpZigiIj09PXMpe2lmKDA9PT1lLm1heEgpe2NvbnN0IHQ9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO3M9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQuaD8wOmUubWluSH1lbHNlIHM9TWF0aC5taW4oZS5tYXhILGEuaGVpZ2h0KTt0LmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhzKX1uPVtlLngsZS55LGksc119cmV0dXJuIG59O3QuY3JlYXRlV3JhcHBlcj1mdW5jdGlvbiBjcmVhdGVXcmFwcGVyKGUsdCl7Y29uc3R7YXR0cmlidXRlczphfT10LHtzdHlsZTpufT1hLGk9e25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFXcmFwcGVyIl0sc3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sY2hpbGRyZW46W119O2EuY2xhc3MucHVzaCgieGZhV3JhcHBlZCIpO2lmKGUuYm9yZGVyKXtjb25zdHt3aWR0aHM6YSxpbnNldHM6c309ZS5ib3JkZXJbci4kZXh0cmFdO2xldCBvLGMsbD1zWzBdLGg9c1szXTtjb25zdCB1PXNbMF0rc1syXSxkPXNbMV0rc1szXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpsLT1hWzBdLzI7aC09YVszXS8yO289YGNhbGMoMTAwJSArICR7KGFbMV0rYVszXSkvMi1kfXB4KWA7Yz1gY2FsYygxMDAlICsgJHsoYVswXSthWzJdKS8yLXV9cHgpYDticmVhaztjYXNlImxlZnQiOmwtPWFbMF07aC09YVszXTtvPWBjYWxjKDEwMCUgKyAke2FbMV0rYVszXS1kfXB4KWA7Yz1gY2FsYygxMDAlICsgJHthWzBdK2FbMl0tdX1weClgO2JyZWFrO2Nhc2UicmlnaHQiOm89ZD9gY2FsYygxMDAlIC0gJHtkfXB4KWA6IjEwMCUiO2M9dT9gY2FsYygxMDAlIC0gJHt1fXB4KWA6IjEwMCUifWNvbnN0IGY9WyJ4ZmFCb3JkZXIiXTtpc1ByaW50T25seShlLmJvcmRlcikmJmYucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgZz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpmLHN0eWxlOnt0b3A6YCR7bH1weGAsbGVmdDpgJHtofXB4YCx3aWR0aDpvLGhlaWdodDpjfX0sY2hpbGRyZW46W119O2Zvcihjb25zdCBlIG9mWyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXSlpZih2b2lkIDAhPT1uW2VdKXtnLmF0dHJpYnV0ZXMuc3R5bGVbZV09bltlXTtkZWxldGUgbltlXX1pLmNoaWxkcmVuLnB1c2goZyx0KX1lbHNlIGkuY2hpbGRyZW4ucHVzaCh0KTtmb3IoY29uc3QgZSBvZlsiYmFja2dyb3VuZCIsImJhY2tncm91bmRDbGlwIiwidG9wIiwibGVmdCIsIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybU9yaWdpbiIsInZpc2liaWxpdHkiXSlpZih2b2lkIDAhPT1uW2VdKXtpLmF0dHJpYnV0ZXMuc3R5bGVbZV09bltlXTtkZWxldGUgbltlXX1pLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIj09PW4ucG9zaXRpb24/ImFic29sdXRlIjoicmVsYXRpdmUiO2RlbGV0ZSBuLnBvc2l0aW9uO2lmKG4uYWxpZ25TZWxmKXtpLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPW4uYWxpZ25TZWxmO2RlbGV0ZSBuLmFsaWduU2VsZn1yZXR1cm4gaX07dC5maXhEaW1lbnNpb25zPWZ1bmN0aW9uIGZpeERpbWVuc2lvbnMoZSl7Y29uc3QgdD1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYodC5sYXlvdXQ/LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgYT10W3IuJGV4dHJhXSxuPWUuY29sU3BhbjtsZXQgaTtpPS0xPT09bj9hLmNvbHVtbldpZHRocy5zbGljZShhLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk6YS5jb2x1bW5XaWR0aHMuc2xpY2UoYS5jdXJyZW50Q29sdW1uLGEuY3VycmVudENvbHVtbituKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO2lzTmFOKGkpfHwoZS53PWkpfXQubGF5b3V0JiYicG9zaXRpb24iIT09dC5sYXlvdXQmJihlLng9ZS55PTApOyJ0YWJsZSI9PT1lLmxheW91dCYmIiI9PT1lLncmJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5XaWR0aHMpJiYoZS53PWUuY29sdW1uV2lkdGhzLnJlZHVjZSgoKGUsdCk9PmUrdCksMCkpfTt0LmZpeFRleHRJbmRlbnQ9ZnVuY3Rpb24gZml4VGV4dEluZGVudChlKXtjb25zdCB0PSgwLGkuZ2V0TWVhc3VyZW1lbnQpKGUudGV4dEluZGVudCwiMHB4Iik7aWYodD49MClyZXR1cm47Y29uc3QgYT0icGFkZGluZyIrKCJsZWZ0Ij09KCJyaWdodCI9PT1lLnRleHRBbGlnbj8icmlnaHQiOiJsZWZ0Iik/IkxlZnQiOiJSaWdodCIpLHI9KDAsaS5nZXRNZWFzdXJlbWVudCkoZVthXSwiMHB4Iik7ZVthXT1yLXQrInB4In07dC5maXhVUkw9ZnVuY3Rpb24gZml4VVJMKGUpe2NvbnN0IHQ9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShlLG51bGwse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtyZXR1cm4gdD90LmhyZWY6bnVsbH07dC5pc1ByaW50T25seT1pc1ByaW50T25seTt0LmxheW91dENsYXNzPWZ1bmN0aW9uIGxheW91dENsYXNzKGUpe3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6ZGVmYXVsdDpyZXR1cm4ieGZhUG9zaXRpb24iO2Nhc2UibHItdGIiOnJldHVybiJ4ZmFMclRiIjtjYXNlInJsLXJvdyI6cmV0dXJuInhmYVJsUm93IjtjYXNlInJsLXRiIjpyZXR1cm4ieGZhUmxUYiI7Y2FzZSJyb3ciOnJldHVybiJ4ZmFSb3ciO2Nhc2UidGFibGUiOnJldHVybiJ4ZmFUYWJsZSI7Y2FzZSJ0YiI6cmV0dXJuInhmYVRiIn19O3QubGF5b3V0Tm9kZT1mdW5jdGlvbiBsYXlvdXROb2RlKGUsdCl7bGV0IGE9bnVsbCxuPW51bGwsaT0hMTtpZigoIWUud3x8IWUuaCkmJmUudmFsdWUpe2xldCBzPTAsbz0wO2lmKGUubWFyZ2luKXtzPWUubWFyZ2luLmxlZnRJbnNldCtlLm1hcmdpbi5yaWdodEluc2V0O289ZS5tYXJnaW4udG9wSW5zZXQrZS5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IGM9bnVsbCxsPW51bGw7aWYoZS5wYXJhKXtsPU9iamVjdC5jcmVhdGUobnVsbCk7Yz0iIj09PWUucGFyYS5saW5lSGVpZ2h0P251bGw6ZS5wYXJhLmxpbmVIZWlnaHQ7bC50b3A9IiI9PT1lLnBhcmEuc3BhY2VBYm92ZT8wOmUucGFyYS5zcGFjZUFib3ZlO2wuYm90dG9tPSIiPT09ZS5wYXJhLnNwYWNlQmVsb3c/MDplLnBhcmEuc3BhY2VCZWxvdztsLmxlZnQ9IiI9PT1lLnBhcmEubWFyZ2luTGVmdD8wOmUucGFyYS5tYXJnaW5MZWZ0O2wucmlnaHQ9IiI9PT1lLnBhcmEubWFyZ2luUmlnaHQ/MDplLnBhcmEubWFyZ2luUmlnaHR9bGV0IGg9ZS5mb250O2lmKCFoKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpO2xldCBhPWVbci4kZ2V0UGFyZW50XSgpO2Zvcig7YSYmYSE9PXQ7KXtpZihhLmZvbnQpe2g9YS5mb250O2JyZWFrfWE9YVtyLiRnZXRQYXJlbnRdKCl9fWNvbnN0IHU9KGUud3x8dC53aWR0aCktcyxkPWVbci4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcjtpZihlLnZhbHVlLmV4RGF0YSYmZS52YWx1ZS5leERhdGFbci4kY29udGVudF0mJiJ0ZXh0L2h0bWwiPT09ZS52YWx1ZS5leERhdGEuY29udGVudFR5cGUpe2NvbnN0IHQ9bGF5b3V0VGV4dChlLnZhbHVlLmV4RGF0YVtyLiRjb250ZW50XSxoLGwsYyxkLHUpO249dC53aWR0aDthPXQuaGVpZ2h0O2k9dC5pc0Jyb2tlbn1lbHNle2NvbnN0IHQ9ZS52YWx1ZVtyLiR0ZXh0XSgpO2lmKHQpe2NvbnN0IGU9bGF5b3V0VGV4dCh0LGgsbCxjLGQsdSk7bj1lLndpZHRoO2E9ZS5oZWlnaHQ7aT1lLmlzQnJva2VufX1udWxsPT09bnx8ZS53fHwobis9cyk7bnVsbD09PWF8fGUuaHx8KGErPW8pfXJldHVybnt3Om4saDphLGlzQnJva2VuOml9fTt0Lm1lYXN1cmVUb1N0cmluZz1tZWFzdXJlVG9TdHJpbmc7dC5zZXRBY2Nlc3M9ZnVuY3Rpb24gc2V0QWNjZXNzKGUsdCl7c3dpdGNoKGUuYWNjZXNzKXtjYXNlIm5vbkludGVyYWN0aXZlIjp0LnB1c2goInhmYU5vbkludGVyYWN0aXZlIik7YnJlYWs7Y2FzZSJyZWFkT25seSI6dC5wdXNoKCJ4ZmFSZWFkT25seSIpO2JyZWFrO2Nhc2UicHJvdGVjdGVkIjp0LnB1c2goInhmYURpc2FibGVkIil9fTt0LnNldEZvbnRGYW1pbHk9ZnVuY3Rpb24gc2V0Rm9udEZhbWlseShlLHQsYSxyKXtpZighYSl7ZGVsZXRlIHIuZm9udEZhbWlseTtyZXR1cm59Y29uc3Qgbj0oMCxpLnN0cmlwUXVvdGVzKShlLnR5cGVmYWNlKTtyLmZvbnRGYW1pbHk9YCIke259ImA7Y29uc3Qgbz1hLmZpbmQobik7aWYobyl7Y29uc3R7Zm9udEZhbWlseTphfT1vLnJlZ3VsYXIuY3NzRm9udEluZm87YSE9PW4mJihyLmZvbnRGYW1pbHk9YCIke2F9ImApO2NvbnN0IGk9Z2V0Q3VycmVudFBhcmEodCk7aWYoaSYmIiIhPT1pLmxpbmVIZWlnaHQpcmV0dXJuO2lmKHIubGluZUhlaWdodClyZXR1cm47Y29uc3QgYz0oMCxzLnNlbGVjdEZvbnQpKGUsbyk7YyYmKHIubGluZUhlaWdodD1NYXRoLm1heCgxLjIsYy5saW5lSGVpZ2h0KSl9fTt0LnNldE1pbk1heERpbWVuc2lvbnM9ZnVuY3Rpb24gc2V0TWluTWF4RGltZW5zaW9ucyhlLHQpe2lmKCJwb3NpdGlvbiI9PT1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCkubGF5b3V0KXtlLm1pblc+MCYmKHQubWluV2lkdGg9bWVhc3VyZVRvU3RyaW5nKGUubWluVykpO2UubWF4Vz4wJiYodC5tYXhXaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5tYXhXKSk7ZS5taW5IPjAmJih0Lm1pbkhlaWdodD1tZWFzdXJlVG9TdHJpbmcoZS5taW5IKSk7ZS5tYXhIPjAmJih0Lm1heEhlaWdodD1tZWFzdXJlVG9TdHJpbmcoZS5tYXhIKSl9fTt0LnNldFBhcmE9ZnVuY3Rpb24gc2V0UGFyYShlLHQsYSl7aWYoYS5hdHRyaWJ1dGVzLmNsYXNzPy5pbmNsdWRlcygieGZhUmljaCIpKXtpZih0KXsiIj09PWUuaCYmKHQuaGVpZ2h0PSJhdXRvIik7IiI9PT1lLncmJih0LndpZHRoPSJhdXRvIil9Y29uc3Qgbj1nZXRDdXJyZW50UGFyYShlKTtpZihuKXtjb25zdCBlPWEuYXR0cmlidXRlcy5zdHlsZTtlLmRpc3BsYXk9ImZsZXgiO2UuZmxleERpcmVjdGlvbj0iY29sdW1uIjtzd2l0Y2gobi52QWxpZ24pe2Nhc2UidG9wIjplLmp1c3RpZnlDb250ZW50PSJzdGFydCI7YnJlYWs7Y2FzZSJib3R0b20iOmUuanVzdGlmeUNvbnRlbnQ9ImVuZCI7YnJlYWs7Y2FzZSJtaWRkbGUiOmUuanVzdGlmeUNvbnRlbnQ9ImNlbnRlciJ9Y29uc3QgdD1uW3IuJHRvU3R5bGVdKCk7Zm9yKGNvbnN0W2Escl1vZiBPYmplY3QuZW50cmllcyh0KSlhIGluIGV8fChlW2FdPXIpfX19O3QudG9TdHlsZT1mdW5jdGlvbiB0b1N0eWxlKGUpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShhPjE/YS0xOjApLHM9MTtzPGE7cysrKWlbcy0xXT1hcmd1bWVudHNbc107Zm9yKGNvbnN0IGEgb2YgaSl7Y29uc3QgaT1lW2FdO2lmKG51bGwhPT1pKWlmKGwuaGFzT3duUHJvcGVydHkoYSkpbFthXShlLHQpO2Vsc2UgaWYoaSBpbnN0YW5jZW9mIGMuWEZBT2JqZWN0KXtjb25zdCBlPWlbci4kdG9TdHlsZV0oKTtlP09iamVjdC5hc3NpZ24odCxlKTooMCxuLndhcm4pKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7YX0gbm90IGltcGxlbWVudGVkIHlldGApfX1yZXR1cm4gdH07YSgxNDApO3ZhciByPWEoMjI5KSxuPWEoMTQ1KSxpPWEoMjM4KSxzPWEoMjM5KSxvPWEoMjQwKSxjPWEoMjQxKTtmdW5jdGlvbiBtZWFzdXJlVG9TdHJpbmcoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyIwcHgiOk51bWJlci5pc0ludGVnZXIoZSk/YCR7ZX1weGA6YCR7ZS50b0ZpeGVkKDIpfXB4YH1jb25zdCBsPXthbmNob3JUeXBlKGUsdCl7Y29uc3QgYT1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYoYSYmKCFhLmxheW91dHx8InBvc2l0aW9uIj09PWEubGF5b3V0KSl7InRyYW5zZm9ybSJpbiB0fHwodC50cmFuc2Zvcm09IiIpO3N3aXRjaChlLmFuY2hvclR5cGUpe2Nhc2UiYm90dG9tQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLCAtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtMTAwJSkiO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC0xMDAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoMCwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTUwJSkiO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLDApIjticmVhaztjYXNlInRvcFJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwwKSJ9fX0sZGltZW5zaW9ucyhlLHQpe2NvbnN0IGE9ZVtyLiRnZXRTdWJmb3JtUGFyZW50XSgpO2xldCBuPWUudztjb25zdCBpPWUuaDtpZihhLmxheW91dD8uaW5jbHVkZXMoInJvdyIpKXtjb25zdCB0PWFbci4kZXh0cmFdLGk9ZS5jb2xTcGFuO2xldCBzO2lmKC0xPT09aSl7cz10LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7dC5jdXJyZW50Q29sdW1uPTB9ZWxzZXtzPXQuY29sdW1uV2lkdGhzLnNsaWNlKHQuY3VycmVudENvbHVtbix0LmN1cnJlbnRDb2x1bW4raSkucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKTt0LmN1cnJlbnRDb2x1bW49KHQuY3VycmVudENvbHVtbitlLmNvbFNwYW4pJXQuY29sdW1uV2lkdGhzLmxlbmd0aH1pc05hTihzKXx8KG49ZS53PXMpfXQud2lkdGg9IiIhPT1uP21lYXN1cmVUb1N0cmluZyhuKToiYXV0byI7dC5oZWlnaHQ9IiIhPT1pP21lYXN1cmVUb1N0cmluZyhpKToiYXV0byJ9LHBvc2l0aW9uKGUsdCl7Y29uc3QgYT1lW3IuJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYoIWE/LmxheW91dHx8InBvc2l0aW9uIj09PWEubGF5b3V0KXt0LnBvc2l0aW9uPSJhYnNvbHV0ZSI7dC5sZWZ0PW1lYXN1cmVUb1N0cmluZyhlLngpO3QudG9wPW1lYXN1cmVUb1N0cmluZyhlLnkpfX0scm90YXRlKGUsdCl7aWYoZS5yb3RhdGUpeyJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKTt0LnRyYW5zZm9ybSs9YHJvdGF0ZSgtJHtlLnJvdGF0ZX1kZWcpYDt0LnRyYW5zZm9ybU9yaWdpbj0idG9wIGxlZnQifX0scHJlc2VuY2UoZSx0KXtzd2l0Y2goZS5wcmVzZW5jZSl7Y2FzZSJpbnZpc2libGUiOnQudmlzaWJpbGl0eT0iaGlkZGVuIjticmVhaztjYXNlImhpZGRlbiI6Y2FzZSJpbmFjdGl2ZSI6dC5kaXNwbGF5PSJub25lIn19LGhBbGlnbihlLHQpe2lmKCJwYXJhIj09PWVbci4kbm9kZU5hbWVdKXN3aXRjaChlLmhBbGlnbil7Y2FzZSJqdXN0aWZ5QWxsIjp0LnRleHRBbGlnbj0ianVzdGlmeS1hbGwiO2JyZWFrO2Nhc2UicmFkaXgiOnQudGV4dEFsaWduPSJsZWZ0IjticmVhaztkZWZhdWx0OnQudGV4dEFsaWduPWUuaEFsaWdufWVsc2Ugc3dpdGNoKGUuaEFsaWduKXtjYXNlImxlZnQiOnQuYWxpZ25TZWxmPSJzdGFydCI7YnJlYWs7Y2FzZSJjZW50ZXIiOnQuYWxpZ25TZWxmPSJjZW50ZXIiO2JyZWFrO2Nhc2UicmlnaHQiOnQuYWxpZ25TZWxmPSJlbmQifX0sbWFyZ2luKGUsdCl7ZS5tYXJnaW4mJih0Lm1hcmdpbj1lLm1hcmdpbltyLiR0b1N0eWxlXSgpLm1hcmdpbil9fTtmdW5jdGlvbiBsYXlvdXRUZXh0KGUsdCxhLG4saSxzKXtjb25zdCBjPW5ldyBvLlRleHRNZWFzdXJlKHQsYSxuLGkpOyJzdHJpbmciPT10eXBlb2YgZT9jLmFkZFN0cmluZyhlKTplW3IuJHB1c2hHbHlwaHNdKGMpO3JldHVybiBjLmNvbXB1dGUocyl9ZnVuY3Rpb24gaXNQcmludE9ubHkoZSl7cmV0dXJuIGUucmVsZXZhbnQubGVuZ3RoPjAmJiFlLnJlbGV2YW50WzBdLmV4Y2x1ZGVkJiYicHJpbnQiPT09ZS5yZWxldmFudFswXS52aWV3bmFtZX1mdW5jdGlvbiBnZXRDdXJyZW50UGFyYShlKXtjb25zdCB0PWVbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5wYXJhU3RhY2s7cmV0dXJuIHQubGVuZ3RoP3QuYXQoLTEpOm51bGx9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuSFRNTFJlc3VsdD12b2lkIDA7dC5nZXRCQm94PWZ1bmN0aW9uIGdldEJCb3goZSl7Y29uc3QgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTtjb25zdCBhPWUudHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChlPT5nZXRNZWFzdXJlbWVudChlLCItMSIpKSk7aWYoYS5sZW5ndGg8NHx8YVsyXTwwfHxhWzNdPDApcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3RbcixuLGksc109YTtyZXR1cm57eDpyLHk6bix3aWR0aDppLGhlaWdodDpzfX07dC5nZXRDb2xvcj1mdW5jdGlvbiBnZXRDb2xvcihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwXSxbYSxyLG5dPXQ7aWYoIWUpcmV0dXJue3I6YSxnOnIsYjpufTtjb25zdCBpPWUudHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChlPT5NYXRoLm1pbihNYXRoLm1heCgwLHBhcnNlSW50KGUudHJpbSgpLDEwKSksMjU1KSkpLm1hcCgoZT0+aXNOYU4oZSk/MDplKSk7aWYoaS5sZW5ndGg8MylyZXR1cm57cjphLGc6cixiOm59O1thLHIsbl09aTtyZXR1cm57cjphLGc6cixiOm59fTt0LmdldEZsb2F0PWZ1bmN0aW9uIGdldEZsb2F0KGUpe2xldHtkYXRhOnQsZGVmYXVsdFZhbHVlOmEsdmFsaWRhdGU6cn09ZTtpZighdClyZXR1cm4gYTt0PXQudHJpbSgpO2NvbnN0IG49cGFyc2VGbG9hdCh0KTtpZighaXNOYU4obikmJnIobikpcmV0dXJuIG47cmV0dXJuIGF9O3QuZ2V0SW50ZWdlcj1mdW5jdGlvbiBnZXRJbnRlZ2VyKGUpe2xldHtkYXRhOnQsZGVmYXVsdFZhbHVlOmEsdmFsaWRhdGU6cn09ZTtpZighdClyZXR1cm4gYTt0PXQudHJpbSgpO2NvbnN0IG49cGFyc2VJbnQodCwxMCk7aWYoIWlzTmFOKG4pJiZyKG4pKXJldHVybiBuO3JldHVybiBhfTt0LmdldEtleXdvcmQ9Z2V0S2V5d29yZDt0LmdldE1lYXN1cmVtZW50PWdldE1lYXN1cmVtZW50O3QuZ2V0UmF0aW89ZnVuY3Rpb24gZ2V0UmF0aW8oZSl7aWYoIWUpcmV0dXJue251bToxLGRlbjoxfTtjb25zdCB0PWUudHJpbSgpLnNwbGl0KC9ccyo6XHMqLykubWFwKChlPT5wYXJzZUZsb2F0KGUpKSkuZmlsdGVyKChlPT4haXNOYU4oZSkpKTsxPT09dC5sZW5ndGgmJnQucHVzaCgxKTtpZigwPT09dC5sZW5ndGgpcmV0dXJue251bToxLGRlbjoxfTtjb25zdFthLHJdPXQ7cmV0dXJue251bTphLGRlbjpyfX07dC5nZXRSZWxldmFudD1mdW5jdGlvbiBnZXRSZWxldmFudChlKXtpZighZSlyZXR1cm5bXTtyZXR1cm4gZS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoZT0+KHtleGNsdWRlZDoiLSI9PT1lWzBdLHZpZXduYW1lOmUuc3Vic3RyaW5nKDEpfSkpKX07dC5nZXRTdHJpbmdPcHRpb249ZnVuY3Rpb24gZ2V0U3RyaW5nT3B0aW9uKGUsdCl7cmV0dXJuIGdldEtleXdvcmQoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dFswXSx2YWxpZGF0ZTplPT50LmluY2x1ZGVzKGUpfSl9O3Quc3RyaXBRdW90ZXM9ZnVuY3Rpb24gc3RyaXBRdW90ZXMoZSl7aWYoZS5zdGFydHNXaXRoKCInIil8fGUuc3RhcnRzV2l0aCgnIicpKXJldHVybiBlLnNsaWNlKDEsLTEpO3JldHVybiBlfTthKDE0MCk7dmFyIHI9YSgxNDUpO2NvbnN0IG49e3B0OmU9PmUsY206ZT0+ZS8yLjU0KjcyLG1tOmU9PmUvMjUuNCo3MixpbjplPT43MiplLHB4OmU9PmV9LGk9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBnZXRLZXl3b3JkKGUpe2xldHtkYXRhOnQsZGVmYXVsdFZhbHVlOmEsdmFsaWRhdGU6cn09ZTtpZighdClyZXR1cm4gYTt0PXQudHJpbSgpO3JldHVybiByKHQpP3Q6YX1mdW5jdGlvbiBnZXRNZWFzdXJlbWVudChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IjAiO3R8fD0iMCI7aWYoIWUpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0IGE9ZS50cmltKCkubWF0Y2goaSk7aWYoIWEpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0WyxyLHNdPWEsbz1wYXJzZUZsb2F0KHIpO2lmKGlzTmFOKG8pKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtpZigwPT09bylyZXR1cm4gMDtjb25zdCBjPW5bc107cmV0dXJuIGM/YyhvKTpvfWNsYXNzIEhUTUxSZXN1bHR7c3RhdGljIGdldCBGQUlMVVJFKCl7cmV0dXJuKDAsci5zaGFkb3cpKHRoaXMsIkZBSUxVUkUiLG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxudWxsKSl9c3RhdGljIGdldCBFTVBUWSgpe3JldHVybigwLHIuc2hhZG93KSh0aGlzLCJFTVBUWSIsbmV3IEhUTUxSZXN1bHQoITAsbnVsbCxudWxsLG51bGwpKX1jb25zdHJ1Y3RvcihlLHQsYSxyKXt0aGlzLnN1Y2Nlc3M9ZTt0aGlzLmh0bWw9dDt0aGlzLmJib3g9YTt0aGlzLmJyZWFrTm9kZT1yfWlzQnJlYWsoKXtyZXR1cm4hIXRoaXMuYnJlYWtOb2RlfXN0YXRpYyBicmVha05vZGUoZSl7cmV0dXJuIG5ldyBIVE1MUmVzdWx0KCExLG51bGwsbnVsbCxlKX1zdGF0aWMgc3VjY2VzcyhlKXtyZXR1cm4gbmV3IEhUTUxSZXN1bHQoITAsZSxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxudWxsKX19dC5IVE1MUmVzdWx0PUhUTUxSZXN1bHR9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Gb250RmluZGVyPXZvaWQgMDt0LmdldE1ldHJpY3M9ZnVuY3Rpb24gZ2V0TWV0cmljcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGE9bnVsbDtpZihlKXtjb25zdCB0PSgwLG4uc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpLGk9ZVtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmZpbmQodCk7YT1zZWxlY3RGb250KGUsaSl9aWYoIWEpcmV0dXJue2xpbmVIZWlnaHQ6MTIsbGluZUdhcDoyLGxpbmVOb0dhcDoxMH07Y29uc3QgaT1lLnNpemV8fDEwLHM9YS5saW5lSGVpZ2h0P01hdGgubWF4KHQ/MDoxLjIsYS5saW5lSGVpZ2h0KToxLjIsbz12b2lkIDA9PT1hLmxpbmVHYXA/LjI6YS5saW5lR2FwO3JldHVybntsaW5lSGVpZ2h0OnMqaSxsaW5lR2FwOm8qaSxsaW5lTm9HYXA6TWF0aC5tYXgoMSxzLW8pKml9fTt0LnNlbGVjdEZvbnQ9c2VsZWN0Rm9udDthKDExNik7YSgxMjcpO2EoMTI5KTthKDEzMik7YSgxMzQpO2EoMTM2KTthKDEzOCk7YSgxNDApO3ZhciByPWEoMjI5KSxuPWEoMjM4KSxpPWEoMTQ1KTt0LkZvbnRGaW5kZXI9Y2xhc3MgRm9udEZpbmRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmZvbnRzPW5ldyBNYXA7dGhpcy5jYWNoZT1uZXcgTWFwO3RoaXMud2FybmVkPW5ldyBTZXQ7dGhpcy5kZWZhdWx0Rm9udD1udWxsO3RoaXMuYWRkKGUpfWFkZChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtmb3IoY29uc3QgdCBvZiBlKXRoaXMuYWRkUGRmRm9udCh0KTtmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhcnx8KGUucmVndWxhcj1lLml0YWxpY3x8ZS5ib2xkfHxlLmJvbGRpdGFsaWMpO2lmKCF0fHwwPT09dC5zaXplKXJldHVybjtjb25zdCBhPXRoaXMuZm9udHMuZ2V0KCJQZGZKUy1GYWxsYmFjay1QZGZKUy1YRkEiKTtmb3IoY29uc3QgZSBvZiB0KXRoaXMuZm9udHMuc2V0KGUsYSl9YWRkUGRmRm9udChlKXtjb25zdCB0PWUuY3NzRm9udEluZm8sYT10LmZvbnRGYW1pbHk7bGV0IHI9dGhpcy5mb250cy5nZXQoYSk7aWYoIXIpe3I9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZvbnRzLnNldChhLHIpO3RoaXMuZGVmYXVsdEZvbnR8fCh0aGlzLmRlZmF1bHRGb250PXIpfWxldCBuPSIiO2NvbnN0IGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP249aT49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjppPj03MDAmJihuPSJib2xkIik7aWYoIW4peyhlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWU/LmluY2x1ZGVzKCJCb2xkIikpJiYobj0iYm9sZCIpOyhlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lPy5pbmNsdWRlcygiSXRhbGljIil8fGUucHNOYW1lPy5lbmRzV2l0aCgiSXQiKSkmJihuKz0iaXRhbGljIil9bnx8KG49InJlZ3VsYXIiKTtyW25dPWV9Z2V0RGVmYXVsdCgpe3JldHVybiB0aGlzLmRlZmF1bHRGb250fWZpbmQoZSl7bGV0IHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxhPXRoaXMuZm9udHMuZ2V0KGUpfHx0aGlzLmNhY2hlLmdldChlKTtpZihhKXJldHVybiBhO2NvbnN0IHI9Lyx8LXxffCB8Ym9sZGl0YWxpY3xib2xkfGl0YWxpY3xyZWd1bGFyfGl0L2dpO2xldCBuPWUucmVwbGFjZUFsbChyLCIiKTthPXRoaXMuZm9udHMuZ2V0KG4pO2lmKGEpe3RoaXMuY2FjaGUuc2V0KGUsYSk7cmV0dXJuIGF9bj1uLnRvTG93ZXJDYXNlKCk7Y29uc3Qgcz1bXTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZUFsbChyLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobikmJnMucHVzaCh0KTtpZigwPT09cy5sZW5ndGgpZm9yKGNvbnN0WyxlXW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVndWxhci5uYW1lPy5yZXBsYWNlQWxsKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKGUpO2lmKDA9PT1zLmxlbmd0aCl7bj1uLnJlcGxhY2VBbGwoL3BzbXR8bXQvZ2ksIiIpO2Zvcihjb25zdFtlLHRdb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpZS5yZXBsYWNlQWxsKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKHQpfWlmKDA9PT1zLmxlbmd0aClmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhci5uYW1lPy5yZXBsYWNlQWxsKHIsIiIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuKSYmcy5wdXNoKGUpO2lmKHMubGVuZ3RoPj0xKXsxIT09cy5sZW5ndGgmJnQmJigwLGkud2FybikoYFhGQSAtIFRvbyBtYW55IGNob2ljZXMgdG8gZ3Vlc3MgdGhlIGNvcnJlY3QgZm9udDogJHtlfWApO3RoaXMuY2FjaGUuc2V0KGUsc1swXSk7cmV0dXJuIHNbMF19aWYodCYmIXRoaXMud2FybmVkLmhhcyhlKSl7dGhpcy53YXJuZWQuYWRkKGUpOygwLGkud2FybikoYFhGQSAtIENhbm5vdCBmaW5kIHRoZSBmb250OiAke2V9YCl9cmV0dXJuIG51bGx9fTtmdW5jdGlvbiBzZWxlY3RGb250KGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuVGV4dE1lYXN1cmU9dm9pZCAwO2EoMTQwKTt2YXIgcj1hKDIzOSk7Y2xhc3MgRm9udEluZm97Y29uc3RydWN0b3IoZSx0LGEsbil7dGhpcy5saW5lSGVpZ2h0PWE7dGhpcy5wYXJhTWFyZ2luPXR8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH07aWYoIWUpe1t0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KG4pO3JldHVybn10aGlzLnhmYUZvbnQ9e3R5cGVmYWNlOmUudHlwZWZhY2UscG9zdHVyZTplLnBvc3R1cmUsd2VpZ2h0OmUud2VpZ2h0LHNpemU6ZS5zaXplLGxldHRlclNwYWNpbmc6ZS5sZXR0ZXJTcGFjaW5nfTtjb25zdCBpPW4uZmluZChlLnR5cGVmYWNlKTtpZihpKXt0aGlzLnBkZkZvbnQ9KDAsci5zZWxlY3RGb250KShlLGkpO3RoaXMucGRmRm9udHx8KFt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KG4pKX1lbHNlW3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQobil9ZGVmYXVsdEZvbnQoZSl7Y29uc3QgdD1lLmZpbmQoIkhlbHZldGljYSIsITEpfHxlLmZpbmQoIk15cmlhZCBQcm8iLCExKXx8ZS5maW5kKCJBcmlhbCIsITEpfHxlLmdldERlZmF1bHQoKTtpZih0Py5yZWd1bGFyKXtjb25zdCBlPXQucmVndWxhcjtyZXR1cm5bZSx7dHlwZWZhY2U6ZS5jc3NGb250SW5mby5mb250RmFtaWx5LHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19cmV0dXJuW251bGwse3R5cGVmYWNlOiJDb3VyaWVyIixwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfX1jbGFzcyBGb250U2VsZWN0b3J7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5mb250RmluZGVyPXI7dGhpcy5zdGFjaz1bbmV3IEZvbnRJbmZvKGUsdCxhLHIpXX1wdXNoRGF0YShlLHQsYSl7Y29uc3Qgcj10aGlzLnN0YWNrLmF0KC0xKTtmb3IoY29uc3QgdCBvZlsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXSllW3RdfHwoZVt0XT1yLnhmYUZvbnRbdF0pO2Zvcihjb25zdCBlIG9mWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSlpc05hTih0W2VdKSYmKHRbZV09ci5wYXJhTWFyZ2luW2VdKTtjb25zdCBuPW5ldyBGb250SW5mbyhlLHQsYXx8ci5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7bi5wZGZGb250fHwobi5wZGZGb250PXIucGRmRm9udCk7dGhpcy5zdGFjay5wdXNoKG4pfXBvcEZvbnQoKXt0aGlzLnN0YWNrLnBvcCgpfXRvcEZvbnQoKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fXQuVGV4dE1lYXN1cmU9Y2xhc3MgVGV4dE1lYXN1cmV7Y29uc3RydWN0b3IoZSx0LGEscil7dGhpcy5nbHlwaHM9W107dGhpcy5mb250U2VsZWN0b3I9bmV3IEZvbnRTZWxlY3RvcihlLHQsYSxyKTt0aGlzLmV4dHJhSGVpZ2h0PTB9cHVzaERhdGEoZSx0LGEpe3RoaXMuZm9udFNlbGVjdG9yLnB1c2hEYXRhKGUsdCxhKX1wb3BGb250KGUpe3JldHVybiB0aGlzLmZvbnRTZWxlY3Rvci5wb3BGb250KCl9YWRkUGFyYSgpe2NvbnN0IGU9dGhpcy5mb250U2VsZWN0b3IudG9wRm9udCgpO3RoaXMuZXh0cmFIZWlnaHQrPWUucGFyYU1hcmdpbi50b3ArZS5wYXJhTWFyZ2luLmJvdHRvbX1hZGRTdHJpbmcoZSl7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5mb250U2VsZWN0b3IudG9wRm9udCgpLGE9dC54ZmFGb250LnNpemU7aWYodC5wZGZGb250KXtjb25zdCByPXQueGZhRm9udC5sZXR0ZXJTcGFjaW5nLG49dC5wZGZGb250LGk9bi5saW5lSGVpZ2h0fHwxLjIscz10LmxpbmVIZWlnaHR8fE1hdGgubWF4KDEuMixpKSphLG89aS0odm9pZCAwPT09bi5saW5lR2FwPy4yOm4ubGluZUdhcCksYz1NYXRoLm1heCgxLG8pKmEsbD1hLzFlMyxoPW4uZGVmYXVsdFdpZHRofHxuLmNoYXJzVG9HbHlwaHMoIiAiKVswXS53aWR0aDtmb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9bXHUyMDI5XG5dLykpe2NvbnN0IGU9bi5lbmNvZGVTdHJpbmcodCkuam9pbigiIiksYT1uLmNoYXJzVG9HbHlwaHMoZSk7Zm9yKGNvbnN0IGUgb2YgYSl7Y29uc3QgdD1lLndpZHRofHxoO3RoaXMuZ2x5cGhzLnB1c2goW3QqbCtyLHMsYyxlLnVuaWNvZGUsITFdKX10aGlzLmdseXBocy5wdXNoKFswLDAsMCwiXG4iLCEwXSl9dGhpcy5nbHlwaHMucG9wKCl9ZWxzZXtmb3IoY29uc3QgdCBvZiBlLnNwbGl0KC9bXHUyMDI5XG5dLykpe2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIiIpKXRoaXMuZ2x5cGhzLnB1c2goW2EsMS4yKmEsYSxlLCExXSk7dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpfX1jb21wdXRlKGUpe2xldCB0PS0xLGE9MCxyPTAsbj0wLGk9MCxzPTAsbz0hMSxjPSEwO2ZvcihsZXQgbD0wLGg9dGhpcy5nbHlwaHMubGVuZ3RoO2w8aDtsKyspe2NvbnN0W2gsdSxkLGYsZ109dGhpcy5nbHlwaHNbbF0scD0iICI9PT1mLG09Yz9kOnU7aWYoZyl7cj1NYXRoLm1heChyLGkpO2k9MDtuKz1zO3M9bTt0PS0xO2E9MDtjPSExfWVsc2UgaWYocClpZihpK2g+ZSl7cj1NYXRoLm1heChyLGkpO2k9MDtuKz1zO3M9bTt0PS0xO2E9MDtvPSEwO2M9ITF9ZWxzZXtzPU1hdGgubWF4KG0scyk7YT1pO2krPWg7dD1sfWVsc2UgaWYoaStoPmUpe24rPXM7cz1tO2lmKC0xIT09dCl7bD10O3I9TWF0aC5tYXgocixhKTtpPTA7dD0tMTthPTB9ZWxzZXtyPU1hdGgubWF4KHIsaSk7aT1ofW89ITA7Yz0hMX1lbHNle2krPWg7cz1NYXRoLm1heChtLHMpfX1yPU1hdGgubWF4KHIsaSk7bis9cyt0aGlzLmV4dHJhSGVpZ2h0O3JldHVybnt3aWR0aDoxLjAyKnIsaGVpZ2h0Om4saXNCcm9rZW46b319fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhtbE9iamVjdD10LlhGQU9iamVjdEFycmF5PXQuWEZBT2JqZWN0PXQuWEZBQXR0cmlidXRlPXQuU3RyaW5nT2JqZWN0PXQuT3B0aW9uT2JqZWN0PXQuT3B0aW9uMTA9dC5PcHRpb24wMT10LkludGVnZXJPYmplY3Q9dC5Db250ZW50T2JqZWN0PXZvaWQgMDthKDE0MCk7YSgxMTYpO2EoMTI3KTthKDEyOSk7YSgxMzIpO2EoMTM0KTthKDEzNik7YSgxMzgpO3ZhciByPWEoMjI5KSxuPWEoMjM4KSxpPWEoMTQ1KSxzPWEoMTUwKSxvPWEoMjM1KSxjPWEoMjQyKTtjb25zdCBsPVN5bWJvbCgpLGg9U3ltYm9sKCksdT1TeW1ib2woKSxkPVN5bWJvbCgiX2NoaWxkcmVuIiksZj1TeW1ib2woKSxnPVN5bWJvbCgpLHA9U3ltYm9sKCksbT1TeW1ib2woKSxiPVN5bWJvbCgpLHk9U3ltYm9sKCksdz1TeW1ib2woKSxTPVN5bWJvbCgpLHg9U3ltYm9sKCksQz1TeW1ib2woInBhcmVudCIpLHY9U3ltYm9sKCksaz1TeW1ib2woKSxPPVN5bWJvbCgpO2xldCBUPTA7Y29uc3QgTT1vLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtjbGFzcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3RoaXNbci4kbmFtZXNwYWNlSWRdPWU7dGhpc1tyLiRub2RlTmFtZV09dDt0aGlzW3ddPWE7dGhpc1tDXT1udWxsO3RoaXNbZF09W107dGhpc1tyLiR1aWRdPWAke3R9JHtUKyt9YDt0aGlzW3IuJGdsb2JhbERhdGFdPW51bGx9Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITB9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMX1jcmVhdGVOb2RlcyhlKXtsZXQgdD10aGlzLGE9bnVsbDtmb3IoY29uc3R7bmFtZTpuLGluZGV4Oml9b2YgZSl7Zm9yKGxldCBlPTAscz1pc0Zpbml0ZShpKT9pOjA7ZTw9cztlKyspe2NvbnN0IGU9dFtyLiRuYW1lc3BhY2VJZF09PT1NPy0xOnRbci4kbmFtZXNwYWNlSWRdO2E9bmV3IFhtbE9iamVjdChlLG4pO3Rbci4kYXBwZW5kQ2hpbGRdKGEpfXQ9YX1yZXR1cm4gYX1bci4kb25DaGlsZF0oZSl7aWYoIXRoaXNbd118fCF0aGlzW3IuJG9uQ2hpbGRDaGVja10oZSkpcmV0dXJuITE7Y29uc3QgdD1lW3IuJG5vZGVOYW1lXSxhPXRoaXNbdF07aWYoIShhIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpKXtudWxsIT09YSYmdGhpc1tyLiRyZW1vdmVDaGlsZF0oYSk7dGhpc1t0XT1lO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpO3JldHVybiEwfWlmKGEucHVzaChlKSl7dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7cmV0dXJuITB9bGV0IG49IiI7dGhpcy5pZD9uPWAgKGlkOiAke3RoaXMuaWR9KWA6dGhpcy5uYW1lJiYobj1gIChuYW1lOiAke3RoaXMubmFtZX0gJHt0aGlzLmgudmFsdWV9KWApOygwLGkud2FybikoYFhGQSAtIG5vZGUgIiR7dGhpc1tyLiRub2RlTmFtZV19IiR7bn0gaGFzIGFscmVhZHkgZW5vdWdoICIke3R9IiFgKTtyZXR1cm4hMX1bci4kb25DaGlsZENoZWNrXShlKXtyZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eShlW3IuJG5vZGVOYW1lXSkmJmVbci4kbmFtZXNwYWNlSWRdPT09dGhpc1tyLiRuYW1lc3BhY2VJZF19W3IuJGlzTnNBZ25vc3RpY10oKXtyZXR1cm4hMX1bci4kYWNjZXB0V2hpdGVzcGFjZV0oKXtyZXR1cm4hMX1bci4kaXNDREFUQVhtbF0oKXtyZXR1cm4hMX1bci4kaXNCaW5kYWJsZV0oKXtyZXR1cm4hMX1bci4kcG9wUGFyYV0oKXt0aGlzLnBhcmEmJnRoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5wYXJhU3RhY2sucG9wKCl9W3IuJHB1c2hQYXJhXSgpe3RoaXNbci4kZ2V0VGVtcGxhdGVSb290XSgpW3IuJGV4dHJhXS5wYXJhU3RhY2sucHVzaCh0aGlzLnBhcmEpfVtyLiRzZXRJZF0oZSl7dGhpcy5pZCYmdGhpc1tyLiRuYW1lc3BhY2VJZF09PT1vLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZCYmZS5zZXQodGhpcy5pZCx0aGlzKX1bci4kZ2V0VGVtcGxhdGVSb290XSgpe3JldHVybiB0aGlzW3IuJGdsb2JhbERhdGFdLnRlbXBsYXRlfVtyLiRpc1NwbGl0dGFibGVdKCl7cmV0dXJuITF9W3IuJGlzVGhlcmVNb3JlV2lkdGhdKCl7cmV0dXJuITF9W3IuJGFwcGVuZENoaWxkXShlKXtlW0NdPXRoaXM7dGhpc1tkXS5wdXNoKGUpOyFlW3IuJGdsb2JhbERhdGFdJiZ0aGlzW3IuJGdsb2JhbERhdGFdJiYoZVtyLiRnbG9iYWxEYXRhXT10aGlzW3IuJGdsb2JhbERhdGFdKX1bci4kcmVtb3ZlQ2hpbGRdKGUpe2NvbnN0IHQ9dGhpc1tkXS5pbmRleE9mKGUpO3RoaXNbZF0uc3BsaWNlKHQsMSl9W3IuJGhhc1NldHRhYmxlVmFsdWVdKCl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoInZhbHVlIil9W3IuJHNldFZhbHVlXShlKXt9W3IuJG9uVGV4dF0oZSl7fVtyLiRmaW5hbGl6ZV0oKXt9W3IuJGNsZWFuXShlKXtkZWxldGUgdGhpc1t3XTtpZih0aGlzW3IuJGNsZWFudXBdKXtlLmNsZWFuKHRoaXNbci4kY2xlYW51cF0pO2RlbGV0ZSB0aGlzW3IuJGNsZWFudXBdfX1bci4kaW5kZXhPZl0oZSl7cmV0dXJuIHRoaXNbZF0uaW5kZXhPZihlKX1bci4kaW5zZXJ0QXRdKGUsdCl7dFtDXT10aGlzO3RoaXNbZF0uc3BsaWNlKGUsMCx0KTshdFtyLiRnbG9iYWxEYXRhXSYmdGhpc1tyLiRnbG9iYWxEYXRhXSYmKHRbci4kZ2xvYmFsRGF0YV09dGhpc1tyLiRnbG9iYWxEYXRhXSl9W3IuJGlzVHJhbnNwYXJlbnRdKCl7cmV0dXJuIXRoaXMubmFtZX1bci4kbGFzdEF0dHJpYnV0ZV0oKXtyZXR1cm4iIn1bci4kdGV4dF0oKXtyZXR1cm4gMD09PXRoaXNbZF0ubGVuZ3RoP3RoaXNbci4kY29udGVudF06dGhpc1tkXS5tYXAoKGU9PmVbci4kdGV4dF0oKSkpLmpvaW4oIiIpfWdldFt1XSgpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKCFlLl9hdHRyaWJ1dGVzKXtjb25zdCB0PWUuX2F0dHJpYnV0ZXM9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYobnVsbD09PXRoaXNbZV18fHRoaXNbZV1pbnN0YW5jZW9mIFhGQU9iamVjdHx8dGhpc1tlXWluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpYnJlYWs7dC5hZGQoZSl9fXJldHVybigwLGkuc2hhZG93KSh0aGlzLHUsZS5fYXR0cmlidXRlcyl9W3IuJGlzRGVzY2VuZGVudF0oZSl7bGV0IHQ9dGhpcztmb3IoO3Q7KXtpZih0PT09ZSlyZXR1cm4hMDt0PXRbci4kZ2V0UGFyZW50XSgpfXJldHVybiExfVtyLiRnZXRQYXJlbnRdKCl7cmV0dXJuIHRoaXNbQ119W3IuJGdldFN1YmZvcm1QYXJlbnRdKCl7cmV0dXJuIHRoaXNbci4kZ2V0UGFyZW50XSgpfVtyLiRnZXRDaGlsZHJlbl0oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2VdOnRoaXNbZF19W3IuJGR1bXBdKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXNbci4kY29udGVudF0mJihlLiRjb250ZW50PXRoaXNbci4kY29udGVudF0pO2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtjb25zdCBhPXRoaXNbdF07bnVsbCE9PWEmJihhIGluc3RhbmNlb2YgWEZBT2JqZWN0P2VbdF09YVtyLiRkdW1wXSgpOmEgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9hLmlzRW1wdHkoKXx8KGVbdF09YS5kdW1wKCkpOmVbdF09YSl9cmV0dXJuIGV9W3IuJHRvU3R5bGVdKCl7cmV0dXJuIG51bGx9W3IuJHRvSFRNTF0oKXtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfSpbci4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCl7Zm9yKGNvbnN0IGUgb2YgdGhpc1tyLiRnZXRDaGlsZHJlbl0oKSl5aWVsZCBlfSpbbV0oZSx0KXtmb3IoY29uc3QgYSBvZiB0aGlzW3IuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpKWlmKCFlfHx0PT09ZS5oYXMoYVtyLiRub2RlTmFtZV0pKXtjb25zdCBlPXRoaXNbci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCksdD1hW3IuJHRvSFRNTF0oZSk7dC5zdWNjZXNzfHwodGhpc1tyLiRleHRyYV0uZmFpbGluZ05vZGU9YSk7eWllbGQgdH19W3IuJGZsdXNoSFRNTF0oKXtyZXR1cm4gbnVsbH1bci4kYWRkSFRNTF0oZSx0KXt0aGlzW3IuJGV4dHJhXS5jaGlsZHJlbi5wdXNoKGUpfVtyLiRnZXRBdmFpbGFibGVTcGFjZV0oKXt9W3IuJGNoaWxkcmVuVG9IVE1MXShlKXtsZXR7ZmlsdGVyOnQ9bnVsbCxpbmNsdWRlOmE9ITB9PWU7aWYodGhpc1tyLiRleHRyYV0uZ2VuZXJhdG9yKXtjb25zdCBlPXRoaXNbci4kZ2V0QXZhaWxhYmxlU3BhY2VdKCksdD10aGlzW3IuJGV4dHJhXS5mYWlsaW5nTm9kZVtyLiR0b0hUTUxdKGUpO2lmKCF0LnN1Y2Nlc3MpcmV0dXJuIHQ7dC5odG1sJiZ0aGlzW3IuJGFkZEhUTUxdKHQuaHRtbCx0LmJib3gpO2RlbGV0ZSB0aGlzW3IuJGV4dHJhXS5mYWlsaW5nTm9kZX1lbHNlIHRoaXNbci4kZXh0cmFdLmdlbmVyYXRvcj10aGlzW21dKHQsYSk7Zm9yKDs7KXtjb25zdCBlPXRoaXNbci4kZXh0cmFdLmdlbmVyYXRvci5uZXh0KCk7aWYoZS5kb25lKWJyZWFrO2NvbnN0IHQ9ZS52YWx1ZTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1tyLiRhZGRIVE1MXSh0Lmh0bWwsdC5iYm94KX10aGlzW3IuJGV4dHJhXS5nZW5lcmF0b3I9bnVsbDtyZXR1cm4gbi5IVE1MUmVzdWx0LkVNUFRZfVtyLiRzZXRTZXRBdHRyaWJ1dGVzXShlKXt0aGlzW2tdPW5ldyBTZXQoT2JqZWN0LmtleXMoZSkpfVt5XShlKXtjb25zdCB0PXRoaXNbdV0sYT10aGlzW2tdO3JldHVyblsuLi5lXS5maWx0ZXIoKGU9PnQuaGFzKGUpJiYhYS5oYXMoZSkpKX1bci4kcmVzb2x2ZVByb3RvdHlwZXNdKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpuZXcgU2V0O2Zvcihjb25zdCBhIG9mIHRoaXNbZF0pYVt2XShlLHQpfVt2XShlLHQpe2NvbnN0IGE9dGhpc1tiXShlLHQpO2E/dGhpc1tsXShhLGUsdCk6dGhpc1tyLiRyZXNvbHZlUHJvdG90eXBlc10oZSx0KX1bYl0oZSx0KXtjb25zdHt1c2U6YSx1c2VocmVmOm59PXRoaXM7aWYoIWEmJiFuKXJldHVybiBudWxsO2xldCBzPW51bGwsbz1udWxsLGg9bnVsbCx1PWE7aWYobil7dT1uO24uc3RhcnRzV2l0aCgiI3NvbSgiKSYmbi5lbmRzV2l0aCgiKSIpP289bi5zbGljZSg1LC0xKTpuLnN0YXJ0c1dpdGgoIi4jc29tKCIpJiZuLmVuZHNXaXRoKCIpIik/bz1uLnNsaWNlKDYsLTEpOm4uc3RhcnRzV2l0aCgiIyIpP2g9bi5zbGljZSgxKTpuLnN0YXJ0c1dpdGgoIi4jIikmJihoPW4uc2xpY2UoMikpfWVsc2UgYS5zdGFydHNXaXRoKCIjIik/aD1hLnNsaWNlKDEpOm89YTt0aGlzLnVzZT10aGlzLnVzZWhyZWY9IiI7aWYoaClzPWUuZ2V0KGgpO2Vsc2V7cz0oMCxjLnNlYXJjaE5vZGUpKGUuZ2V0KHIuJHJvb3QpLHRoaXMsbywhMCwhMSk7cyYmKHM9c1swXSl9aWYoIXMpeygwLGkud2FybikoYFhGQSAtIEludmFsaWQgcHJvdG90eXBlIHJlZmVyZW5jZTogJHt1fS5gKTtyZXR1cm4gbnVsbH1pZihzW3IuJG5vZGVOYW1lXSE9PXRoaXNbci4kbm9kZU5hbWVdKXsoMCxpLndhcm4pKGBYRkEgLSBJbmNvbXBhdGlibGUgcHJvdG90eXBlOiAke3Nbci4kbm9kZU5hbWVdfSAhPT0gJHt0aGlzW3IuJG5vZGVOYW1lXX0uYCk7cmV0dXJuIG51bGx9aWYodC5oYXMocykpeygwLGkud2FybikoIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO3JldHVybiBudWxsfXQuYWRkKHMpO2NvbnN0IGQ9c1tiXShlLHQpO2QmJnNbbF0oZCxlLHQpO3Nbci4kcmVzb2x2ZVByb3RvdHlwZXNdKGUsdCk7dC5kZWxldGUocyk7cmV0dXJuIHN9W2xdKGUsdCxhKXtpZihhLmhhcyhlKSl7KDAsaS53YXJuKSgiWEZBIC0gQ3ljbGUgZGV0ZWN0ZWQgaW4gcHJvdG90eXBlcyB1c2UuIik7cmV0dXJufSF0aGlzW3IuJGNvbnRlbnRdJiZlW3IuJGNvbnRlbnRdJiYodGhpc1tyLiRjb250ZW50XT1lW3IuJGNvbnRlbnRdKTtuZXcgU2V0KGEpLmFkZChlKTtmb3IoY29uc3QgdCBvZiB0aGlzW3ldKGVba10pKXt0aGlzW3RdPWVbdF07dGhpc1trXSYmdGhpc1trXS5hZGQodCl9Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbdV0uaGFzKG4pKWNvbnRpbnVlO2NvbnN0IGk9dGhpc1tuXSxzPWVbbl07aWYoaSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KXtmb3IoY29uc3QgZSBvZiBpW2RdKWVbdl0odCxhKTtmb3IobGV0IG49aVtkXS5sZW5ndGgsbz1zW2RdLmxlbmd0aDtuPG87bisrKXtjb25zdCBzPWVbZF1bbl1bci4kY2xvbmVdKCk7aWYoIWkucHVzaChzKSlicmVhaztzW0NdPXRoaXM7dGhpc1tkXS5wdXNoKHMpO3Nbdl0odCxhKX19ZWxzZSBpZihudWxsPT09aSl7aWYobnVsbCE9PXMpe2NvbnN0IGU9c1tyLiRjbG9uZV0oKTtlW0NdPXRoaXM7dGhpc1tuXT1lO3RoaXNbZF0ucHVzaChlKTtlW3ZdKHQsYSl9fWVsc2V7aVtyLiRyZXNvbHZlUHJvdG90eXBlc10odCxhKTtzJiZpW2xdKHMsdCxhKX19fXN0YXRpY1tmXShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLm1hcCgoZT0+WEZBT2JqZWN0W2ZdKGUpKSk6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZT9PYmplY3QuYXNzaWduKHt9LGUpOmV9W3IuJGNsb25lXSgpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpO2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGhpcykpdHJ5e2VbdF09dGhpc1t0XX1jYXRjaHsoMCxpLnNoYWRvdykoZSx0LHRoaXNbdF0pfWVbci4kdWlkXT1gJHtlW3IuJG5vZGVOYW1lXX0ke1QrK31gO2VbZF09W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbdV0uaGFzKHQpKXtlW3RdPVhGQU9iamVjdFtmXSh0aGlzW3RdKTtjb250aW51ZX1jb25zdCBhPXRoaXNbdF07ZVt0XT1hIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXk/bmV3IFhGQU9iamVjdEFycmF5KGFbU10pOm51bGx9Zm9yKGNvbnN0IHQgb2YgdGhpc1tkXSl7Y29uc3QgYT10W3IuJG5vZGVOYW1lXSxuPXRbci4kY2xvbmVdKCk7ZVtkXS5wdXNoKG4pO25bQ109ZTtudWxsPT09ZVthXT9lW2FdPW46ZVthXVtkXS5wdXNoKG4pfXJldHVybiBlfVtyLiRnZXRDaGlsZHJlbl0oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2RdLmZpbHRlcigodD0+dFtyLiRub2RlTmFtZV09PT1lKSk6dGhpc1tkXX1bci4kZ2V0Q2hpbGRyZW5CeUNsYXNzXShlKXtyZXR1cm4gdGhpc1tlXX1bci4kZ2V0Q2hpbGRyZW5CeU5hbWVdKGUsdCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzW3IuJGdldENoaWxkcmVuQnlOYW1lSXRdKGUsdCxhKSl9W3IuJGdldENoaWxkcmVuQnlOYW1lSXRdKGUsdCl7dmFyIGE9dGhpcztsZXQgbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiBmdW5jdGlvbiooKXtpZigicGFyZW50IiE9PWUpe2Zvcihjb25zdCBuIG9mIGFbZF0pe25bci4kbm9kZU5hbWVdPT09ZSYmKHlpZWxkIG4pO24ubmFtZT09PWUmJih5aWVsZCBuKTsodHx8bltyLiRpc1RyYW5zcGFyZW50XSgpKSYmKHlpZWxkKm5bci4kZ2V0Q2hpbGRyZW5CeU5hbWVJdF0oZSx0LCExKSl9biYmYVt1XS5oYXMoZSkmJih5aWVsZCBuZXcgWEZBQXR0cmlidXRlKGEsZSxhW2VdKSl9ZWxzZSB5aWVsZCBhW0NdfSgpfX10LlhGQU9iamVjdD1YRkFPYmplY3Q7Y2xhc3MgWEZBT2JqZWN0QXJyYXl7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MS8wO3RoaXNbU109ZTt0aGlzW2RdPVtdfWdldCBpc1hGQU9iamVjdCgpe3JldHVybiExfWdldCBpc1hGQU9iamVjdEFycmF5KCl7cmV0dXJuITB9cHVzaChlKXtpZih0aGlzW2RdLmxlbmd0aDw9dGhpc1tTXSl7dGhpc1tkXS5wdXNoKGUpO3JldHVybiEwfSgwLGkud2FybikoYFhGQSAtIG5vZGUgIiR7ZVtyLiRub2RlTmFtZV19IiBhY2NlcHRzIG5vIG1vcmUgdGhhbiAke3RoaXNbU119IGNoaWxkcmVuYCk7cmV0dXJuITF9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpc1tkXS5sZW5ndGh9ZHVtcCgpe3JldHVybiAxPT09dGhpc1tkXS5sZW5ndGg/dGhpc1tkXVswXVtyLiRkdW1wXSgpOnRoaXNbZF0ubWFwKChlPT5lW3IuJGR1bXBdKCkpKX1bci4kY2xvbmVdKCl7Y29uc3QgZT1uZXcgWEZBT2JqZWN0QXJyYXkodGhpc1tTXSk7ZVtkXT10aGlzW2RdLm1hcCgoZT0+ZVtyLiRjbG9uZV0oKSkpO3JldHVybiBlfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzW2RdfWNsZWFyKCl7dGhpc1tkXS5sZW5ndGg9MH19dC5YRkFPYmplY3RBcnJheT1YRkFPYmplY3RBcnJheTtjbGFzcyBYRkFBdHRyaWJ1dGV7Y29uc3RydWN0b3IoZSx0LGEpe3RoaXNbQ109ZTt0aGlzW3IuJG5vZGVOYW1lXT10O3RoaXNbci4kY29udGVudF09YTt0aGlzW3IuJGNvbnN1bWVkXT0hMTt0aGlzW3IuJHVpZF09ImF0dHJpYnV0ZSIrVCsrfVtyLiRnZXRQYXJlbnRdKCl7cmV0dXJuIHRoaXNbQ119W3IuJGlzRGF0YVZhbHVlXSgpe3JldHVybiEwfVtyLiRnZXREYXRhVmFsdWVdKCl7cmV0dXJuIHRoaXNbci4kY29udGVudF0udHJpbSgpfVtyLiRzZXRWYWx1ZV0oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW3IuJGNvbnRlbnRdPWUudG9TdHJpbmcoKX1bci4kdGV4dF0oKXtyZXR1cm4gdGhpc1tyLiRjb250ZW50XX1bci4kaXNEZXNjZW5kZW50XShlKXtyZXR1cm4gdGhpc1tDXT09PWV8fHRoaXNbQ11bci4kaXNEZXNjZW5kZW50XShlKX19dC5YRkFBdHRyaWJ1dGU9WEZBQXR0cmlidXRlO2NsYXNzIFhtbE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtzdXBlcihlLHQpO3RoaXNbci4kY29udGVudF09IiI7dGhpc1tnXT1udWxsO2lmKCIjdGV4dCIhPT10KXtjb25zdCBlPW5ldyBNYXA7dGhpc1toXT1lO2Zvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJpZXMoYSkpZS5zZXQodCxuZXcgWEZBQXR0cmlidXRlKHRoaXMsdCxyKSk7aWYoYS5oYXNPd25Qcm9wZXJ0eShyLiRuc0F0dHJpYnV0ZXMpKXtjb25zdCBlPWFbci4kbnNBdHRyaWJ1dGVzXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09ZSYmKCJkYXRhR3JvdXAiPT09ZT90aGlzW2ddPSExOiJkYXRhVmFsdWUiPT09ZSYmKHRoaXNbZ109ITApKX19dGhpc1tyLiRjb25zdW1lZF09ITF9W3IuJHRvU3RyaW5nXShlKXtjb25zdCB0PXRoaXNbci4kbm9kZU5hbWVdO2lmKCIjdGV4dCI9PT10KXtlLnB1c2goKDAscy5lbmNvZGVUb1htbFN0cmluZykodGhpc1tyLiRjb250ZW50XSkpO3JldHVybn1jb25zdCBhPSgwLGkudXRmOFN0cmluZ1RvU3RyaW5nKSh0KSxuPXRoaXNbci4kbmFtZXNwYWNlSWRdPT09TT8ieGZhOiI6IiI7ZS5wdXNoKGA8JHtufSR7YX1gKTtmb3IoY29uc3RbdCxhXW9mIHRoaXNbaF0uZW50cmllcygpKXtjb25zdCBuPSgwLGkudXRmOFN0cmluZ1RvU3RyaW5nKSh0KTtlLnB1c2goYCAke259PSIkeygwLHMuZW5jb2RlVG9YbWxTdHJpbmcpKGFbci4kY29udGVudF0pfSJgKX1udWxsIT09dGhpc1tnXSYmKHRoaXNbZ10/ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhVmFsdWUiJyk6ZS5wdXNoKCcgeGZhOmRhdGFOb2RlPSJkYXRhR3JvdXAiJykpO2lmKHRoaXNbci4kY29udGVudF18fDAhPT10aGlzW2RdLmxlbmd0aCl7ZS5wdXNoKCI+Iik7aWYodGhpc1tyLiRjb250ZW50XSkic3RyaW5nIj09dHlwZW9mIHRoaXNbci4kY29udGVudF0/ZS5wdXNoKCgwLHMuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbci4kY29udGVudF0pKTp0aGlzW3IuJGNvbnRlbnRdW3IuJHRvU3RyaW5nXShlKTtlbHNlIGZvcihjb25zdCB0IG9mIHRoaXNbZF0pdFtyLiR0b1N0cmluZ10oZSk7ZS5wdXNoKGA8LyR7bn0ke2F9PmApfWVsc2UgZS5wdXNoKCIvPiIpfVtyLiRvbkNoaWxkXShlKXtpZih0aGlzW3IuJGNvbnRlbnRdKXtjb25zdCBlPW5ldyBYbWxPYmplY3QodGhpc1tyLiRuYW1lc3BhY2VJZF0sIiN0ZXh0Iik7dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7ZVtyLiRjb250ZW50XT10aGlzW3IuJGNvbnRlbnRdO3RoaXNbci4kY29udGVudF09IiJ9dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSk7cmV0dXJuITB9W3IuJG9uVGV4dF0oZSl7dGhpc1tyLiRjb250ZW50XSs9ZX1bci4kZmluYWxpemVdKCl7aWYodGhpc1tyLiRjb250ZW50XSYmdGhpc1tkXS5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgWG1sT2JqZWN0KHRoaXNbci4kbmFtZXNwYWNlSWRdLCIjdGV4dCIpO3RoaXNbci4kYXBwZW5kQ2hpbGRdKGUpO2Vbci4kY29udGVudF09dGhpc1tyLiRjb250ZW50XTtkZWxldGUgdGhpc1tyLiRjb250ZW50XX19W3IuJHRvSFRNTF0oKXtyZXR1cm4iI3RleHQiPT09dGhpc1tyLiRub2RlTmFtZV0/bi5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6IiN0ZXh0Iix2YWx1ZTp0aGlzW3IuJGNvbnRlbnRdfSk6bi5IVE1MUmVzdWx0LkVNUFRZfVtyLiRnZXRDaGlsZHJlbl0oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZT90aGlzW2RdLmZpbHRlcigodD0+dFtyLiRub2RlTmFtZV09PT1lKSk6dGhpc1tkXX1bci4kZ2V0QXR0cmlidXRlc10oKXtyZXR1cm4gdGhpc1toXX1bci4kZ2V0Q2hpbGRyZW5CeUNsYXNzXShlKXtjb25zdCB0PXRoaXNbaF0uZ2V0KGUpO3JldHVybiB2b2lkIDAhPT10P3Q6dGhpc1tyLiRnZXRDaGlsZHJlbl0oZSl9KltyLiRnZXRDaGlsZHJlbkJ5TmFtZUl0XShlLHQpe2NvbnN0IGE9dGhpc1toXS5nZXQoZSk7YSYmKHlpZWxkIGEpO2Zvcihjb25zdCBhIG9mIHRoaXNbZF0pe2Fbci4kbm9kZU5hbWVdPT09ZSYmKHlpZWxkIGEpO3QmJih5aWVsZCphW3IuJGdldENoaWxkcmVuQnlOYW1lSXRdKGUsdCkpfX0qW3IuJGdldEF0dHJpYnV0ZUl0XShlLHQpe2NvbnN0IGE9dGhpc1toXS5nZXQoZSk7IWF8fHQmJmFbci4kY29uc3VtZWRdfHwoeWllbGQgYSk7Zm9yKGNvbnN0IGEgb2YgdGhpc1tkXSl5aWVsZCphW3IuJGdldEF0dHJpYnV0ZUl0XShlLHQpfSpbci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsdCxhKXtmb3IoY29uc3QgbiBvZiB0aGlzW2RdKXtuW3IuJG5vZGVOYW1lXSE9PWV8fGEmJm5bci4kY29uc3VtZWRdfHwoeWllbGQgbik7dCYmKHlpZWxkKm5bci4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsdCxhKSl9fVtyLiRpc0RhdGFWYWx1ZV0oKXtyZXR1cm4gbnVsbD09PXRoaXNbZ10/MD09PXRoaXNbZF0ubGVuZ3RofHx0aGlzW2RdWzBdW3IuJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLnhodG1sLmlkOnRoaXNbZ119W3IuJGdldERhdGFWYWx1ZV0oKXtyZXR1cm4gbnVsbD09PXRoaXNbZ10/MD09PXRoaXNbZF0ubGVuZ3RoP3RoaXNbci4kY29udGVudF0udHJpbSgpOnRoaXNbZF1bMF1bci4kbmFtZXNwYWNlSWRdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tkXVswXVtyLiR0ZXh0XSgpLnRyaW0oKTpudWxsOnRoaXNbci4kY29udGVudF0udHJpbSgpfVtyLiRzZXRWYWx1ZV0oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW3IuJGNvbnRlbnRdPWUudG9TdHJpbmcoKX1bci4kZHVtcF0oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtlJiYodC4kbnM9dGhpc1tyLiRuYW1lc3BhY2VJZF0pO3RoaXNbci4kY29udGVudF0mJih0LiRjb250ZW50PXRoaXNbci4kY29udGVudF0pO3QuJG5hbWU9dGhpc1tyLiRub2RlTmFtZV07dC5jaGlsZHJlbj1bXTtmb3IoY29uc3QgYSBvZiB0aGlzW2RdKXQuY2hpbGRyZW4ucHVzaChhW3IuJGR1bXBdKGUpKTt0LmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbZSxhXW9mIHRoaXNbaF0pdC5hdHRyaWJ1dGVzW2VdPWFbci4kY29udGVudF07cmV0dXJuIHR9fXQuWG1sT2JqZWN0PVhtbE9iamVjdDtjbGFzcyBDb250ZW50T2JqZWN0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KTt0aGlzW3IuJGNvbnRlbnRdPSIifVtyLiRvblRleHRdKGUpe3RoaXNbci4kY29udGVudF0rPWV9W3IuJGZpbmFsaXplXSgpe319dC5Db250ZW50T2JqZWN0PUNvbnRlbnRPYmplY3Q7Y2xhc3MgT3B0aW9uT2JqZWN0IGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlLHQsYSl7c3VwZXIoZSx0KTt0aGlzW3hdPWF9W3IuJGZpbmFsaXplXSgpe3RoaXNbci4kY29udGVudF09KDAsbi5nZXRLZXl3b3JkKSh7ZGF0YTp0aGlzW3IuJGNvbnRlbnRdLGRlZmF1bHRWYWx1ZTp0aGlzW3hdWzBdLHZhbGlkYXRlOmU9PnRoaXNbeF0uaW5jbHVkZXMoZSl9KX1bci4kY2xlYW5dKGUpe3N1cGVyW3IuJGNsZWFuXShlKTtkZWxldGUgdGhpc1t4XX19dC5PcHRpb25PYmplY3Q9T3B0aW9uT2JqZWN0O2NsYXNzIFN0cmluZ09iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7W3IuJGZpbmFsaXplXSgpe3RoaXNbci4kY29udGVudF09dGhpc1tyLiRjb250ZW50XS50cmltKCl9fXQuU3RyaW5nT2JqZWN0PVN0cmluZ09iamVjdDtjbGFzcyBJbnRlZ2VyT2JqZWN0IGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlLHQsYSxyKXtzdXBlcihlLHQpO3RoaXNbcF09YTt0aGlzW09dPXJ9W3IuJGZpbmFsaXplXSgpe3RoaXNbci4kY29udGVudF09KDAsbi5nZXRJbnRlZ2VyKSh7ZGF0YTp0aGlzW3IuJGNvbnRlbnRdLGRlZmF1bHRWYWx1ZTp0aGlzW3BdLHZhbGlkYXRlOnRoaXNbT119KX1bci4kY2xlYW5dKGUpe3N1cGVyW3IuJGNsZWFuXShlKTtkZWxldGUgdGhpc1twXTtkZWxldGUgdGhpc1tPXX19dC5JbnRlZ2VyT2JqZWN0PUludGVnZXJPYmplY3Q7dC5PcHRpb24wMT1jbGFzcyBPcHRpb24wMSBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsMCwoZT0+MT09PWUpKX19O3QuT3B0aW9uMTA9Y2xhc3MgT3B0aW9uMTAgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LDEsKGU9PjA9PT1lKSl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LmNyZWF0ZURhdGFOb2RlPWZ1bmN0aW9uIGNyZWF0ZURhdGFOb2RlKGUsdCxhKXtjb25zdCBpPXBhcnNlRXhwcmVzc2lvbihhKTtpZighaSlyZXR1cm4gbnVsbDtpZihpLnNvbWUoKGU9PmUub3BlcmF0b3I9PT1vLmRvdERvdCkpKXJldHVybiBudWxsO2NvbnN0IHM9Yy5nZXQoaVswXS5uYW1lKTtsZXQgbD0wO2lmKHMpe2U9cyhlLHQpO2w9MX1lbHNlIGU9dHx8ZTtmb3IobGV0IHQ9aS5sZW5ndGg7bDx0O2wrKyl7Y29uc3R7bmFtZTp0LG9wZXJhdG9yOmEsaW5kZXg6c309aVtsXTtpZighaXNGaW5pdGUocykpe2lbbF0uaW5kZXg9MDtyZXR1cm4gZS5jcmVhdGVOb2RlcyhpLnNsaWNlKGwpKX1sZXQgYztzd2l0Y2goYSl7Y2FzZSBvLmRvdDpjPWVbci4kZ2V0Q2hpbGRyZW5CeU5hbWVdKHQsITEpO2JyZWFrO2Nhc2Ugby5kb3REb3Q6Yz1lW3IuJGdldENoaWxkcmVuQnlOYW1lXSh0LCEwKTticmVhaztjYXNlIG8uZG90SGFzaDpjPWVbci4kZ2V0Q2hpbGRyZW5CeUNsYXNzXSh0KTtjPWMuaXNYRkFPYmplY3RBcnJheT9jLmNoaWxkcmVuOltjXX1pZigwPT09Yy5sZW5ndGgpcmV0dXJuIGUuY3JlYXRlTm9kZXMoaS5zbGljZShsKSk7aWYoIShzPGMubGVuZ3RoKSl7aVtsXS5pbmRleD1zLWMubGVuZ3RoO3JldHVybiBlLmNyZWF0ZU5vZGVzKGkuc2xpY2UobCkpfXtjb25zdCB0PWNbc107aWYoIXQuaXNYRkFPYmplY3QpeygwLG4ud2FybikoIlhGQSAtIENhbm5vdCBjcmVhdGUgYSBub2RlLiIpO3JldHVybiBudWxsfWU9dH19cmV0dXJuIG51bGx9O3Quc2VhcmNoTm9kZT1mdW5jdGlvbiBzZWFyY2hOb2RlKGUsdCxhKXtsZXQgbj0hKGFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdKXx8YXJndW1lbnRzWzNdLGk9IShhcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XTtjb25zdCBzPXBhcnNlRXhwcmVzc2lvbihhLG4pO2lmKCFzKXJldHVybiBudWxsO2NvbnN0IGg9Yy5nZXQoc1swXS5uYW1lKTtsZXQgdSxkPTA7aWYoaCl7dT0hMDtlPVtoKGUsdCldO2Q9MX1lbHNle3U9bnVsbD09PXQ7ZT1bdHx8ZV19Zm9yKGxldCBhPXMubGVuZ3RoO2Q8YTtkKyspe2NvbnN0e25hbWU6YSxjYWNoZU5hbWU6bixvcGVyYXRvcjpjLGluZGV4Omh9PXNbZF0sZj1bXTtmb3IoY29uc3QgdCBvZiBlKXtpZighdC5pc1hGQU9iamVjdCljb250aW51ZTtsZXQgZSxzO2lmKGkpe3M9bC5nZXQodCk7aWYoIXMpe3M9bmV3IE1hcDtsLnNldCh0LHMpfWU9cy5nZXQobil9aWYoIWUpe3N3aXRjaChjKXtjYXNlIG8uZG90OmU9dFtyLiRnZXRDaGlsZHJlbkJ5TmFtZV0oYSwhMSk7YnJlYWs7Y2FzZSBvLmRvdERvdDplPXRbci4kZ2V0Q2hpbGRyZW5CeU5hbWVdKGEsITApO2JyZWFrO2Nhc2Ugby5kb3RIYXNoOmU9dFtyLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKGEpO2U9ZS5pc1hGQU9iamVjdEFycmF5P2UuY2hpbGRyZW46W2VdfWkmJnMuc2V0KG4sZSl9ZS5sZW5ndGg+MCYmZi5wdXNoKGUpfWlmKDAhPT1mLmxlbmd0aHx8dXx8MCE9PWQpZT1pc0Zpbml0ZShoKT9mLmZpbHRlcigoZT0+aDxlLmxlbmd0aCkpLm1hcCgoZT0+ZVtoXSkpOmYuZmxhdCgpO2Vsc2V7Y29uc3QgYT10W3IuJGdldFBhcmVudF0oKTtpZighKHQ9YSkpcmV0dXJuIG51bGw7ZD0tMTtlPVt0XX19aWYoMD09PWUubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiBlfTthKDE0MCk7dmFyIHI9YSgyMjkpLG49YSgxNDUpO2NvbnN0IGk9L15bXi5bXSsvLHM9L15bXlxdXSsvLG89e2RvdDowLGRvdERvdDoxLGRvdEhhc2g6Mixkb3RCcmFja2V0OjMsZG90UGFyZW46NH0sYz1uZXcgTWFwKFtbIiRkYXRhIiwoZSx0KT0+ZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZV0sWyIkcmVjb3JkIiwoZSx0KT0+KGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW3IuJGdldENoaWxkcmVuXSgpWzBdXSxbIiR0ZW1wbGF0ZSIsKGUsdCk9PmUudGVtcGxhdGVdLFsiJGNvbm5lY3Rpb25TZXQiLChlLHQpPT5lLmNvbm5lY3Rpb25TZXRdLFsiJGZvcm0iLChlLHQpPT5lLmZvcm1dLFsiJGxheW91dCIsKGUsdCk9PmUubGF5b3V0XSxbIiRob3N0IiwoZSx0KT0+ZS5ob3N0XSxbIiRkYXRhV2luZG93IiwoZSx0KT0+ZS5kYXRhV2luZG93XSxbIiRldmVudCIsKGUsdCk9PmUuZXZlbnRdLFsiISIsKGUsdCk9PmUuZGF0YXNldHNdLFsiJHhmYSIsKGUsdCk9PmVdLFsieGZhIiwoZSx0KT0+ZV0sWyIkIiwoZSx0KT0+dF1dKSxsPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbihlLHQpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0scj1lLm1hdGNoKGkpO2lmKCFyKXJldHVybiBudWxsO2xldFtjXT1yO2NvbnN0IGw9W3tuYW1lOmMsY2FjaGVOYW1lOiIuIitjLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsLG9wZXJhdG9yOm8uZG90fV07bGV0IGg9Yy5sZW5ndGg7Zm9yKDtoPGUubGVuZ3RoOyl7Y29uc3QgZD1oO2lmKCJbIj09PWUuY2hhckF0KGgrKykpe3I9ZS5zbGljZShoKS5tYXRjaChzKTtpZighcil7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpO3JldHVybiBudWxsfWwuYXQoLTEpLmluZGV4PSIqIj09PSh1PSh1PXJbMF0pLnRyaW0oKSk/MS8wOnBhcnNlSW50KHUsMTApfHwwO2grPXJbMF0ubGVuZ3RoKzE7Y29udGludWV9bGV0IGY7c3dpdGNoKGUuY2hhckF0KGgpKXtjYXNlIi4iOmlmKCF0KXJldHVybiBudWxsO2grKztmPW8uZG90RG90O2JyZWFrO2Nhc2UiIyI6aCsrO2Y9by5kb3RIYXNoO2JyZWFrO2Nhc2UiWyI6aWYoYSl7KDAsbi53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBGb3JtQ2FsYyBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1mPW8uZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKGEpeygwLG4ud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgSmF2YVNjcmlwdCBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1mPW8uZG90UGFyZW47YnJlYWs7ZGVmYXVsdDpmPW8uZG90fXI9ZS5zbGljZShoKS5tYXRjaChpKTtpZighcilicmVhaztbY109cjtoKz1jLmxlbmd0aDtsLnB1c2goe25hbWU6YyxjYWNoZU5hbWU6ZS5zbGljZShkLGgpLG9wZXJhdG9yOmYsaW5kZXg6MCxqczpudWxsLGZvcm1DYWxjOm51bGx9KX12YXIgdTtyZXR1cm4gbH19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5EYXRhSGFuZGxlcj12b2lkIDA7YSgxNDApO3ZhciByPWEoMjI5KTt0LkRhdGFIYW5kbGVyPWNsYXNzIERhdGFIYW5kbGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5kYXRhPXQ7dGhpcy5kYXRhc2V0PWUuZGF0YXNldHN8fG51bGx9c2VyaWFsaXplKGUpe2NvbnN0IHQ9W1stMSx0aGlzLmRhdGFbci4kZ2V0Q2hpbGRyZW5dKCldXTtmb3IoO3QubGVuZ3RoPjA7KXtjb25zdCBhPXQuYXQoLTEpLFtuLGldPWE7aWYobisxPT09aS5sZW5ndGgpe3QucG9wKCk7Y29udGludWV9Y29uc3Qgcz1pWysrYVswXV0sbz1lLmdldChzW3IuJHVpZF0pO2lmKG8pc1tyLiRzZXRWYWx1ZV0obyk7ZWxzZXtjb25zdCB0PXNbci4kZ2V0QXR0cmlidXRlc10oKTtmb3IoY29uc3QgYSBvZiB0LnZhbHVlcygpKXtjb25zdCB0PWUuZ2V0KGFbci4kdWlkXSk7aWYodCl7YVtyLiRzZXRWYWx1ZV0odCk7YnJlYWt9fX1jb25zdCBjPXNbci4kZ2V0Q2hpbGRyZW5dKCk7Yy5sZW5ndGg+MCYmdC5wdXNoKFstMSxjXSl9Y29uc3QgYT1bJzx4ZmE6ZGF0YXNldHMgeG1sbnM6eGZhPSJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1kYXRhLzEuMC8iPiddO2lmKHRoaXMuZGF0YXNldClmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGFzZXRbci4kZ2V0Q2hpbGRyZW5dKCkpImRhdGEiIT09ZVtyLiRub2RlTmFtZV0mJmVbci4kdG9TdHJpbmddKGEpO3RoaXMuZGF0YVtyLiR0b1N0cmluZ10oYSk7YS5wdXNoKCI8L3hmYTpkYXRhc2V0cz4iKTtyZXR1cm4gYS5qb2luKCIiKX19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuWEZBUGFyc2VyPXZvaWQgMDthKDExNik7YSgxMjcpO2EoMTI5KTthKDEzMik7YSgxMzQpO2EoMTM2KTthKDEzOCk7YSgxNDApO3ZhciByPWEoMjI5KSxuPWEoMjIyKSxpPWEoMjQ1KSxzPWEoMTQ1KTtjbGFzcyBYRkFQYXJzZXIgZXh0ZW5kcyBuLlhNTFBhcnNlckJhc2V7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07c3VwZXIoKTt0aGlzLl9idWlsZGVyPW5ldyBpLkJ1aWxkZXIoZSk7dGhpcy5fc3RhY2s9W107dGhpcy5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fTt0aGlzLl9pZHM9bmV3IE1hcDt0aGlzLl9jdXJyZW50PXRoaXMuX2J1aWxkZXIuYnVpbGRSb290KHRoaXMuX2lkcyk7dGhpcy5fZXJyb3JDb2RlPW4uWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7dGhpcy5fd2hpdGVSZWdleD0vXlxzKyQvO3RoaXMuX25ic3BzPS9ceGEwKy9nO3RoaXMuX3JpY2hUZXh0PXR9cGFyc2UoZSl7dGhpcy5wYXJzZVhtbChlKTtpZih0aGlzLl9lcnJvckNvZGU9PT1uLlhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKXt0aGlzLl9jdXJyZW50W3IuJGZpbmFsaXplXSgpO3JldHVybiB0aGlzLl9jdXJyZW50LmVsZW1lbnR9fW9uVGV4dChlKXtlPWUucmVwbGFjZSh0aGlzLl9uYnNwcywoZT0+ZS5zbGljZSgxKSsiICIpKTt0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFtyLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbci4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbci4kb25UZXh0XShlLnRyaW0oKSl9b25DZGF0YShlKXt0aGlzLl9jdXJyZW50W3IuJG9uVGV4dF0oZSl9X21rQXR0cmlidXRlcyhlLHQpe2xldCBhPW51bGwsbj1udWxsO2NvbnN0IGk9T2JqZWN0LmNyZWF0ZSh7fSk7Zm9yKGNvbnN0e25hbWU6byx2YWx1ZTpjfW9mIGUpaWYoInhtbG5zIj09PW8pYT8oMCxzLndhcm4pKGBYRkEgLSBtdWx0aXBsZSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbiA8JHt0fT5gKTphPWM7ZWxzZSBpZihvLnN0YXJ0c1dpdGgoInhtbG5zOiIpKXtjb25zdCBlPW8uc3Vic3RyaW5nKDYpO258fChuPVtdKTtuLnB1c2goe3ByZWZpeDplLHZhbHVlOmN9KX1lbHNle2NvbnN0IGU9by5pbmRleE9mKCI6Iik7aWYoLTE9PT1lKWlbb109YztlbHNle2xldCB0PWlbci4kbnNBdHRyaWJ1dGVzXTt0fHwodD1pW3IuJG5zQXR0cmlidXRlc109T2JqZWN0LmNyZWF0ZShudWxsKSk7Y29uc3RbYSxuXT1bby5zbGljZSgwLGUpLG8uc2xpY2UoZSsxKV07KHRbYV18fD1PYmplY3QuY3JlYXRlKG51bGwpKVtuXT1jfX1yZXR1cm5bYSxuLGldfV9nZXROYW1lQW5kUHJlZml4KGUsdCl7Y29uc3QgYT1lLmluZGV4T2YoIjoiKTtyZXR1cm4tMT09PWE/W2UsbnVsbF06W2Uuc3Vic3RyaW5nKGErMSksdD8iIjplLnN1YnN0cmluZygwLGEpXX1vbkJlZ2luRWxlbWVudChlLHQsYSl7Y29uc3RbbixpLHNdPXRoaXMuX21rQXR0cmlidXRlcyh0LGUpLFtvLGNdPXRoaXMuX2dldE5hbWVBbmRQcmVmaXgoZSx0aGlzLl9idWlsZGVyLmlzTnNBZ25vc3RpYygpKSxsPXRoaXMuX2J1aWxkZXIuYnVpbGQoe25zUHJlZml4OmMsbmFtZTpvLGF0dHJpYnV0ZXM6cyxuYW1lc3BhY2U6bixwcmVmaXhlczppfSk7bFtyLiRnbG9iYWxEYXRhXT10aGlzLl9nbG9iYWxEYXRhO2lmKGEpe2xbci4kZmluYWxpemVdKCk7dGhpcy5fY3VycmVudFtyLiRvbkNoaWxkXShsKSYmbFtyLiRzZXRJZF0odGhpcy5faWRzKTtsW3IuJGNsZWFuXSh0aGlzLl9idWlsZGVyKX1lbHNle3RoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudCk7dGhpcy5fY3VycmVudD1sfX1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLl9jdXJyZW50O2lmKHRbci4kaXNDREFUQVhtbF0oKSYmInN0cmluZyI9PXR5cGVvZiB0W3IuJGNvbnRlbnRdKXtjb25zdCBlPW5ldyBYRkFQYXJzZXI7ZS5fZ2xvYmFsRGF0YT10aGlzLl9nbG9iYWxEYXRhO2NvbnN0IGE9ZS5wYXJzZSh0W3IuJGNvbnRlbnRdKTt0W3IuJGNvbnRlbnRdPW51bGw7dFtyLiRvbkNoaWxkXShhKX10W3IuJGZpbmFsaXplXSgpO3RoaXMuX2N1cnJlbnQ9dGhpcy5fc3RhY2sucG9wKCk7dGhpcy5fY3VycmVudFtyLiRvbkNoaWxkXSh0KSYmdFtyLiRzZXRJZF0odGhpcy5faWRzKTt0W3IuJGNsZWFuXSh0aGlzLl9idWlsZGVyKX1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX10LlhGQVBhcnNlcj1YRkFQYXJzZXJ9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5CdWlsZGVyPXZvaWQgMDthKDE0MCk7dmFyIHI9YSgyMzUpLG49YSgyMjkpLGk9YSgyNDYpLHM9YSgyMzEpLG89YSgyNTUpLGM9YSgxNDUpLGw9YSgyNDEpO2NsYXNzIFJvb3QgZXh0ZW5kcyBsLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigtMSwicm9vdCIsT2JqZWN0LmNyZWF0ZShudWxsKSk7dGhpcy5lbGVtZW50PW51bGw7dGhpc1tuLiRpZHNdPWV9W24uJG9uQ2hpbGRdKGUpe3RoaXMuZWxlbWVudD1lO3JldHVybiEwfVtuLiRmaW5hbGl6ZV0oKXtzdXBlcltuLiRmaW5hbGl6ZV0oKTtpZih0aGlzLmVsZW1lbnQudGVtcGxhdGUgaW5zdGFuY2VvZiBzLlRlbXBsYXRlKXt0aGlzW24uJGlkc10uc2V0KG4uJHJvb3QsdGhpcy5lbGVtZW50KTt0aGlzLmVsZW1lbnQudGVtcGxhdGVbbi4kcmVzb2x2ZVByb3RvdHlwZXNdKHRoaXNbbi4kaWRzXSk7dGhpcy5lbGVtZW50LnRlbXBsYXRlW24uJGlkc109dGhpc1tuLiRpZHNdfX19Y2xhc3MgRW1wdHkgZXh0ZW5kcyBsLlhGQU9iamVjdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC0xLCIiLE9iamVjdC5jcmVhdGUobnVsbCkpfVtuLiRvbkNoaWxkXShlKXtyZXR1cm4hMX19dC5CdWlsZGVyPWNsYXNzIEJ1aWxkZXJ7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9uYW1lc3BhY2VTdGFjaz1bXTt0aGlzLl9uc0Fnbm9zdGljTGV2ZWw9MDt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcz1uZXcgTWFwO3RoaXMuX25hbWVzcGFjZXM9bmV3IE1hcDt0aGlzLl9uZXh0TnNJZD1NYXRoLm1heCguLi5PYmplY3QudmFsdWVzKHIuTmFtZXNwYWNlSWRzKS5tYXAoKGU9PntsZXR7aWQ6dH09ZTtyZXR1cm4gdH0pKSk7dGhpcy5fY3VycmVudE5hbWVzcGFjZT1lfHxuZXcgby5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfWJ1aWxkUm9vdChlKXtyZXR1cm4gbmV3IFJvb3QoZSl9YnVpbGQoZSl7bGV0e25zUHJlZml4OnQsbmFtZTphLGF0dHJpYnV0ZXM6cyxuYW1lc3BhY2U6byxwcmVmaXhlczpjfT1lO2NvbnN0IGw9bnVsbCE9PW87aWYobCl7dGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKTt0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShvKX1jJiZ0aGlzLl9hZGROYW1lc3BhY2VQcmVmaXgoYyk7aWYocy5oYXNPd25Qcm9wZXJ0eShuLiRuc0F0dHJpYnV0ZXMpKXtjb25zdCBlPWkuTmFtZXNwYWNlU2V0VXAuZGF0YXNldHMsdD1zW24uJG5zQXR0cmlidXRlc107bGV0IGE9bnVsbDtmb3IoY29uc3RbcixuXW9mIE9iamVjdC5lbnRyaWVzKHQpKXtpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZShyKT09PWUpe2E9e3hmYTpufTticmVha319YT9zW24uJG5zQXR0cmlidXRlc109YTpkZWxldGUgc1tuLiRuc0F0dHJpYnV0ZXNdfWNvbnN0IGg9dGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UodCksdT1oPy5bci4kYnVpbGRYRkFPYmplY3RdKGEscyl8fG5ldyBFbXB0eTt1W24uJGlzTnNBZ25vc3RpY10oKSYmdGhpcy5fbnNBZ25vc3RpY0xldmVsKys7KGx8fGN8fHVbbi4kaXNOc0Fnbm9zdGljXSgpKSYmKHVbbi4kY2xlYW51cF09e2hhc05hbWVzcGFjZTpsLHByZWZpeGVzOmMsbnNBZ25vc3RpYzp1W24uJGlzTnNBZ25vc3RpY10oKX0pO3JldHVybiB1fWlzTnNBZ25vc3RpYygpe3JldHVybiB0aGlzLl9uc0Fnbm9zdGljTGV2ZWw+MH1fc2VhcmNoTmFtZXNwYWNlKGUpe2xldCB0PXRoaXMuX25hbWVzcGFjZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Zm9yKGNvbnN0W2Ese2NoZWNrOm59XW9mIE9iamVjdC5lbnRyaWVzKHIuTmFtZXNwYWNlSWRzKSlpZihuKGUpKXt0PWkuTmFtZXNwYWNlU2V0VXBbYV07aWYodCl7dGhpcy5fbmFtZXNwYWNlcy5zZXQoZSx0KTtyZXR1cm4gdH1icmVha310PW5ldyBvLlVua25vd25OYW1lc3BhY2UoKyt0aGlzLl9uZXh0TnNJZCk7dGhpcy5fbmFtZXNwYWNlcy5zZXQoZSx0KTtyZXR1cm4gdH1fYWRkTmFtZXNwYWNlUHJlZml4KGUpe2Zvcihjb25zdHtwcmVmaXg6dCx2YWx1ZTphfW9mIGUpe2NvbnN0IGU9dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGEpO2xldCByPXRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldCh0KTtpZighcil7cj1bXTt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5zZXQodCxyKX1yLnB1c2goZSl9fV9nZXROYW1lc3BhY2VUb1VzZShlKXtpZighZSlyZXR1cm4gdGhpcy5fY3VycmVudE5hbWVzcGFjZTtjb25zdCB0PXRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldChlKTtpZih0Py5sZW5ndGg+MClyZXR1cm4gdC5hdCgtMSk7KDAsYy53YXJuKShgVW5rbm93biBuYW1lc3BhY2UgcHJlZml4OiAke2V9LmApO3JldHVybiBudWxsfWNsZWFuKGUpe2NvbnN0e2hhc05hbWVzcGFjZTp0LHByZWZpeGVzOmEsbnNBZ25vc3RpYzpyfT1lO3QmJih0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX25hbWVzcGFjZVN0YWNrLnBvcCgpKTthJiZhLmZvckVhY2goKGU9PntsZXR7cHJlZml4OnR9PWU7dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHQpLnBvcCgpfSkpO3ImJnRoaXMuX25zQWdub3N0aWNMZXZlbC0tfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5OYW1lc3BhY2VTZXRVcD12b2lkIDA7dmFyIHI9YSgyNDcpLG49YSgyNDgpLGk9YSgyNDkpLHM9YSgyNTApLG89YSgyNTEpLGM9YSgyNTIpLGw9YSgyMzEpLGg9YSgyNTMpLHU9YSgyNTQpO2NvbnN0IGQ9e2NvbmZpZzpyLkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOm4uQ29ubmVjdGlvblNldE5hbWVzcGFjZSxkYXRhc2V0czppLkRhdGFzZXRzTmFtZXNwYWNlLGxvY2FsZVNldDpzLkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6by5TaWduYXR1cmVOYW1lc3BhY2Usc3R5bGVzaGVldDpjLlN0eWxlc2hlZXROYW1lc3BhY2UsdGVtcGxhdGU6bC5UZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6aC5YZHBOYW1lc3BhY2UseGh0bWw6dS5YaHRtbE5hbWVzcGFjZX07dC5OYW1lc3BhY2VTZXRVcD1kfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuQ29uZmlnTmFtZXNwYWNlPXZvaWQgMDthKDE0MCk7dmFyIHI9YSgyMzUpLG49YSgyMjkpLGk9YSgyNDEpLHM9YSgyMzgpLG89YSgxNDUpO2NvbnN0IGM9ci5OYW1lc3BhY2VJZHMuY29uZmlnLmlkO2NsYXNzIEFjcm9iYXQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhY3JvYmF0IiwhMCk7dGhpcy5hY3JvYmF0Nz1udWxsO3RoaXMuYXV0b1NhdmU9bnVsbDt0aGlzLmNvbW1vbj1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzPW51bGw7dGhpcy5zdWJtaXRVcmw9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEFjcm9iYXQ3IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWNyb2JhdDciLCEwKTt0aGlzLmR5bmFtaWNSZW5kZXI9bnVsbH19Y2xhc3MgQURCRV9KU0NvbnNvbGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJBREJFX0pTQ29uc29sZSIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9fWNsYXNzIEFEQkVfSlNEZWJ1Z2dlciBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIkFEQkVfSlNEZWJ1Z2dlciIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9fWNsYXNzIEFkZFNpbGVudFByaW50IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhZGRTaWxlbnRQcmludCIpfX1jbGFzcyBBZGRWaWV3ZXJQcmVmZXJlbmNlcyBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWRkVmlld2VyUHJlZmVyZW5jZXMiKX19Y2xhc3MgQWRqdXN0RGF0YSBleHRlbmRzIGkuT3B0aW9uMTB7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWRqdXN0RGF0YSIpfX1jbGFzcyBBZG9iZUV4dGVuc2lvbkxldmVsIGV4dGVuZHMgaS5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGU9PmU+PTEmJmU8PTgpKX19Y2xhc3MgQWdlbnQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhZ2VudCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmNvbW1vbj1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgQWx3YXlzRW1iZWQgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWx3YXlzRW1iZWQiKX19Y2xhc3MgQW1kIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYW1kIil9fWNsYXNzIEFyZWEgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhcmVhIik7dGhpcy5sZXZlbD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubGV2ZWwsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MSYmZTw9M30pO3RoaXMubmFtZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiIiwiYmFyY29kZSIsImNvcmVpbml0IiwiZGV2aWNlRHJpdmVyIiwiZm9udCIsImdlbmVyYWwiLCJsYXlvdXQiLCJtZXJnZSIsInNjcmlwdCIsInNpZ25hdHVyZSIsInNvdXJjZVNldCIsInRlbXBsYXRlQ2FjaGUiXSl9fWNsYXNzIEF0dHJpYnV0ZXMgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9fWNsYXNzIEF1dG9TYXZlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYXV0b1NhdmUiLFsiZGlzYWJsZWQiLCJlbmFibGVkIl0pfX1jbGFzcyBCYXNlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYmFzZSIpfX1jbGFzcyBCYXRjaE91dHB1dCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImJhdGNoT3V0cHV0Iik7dGhpcy5mb3JtYXQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pfX1jbGFzcyBCZWhhdmlvck92ZXJyaWRlIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImJlaGF2aW9yT3ZlcnJpZGUiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT1uZXcgTWFwKHRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIjoiKSkpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSl9fWNsYXNzIENhY2hlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY2FjaGUiLCEwKTt0aGlzLnRlbXBsYXRlQ2FjaGU9bnVsbH19Y2xhc3MgQ2hhbmdlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjaGFuZ2UiKX19Y2xhc3MgQ29tbW9uIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tbW9uIiwhMCk7dGhpcy5kYXRhPW51bGw7dGhpcy5sb2NhbGU9bnVsbDt0aGlzLmxvY2FsZVNldD1udWxsO3RoaXMubWVzc2FnaW5nPW51bGw7dGhpcy5zdXBwcmVzc0Jhbm5lcj1udWxsO3RoaXMudGVtcGxhdGU9bnVsbDt0aGlzLnZhbGlkYXRpb25NZXNzYWdpbmc9bnVsbDt0aGlzLnZlcnNpb25Db250cm9sPW51bGw7dGhpcy5sb2c9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIENvbXByZXNzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tcHJlc3MiKTt0aGlzLnNjb3BlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnNjb3BlLFsiaW1hZ2VPbmx5IiwiZG9jdW1lbnQiXSl9fWNsYXNzIENvbXByZXNzTG9naWNhbFN0cnVjdHVyZSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIil9fWNsYXNzIENvbXByZXNzT2JqZWN0U3RyZWFtIGV4dGVuZHMgaS5PcHRpb24xMHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb21wcmVzc09iamVjdFN0cmVhbSIpfX1jbGFzcyBDb21wcmVzc2lvbiBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNvbXByZXNzaW9uIiwhMCk7dGhpcy5jb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmU9bnVsbDt0aGlzLmNvbXByZXNzT2JqZWN0U3RyZWFtPW51bGw7dGhpcy5sZXZlbD1udWxsO3RoaXMudHlwZT1udWxsfX1jbGFzcyBDb25maWcgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb25maWciLCEwKTt0aGlzLmFjcm9iYXQ9bnVsbDt0aGlzLnByZXNlbnQ9bnVsbDt0aGlzLnRyYWNlPW51bGw7dGhpcy5hZ2VudD1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgQ29uZm9ybWFuY2UgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb25mb3JtYW5jZSIsWyJBIiwiQiJdKX19Y2xhc3MgQ29udGVudENvcHkgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNvbnRlbnRDb3B5Iil9fWNsYXNzIENvcGllcyBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb3BpZXMiLDEsKGU9PmU+PTEpKX19Y2xhc3MgQ3JlYXRvciBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNyZWF0b3IiKX19Y2xhc3MgQ3VycmVudFBhZ2UgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY3VycmVudFBhZ2UiLDAsKGU9PmU+PTApKX19Y2xhc3MgRGF0YSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImRhdGEiLCEwKTt0aGlzLmFkanVzdERhdGE9bnVsbDt0aGlzLmF0dHJpYnV0ZXM9bnVsbDt0aGlzLmluY3JlbWVudGFsTG9hZD1udWxsO3RoaXMub3V0cHV0WFNMPW51bGw7dGhpcy5yYW5nZT1udWxsO3RoaXMucmVjb3JkPW51bGw7dGhpcy5zdGFydE5vZGU9bnVsbDt0aGlzLnVyaT1udWxsO3RoaXMud2luZG93PW51bGw7dGhpcy54c2w9bnVsbDt0aGlzLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgRGVidWcgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkZWJ1ZyIsITApO3RoaXMudXJpPW51bGx9fWNsYXNzIERlZmF1bHRUeXBlZmFjZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkZWZhdWx0VHlwZWZhY2UiKTt0aGlzLndyaXRpbmdTY3JpcHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUud3JpdGluZ1NjcmlwdCxbIioiLCJBcmFiaWMiLCJDeXJpbGxpYyIsIkVhc3RFdXJvcGVhblJvbWFuIiwiR3JlZWsiLCJIZWJyZXciLCJKYXBhbmVzZSIsIktvcmVhbiIsIlJvbWFuIiwiU2ltcGxpZmllZENoaW5lc2UiLCJUaGFpIiwiVHJhZGl0aW9uYWxDaGluZXNlIiwiVmlldG5hbWVzZSJdKX19Y2xhc3MgRGVzdGluYXRpb24gZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX19Y2xhc3MgRG9jdW1lbnRBc3NlbWJseSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZG9jdW1lbnRBc3NlbWJseSIpfX1jbGFzcyBEcml2ZXIgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkcml2ZXIiLCEwKTt0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiI7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIER1cGxleE9wdGlvbiBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX19Y2xhc3MgRHluYW1pY1JlbmRlciBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImR5bmFtaWNSZW5kZXIiLFsiZm9yYmlkZGVuIiwicmVxdWlyZWQiXSl9fWNsYXNzIEVtYmVkIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbWJlZCIpfX1jbGFzcyBFbmNyeXB0IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmNyeXB0Iil9fWNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmNyeXB0aW9uIiwhMCk7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5lbmNyeXB0aW9uTGV2ZWw9bnVsbDt0aGlzLnBlcm1pc3Npb25zPW51bGx9fWNsYXNzIEVuY3J5cHRpb25MZXZlbCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX19Y2xhc3MgRW5mb3JjZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImVuZm9yY2UiKX19Y2xhc3MgRXF1YXRlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZXF1YXRlIik7dGhpcy5mb3JjZT0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUuZm9yY2UsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+MD09PWV9KTt0aGlzLmZyb209ZS5mcm9tfHwiIjt0aGlzLnRvPWUudG98fCIifX1jbGFzcyBFcXVhdGVSYW5nZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImVxdWF0ZVJhbmdlIik7dGhpcy5mcm9tPWUuZnJvbXx8IiI7dGhpcy50bz1lLnRvfHwiIjt0aGlzLl91bmljb2RlUmFuZ2U9ZS51bmljb2RlUmFuZ2V8fCIifWdldCB1bmljb2RlUmFuZ2UoKXtjb25zdCBlPVtdLHQ9L1VcKyhbMC05YS1mQS1GXSspLyxhPXRoaXMuX3VuaWNvZGVSYW5nZTtmb3IobGV0IHIgb2YgYS5zcGxpdCgiLCIpLm1hcCgoZT0+ZS50cmltKCkpKS5maWx0ZXIoKGU9PiEhZSkpKXtyPXIuc3BsaXQoIi0iLDIpLm1hcCgoZT0+e2NvbnN0IGE9ZS5tYXRjaCh0KTtyZXR1cm4gYT9wYXJzZUludChhWzFdLDE2KTowfSkpOzE9PT1yLmxlbmd0aCYmci5wdXNoKHJbMF0pO2UucHVzaChyKX1yZXR1cm4oMCxvLnNoYWRvdykodGhpcywidW5pY29kZVJhbmdlIixlKX19Y2xhc3MgRXhjbHVkZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJleGNsdWRlIil9W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+ZSYmWyJjYWxjdWxhdGUiLCJjbG9zZSIsImVudGVyIiwiZXhpdCIsImluaXRpYWxpemUiLCJyZWFkeSIsInZhbGlkYXRlIl0uaW5jbHVkZXMoZSkpKX19Y2xhc3MgRXhjbHVkZU5TIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZXhjbHVkZU5TIil9fWNsYXNzIEZsaXBMYWJlbCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImZsaXBMYWJlbCIsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pfX1jbGFzcyBGb250SW5mbyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImZvbnRJbmZvIiwhMCk7dGhpcy5lbWJlZD1udWxsO3RoaXMubWFwPW51bGw7dGhpcy5zdWJzZXRCZWxvdz1udWxsO3RoaXMuYWx3YXlzRW1iZWQ9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWZhdWx0VHlwZWZhY2U9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5uZXZlckVtYmVkPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBGb3JtRmllbGRGaWxsaW5nIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJmb3JtRmllbGRGaWxsaW5nIil9fWNsYXNzIEdyb3VwUGFyZW50IGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZ3JvdXBQYXJlbnQiKX19Y2xhc3MgSWZFbXB0eSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImlmRW1wdHkiLFsiZGF0YVZhbHVlIiwiZGF0YUdyb3VwIiwiaWdub3JlIiwicmVtb3ZlIl0pfX1jbGFzcyBJbmNsdWRlWERQQ29udGVudCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImluY2x1ZGVYRFBDb250ZW50Iil9fWNsYXNzIEluY3JlbWVudGFsTG9hZCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImluY3JlbWVudGFsTG9hZCIsWyJub25lIiwiZm9yd2FyZE9ubHkiXSl9fWNsYXNzIEluY3JlbWVudGFsTWVyZ2UgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImluY3JlbWVudGFsTWVyZ2UiKX19Y2xhc3MgSW50ZXJhY3RpdmUgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImludGVyYWN0aXZlIil9fWNsYXNzIEpvZyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImpvZyIsWyJ1c2VQcmludGVyU2V0dGluZyIsIm5vbmUiLCJwYWdlU2V0Il0pfX1jbGFzcyBMYWJlbFByaW50ZXIgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJsYWJlbFByaW50ZXIiLCEwKTt0aGlzLm5hbWU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbInpwbCIsImRwbCIsImlwbCIsInRjcGwiXSk7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZmxpcExhYmVsPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIExheW91dCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxheW91dCIsWyJwYWdpbmF0ZSIsInBhbmVsIl0pfX1jbGFzcyBMZXZlbCBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJsZXZlbCIsMCwoZT0+ZT4wKSl9fWNsYXNzIExpbmVhcml6ZWQgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxpbmVhcml6ZWQiKX19Y2xhc3MgTG9jYWxlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibG9jYWxlIil9fWNsYXNzIExvY2FsZVNldCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxvY2FsZVNldCIpfX1jbGFzcyBMb2cgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJsb2ciLCEwKTt0aGlzLm1vZGU9bnVsbDt0aGlzLnRocmVzaG9sZD1udWxsO3RoaXMudG89bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBNYXBFbGVtZW50IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibWFwIiwhMCk7dGhpcy5lcXVhdGU9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5lcXVhdGVSYW5nZT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgTWVkaXVtSW5mbyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1lZGl1bUluZm8iLCEwKTt0aGlzLm1hcD1udWxsfX1jbGFzcyBNZXNzYWdlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibWVzc2FnZSIsITApO3RoaXMubXNnSWQ9bnVsbDt0aGlzLnNldmVyaXR5PW51bGx9fWNsYXNzIE1lc3NhZ2luZyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1lc3NhZ2luZyIsITApO3RoaXMubWVzc2FnZT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgTW9kZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1vZGUiLFsiYXBwZW5kIiwib3ZlcndyaXRlIl0pfX1jbGFzcyBNb2RpZnlBbm5vdHMgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm1vZGlmeUFubm90cyIpfX1jbGFzcyBNc2dJZCBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJtc2dJZCIsMSwoZT0+ZT49MSkpfX1jbGFzcyBOYW1lQXR0ciBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm5hbWVBdHRyIil9fWNsYXNzIE5ldmVyRW1iZWQgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibmV2ZXJFbWJlZCIpfX1jbGFzcyBOdW1iZXJPZkNvcGllcyBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZT0+ZT49MiYmZTw9NSkpfX1jbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywib3BlbkFjdGlvbiIsITApO3RoaXMuZGVzdGluYXRpb249bnVsbH19Y2xhc3MgT3V0cHV0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywib3V0cHV0IiwhMCk7dGhpcy50bz1udWxsO3RoaXMudHlwZT1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIE91dHB1dEJpbiBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm91dHB1dEJpbiIpfX1jbGFzcyBPdXRwdXRYU0wgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJvdXRwdXRYU0wiLCEwKTt0aGlzLnVyaT1udWxsfX1jbGFzcyBPdmVycHJpbnQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJvdmVycHJpbnQiLFsibm9uZSIsImJvdGgiLCJkcmF3IiwiZmllbGQiXSl9fWNsYXNzIFBhY2tldHMgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWNrZXRzIil9W24uJGZpbmFsaXplXSgpeyIqIiE9PXRoaXNbbi4kY29udGVudF0mJih0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PlsiY29uZmlnIiwiZGF0YXNldHMiLCJ0ZW1wbGF0ZSIsInhmZGYiLCJ4c2x0Il0uaW5jbHVkZXMoZSkpKSl9fWNsYXNzIFBhZ2VPZmZzZXQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdlT2Zmc2V0Iik7dGhpcy54PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS54LGRlZmF1bHRWYWx1ZToidXNlWERDU2V0dGluZyIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLnk9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnksZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTplPT4hMH0pfX1jbGFzcyBQYWdlUmFuZ2UgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdlUmFuZ2UiKX1bbi4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT5wYXJzZUludChlLDEwKSkpLHQ9W107Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSs9Mil0LnB1c2goZS5zbGljZShhLGErMikpO3RoaXNbbi4kY29udGVudF09dH19Y2xhc3MgUGFnaW5hdGlvbiBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBhZ2luYXRpb24iLFsic2ltcGxleCIsImR1cGxleFNob3J0RWRnZSIsImR1cGxleExvbmdFZGdlIl0pfX1jbGFzcyBQYWdpbmF0aW9uT3ZlcnJpZGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdpbmF0aW9uT3ZlcnJpZGUiLFsibm9uZSIsImZvcmNlRHVwbGV4IiwiZm9yY2VEdXBsZXhMb25nRWRnZSIsImZvcmNlRHVwbGV4U2hvcnRFZGdlIiwiZm9yY2VTaW1wbGV4Il0pfX1jbGFzcyBQYXJ0IGV4dGVuZHMgaS5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBhcnQiLDEsKGU9PiExKSl9fWNsYXNzIFBjbCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBjbCIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5qb2c9bnVsbDt0aGlzLm1lZGl1bUluZm89bnVsbDt0aGlzLm91dHB1dEJpbj1udWxsO3RoaXMucGFnZU9mZnNldD1udWxsO3RoaXMuc3RhcGxlPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUGRmIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGRmIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5hZG9iZUV4dGVuc2lvbkxldmVsPW51bGw7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuY29tcHJlc3Npb249bnVsbDt0aGlzLmNyZWF0b3I9bnVsbDt0aGlzLmVuY3J5cHRpb249bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5pbnRlcmFjdGl2ZT1udWxsO3RoaXMubGluZWFyaXplZD1udWxsO3RoaXMub3BlbkFjdGlvbj1udWxsO3RoaXMucGRmYT1udWxsO3RoaXMucHJvZHVjZXI9bnVsbDt0aGlzLnJlbmRlclBvbGljeT1udWxsO3RoaXMuc2NyaXB0TW9kZWw9bnVsbDt0aGlzLnNpbGVudFByaW50PW51bGw7dGhpcy5zdWJtaXRGb3JtYXQ9bnVsbDt0aGlzLnRhZ2dlZD1udWxsO3RoaXMudmVyc2lvbj1udWxsO3RoaXMudmlld2VyUHJlZmVyZW5jZXM9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBQZGZhIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGRmYSIsITApO3RoaXMuYW1kPW51bGw7dGhpcy5jb25mb3JtYW5jZT1udWxsO3RoaXMuaW5jbHVkZVhEUENvbnRlbnQ9bnVsbDt0aGlzLnBhcnQ9bnVsbH19Y2xhc3MgUGVybWlzc2lvbnMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwZXJtaXNzaW9ucyIsITApO3RoaXMuYWNjZXNzaWJsZUNvbnRlbnQ9bnVsbDt0aGlzLmNoYW5nZT1udWxsO3RoaXMuY29udGVudENvcHk9bnVsbDt0aGlzLmRvY3VtZW50QXNzZW1ibHk9bnVsbDt0aGlzLmZvcm1GaWVsZEZpbGxpbmc9bnVsbDt0aGlzLm1vZGlmeUFubm90cz1udWxsO3RoaXMucGxhaW50ZXh0TWV0YWRhdGE9bnVsbDt0aGlzLnByaW50PW51bGw7dGhpcy5wcmludEhpZ2hRdWFsaXR5PW51bGx9fWNsYXNzIFBpY2tUcmF5QnlQREZTaXplIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwaWNrVHJheUJ5UERGU2l6ZSIpfX1jbGFzcyBQaWN0dXJlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGljdHVyZSIpfX1jbGFzcyBQbGFpbnRleHRNZXRhZGF0YSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGxhaW50ZXh0TWV0YWRhdGEiKX19Y2xhc3MgUHJlc2VuY2UgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmVzZW5jZSIsWyJwcmVzZXJ2ZSIsImRpc3NvbHZlIiwiZGlzc29sdmVTdHJ1Y3R1cmUiLCJpZ25vcmUiLCJyZW1vdmUiXSl9fWNsYXNzIFByZXNlbnQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmVzZW50IiwhMCk7dGhpcy5iZWhhdmlvck92ZXJyaWRlPW51bGw7dGhpcy5jYWNoZT1udWxsO3RoaXMuY29tbW9uPW51bGw7dGhpcy5jb3BpZXM9bnVsbDt0aGlzLmRlc3RpbmF0aW9uPW51bGw7dGhpcy5pbmNyZW1lbnRhbE1lcmdlPW51bGw7dGhpcy5sYXlvdXQ9bnVsbDt0aGlzLm91dHB1dD1udWxsO3RoaXMub3ZlcnByaW50PW51bGw7dGhpcy5wYWdpbmF0aW9uPW51bGw7dGhpcy5wYWdpbmF0aW9uT3ZlcnJpZGU9bnVsbDt0aGlzLnNjcmlwdD1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnhkcD1udWxsO3RoaXMuZHJpdmVyPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMubGFiZWxQcmludGVyPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMucGNsPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMucGRmPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMucHM9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJtaXRVcmw9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy53ZWJDbGllbnQ9bmV3IGkuWEZBT2JqZWN0QXJyYXk7dGhpcy56cGw9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFByaW50IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmludCIpfX1jbGFzcyBQcmludEhpZ2hRdWFsaXR5IGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmludEhpZ2hRdWFsaXR5Iil9fWNsYXNzIFByaW50U2NhbGluZyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfX1jbGFzcyBQcmludGVyTmFtZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInByaW50ZXJOYW1lIil9fWNsYXNzIFByb2R1Y2VyIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicHJvZHVjZXIiKX19Y2xhc3MgUHMgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcyIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5qb2c9bnVsbDt0aGlzLm1lZGl1bUluZm89bnVsbDt0aGlzLm91dHB1dEJpbj1udWxsO3RoaXMuc3RhcGxlPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUmFuZ2UgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicmFuZ2UiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChlPT5lLnNwbGl0KCItIikubWFwKChlPT5wYXJzZUludChlLnRyaW0oKSwxMCkpKSkpLmZpbHRlcigoZT0+ZS5ldmVyeSgoZT0+IWlzTmFOKGUpKSkpKS5tYXAoKGU9PnsxPT09ZS5sZW5ndGgmJmUucHVzaChlWzBdKTtyZXR1cm4gZX0pKX19Y2xhc3MgUmVjb3JkIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInJlY29yZCIpfVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0udHJpbSgpO2NvbnN0IGU9cGFyc2VJbnQodGhpc1tuLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tuLiRjb250ZW50XT1lKX19Y2xhc3MgUmVsZXZhbnQgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicmVsZXZhbnQiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fWNsYXNzIFJlbmFtZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJyZW5hbWUiKX1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKTsodGhpc1tuLiRjb250ZW50XS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoInhtbCIpfHxuZXcgUmVnRXhwKCJbXFxwe0x9X11bXFxwe0x9XFxkLl9cXHB7TX0tXSoiLCJ1IikudGVzdCh0aGlzW24uJGNvbnRlbnRdKSkmJigwLG8ud2FybikoIlhGQSAtIFJlbmFtZTogaW52YWxpZCBYRkEgbmFtZSIpfX1jbGFzcyBSZW5kZXJQb2xpY3kgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJyZW5kZXJQb2xpY3kiLFsic2VydmVyIiwiY2xpZW50Il0pfX1jbGFzcyBSdW5TY3JpcHRzIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX19Y2xhc3MgU2NyaXB0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic2NyaXB0IiwhMCk7dGhpcy5jdXJyZW50UGFnZT1udWxsO3RoaXMuZXhjbHVkZT1udWxsO3RoaXMucnVuU2NyaXB0cz1udWxsfX1jbGFzcyBTY3JpcHRNb2RlbCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInNjcmlwdE1vZGVsIixbIlhGQSIsIm5vbmUiXSl9fWNsYXNzIFNldmVyaXR5IGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic2V2ZXJpdHkiLFsiaWdub3JlIiwiZXJyb3IiLCJpbmZvcm1hdGlvbiIsInRyYWNlIiwid2FybmluZyJdKX19Y2xhc3MgU2lsZW50UHJpbnQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzaWxlbnRQcmludCIsITApO3RoaXMuYWRkU2lsZW50UHJpbnQ9bnVsbDt0aGlzLnByaW50ZXJOYW1lPW51bGx9fWNsYXNzIFN0YXBsZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN0YXBsZSIpO3RoaXMubW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5tb2RlLFsidXNlUHJpbnRlclNldHRpbmciLCJvbiIsIm9mZiJdKX19Y2xhc3MgU3RhcnROb2RlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic3RhcnROb2RlIil9fWNsYXNzIFN0YXJ0UGFnZSBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzdGFydFBhZ2UiLDAsKGU9PiEwKSl9fWNsYXNzIFN1Ym1pdEZvcm1hdCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1Ym1pdEZvcm1hdCIsWyJodG1sIiwiZGVsZWdhdGUiLCJmZGYiLCJ4bWwiLCJwZGYiXSl9fWNsYXNzIFN1Ym1pdFVybCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1Ym1pdFVybCIpfX1jbGFzcyBTdWJzZXRCZWxvdyBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzdWJzZXRCZWxvdyIsMTAwLChlPT5lPj0wJiZlPD0xMDApKX19Y2xhc3MgU3VwcHJlc3NCYW5uZXIgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1cHByZXNzQmFubmVyIil9fWNsYXNzIFRhZ2dlZCBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidGFnZ2VkIil9fWNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidGVtcGxhdGUiLCEwKTt0aGlzLmJhc2U9bnVsbDt0aGlzLnJlbGV2YW50PW51bGw7dGhpcy5zdGFydFBhZ2U9bnVsbDt0aGlzLnVyaT1udWxsO3RoaXMueHNsPW51bGx9fWNsYXNzIFRocmVzaG9sZCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRocmVzaG9sZCIsWyJ0cmFjZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ3YXJuaW5nIl0pfX1jbGFzcyBUbyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRvIixbIm51bGwiLCJtZW1vcnkiLCJzdGRlcnIiLCJzdGRvdXQiLCJzeXN0ZW0iLCJ1cmkiXSl9fWNsYXNzIFRlbXBsYXRlQ2FjaGUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ0ZW1wbGF0ZUNhY2hlIik7dGhpcy5tYXhFbnRyaWVzPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tYXhFbnRyaWVzLGRlZmF1bHRWYWx1ZTo1LHZhbGlkYXRlOmU9PmU+PTB9KX19Y2xhc3MgVHJhY2UgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ0cmFjZSIsITApO3RoaXMuYXJlYT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidHJhbnNmb3JtIiwhMCk7dGhpcy5ncm91cFBhcmVudD1udWxsO3RoaXMuaWZFbXB0eT1udWxsO3RoaXMubmFtZUF0dHI9bnVsbDt0aGlzLnBpY3R1cmU9bnVsbDt0aGlzLnByZXNlbmNlPW51bGw7dGhpcy5yZW5hbWU9bnVsbDt0aGlzLndoaXRlc3BhY2U9bnVsbH19Y2xhc3MgVHlwZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInR5cGUiLFsibm9uZSIsImFzY2lpODUiLCJhc2NpaUhleCIsImNjaXR0ZmF4IiwiZmxhdGUiLCJsenciLCJydW5MZW5ndGgiLCJuYXRpdmUiLCJ4ZHAiLCJtZXJnZWRYRFAiXSl9fWNsYXNzIFVyaSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInVyaSIpfX1jbGFzcyBWYWxpZGF0ZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRlIixbInByZVN1Ym1pdCIsInByZVByaW50IiwicHJlRXhlY3V0ZSIsInByZVNhdmUiXSl9fWNsYXNzIFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+WyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSkpKX19Y2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2luZyBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRpb25NZXNzYWdpbmciLFsiYWxsTWVzc2FnZXNJbmRpdmlkdWFsbHkiLCJhbGxNZXNzYWdlc1RvZ2V0aGVyIiwiZmlyc3RNZXNzYWdlT25seSIsIm5vTWVzc2FnZXMiXSl9fWNsYXNzIFZlcnNpb24gZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ2ZXJzaW9uIixbIjEuNyIsIjEuNiIsIjEuNSIsIjEuNCIsIjEuMyIsIjEuMiJdKX19Y2xhc3MgVmVyc2lvbkNvbnRyb2wgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJWZXJzaW9uQ29udHJvbCIpO3RoaXMub3V0cHV0QmVsb3c9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUub3V0cHV0QmVsb3csWyJ3YXJuIiwiZXJyb3IiLCJ1cGRhdGUiXSk7dGhpcy5zb3VyY2VBYm92ZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5zb3VyY2VBYm92ZSxbIndhcm4iLCJlcnJvciJdKTt0aGlzLnNvdXJjZUJlbG93PSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUJlbG93LFsidXBkYXRlIiwibWFpbnRhaW4iXSl9fWNsYXNzIFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidmlld2VyUHJlZmVyZW5jZXMiLCEwKTt0aGlzLkFEQkVfSlNDb25zb2xlPW51bGw7dGhpcy5BREJFX0pTRGVidWdnZXI9bnVsbDt0aGlzLmFkZFZpZXdlclByZWZlcmVuY2VzPW51bGw7dGhpcy5kdXBsZXhPcHRpb249bnVsbDt0aGlzLmVuZm9yY2U9bnVsbDt0aGlzLm51bWJlck9mQ29waWVzPW51bGw7dGhpcy5wYWdlUmFuZ2U9bnVsbDt0aGlzLnBpY2tUcmF5QnlQREZTaXplPW51bGw7dGhpcy5wcmludFNjYWxpbmc9bnVsbH19Y2xhc3MgV2ViQ2xpZW50IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywid2ViQ2xpZW50IiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBXaGl0ZXNwYWNlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywid2hpdGVzcGFjZSIsWyJwcmVzZXJ2ZSIsImx0cmltIiwibm9ybWFsaXplIiwicnRyaW0iLCJ0cmltIl0pfX1jbGFzcyBXaW5kb3cgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywid2luZG93Iil9W24uJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tuLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZT0+cGFyc2VJbnQoZSwxMCkpKTtpZihlLnNvbWUoKGU9PmlzTmFOKGUpKSkpdGhpc1tuLiRjb250ZW50XT1bMCwwXTtlbHNlezE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pO3RoaXNbbi4kY29udGVudF09ZX19fWNsYXNzIFhkYyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInhkYyIsITApO3RoaXMudXJpPW5ldyBpLlhGQU9iamVjdEFycmF5O3RoaXMueHNsPW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBYZHAgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ4ZHAiLCEwKTt0aGlzLnBhY2tldHM9bnVsbH19Y2xhc3MgWHNsIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywieHNsIiwhMCk7dGhpcy5kZWJ1Zz1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIFpwbCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInpwbCIsITApO3RoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIjt0aGlzLmJhdGNoT3V0cHV0PW51bGw7dGhpcy5mbGlwTGFiZWw9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgQ29uZmlnTmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihDb25maWdOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIENvbmZpZ05hbWVzcGFjZVtlXSh0KX1zdGF0aWMgYWNyb2JhdChlKXtyZXR1cm4gbmV3IEFjcm9iYXQoZSl9c3RhdGljIGFjcm9iYXQ3KGUpe3JldHVybiBuZXcgQWNyb2JhdDcoZSl9c3RhdGljIEFEQkVfSlNDb25zb2xlKGUpe3JldHVybiBuZXcgQURCRV9KU0NvbnNvbGUoZSl9c3RhdGljIEFEQkVfSlNEZWJ1Z2dlcihlKXtyZXR1cm4gbmV3IEFEQkVfSlNEZWJ1Z2dlcihlKX1zdGF0aWMgYWRkU2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBBZGRTaWxlbnRQcmludChlKX1zdGF0aWMgYWRkVmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBBZGRWaWV3ZXJQcmVmZXJlbmNlcyhlKX1zdGF0aWMgYWRqdXN0RGF0YShlKXtyZXR1cm4gbmV3IEFkanVzdERhdGEoZSl9c3RhdGljIGFkb2JlRXh0ZW5zaW9uTGV2ZWwoZSl7cmV0dXJuIG5ldyBBZG9iZUV4dGVuc2lvbkxldmVsKGUpfXN0YXRpYyBhZ2VudChlKXtyZXR1cm4gbmV3IEFnZW50KGUpfXN0YXRpYyBhbHdheXNFbWJlZChlKXtyZXR1cm4gbmV3IEFsd2F5c0VtYmVkKGUpfXN0YXRpYyBhbWQoZSl7cmV0dXJuIG5ldyBBbWQoZSl9c3RhdGljIGFyZWEoZSl7cmV0dXJuIG5ldyBBcmVhKGUpfXN0YXRpYyBhdHRyaWJ1dGVzKGUpe3JldHVybiBuZXcgQXR0cmlidXRlcyhlKX1zdGF0aWMgYXV0b1NhdmUoZSl7cmV0dXJuIG5ldyBBdXRvU2F2ZShlKX1zdGF0aWMgYmFzZShlKXtyZXR1cm4gbmV3IEJhc2UoZSl9c3RhdGljIGJhdGNoT3V0cHV0KGUpe3JldHVybiBuZXcgQmF0Y2hPdXRwdXQoZSl9c3RhdGljIGJlaGF2aW9yT3ZlcnJpZGUoZSl7cmV0dXJuIG5ldyBCZWhhdmlvck92ZXJyaWRlKGUpfXN0YXRpYyBjYWNoZShlKXtyZXR1cm4gbmV3IENhY2hlKGUpfXN0YXRpYyBjaGFuZ2UoZSl7cmV0dXJuIG5ldyBDaGFuZ2UoZSl9c3RhdGljIGNvbW1vbihlKXtyZXR1cm4gbmV3IENvbW1vbihlKX1zdGF0aWMgY29tcHJlc3MoZSl7cmV0dXJuIG5ldyBDb21wcmVzcyhlKX1zdGF0aWMgY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpe3JldHVybiBuZXcgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpfXN0YXRpYyBjb21wcmVzc09iamVjdFN0cmVhbShlKXtyZXR1cm4gbmV3IENvbXByZXNzT2JqZWN0U3RyZWFtKGUpfXN0YXRpYyBjb21wcmVzc2lvbihlKXtyZXR1cm4gbmV3IENvbXByZXNzaW9uKGUpfXN0YXRpYyBjb25maWcoZSl7cmV0dXJuIG5ldyBDb25maWcoZSl9c3RhdGljIGNvbmZvcm1hbmNlKGUpe3JldHVybiBuZXcgQ29uZm9ybWFuY2UoZSl9c3RhdGljIGNvbnRlbnRDb3B5KGUpe3JldHVybiBuZXcgQ29udGVudENvcHkoZSl9c3RhdGljIGNvcGllcyhlKXtyZXR1cm4gbmV3IENvcGllcyhlKX1zdGF0aWMgY3JlYXRvcihlKXtyZXR1cm4gbmV3IENyZWF0b3IoZSl9c3RhdGljIGN1cnJlbnRQYWdlKGUpe3JldHVybiBuZXcgQ3VycmVudFBhZ2UoZSl9c3RhdGljIGRhdGEoZSl7cmV0dXJuIG5ldyBEYXRhKGUpfXN0YXRpYyBkZWJ1ZyhlKXtyZXR1cm4gbmV3IERlYnVnKGUpfXN0YXRpYyBkZWZhdWx0VHlwZWZhY2UoZSl7cmV0dXJuIG5ldyBEZWZhdWx0VHlwZWZhY2UoZSl9c3RhdGljIGRlc3RpbmF0aW9uKGUpe3JldHVybiBuZXcgRGVzdGluYXRpb24oZSl9c3RhdGljIGRvY3VtZW50QXNzZW1ibHkoZSl7cmV0dXJuIG5ldyBEb2N1bWVudEFzc2VtYmx5KGUpfXN0YXRpYyBkcml2ZXIoZSl7cmV0dXJuIG5ldyBEcml2ZXIoZSl9c3RhdGljIGR1cGxleE9wdGlvbihlKXtyZXR1cm4gbmV3IER1cGxleE9wdGlvbihlKX1zdGF0aWMgZHluYW1pY1JlbmRlcihlKXtyZXR1cm4gbmV3IER5bmFtaWNSZW5kZXIoZSl9c3RhdGljIGVtYmVkKGUpe3JldHVybiBuZXcgRW1iZWQoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBFbmNyeXB0KGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbkxldmVsKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbkxldmVsKGUpfXN0YXRpYyBlbmZvcmNlKGUpe3JldHVybiBuZXcgRW5mb3JjZShlKX1zdGF0aWMgZXF1YXRlKGUpe3JldHVybiBuZXcgRXF1YXRlKGUpfXN0YXRpYyBlcXVhdGVSYW5nZShlKXtyZXR1cm4gbmV3IEVxdWF0ZVJhbmdlKGUpfXN0YXRpYyBleGNsdWRlKGUpe3JldHVybiBuZXcgRXhjbHVkZShlKX1zdGF0aWMgZXhjbHVkZU5TKGUpe3JldHVybiBuZXcgRXhjbHVkZU5TKGUpfXN0YXRpYyBmbGlwTGFiZWwoZSl7cmV0dXJuIG5ldyBGbGlwTGFiZWwoZSl9c3RhdGljIGZvbnRJbmZvKGUpe3JldHVybiBuZXcgRm9udEluZm8oZSl9c3RhdGljIGZvcm1GaWVsZEZpbGxpbmcoZSl7cmV0dXJuIG5ldyBGb3JtRmllbGRGaWxsaW5nKGUpfXN0YXRpYyBncm91cFBhcmVudChlKXtyZXR1cm4gbmV3IEdyb3VwUGFyZW50KGUpfXN0YXRpYyBpZkVtcHR5KGUpe3JldHVybiBuZXcgSWZFbXB0eShlKX1zdGF0aWMgaW5jbHVkZVhEUENvbnRlbnQoZSl7cmV0dXJuIG5ldyBJbmNsdWRlWERQQ29udGVudChlKX1zdGF0aWMgaW5jcmVtZW50YWxMb2FkKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxMb2FkKGUpfXN0YXRpYyBpbmNyZW1lbnRhbE1lcmdlKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxNZXJnZShlKX1zdGF0aWMgaW50ZXJhY3RpdmUoZSl7cmV0dXJuIG5ldyBJbnRlcmFjdGl2ZShlKX1zdGF0aWMgam9nKGUpe3JldHVybiBuZXcgSm9nKGUpfXN0YXRpYyBsYWJlbFByaW50ZXIoZSl7cmV0dXJuIG5ldyBMYWJlbFByaW50ZXIoZSl9c3RhdGljIGxheW91dChlKXtyZXR1cm4gbmV3IExheW91dChlKX1zdGF0aWMgbGV2ZWwoZSl7cmV0dXJuIG5ldyBMZXZlbChlKX1zdGF0aWMgbGluZWFyaXplZChlKXtyZXR1cm4gbmV3IExpbmVhcml6ZWQoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IExvY2FsZShlKX1zdGF0aWMgbG9jYWxlU2V0KGUpe3JldHVybiBuZXcgTG9jYWxlU2V0KGUpfXN0YXRpYyBsb2coZSl7cmV0dXJuIG5ldyBMb2coZSl9c3RhdGljIG1hcChlKXtyZXR1cm4gbmV3IE1hcEVsZW1lbnQoZSl9c3RhdGljIG1lZGl1bUluZm8oZSl7cmV0dXJuIG5ldyBNZWRpdW1JbmZvKGUpfXN0YXRpYyBtZXNzYWdlKGUpe3JldHVybiBuZXcgTWVzc2FnZShlKX1zdGF0aWMgbWVzc2FnaW5nKGUpe3JldHVybiBuZXcgTWVzc2FnaW5nKGUpfXN0YXRpYyBtb2RlKGUpe3JldHVybiBuZXcgTW9kZShlKX1zdGF0aWMgbW9kaWZ5QW5ub3RzKGUpe3JldHVybiBuZXcgTW9kaWZ5QW5ub3RzKGUpfXN0YXRpYyBtc2dJZChlKXtyZXR1cm4gbmV3IE1zZ0lkKGUpfXN0YXRpYyBuYW1lQXR0cihlKXtyZXR1cm4gbmV3IE5hbWVBdHRyKGUpfXN0YXRpYyBuZXZlckVtYmVkKGUpe3JldHVybiBuZXcgTmV2ZXJFbWJlZChlKX1zdGF0aWMgbnVtYmVyT2ZDb3BpZXMoZSl7cmV0dXJuIG5ldyBOdW1iZXJPZkNvcGllcyhlKX1zdGF0aWMgb3BlbkFjdGlvbihlKXtyZXR1cm4gbmV3IE9wZW5BY3Rpb24oZSl9c3RhdGljIG91dHB1dChlKXtyZXR1cm4gbmV3IE91dHB1dChlKX1zdGF0aWMgb3V0cHV0QmluKGUpe3JldHVybiBuZXcgT3V0cHV0QmluKGUpfXN0YXRpYyBvdXRwdXRYU0woZSl7cmV0dXJuIG5ldyBPdXRwdXRYU0woZSl9c3RhdGljIG92ZXJwcmludChlKXtyZXR1cm4gbmV3IE92ZXJwcmludChlKX1zdGF0aWMgcGFja2V0cyhlKXtyZXR1cm4gbmV3IFBhY2tldHMoZSl9c3RhdGljIHBhZ2VPZmZzZXQoZSl7cmV0dXJuIG5ldyBQYWdlT2Zmc2V0KGUpfXN0YXRpYyBwYWdlUmFuZ2UoZSl7cmV0dXJuIG5ldyBQYWdlUmFuZ2UoZSl9c3RhdGljIHBhZ2luYXRpb24oZSl7cmV0dXJuIG5ldyBQYWdpbmF0aW9uKGUpfXN0YXRpYyBwYWdpbmF0aW9uT3ZlcnJpZGUoZSl7cmV0dXJuIG5ldyBQYWdpbmF0aW9uT3ZlcnJpZGUoZSl9c3RhdGljIHBhcnQoZSl7cmV0dXJuIG5ldyBQYXJ0KGUpfXN0YXRpYyBwY2woZSl7cmV0dXJuIG5ldyBQY2woZSl9c3RhdGljIHBkZihlKXtyZXR1cm4gbmV3IFBkZihlKX1zdGF0aWMgcGRmYShlKXtyZXR1cm4gbmV3IFBkZmEoZSl9c3RhdGljIHBlcm1pc3Npb25zKGUpe3JldHVybiBuZXcgUGVybWlzc2lvbnMoZSl9c3RhdGljIHBpY2tUcmF5QnlQREZTaXplKGUpe3JldHVybiBuZXcgUGlja1RyYXlCeVBERlNpemUoZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBQaWN0dXJlKGUpfXN0YXRpYyBwbGFpbnRleHRNZXRhZGF0YShlKXtyZXR1cm4gbmV3IFBsYWludGV4dE1ldGFkYXRhKGUpfXN0YXRpYyBwcmVzZW5jZShlKXtyZXR1cm4gbmV3IFByZXNlbmNlKGUpfXN0YXRpYyBwcmVzZW50KGUpe3JldHVybiBuZXcgUHJlc2VudChlKX1zdGF0aWMgcHJpbnQoZSl7cmV0dXJuIG5ldyBQcmludChlKX1zdGF0aWMgcHJpbnRIaWdoUXVhbGl0eShlKXtyZXR1cm4gbmV3IFByaW50SGlnaFF1YWxpdHkoZSl9c3RhdGljIHByaW50U2NhbGluZyhlKXtyZXR1cm4gbmV3IFByaW50U2NhbGluZyhlKX1zdGF0aWMgcHJpbnRlck5hbWUoZSl7cmV0dXJuIG5ldyBQcmludGVyTmFtZShlKX1zdGF0aWMgcHJvZHVjZXIoZSl7cmV0dXJuIG5ldyBQcm9kdWNlcihlKX1zdGF0aWMgcHMoZSl7cmV0dXJuIG5ldyBQcyhlKX1zdGF0aWMgcmFuZ2UoZSl7cmV0dXJuIG5ldyBSYW5nZShlKX1zdGF0aWMgcmVjb3JkKGUpe3JldHVybiBuZXcgUmVjb3JkKGUpfXN0YXRpYyByZWxldmFudChlKXtyZXR1cm4gbmV3IFJlbGV2YW50KGUpfXN0YXRpYyByZW5hbWUoZSl7cmV0dXJuIG5ldyBSZW5hbWUoZSl9c3RhdGljIHJlbmRlclBvbGljeShlKXtyZXR1cm4gbmV3IFJlbmRlclBvbGljeShlKX1zdGF0aWMgcnVuU2NyaXB0cyhlKXtyZXR1cm4gbmV3IFJ1blNjcmlwdHMoZSl9c3RhdGljIHNjcmlwdChlKXtyZXR1cm4gbmV3IFNjcmlwdChlKX1zdGF0aWMgc2NyaXB0TW9kZWwoZSl7cmV0dXJuIG5ldyBTY3JpcHRNb2RlbChlKX1zdGF0aWMgc2V2ZXJpdHkoZSl7cmV0dXJuIG5ldyBTZXZlcml0eShlKX1zdGF0aWMgc2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBTaWxlbnRQcmludChlKX1zdGF0aWMgc3RhcGxlKGUpe3JldHVybiBuZXcgU3RhcGxlKGUpfXN0YXRpYyBzdGFydE5vZGUoZSl7cmV0dXJuIG5ldyBTdGFydE5vZGUoZSl9c3RhdGljIHN0YXJ0UGFnZShlKXtyZXR1cm4gbmV3IFN0YXJ0UGFnZShlKX1zdGF0aWMgc3VibWl0Rm9ybWF0KGUpe3JldHVybiBuZXcgU3VibWl0Rm9ybWF0KGUpfXN0YXRpYyBzdWJtaXRVcmwoZSl7cmV0dXJuIG5ldyBTdWJtaXRVcmwoZSl9c3RhdGljIHN1YnNldEJlbG93KGUpe3JldHVybiBuZXcgU3Vic2V0QmVsb3coZSl9c3RhdGljIHN1cHByZXNzQmFubmVyKGUpe3JldHVybiBuZXcgU3VwcHJlc3NCYW5uZXIoZSl9c3RhdGljIHRhZ2dlZChlKXtyZXR1cm4gbmV3IFRhZ2dlZChlKX1zdGF0aWMgdGVtcGxhdGUoZSl7cmV0dXJuIG5ldyBUZW1wbGF0ZShlKX1zdGF0aWMgdGVtcGxhdGVDYWNoZShlKXtyZXR1cm4gbmV3IFRlbXBsYXRlQ2FjaGUoZSl9c3RhdGljIHRocmVzaG9sZChlKXtyZXR1cm4gbmV3IFRocmVzaG9sZChlKX1zdGF0aWMgdG8oZSl7cmV0dXJuIG5ldyBUbyhlKX1zdGF0aWMgdHJhY2UoZSl7cmV0dXJuIG5ldyBUcmFjZShlKX1zdGF0aWMgdHJhbnNmb3JtKGUpe3JldHVybiBuZXcgVHJhbnNmb3JtKGUpfXN0YXRpYyB0eXBlKGUpe3JldHVybiBuZXcgVHlwZShlKX1zdGF0aWMgdXJpKGUpe3JldHVybiBuZXcgVXJpKGUpfXN0YXRpYyB2YWxpZGF0ZShlKXtyZXR1cm4gbmV3IFZhbGlkYXRlKGUpfXN0YXRpYyB2YWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyhlKXtyZXR1cm4gbmV3IFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpfXN0YXRpYyB2YWxpZGF0aW9uTWVzc2FnaW5nKGUpe3JldHVybiBuZXcgVmFsaWRhdGlvbk1lc3NhZ2luZyhlKX1zdGF0aWMgdmVyc2lvbihlKXtyZXR1cm4gbmV3IFZlcnNpb24oZSl9c3RhdGljIHZlcnNpb25Db250cm9sKGUpe3JldHVybiBuZXcgVmVyc2lvbkNvbnRyb2woZSl9c3RhdGljIHZpZXdlclByZWZlcmVuY2VzKGUpe3JldHVybiBuZXcgVmlld2VyUHJlZmVyZW5jZXMoZSl9c3RhdGljIHdlYkNsaWVudChlKXtyZXR1cm4gbmV3IFdlYkNsaWVudChlKX1zdGF0aWMgd2hpdGVzcGFjZShlKXtyZXR1cm4gbmV3IFdoaXRlc3BhY2UoZSl9c3RhdGljIHdpbmRvdyhlKXtyZXR1cm4gbmV3IFdpbmRvdyhlKX1zdGF0aWMgeGRjKGUpe3JldHVybiBuZXcgWGRjKGUpfXN0YXRpYyB4ZHAoZSl7cmV0dXJuIG5ldyBYZHAoZSl9c3RhdGljIHhzbChlKXtyZXR1cm4gbmV3IFhzbChlKX1zdGF0aWMgenBsKGUpe3JldHVybiBuZXcgWnBsKGUpfX10LkNvbmZpZ05hbWVzcGFjZT1Db25maWdOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Db25uZWN0aW9uU2V0TmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDIzNSksbj1hKDI0MSk7Y29uc3QgaT1yLk5hbWVzcGFjZUlkcy5jb25uZWN0aW9uU2V0LmlkO2NsYXNzIENvbm5lY3Rpb25TZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJjb25uZWN0aW9uU2V0IiwhMCk7dGhpcy53c2RsQ29ubmVjdGlvbj1uZXcgbi5YRkFPYmplY3RBcnJheTt0aGlzLnhtbENvbm5lY3Rpb249bmV3IG4uWEZBT2JqZWN0QXJyYXk7dGhpcy54c2RDb25uZWN0aW9uPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFZmZlY3RpdmVJbnB1dFBvbGljeSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksImVmZmVjdGl2ZUlucHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVmZmVjdGl2ZU91dHB1dFBvbGljeSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksImVmZmVjdGl2ZU91dHB1dFBvbGljeSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJvcGVyYXRpb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuaW5wdXQ9ZS5pbnB1dHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5vdXRwdXQ9ZS5vdXRwdXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUm9vdEVsZW1lbnQgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJyb290RWxlbWVudCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWN0aW9uIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwic29hcEFjdGlvbiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWRkcmVzcyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNvYXBBZGRyZXNzIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFVyaSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInVyaSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBXc2RsQWRkcmVzcyBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksIndzZGxBZGRyZXNzIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFdzZGxDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwid3NkbENvbm5lY3Rpb24iLCEwKTt0aGlzLmRhdGFEZXNjcmlwdGlvbj1lLmRhdGFEZXNjcmlwdGlvbnx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5lZmZlY3RpdmVJbnB1dFBvbGljeT1udWxsO3RoaXMuZWZmZWN0aXZlT3V0cHV0UG9saWN5PW51bGw7dGhpcy5vcGVyYXRpb249bnVsbDt0aGlzLnNvYXBBY3Rpb249bnVsbDt0aGlzLnNvYXBBZGRyZXNzPW51bGw7dGhpcy53c2RsQWRkcmVzcz1udWxsfX1jbGFzcyBYbWxDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwieG1sQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVyaT1udWxsfX1jbGFzcyBYc2RDb25uZWN0aW9uIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwieHNkQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJvb3RFbGVtZW50PW51bGw7dGhpcy51cmk9bnVsbH19Y2xhc3MgQ29ubmVjdGlvblNldE5hbWVzcGFjZXtzdGF0aWNbci4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoQ29ubmVjdGlvblNldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29ubmVjdGlvblNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY29ubmVjdGlvblNldChlKXtyZXR1cm4gbmV3IENvbm5lY3Rpb25TZXQoZSl9c3RhdGljIGVmZmVjdGl2ZUlucHV0UG9saWN5KGUpe3JldHVybiBuZXcgRWZmZWN0aXZlSW5wdXRQb2xpY3koZSl9c3RhdGljIGVmZmVjdGl2ZU91dHB1dFBvbGljeShlKXtyZXR1cm4gbmV3IEVmZmVjdGl2ZU91dHB1dFBvbGljeShlKX1zdGF0aWMgb3BlcmF0aW9uKGUpe3JldHVybiBuZXcgT3BlcmF0aW9uKGUpfXN0YXRpYyByb290RWxlbWVudChlKXtyZXR1cm4gbmV3IFJvb3RFbGVtZW50KGUpfXN0YXRpYyBzb2FwQWN0aW9uKGUpe3JldHVybiBuZXcgU29hcEFjdGlvbihlKX1zdGF0aWMgc29hcEFkZHJlc3MoZSl7cmV0dXJuIG5ldyBTb2FwQWRkcmVzcyhlKX1zdGF0aWMgdXJpKGUpe3JldHVybiBuZXcgVXJpKGUpfXN0YXRpYyB3c2RsQWRkcmVzcyhlKXtyZXR1cm4gbmV3IFdzZGxBZGRyZXNzKGUpfXN0YXRpYyB3c2RsQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFdzZGxDb25uZWN0aW9uKGUpfXN0YXRpYyB4bWxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgWG1sQ29ubmVjdGlvbihlKX1zdGF0aWMgeHNkQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IFhzZENvbm5lY3Rpb24oZSl9fXQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT1Db25uZWN0aW9uU2V0TmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuRGF0YXNldHNOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoMjI5KSxuPWEoMjM1KSxpPWEoMjQxKTtjb25zdCBzPW4uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2NsYXNzIERhdGEgZXh0ZW5kcyBpLlhtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRhIixlKX1bci4kaXNOc0Fnbm9zdGljXSgpe3JldHVybiEwfX1jbGFzcyBEYXRhc2V0cyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRhdGFzZXRzIiwhMCk7dGhpcy5kYXRhPW51bGw7dGhpcy5TaWduYXR1cmU9bnVsbH1bci4kb25DaGlsZF0oZSl7Y29uc3QgdD1lW3IuJG5vZGVOYW1lXTsoImRhdGEiPT09dCYmZVtyLiRuYW1lc3BhY2VJZF09PT1zfHwiU2lnbmF0dXJlIj09PXQmJmVbci4kbmFtZXNwYWNlSWRdPT09bi5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkKSYmKHRoaXNbdF09ZSk7dGhpc1tyLiRhcHBlbmRDaGlsZF0oZSl9fWNsYXNzIERhdGFzZXRzTmFtZXNwYWNle3N0YXRpY1tuLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihEYXRhc2V0c05hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gRGF0YXNldHNOYW1lc3BhY2VbZV0odCl9c3RhdGljIGRhdGFzZXRzKGUpe3JldHVybiBuZXcgRGF0YXNldHMoZSl9c3RhdGljIGRhdGEoZSl7cmV0dXJuIG5ldyBEYXRhKGUpfX10LkRhdGFzZXRzTmFtZXNwYWNlPURhdGFzZXRzTmFtZXNwYWNlfSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTG9jYWxlU2V0TmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDIzNSksbj1hKDI0MSksaT1hKDIzOCk7Y29uc3Qgcz1yLk5hbWVzcGFjZUlkcy5sb2NhbGVTZXQuaWQ7Y2xhc3MgQ2FsZW5kYXJTeW1ib2xzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiY2FsZW5kYXJTeW1ib2xzIiwhMCk7dGhpcy5uYW1lPSJncmVnb3JpYW4iO3RoaXMuZGF5TmFtZXM9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMik7dGhpcy5lcmFOYW1lcz1udWxsO3RoaXMubWVyaWRpZW1OYW1lcz1udWxsO3RoaXMubW9udGhOYW1lcz1uZXcgbi5YRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgQ3VycmVuY3lTeW1ib2wgZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJjdXJyZW5jeVN5bWJvbCIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsic3ltYm9sIiwiaXNvbmFtZSIsImRlY2ltYWwiXSl9fWNsYXNzIEN1cnJlbmN5U3ltYm9scyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImN1cnJlbmN5U3ltYm9scyIsITApO3RoaXMuY3VycmVuY3lTeW1ib2w9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMyl9fWNsYXNzIERhdGVQYXR0ZXJuIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0ZVBhdHRlcm4iKTt0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIERhdGVQYXR0ZXJucyBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRhdGVQYXR0ZXJucyIsITApO3RoaXMuZGF0ZVBhdHRlcm49bmV3IG4uWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIERhdGVUaW1lU3ltYm9scyBleHRlbmRzIG4uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRlVGltZVN5bWJvbHMiKX19Y2xhc3MgRGF5IGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF5Iil9fWNsYXNzIERheU5hbWVzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF5TmFtZXMiLCEwKTt0aGlzLmFiYnI9KDAsaS5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmRheT1uZXcgbi5YRkFPYmplY3RBcnJheSg3KX19Y2xhc3MgRXJhIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZXJhIil9fWNsYXNzIEVyYU5hbWVzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZXJhTmFtZXMiLCEwKTt0aGlzLmVyYT1uZXcgbi5YRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgTG9jYWxlIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibG9jYWxlIiwhMCk7dGhpcy5kZXNjPWUuZGVzY3x8IiI7dGhpcy5uYW1lPSJpc29uYW1lIjt0aGlzLmNhbGVuZGFyU3ltYm9scz1udWxsO3RoaXMuY3VycmVuY3lTeW1ib2xzPW51bGw7dGhpcy5kYXRlUGF0dGVybnM9bnVsbDt0aGlzLmRhdGVUaW1lU3ltYm9scz1udWxsO3RoaXMubnVtYmVyUGF0dGVybnM9bnVsbDt0aGlzLm51bWJlclN5bWJvbHM9bnVsbDt0aGlzLnRpbWVQYXR0ZXJucz1udWxsO3RoaXMudHlwZUZhY2VzPW51bGx9fWNsYXNzIExvY2FsZVNldCBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImxvY2FsZVNldCIsITApO3RoaXMubG9jYWxlPW5ldyBuLlhGQU9iamVjdEFycmF5fX1jbGFzcyBNZXJpZGllbSBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm1lcmlkaWVtIil9fWNsYXNzIE1lcmlkaWVtTmFtZXMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtZXJpZGllbU5hbWVzIiwhMCk7dGhpcy5tZXJpZGllbT1uZXcgbi5YRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgTW9udGggZXh0ZW5kcyBuLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtb250aCIpfX1jbGFzcyBNb250aE5hbWVzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibW9udGhOYW1lcyIsITApO3RoaXMuYWJicj0oMCxpLmdldEludGVnZXIpKHtkYXRhOmUuYWJicixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMubW9udGg9bmV3IG4uWEZBT2JqZWN0QXJyYXkoMTIpfX1jbGFzcyBOdW1iZXJQYXR0ZXJuIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyUGF0dGVybiIpO3RoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgTnVtYmVyUGF0dGVybnMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJudW1iZXJQYXR0ZXJucyIsITApO3RoaXMubnVtYmVyUGF0dGVybj1uZXcgbi5YRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgTnVtYmVyU3ltYm9sIGV4dGVuZHMgbi5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyU3ltYm9sIik7dGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJkZWNpbWFsIiwiZ3JvdXBpbmciLCJwZXJjZW50IiwibWludXMiLCJ6ZXJvIl0pfX1jbGFzcyBOdW1iZXJTeW1ib2xzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyU3ltYm9scyIsITApO3RoaXMubnVtYmVyU3ltYm9sPW5ldyBuLlhGQU9iamVjdEFycmF5KDUpfX1jbGFzcyBUaW1lUGF0dGVybiBleHRlbmRzIG4uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInRpbWVQYXR0ZXJuIik7dGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pfX1jbGFzcyBUaW1lUGF0dGVybnMgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0aW1lUGF0dGVybnMiLCEwKTt0aGlzLnRpbWVQYXR0ZXJuPW5ldyBuLlhGQU9iamVjdEFycmF5KDQpfX1jbGFzcyBUeXBlRmFjZSBleHRlbmRzIG4uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInR5cGVGYWNlIiwhMCk7dGhpcy5uYW1lPSIifGUubmFtZX19Y2xhc3MgVHlwZUZhY2VzIGV4dGVuZHMgbi5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywidHlwZUZhY2VzIiwhMCk7dGhpcy50eXBlRmFjZT1uZXcgbi5YRkFPYmplY3RBcnJheX19Y2xhc3MgTG9jYWxlU2V0TmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihMb2NhbGVTZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIExvY2FsZVNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY2FsZW5kYXJTeW1ib2xzKGUpe3JldHVybiBuZXcgQ2FsZW5kYXJTeW1ib2xzKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbChlKXtyZXR1cm4gbmV3IEN1cnJlbmN5U3ltYm9sKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbHMoZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbHMoZSl9c3RhdGljIGRhdGVQYXR0ZXJuKGUpe3JldHVybiBuZXcgRGF0ZVBhdHRlcm4oZSl9c3RhdGljIGRhdGVQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJucyhlKX1zdGF0aWMgZGF0ZVRpbWVTeW1ib2xzKGUpe3JldHVybiBuZXcgRGF0ZVRpbWVTeW1ib2xzKGUpfXN0YXRpYyBkYXkoZSl7cmV0dXJuIG5ldyBEYXkoZSl9c3RhdGljIGRheU5hbWVzKGUpe3JldHVybiBuZXcgRGF5TmFtZXMoZSl9c3RhdGljIGVyYShlKXtyZXR1cm4gbmV3IEVyYShlKX1zdGF0aWMgZXJhTmFtZXMoZSl7cmV0dXJuIG5ldyBFcmFOYW1lcyhlKX1zdGF0aWMgbG9jYWxlKGUpe3JldHVybiBuZXcgTG9jYWxlKGUpfXN0YXRpYyBsb2NhbGVTZXQoZSl7cmV0dXJuIG5ldyBMb2NhbGVTZXQoZSl9c3RhdGljIG1lcmlkaWVtKGUpe3JldHVybiBuZXcgTWVyaWRpZW0oZSl9c3RhdGljIG1lcmlkaWVtTmFtZXMoZSl7cmV0dXJuIG5ldyBNZXJpZGllbU5hbWVzKGUpfXN0YXRpYyBtb250aChlKXtyZXR1cm4gbmV3IE1vbnRoKGUpfXN0YXRpYyBtb250aE5hbWVzKGUpe3JldHVybiBuZXcgTW9udGhOYW1lcyhlKX1zdGF0aWMgbnVtYmVyUGF0dGVybihlKXtyZXR1cm4gbmV3IE51bWJlclBhdHRlcm4oZSl9c3RhdGljIG51bWJlclBhdHRlcm5zKGUpe3JldHVybiBuZXcgTnVtYmVyUGF0dGVybnMoZSl9c3RhdGljIG51bWJlclN5bWJvbChlKXtyZXR1cm4gbmV3IE51bWJlclN5bWJvbChlKX1zdGF0aWMgbnVtYmVyU3ltYm9scyhlKXtyZXR1cm4gbmV3IE51bWJlclN5bWJvbHMoZSl9c3RhdGljIHRpbWVQYXR0ZXJuKGUpe3JldHVybiBuZXcgVGltZVBhdHRlcm4oZSl9c3RhdGljIHRpbWVQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IFRpbWVQYXR0ZXJucyhlKX1zdGF0aWMgdHlwZUZhY2UoZSl7cmV0dXJuIG5ldyBUeXBlRmFjZShlKX1zdGF0aWMgdHlwZUZhY2VzKGUpe3JldHVybiBuZXcgVHlwZUZhY2VzKGUpfX10LkxvY2FsZVNldE5hbWVzcGFjZT1Mb2NhbGVTZXROYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TaWduYXR1cmVOYW1lc3BhY2U9dm9pZCAwO3ZhciByPWEoMjM1KSxuPWEoMjQxKTtjb25zdCBpPXIuTmFtZXNwYWNlSWRzLnNpZ25hdHVyZS5pZDtjbGFzcyBTaWduYXR1cmUgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJzaWduYXR1cmUiLCEwKX19Y2xhc3MgU2lnbmF0dXJlTmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihTaWduYXR1cmVOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFNpZ25hdHVyZU5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgc2lnbmF0dXJlKGUpe3JldHVybiBuZXcgU2lnbmF0dXJlKGUpfX10LlNpZ25hdHVyZU5hbWVzcGFjZT1TaWduYXR1cmVOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5TdHlsZXNoZWV0TmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDIzNSksbj1hKDI0MSk7Y29uc3QgaT1yLk5hbWVzcGFjZUlkcy5zdHlsZXNoZWV0LmlkO2NsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBuLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJzdHlsZXNoZWV0IiwhMCl9fWNsYXNzIFN0eWxlc2hlZXROYW1lc3BhY2V7c3RhdGljW3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKFN0eWxlc2hlZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFN0eWxlc2hlZXROYW1lc3BhY2VbZV0odCl9c3RhdGljIHN0eWxlc2hlZXQoZSl7cmV0dXJuIG5ldyBTdHlsZXNoZWV0KGUpfX10LlN0eWxlc2hlZXROYW1lc3BhY2U9U3R5bGVzaGVldE5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhkcE5hbWVzcGFjZT12b2lkIDA7dmFyIHI9YSgyMzUpLG49YSgyMjkpLGk9YSgyNDEpO2NvbnN0IHM9ci5OYW1lc3BhY2VJZHMueGRwLmlkO2NsYXNzIFhkcCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInhkcCIsITApO3RoaXMudXVpZD1lLnV1aWR8fCIiO3RoaXMudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIjt0aGlzLmNvbmZpZz1udWxsO3RoaXMuY29ubmVjdGlvblNldD1udWxsO3RoaXMuZGF0YXNldHM9bnVsbDt0aGlzLmxvY2FsZVNldD1udWxsO3RoaXMuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheTt0aGlzLnRlbXBsYXRlPW51bGx9W24uJG9uQ2hpbGRDaGVja10oZSl7Y29uc3QgdD1yLk5hbWVzcGFjZUlkc1tlW24uJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbbi4kbmFtZXNwYWNlSWRdPT09dC5pZH19Y2xhc3MgWGRwTmFtZXNwYWNle3N0YXRpY1tyLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihYZHBOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhkcE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgeGRwKGUpe3JldHVybiBuZXcgWGRwKGUpfX10LlhkcE5hbWVzcGFjZT1YZHBOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5YaHRtbE5hbWVzcGFjZT12b2lkIDA7YSgxMTYpO2EoMTI3KTthKDEyOSk7YSgxMzIpO2EoMTM0KTthKDEzNik7YSgxMzgpO3ZhciByPWEoMjI5KSxuPWEoMjM1KSxpPWEoMjM3KSxzPWEoMjM4KSxvPWEoMjQxKTtjb25zdCBjPW4uTmFtZXNwYWNlSWRzLnhodG1sLmlkLGw9U3ltYm9sKCksaD1uZXcgU2V0KFsiY29sb3IiLCJmb250IiwiZm9udC1mYW1pbHkiLCJmb250LXNpemUiLCJmb250LXN0cmV0Y2giLCJmb250LXN0eWxlIiwiZm9udC13ZWlnaHQiLCJtYXJnaW4iLCJtYXJnaW4tYm90dG9tIiwibWFyZ2luLWxlZnQiLCJtYXJnaW4tcmlnaHQiLCJtYXJnaW4tdG9wIiwibGV0dGVyLXNwYWNpbmciLCJsaW5lLWhlaWdodCIsIm9ycGhhbnMiLCJwYWdlLWJyZWFrLWFmdGVyIiwicGFnZS1icmVhay1iZWZvcmUiLCJwYWdlLWJyZWFrLWluc2lkZSIsInRhYi1pbnRlcnZhbCIsInRhYi1zdG9wIiwidGV4dC1hbGlnbiIsInRleHQtZGVjb3JhdGlvbiIsInRleHQtaW5kZW50IiwidmVydGljYWwtYWxpZ24iLCJ3aWRvd3MiLCJrZXJuaW5nLW1vZGUiLCJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIiwieGZhLWZvbnQtdmVydGljYWwtc2NhbGUiLCJ4ZmEtc3BhY2VydW4iLCJ4ZmEtdGFiLXN0b3BzIl0pLHU9bmV3IE1hcChbWyJwYWdlLWJyZWFrLWFmdGVyIiwiYnJlYWtBZnRlciJdLFsicGFnZS1icmVhay1iZWZvcmUiLCJicmVha0JlZm9yZSJdLFsicGFnZS1icmVhay1pbnNpZGUiLCJicmVha0luc2lkZSJdLFsia2VybmluZy1tb2RlIixlPT4ibm9uZSI9PT1lPyJub25lIjoibm9ybWFsIl0sWyJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIixlPT5gc2NhbGVYKCR7TWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpfSlgXSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixlPT5gc2NhbGVZKCR7TWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpfSlgXSxbInhmYS1zcGFjZXJ1biIsIiJdLFsieGZhLXRhYi1zdG9wcyIsIiJdLFsiZm9udC1zaXplIiwoZSx0KT0+e2U9dC5mb250U2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KShlKTtyZXR1cm4oMCxpLm1lYXN1cmVUb1N0cmluZykoLjk5KmUpfV0sWyJsZXR0ZXItc3BhY2luZyIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJsaW5lLWhlaWdodCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4iLGU9PigwLGkubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibWFyZ2luLWJvdHRvbSIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tbGVmdCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tcmlnaHQiLGU9PigwLGkubWVhc3VyZVRvU3RyaW5nKSgoMCxzLmdldE1lYXN1cmVtZW50KShlKSldLFsibWFyZ2luLXRvcCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJ0ZXh0LWluZGVudCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJmb250LWZhbWlseSIsZT0+ZV0sWyJ2ZXJ0aWNhbC1hbGlnbiIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV1dKSxkPS9ccysvZyxmPS9bXHJcbl0rL2csZz0vXHJcbj8vZztmdW5jdGlvbiBtYXBTdHlsZShlLHQsYSl7Y29uc3Qgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCFlKXJldHVybiBuO2NvbnN0IG89T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbdCxhXW9mIGUuc3BsaXQoIjsiKS5tYXAoKGU9PmUuc3BsaXQoIjoiLDIpKSkpe2NvbnN0IGU9dS5nZXQodCk7aWYoIiI9PT1lKWNvbnRpbnVlO2xldCByPWE7ZSYmKHI9InN0cmluZyI9PXR5cGVvZiBlP2U6ZShhLG8pKTt0LmVuZHNXaXRoKCJzY2FsZSIpP24udHJhbnNmb3JtPW4udHJhbnNmb3JtP2Ake25bdF19ICR7cn1gOnI6blt0LnJlcGxhY2VBbGwoLy0oW2EtekEtWl0pL2csKChlLHQpPT50LnRvVXBwZXJDYXNlKCkpKV09cn1uLmZvbnRGYW1pbHkmJigwLGkuc2V0Rm9udEZhbWlseSkoe3R5cGVmYWNlOm4uZm9udEZhbWlseSx3ZWlnaHQ6bi5mb250V2VpZ2h0fHwibm9ybWFsIixwb3N0dXJlOm4uZm9udFN0eWxlfHwibm9ybWFsIixzaXplOm8uZm9udFNpemV8fDB9LHQsdFtyLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLG4pO2lmKGEmJm4udmVydGljYWxBbGlnbiYmIjBweCIhPT1uLnZlcnRpY2FsQWxpZ24mJm4uZm9udFNpemUpe2NvbnN0IGU9LjU4Myx0PS4zMzMsYT0oMCxzLmdldE1lYXN1cmVtZW50KShuLmZvbnRTaXplKTtuLmZvbnRTaXplPSgwLGkubWVhc3VyZVRvU3RyaW5nKShhKmUpO24udmVydGljYWxBbGlnbj0oMCxpLm1lYXN1cmVUb1N0cmluZykoTWF0aC5zaWduKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKG4udmVydGljYWxBbGlnbikpKmEqdCl9YSYmbi5mb250U2l6ZSYmKG4uZm9udFNpemU9YGNhbGMoJHtuLmZvbnRTaXplfSAqIHZhcigtLXNjYWxlLWZhY3RvcikpYCk7KDAsaS5maXhUZXh0SW5kZW50KShuKTtyZXR1cm4gbn1jb25zdCBwPW5ldyBTZXQoWyJib2R5IiwiaHRtbCJdKTtjbGFzcyBYaHRtbE9iamVjdCBleHRlbmRzIG8uWG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYyx0KTt0aGlzW2xdPSExO3RoaXMuc3R5bGU9ZS5zdHlsZXx8IiJ9W3IuJGNsZWFuXShlKXtzdXBlcltyLiRjbGVhbl0oZSk7dGhpcy5zdHlsZT1mdW5jdGlvbiBjaGVja1N0eWxlKGUpe3JldHVybiBlLnN0eWxlP2Uuc3R5bGUudHJpbSgpLnNwbGl0KC9ccyo7XHMqLykuZmlsdGVyKChlPT4hIWUpKS5tYXAoKGU9PmUuc3BsaXQoL1xzKjpccyovLDIpKSkuZmlsdGVyKCh0PT57bGV0W2Esbl09dDsiZm9udC1mYW1pbHkiPT09YSYmZVtyLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzLmFkZChuKTtyZXR1cm4gaC5oYXMoYSl9KSkubWFwKChlPT5lLmpvaW4oIjoiKSkpLmpvaW4oIjsiKToiIn0odGhpcyl9W3IuJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuIXAuaGFzKHRoaXNbci4kbm9kZU5hbWVdKX1bci4kb25UZXh0XShlKXtpZihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXRoaXNbbF09ITA7ZWxzZXtlPWUucmVwbGFjZUFsbChmLCIiKTt0aGlzLnN0eWxlLmluY2x1ZGVzKCJ4ZmEtc3BhY2VydW46eWVzIil8fChlPWUucmVwbGFjZUFsbChkLCIgIikpfWUmJih0aGlzW3IuJGNvbnRlbnRdKz1lKX1bci4kcHVzaEdseXBoc10oZSl7bGV0IHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCksbj17dG9wOk5hTixib3R0b206TmFOLGxlZnQ6TmFOLHJpZ2h0Ok5hTn07bGV0IGk9bnVsbDtmb3IoY29uc3RbZSx0XW9mIHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGU9PmUuc3BsaXQoIjoiLDIpKSkpc3dpdGNoKGUpe2Nhc2UiZm9udC1mYW1pbHkiOmEudHlwZWZhY2U9KDAscy5zdHJpcFF1b3RlcykodCk7YnJlYWs7Y2FzZSJmb250LXNpemUiOmEuc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlImZvbnQtd2VpZ2h0IjphLndlaWdodD10O2JyZWFrO2Nhc2UiZm9udC1zdHlsZSI6YS5wb3N0dXJlPXQ7YnJlYWs7Y2FzZSJsZXR0ZXItc3BhY2luZyI6YS5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibWFyZ2luIjpjb25zdCBlPXQuc3BsaXQoLyBcdC8pLm1hcCgoZT0+KDAscy5nZXRNZWFzdXJlbWVudCkoZSkpKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTpuLnRvcD1uLmJvdHRvbT1uLmxlZnQ9bi5yaWdodD1lWzBdO2JyZWFrO2Nhc2UgMjpuLnRvcD1uLmJvdHRvbT1lWzBdO24ubGVmdD1uLnJpZ2h0PWVbMV07YnJlYWs7Y2FzZSAzOm4udG9wPWVbMF07bi5ib3R0b209ZVsyXTtuLmxlZnQ9bi5yaWdodD1lWzFdO2JyZWFrO2Nhc2UgNDpuLnRvcD1lWzBdO24ubGVmdD1lWzFdO24uYm90dG9tPWVbMl07bi5yaWdodD1lWzNdfWJyZWFrO2Nhc2UibWFyZ2luLXRvcCI6bi50b3A9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4tYm90dG9tIjpuLmJvdHRvbT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbi1sZWZ0IjpuLmxlZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4tcmlnaHQiOm4ucmlnaHQ9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJsaW5lLWhlaWdodCI6aT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KX1lLnB1c2hEYXRhKGEsbixpKTtpZih0aGlzW3IuJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbci4kY29udGVudF0pO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1tyLiRnZXRDaGlsZHJlbl0oKSkiI3RleHQiIT09dFtyLiRub2RlTmFtZV0/dFtyLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyh0W3IuJGNvbnRlbnRdKTt0JiZlLnBvcEZvbnQoKX1bci4kdG9IVE1MXShlKXtjb25zdCB0PVtdO3RoaXNbci4kZXh0cmFdPXtjaGlsZHJlbjp0fTt0aGlzW3IuJGNoaWxkcmVuVG9IVE1MXSh7fSk7aWYoMD09PXQubGVuZ3RoJiYhdGhpc1tyLiRjb250ZW50XSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2xldCBhO2E9dGhpc1tsXT90aGlzW3IuJGNvbnRlbnRdP3RoaXNbci4kY29udGVudF0ucmVwbGFjZUFsbChnLCJcbiIpOnZvaWQgMDp0aGlzW3IuJGNvbnRlbnRdfHx2b2lkIDA7cmV0dXJuIHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOnRoaXNbci4kbm9kZU5hbWVdLGF0dHJpYnV0ZXM6e2hyZWY6dGhpcy5ocmVmLHN0eWxlOm1hcFN0eWxlKHRoaXMuc3R5bGUsdGhpcyx0aGlzW2xdKX0sY2hpbGRyZW46dCx2YWx1ZTphfSl9fWNsYXNzIEEgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJhIik7dGhpcy5ocmVmPSgwLGkuZml4VVJMKShlLmhyZWYpfHwiIn19Y2xhc3MgQiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImIiKX1bci4kcHVzaEdseXBoc10oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pO3N1cGVyW3IuJHB1c2hHbHlwaHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBCb2R5IGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYm9keSIpfVtyLiR0b0hUTUxdKGUpe2NvbnN0IHQ9c3VwZXJbci4kdG9IVE1MXShlKSx7aHRtbDphfT10O2lmKCFhKXJldHVybiBzLkhUTUxSZXN1bHQuRU1QVFk7YS5uYW1lPSJkaXYiO2EuYXR0cmlidXRlcy5jbGFzcz1bInhmYVJpY2giXTtyZXR1cm4gdH19Y2xhc3MgQnIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJiciIpfVtyLiR0ZXh0XSgpe3JldHVybiJcbiJ9W3IuJHB1c2hHbHlwaHNdKGUpe2UuYWRkU3RyaW5nKCJcbiIpfVtyLiR0b0hUTUxdKGUpe3JldHVybiBzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiYnIifSl9fWNsYXNzIEh0bWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJodG1sIil9W3IuJHRvSFRNTF0oZSl7Y29uc3QgdD1bXTt0aGlzW3IuJGV4dHJhXT17Y2hpbGRyZW46dH07dGhpc1tyLiRjaGlsZHJlblRvSFRNTF0oe30pO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LHZhbHVlOnRoaXNbci4kY29udGVudF18fCIifSk7aWYoMT09PXQubGVuZ3RoKXtjb25zdCBlPXRbMF07aWYoZS5hdHRyaWJ1dGVzPy5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19Y2xhc3MgSSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImkiKX1bci4kcHVzaEdseXBoc10oZSl7ZS5wdXNoRm9udCh7cG9zdHVyZToiaXRhbGljIn0pO3N1cGVyW3IuJHB1c2hHbHlwaHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBMaSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImxpIil9fWNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwib2wiKX19Y2xhc3MgUCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInAiKX1bci4kcHVzaEdseXBoc10oZSl7c3VwZXJbci4kcHVzaEdseXBoc10oZSwhMSk7ZS5hZGRTdHJpbmcoIlxuIik7ZS5hZGRQYXJhKCk7ZS5wb3BGb250KCl9W3IuJHRleHRdKCl7cmV0dXJuIHRoaXNbci4kZ2V0UGFyZW50XSgpW3IuJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/c3VwZXJbci4kdGV4dF0oKTpzdXBlcltyLiR0ZXh0XSgpKyJcbiJ9fWNsYXNzIFNwYW4gZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzcGFuIil9fWNsYXNzIFN1YiBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInN1YiIpfX1jbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdXAiKX19Y2xhc3MgVWwgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJ1bCIpfX1jbGFzcyBYaHRtbE5hbWVzcGFjZXtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFhodG1sTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhKGUpe3JldHVybiBuZXcgQShlKX1zdGF0aWMgYihlKXtyZXR1cm4gbmV3IEIoZSl9c3RhdGljIGJvZHkoZSl7cmV0dXJuIG5ldyBCb2R5KGUpfXN0YXRpYyBicihlKXtyZXR1cm4gbmV3IEJyKGUpfXN0YXRpYyBodG1sKGUpe3JldHVybiBuZXcgSHRtbChlKX1zdGF0aWMgaShlKXtyZXR1cm4gbmV3IEkoZSl9c3RhdGljIGxpKGUpe3JldHVybiBuZXcgTGkoZSl9c3RhdGljIG9sKGUpe3JldHVybiBuZXcgT2woZSl9c3RhdGljIHAoZSl7cmV0dXJuIG5ldyBQKGUpfXN0YXRpYyBzcGFuKGUpe3JldHVybiBuZXcgU3BhbihlKX1zdGF0aWMgc3ViKGUpe3JldHVybiBuZXcgU3ViKGUpfXN0YXRpYyBzdXAoZSl7cmV0dXJuIG5ldyBTdXAoZSl9c3RhdGljIHVsKGUpe3JldHVybiBuZXcgVWwoZSl9fXQuWGh0bWxOYW1lc3BhY2U9WGh0bWxOYW1lc3BhY2V9LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgcj1hKDIzNSksbj1hKDI0MSk7Y2xhc3MgVW5rbm93bk5hbWVzcGFjZXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWVzcGFjZUlkPWV9W3IuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe3JldHVybiBuZXcgbi5YbWxPYmplY3QodGhpcy5uYW1lc3BhY2VJZCxlLHQpfX10LlVua25vd25OYW1lc3BhY2U9VW5rbm93bk5hbWVzcGFjZX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LkRhdGFzZXRSZWFkZXI9dm9pZCAwO2EoMik7dmFyIHI9YSgxNDUpLG49YSgxNTApLGk9YSgyMjIpO2Z1bmN0aW9uIGRlY29kZVN0cmluZyhlKXt0cnl7cmV0dXJuKDAsci5zdHJpbmdUb1VURjhTdHJpbmcpKGUpfWNhdGNoKHQpeygwLHIud2FybikoYFVURi04IGRlY29kaW5nIGZhaWxlZDogIiR7dH0iLmApO3JldHVybiBlfX1jbGFzcyBEYXRhc2V0WE1MUGFyc2VyIGV4dGVuZHMgaS5TaW1wbGVYTUxQYXJzZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5ub2RlPW51bGx9b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9c3VwZXIub25FbmRFbGVtZW50KGUpO2lmKHQmJiJ4ZmE6ZGF0YXNldHMiPT09ZSl7dGhpcy5ub2RlPXQ7dGhyb3cgbmV3IEVycm9yKCJBYm9ydGluZyBEYXRhc2V0WE1MUGFyc2VyLiIpfX19dC5EYXRhc2V0UmVhZGVyPWNsYXNzIERhdGFzZXRSZWFkZXJ7Y29uc3RydWN0b3IoZSl7aWYoZS5kYXRhc2V0cyl0aGlzLm5vZGU9bmV3IGkuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUuZGF0YXNldHMpLmRvY3VtZW50RWxlbWVudDtlbHNle2NvbnN0IHQ9bmV3IERhdGFzZXRYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KTt0cnl7dC5wYXJzZUZyb21TdHJpbmcoZVsieGRwOnhkcCJdKX1jYXRjaHt9dGhpcy5ub2RlPXQubm9kZX19Z2V0VmFsdWUoZSl7aWYoIXRoaXMubm9kZXx8IWUpcmV0dXJuIiI7Y29uc3QgdD10aGlzLm5vZGUuc2VhcmNoTm9kZSgoMCxuLnBhcnNlWEZBUGF0aCkoZSksMCk7aWYoIXQpcmV0dXJuIiI7Y29uc3QgYT10LmZpcnN0Q2hpbGQ7cmV0dXJuInZhbHVlIj09PWE/Lm5vZGVOYW1lP3QuY2hpbGRyZW4ubWFwKChlPT5kZWNvZGVTdHJpbmcoZS50ZXh0Q29udGVudCkpKTpkZWNvZGVTdHJpbmcodC50ZXh0Q29udGVudCl9fX0sKGUsdCxhKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt0LlhSZWY9dm9pZCAwO2EoMTE2KTthKDEyNyk7YSgxMjkpO2EoMTMyKTthKDEzNCk7YSgxMzYpO2EoMTM4KTthKDg0KTthKDkzKTthKDk0KTthKDk3KTthKDk5KTthKDEwMSk7YSgxMDUpO2EoMTA4KTthKDExNSk7YSgxNDApO2EoMik7dmFyIHI9YSgxNDUpLG49YSgxNTEpLGk9YSgxNjcpLHM9YSgxNTApLG89YSgxNTIpLGM9YSgyMjUpO3QuWFJlZj1jbGFzcyBYUmVmeyNEPW51bGw7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0cmVhbT1lO3RoaXMucGRmTWFuYWdlcj10O3RoaXMuZW50cmllcz1bXTt0aGlzLl94cmVmU3Rtcz1uZXcgU2V0O3RoaXMuX2NhY2hlTWFwPW5ldyBNYXA7dGhpcy5fcGVuZGluZ1JlZnM9bmV3IG4uUmVmU2V0O3RoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW09bnVsbDt0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09bnVsbH1nZXROZXdQZXJzaXN0ZW50UmVmKGUpe251bGw9PT10aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtJiYodGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxKTtjb25zdCB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKzt0aGlzLl9jYWNoZU1hcC5zZXQodCxlKTtyZXR1cm4gbi5SZWYuZ2V0KHQsMCl9Z2V0TmV3VGVtcG9yYXJ5UmVmKCl7bnVsbD09PXRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSYmKHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxKTtyZXR1cm4gbi5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfXJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9c2V0U3RhcnRYUmVmKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfXBhcnNlKCl7bGV0IGUsdCxhLGk9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZihpKXsoMCxyLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKTtlPXRoaXMuaW5kZXhPYmplY3RzKCl9ZWxzZSBlPXRoaXMucmVhZFhSZWYoKTtlLmFzc2lnblhyZWYodGhpcyk7dGhpcy50cmFpbGVyPWU7dHJ5e3Q9ZS5nZXQoIkVuY3J5cHQiKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkICJFbmNyeXB0IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZih0IGluc3RhbmNlb2Ygbi5EaWN0KXtjb25zdCBhPWUuZ2V0KCJJRCIpLHI9YT8ubGVuZ3RoP2FbMF06IiI7dC5zdXBwcmVzc0VuY3J5cHRpb249ITA7dGhpcy5lbmNyeXB0PW5ldyBjLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkodCxyLHRoaXMucGRmTWFuYWdlci5wYXNzd29yZCl9dHJ5e2E9ZS5nZXQoIlJvb3QiKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkICJSb290IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihhIGluc3RhbmNlb2Ygbi5EaWN0KXRyeXtpZihhLmdldCgiUGFnZXMiKWluc3RhbmNlb2Ygbi5EaWN0KXt0aGlzLnJvb3Q9YTtyZXR1cm59fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsci53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZighaSl0aHJvdyBuZXcgcy5YUmVmUGFyc2VFeGNlcHRpb247dGhyb3cgbmV3IHIuSW52YWxpZFBERkV4Y2VwdGlvbigiSW52YWxpZCBSb290IHJlZmVyZW5jZS4iKX1wcm9jZXNzWFJlZlRhYmxlKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO2NvbnN0IHQ9dGhpcy5yZWFkWFJlZlRhYmxlKGUpO2lmKCEoMCxuLmlzQ21kKSh0LCJ0cmFpbGVyIikpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IGZpbmQgdHJhaWxlciBkaWN0aW9uYXJ5Iik7bGV0IGE9ZS5nZXRPYmooKTthIGluc3RhbmNlb2Ygbi5EaWN0fHwhYS5kaWN0fHwoYT1hLmRpY3QpO2lmKCEoYSBpbnN0YW5jZW9mIG4uRGljdCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeSIpO2RlbGV0ZSB0aGlzLnRhYmxlU3RhdGU7cmV0dXJuIGF9cmVhZFhSZWZUYWJsZShlKXtjb25zdCB0PWUubGV4ZXIuc3RyZWFtLGE9dGhpcy50YWJsZVN0YXRlO3QucG9zPWEuc3RyZWFtUG9zO2UuYnVmMT1hLnBhcnNlckJ1ZjE7ZS5idWYyPWEucGFyc2VyQnVmMjtsZXQgaTtmb3IoOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gYSl8fCEoImVudHJ5Q291bnQiaW4gYSkpe2lmKCgwLG4uaXNDbWQpKGk9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO2EuZmlyc3RFbnRyeU51bT1pO2EuZW50cnlDb3VudD1lLmdldE9iaigpfWxldCBzPWEuZmlyc3RFbnRyeU51bTtjb25zdCBvPWEuZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihzKXx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IobGV0IGk9YS5lbnRyeU51bTtpPG87aSsrKXthLnN0cmVhbVBvcz10LnBvczthLmVudHJ5TnVtPWk7YS5wYXJzZXJCdWYxPWUuYnVmMTthLnBhcnNlckJ1ZjI9ZS5idWYyO2NvbnN0IGM9e307Yy5vZmZzZXQ9ZS5nZXRPYmooKTtjLmdlbj1lLmdldE9iaigpO2NvbnN0IGw9ZS5nZXRPYmooKTtpZihsIGluc3RhbmNlb2Ygbi5DbWQpc3dpdGNoKGwuY21kKXtjYXNlImYiOmMuZnJlZT0hMDticmVhaztjYXNlIm4iOmMudW5jb21wcmVzc2VkPSEwfWlmKCFOdW1iZXIuaXNJbnRlZ2VyKGMub2Zmc2V0KXx8IU51bWJlci5pc0ludGVnZXIoYy5nZW4pfHwhYy5mcmVlJiYhYy51bmNvbXByZXNzZWQpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYEludmFsaWQgZW50cnkgaW4gWFJlZiBzdWJzZWN0aW9uOiAke3N9LCAke299YCk7MD09PWkmJmMuZnJlZSYmMT09PXMmJihzPTApO3RoaXMuZW50cmllc1tpK3NdfHwodGhpcy5lbnRyaWVzW2krc109Yyl9YS5lbnRyeU51bT0wO2Euc3RyZWFtUG9zPXQucG9zO2EucGFyc2VyQnVmMT1lLmJ1ZjE7YS5wYXJzZXJCdWYyPWUuYnVmMjtkZWxldGUgYS5maXJzdEVudHJ5TnVtO2RlbGV0ZSBhLmVudHJ5Q291bnR9aWYodGhpcy5lbnRyaWVzWzBdJiYhdGhpcy5lbnRyaWVzWzBdLmZyZWUpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QiKTtyZXR1cm4gaX1wcm9jZXNzWFJlZlN0cmVhbShlKXtpZighKCJzdHJlYW1TdGF0ZSJpbiB0aGlzKSl7Y29uc3QgdD1lLmRpY3QsYT10LmdldCgiVyIpO2xldCByPXQuZ2V0KCJJbmRleCIpO3J8fChyPVswLHQuZ2V0KCJTaXplIildKTt0aGlzLnN0cmVhbVN0YXRlPXtlbnRyeVJhbmdlczpyLGJ5dGVXaWR0aHM6YSxlbnRyeU51bTowLHN0cmVhbVBvczplLnBvc319dGhpcy5yZWFkWFJlZlN0cmVhbShlKTtkZWxldGUgdGhpcy5zdHJlYW1TdGF0ZTtyZXR1cm4gZS5kaWN0fXJlYWRYUmVmU3RyZWFtKGUpe2NvbnN0IHQ9dGhpcy5zdHJlYW1TdGF0ZTtlLnBvcz10LnN0cmVhbVBvcztjb25zdFthLG4saV09dC5ieXRlV2lkdGhzLHM9dC5lbnRyeVJhbmdlcztmb3IoO3MubGVuZ3RoPjA7KXtjb25zdFtvLGNdPXM7aWYoIU51bWJlci5pc0ludGVnZXIobyl8fCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgcmFuZ2UgZmllbGRzOiAke299LCAke2N9YCk7aWYoIU51bWJlci5pc0ludGVnZXIoYSl8fCFOdW1iZXIuaXNJbnRlZ2VyKG4pfHwhTnVtYmVyLmlzSW50ZWdlcihpKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIGVudHJ5IGZpZWxkcyBsZW5ndGg6ICR7b30sICR7Y31gKTtmb3IobGV0IHM9dC5lbnRyeU51bTtzPGM7KytzKXt0LmVudHJ5TnVtPXM7dC5zdHJlYW1Qb3M9ZS5wb3M7bGV0IGM9MCxsPTAsaD0wO2ZvcihsZXQgdD0wO3Q8YTsrK3Qpe2NvbnN0IHQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAndHlwZScuIik7Yz1jPDw4fHR9MD09PWEmJihjPTEpO2ZvcihsZXQgdD0wO3Q8bjsrK3Qpe2NvbnN0IHQ9ZS5nZXRCeXRlKCk7aWYoLTE9PT10KXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtsPWw8PDh8dH1mb3IobGV0IHQ9MDt0PGk7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ2dlbmVyYXRpb24nLiIpO2g9aDw8OHx0fWNvbnN0IHU9e307dS5vZmZzZXQ9bDt1Lmdlbj1oO3N3aXRjaChjKXtjYXNlIDA6dS5mcmVlPSEwO2JyZWFrO2Nhc2UgMTp1LnVuY29tcHJlc3NlZD0hMDticmVhaztjYXNlIDI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIGVudHJ5IHR5cGU6ICR7Y31gKX10aGlzLmVudHJpZXNbbytzXXx8KHRoaXMuZW50cmllc1tvK3NdPXUpfXQuZW50cnlOdW09MDt0LnN0cmVhbVBvcz1lLnBvcztzLnNwbGljZSgwLDIpfX1pbmRleE9iamVjdHMoKXtmdW5jdGlvbiByZWFkVG9rZW4oZSx0KXtsZXQgYT0iIixyPWVbdF07Zm9yKDsxMCE9PXImJjEzIT09ciYmNjAhPT1yJiYhKCsrdD49ZS5sZW5ndGgpOyl7YSs9U3RyaW5nLmZyb21DaGFyQ29kZShyKTtyPWVbdF19cmV0dXJuIGF9ZnVuY3Rpb24gc2tpcFVudGlsKGUsdCxhKXtjb25zdCByPWEubGVuZ3RoLG49ZS5sZW5ndGg7bGV0IGk9MDtmb3IoO3Q8bjspe2xldCBuPTA7Zm9yKDtuPHImJmVbdCtuXT09PWFbbl07KSsrbjtpZihuPj1yKWJyZWFrO3QrKztpKyt9cmV0dXJuIGl9Y29uc3QgZT0vXGIoZW5kb2JqfFxkK1xzK1xkK1xzK29ianx4cmVmfHRyYWlsZXJccyo8PClcYi9nLHQ9L1xiKHN0YXJ0eHJlZnxcZCtccytcZCtccytvYmopXGIvZyxhPS9eKFxkKylccysoXGQrKVxzK29ialxiLyxvPW5ldyBVaW50OEFycmF5KFsxMTYsMTE0LDk3LDEwNSwxMDgsMTAxLDExNF0pLGM9bmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsOTcsMTE0LDExNiwxMjAsMTE0LDEwMSwxMDJdKSxsPW5ldyBVaW50OEFycmF5KFs0Nyw4OCw4MiwxMDEsMTAyXSk7dGhpcy5lbnRyaWVzLmxlbmd0aD0wO3RoaXMuX2NhY2hlTWFwLmNsZWFyKCk7Y29uc3QgaD10aGlzLnN0cmVhbTtoLnBvcz0wO2NvbnN0IHU9aC5nZXRCeXRlcygpLGQ9KDAsci5ieXRlc1RvU3RyaW5nKSh1KSxmPXUubGVuZ3RoO2xldCBnPWguc3RhcnQ7Y29uc3QgcD1bXSxtPVtdO2Zvcig7ZzxmOyl7bGV0IG49dVtnXTtpZig5PT09bnx8MTA9PT1ufHwxMz09PW58fDMyPT09bil7KytnO2NvbnRpbnVlfWlmKDM3PT09bil7ZG97KytnO2lmKGc+PWYpYnJlYWs7bj11W2ddfXdoaWxlKDEwIT09biYmMTMhPT1uKTtjb250aW51ZX1jb25zdCBiPXJlYWRUb2tlbih1LGcpO2xldCB5O2lmKGIuc3RhcnRzV2l0aCgieHJlZiIpJiYoND09PWIubGVuZ3RofHwvXHMvLnRlc3QoYls0XSkpKXtnKz1za2lwVW50aWwodSxnLG8pO3AucHVzaChnKTtnKz1za2lwVW50aWwodSxnLGMpfWVsc2UgaWYoeT1hLmV4ZWMoYikpe2NvbnN0IHQ9MHx5WzFdLGE9MHx5WzJdLG49ZytiLmxlbmd0aDtsZXQgbyxjPSExO2lmKHRoaXMuZW50cmllc1t0XSl7aWYodGhpcy5lbnRyaWVzW3RdLmdlbj09PWEpdHJ5e25ldyBpLlBhcnNlcih7bGV4ZXI6bmV3IGkuTGV4ZXIoaC5tYWtlU3ViU3RyZWFtKG4pKX0pLmdldE9iaigpO2M9ITB9Y2F0Y2goZSl7ZSBpbnN0YW5jZW9mIHMuUGFyc2VyRU9GRXhjZXB0aW9uPygwLHIud2FybikoYGluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCR7Yn0pOiAiJHtlfSIuYCk6Yz0hMH19ZWxzZSBjPSEwO2MmJih0aGlzLmVudHJpZXNbdF09e29mZnNldDpnLWguc3RhcnQsZ2VuOmEsdW5jb21wcmVzc2VkOiEwfSk7ZS5sYXN0SW5kZXg9bjtjb25zdCBwPWUuZXhlYyhkKTtpZihwKXtvPWUubGFzdEluZGV4KzEtZztpZigiZW5kb2JqIiE9PXBbMV0peygwLHIud2FybikoYGluZGV4T2JqZWN0czogRm91bmQgIiR7cFsxXX0iIGluc2lkZSBvZiBhbm90aGVyICJvYmoiLCBjYXVzZWQgYnkgbWlzc2luZyAiZW5kb2JqIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci5gKTtvLT1wWzFdLmxlbmd0aCsxfX1lbHNlIG89Zi1nO2NvbnN0IHc9dS5zdWJhcnJheShnLGcrbyksUz1za2lwVW50aWwodywwLGwpO2lmKFM8byYmd1tTKzVdPDY0KXttLnB1c2goZy1oLnN0YXJ0KTt0aGlzLl94cmVmU3Rtcy5hZGQoZy1oLnN0YXJ0KX1nKz1vfWVsc2UgaWYoYi5zdGFydHNXaXRoKCJ0cmFpbGVyIikmJig3PT09Yi5sZW5ndGh8fC9ccy8udGVzdChiWzddKSkpe3AucHVzaChnKTtjb25zdCBlPWcrYi5sZW5ndGg7bGV0IGE7dC5sYXN0SW5kZXg9ZTtjb25zdCBuPXQuZXhlYyhkKTtpZihuKXthPXQubGFzdEluZGV4KzEtZztpZigic3RhcnR4cmVmIiE9PW5bMV0peygwLHIud2FybikoYGluZGV4T2JqZWN0czogRm91bmQgIiR7blsxXX0iIGFmdGVyICJ0cmFpbGVyIiwgY2F1c2VkIGJ5IG1pc3NpbmcgInN0YXJ0eHJlZiIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuYCk7YS09blsxXS5sZW5ndGgrMX19ZWxzZSBhPWYtZztnKz1hfWVsc2UgZys9Yi5sZW5ndGgrMX1mb3IoY29uc3QgZSBvZiBtKXt0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goZSk7dGhpcy5yZWFkWFJlZighMCl9Y29uc3QgYj1bXTtsZXQgeSx3LFM9ITE7Zm9yKGNvbnN0IGUgb2YgcCl7aC5wb3M9ZTtjb25zdCB0PW5ldyBpLlBhcnNlcih7bGV4ZXI6bmV3IGkuTGV4ZXIoaCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMCxyZWNvdmVyeU1vZGU6ITB9KSxhPXQuZ2V0T2JqKCk7aWYoISgwLG4uaXNDbWQpKGEsInRyYWlsZXIiKSljb250aW51ZTtjb25zdCByPXQuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIG4uRGljdCl7Yi5wdXNoKHIpO3IuaGFzKCJFbmNyeXB0IikmJihTPSEwKX19Zm9yKGNvbnN0IGUgb2ZbLi4uYiwiZ2VuRmFsbGJhY2siLC4uLmJdKXtpZigiZ2VuRmFsbGJhY2siPT09ZSl7aWYoIXcpYnJlYWs7dGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrPSEwO2NvbnRpbnVlfWxldCB0PSExO3RyeXtjb25zdCBhPWUuZ2V0KCJSb290Iik7aWYoIShhIGluc3RhbmNlb2Ygbi5EaWN0KSljb250aW51ZTtjb25zdCByPWEuZ2V0KCJQYWdlcyIpO2lmKCEociBpbnN0YW5jZW9mIG4uRGljdCkpY29udGludWU7Y29uc3QgaT1yLmdldCgiQ291bnQiKTtOdW1iZXIuaXNJbnRlZ2VyKGkpJiYodD0hMCl9Y2F0Y2goZSl7dz1lO2NvbnRpbnVlfWlmKHQmJighU3x8ZS5oYXMoIkVuY3J5cHQiKSkmJmUuaGFzKCJJRCIpKXJldHVybiBlO3k9ZX1pZih5KXJldHVybiB5O2lmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O3Rocm93IG5ldyByLkludmFsaWRQREZFeGNlcHRpb24oIkludmFsaWQgUERGIHN0cnVjdHVyZS4iKX1yZWFkWFJlZigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgdD10aGlzLnN0cmVhbSxhPW5ldyBTZXQ7Zm9yKDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXtjb25zdCBlPXRoaXMuc3RhcnRYUmVmUXVldWVbMF07aWYoYS5oYXMoZSkpeygwLHIud2FybikoInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuIik7dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpO2NvbnRpbnVlfWEuYWRkKGUpO3QucG9zPWUrdC5zdGFydDtjb25zdCBzPW5ldyBpLlBhcnNlcih7bGV4ZXI6bmV3IGkuTGV4ZXIodCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pO2xldCBjLGw9cy5nZXRPYmooKTtpZigoMCxuLmlzQ21kKShsLCJ4cmVmIikpe2M9dGhpcy5wcm9jZXNzWFJlZlRhYmxlKHMpO3RoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1jKTtsPWMuZ2V0KCJYUmVmU3RtIik7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSYmIXRoaXMuX3hyZWZTdG1zLmhhcyhsKSl7dGhpcy5feHJlZlN0bXMuYWRkKGwpO3RoaXMuc3RhcnRYUmVmUXVldWUucHVzaChsKTt0aGlzLiNEPz89bH19ZWxzZXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHN0cmVhbSBoZWFkZXIiKTtpZighKE51bWJlci5pc0ludGVnZXIocy5nZXRPYmooKSkmJigwLG4uaXNDbWQpKHMuZ2V0T2JqKCksIm9iaiIpJiYobD1zLmdldE9iaigpKWluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHN0cmVhbSIpO2M9dGhpcy5wcm9jZXNzWFJlZlN0cmVhbShsKTt0aGlzLnRvcERpY3R8fCh0aGlzLnRvcERpY3Q9Yyk7aWYoIWMpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoIkZhaWxlZCB0byByZWFkIFhSZWYgc3RyZWFtIil9bD1jLmdldCgiUHJldiIpO051bWJlci5pc0ludGVnZXIobCk/dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKGwpOmwgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKGwubnVtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygcy5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLHIuaW5mbykoIih3aGlsZSByZWFkaW5nIFhSZWYpOiAiK2UpfXRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKX1pZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDtpZighZSl0aHJvdyBuZXcgcy5YUmVmUGFyc2VFeGNlcHRpb259Z2V0IGxhc3RYUmVmU3RyZWFtUG9zKCl7cmV0dXJuIHRoaXMuI0Q/Pyh0aGlzLl94cmVmU3Rtcy5zaXplPjA/TWF0aC5tYXgoLi4udGhpcy5feHJlZlN0bXMpOm51bGwpfWdldEVudHJ5KGUpe2NvbnN0IHQ9dGhpcy5lbnRyaWVzW2VdO3JldHVybiB0JiYhdC5mcmVlJiZ0Lm9mZnNldD90Om51bGx9ZmV0Y2hJZlJlZihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3JldHVybiBlIGluc3RhbmNlb2Ygbi5SZWY/dGhpcy5mZXRjaChlLHQpOmV9ZmV0Y2goZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZighKGUgaW5zdGFuY2VvZiBuLlJlZikpdGhyb3cgbmV3IEVycm9yKCJyZWYgb2JqZWN0IGlzIG5vdCBhIHJlZmVyZW5jZSIpO2NvbnN0IGE9ZS5udW0saT10aGlzLl9jYWNoZU1hcC5nZXQoYSk7aWYodm9pZCAwIT09aSl7aSBpbnN0YW5jZW9mIG4uRGljdCYmIWkub2JqSWQmJihpLm9iaklkPWUudG9TdHJpbmcoKSk7cmV0dXJuIGl9bGV0IHM9dGhpcy5nZXRFbnRyeShhKTtpZihudWxsPT09cyl7dGhpcy5fY2FjaGVNYXAuc2V0KGEscyk7cmV0dXJuIHN9aWYodGhpcy5fcGVuZGluZ1JlZnMuaGFzKGUpKXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7KDAsci53YXJuKShgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke2V9LmApO3JldHVybiBuLkNJUkNVTEFSX1JFRn10aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e3M9cy51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLHMsdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxzLHQpO3RoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7dGhyb3cgdH1zIGluc3RhbmNlb2Ygbi5EaWN0P3Mub2JqSWQ9ZS50b1N0cmluZygpOnMgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0mJihzLmRpY3Qub2JqSWQ9ZS50b1N0cmluZygpKTtyZXR1cm4gc31mZXRjaFVuY29tcHJlc3NlZChlLHQpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgYz1lLmdlbjtsZXQgbD1lLm51bTtpZih0LmdlbiE9PWMpe2NvbnN0IGk9YEluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICR7ZX1gO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48Yyl7KDAsci53YXJuKShpKTtyZXR1cm4gdGhpcy5mZXRjaFVuY29tcHJlc3NlZChuLlJlZi5nZXQobCx0LmdlbiksdCxhKX10aHJvdyBuZXcgcy5YUmVmRW50cnlFeGNlcHRpb24oaSl9Y29uc3QgaD10aGlzLnN0cmVhbS5tYWtlU3ViU3RyZWFtKHQub2Zmc2V0K3RoaXMuc3RyZWFtLnN0YXJ0KSx1PW5ldyBpLlBhcnNlcih7bGV4ZXI6bmV3IGkuTGV4ZXIoaCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pLGQ9dS5nZXRPYmooKSxmPXUuZ2V0T2JqKCksZz11LmdldE9iaigpO2lmKGQhPT1sfHxmIT09Y3x8IShnIGluc3RhbmNlb2Ygbi5DbWQpKXRocm93IG5ldyBzLlhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICR7ZX1gKTtpZigib2JqIiE9PWcuY21kKXtpZihnLmNtZC5zdGFydHNXaXRoKCJvYmoiKSl7bD1wYXJzZUludChnLmNtZC5zdWJzdHJpbmcoMyksMTApO2lmKCFOdW1iZXIuaXNOYU4obCkpcmV0dXJuIGx9dGhyb3cgbmV3IHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApfSh0PXRoaXMuZW5jcnlwdCYmIWE/dS5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShsLGMpKTp1LmdldE9iaigpKWluc3RhbmNlb2Ygby5CYXNlU3RyZWFtfHx0aGlzLl9jYWNoZU1hcC5zZXQobCx0KTtyZXR1cm4gdH1mZXRjaENvbXByZXNzZWQoZSx0KXtjb25zdCBhPXQub2Zmc2V0LGM9dGhpcy5mZXRjaChuLlJlZi5nZXQoYSwwKSk7aWYoIShjIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTtjb25zdCBsPWMuZGljdC5nZXQoIkZpcnN0IiksaD1jLmRpY3QuZ2V0KCJOIik7aWYoIU51bWJlci5pc0ludGVnZXIobCl8fCFOdW1iZXIuaXNJbnRlZ2VyKGgpKXRocm93IG5ldyByLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZpcnN0IGFuZCBuIHBhcmFtZXRlcnMgZm9yIE9ialN0bSBzdHJlYW0iKTtsZXQgdT1uZXcgaS5QYXJzZXIoe2xleGVyOm5ldyBpLkxleGVyKGMpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBkPW5ldyBBcnJheShoKSxmPW5ldyBBcnJheShoKTtmb3IobGV0IGU9MDtlPGg7KytlKXtjb25zdCB0PXUuZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IHIuRm9ybWF0RXJyb3IoYGludmFsaWQgb2JqZWN0IG51bWJlciBpbiB0aGUgT2JqU3RtIHN0cmVhbTogJHt0fWApO2NvbnN0IGE9dS5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKSl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke2F9YCk7ZFtlXT10O2ZbZV09YX1jb25zdCBnPShjLnN0YXJ0fHwwKStsLHA9bmV3IEFycmF5KGgpO2ZvcihsZXQgZT0wO2U8aDsrK2Upe2NvbnN0IHQ9ZTxoLTE/ZltlKzFdLWZbZV06dm9pZCAwO2lmKHQ8MCl0aHJvdyBuZXcgci5Gb3JtYXRFcnJvcigiSW52YWxpZCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW0uIik7dT1uZXcgaS5QYXJzZXIoe2xleGVyOm5ldyBpLkxleGVyKGMubWFrZVN1YlN0cmVhbShnK2ZbZV0sdCxjLmRpY3QpKSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7Y29uc3Qgbj11LmdldE9iaigpO3BbZV09bjtpZihuIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtKWNvbnRpbnVlO2NvbnN0IHM9ZFtlXSxsPXRoaXMuZW50cmllc1tzXTtsJiZsLm9mZnNldD09PWEmJmwuZ2VuPT09ZSYmdGhpcy5fY2FjaGVNYXAuc2V0KHMsbil9aWYodm9pZCAwPT09KHQ9cFt0Lmdlbl0pKXRocm93IG5ldyBzLlhSZWZFbnRyeUV4Y2VwdGlvbihgQmFkIChjb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAke2V9YCk7cmV0dXJuIHR9YXN5bmMgZmV0Y2hJZlJlZkFzeW5jKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuLlJlZj90aGlzLmZldGNoQXN5bmMoZSx0KTplfWFzeW5jIGZldGNoQXN5bmMoZSx0KXt0cnl7cmV0dXJuIHRoaXMuZmV0Y2goZSx0KX1jYXRjaChhKXtpZighKGEgaW5zdGFuY2VvZiBzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSl0aHJvdyBhO2F3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoYS5iZWdpbixhLmVuZCk7cmV0dXJuIHRoaXMuZmV0Y2hBc3luYyhlLHQpfX1nZXRDYXRhbG9nT2JqKCl7cmV0dXJuIHRoaXMucm9vdH19fSwoZSx0LGEpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuTWVzc2FnZUhhbmRsZXI9dm9pZCAwO2EoMik7dmFyIHI9YSgxNDUpO2NvbnN0IG49MSxpPTIscz0xLG89MixjPTMsbD00LGg9NSx1PTYsZD03LGY9ODtmdW5jdGlvbiB3cmFwUmVhc29uKGUpe2UgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KDAsci51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyk7c3dpdGNoKGUubmFtZSl7Y2FzZSJBYm9ydEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLkFib3J0RXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJNaXNzaW5nUERGRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuTWlzc2luZ1BERkV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOnJldHVybiBuZXcgci5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKTtjYXNlIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiI6cmV0dXJuIG5ldyByLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2Nhc2UiVW5rbm93bkVycm9yRXhjZXB0aW9uIjpyZXR1cm4gbmV3IHIuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLmRldGFpbHMpO2RlZmF1bHQ6cmV0dXJuIG5ldyByLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKX19dC5NZXNzYWdlSGFuZGxlcj1jbGFzcyBNZXNzYWdlSGFuZGxlcntjb25zdHJ1Y3RvcihlLHQsYSl7dGhpcy5zb3VyY2VOYW1lPWU7dGhpcy50YXJnZXROYW1lPXQ7dGhpcy5jb21PYmo9YTt0aGlzLmNhbGxiYWNrSWQ9MTt0aGlzLnN0cmVhbUlkPTE7dGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZT0+e2NvbnN0IHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZSE9PXRoaXMuc291cmNlTmFtZSlyZXR1cm47aWYodC5zdHJlYW0pe3RoaXMuI1IodCk7cmV0dXJufWlmKHQuY2FsbGJhY2spe2NvbnN0IGU9dC5jYWxsYmFja0lkLGE9dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZighYSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZXNvbHZlIGNhbGxiYWNrICR7ZX1gKTtkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tlXTtpZih0LmNhbGxiYWNrPT09bilhLnJlc29sdmUodC5kYXRhKTtlbHNle2lmKHQuY2FsbGJhY2shPT1pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlIik7YS5yZWplY3Qod3JhcFJlYXNvbih0LnJlYXNvbikpfXJldHVybn1jb25zdCByPXRoaXMuYWN0aW9uSGFuZGxlclt0LmFjdGlvbl07aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHt0LmFjdGlvbn1gKTtpZih0LmNhbGxiYWNrSWQpe2NvbnN0IGU9dGhpcy5zb3VyY2VOYW1lLHM9dC5zb3VyY2VOYW1lO25ldyBQcm9taXNlKChmdW5jdGlvbihlKXtlKHIodC5kYXRhKSl9KSkudGhlbigoZnVuY3Rpb24ocil7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTplLHRhcmdldE5hbWU6cyxjYWxsYmFjazpuLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLGRhdGE6cn0pfSksKGZ1bmN0aW9uKHIpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6ZSx0YXJnZXROYW1lOnMsY2FsbGJhY2s6aSxjYWxsYmFja0lkOnQuY2FsbGJhY2tJZCxyZWFzb246d3JhcFJlYXNvbihyKX0pfSkpfWVsc2UgdC5zdHJlYW1JZD90aGlzLiNOKHQpOnIodC5kYXRhKX07YS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9b24oZSx0KXtjb25zdCBhPXRoaXMuYWN0aW9uSGFuZGxlcjtpZihhW2VdKXRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCAiJHtlfSJgKTthW2VdPXR9c2VuZChlLHQsYSl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dH0sYSl9c2VuZFdpdGhQcm9taXNlKGUsdCxhKXtjb25zdCBuPXRoaXMuY2FsbGJhY2tJZCsrLGk9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tuXT1pO3RyeXt0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsY2FsbGJhY2tJZDpuLGRhdGE6dH0sYSl9Y2F0Y2goZSl7aS5yZWplY3QoZSl9cmV0dXJuIGkucHJvbWlzZX1zZW5kV2l0aFN0cmVhbShlLHQsYSxuKXtjb25zdCBpPXRoaXMuc3RyZWFtSWQrKyxvPXRoaXMuc291cmNlTmFtZSxjPXRoaXMudGFyZ2V0TmFtZSxsPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmE9Pntjb25zdCBzPW5ldyByLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV09e2NvbnRyb2xsZXI6YSxzdGFydENhbGw6cyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX07bC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpvLHRhcmdldE5hbWU6YyxhY3Rpb246ZSxzdHJlYW1JZDppLGRhdGE6dCxkZXNpcmVkU2l6ZTphLmRlc2lyZWRTaXplfSxuKTtyZXR1cm4gcy5wcm9taXNlfSxwdWxsOmU9Pntjb25zdCB0PW5ldyByLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbaV0ucHVsbENhbGw9dDtsLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOm8sdGFyZ2V0TmFtZTpjLHN0cmVhbTp1LHN0cmVhbUlkOmksZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZX0pO3JldHVybiB0LnByb21pc2V9LGNhbmNlbDplPT57KDAsci5hc3NlcnQpKGUgaW5zdGFuY2VvZiBFcnJvciwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO2NvbnN0IHQ9bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHk7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tpXS5jYW5jZWxDYWxsPXQ7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tpXS5pc0Nsb3NlZD0hMDtsLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOm8sdGFyZ2V0TmFtZTpjLHN0cmVhbTpzLHN0cmVhbUlkOmkscmVhc29uOndyYXBSZWFzb24oZSl9KTtyZXR1cm4gdC5wcm9taXNlfX0sYSl9I04oZSl7Y29uc3QgdD1lLnN0cmVhbUlkLGE9dGhpcy5zb3VyY2VOYW1lLG49ZS5zb3VyY2VOYW1lLGk9dGhpcy5jb21PYmoscz10aGlzLG89dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXSx1PXtlbnF1ZXVlKGUpe2xldCBzPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLG89YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYodGhpcy5pc0NhbmNlbGxlZClyZXR1cm47Y29uc3QgYz10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPXM7aWYoYz4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wKXt0aGlzLnNpbmtDYXBhYmlsaXR5PW5ldyByLlByb21pc2VDYXBhYmlsaXR5O3RoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlfWkucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmwsc3RyZWFtSWQ6dCxjaHVuazplfSxvKX0sY2xvc2UoKXtpZighdGhpcy5pc0NhbmNlbGxlZCl7dGhpcy5pc0NhbmNlbGxlZD0hMDtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpjLHN0cmVhbUlkOnR9KTtkZWxldGUgcy5zdHJlYW1TaW5rc1t0XX19LGVycm9yKGUpeygwLHIuYXNzZXJ0KShlIGluc3RhbmNlb2YgRXJyb3IsImVycm9yIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt0aGlzLmlzQ2FuY2VsbGVkPSEwO2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmgsc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfX0sc2lua0NhcGFiaWxpdHk6bmV3IHIuUHJvbWlzZUNhcGFiaWxpdHksb25QdWxsOm51bGwsb25DYW5jZWw6bnVsbCxpc0NhbmNlbGxlZDohMSxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplLHJlYWR5Om51bGx9O3Uuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO3UucmVhZHk9dS5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO3RoaXMuc3RyZWFtU2lua3NbdF09dTtuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChvKGUuZGF0YSx1KSl9KSkudGhlbigoZnVuY3Rpb24oKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpmLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOmYsc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpfSNSKGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxhPXRoaXMuc291cmNlTmFtZSxuPWUuc291cmNlTmFtZSxpPXRoaXMuY29tT2JqLGc9dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxwPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIGY6ZS5zdWNjZXNzP2cuc3RhcnRDYWxsLnJlc29sdmUoKTpnLnN0YXJ0Q2FsbC5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO2JyZWFrO2Nhc2UgZDplLnN1Y2Nlc3M/Zy5wdWxsQ2FsbC5yZXNvbHZlKCk6Zy5wdWxsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO2JyZWFrO2Nhc2UgdTppZighcCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06ZCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KTticmVha31wLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnAuc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO3AuZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZTtuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ZShwLm9uUHVsbD8uKCkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06ZCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtpLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmEsdGFyZ2V0TmFtZTpuLHN0cmVhbTpkLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX0pKTticmVhaztjYXNlIGw6KDAsci5hc3NlcnQpKGcsImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuY29udHJvbGxlci5lbnF1ZXVlKGUuY2h1bmspO2JyZWFrO2Nhc2UgYzooMCxyLmFzc2VydCkoZywiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihnLmlzQ2xvc2VkKWJyZWFrO2cuaXNDbG9zZWQ9ITA7Zy5jb250cm9sbGVyLmNsb3NlKCk7dGhpcy4jQihnLHQpO2JyZWFrO2Nhc2UgaDooMCxyLmFzc2VydCkoZywiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtnLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuI0IoZyx0KTticmVhaztjYXNlIG86ZS5zdWNjZXNzP2cuY2FuY2VsQ2FsbC5yZXNvbHZlKCk6Zy5jYW5jZWxDYWxsLnJlamVjdCh3cmFwUmVhc29uKGUucmVhc29uKSk7dGhpcy4jQihnLHQpO2JyZWFrO2Nhc2UgczppZighcClicmVhaztuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dChwLm9uQ2FuY2VsPy4od3JhcFJlYXNvbihlLnJlYXNvbikpKX0pKS50aGVuKChmdW5jdGlvbigpe2kucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6YSx0YXJnZXROYW1lOm4sc3RyZWFtOm8sc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7aS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTphLHRhcmdldE5hbWU6bixzdHJlYW06byxzdHJlYW1JZDp0LHJlYXNvbjp3cmFwUmVhc29uKGUpfSl9KSk7cC5zaW5rQ2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO3AuaXNDYW5jZWxsZWQ9ITA7ZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbdF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19YXN5bmMjQihlLHQpe2F3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbZS5zdGFydENhbGw/LnByb21pc2UsZS5wdWxsQ2FsbD8ucHJvbWlzZSxlLmNhbmNlbENhbGw/LnByb21pc2VdKTtkZWxldGUgdGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XX1kZXN0cm95KCl7dGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpfX19LChlLHQsYSk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5QREZXb3JrZXJTdHJlYW09dm9pZCAwO2EoMTQwKTt2YXIgcj1hKDE0NSk7dC5QREZXb3JrZXJTdHJlYW09Y2xhc3MgUERGV29ya2VyU3RyZWFte2NvbnN0cnVjdG9yKGUpe3RoaXMuX21zZ0hhbmRsZXI9ZTt0aGlzLl9jb250ZW50TGVuZ3RoPW51bGw7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbDt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzPVtdfWdldEZ1bGxSZWFkZXIoKXsoMCxyLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCJQREZXb3JrZXJTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS4iKTt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1uZXcgUERGV29ya2VyU3RyZWFtUmVhZGVyKHRoaXMuX21zZ0hhbmRsZXIpO3JldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn1nZXRSYW5nZVJlYWRlcihlLHQpe2NvbnN0IGE9bmV3IFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTt0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2goYSk7cmV0dXJuIGF9Y2FuY2VsQWxsUmVxdWVzdHMoZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/LmNhbmNlbChlKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKXQuY2FuY2VsKGUpfX07Y2xhc3MgUERGV29ya2VyU3RyZWFtUmVhZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuX21zZ0hhbmRsZXI9ZTt0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt0aGlzLl9jb250ZW50TGVuZ3RoPW51bGw7dGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hMTt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMTtjb25zdCB0PXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJlYWRlciIpO3RoaXMuX3JlYWRlcj10LmdldFJlYWRlcigpO3RoaXMuX2hlYWRlcnNSZWFkeT10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiUmVhZGVySGVhZGVyc1JlYWR5IikudGhlbigoZT0+e3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPWUuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7dGhpcy5faXNSYW5nZVN1cHBvcnRlZD1lLmlzUmFuZ2VTdXBwb3J0ZWQ7dGhpcy5fY29udGVudExlbmd0aD1lLmNvbnRlbnRMZW5ndGh9KSl9Z2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9Z2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH1nZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9Z2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH1hc3luYyByZWFkKCl7Y29uc3R7dmFsdWU6ZSxkb25lOnR9PWF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7cmV0dXJuIHQ/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTp7dmFsdWU6ZS5idWZmZXIsZG9uZTohMX19Y2FuY2VsKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fWNsYXNzIFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVye2NvbnN0cnVjdG9yKGUsdCxhKXt0aGlzLl9tc2dIYW5kbGVyPWE7dGhpcy5vblByb2dyZXNzPW51bGw7Y29uc3Qgcj10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSYW5nZVJlYWRlciIse2JlZ2luOmUsZW5kOnR9KTt0aGlzLl9yZWFkZXI9ci5nZXRSZWFkZXIoKX1nZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX1hc3luYyByZWFkKCl7Y29uc3R7dmFsdWU6ZSxkb25lOnR9PWF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7cmV0dXJuIHQ/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTp7dmFsdWU6ZS5idWZmZXIsZG9uZTohMX19Y2FuY2VsKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fX1dLHQ9e307ZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyhhKXt2YXIgcj10W2FdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgbj10W2FdPXtleHBvcnRzOnt9fTtlW2FdLmNhbGwobi5leHBvcnRzLG4sbi5leHBvcnRzLF9fd19wZGZqc19yZXF1aXJlX18pO3JldHVybiBuLmV4cG9ydHN9dmFyIGE9e307KCgpPT57dmFyIGU9YTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIldvcmtlck1lc3NhZ2VIYW5kbGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5Xb3JrZXJNZXNzYWdlSGFuZGxlcn19KTt2YXIgdD1fX3dfcGRmanNfcmVxdWlyZV9fKDEpfSkoKTtyZXR1cm4gYX0pKCkpKTs=";function useVuePdfEmbed({onError:st,onPasswordRequest:r,onProgress:h,source:M}){const p=shallowRef(null),f=shallowRef(null);return watchEffect(()=>Sl(this,null,function*(){const B=toValue(M);if(B){if(Object.prototype.hasOwnProperty.call(B,"_pdfInfo")){p.value=B;return}try{f.value=pdfExports.getDocument(B),r&&(f.value.onPassword=(O,F)=>{r({callback:O,isWrongPassword:F===pdfExports$1.PasswordResponses.INCORRECT_PASSWORD})}),h&&(f.value.onProgress=h),p.value=yield f.value.promise}catch(O){if(p.value=null,st)st(O);else throw O}}})),onBeforeUnmount(()=>{var B,O,F;(B=f.value)!=null&&B.onPassword&&(f.value.onPassword=null),(O=f.value)!=null&&O.onProgress&&(f.value.onProgress=null),(F=p.value)==null||F.destroy()}),{doc:p}}var pdf_viewer={exports:{}};(function(st,r){(function(h,M){st.exports=h.pdfjsViewer=M()})(globalThis,()=>(()=>{var h=[,(B,O,F)=>{var L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt,Ut,Vt,Ht,Pt,at,S,w,X,J,H,et,lt,Mt,Rt,gt,Ot,Dt;Object.defineProperty(O,"__esModule",{value:!0}),O.PDFFindController=O.FindState=void 0;var qt=F(2),vt=F(3),dl=F(4);const ol={FOUND:0,NOT_FOUND:1,WRAPPED:2,PENDING:3};O.FindState=ol;const il=250,_t=-50,Ft=-400,wt={"‐":"-","‘":"'","’":"'","‚":"'","‛":"'","“":'"',"”":'"',"„":'"',"‟":'"',"¼":"1/4","½":"1/2","¾":"3/4"},pt=new Set([12441,12442,2381,2509,2637,2765,2893,3021,3149,3277,3387,3388,3405,3530,3642,3770,3972,4153,4154,5908,5940,6098,6752,6980,7082,7083,7154,7155,11647,43014,43052,43204,43347,43456,43766,44013,3158,3953,3954,3962,3963,3964,3965,3968,3956]);let Ct;const el=new RegExp("\\p{M}+","gu"),cl=new RegExp("([.*+?^${}()|[\\]\\\\])|(\\p{P})|(\\s+)|(\\p{M})|(\\p{L})","gu"),Ml=new RegExp("([^\\p{M}])\\p{M}*$","u"),Yl=new RegExp("^\\p{M}*([^\\p{M}])","u"),Xl=/[\uAC00-\uD7AF\uFA6C\uFACF-\uFAD1\uFAD5-\uFAD7]+/g,Tl=new Map,Vl="[\\u1100-\\u1112\\ud7a4-\\ud7af\\ud84a\\ud84c\\ud850\\ud854\\ud857\\ud85f]",Ll=new Map;let yl=null,Qt=null;function ot(jt){const Jt=[];let Lt;for(;(Lt=Xl.exec(jt))!==null;){let{index:nt}=Lt;for(const T of Lt[0]){let ct=Tl.get(T);ct||(ct=T.normalize("NFD").length,Tl.set(T,ct)),Jt.push([ct,nt++])}}let Yt;if(Jt.length===0&&yl)Yt=yl;else if(Jt.length>0&&Qt)Yt=Qt;else{const nt=Object.keys(wt).join(""),T=(0,vt.getNormalizeWithNFKC)(),ct=`([${nt}])|([${T}])|((?:゙|゚)\\n)|(\\p{M}+(?:-\\n)?)|(\\S-\\n)|((?:\\p{Ideographic}|[-ヿ])\\n)|(\\n)`;Jt.length===0?Yt=yl=new RegExp(ct+"|(\\u0000)","gum"):Yt=Qt=new RegExp(ct+`|(${Vl})`,"gum")}const Kt=[];for(;(Lt=el.exec(jt))!==null;)Kt.push([Lt[0].length,Lt.index]);let $t=jt.normalize("NFD");const tl=[[0,0]];let bl=0,Bt=0,rl=0,hl=0,Il=0,Wl=!1;return $t=$t.replace(Yt,(nt,T,ct,Wt,yt,kt,Et,sl,ml,al)=>{var zl,Gl,Nl;if(al-=hl,T){const pl=wt[T],Rl=pl.length;for(let wl=1;wl<Rl;wl++)tl.push([al-rl+wl,rl-wl]);return rl-=Rl-1,pl}if(ct){let pl=Ll.get(ct);pl||(pl=ct.normalize("NFKC"),Ll.set(ct,pl));const Rl=pl.length;for(let wl=1;wl<Rl;wl++)tl.push([al-rl+wl,rl-wl]);return rl-=Rl-1,pl}if(Wt)return Wl=!0,al+Il===((zl=Kt[bl])==null?void 0:zl[1])?++bl:(tl.push([al-1-rl+1,rl-1]),rl-=1,hl+=1),tl.push([al-rl+1,rl]),hl+=1,Il+=1,Wt.charAt(0);if(yt){const pl=yt.endsWith(`
|
||
`),Rl=pl?yt.length-2:yt.length;Wl=!0;let wl=Rl;al+Il===((Gl=Kt[bl])==null?void 0:Gl[1])&&(wl-=Kt[bl][0],++bl);for(let xl=1;xl<=wl;xl++)tl.push([al-1-rl+xl,rl-xl]);return rl-=wl,hl+=wl,pl?(al+=Rl-1,tl.push([al-rl+1,1+rl]),rl+=1,hl+=1,Il+=1,yt.slice(0,Rl)):yt}if(kt){const pl=kt.length-2;return tl.push([al-rl+pl,1+rl]),rl+=1,hl+=1,Il+=1,kt.slice(0,-2)}if(Et){const pl=Et.length-1;return tl.push([al-rl+pl,rl]),hl+=1,Il+=1,Et.slice(0,-1)}if(sl)return tl.push([al-rl+1,rl-1]),rl-=1,hl+=1,Il+=1," ";if(al+Il===((Nl=Jt[Bt])==null?void 0:Nl[1])){const pl=Jt[Bt][0]-1;++Bt;for(let Rl=1;Rl<=pl;Rl++)tl.push([al-(rl-Rl),rl-Rl]);rl-=pl,hl+=pl}return ml}),tl.push([$t.length,rl]),[$t,tl,Wl]}function ut(jt,Jt,Lt){if(!jt)return[Jt,Lt];const Yt=Jt,Kt=Jt+Lt-1;let $t=(0,qt.binarySearchFirstItem)(jt,rl=>rl[0]>=Yt);jt[$t][0]>Yt&&--$t;let tl=(0,qt.binarySearchFirstItem)(jt,rl=>rl[0]>=Kt,$t);jt[tl][0]>Kt&&--tl;const bl=Yt+jt[$t][1],Bt=Kt+jt[tl][1]+1-bl;return[bl,Bt]}class Tt{constructor({linkService:Jt,eventBus:Lt,updateMatchesCountOnProgress:Yt=!0}){E(this,v),E(this,R),E(this,I),E(this,C),E(this,K),E(this,m),E(this,$),E(this,Zt),E(this,It),E(this,it),E(this,zt),E(this,Xt),E(this,Vt),E(this,Pt),E(this,S),E(this,X),E(this,H),E(this,lt),E(this,Rt),E(this,Ot),E(this,L,null),E(this,g,!0),E(this,q,0),this._linkService=Jt,this._eventBus=Lt,Zl(this,g,Yt),this.onIsPageVisible=null,A(this,R,j).call(this),Lt._on("find",A(this,v,Q).bind(this)),Lt._on("findbarclose",A(this,H,et).bind(this))}get highlightMatches(){return this._highlightMatches}get pageMatches(){return this._pageMatches}get pageMatchesLength(){return this._pageMatchesLength}get selected(){return this._selected}get state(){return t(this,L)}setDocument(Jt){this._pdfDocument&&A(this,R,j).call(this),Jt&&(this._pdfDocument=Jt,this._firstPageCapability.resolve())}scrollMatchIntoView({element:Jt=null,selectedLeft:Lt=0,pageIndex:Yt=-1,matchIndex:Kt=-1}){if(!this._scrollMatches||!Jt||Kt===-1||Kt!==this._selected.matchIdx||Yt===-1||Yt!==this._selected.pageIdx)return;this._scrollMatches=!1;const $t={top:_t,left:Lt+Ft};(0,qt.scrollIntoView)(Jt,$t,!0)}}L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakSet,Q=function(jt){if(!jt)return;jt.phraseSearch===!1&&(console.error("The `phraseSearch`-parameter was removed, please provide an Array of strings in the `query`-parameter instead."),typeof jt.query=="string"&&(jt.query=jt.query.match(/\S+/g)));const Jt=this._pdfDocument,{type:Lt}=jt;(t(this,L)===null||A(this,C,U).call(this,jt))&&(this._dirtyMatch=!0),Zl(this,L,jt),Lt!=="highlightallchange"&&A(this,Ot,Dt).call(this,ol.PENDING),this._firstPageCapability.promise.then(()=>{if(!this._pdfDocument||Jt&&this._pdfDocument!==Jt)return;A(this,It,xt).call(this);const Yt=!this._highlightMatches,Kt=!!this._findTimeout;this._findTimeout&&(clearTimeout(this._findTimeout),this._findTimeout=null),Lt?this._dirtyMatch?A(this,Xt,Ut).call(this):Lt==="again"?(A(this,Xt,Ut).call(this),Yt&&t(this,L).highlightAll&&A(this,zt,Gt).call(this)):Lt==="highlightallchange"?(Kt?A(this,Xt,Ut).call(this):this._highlightMatches=!0,A(this,zt,Gt).call(this)):A(this,Xt,Ut).call(this):this._findTimeout=setTimeout(()=>{A(this,Xt,Ut).call(this),this._findTimeout=null},il)})},R=new WeakSet,j=function(){this._highlightMatches=!1,this._scrollMatches=!1,this._pdfDocument=null,this._pageMatches=[],this._pageMatchesLength=[],Zl(this,q,0),Zl(this,L,null),this._selected={pageIdx:-1,matchIdx:-1},this._offset={pageIdx:null,matchIdx:null,wrapped:!1},this._extractTextPromises=[],this._pageContents=[],this._pageDiffs=[],this._hasDiacritics=[],this._matchesCountTotal=0,this._pagesToSearch=null,this._pendingFindMatches=new Set,this._resumePageIdx=null,this._dirtyMatch=!1,clearTimeout(this._findTimeout),this._findTimeout=null,this._firstPageCapability=new dl.PromiseCapability},I=new WeakSet,k=function(){const{query:jt}=t(this,L);return typeof jt=="string"?(jt!==this._rawQuery&&(this._rawQuery=jt,[this._normalizedQuery]=ot(jt)),this._normalizedQuery):(jt||[]).filter(Jt=>!!Jt).map(Jt=>ot(Jt)[0])},C=new WeakSet,U=function(jt){var $t;var Jt;const Lt=jt.query,Yt=t(this,L).query,Kt=typeof Lt;if(Kt!==typeof Yt)return!0;if(Kt==="string"){if(Lt!==Yt)return!0}else if(JSON.stringify(Lt)!==JSON.stringify(Yt))return!0;switch(jt.type){case"again":const tl=this._selected.pageIdx+1,bl=this._linkService;return tl>=1&&tl<=bl.pagesCount&&tl!==bl.page&&!(($t=(Jt=this.onIsPageVisible)==null?void 0:Jt.call(this,tl))==null||$t);case"highlightallchange":return!1}return!0},K=new WeakSet,u=function(jt,Jt,Lt){let Yt=jt.slice(0,Jt).match(Ml);if(Yt){const Kt=jt.charCodeAt(Jt),$t=Yt[1].charCodeAt(0);if((0,vt.getCharacterType)(Kt)===(0,vt.getCharacterType)($t))return!1}if(Yt=jt.slice(Jt+Lt).match(Yl),Yt){const Kt=jt.charCodeAt(Jt+Lt-1),$t=Yt[1].charCodeAt(0);if((0,vt.getCharacterType)(Kt)===(0,vt.getCharacterType)($t))return!1}return!0},m=new WeakSet,_=function(jt,Jt,Lt,Yt){const Kt=this._pageMatches[Lt]=[],$t=this._pageMatchesLength[Lt]=[];if(!jt)return;const tl=this._pageDiffs[Lt];let bl;for(;(bl=jt.exec(Yt))!==null;){if(Jt&&!A(this,K,u).call(this,Yt,bl.index,bl[0].length))continue;const[Bt,rl]=ut(tl,bl.index,bl[0].length);rl&&(Kt.push(Bt),$t.push(rl))}},$=new WeakSet,P=function(jt,Jt){const{matchDiacritics:Lt}=t(this,L);let Yt=!1;jt=jt.replaceAll(cl,($t,tl,bl,Bt,rl,hl)=>tl?`[ ]*\\${tl}[ ]*`:bl?`[ ]*${bl}[ ]*`:Bt?"[ ]+":Lt?rl||hl:rl?pt.has(rl.charCodeAt(0))?rl:"":Jt?(Yt=!0,`${hl}\\p{M}*`):hl);const Kt="[ ]*";return jt.endsWith(Kt)&&(jt=jt.slice(0,jt.length-Kt.length)),Lt&&Jt&&(Ct||(Ct=String.fromCharCode(...pt)),Yt=!0,jt=`${jt}(?=[${Ct}]|[^\\p{M}]|$)`),[Yt,jt]},Zt=new WeakSet,dt=function(jt){let Jt=t(this,I,k);if(Jt.length===0)return;const{caseSensitive:Lt,entireWord:Yt}=t(this,L),Kt=this._pageContents[jt],$t=this._hasDiacritics[jt];let tl=!1;typeof Jt=="string"?[tl,Jt]=A(this,$,P).call(this,Jt,$t):Jt=Jt.sort().reverse().map(rl=>{const[hl,Il]=A(this,$,P).call(this,rl,$t);return tl||(tl=hl),`(${Il})`}).join("|");const bl=`g${tl?"u":""}${Lt?"":"i"}`;Jt=Jt?new RegExp(Jt,bl):null,A(this,m,_).call(this,Jt,Yt,jt,Kt),t(this,L).highlightAll&&A(this,it,Nt).call(this,jt),this._resumePageIdx===jt&&(this._resumePageIdx=null,A(this,Pt,at).call(this));const Bt=this._pageMatches[jt].length;this._matchesCountTotal+=Bt,t(this,g)?Bt>0&&A(this,Rt,gt).call(this):++mt(this,q)._===this._linkService.pagesCount&&A(this,Rt,gt).call(this)},It=new WeakSet,xt=function(){if(this._extractTextPromises.length>0)return;let jt=Promise.resolve();const Jt={disableNormalization:!0};for(let Lt=0,Yt=this._linkService.pagesCount;Lt<Yt;Lt++){const Kt=new dl.PromiseCapability;this._extractTextPromises[Lt]=Kt.promise,jt=jt.then(()=>this._pdfDocument.getPage(Lt+1).then($t=>$t.getTextContent(Jt)).then($t=>{const tl=[];for(const bl of $t.items)tl.push(bl.str),bl.hasEOL&&tl.push(`
|
||
`);[this._pageContents[Lt],this._pageDiffs[Lt],this._hasDiacritics[Lt]]=ot(tl.join("")),Kt.resolve()},$t=>{console.error(`Unable to get text content for page ${Lt+1}`,$t),this._pageContents[Lt]="",this._pageDiffs[Lt]=null,this._hasDiacritics[Lt]=!1,Kt.resolve()}))}},it=new WeakSet,Nt=function(jt){this._scrollMatches&&this._selected.pageIdx===jt&&(this._linkService.page=jt+1),this._eventBus.dispatch("updatetextlayermatches",{source:this,pageIndex:jt})},zt=new WeakSet,Gt=function(){this._eventBus.dispatch("updatetextlayermatches",{source:this,pageIndex:-1})},Xt=new WeakSet,Ut=function(){const jt=t(this,L).findPrevious,Jt=this._linkService.page-1,Lt=this._linkService.pagesCount;if(this._highlightMatches=!0,this._dirtyMatch){this._dirtyMatch=!1,this._selected.pageIdx=this._selected.matchIdx=-1,this._offset.pageIdx=Jt,this._offset.matchIdx=null,this._offset.wrapped=!1,this._resumePageIdx=null,this._pageMatches.length=0,this._pageMatchesLength.length=0,Zl(this,q,0),this._matchesCountTotal=0,A(this,zt,Gt).call(this);for(let Kt=0;Kt<Lt;Kt++)this._pendingFindMatches.has(Kt)||(this._pendingFindMatches.add(Kt),this._extractTextPromises[Kt].then(()=>{this._pendingFindMatches.delete(Kt),A(this,Zt,dt).call(this,Kt)}))}if(t(this,I,k).length===0){A(this,Ot,Dt).call(this,ol.FOUND);return}if(this._resumePageIdx)return;const Yt=this._offset;if(this._pagesToSearch=Lt,Yt.matchIdx!==null){const Kt=this._pageMatches[Yt.pageIdx].length;if(!jt&&Yt.matchIdx+1<Kt||jt&&Yt.matchIdx>0){Yt.matchIdx=jt?Yt.matchIdx-1:Yt.matchIdx+1,A(this,X,J).call(this,!0);return}A(this,S,w).call(this,jt)}A(this,Pt,at).call(this)},Vt=new WeakSet,Ht=function(jt){const Jt=this._offset,Lt=jt.length,Yt=t(this,L).findPrevious;return Lt?(Jt.matchIdx=Yt?Lt-1:0,A(this,X,J).call(this,!0),!0):(A(this,S,w).call(this,Yt),Jt.wrapped&&(Jt.matchIdx=null,this._pagesToSearch<0)?(A(this,X,J).call(this,!1),!0):!1)},Pt=new WeakSet,at=function(){this._resumePageIdx!==null&&console.error("There can only be one pending page.");let jt=null;do{const Jt=this._offset.pageIdx;if(jt=this._pageMatches[Jt],!jt){this._resumePageIdx=Jt;break}}while(!A(this,Vt,Ht).call(this,jt))},S=new WeakSet,w=function(jt){const Jt=this._offset,Lt=this._linkService.pagesCount;Jt.pageIdx=jt?Jt.pageIdx-1:Jt.pageIdx+1,Jt.matchIdx=null,this._pagesToSearch--,(Jt.pageIdx>=Lt||Jt.pageIdx<0)&&(Jt.pageIdx=jt?Lt-1:0,Jt.wrapped=!0)},X=new WeakSet,J=function(jt=!1){let Jt=ol.NOT_FOUND;const Lt=this._offset.wrapped;if(this._offset.wrapped=!1,jt){const Yt=this._selected.pageIdx;this._selected.pageIdx=this._offset.pageIdx,this._selected.matchIdx=this._offset.matchIdx,Jt=Lt?ol.WRAPPED:ol.FOUND,Yt!==-1&&Yt!==this._selected.pageIdx&&A(this,it,Nt).call(this,Yt)}A(this,Ot,Dt).call(this,Jt,t(this,L).findPrevious),this._selected.pageIdx!==-1&&(this._scrollMatches=!0,A(this,it,Nt).call(this,this._selected.pageIdx))},H=new WeakSet,et=function(jt){const Jt=this._pdfDocument;this._firstPageCapability.promise.then(()=>{!this._pdfDocument||Jt&&this._pdfDocument!==Jt||(this._findTimeout&&(clearTimeout(this._findTimeout),this._findTimeout=null),this._resumePageIdx&&(this._resumePageIdx=null,this._dirtyMatch=!0),A(this,Ot,Dt).call(this,ol.FOUND),this._highlightMatches=!1,A(this,zt,Gt).call(this))})},lt=new WeakSet,Mt=function(){var jt;const{pageIdx:Jt,matchIdx:Lt}=this._selected;let Yt=0,Kt=this._matchesCountTotal;if(Lt!==-1){for(let $t=0;$t<Jt;$t++)Yt+=((jt=this._pageMatches[$t])==null?void 0:jt.length)||0;Yt+=Lt+1}return(Yt<1||Yt>Kt)&&(Yt=Kt=0),{current:Yt,total:Kt}},Rt=new WeakSet,gt=function(){this._eventBus.dispatch("updatefindmatchescount",{source:this,matchesCount:A(this,lt,Mt).call(this)})},Ot=new WeakSet,Dt=function(jt,Jt=!1){var Yt;var Lt;!t(this,g)&&(t(this,q)!==this._linkService.pagesCount||jt===ol.PENDING)||this._eventBus.dispatch("updatefindcontrolstate",{source:this,state:jt,previous:Jt,matchesCount:A(this,lt,Mt).call(this),rawQuery:(Yt=(Lt=t(this,L))==null?void 0:Lt.query)!=null?Yt:null})},O.PDFFindController=Tt},(B,O)=>{var F,L,g,q,v;Object.defineProperty(O,"__esModule",{value:!0}),O.animationStarted=O.VERTICAL_PADDING=O.UNKNOWN_SCALE=O.TextLayerMode=O.SpreadMode=O.SidebarView=O.ScrollMode=O.SCROLLBAR_PADDING=O.RenderingStates=O.ProgressBar=O.PresentationModeState=O.OutputScale=O.MIN_SCALE=O.MAX_SCALE=O.MAX_AUTO_SCALE=O.DEFAULT_SCALE_VALUE=O.DEFAULT_SCALE_DELTA=O.DEFAULT_SCALE=O.CursorTool=O.AutoPrintRegExp=void 0,O.apiPageLayoutToViewerModes=vt,O.apiPageModeToSidebarView=dl,O.approximateFraction=Ht,O.backtrackBeforeAllVisibleElements=S,O.binarySearchFirstItem=Vt,O.docStyle=void 0,O.getActiveOrFocusedElement=qt,O.getPageSizeInches=at,O.getVisibleElements=w,O.isPortraitOrientation=Mt,O.isValidRotation=H,O.isValidScrollMode=et,O.isValidSpreadMode=lt,O.normalizeWheelEventDelta=J,O.normalizeWheelEventDirection=X,O.parseQueryString=Gt,O.removeNullCharacters=Ut,O.roundToDivide=Pt,O.scrollIntoView=Nt,O.toggleCheckedBtn=ol,O.toggleExpandedBtn=il,O.watchScroll=zt;const Q="auto";O.DEFAULT_SCALE_VALUE=Q;const R=1;O.DEFAULT_SCALE=R;const j=1.1;O.DEFAULT_SCALE_DELTA=j;const I=.1;O.MIN_SCALE=I;const k=10;O.MAX_SCALE=k;const C=0;O.UNKNOWN_SCALE=C;const U=1.25;O.MAX_AUTO_SCALE=U;const K=40;O.SCROLLBAR_PADDING=K;const u=5;O.VERTICAL_PADDING=u;const m={INITIAL:0,RUNNING:1,PAUSED:2,FINISHED:3};O.RenderingStates=m;const _={UNKNOWN:0,NORMAL:1,CHANGING:2,FULLSCREEN:3};O.PresentationModeState=_;const $={UNKNOWN:-1,NONE:0,THUMBS:1,OUTLINE:2,ATTACHMENTS:3,LAYERS:4};O.SidebarView=$;const P={DISABLE:0,ENABLE:1,ENABLE_PERMISSIONS:2};O.TextLayerMode=P;const Zt={UNKNOWN:-1,VERTICAL:0,HORIZONTAL:1,WRAPPED:2,PAGE:3};O.ScrollMode=Zt;const dt={UNKNOWN:-1,NONE:0,ODD:1,EVEN:2};O.SpreadMode=dt;const It={SELECT:0,HAND:1,ZOOM:2};O.CursorTool=It;const xt=/\bprint\s*\(/;O.AutoPrintRegExp=xt;class it{constructor(){const Ft=window.devicePixelRatio||1;this.sx=Ft,this.sy=Ft}get scaled(){return this.sx!==1||this.sy!==1}}O.OutputScale=it;function Nt(_t,Ft,wt=!1){let pt=_t.offsetParent;if(!pt){console.error("offsetParent is not set -- cannot scroll");return}let Ct=_t.offsetTop+_t.clientTop,el=_t.offsetLeft+_t.clientLeft;for(;pt.clientHeight===pt.scrollHeight&&pt.clientWidth===pt.scrollWidth||wt&&(pt.classList.contains("markedContent")||getComputedStyle(pt).overflow==="hidden");)if(Ct+=pt.offsetTop,el+=pt.offsetLeft,pt=pt.offsetParent,!pt)return;Ft&&(Ft.top!==void 0&&(Ct+=Ft.top),Ft.left!==void 0&&(el+=Ft.left,pt.scrollLeft=el)),pt.scrollTop=Ct}function zt(_t,Ft){const wt=function(el){Ct||(Ct=window.requestAnimationFrame(function(){Ct=null;const cl=_t.scrollLeft,Ml=pt.lastX;cl!==Ml&&(pt.right=cl>Ml),pt.lastX=cl;const Yl=_t.scrollTop,Xl=pt.lastY;Yl!==Xl&&(pt.down=Yl>Xl),pt.lastY=Yl,Ft(pt)}))},pt={right:!0,down:!0,lastX:_t.scrollLeft,lastY:_t.scrollTop,_eventHandler:wt};let Ct=null;return _t.addEventListener("scroll",wt,!0),pt}function Gt(_t){const Ft=new Map;for(const[wt,pt]of new URLSearchParams(_t))Ft.set(wt.toLowerCase(),pt);return Ft}const Xt=/[\x01-\x1F]/g;function Ut(_t,Ft=!1){return typeof _t!="string"?(console.error("The argument must be a string."),_t):(Ft&&(_t=_t.replaceAll(Xt," ")),_t.replaceAll("\0",""))}function Vt(_t,Ft,wt=0){let pt=wt,Ct=_t.length-1;if(Ct<0||!Ft(_t[Ct]))return _t.length;if(Ft(_t[pt]))return pt;for(;pt<Ct;){const el=pt+Ct>>1,cl=_t[el];Ft(cl)?Ct=el:pt=el+1}return pt}function Ht(_t){if(Math.floor(_t)===_t)return[_t,1];const Ft=1/_t,wt=8;if(Ft>wt)return[1,wt];if(Math.floor(Ft)===Ft)return[1,Ft];const pt=_t>1?Ft:_t;let Ct=0,el=1,cl=1,Ml=1;for(;;){const Xl=Ct+cl,Tl=el+Ml;if(Tl>wt)break;pt<=Xl/Tl?(cl=Xl,Ml=Tl):(Ct=Xl,el=Tl)}let Yl;return pt-Ct/el<cl/Ml-pt?Yl=pt===_t?[Ct,el]:[el,Ct]:Yl=pt===_t?[cl,Ml]:[Ml,cl],Yl}function Pt(_t,Ft){const wt=_t%Ft;return wt===0?_t:Math.round(_t-wt+Ft)}function at({view:_t,userUnit:Ft,rotate:wt}){const[pt,Ct,el,cl]=_t,Ml=wt%180!==0,Yl=(el-pt)/72*Ft,Xl=(cl-Ct)/72*Ft;return{width:Ml?Xl:Yl,height:Ml?Yl:Xl}}function S(_t,Ft,wt){if(_t<2)return _t;let pt=Ft[_t].div,Ct=pt.offsetTop+pt.clientTop;Ct>=wt&&(pt=Ft[_t-1].div,Ct=pt.offsetTop+pt.clientTop);for(let el=_t-2;el>=0&&(pt=Ft[el].div,!(pt.offsetTop+pt.clientTop+pt.clientHeight<=Ct));--el)_t=el;return _t}function w({scrollEl:_t,views:Ft,sortByVisibility:wt=!1,horizontal:pt=!1,rtl:Ct=!1}){const el=_t.scrollTop,cl=el+_t.clientHeight,Ml=_t.scrollLeft,Yl=Ml+_t.clientWidth;function Xl(jt){const Jt=jt.div;return Jt.offsetTop+Jt.clientTop+Jt.clientHeight>el}function Tl(jt){const Jt=jt.div,Lt=Jt.offsetLeft+Jt.clientLeft,Yt=Lt+Jt.clientWidth;return Ct?Lt<Yl:Yt>Ml}const Vl=[],Ll=new Set,yl=Ft.length;let Qt=Vt(Ft,pt?Tl:Xl);Qt>0&&Qt<yl&&!pt&&(Qt=S(Qt,Ft,el));let ot=pt?Yl:-1;for(let jt=Qt;jt<yl;jt++){const Jt=Ft[jt],Lt=Jt.div,Yt=Lt.offsetLeft+Lt.clientLeft,Kt=Lt.offsetTop+Lt.clientTop,$t=Lt.clientWidth,tl=Lt.clientHeight,bl=Yt+$t,Bt=Kt+tl;if(ot===-1)Bt>=cl&&(ot=Bt);else if((pt?Yt:Kt)>ot)break;if(Bt<=el||Kt>=cl||bl<=Ml||Yt>=Yl)continue;const rl=Math.max(0,el-Kt)+Math.max(0,Bt-cl),hl=Math.max(0,Ml-Yt)+Math.max(0,bl-Yl),Il=(tl-rl)/tl,Wl=($t-hl)/$t,nt=Il*Wl*100|0;Vl.push({id:Jt.id,x:Yt,y:Kt,view:Jt,percent:nt,widthPercent:Wl*100|0}),Ll.add(Jt.id)}const ut=Vl[0],Tt=Vl.at(-1);return wt&&Vl.sort(function(jt,Jt){const Lt=jt.percent-Jt.percent;return Math.abs(Lt)>.001?-Lt:jt.id-Jt.id}),{first:ut,last:Tt,views:Vl,ids:Ll}}function X(_t){let Ft=Math.hypot(_t.deltaX,_t.deltaY);const wt=Math.atan2(_t.deltaY,_t.deltaX);return-.25*Math.PI<wt&&wt<.75*Math.PI&&(Ft=-Ft),Ft}function J(_t){const Ft=_t.deltaMode;let wt=X(_t);const pt=30,Ct=30;return Ft===WheelEvent.DOM_DELTA_PIXEL?wt/=pt*Ct:Ft===WheelEvent.DOM_DELTA_LINE&&(wt/=Ct),wt}function H(_t){return Number.isInteger(_t)&&_t%90===0}function et(_t){return Number.isInteger(_t)&&Object.values(Zt).includes(_t)&&_t!==Zt.UNKNOWN}function lt(_t){return Number.isInteger(_t)&&Object.values(dt).includes(_t)&&_t!==dt.UNKNOWN}function Mt(_t){return _t.width<=_t.height}const Rt=new Promise(function(_t){window.requestAnimationFrame(_t)});O.animationStarted=Rt;const gt=document.documentElement.style;O.docStyle=gt;function Ot(_t,Ft,wt){return Math.min(Math.max(_t,Ft),wt)}class Dt{constructor(Ft){E(this,F,null),E(this,L,null),E(this,g,0),E(this,q,null),E(this,v,!0),Zl(this,F,Ft.classList),Zl(this,q,Ft.style)}get percent(){return t(this,g)}set percent(Ft){if(Zl(this,g,Ot(Ft,0,100)),isNaN(Ft)){t(this,F).add("indeterminate");return}t(this,F).remove("indeterminate"),t(this,q).setProperty("--progressBar-percent",`${t(this,g)}%`)}setWidth(Ft){if(!Ft)return;const wt=Ft.parentNode.offsetWidth-Ft.offsetWidth;wt>0&&t(this,q).setProperty("--progressBar-end-offset",`${wt}px`)}setDisableAutoFetch(Ft=5e3){isNaN(t(this,g))||(t(this,L)&&clearTimeout(t(this,L)),this.show(),Zl(this,L,setTimeout(()=>{Zl(this,L,null),this.hide()},Ft)))}hide(){t(this,v)&&(Zl(this,v,!1),t(this,F).add("hidden"))}show(){t(this,v)||(Zl(this,v,!0),t(this,F).remove("hidden"))}}F=new WeakMap,L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,O.ProgressBar=Dt;function qt(){let _t=document,Ft=_t.activeElement||_t.querySelector(":focus");for(;Ft!=null&&Ft.shadowRoot;)_t=Ft.shadowRoot,Ft=_t.activeElement||_t.querySelector(":focus");return Ft}function vt(_t){let Ft=Zt.VERTICAL,wt=dt.NONE;switch(_t){case"SinglePage":Ft=Zt.PAGE;break;case"OneColumn":break;case"TwoPageLeft":Ft=Zt.PAGE;case"TwoColumnLeft":wt=dt.ODD;break;case"TwoPageRight":Ft=Zt.PAGE;case"TwoColumnRight":wt=dt.EVEN;break}return{scrollMode:Ft,spreadMode:wt}}function dl(_t){switch(_t){case"UseNone":return $.NONE;case"UseThumbs":return $.THUMBS;case"UseOutlines":return $.OUTLINE;case"UseAttachments":return $.ATTACHMENTS;case"UseOC":return $.LAYERS}return $.NONE}function ol(_t,Ft,wt=null){_t.classList.toggle("toggled",Ft),_t.setAttribute("aria-checked",Ft),wt==null||wt.classList.toggle("hidden",!Ft)}function il(_t,Ft,wt=null){_t.classList.toggle("toggled",Ft),_t.setAttribute("aria-expanded",Ft),wt==null||wt.classList.toggle("hidden",!Ft)}},(B,O)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.CharacterType=void 0,O.getCharacterType=U,O.getNormalizeWithNFKC=u;const F={SPACE:0,ALPHA_LETTER:1,PUNCT:2,HAN_LETTER:3,KATAKANA_LETTER:4,HIRAGANA_LETTER:5,HALFWIDTH_KATAKANA_LETTER:6,THAI_LETTER:7};O.CharacterType=F;function L(m){return m<11904}function g(m){return(m&65408)===0}function q(m){return m>=97&&m<=122||m>=65&&m<=90}function v(m){return m>=48&&m<=57}function Q(m){return m===32||m===9||m===13||m===10}function R(m){return m>=13312&&m<=40959||m>=63744&&m<=64255}function j(m){return m>=12448&&m<=12543}function I(m){return m>=12352&&m<=12447}function k(m){return m>=65376&&m<=65439}function C(m){return(m&65408)===3584}function U(m){return L(m)?g(m)?Q(m)?F.SPACE:q(m)||v(m)||m===95?F.ALPHA_LETTER:F.PUNCT:C(m)?F.THAI_LETTER:m===160?F.SPACE:F.ALPHA_LETTER:R(m)?F.HAN_LETTER:j(m)?F.KATAKANA_LETTER:I(m)?F.HIRAGANA_LETTER:k(m)?F.HALFWIDTH_KATAKANA_LETTER:F.ALPHA_LETTER}let K;function u(){return K||(K=" ¨ª¯²-µ¸-º¼-¾IJ-ijĿ-ŀʼnſDŽ-njDZ-dzʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕ 〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ff-stﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ!-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ¢-₩"),K}},B=>{B.exports=globalThis.pdfjsLib},(B,O,F)=>{var L,g,q,v,Q;Object.defineProperty(O,"__esModule",{value:!0}),O.SimpleLinkService=O.PDFLinkService=O.LinkTarget=void 0;var R=F(2);const j="noopener noreferrer nofollow",I={NONE:0,SELF:1,BLANK:2,PARENT:3,TOP:4};O.LinkTarget=I;function k(u,{url:m,target:_,rel:$,enabled:P=!0}={}){if(!m||typeof m!="string")throw new Error('A valid "url" parameter must provided.');P?u.href=u.title=m:(u.href="",u.title=`Disabled: ${m}`,u.onclick=()=>!1);let Zt="";switch(_){case I.NONE:break;case I.SELF:Zt="_self";break;case I.BLANK:Zt="_blank";break;case I.PARENT:Zt="_parent";break;case I.TOP:Zt="_top";break}u.target=Zt,u.rel=typeof $=="string"?$:j}const C=class fs{constructor({eventBus:m,externalLinkTarget:_=null,externalLinkRel:$=null,ignoreDestinationZoom:P=!1}={}){E(this,g),E(this,L,new Map),this.eventBus=m,this.externalLinkTarget=_,this.externalLinkRel=$,this.externalLinkEnabled=!0,this._ignoreDestinationZoom=P,this.baseUrl=null,this.pdfDocument=null,this.pdfViewer=null,this.pdfHistory=null}setDocument(m,_=null){this.baseUrl=_,this.pdfDocument=m,t(this,L).clear()}setViewer(m){this.pdfViewer=m}setHistory(m){this.pdfHistory=m}get pagesCount(){return this.pdfDocument?this.pdfDocument.numPages:0}get page(){return this.pdfViewer.currentPageNumber}set page(m){this.pdfViewer.currentPageNumber=m}get rotation(){return this.pdfViewer.pagesRotation}set rotation(m){this.pdfViewer.pagesRotation=m}get isInPresentationMode(){return this.pdfViewer.isInPresentationMode}goToDestination(m){return Sl(this,null,function*(){if(!this.pdfDocument)return;let _,$;if(typeof m=="string"?(_=m,$=yield this.pdfDocument.getDestination(m)):(_=null,$=yield m),!Array.isArray($)){console.error(`PDFLinkService.goToDestination: "${$}" is not a valid destination array, for dest="${m}".`);return}A(this,g,q).call(this,m,_,$)})}goToPage(m){if(!this.pdfDocument)return;const _=typeof m=="string"&&this.pdfViewer.pageLabelToPageNumber(m)||m|0;if(!(Number.isInteger(_)&&_>0&&_<=this.pagesCount)){console.error(`PDFLinkService.goToPage: "${m}" is not a valid page.`);return}this.pdfHistory&&(this.pdfHistory.pushCurrentPosition(),this.pdfHistory.pushPage(_)),this.pdfViewer.scrollPageIntoView({pageNumber:_})}addLinkAttributes(m,_,$=!1){k(m,{url:_,target:$?I.BLANK:this.externalLinkTarget,rel:this.externalLinkRel,enabled:this.externalLinkEnabled})}getDestinationHash(m){if(typeof m=="string"){if(m.length>0)return this.getAnchorUrl("#"+escape(m))}else if(Array.isArray(m)){const _=JSON.stringify(m);if(_.length>0)return this.getAnchorUrl("#"+escape(_))}return this.getAnchorUrl("")}getAnchorUrl(m){return this.baseUrl?this.baseUrl+m:m}setHash(m){var _;if(!this.pdfDocument)return;let $,P;if(m.includes("=")){const Zt=(0,R.parseQueryString)(m);if(Zt.has("search")){const dt=Zt.get("search").replaceAll('"',""),It=Zt.get("phrase")==="true";this.eventBus.dispatch("findfromurlhash",{source:this,query:It?dt:dt.match(/\S+/g)})}if(Zt.has("page")&&($=Zt.get("page")|0||1),Zt.has("zoom")){const dt=Zt.get("zoom").split(","),It=dt[0],xt=parseFloat(It);It.includes("Fit")?It==="Fit"||It==="FitB"?P=[null,{name:It}]:It==="FitH"||It==="FitBH"||It==="FitV"||It==="FitBV"?P=[null,{name:It},dt.length>1?dt[1]|0:null]:It==="FitR"?dt.length!==5?console.error('PDFLinkService.setHash: Not enough parameters for "FitR".'):P=[null,{name:It},dt[1]|0,dt[2]|0,dt[3]|0,dt[4]|0]:console.error(`PDFLinkService.setHash: "${It}" is not a valid zoom value.`):P=[null,{name:"XYZ"},dt.length>1?dt[1]|0:null,dt.length>2?dt[2]|0:null,xt?xt/100:It]}P?this.pdfViewer.scrollPageIntoView({pageNumber:$||this.page,destArray:P,allowNegativeOffset:!0}):$&&(this.page=$),Zt.has("pagemode")&&this.eventBus.dispatch("pagemode",{source:this,mode:Zt.get("pagemode")}),Zt.has("nameddest")&&this.goToDestination(Zt.get("nameddest"))}else{P=unescape(m);try{P=JSON.parse(P),Array.isArray(P)||(P=P.toString())}catch(Zt){}if(typeof P=="string"||A(_=fs,v,Q).call(_,P)){this.goToDestination(P);return}console.error(`PDFLinkService.setHash: "${unescape(m)}" is not a valid destination.`)}}executeNamedAction(m){var _,$;switch(m){case"GoBack":(_=this.pdfHistory)==null||_.back();break;case"GoForward":($=this.pdfHistory)==null||$.forward();break;case"NextPage":this.pdfViewer.nextPage();break;case"PrevPage":this.pdfViewer.previousPage();break;case"LastPage":this.page=this.pagesCount;break;case"FirstPage":this.page=1;break}this.eventBus.dispatch("namedaction",{source:this,action:m})}executeSetOCGState(m){return Sl(this,null,function*(){const _=this.pdfDocument,$=yield this.pdfViewer.optionalContentConfigPromise;if(_!==this.pdfDocument)return;let P;for(const Zt of m.state){switch(Zt){case"ON":case"OFF":case"Toggle":P=Zt;continue}switch(P){case"ON":$.setVisibility(Zt,!0);break;case"OFF":$.setVisibility(Zt,!1);break;case"Toggle":const dt=$.getGroup(Zt);dt&&$.setVisibility(Zt,!dt.visible);break}}this.pdfViewer.optionalContentConfigPromise=Promise.resolve($)})}cachePageRef(m,_){if(!_)return;const $=_.gen===0?`${_.num}R`:`${_.num}R${_.gen}`;t(this,L).set($,m)}_cachedPageNumber(m){if(!m)return null;const _=m.gen===0?`${m.num}R`:`${m.num}R${m.gen}`;return t(this,L).get(_)||null}};L=new WeakMap,g=new WeakSet,q=function(u,m=null,_){const $=_[0];let P;if(typeof $=="object"&&$!==null){if(P=this._cachedPageNumber($),!P){this.pdfDocument.getPageIndex($).then(Zt=>{this.cachePageRef(Zt+1,$),A(this,g,q).call(this,u,m,_)}).catch(()=>{console.error(`PDFLinkService.#goToDestinationHelper: "${$}" is not a valid page reference, for dest="${u}".`)});return}}else if(Number.isInteger($))P=$+1;else{console.error(`PDFLinkService.#goToDestinationHelper: "${$}" is not a valid destination reference, for dest="${u}".`);return}if(!P||P<1||P>this.pagesCount){console.error(`PDFLinkService.#goToDestinationHelper: "${P}" is not a valid page number, for dest="${u}".`);return}this.pdfHistory&&(this.pdfHistory.pushCurrentPosition(),this.pdfHistory.push({namedDest:m,explicitDest:_,pageNumber:P})),this.pdfViewer.scrollPageIntoView({pageNumber:P,destArray:_,ignoreDestinationZoom:this._ignoreDestinationZoom})},v=new WeakSet,Q=function(u){if(!Array.isArray(u))return!1;const m=u.length;if(m<2)return!1;const _=u[0];if(!(typeof _=="object"&&Number.isInteger(_.num)&&Number.isInteger(_.gen))&&!(Number.isInteger(_)&&_>=0))return!1;const $=u[1];if(!(typeof $=="object"&&typeof $.name=="string"))return!1;let P=!0;switch($.name){case"XYZ":if(m!==5)return!1;break;case"Fit":case"FitB":return m===2;case"FitH":case"FitBH":case"FitV":case"FitBV":if(m!==3)return!1;break;case"FitR":if(m!==6)return!1;P=!1;break;default:return!1}for(let Zt=2;Zt<m;Zt++){const dt=u[Zt];if(!(typeof dt=="number"||P&&dt===null))return!1}return!0},E(C,v);let U=C;O.PDFLinkService=U;class K{constructor(){this.externalLinkEnabled=!0}get pagesCount(){return 0}get page(){return 0}set page(m){}get rotation(){return 0}set rotation(m){}get isInPresentationMode(){return!1}goToDestination(m){return Sl(this,null,function*(){})}goToPage(m){}addLinkAttributes(m,_,$=!1){k(m,{url:_,enabled:this.externalLinkEnabled})}getDestinationHash(m){return"#"}getAnchorUrl(m){return"#"}setHash(m){}executeNamedAction(m){}executeSetOCGState(m){}cachePageRef(m,_){}}O.SimpleLinkService=K},(B,O,F)=>{var L,g,q;Object.defineProperty(O,"__esModule",{value:!0}),O.AnnotationLayerBuilder=void 0;var v=F(4),Q=F(7),R=F(2);class j{constructor({pageDiv:k,pdfPage:C,linkService:U,downloadManager:K,annotationStorage:u=null,imageResourcesPath:m="",renderForms:_=!0,l10n:$=Q.NullL10n,enableScripting:P=!1,hasJSActionsPromise:Zt=null,fieldObjectsPromise:dt=null,annotationCanvasMap:It=null,accessibilityManager:xt=null}){E(this,g),E(this,L,null),this.pageDiv=k,this.pdfPage=C,this.linkService=U,this.downloadManager=K,this.imageResourcesPath=m,this.renderForms=_,this.l10n=$,this.annotationStorage=u,this.enableScripting=P,this._hasJSActionsPromise=Zt||Promise.resolve(!1),this._fieldObjectsPromise=dt||Promise.resolve(null),this._annotationCanvasMap=It,this._accessibilityManager=xt,this.annotationLayer=null,this.div=null,this._cancelled=!1,this._eventBus=U.eventBus}render(k,C="display"){return Sl(this,null,function*(){var U;if(this.div){if(this._cancelled||!this.annotationLayer)return;this.annotationLayer.update({viewport:k.clone({dontFlip:!0})});return}const[K,u,m]=yield Promise.all([this.pdfPage.getAnnotations({intent:C}),this._hasJSActionsPromise,this._fieldObjectsPromise]);if(this._cancelled)return;const _=this.div=document.createElement("div");if(_.className="annotationLayer",this.pageDiv.append(_),K.length===0){this.hide();return}this.annotationLayer=new v.AnnotationLayer({div:_,accessibilityManager:this._accessibilityManager,annotationCanvasMap:this._annotationCanvasMap,l10n:this.l10n,page:this.pdfPage,viewport:k.clone({dontFlip:!0})}),yield this.annotationLayer.render({annotations:K,imageResourcesPath:this.imageResourcesPath,renderForms:this.renderForms,linkService:this.linkService,downloadManager:this.downloadManager,annotationStorage:this.annotationStorage,enableScripting:this.enableScripting,hasJSActions:u,fieldObjects:m}),this.linkService.isInPresentationMode&&A(this,g,q).call(this,R.PresentationModeState.FULLSCREEN),t(this,L)||(Zl(this,L,$=>{A(this,g,q).call(this,$.state)}),(U=this._eventBus)==null||U._on("presentationmodechanged",t(this,L)))})}cancel(){var k;this._cancelled=!0,t(this,L)&&((k=this._eventBus)==null||k._off("presentationmodechanged",t(this,L)),Zl(this,L,null))}hide(){this.div&&(this.div.hidden=!0)}}L=new WeakMap,g=new WeakSet,q=function(I){if(!this.div)return;let k=!1;switch(I){case R.PresentationModeState.FULLSCREEN:k=!0;break;case R.PresentationModeState.NORMAL:break;default:return}for(const C of this.div.childNodes)C.hasAttribute("data-internal-link")||(C.inert=k)},O.AnnotationLayerBuilder=j},(B,O)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.NullL10n=void 0,O.getL10nFallback=L;const F={of_pages:"of {{pagesCount}}",page_of_pages:"({{pageNumber}} of {{pagesCount}})",document_properties_kb:"{{size_kb}} KB ({{size_b}} bytes)",document_properties_mb:"{{size_mb}} MB ({{size_b}} bytes)",document_properties_date_string:"{{date}}, {{time}}",document_properties_page_size_unit_inches:"in",document_properties_page_size_unit_millimeters:"mm",document_properties_page_size_orientation_portrait:"portrait",document_properties_page_size_orientation_landscape:"landscape",document_properties_page_size_name_a3:"A3",document_properties_page_size_name_a4:"A4",document_properties_page_size_name_letter:"Letter",document_properties_page_size_name_legal:"Legal",document_properties_page_size_dimension_string:"{{width}} × {{height}} {{unit}} ({{orientation}})",document_properties_page_size_dimension_name_string:"{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})",document_properties_linearized_yes:"Yes",document_properties_linearized_no:"No",additional_layers:"Additional Layers",page_landmark:"Page {{page}}",thumb_page_title:"Page {{page}}",thumb_page_canvas:"Thumbnail of Page {{page}}",find_reached_top:"Reached top of document, continued from bottom",find_reached_bottom:"Reached end of document, continued from top","find_match_count[one]":"{{current}} of {{total}} match","find_match_count[other]":"{{current}} of {{total}} matches","find_match_count_limit[one]":"More than {{limit}} match","find_match_count_limit[other]":"More than {{limit}} matches",find_not_found:"Phrase not found",page_scale_width:"Page Width",page_scale_fit:"Page Fit",page_scale_auto:"Automatic Zoom",page_scale_actual:"Actual Size",page_scale_percent:"{{scale}}%",loading_error:"An error occurred while loading the PDF.",invalid_file_error:"Invalid or corrupted PDF file.",missing_file_error:"Missing PDF file.",unexpected_response_error:"Unexpected server response.",rendering_error:"An error occurred while rendering the page.",annotation_date_string:"{{date}}, {{time}}",printing_not_supported:"Warning: Printing is not fully supported by this browser.",printing_not_ready:"Warning: The PDF is not fully loaded for printing.",web_fonts_disabled:"Web fonts are disabled: unable to use embedded PDF fonts.",free_text2_default_content:"Start typing…",editor_free_text2_aria_label:"Text Editor",editor_ink2_aria_label:"Draw Editor",editor_ink_canvas_aria_label:"User-created image",editor_alt_text_button_label:"Alt text",editor_alt_text_edit_button_label:"Edit alt text",editor_alt_text_decorative_tooltip:"Marked as decorative"};F.print_progress_percent="{{progress}}%";function L(Q,R){switch(Q){case"find_match_count":Q=`find_match_count[${R.total===1?"one":"other"}]`;break;case"find_match_count_limit":Q=`find_match_count_limit[${R.limit===1?"one":"other"}]`;break}return F[Q]||""}function g(Q,R){return R?Q.replaceAll(/\{\{\s*(\w+)\s*\}\}/g,(j,I)=>I in R?R[I]:"{{"+I+"}}"):Q}const q={getLanguage(){return Sl(this,null,function*(){return"en-us"})},getDirection(){return Sl(this,null,function*(){return"ltr"})},get(I){return Sl(this,arguments,function*(Q,R=null,j=L(Q,R)){return g(j,R)})},translate(Q){return Sl(this,null,function*(){})}};O.NullL10n=q},(B,O,F)=>{var L;Object.defineProperty(O,"__esModule",{value:!0}),O.DownloadManager=void 0;var g=F(4);function q(Q,R){const j=document.createElement("a");if(!j.click)throw new Error('DownloadManager: "a.click()" is not supported.');j.href=Q,j.target="_parent","download"in j&&(j.download=R),(document.body||document.documentElement).append(j),j.click(),j.remove()}class v{constructor(){E(this,L,new WeakMap)}downloadUrl(R,j,I){if(!(0,g.createValidAbsoluteUrl)(R,"http://example.com")){console.error(`downloadUrl - not a valid URL: ${R}`);return}q(R+"#pdfjs.action=download",j)}downloadData(R,j,I){const k=URL.createObjectURL(new Blob([R],{type:I}));q(k,j)}openOrDownloadData(R,j,I){const k=(0,g.isPdfFile)(I)?"application/pdf":"";return this.downloadData(j,I,k),!1}download(R,j,I,k){const C=URL.createObjectURL(R);q(C,I)}}L=new WeakMap,O.DownloadManager=v},(B,O)=>{var F;Object.defineProperty(O,"__esModule",{value:!0}),O.WaitOnType=O.EventBus=O.AutomationEventBus=void 0,O.waitOnEventOrTimeout=g;const L={EVENT:"event",TIMEOUT:"timeout"};O.WaitOnType=L;function g({target:Q,name:R,delay:j=0}){return new Promise(function(I,k){if(typeof Q!="object"||!(R&&typeof R=="string")||!(Number.isInteger(j)&&j>=0))throw new Error("waitOnEventOrTimeout - invalid parameters.");function C(m){Q instanceof q?Q._off(R,U):Q.removeEventListener(R,U),u&&clearTimeout(u),I(m)}const U=C.bind(null,L.EVENT);Q instanceof q?Q._on(R,U):Q.addEventListener(R,U);const K=C.bind(null,L.TIMEOUT),u=setTimeout(K,j)})}class q{constructor(){E(this,F,Object.create(null))}on(R,j,I=null){this._on(R,j,{external:!0,once:I==null?void 0:I.once})}off(R,j,I=null){this._off(R,j,{external:!0,once:I==null?void 0:I.once})}dispatch(R,j){const I=t(this,F)[R];if(!I||I.length===0)return;let k;for(const{listener:C,external:U,once:K}of I.slice(0)){if(K&&this._off(R,C),U){(k||(k=[])).push(C);continue}C(j)}if(k){for(const C of k)C(j);k=null}}_on(R,j,I=null){var k;((k=t(this,F))[R]||(k[R]=[])).push({listener:j,external:(I==null?void 0:I.external)===!0,once:(I==null?void 0:I.once)===!0})}_off(R,j,I=null){const k=t(this,F)[R];if(k){for(let C=0,U=k.length;C<U;C++)if(k[C].listener===j){k.splice(C,1);return}}}}F=new WeakMap,O.EventBus=q;class v extends q{dispatch(R,j){throw new Error("Not implemented: AutomationEventBus.dispatch")}}O.AutomationEventBus=v},(B,O,F)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.GenericL10n=void 0,F(11);var L=F(7);const g={en:"en-US",es:"es-ES",fy:"fy-NL",ga:"ga-IE",gu:"gu-IN",hi:"hi-IN",hy:"hy-AM",nb:"nb-NO",ne:"ne-NP",nn:"nn-NO",pa:"pa-IN",pt:"pt-PT",sv:"sv-SE",zh:"zh-CN"};function q(Q){return g[Q==null?void 0:Q.toLowerCase()]||Q}class v{constructor(R){const{webL10n:j}=document;this._lang=R,this._ready=new Promise((I,k)=>{j.setLanguage(q(R),()=>{I(j)})})}getLanguage(){return Sl(this,null,function*(){return(yield this._ready).getLanguage()})}getDirection(){return Sl(this,null,function*(){return(yield this._ready).getDirection()})}get(k){return Sl(this,arguments,function*(R,j=null,I=(0,L.getL10nFallback)(R,j)){return(yield this._ready).get(R,j,I)})}translate(R){return Sl(this,null,function*(){return(yield this._ready).translate(R)})}}O.GenericL10n=v},()=>{document.webL10n=function(B,O){var F={},L="",g="textContent",q="",v={},Q="loading",R=!0;function j(){return O.querySelectorAll('link[type="application/l10n"]')}function I(){var it=O.querySelector('script[type="application/l10n"]');return it?JSON.parse(it.innerHTML):null}function k(it){return it?it.querySelectorAll("*[data-l10n-id]"):[]}function C(it){if(!it)return{};var Nt=it.getAttribute("data-l10n-id"),zt=it.getAttribute("data-l10n-args"),Gt={};if(zt)try{Gt=JSON.parse(zt)}catch(Xt){console.warn("could not parse arguments for #"+Nt)}return{id:Nt,args:Gt}}function U(it,Nt,zt){Nt=Nt||function(Xt){},zt=zt||function(){};var Gt=new XMLHttpRequest;Gt.open("GET",it,R),Gt.overrideMimeType&&Gt.overrideMimeType("text/plain; charset=utf-8"),Gt.onreadystatechange=function(){Gt.readyState==4&&(Gt.status==200||Gt.status===0?Nt(Gt.responseText):zt())},Gt.onerror=zt,Gt.ontimeout=zt;try{Gt.send(null)}catch(Xt){zt()}}function K(it,Nt,zt,Gt){var Xt=it.replace(/[^\/]*$/,"")||"./";function Ut(Ht){return Ht.lastIndexOf("\\")<0?Ht:Ht.replace(/\\\\/g,"\\").replace(/\\n/g,`
|
||
`).replace(/\\r/g,"\r").replace(/\\t/g," ").replace(/\\b/g,"\b").replace(/\\f/g,"\f").replace(/\\{/g,"{").replace(/\\}/g,"}").replace(/\\"/g,'"').replace(/\\'/g,"'")}function Vt(Ht,Pt){var at={},S=/^\s*|\s*$/,w=/^\s*#|^\s*$/,X=/^\s*\[(.*)\]\s*$/,J=/^\s*@import\s+url\((.*)\)\s*$/i,H=/^([^=\s]*)\s*=\s*(.+)$/;function et(Mt,Rt,gt){var Ot=Mt.replace(S,"").split(/[\r\n]+/),Dt="*",qt=Nt.split("-",1)[0],vt=!1,dl="";function ol(){for(;;){if(!Ot.length){gt();return}var il=Ot.shift();if(!w.test(il)){if(Rt){if(dl=X.exec(il),dl){Dt=dl[1].toLowerCase(),vt=Dt!=="*"&&Dt!==Nt&&Dt!==qt;continue}else if(vt)continue;if(dl=J.exec(il),dl){lt(Xt+dl[1],ol);return}}var _t=il.match(H);_t&&_t.length==3&&(at[_t[1]]=Ut(_t[2]))}}}ol()}function lt(Mt,Rt){U(Mt,function(gt){et(gt,!1,Rt)},function(){console.warn(Mt+" not found."),Rt()})}et(Ht,!0,function(){Pt(at)})}U(it,function(Ht){L+=Ht,Vt(Ht,function(Pt){for(var at in Pt){var S,w,X=at.lastIndexOf(".");X>0?(S=at.substring(0,X),w=at.substring(X+1)):(S=at,w=g),F[S]||(F[S]={}),F[S][w]=Pt[at]}zt&&zt()})},Gt)}function u(it,Nt){it&&(it=it.toLowerCase()),Nt=Nt||function(){},m(),q=it;var zt=j(),Gt=zt.length;if(Gt===0){var Xt=I();if(Xt&&Xt.locales&&Xt.default_locale){if(console.log("using the embedded JSON directory, early way out"),F=Xt.locales[it],!F){var Ut=Xt.default_locale.toLowerCase();for(var Vt in Xt.locales)if(Vt=Vt.toLowerCase(),Vt===it){F=Xt.locales[it];break}else Vt===Ut&&(F=Xt.locales[Ut])}Nt()}else console.log("no resource to load, early way out");Q="complete";return}var Ht=null,Pt=0;Ht=function(){Pt++,Pt>=Gt&&(Nt(),Q="complete")};function at(X){var J=X.href;this.load=function(H,et){K(J,H,et,function(){console.warn(J+" not found."),console.warn('"'+H+'" resource not found'),q="",et()})}}for(var S=0;S<Gt;S++){var w=new at(zt[S]);w.load(it,Ht)}}function m(){F={},L="",q=""}function _(it){var Nt={af:3,ak:4,am:4,ar:1,asa:3,az:0,be:11,bem:3,bez:3,bg:3,bh:4,bm:0,bn:3,bo:0,br:20,brx:3,bs:11,ca:3,cgg:3,chr:3,cs:12,cy:17,da:3,de:3,dv:3,dz:0,ee:3,el:3,en:3,eo:3,es:3,et:3,eu:3,fa:0,ff:5,fi:3,fil:4,fo:3,fr:5,fur:3,fy:3,ga:8,gd:24,gl:3,gsw:3,gu:3,guw:4,gv:23,ha:3,haw:3,he:2,hi:4,hr:11,hu:0,id:0,ig:0,ii:0,is:3,it:3,iu:7,ja:0,jmc:3,jv:0,ka:0,kab:5,kaj:3,kcg:3,kde:0,kea:0,kk:3,kl:3,km:0,kn:0,ko:0,ksb:3,ksh:21,ku:3,kw:7,lag:18,lb:3,lg:3,ln:4,lo:0,lt:10,lv:6,mas:3,mg:4,mk:16,ml:3,mn:3,mo:9,mr:3,ms:0,mt:15,my:0,nah:3,naq:7,nb:3,nd:3,ne:3,nl:3,nn:3,no:3,nr:3,nso:4,ny:3,nyn:3,om:3,or:3,pa:3,pap:3,pl:13,ps:3,pt:3,rm:3,ro:9,rof:3,ru:11,rwk:3,sah:0,saq:3,se:7,seh:3,ses:0,sg:0,sh:11,shi:19,sk:12,sl:14,sma:7,smi:7,smj:7,smn:7,sms:7,sn:3,so:3,sq:3,sr:11,ss:3,ssy:3,st:3,sv:3,sw:3,syr:3,ta:3,te:3,teo:3,th:0,ti:4,tig:3,tk:3,tl:4,tn:3,to:0,tr:0,ts:3,tzm:22,uk:11,ur:3,ve:3,vi:0,vun:3,wa:4,wae:3,wo:0,xh:3,xog:3,yo:0,zh:0,zu:3};function zt(Vt,Ht){return Ht.indexOf(Vt)!==-1}function Gt(Vt,Ht,Pt){return Ht<=Vt&&Vt<=Pt}var Xt={0:function(Vt){return"other"},1:function(Vt){return Gt(Vt%100,3,10)?"few":Vt===0?"zero":Gt(Vt%100,11,99)?"many":Vt==2?"two":Vt==1?"one":"other"},2:function(Vt){return Vt!==0&&Vt%10===0?"many":Vt==2?"two":Vt==1?"one":"other"},3:function(Vt){return Vt==1?"one":"other"},4:function(Vt){return Gt(Vt,0,1)?"one":"other"},5:function(Vt){return Gt(Vt,0,2)&&Vt!=2?"one":"other"},6:function(Vt){return Vt===0?"zero":Vt%10==1&&Vt%100!=11?"one":"other"},7:function(Vt){return Vt==2?"two":Vt==1?"one":"other"},8:function(Vt){return Gt(Vt,3,6)?"few":Gt(Vt,7,10)?"many":Vt==2?"two":Vt==1?"one":"other"},9:function(Vt){return Vt===0||Vt!=1&&Gt(Vt%100,1,19)?"few":Vt==1?"one":"other"},10:function(Vt){return Gt(Vt%10,2,9)&&!Gt(Vt%100,11,19)?"few":Vt%10==1&&!Gt(Vt%100,11,19)?"one":"other"},11:function(Vt){return Gt(Vt%10,2,4)&&!Gt(Vt%100,12,14)?"few":Vt%10===0||Gt(Vt%10,5,9)||Gt(Vt%100,11,14)?"many":Vt%10==1&&Vt%100!=11?"one":"other"},12:function(Vt){return Gt(Vt,2,4)?"few":Vt==1?"one":"other"},13:function(Vt){return Gt(Vt%10,2,4)&&!Gt(Vt%100,12,14)?"few":Vt!=1&&Gt(Vt%10,0,1)||Gt(Vt%10,5,9)||Gt(Vt%100,12,14)?"many":Vt==1?"one":"other"},14:function(Vt){return Gt(Vt%100,3,4)?"few":Vt%100==2?"two":Vt%100==1?"one":"other"},15:function(Vt){return Vt===0||Gt(Vt%100,2,10)?"few":Gt(Vt%100,11,19)?"many":Vt==1?"one":"other"},16:function(Vt){return Vt%10==1&&Vt!=11?"one":"other"},17:function(Vt){return Vt==3?"few":Vt===0?"zero":Vt==6?"many":Vt==2?"two":Vt==1?"one":"other"},18:function(Vt){return Vt===0?"zero":Gt(Vt,0,2)&&Vt!==0&&Vt!=2?"one":"other"},19:function(Vt){return Gt(Vt,2,10)?"few":Gt(Vt,0,1)?"one":"other"},20:function(Vt){return(Gt(Vt%10,3,4)||Vt%10==9)&&!(Gt(Vt%100,10,19)||Gt(Vt%100,70,79)||Gt(Vt%100,90,99))?"few":Vt%1e6===0&&Vt!==0?"many":Vt%10==2&&!zt(Vt%100,[12,72,92])?"two":Vt%10==1&&!zt(Vt%100,[11,71,91])?"one":"other"},21:function(Vt){return Vt===0?"zero":Vt==1?"one":"other"},22:function(Vt){return Gt(Vt,0,1)||Gt(Vt,11,99)?"one":"other"},23:function(Vt){return Gt(Vt%10,1,2)||Vt%20===0?"one":"other"},24:function(Vt){return Gt(Vt,3,10)||Gt(Vt,13,19)?"few":zt(Vt,[2,12])?"two":zt(Vt,[1,11])?"one":"other"}},Ut=Nt[it.replace(/-.*$/,"")];return Ut in Xt?Xt[Ut]:(console.warn("plural form unknown for ["+it+"]"),function(){return"other"})}v.plural=function(it,Nt,zt,Gt){var Xt=parseFloat(Nt);if(isNaN(Xt)||Gt!=g)return it;v._pluralRules||(v._pluralRules=_(q));var Ut="["+v._pluralRules(Xt)+"]";return Xt===0&&zt+"[zero]"in F?it=F[zt+"[zero]"][Gt]:Xt==1&&zt+"[one]"in F?it=F[zt+"[one]"][Gt]:Xt==2&&zt+"[two]"in F?it=F[zt+"[two]"][Gt]:zt+Ut in F?it=F[zt+Ut][Gt]:zt+"[other]"in F&&(it=F[zt+"[other]"][Gt]),it};function $(it,Nt,zt){var Gt=F[it];if(!Gt){if(console.warn("#"+it+" is undefined."),!zt)return null;Gt=zt}var Xt={};for(var Ut in Gt){var Vt=Gt[Ut];Vt=P(Vt,Nt,it,Ut),Vt=Zt(Vt,Nt,it),Xt[Ut]=Vt}return Xt}function P(it,Nt,zt,Gt){var Xt=/\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/,Ut=Xt.exec(it);if(!Ut||!Ut.length)return it;var Vt=Ut[1],Ht=Ut[2],Pt;if(Nt&&Ht in Nt?Pt=Nt[Ht]:Ht in F&&(Pt=F[Ht]),Vt in v){var at=v[Vt];it=at(it,Pt,zt,Gt)}return it}function Zt(it,Nt,zt){var Gt=/\{\{\s*(.+?)\s*\}\}/g;return it.replace(Gt,function(Xt,Ut){return Nt&&Ut in Nt?Nt[Ut]:Ut in F?F[Ut]:(console.log("argument {{"+Ut+"}} for #"+zt+" is undefined."),Xt)})}function dt(it){var Nt=C(it);if(Nt.id){var zt=$(Nt.id,Nt.args);if(!zt){console.warn("#"+Nt.id+" is undefined.");return}if(zt[g]){if(It(it)===0)it[g]=zt[g];else{for(var Gt=it.childNodes,Xt=!1,Ut=0,Vt=Gt.length;Ut<Vt;Ut++)Gt[Ut].nodeType===3&&/\S/.test(Gt[Ut].nodeValue)&&(Xt?Gt[Ut].nodeValue="":(Gt[Ut].nodeValue=zt[g],Xt=!0));if(!Xt){var Ht=O.createTextNode(zt[g]);it.prepend(Ht)}}delete zt[g]}for(var Pt in zt)it[Pt]=zt[Pt]}}function It(it){if(it.children)return it.children.length;if(typeof it.childElementCount<"u")return it.childElementCount;for(var Nt=0,zt=0;zt<it.childNodes.length;zt++)Nt+=it.nodeType===1?1:0;return Nt}function xt(it){it=it||O.documentElement;for(var Nt=k(it),zt=Nt.length,Gt=0;Gt<zt;Gt++)dt(Nt[Gt]);dt(it)}return{get:function(it,Nt,zt){var Gt=it.lastIndexOf("."),Xt=g;Gt>0&&(Xt=it.substring(Gt+1),it=it.substring(0,Gt));var Ut;zt&&(Ut={},Ut[Xt]=zt);var Vt=$(it,Nt,Ut);return Vt&&Xt in Vt?Vt[Xt]:"{{"+it+"}}"},getData:function(){return F},getText:function(){return L},getLanguage:function(){return q},setLanguage:function(it,Nt){u(it,function(){Nt&&Nt()})},getDirection:function(){var it=["ar","he","fa","ps","ur"],Nt=q.split("-",1)[0];return it.indexOf(Nt)>=0?"rtl":"ltr"},translate:xt,getReadyState:function(){return Q},ready:function(it){if(it)Q=="complete"||Q=="interactive"?B.setTimeout(function(){it()}):O.addEventListener&&O.addEventListener("localized",function Nt(){O.removeEventListener("localized",Nt),it()});else return}}}(window,document)},(B,O,F)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.PDFHistory=void 0,O.isDestArraysEqual=k,O.isDestHashesEqual=I;var L=F(2),g=F(9);const q=1e3,v=50,Q=1e3;function R(){return document.location.hash}class j{constructor({linkService:U,eventBus:K}){this.linkService=U,this.eventBus=K,this._initialized=!1,this._fingerprint="",this.reset(),this._boundEvents=null,this.eventBus._on("pagesinit",()=>{this._isPagesLoaded=!1,this.eventBus._on("pagesloaded",u=>{this._isPagesLoaded=!!u.pagesCount},{once:!0})})}initialize({fingerprint:U,resetHistory:K=!1,updateUrl:u=!1}){if(!U||typeof U!="string"){console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');return}this._initialized&&this.reset();const m=this._fingerprint!==""&&this._fingerprint!==U;this._fingerprint=U,this._updateUrl=u===!0,this._initialized=!0,this._bindEvents();const _=window.history.state;if(this._popStateInProgress=!1,this._blockHashChange=0,this._currentHash=R(),this._numPositionUpdates=0,this._uid=this._maxUid=0,this._destination=null,this._position=null,!this._isValidState(_,!0)||K){const{hash:P,page:Zt,rotation:dt}=this._parseCurrentHash(!0);if(!P||m||K){this._pushOrReplaceState(null,!0);return}this._pushOrReplaceState({hash:P,page:Zt,rotation:dt},!0);return}const $=_.destination;this._updateInternalState($,_.uid,!0),$.rotation!==void 0&&(this._initialRotation=$.rotation),$.dest?(this._initialBookmark=JSON.stringify($.dest),this._destination.page=null):$.hash?this._initialBookmark=$.hash:$.page&&(this._initialBookmark=`page=${$.page}`)}reset(){this._initialized&&(this._pageHide(),this._initialized=!1,this._unbindEvents()),this._updateViewareaTimeout&&(clearTimeout(this._updateViewareaTimeout),this._updateViewareaTimeout=null),this._initialBookmark=null,this._initialRotation=null}push({namedDest:U=null,explicitDest:K,pageNumber:u}){if(!this._initialized)return;if(U&&typeof U!="string"){console.error(`PDFHistory.push: "${U}" is not a valid namedDest parameter.`);return}else if(Array.isArray(K)){if(!this._isValidPage(u)&&(u!==null||this._destination)){console.error(`PDFHistory.push: "${u}" is not a valid pageNumber parameter.`);return}}else{console.error(`PDFHistory.push: "${K}" is not a valid explicitDest parameter.`);return}const m=U||JSON.stringify(K);if(!m)return;let _=!1;if(this._destination&&(I(this._destination.hash,m)||k(this._destination.dest,K))){if(this._destination.page)return;_=!0}this._popStateInProgress&&!_||(this._pushOrReplaceState({dest:K,hash:m,page:u,rotation:this.linkService.rotation},_),this._popStateInProgress||(this._popStateInProgress=!0,Promise.resolve().then(()=>{this._popStateInProgress=!1})))}pushPage(U){var K;if(this._initialized){if(!this._isValidPage(U)){console.error(`PDFHistory.pushPage: "${U}" is not a valid page number.`);return}((K=this._destination)==null?void 0:K.page)!==U&&(this._popStateInProgress||(this._pushOrReplaceState({dest:null,hash:`page=${U}`,page:U,rotation:this.linkService.rotation}),this._popStateInProgress||(this._popStateInProgress=!0,Promise.resolve().then(()=>{this._popStateInProgress=!1}))))}}pushCurrentPosition(){!this._initialized||this._popStateInProgress||this._tryPushCurrentPosition()}back(){if(!this._initialized||this._popStateInProgress)return;const U=window.history.state;this._isValidState(U)&&U.uid>0&&window.history.back()}forward(){if(!this._initialized||this._popStateInProgress)return;const U=window.history.state;this._isValidState(U)&&U.uid<this._maxUid&&window.history.forward()}get popStateInProgress(){return this._initialized&&(this._popStateInProgress||this._blockHashChange>0)}get initialBookmark(){return this._initialized?this._initialBookmark:null}get initialRotation(){return this._initialized?this._initialRotation:null}_pushOrReplaceState(U,K=!1){const u=K||!this._destination,m={fingerprint:this._fingerprint,uid:u?this._uid:this._uid+1,destination:U};this._updateInternalState(U,m.uid);let _;if(this._updateUrl&&U!=null&&U.hash){const $=document.location.href.split("#")[0];$.startsWith("file://")||(_=`${$}#${U.hash}`)}u?window.history.replaceState(m,"",_):window.history.pushState(m,"",_)}_tryPushCurrentPosition(U=!1){if(!this._position)return;let K=this._position;if(U&&(K=Object.assign(Object.create(null),this._position),K.temporary=!0),!this._destination){this._pushOrReplaceState(K);return}if(this._destination.temporary){this._pushOrReplaceState(K,!0);return}if(this._destination.hash===K.hash||!this._destination.page&&this._numPositionUpdates<=v)return;let u=!1;if(this._destination.page>=K.first&&this._destination.page<=K.page){if(this._destination.dest!==void 0||!this._destination.first)return;u=!0}this._pushOrReplaceState(K,u)}_isValidPage(U){return Number.isInteger(U)&&U>0&&U<=this.linkService.pagesCount}_isValidState(U,K=!1){if(!U)return!1;if(U.fingerprint!==this._fingerprint)if(K){if(typeof U.fingerprint!="string"||U.fingerprint.length!==this._fingerprint.length)return!1;const[u]=performance.getEntriesByType("navigation");if((u==null?void 0:u.type)!=="reload")return!1}else return!1;return!(!Number.isInteger(U.uid)||U.uid<0||U.destination===null||typeof U.destination!="object")}_updateInternalState(U,K,u=!1){this._updateViewareaTimeout&&(clearTimeout(this._updateViewareaTimeout),this._updateViewareaTimeout=null),u&&U!=null&&U.temporary&&delete U.temporary,this._destination=U,this._uid=K,this._maxUid=Math.max(this._maxUid,K),this._numPositionUpdates=0}_parseCurrentHash(U=!1){const K=unescape(R()).substring(1),u=(0,L.parseQueryString)(K),m=u.get("nameddest")||"";let _=u.get("page")|0;return(!this._isValidPage(_)||U&&m.length>0)&&(_=null),{hash:K,page:_,rotation:this.linkService.rotation}}_updateViewarea({location:U}){this._updateViewareaTimeout&&(clearTimeout(this._updateViewareaTimeout),this._updateViewareaTimeout=null),this._position={hash:U.pdfOpenParams.substring(1),page:this.linkService.page,first:U.pageNumber,rotation:U.rotation},!this._popStateInProgress&&(this._isPagesLoaded&&this._destination&&!this._destination.page&&this._numPositionUpdates++,this._updateViewareaTimeout=setTimeout(()=>{this._popStateInProgress||this._tryPushCurrentPosition(!0),this._updateViewareaTimeout=null},Q))}_popState({state:U}){const K=R(),u=this._currentHash!==K;if(this._currentHash=K,!U){this._uid++;const{hash:_,page:$,rotation:P}=this._parseCurrentHash();this._pushOrReplaceState({hash:_,page:$,rotation:P},!0);return}if(!this._isValidState(U))return;this._popStateInProgress=!0,u&&(this._blockHashChange++,(0,g.waitOnEventOrTimeout)({target:window,name:"hashchange",delay:q}).then(()=>{this._blockHashChange--}));const m=U.destination;this._updateInternalState(m,U.uid,!0),(0,L.isValidRotation)(m.rotation)&&(this.linkService.rotation=m.rotation),m.dest?this.linkService.goToDestination(m.dest):m.hash?this.linkService.setHash(m.hash):m.page&&(this.linkService.page=m.page),Promise.resolve().then(()=>{this._popStateInProgress=!1})}_pageHide(){(!this._destination||this._destination.temporary)&&this._tryPushCurrentPosition()}_bindEvents(){this._boundEvents||(this._boundEvents={updateViewarea:this._updateViewarea.bind(this),popState:this._popState.bind(this),pageHide:this._pageHide.bind(this)},this.eventBus._on("updateviewarea",this._boundEvents.updateViewarea),window.addEventListener("popstate",this._boundEvents.popState),window.addEventListener("pagehide",this._boundEvents.pageHide))}_unbindEvents(){this._boundEvents&&(this.eventBus._off("updateviewarea",this._boundEvents.updateViewarea),window.removeEventListener("popstate",this._boundEvents.popState),window.removeEventListener("pagehide",this._boundEvents.pageHide),this._boundEvents=null)}}O.PDFHistory=j;function I(C,U){return typeof C!="string"||typeof U!="string"?!1:C===U||(0,L.parseQueryString)(C).get("nameddest")===U}function k(C,U){function K(u,m){if(typeof u!=typeof m||Array.isArray(u)||Array.isArray(m))return!1;if(u!==null&&typeof u=="object"&&m!==null){if(Object.keys(u).length!==Object.keys(m).length)return!1;for(const _ in u)if(!K(u[_],m[_]))return!1;return!0}return u===m||Number.isNaN(u)&&Number.isNaN(m)}if(!(Array.isArray(C)&&Array.isArray(U))||C.length!==U.length)return!1;for(let u=0,m=C.length;u<m;u++)if(!K(C[u],U[u]))return!1;return!0}},(B,O,F)=>{var L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt;Object.defineProperty(O,"__esModule",{value:!0}),O.PDFPageView=void 0;var Ut=F(4),Vt=F(2),Ht=F(14),Pt=F(6),at=F(15),S=F(7),w=F(5),X=F(16),J=F(17),H=F(18),et=F(19),lt=F(20);const Mt=at.compatibilityParams.maxCanvasPixels||16777216,Rt=()=>({annotationEditorUIManager:null,annotationStorage:null,downloadManager:null,enableScripting:!1,fieldObjectsPromise:null,findController:null,hasJSActionsPromise:null,get linkService(){return new w.SimpleLinkService}});class gt{constructor(Dt){var il,_t,Ft,wt;E(this,U),E(this,u),E(this,_),E(this,P),E(this,dt),E(this,xt),E(this,Nt),E(this,Gt),E(this,L,Ut.AnnotationMode.ENABLE_FORMS),E(this,g,!1),E(this,q,null),E(this,v,null),E(this,Q,null),E(this,R,null),E(this,j,Vt.RenderingStates.INITIAL),E(this,I,Vt.TextLayerMode.ENABLE),E(this,k,{directDrawing:!0,initialOptionalContent:!0,regularAnnotations:!0}),E(this,C,new WeakMap);var qt;const vt=Dt.container,dl=Dt.defaultViewport;this.id=Dt.id,this.renderingId="page"+this.id,Zl(this,q,Dt.layerProperties||Rt),this.pdfPage=null,this.pageLabel=null,this.rotation=0,this.scale=Dt.scale||Vt.DEFAULT_SCALE,this.viewport=dl,this.pdfPageRotate=dl.rotation,this._optionalContentConfigPromise=Dt.optionalContentConfigPromise||null,Zl(this,I,(il=Dt.textLayerMode)!=null?il:Vt.TextLayerMode.ENABLE),Zl(this,L,(_t=Dt.annotationMode)!=null?_t:Ut.AnnotationMode.ENABLE_FORMS),this.imageResourcesPath=Dt.imageResourcesPath||"",this.isOffscreenCanvasSupported=(Ft=Dt.isOffscreenCanvasSupported)!=null?Ft:!0,this.maxCanvasPixels=(wt=Dt.maxCanvasPixels)!=null?wt:Mt,this.pageColors=Dt.pageColors||null,this.eventBus=Dt.eventBus,this.renderingQueue=Dt.renderingQueue,this.l10n=Dt.l10n||S.NullL10n,this.renderTask=null,this.resume=null,this._isStandalone=!((qt=this.renderingQueue)!=null&&qt.hasViewer()),this._container=vt,Dt.useOnlyCssZoom&&(console.error("useOnlyCssZoom was removed, please use `maxCanvasPixels = 0` instead."),this.maxCanvasPixels=0),this._annotationCanvasMap=null,this.annotationLayer=null,this.annotationEditorLayer=null,this.textLayer=null,this.zoomLayer=null,this.xfaLayer=null,this.structTreeLayer=null;const ol=document.createElement("div");if(ol.className="page",ol.setAttribute("data-page-number",this.id),ol.setAttribute("role","region"),this.l10n.get("page_landmark",{page:this.id}).then(pt=>{ol.setAttribute("aria-label",pt)}),this.div=ol,A(this,U,K).call(this),vt==null||vt.append(ol),this._isStandalone){vt==null||vt.style.setProperty("--scale-factor",this.scale*Ut.PixelsPerInch.PDF_TO_CSS_UNITS);const{optionalContentConfigPromise:pt}=Dt;pt&&pt.then(Ct=>{pt===this._optionalContentConfigPromise&&(t(this,k).initialOptionalContent=Ct.hasInitialVisibility)})}}get renderingState(){return t(this,j)}set renderingState(Dt){if(Dt!==t(this,j))switch(Zl(this,j,Dt),t(this,v)&&(clearTimeout(t(this,v)),Zl(this,v,null)),Dt){case Vt.RenderingStates.PAUSED:this.div.classList.remove("loading");break;case Vt.RenderingStates.RUNNING:this.div.classList.add("loadingIcon"),Zl(this,v,setTimeout(()=>{this.div.classList.add("loading"),Zl(this,v,null)},0));break;case Vt.RenderingStates.INITIAL:case Vt.RenderingStates.FINISHED:this.div.classList.remove("loadingIcon","loading");break}}setPdfPage(Dt){var qt,vt,dl;this._isStandalone&&(((qt=this.pageColors)==null?void 0:qt.foreground)==="CanvasText"||((vt=this.pageColors)==null?void 0:vt.background)==="Canvas")&&((dl=this._container)==null||dl.style.setProperty("--hcm-highligh-filter",Dt.filterFactory.addHighlightHCMFilter("CanvasText","Canvas","HighlightText","Highlight"))),this.pdfPage=Dt,this.pdfPageRotate=Dt.rotate;const ol=(this.rotation+this.pdfPageRotate)%360;this.viewport=Dt.getViewport({scale:this.scale*Ut.PixelsPerInch.PDF_TO_CSS_UNITS,rotation:ol}),A(this,U,K).call(this),this.reset()}destroy(){var Dt;this.reset(),(Dt=this.pdfPage)==null||Dt.cleanup()}get _textHighlighter(){return(0,Ut.shadow)(this,"_textHighlighter",new H.TextHighlighter({pageIndex:this.id-1,eventBus:this.eventBus,findController:t(this,q).call(this).findController}))}_resetZoomLayer(Dt=!1){if(!this.zoomLayer)return;const qt=this.zoomLayer.firstChild;t(this,C).delete(qt),qt.width=0,qt.height=0,Dt&&this.zoomLayer.remove(),this.zoomLayer=null}reset({keepZoomLayer:Dt=!1,keepAnnotationLayer:qt=!1,keepAnnotationEditorLayer:vt=!1,keepXfaLayer:dl=!1,keepTextLayer:ol=!1}={}){var il,_t,Ft,wt,pt;this.cancelRendering({keepAnnotationLayer:qt,keepAnnotationEditorLayer:vt,keepXfaLayer:dl,keepTextLayer:ol}),this.renderingState=Vt.RenderingStates.INITIAL;const Ct=this.div,el=Ct.childNodes,cl=Dt&&this.zoomLayer||null,Ml=qt&&((il=this.annotationLayer)==null?void 0:il.div)||null,Yl=vt&&((_t=this.annotationEditorLayer)==null?void 0:_t.div)||null,Xl=dl&&((Ft=this.xfaLayer)==null?void 0:Ft.div)||null,Tl=ol&&((wt=this.textLayer)==null?void 0:wt.div)||null;for(let Vl=el.length-1;Vl>=0;Vl--){const Ll=el[Vl];switch(Ll){case cl:case Ml:case Yl:case Xl:case Tl:continue}Ll.remove()}Ct.removeAttribute("data-loaded"),Ml&&this.annotationLayer.hide(),Yl&&this.annotationEditorLayer.hide(),Xl&&this.xfaLayer.hide(),Tl&&this.textLayer.hide(),(pt=this.structTreeLayer)==null||pt.hide(),cl||(this.canvas&&(t(this,C).delete(this.canvas),this.canvas.width=0,this.canvas.height=0,delete this.canvas),this._resetZoomLayer())}update({scale:Dt=0,rotation:qt=null,optionalContentConfigPromise:vt=null,drawingDelay:dl=-1}){var ol;this.scale=Dt||this.scale,typeof qt=="number"&&(this.rotation=qt),vt instanceof Promise&&(this._optionalContentConfigPromise=vt,vt.then(_t=>{vt===this._optionalContentConfigPromise&&(t(this,k).initialOptionalContent=_t.hasInitialVisibility)})),t(this,k).directDrawing=!0;const il=(this.rotation+this.pdfPageRotate)%360;if(this.viewport=this.viewport.clone({scale:this.scale*Ut.PixelsPerInch.PDF_TO_CSS_UNITS,rotation:il}),A(this,U,K).call(this),this._isStandalone&&((ol=this._container)==null||ol.style.setProperty("--scale-factor",this.viewport.scale)),this.canvas){let _t=!1;if(t(this,g)){if(this.maxCanvasPixels===0)_t=!0;else if(this.maxCanvasPixels>0){const{width:wt,height:pt}=this.viewport,{sx:Ct,sy:el}=this.outputScale;_t=(Math.floor(wt)*Ct|0)*(Math.floor(pt)*el|0)>this.maxCanvasPixels}}const Ft=!_t&&dl>=0&&dl<1e3;if(Ft||_t){if(Ft&&this.renderingState!==Vt.RenderingStates.FINISHED&&(this.cancelRendering({keepZoomLayer:!0,keepAnnotationLayer:!0,keepAnnotationEditorLayer:!0,keepXfaLayer:!0,keepTextLayer:!0,cancelExtraDelay:dl}),this.renderingState=Vt.RenderingStates.FINISHED,t(this,k).directDrawing=!1),this.cssTransform({target:this.canvas,redrawAnnotationLayer:!0,redrawAnnotationEditorLayer:!0,redrawXfaLayer:!0,redrawTextLayer:!Ft,hideTextLayer:Ft}),Ft)return;this.eventBus.dispatch("pagerendered",{source:this,pageNumber:this.id,cssTransform:!0,timestamp:performance.now(),error:t(this,R)});return}!this.zoomLayer&&!this.canvas.hidden&&(this.zoomLayer=this.canvas.parentNode,this.zoomLayer.style.position="absolute")}this.zoomLayer&&this.cssTransform({target:this.zoomLayer.firstChild}),this.reset({keepZoomLayer:!0,keepAnnotationLayer:!0,keepAnnotationEditorLayer:!0,keepXfaLayer:!0,keepTextLayer:!0})}cancelRendering({keepAnnotationLayer:Dt=!1,keepAnnotationEditorLayer:qt=!1,keepXfaLayer:vt=!1,keepTextLayer:dl=!1,cancelExtraDelay:ol=0}={}){var il;this.renderTask&&(this.renderTask.cancel(ol),this.renderTask=null),this.resume=null,this.textLayer&&(!dl||!this.textLayer.div)&&(this.textLayer.cancel(),this.textLayer=null),this.structTreeLayer&&!this.textLayer&&(this.structTreeLayer=null),this.annotationLayer&&(!Dt||!this.annotationLayer.div)&&(this.annotationLayer.cancel(),this.annotationLayer=null,this._annotationCanvasMap=null),this.annotationEditorLayer&&(!qt||!this.annotationEditorLayer.div)&&(this.annotationEditorLayer.cancel(),this.annotationEditorLayer=null),this.xfaLayer&&(!vt||!this.xfaLayer.div)&&(this.xfaLayer.cancel(),this.xfaLayer=null,(il=this._textHighlighter)==null||il.disable())}cssTransform({target:Dt,redrawAnnotationLayer:qt=!1,redrawAnnotationEditorLayer:vt=!1,redrawXfaLayer:dl=!1,redrawTextLayer:ol=!1,hideTextLayer:il=!1}){var _t;if(!Dt.hasAttribute("zooming")){Dt.setAttribute("zooming",!0);const{style:wt}=Dt;wt.width=wt.height=""}const Ft=t(this,C).get(Dt);if(this.viewport!==Ft){const wt=this.viewport.rotation-Ft.rotation,pt=Math.abs(wt);let Ct=1,el=1;if(pt===90||pt===270){const{width:cl,height:Ml}=this.viewport;Ct=Ml/cl,el=cl/Ml}Dt.style.transform=`rotate(${wt}deg) scale(${Ct}, ${el})`}qt&&this.annotationLayer&&A(this,u,m).call(this),vt&&this.annotationEditorLayer&&A(this,_,$).call(this),dl&&this.xfaLayer&&A(this,P,Zt).call(this),this.textLayer&&(il?(this.textLayer.hide(),(_t=this.structTreeLayer)==null||_t.hide()):ol&&A(this,dt,It).call(this))}get width(){return this.viewport.width}get height(){return this.viewport.height}getPagePoint(Dt,qt){return this.viewport.convertToPdfPoint(Dt,qt)}draw(){return Sl(this,null,function*(){this.renderingState!==Vt.RenderingStates.INITIAL&&(console.error("Must be in new state before drawing"),this.reset());const{div:Dt,l10n:qt,pageColors:vt,pdfPage:dl,viewport:ol}=this;if(!dl)throw this.renderingState=Vt.RenderingStates.FINISHED,new Error("pdfPage is not loaded");this.renderingState=Vt.RenderingStates.RUNNING;const il=document.createElement("div");if(il.classList.add("canvasWrapper"),Dt.append(il),!this.textLayer&&t(this,I)!==Vt.TextLayerMode.DISABLE&&!dl.isPureXfa&&(this._accessibilityManager||(this._accessibilityManager=new J.TextAccessibilityManager),this.textLayer=new et.TextLayerBuilder({highlighter:this._textHighlighter,accessibilityManager:this._accessibilityManager,isOffscreenCanvasSupported:this.isOffscreenCanvasSupported,enablePermissions:t(this,I)===Vt.TextLayerMode.ENABLE_PERMISSIONS}),Dt.append(this.textLayer.div)),!this.annotationLayer&&t(this,L)!==Ut.AnnotationMode.DISABLE){const{annotationStorage:ot,downloadManager:ut,enableScripting:Tt,fieldObjectsPromise:jt,hasJSActionsPromise:Jt,linkService:Lt}=t(this,q).call(this);this._annotationCanvasMap||(this._annotationCanvasMap=new Map),this.annotationLayer=new Pt.AnnotationLayerBuilder({pageDiv:Dt,pdfPage:dl,annotationStorage:ot,imageResourcesPath:this.imageResourcesPath,renderForms:t(this,L)===Ut.AnnotationMode.ENABLE_FORMS,linkService:Lt,downloadManager:ut,l10n:qt,enableScripting:Tt,hasJSActionsPromise:Jt,fieldObjectsPromise:jt,annotationCanvasMap:this._annotationCanvasMap,accessibilityManager:this._accessibilityManager})}const _t=ot=>{if(el==null||el(!1),this.renderingQueue&&!this.renderingQueue.isHighestPriority(this)){this.renderingState=Vt.RenderingStates.PAUSED,this.resume=()=>{this.renderingState=Vt.RenderingStates.RUNNING,ot()};return}ot()},{width:Ft,height:wt}=ol,pt=document.createElement("canvas");pt.setAttribute("role","presentation"),pt.hidden=!0;const Ct=!!(vt!=null&&vt.background&&vt!=null&&vt.foreground);let el=ot=>{(!Ct||ot)&&(pt.hidden=!1,el=null)};il.append(pt),this.canvas=pt;const cl=pt.getContext("2d",{alpha:!1}),Ml=this.outputScale=new Vt.OutputScale;if(this.maxCanvasPixels===0){const ot=1/this.scale;Ml.sx*=ot,Ml.sy*=ot,Zl(this,g,!0)}else if(this.maxCanvasPixels>0){const ot=Ft*wt,ut=Math.sqrt(this.maxCanvasPixels/ot);Ml.sx>ut||Ml.sy>ut?(Ml.sx=ut,Ml.sy=ut,Zl(this,g,!0)):Zl(this,g,!1)}const Yl=(0,Vt.approximateFraction)(Ml.sx),Xl=(0,Vt.approximateFraction)(Ml.sy);pt.width=(0,Vt.roundToDivide)(Ft*Ml.sx,Yl[0]),pt.height=(0,Vt.roundToDivide)(wt*Ml.sy,Xl[0]);const{style:Tl}=pt;Tl.width=(0,Vt.roundToDivide)(Ft,Yl[1])+"px",Tl.height=(0,Vt.roundToDivide)(wt,Xl[1])+"px",t(this,C).set(pt,ol);const Vl=Ml.scaled?[Ml.sx,0,0,Ml.sy,0,0]:null,Ll={canvasContext:cl,transform:Vl,viewport:ol,annotationMode:t(this,L),optionalContentConfigPromise:this._optionalContentConfigPromise,annotationCanvasMap:this._annotationCanvasMap,pageColors:vt},yl=this.renderTask=this.pdfPage.render(Ll);yl.onContinue=_t;const Qt=yl.promise.then(()=>Sl(this,null,function*(){var ot;if(el==null||el(!0),yield A(this,Gt,Xt).call(this,yl),A(this,dt,It).call(this),this.annotationLayer&&(yield A(this,u,m).call(this)),!this.annotationEditorLayer){const{annotationEditorUIManager:ut}=t(this,q).call(this);if(!ut)return;this.annotationEditorLayer=new Ht.AnnotationEditorLayerBuilder({uiManager:ut,pageDiv:Dt,pdfPage:dl,l10n:qt,accessibilityManager:this._accessibilityManager,annotationLayer:(ot=this.annotationLayer)==null?void 0:ot.annotationLayer})}A(this,_,$).call(this)}),ot=>(ot instanceof Ut.RenderingCancelledException||el==null||el(!0),A(this,Gt,Xt).call(this,yl,ot)));if(dl.isPureXfa){if(this.xfaLayer)this.xfaLayer.div&&Dt.append(this.xfaLayer.div);else{const{annotationStorage:ot,linkService:ut}=t(this,q).call(this);this.xfaLayer=new lt.XfaLayerBuilder({pageDiv:Dt,pdfPage:dl,annotationStorage:ot,linkService:ut})}A(this,P,Zt).call(this)}return Dt.setAttribute("data-loaded",!0),this.eventBus.dispatch("pagerender",{source:this,pageNumber:this.id}),Qt})}setPageLabel(Dt){this.pageLabel=typeof Dt=="string"?Dt:null,this.pageLabel!==null?this.div.setAttribute("data-page-label",this.pageLabel):this.div.removeAttribute("data-page-label")}get thumbnailCanvas(){const{directDrawing:Dt,initialOptionalContent:qt,regularAnnotations:vt}=t(this,k);return Dt&&qt&&vt?this.canvas:null}}L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakSet,K=function(){const{viewport:Ot}=this;if(this.pdfPage){if(t(this,Q)===Ot.rotation)return;Zl(this,Q,Ot.rotation)}(0,Ut.setLayerDimensions)(this.div,Ot,!0,!1)},u=new WeakSet,m=function(){return Sl(this,null,function*(){let Ot=null;try{yield this.annotationLayer.render(this.viewport,"display")}catch(Dt){console.error(`#renderAnnotationLayer: "${Dt}".`),Ot=Dt}finally{this.eventBus.dispatch("annotationlayerrendered",{source:this,pageNumber:this.id,error:Ot})}})},_=new WeakSet,$=function(){return Sl(this,null,function*(){let Ot=null;try{yield this.annotationEditorLayer.render(this.viewport,"display")}catch(Dt){console.error(`#renderAnnotationEditorLayer: "${Dt}".`),Ot=Dt}finally{this.eventBus.dispatch("annotationeditorlayerrendered",{source:this,pageNumber:this.id,error:Ot})}})},P=new WeakSet,Zt=function(){return Sl(this,null,function*(){let Ot=null;try{const Dt=yield this.xfaLayer.render(this.viewport,"display");Dt!=null&&Dt.textDivs&&this._textHighlighter&&A(this,Nt,zt).call(this,Dt.textDivs)}catch(Dt){console.error(`#renderXfaLayer: "${Dt}".`),Ot=Dt}finally{this.eventBus.dispatch("xfalayerrendered",{source:this,pageNumber:this.id,error:Ot})}})},dt=new WeakSet,It=function(){return Sl(this,null,function*(){const{pdfPage:Ot,textLayer:Dt,viewport:qt}=this;if(!Dt)return;let vt=null;try{if(!Dt.renderingDone){const dl=Ot.streamTextContent({includeMarkedContent:!0,disableNormalization:!0});Dt.setTextContentSource(dl)}yield Dt.render(qt)}catch(dl){if(dl instanceof Ut.AbortException)return;console.error(`#renderTextLayer: "${dl}".`),vt=dl}this.eventBus.dispatch("textlayerrendered",{source:this,pageNumber:this.id,numTextDivs:Dt.numTextDivs,error:vt}),A(this,xt,it).call(this)})},xt=new WeakSet,it=function(){return Sl(this,null,function*(){var Ot,Dt,qt;if(!this.textLayer)return;this.structTreeLayer||(this.structTreeLayer=new X.StructTreeLayerBuilder);const vt=yield this.structTreeLayer.renderingDone?null:this.pdfPage.getStructTree(),dl=(Ot=this.structTreeLayer)==null?void 0:Ot.render(vt);dl&&((Dt=this.canvas)==null||Dt.append(dl)),(qt=this.structTreeLayer)==null||qt.show()})},Nt=new WeakSet,zt=function(Ot){return Sl(this,null,function*(){const Dt=yield this.pdfPage.getTextContent(),qt=[];for(const vt of Dt.items)qt.push(vt.str);this._textHighlighter.setTextMapping(Ot,qt),this._textHighlighter.enable()})},Gt=new WeakSet,Xt=function(Ot,Dt=null){return Sl(this,null,function*(){if(Ot===this.renderTask&&(this.renderTask=null),Dt instanceof Ut.RenderingCancelledException){Zl(this,R,null);return}if(Zl(this,R,Dt),this.renderingState=Vt.RenderingStates.FINISHED,this._resetZoomLayer(!0),t(this,k).regularAnnotations=!Ot.separateAnnots,this.eventBus.dispatch("pagerendered",{source:this,pageNumber:this.id,cssTransform:!1,timestamp:performance.now(),error:t(this,R)}),Dt)throw Dt})},O.PDFPageView=gt},(B,O,F)=>{var L,g;Object.defineProperty(O,"__esModule",{value:!0}),O.AnnotationEditorLayerBuilder=void 0;var q=F(4),v=F(7);class Q{constructor(j){E(this,L,null),E(this,g,void 0),this.pageDiv=j.pageDiv,this.pdfPage=j.pdfPage,this.accessibilityManager=j.accessibilityManager,this.l10n=j.l10n||v.NullL10n,this.annotationEditorLayer=null,this.div=null,this._cancelled=!1,Zl(this,g,j.uiManager),Zl(this,L,j.annotationLayer||null)}render(j,I="display"){return Sl(this,null,function*(){if(I!=="display"||this._cancelled)return;const k=j.clone({dontFlip:!0});if(this.div){this.annotationEditorLayer.update({viewport:k}),this.show();return}const C=this.div=document.createElement("div");C.className="annotationEditorLayer",C.tabIndex=0,C.hidden=!0,C.dir=t(this,g).direction,this.pageDiv.append(C),this.annotationEditorLayer=new q.AnnotationEditorLayer({uiManager:t(this,g),div:C,accessibilityManager:this.accessibilityManager,pageIndex:this.pdfPage.pageNumber-1,l10n:this.l10n,viewport:k,annotationLayer:t(this,L)});const U={viewport:k,div:C,annotations:null,intent:I};this.annotationEditorLayer.render(U),this.show()})}cancel(){this._cancelled=!0,this.div&&(this.pageDiv=null,this.annotationEditorLayer.destroy(),this.div.remove())}hide(){this.div&&(this.div.hidden=!0)}show(){!this.div||this.annotationEditorLayer.isEmpty||(this.div.hidden=!1)}}L=new WeakMap,g=new WeakMap,O.AnnotationEditorLayerBuilder=Q},(B,O)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.compatibilityParams=O.OptionKind=O.AppOptions=void 0;const F=Object.create(null);O.compatibilityParams=F;{const Q=navigator.userAgent||"",R=navigator.platform||"",j=navigator.maxTouchPoints||1,I=/Android/.test(Q),k=/\b(iPad|iPhone|iPod)(?=;)/.test(Q)||R==="MacIntel"&&j>1;(function(){(k||I)&&(F.maxCanvasPixels=5242880)})()}const L={VIEWER:2,API:4,WORKER:8,PREFERENCE:128};O.OptionKind=L;const g={annotationEditorMode:{value:0,kind:L.VIEWER+L.PREFERENCE},annotationMode:{value:2,kind:L.VIEWER+L.PREFERENCE},cursorToolOnLoad:{value:0,kind:L.VIEWER+L.PREFERENCE},defaultZoomDelay:{value:400,kind:L.VIEWER+L.PREFERENCE},defaultZoomValue:{value:"",kind:L.VIEWER+L.PREFERENCE},disableHistory:{value:!1,kind:L.VIEWER},disablePageLabels:{value:!1,kind:L.VIEWER+L.PREFERENCE},enablePermissions:{value:!1,kind:L.VIEWER+L.PREFERENCE},enablePrintAutoRotate:{value:!0,kind:L.VIEWER+L.PREFERENCE},enableScripting:{value:!0,kind:L.VIEWER+L.PREFERENCE},enableStampEditor:{value:!0,kind:L.VIEWER+L.PREFERENCE},externalLinkRel:{value:"noopener noreferrer nofollow",kind:L.VIEWER},externalLinkTarget:{value:0,kind:L.VIEWER+L.PREFERENCE},historyUpdateUrl:{value:!1,kind:L.VIEWER+L.PREFERENCE},ignoreDestinationZoom:{value:!1,kind:L.VIEWER+L.PREFERENCE},imageResourcesPath:{value:"./images/",kind:L.VIEWER},maxCanvasPixels:{value:16777216,kind:L.VIEWER},forcePageColors:{value:!1,kind:L.VIEWER+L.PREFERENCE},pageColorsBackground:{value:"Canvas",kind:L.VIEWER+L.PREFERENCE},pageColorsForeground:{value:"CanvasText",kind:L.VIEWER+L.PREFERENCE},pdfBugEnabled:{value:!1,kind:L.VIEWER+L.PREFERENCE},printResolution:{value:150,kind:L.VIEWER},sidebarViewOnLoad:{value:-1,kind:L.VIEWER+L.PREFERENCE},scrollModeOnLoad:{value:-1,kind:L.VIEWER+L.PREFERENCE},spreadModeOnLoad:{value:-1,kind:L.VIEWER+L.PREFERENCE},textLayerMode:{value:1,kind:L.VIEWER+L.PREFERENCE},viewerCssTheme:{value:0,kind:L.VIEWER+L.PREFERENCE},viewOnLoad:{value:0,kind:L.VIEWER+L.PREFERENCE},cMapPacked:{value:!0,kind:L.API},cMapUrl:{value:"../web/cmaps/",kind:L.API},disableAutoFetch:{value:!1,kind:L.API+L.PREFERENCE},disableFontFace:{value:!1,kind:L.API+L.PREFERENCE},disableRange:{value:!1,kind:L.API+L.PREFERENCE},disableStream:{value:!1,kind:L.API+L.PREFERENCE},docBaseUrl:{value:"",kind:L.API},enableXfa:{value:!0,kind:L.API+L.PREFERENCE},fontExtraProperties:{value:!1,kind:L.API},isEvalSupported:{value:!0,kind:L.API},isOffscreenCanvasSupported:{value:!0,kind:L.API},maxImageSize:{value:-1,kind:L.API},pdfBug:{value:!1,kind:L.API},standardFontDataUrl:{value:"../web/standard_fonts/",kind:L.API},verbosity:{value:1,kind:L.API},workerPort:{value:null,kind:L.WORKER},workerSrc:{value:"../build/pdf.worker.js",kind:L.WORKER}};g.defaultUrl={value:"compressed.tracemonkey-pldi-09.pdf",kind:L.VIEWER},g.disablePreferences={value:!1,kind:L.VIEWER},g.locale={value:navigator.language||"en-US",kind:L.VIEWER},g.sandboxBundleSrc={value:"../build/pdf.sandbox.js",kind:L.VIEWER};const q=Object.create(null);class v{constructor(){throw new Error("Cannot initialize AppOptions.")}static get(R){var k;const j=q[R];if(j!==void 0)return j;const I=g[R];if(I!==void 0)return(k=F[R])!=null?k:I.value}static getAll(R=null){var I;const j=Object.create(null);for(const k in g){const C=g[k];if(R){if(!(R&C.kind))continue;if(R===L.PREFERENCE){const K=C.value,u=typeof K;if(u==="boolean"||u==="string"||u==="number"&&Number.isInteger(K)){j[k]=K;continue}throw new Error(`Invalid type for preference: ${k}`)}}const U=q[k];j[k]=U!==void 0?U:(I=F[k])!=null?I:C.value}return j}static set(R,j){q[R]=j}static setAll(R){for(const j in R)q[j]=R[j]}static remove(R){delete q[R]}}O.AppOptions=v,v._hasUserOptions=function(){return Object.keys(q).length>0}},(B,O,F)=>{var L,g,q,v,Q;Object.defineProperty(O,"__esModule",{value:!0}),O.StructTreeLayerBuilder=void 0;var R=F(2);const j={Document:null,DocumentFragment:null,Part:"group",Sect:"group",Div:"group",Aside:"note",NonStruct:"none",P:null,H:"heading",Title:null,FENote:"note",Sub:"group",Lbl:null,Span:null,Em:null,Strong:null,Link:"link",Annot:"note",Form:"form",Ruby:null,RB:null,RT:null,RP:null,Warichu:null,WT:null,WP:null,L:"list",LI:"listitem",LBody:null,Table:"table",TR:"row",TH:"columnheader",TD:"cell",THead:"columnheader",TBody:null,TFoot:null,Caption:null,Figure:"figure",Formula:null,Artifact:null},I=/^H(\d+)$/;class k{constructor(){E(this,g),E(this,v),E(this,L,void 0)}get renderingDone(){return t(this,L)!==void 0}render(U){if(t(this,L)!==void 0)return t(this,L);const K=A(this,v,Q).call(this,U);return K==null||K.classList.add("structTree"),Zl(this,L,K)}hide(){t(this,L)&&!t(this,L).hidden&&(t(this,L).hidden=!0)}show(){var U;(U=t(this,L))!=null&&U.hidden&&(t(this,L).hidden=!1)}}L=new WeakMap,g=new WeakSet,q=function(C,U){const{alt:K,id:u,lang:m}=C;K!==void 0&&U.setAttribute("aria-label",(0,R.removeNullCharacters)(K)),u!==void 0&&U.setAttribute("aria-owns",u),m!==void 0&&U.setAttribute("lang",(0,R.removeNullCharacters)(m,!0))},v=new WeakSet,Q=function(C){if(!C)return null;const U=document.createElement("span");if("role"in C){const{role:K}=C,u=K.match(I);u?(U.setAttribute("role","heading"),U.setAttribute("aria-level",u[1])):j[K]&&U.setAttribute("role",j[K])}if(A(this,g,q).call(this,C,U),C.children)if(C.children.length===1&&"id"in C.children[0])A(this,g,q).call(this,C.children[0],U);else for(const K of C.children)U.append(A(this,v,Q).call(this,K));return U},O.StructTreeLayerBuilder=k},(B,O,F)=>{var L,g,q,v,Q,R,j,I;Object.defineProperty(O,"__esModule",{value:!0}),O.TextAccessibilityManager=void 0;var k=F(2);const C=class ye{constructor(){E(this,j),E(this,L,!1),E(this,g,null),E(this,q,new Map),E(this,v,new Map)}setTextMapping(u){Zl(this,g,u)}enable(){if(t(this,L))throw new Error("TextAccessibilityManager is already enabled.");if(!t(this,g))throw new Error("Text divs and strings have not been set.");if(Zl(this,L,!0),Zl(this,g,t(this,g).slice()),t(this,g).sort(A(ye,Q,R)),t(this,q).size>0){const u=t(this,g);for(const[m,_]of t(this,q)){if(!document.getElementById(m)){t(this,q).delete(m);continue}A(this,j,I).call(this,m,u[_])}}for(const[u,m]of t(this,v))this.addPointerInTextLayer(u,m);t(this,v).clear()}disable(){t(this,L)&&(t(this,v).clear(),Zl(this,g,null),Zl(this,L,!1))}removePointerInTextLayer(u){if(!t(this,L)){t(this,v).delete(u);return}const m=t(this,g);if(!m||m.length===0)return;const{id:_}=u,$=t(this,q).get(_);if($===void 0)return;const P=m[$];t(this,q).delete(_);let Zt=P.getAttribute("aria-owns");Zt!=null&&Zt.includes(_)&&(Zt=Zt.split(" ").filter(dt=>dt!==_).join(" "),Zt?P.setAttribute("aria-owns",Zt):(P.removeAttribute("aria-owns"),P.setAttribute("role","presentation")))}addPointerInTextLayer(u,m){const{id:_}=u;if(!_)return null;if(!t(this,L))return t(this,v).set(u,m),null;m&&this.removePointerInTextLayer(u);const $=t(this,g);if(!$||$.length===0)return null;const P=(0,k.binarySearchFirstItem)($,xt=>{var it;return A(it=ye,Q,R).call(it,u,xt)<0}),Zt=Math.max(0,P-1),dt=$[Zt];A(this,j,I).call(this,_,dt),t(this,q).set(_,Zt);const It=dt.parentNode;return It!=null&&It.classList.contains("markedContent")?It.id:null}moveElementInDOM(u,m,_,$){const P=this.addPointerInTextLayer(_,$);if(!u.hasChildNodes())return u.append(m),P;const Zt=Array.from(u.childNodes).filter(xt=>xt!==m);if(Zt.length===0)return P;const dt=_||m,It=(0,k.binarySearchFirstItem)(Zt,xt=>{var it;return A(it=ye,Q,R).call(it,dt,xt)<0});return It===0?Zt[0].before(m):Zt[It-1].after(m),P}};L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakSet,R=function(K,u){const m=K.getBoundingClientRect(),_=u.getBoundingClientRect();if(m.width===0&&m.height===0)return 1;if(_.width===0&&_.height===0)return-1;const $=m.y,P=m.y+m.height,Zt=m.y+m.height/2,dt=_.y,It=_.y+_.height,xt=_.y+_.height/2;if(Zt<=dt&&xt>=P)return-1;if(xt<=$&&Zt>=It)return 1;const it=m.x+m.width/2,Nt=_.x+_.width/2;return it-Nt},j=new WeakSet,I=function(K,u){const m=u.getAttribute("aria-owns");m!=null&&m.includes(K)||u.setAttribute("aria-owns",m?`${m} ${K}`:K),u.removeAttribute("role")},E(C,Q);let U=C;O.TextAccessibilityManager=U},(B,O)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.TextHighlighter=void 0;class F{constructor({findController:g,eventBus:q,pageIndex:v}){this.findController=g,this.matches=[],this.eventBus=q,this.pageIdx=v,this._onUpdateTextLayerMatches=null,this.textDivs=null,this.textContentItemsStr=null,this.enabled=!1}setTextMapping(g,q){this.textDivs=g,this.textContentItemsStr=q}enable(){if(!this.textDivs||!this.textContentItemsStr)throw new Error("Text divs and strings have not been set.");if(this.enabled)throw new Error("TextHighlighter is already enabled.");this.enabled=!0,this._onUpdateTextLayerMatches||(this._onUpdateTextLayerMatches=g=>{(g.pageIndex===this.pageIdx||g.pageIndex===-1)&&this._updateMatches()},this.eventBus._on("updatetextlayermatches",this._onUpdateTextLayerMatches)),this._updateMatches()}disable(){this.enabled&&(this.enabled=!1,this._onUpdateTextLayerMatches&&(this.eventBus._off("updatetextlayermatches",this._onUpdateTextLayerMatches),this._onUpdateTextLayerMatches=null),this._updateMatches(!0))}_convertMatches(g,q){if(!g)return[];const{textContentItemsStr:v}=this;let Q=0,R=0;const j=v.length-1,I=[];for(let k=0,C=g.length;k<C;k++){let U=g[k];for(;Q!==j&&U>=R+v[Q].length;)R+=v[Q].length,Q++;Q===v.length&&console.error("Could not find a matching mapping");const K={begin:{divIdx:Q,offset:U-R}};for(U+=q[k];Q!==j&&U>R+v[Q].length;)R+=v[Q].length,Q++;K.end={divIdx:Q,offset:U-R},I.push(K)}return I}_renderMatches(g){if(g.length===0)return;const{findController:q,pageIdx:v}=this,{textContentItemsStr:Q,textDivs:R}=this,j=v===q.selected.pageIdx,I=q.selected.matchIdx,k=q.state.highlightAll;let C=null;const U={divIdx:-1,offset:void 0};function K(Zt,dt){const It=Zt.divIdx;return R[It].textContent="",u(It,0,Zt.offset,dt)}function u(Zt,dt,It,xt){let it=R[Zt];if(it.nodeType===Node.TEXT_NODE){const Gt=document.createElement("span");it.before(Gt),Gt.append(it),R[Zt]=Gt,it=Gt}const Nt=Q[Zt].substring(dt,It),zt=document.createTextNode(Nt);if(xt){const Gt=document.createElement("span");return Gt.className=`${xt} appended`,Gt.append(zt),it.append(Gt),xt.includes("selected")?Gt.offsetLeft:0}return it.append(zt),0}let m=I,_=m+1;if(k)m=0,_=g.length;else if(!j)return;let $=-1,P=-1;for(let Zt=m;Zt<_;Zt++){const dt=g[Zt],It=dt.begin;if(It.divIdx===$&&It.offset===P)continue;$=It.divIdx,P=It.offset;const xt=dt.end,it=j&&Zt===I,Nt=it?" selected":"";let zt=0;if(!C||It.divIdx!==C.divIdx?(C!==null&&u(C.divIdx,C.offset,U.offset),K(It)):u(C.divIdx,C.offset,It.offset),It.divIdx===xt.divIdx)zt=u(It.divIdx,It.offset,xt.offset,"highlight"+Nt);else{zt=u(It.divIdx,It.offset,U.offset,"highlight begin"+Nt);for(let Gt=It.divIdx+1,Xt=xt.divIdx;Gt<Xt;Gt++)R[Gt].className="highlight middle"+Nt;K(xt,"highlight end"+Nt)}C=xt,it&&q.scrollMatchIntoView({element:R[It.divIdx],selectedLeft:zt,pageIndex:v,matchIndex:I})}C&&u(C.divIdx,C.offset,U.offset)}_updateMatches(g=!1){if(!this.enabled&&!g)return;const{findController:q,matches:v,pageIdx:Q}=this,{textContentItemsStr:R,textDivs:j}=this;let I=-1;for(const U of v){const K=Math.max(I,U.begin.divIdx);for(let u=K,m=U.end.divIdx;u<=m;u++){const _=j[u];_.textContent=R[u],_.className=""}I=U.end.divIdx+1}if(!(q!=null&&q.highlightMatches)||g)return;const k=q.pageMatches[Q]||null,C=q.pageMatchesLength[Q]||null;this.matches=this._convertMatches(k,C),this._renderMatches(this.matches)}}O.TextHighlighter=F},(B,O,F)=>{var L,g,q,v,Q,R,j,I;Object.defineProperty(O,"__esModule",{value:!0}),O.TextLayerBuilder=void 0;var k=F(4),C=F(2);class U{constructor({highlighter:u=null,accessibilityManager:m=null,isOffscreenCanvasSupported:_=!0,enablePermissions:$=!1}){E(this,Q),E(this,j),E(this,L,!1),E(this,g,0),E(this,q,0),E(this,v,null),this.textContentItemsStr=[],this.renderingDone=!1,this.textDivs=[],this.textDivProperties=new WeakMap,this.textLayerRenderTask=null,this.highlighter=u,this.accessibilityManager=m,this.isOffscreenCanvasSupported=_,Zl(this,L,$===!0),this.div=document.createElement("div"),this.div.className="textLayer",this.hide()}get numTextDivs(){return this.textDivs.length}render(u){return Sl(this,null,function*(){var m,_,$;if(!t(this,v))throw new Error('No "textContentSource" parameter specified.');const P=u.scale*(globalThis.devicePixelRatio||1),{rotation:Zt}=u;if(this.renderingDone){const dt=Zt!==t(this,g),It=P!==t(this,q);(dt||It)&&(this.hide(),(0,k.updateTextLayer)({container:this.div,viewport:u,textDivs:this.textDivs,textDivProperties:this.textDivProperties,isOffscreenCanvasSupported:this.isOffscreenCanvasSupported,mustRescale:It,mustRotate:dt}),Zl(this,q,P),Zl(this,g,Zt)),this.show();return}this.cancel(),(m=this.highlighter)==null||m.setTextMapping(this.textDivs,this.textContentItemsStr),(_=this.accessibilityManager)==null||_.setTextMapping(this.textDivs),this.textLayerRenderTask=(0,k.renderTextLayer)({textContentSource:t(this,v),container:this.div,viewport:u,textDivs:this.textDivs,textDivProperties:this.textDivProperties,textContentItemsStr:this.textContentItemsStr,isOffscreenCanvasSupported:this.isOffscreenCanvasSupported}),yield this.textLayerRenderTask.promise,A(this,Q,R).call(this),Zl(this,q,P),Zl(this,g,Zt),this.show(),($=this.accessibilityManager)==null||$.enable()})}hide(){var u;this.div.hidden||((u=this.highlighter)==null||u.disable(),this.div.hidden=!0)}show(){var u;this.div.hidden&&this.renderingDone&&(this.div.hidden=!1,(u=this.highlighter)==null||u.enable())}cancel(){var u,m;this.textLayerRenderTask&&(this.textLayerRenderTask.cancel(),this.textLayerRenderTask=null),(u=this.highlighter)==null||u.disable(),(m=this.accessibilityManager)==null||m.disable(),this.textContentItemsStr.length=0,this.textDivs.length=0,this.textDivProperties=new WeakMap}setTextContentSource(u){this.cancel(),Zl(this,v,u)}}L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakSet,R=function(){this.renderingDone=!0;const K=document.createElement("div");K.className="endOfContent",this.div.append(K),A(this,j,I).call(this)},j=new WeakSet,I=function(){const{div:K}=this;K.addEventListener("mousedown",u=>{const m=K.querySelector(".endOfContent");if(!m)return;let _=u.target!==K;if(_&&(_=getComputedStyle(m).getPropertyValue("-moz-user-select")!=="none"),_){const $=K.getBoundingClientRect(),P=Math.max(0,(u.pageY-$.top)/$.height);m.style.top=(P*100).toFixed(2)+"%"}m.classList.add("active")}),K.addEventListener("mouseup",()=>{const u=K.querySelector(".endOfContent");u&&(u.style.top="",u.classList.remove("active"))}),K.addEventListener("copy",u=>{if(!t(this,L)){const m=document.getSelection();u.clipboardData.setData("text/plain",(0,C.removeNullCharacters)((0,k.normalizeUnicode)(m.toString())))}u.preventDefault(),u.stopPropagation()})},O.TextLayerBuilder=U},(B,O,F)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.XfaLayerBuilder=void 0;var L=F(4);class g{constructor({pageDiv:v,pdfPage:Q,annotationStorage:R=null,linkService:j,xfaHtml:I=null}){this.pageDiv=v,this.pdfPage=Q,this.annotationStorage=R,this.linkService=j,this.xfaHtml=I,this.div=null,this._cancelled=!1}render(v,Q="display"){return Sl(this,null,function*(){if(Q==="print"){const I={viewport:v.clone({dontFlip:!0}),div:this.div,xfaHtml:this.xfaHtml,annotationStorage:this.annotationStorage,linkService:this.linkService,intent:Q},k=document.createElement("div");return this.pageDiv.append(k),I.div=k,L.XfaLayer.render(I)}const R=yield this.pdfPage.getXfa();if(this._cancelled||!R)return{textDivs:[]};const j={viewport:v.clone({dontFlip:!0}),div:this.div,xfaHtml:R,annotationStorage:this.annotationStorage,linkService:this.linkService,intent:Q};return this.div?L.XfaLayer.update(j):(this.div=document.createElement("div"),this.pageDiv.append(this.div),j.div=this.div,L.XfaLayer.render(j))})}cancel(){this._cancelled=!0}hide(){this.div&&(this.div.hidden=!0)}}O.XfaLayerBuilder=g},(B,O,F)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.PDFScriptingManager=void 0;var L=F(22),g=F(23);class q extends g.PDFScriptingManager{constructor(Q){Q.externalServices||window.addEventListener("updatefromsandbox",R=>{Q.eventBus.dispatch("updatefromsandbox",{source:window,detail:R.detail})}),Q.externalServices||(Q.externalServices={createScripting:({sandboxBundleSrc:R})=>new L.GenericScripting(R)}),Q.docProperties||(Q.docProperties=R=>(0,L.docProperties)(R)),super(Q)}}O.PDFScriptingManager=q},(B,O,F)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.GenericScripting=void 0,O.docProperties=g;var L=F(4);function g(v){return Sl(this,null,function*(){const Q="",R=Q.split("#")[0];let{info:j,metadata:I,contentDispositionFilename:k,contentLength:C}=yield v.getMetadata();if(!C){const{length:U}=yield v.getDownloadInfo();C=U}return vl(El({},j),{baseURL:R,filesize:C,filename:k||(0,L.getPdfFilenameFromUrl)(Q),metadata:I==null?void 0:I.getRaw(),authors:I==null?void 0:I.get("dc:creator"),numPages:v.numPages,URL:Q})})}class q{constructor(Q){this._ready=(0,L.loadScript)(Q,!0).then(()=>window.pdfjsSandbox.QuickJSSandbox())}createSandbox(Q){return Sl(this,null,function*(){(yield this._ready).create(Q)})}dispatchEventInSandbox(Q){return Sl(this,null,function*(){const R=yield this._ready;setTimeout(()=>R.dispatchEvent(Q),0)})}destroySandbox(){return Sl(this,null,function*(){(yield this._ready).nukeSandbox()})}}O.GenericScripting=q},(B,O,F)=>{var L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt;Object.defineProperty(O,"__esModule",{value:!0}),O.PDFScriptingManager=void 0;var it=F(2),Nt=F(4);class zt{constructor({eventBus:Xt,sandboxBundleSrc:Ut=null,externalServices:Vt=null,docProperties:Ht=null}){E(this,K),E(this,m),E(this,$),E(this,Zt),E(this,It),E(this,L,null),E(this,g,null),E(this,q,null),E(this,v,null),E(this,Q,null),E(this,R,null),E(this,j,null),E(this,I,!1),E(this,k,null),E(this,C,null),E(this,U,null),Zl(this,v,Xt),Zl(this,k,Ut),Zl(this,Q,Vt),Zl(this,q,Ht)}setViewer(Xt){Zl(this,j,Xt)}setDocument(Xt){return Sl(this,null,function*(){var Ut;if(t(this,R)&&(yield A(this,It,xt).call(this)),Zl(this,R,Xt),!Xt)return;const[Vt,Ht,Pt]=yield Promise.all([Xt.getFieldObjects(),Xt.getCalculationOrderIds(),Xt.getJSActions()]);if(!Vt&&!Pt){yield A(this,It,xt).call(this);return}if(Xt===t(this,R)){try{Zl(this,C,A(this,Zt,dt).call(this))}catch(at){console.error(`setDocument: "${at.message}".`),yield A(this,It,xt).call(this);return}this._internalEvents.set("updatefromsandbox",at=>{(at==null?void 0:at.source)===window&&A(this,K,u).call(this,at.detail)}),this._internalEvents.set("dispatcheventinsandbox",at=>{var S;(S=t(this,C))==null||S.dispatchEventInSandbox(at.detail)}),this._internalEvents.set("pagechanging",({pageNumber:at,previous:S})=>{at!==S&&(A(this,$,P).call(this,S),A(this,m,_).call(this,at))}),this._internalEvents.set("pagerendered",({pageNumber:at})=>{this._pageOpenPending.has(at)&&at===t(this,j).currentPageNumber&&A(this,m,_).call(this,at)}),this._internalEvents.set("pagesdestroy",()=>Sl(this,null,function*(){var at,S;yield A(this,$,P).call(this,t(this,j).currentPageNumber),yield(at=t(this,C))==null?void 0:at.dispatchEventInSandbox({id:"doc",name:"WillClose"}),(S=t(this,L))==null||S.resolve()}));for(const[at,S]of this._internalEvents)t(this,v)._on(at,S);try{const at=yield t(this,q).call(this,Xt);if(Xt!==t(this,R))return;yield t(this,C).createSandbox({objects:Vt,calculationOrder:Ht,appInfo:{platform:navigator.platform,language:navigator.language},docInfo:vl(El({},at),{actions:Pt})}),t(this,v).dispatch("sandboxcreated",{source:this})}catch(at){console.error(`setDocument: "${at.message}".`),yield A(this,It,xt).call(this);return}yield(Ut=t(this,C))==null?void 0:Ut.dispatchEventInSandbox({id:"doc",name:"Open"}),yield A(this,m,_).call(this,t(this,j).currentPageNumber,!0),Promise.resolve().then(()=>{Xt===t(this,R)&&Zl(this,I,!0)})}})}dispatchWillSave(){return Sl(this,null,function*(){var Xt;return(Xt=t(this,C))==null?void 0:Xt.dispatchEventInSandbox({id:"doc",name:"WillSave"})})}dispatchDidSave(){return Sl(this,null,function*(){var Xt;return(Xt=t(this,C))==null?void 0:Xt.dispatchEventInSandbox({id:"doc",name:"DidSave"})})}dispatchWillPrint(){return Sl(this,null,function*(){var Xt;if(t(this,C)){yield(Xt=t(this,U))==null?void 0:Xt.promise,Zl(this,U,new Nt.PromiseCapability);try{yield t(this,C).dispatchEventInSandbox({id:"doc",name:"WillPrint"})}catch(Ut){throw t(this,U).resolve(),Zl(this,U,null),Ut}yield t(this,U).promise}})}dispatchDidPrint(){return Sl(this,null,function*(){var Xt;return(Xt=t(this,C))==null?void 0:Xt.dispatchEventInSandbox({id:"doc",name:"DidPrint"})})}get destroyPromise(){var Xt;return((Xt=t(this,g))==null?void 0:Xt.promise)||null}get ready(){return t(this,I)}get _internalEvents(){return(0,Nt.shadow)(this,"_internalEvents",new Map)}get _pageOpenPending(){return(0,Nt.shadow)(this,"_pageOpenPending",new Set)}get _visitedPages(){return(0,Nt.shadow)(this,"_visitedPages",new Map)}}L=new WeakMap,g=new WeakMap,q=new WeakMap,v=new WeakMap,Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakMap,K=new WeakSet,u=function(Gt){return Sl(this,null,function*(){var Xt,Ut;const Vt=t(this,j),Ht=Vt.isInPresentationMode||Vt.isChangingPresentationMode,{id:Pt,siblings:at,command:S,value:w}=Gt;if(!Pt){switch(S){case"clear":console.clear();break;case"error":console.error(w);break;case"layout":if(!Ht){const J=(0,it.apiPageLayoutToViewerModes)(w);Vt.spreadMode=J.spreadMode}break;case"page-num":Vt.currentPageNumber=w+1;break;case"print":yield Vt.pagesPromise,t(this,v).dispatch("print",{source:this});break;case"println":console.log(w);break;case"zoom":Ht||(Vt.currentScaleValue=w);break;case"SaveAs":t(this,v).dispatch("download",{source:this});break;case"FirstPage":Vt.currentPageNumber=1;break;case"LastPage":Vt.currentPageNumber=Vt.pagesCount;break;case"NextPage":Vt.nextPage();break;case"PrevPage":Vt.previousPage();break;case"ZoomViewIn":Ht||Vt.increaseScale();break;case"ZoomViewOut":Ht||Vt.decreaseScale();break;case"WillPrintFinished":(Xt=t(this,U))==null||Xt.resolve(),Zl(this,U,null);break}return}if(Ht&&Gt.focus)return;delete Gt.id,delete Gt.siblings;const X=at?[Pt,...at]:[Pt];for(const J of X){const H=document.querySelector(`[data-element-id="${J}"]`);H?H.dispatchEvent(new CustomEvent("updatefromsandbox",{detail:Gt})):(Ut=t(this,R))==null||Ut.annotationStorage.setValue(J,Gt)}})},m=new WeakSet,_=function(Gt,Xt=!1){return Sl(this,null,function*(){const Ut=t(this,R),Vt=this._visitedPages;if(Xt&&Zl(this,L,new Nt.PromiseCapability),!t(this,L))return;const Ht=t(this,j).getPageView(Gt-1);if((Ht==null?void 0:Ht.renderingState)!==it.RenderingStates.FINISHED){this._pageOpenPending.add(Gt);return}this._pageOpenPending.delete(Gt);const Pt=Sl(this,null,function*(){var at,S;const w=yield Vt.has(Gt)?null:(at=Ht.pdfPage)==null?void 0:at.getJSActions();Ut===t(this,R)&&(yield(S=t(this,C))==null?void 0:S.dispatchEventInSandbox({id:"page",name:"PageOpen",pageNumber:Gt,actions:w}))});Vt.set(Gt,Pt)})},$=new WeakSet,P=function(Gt){return Sl(this,null,function*(){var Xt;const Ut=t(this,R),Vt=this._visitedPages;if(!t(this,L)||this._pageOpenPending.has(Gt))return;const Ht=Vt.get(Gt);Ht&&(Vt.set(Gt,null),yield Ht,Ut===t(this,R)&&(yield(Xt=t(this,C))==null?void 0:Xt.dispatchEventInSandbox({id:"page",name:"PageClose",pageNumber:Gt})))})},Zt=new WeakSet,dt=function(){if(Zl(this,g,new Nt.PromiseCapability),t(this,C))throw new Error("#initScripting: Scripting already exists.");return t(this,Q).createScripting({sandboxBundleSrc:t(this,k)})},It=new WeakSet,xt=function(){return Sl(this,null,function*(){var Gt,Xt,Ut;if(!t(this,C)){Zl(this,R,null),(Gt=t(this,g))==null||Gt.resolve();return}t(this,L)&&(yield Promise.race([t(this,L).promise,new Promise(Vt=>{setTimeout(Vt,1e3)})]).catch(()=>{}),Zl(this,L,null)),Zl(this,R,null);try{yield t(this,C).destroySandbox()}catch(Vt){}(Xt=t(this,U))==null||Xt.reject(new Error("Scripting destroyed.")),Zl(this,U,null);for(const[Vt,Ht]of this._internalEvents)t(this,v)._off(Vt,Ht);this._internalEvents.clear(),this._pageOpenPending.clear(),this._visitedPages.clear(),Zl(this,C,null),Zl(this,I,!1),(Ut=t(this,g))==null||Ut.resolve()})},O.PDFScriptingManager=zt},(B,O,F)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.PDFSinglePageViewer=void 0;var L=F(2),g=F(25);class q extends g.PDFViewer{_resetView(){super._resetView(),this._scrollMode=L.ScrollMode.PAGE,this._spreadMode=L.SpreadMode.NONE}set scrollMode(Q){}_updateScrollMode(){}set spreadMode(Q){}_updateSpreadMode(){}}O.PDFSinglePageViewer=q},(B,O,F)=>{var L,g,q,v,Q,R,j,I,k,C,U,K,u,m,_,$,P,Zt,dt,It,xt,it,Nt,zt,Gt,Xt,Ut,Vt,Ht,Pt,at,S,w,X,J,H,et,lt,Mt,Rt,gt,Ot,Dt,qt,vt,dl,ol,il,_t,Ft,wt;Object.defineProperty(O,"__esModule",{value:!0}),O.PagesCountLimit=O.PDFViewer=O.PDFPageViewBuffer=void 0;var pt=F(4),Ct=F(2),el=F(7),cl=F(13),Ml=F(26),Yl=F(5);const Xl=10,Tl={FORCE_SCROLL_MODE_PAGE:15e3,FORCE_LAZY_PAGE_INIT:7500,PAUSE_EAGER_PAGE_INIT:250};O.PagesCountLimit=Tl;function Vl(Qt){return Object.values(pt.AnnotationEditorType).includes(Qt)&&Qt!==pt.AnnotationEditorType.DISABLE}class Ll{constructor(ot){E(this,q),E(this,L,new Set),E(this,g,0),Zl(this,g,ot)}push(ot){const ut=t(this,L);ut.has(ot)&&ut.delete(ot),ut.add(ot),ut.size>t(this,g)&&A(this,q,v).call(this)}resize(ot,ut=null){Zl(this,g,ot);const Tt=t(this,L);if(ut){const jt=Tt.size;let Jt=1;for(const Lt of Tt)if(ut.has(Lt.id)&&(Tt.delete(Lt),Tt.add(Lt)),++Jt>jt)break}for(;Tt.size>t(this,g);)A(this,q,v).call(this)}has(ot){return t(this,L).has(ot)}[Symbol.iterator](){return t(this,L).keys()}}L=new WeakMap,g=new WeakMap,q=new WeakSet,v=function(){const Qt=t(this,L).keys().next().value;Qt==null||Qt.destroy(),t(this,L).delete(Qt)},O.PDFPageViewBuffer=Ll;class yl{constructor(ot){var Jt,Lt,Yt,Kt;E(this,it),E(this,zt),E(this,Xt),E(this,Vt),E(this,Pt),E(this,S),E(this,X),E(this,H),E(this,lt),E(this,Rt),E(this,Ot),E(this,qt),E(this,dl),E(this,il),E(this,Ft),E(this,Q,null),E(this,R,null),E(this,j,pt.AnnotationEditorType.NONE),E(this,I,null),E(this,k,pt.AnnotationMode.ENABLE_FORMS),E(this,C,null),E(this,U,null),E(this,K,!1),E(this,u,!1),E(this,m,null),E(this,_,!1),E(this,$,0),E(this,P,new ResizeObserver(A(this,Ft,wt).bind(this))),E(this,Zt,null),E(this,dt,null),E(this,It,null),E(this,xt,Ct.TextLayerMode.ENABLE);var ut,Tt;const jt="3.11.174";if(pt.version!==jt)throw new Error(`The API version "${pt.version}" does not match the Viewer version "${jt}".`);if(this.container=ot.container,this.viewer=ot.viewer||ot.container.firstElementChild,((ut=this.container)==null?void 0:ut.tagName)!=="DIV"||((Tt=this.viewer)==null?void 0:Tt.tagName)!=="DIV")throw new Error("Invalid `container` and/or `viewer` option.");if(this.container.offsetParent&&getComputedStyle(this.container).position!=="absolute")throw new Error("The `container` must be absolutely positioned.");t(this,P).observe(this.container),this.eventBus=ot.eventBus,this.linkService=ot.linkService||new Yl.SimpleLinkService,this.downloadManager=ot.downloadManager||null,this.findController=ot.findController||null,Zl(this,R,ot.altTextManager||null),this.findController&&(this.findController.onIsPageVisible=$t=>this._getVisiblePages().ids.has($t)),this._scriptingManager=ot.scriptingManager||null,Zl(this,xt,(Jt=ot.textLayerMode)!=null?Jt:Ct.TextLayerMode.ENABLE),Zl(this,k,(Lt=ot.annotationMode)!=null?Lt:pt.AnnotationMode.ENABLE_FORMS),Zl(this,j,(Yt=ot.annotationEditorMode)!=null?Yt:pt.AnnotationEditorType.NONE),this.imageResourcesPath=ot.imageResourcesPath||"",this.enablePrintAutoRotate=ot.enablePrintAutoRotate||!1,this.removePageBorders=ot.removePageBorders||!1,ot.useOnlyCssZoom&&(console.error("useOnlyCssZoom was removed, please use `maxCanvasPixels = 0` instead."),ot.maxCanvasPixels=0),this.isOffscreenCanvasSupported=(Kt=ot.isOffscreenCanvasSupported)!=null?Kt:!0,this.maxCanvasPixels=ot.maxCanvasPixels,this.l10n=ot.l10n||el.NullL10n,Zl(this,K,ot.enablePermissions||!1),this.pageColors=ot.pageColors||null,this.defaultRenderingQueue=!ot.renderingQueue,this.defaultRenderingQueue?(this.renderingQueue=new Ml.PDFRenderingQueue,this.renderingQueue.setViewer(this)):this.renderingQueue=ot.renderingQueue,this.scroll=(0,Ct.watchScroll)(this.container,this._scrollUpdate.bind(this)),this.presentationModeState=Ct.PresentationModeState.UNKNOWN,this._onBeforeDraw=this._onAfterDraw=null,this._resetView(),this.removePageBorders&&this.viewer.classList.add("removePageBorders"),A(this,il,_t).call(this),this.eventBus._on("thumbnailrendered",({pageNumber:$t,pdfPage:tl})=>{const bl=this._pages[$t-1];t(this,Q).has(bl)||tl==null||tl.cleanup()})}get pagesCount(){return this._pages.length}getPageView(ot){return this._pages[ot]}getCachedPageViews(){return new Set(t(this,Q))}get pageViewsReady(){return this._pagesCapability.settled&&this._pages.every(ot=>ot==null?void 0:ot.pdfPage)}get renderForms(){return t(this,k)===pt.AnnotationMode.ENABLE_FORMS}get enableScripting(){return!!this._scriptingManager}get currentPageNumber(){return this._currentPageNumber}set currentPageNumber(ot){if(!Number.isInteger(ot))throw new Error("Invalid page number.");this.pdfDocument&&(this._setCurrentPageNumber(ot,!0)||console.error(`currentPageNumber: "${ot}" is not a valid page.`))}_setCurrentPageNumber(ot,ut=!1){var Jt;var Tt;if(this._currentPageNumber===ot)return ut&&A(this,Ot,Dt).call(this),!0;if(!(0<ot&&ot<=this.pagesCount))return!1;const jt=this._currentPageNumber;return this._currentPageNumber=ot,this.eventBus.dispatch("pagechanging",{source:this,pageNumber:ot,pageLabel:(Jt=(Tt=this._pageLabels)==null?void 0:Tt[ot-1])!=null?Jt:null,previous:jt}),ut&&A(this,Ot,Dt).call(this),!0}get currentPageLabel(){var ut;var ot;return(ut=(ot=this._pageLabels)==null?void 0:ot[this._currentPageNumber-1])!=null?ut:null}set currentPageLabel(ot){if(!this.pdfDocument)return;let ut=ot|0;if(this._pageLabels){const Tt=this._pageLabels.indexOf(ot);Tt>=0&&(ut=Tt+1)}this._setCurrentPageNumber(ut,!0)||console.error(`currentPageLabel: "${ot}" is not a valid page.`)}get currentScale(){return this._currentScale!==Ct.UNKNOWN_SCALE?this._currentScale:Ct.DEFAULT_SCALE}set currentScale(ot){if(isNaN(ot))throw new Error("Invalid numeric scale.");this.pdfDocument&&A(this,Rt,gt).call(this,ot,{noScroll:!1})}get currentScaleValue(){return this._currentScaleValue}set currentScaleValue(ot){this.pdfDocument&&A(this,Rt,gt).call(this,ot,{noScroll:!1})}get pagesRotation(){return this._pagesRotation}set pagesRotation(ot){if(!(0,Ct.isValidRotation)(ot))throw new Error("Invalid pages rotation angle.");if(!this.pdfDocument||(ot%=360,ot<0&&(ot+=360),this._pagesRotation===ot))return;this._pagesRotation=ot;const ut=this._currentPageNumber;this.refresh(!0,{rotation:ot}),this._currentScaleValue&&A(this,Rt,gt).call(this,this._currentScaleValue,{noScroll:!0}),this.eventBus.dispatch("rotationchanging",{source:this,pagesRotation:ot,pageNumber:ut}),this.defaultRenderingQueue&&this.update()}get firstPagePromise(){return this.pdfDocument?this._firstPageCapability.promise:null}get onePageRendered(){return this.pdfDocument?this._onePageRenderedCapability.promise:null}get pagesPromise(){return this.pdfDocument?this._pagesCapability.promise:null}getAllText(){return Sl(this,null,function*(){const ot=[],ut=[];for(let Tt=1,jt=this.pdfDocument.numPages;Tt<=jt;++Tt){if(t(this,_))return null;ut.length=0;const Jt=yield this.pdfDocument.getPage(Tt),{items:Lt}=yield Jt.getTextContent();for(const Yt of Lt)Yt.str&&ut.push(Yt.str),Yt.hasEOL&&ut.push(`
|
||
`);ot.push((0,Ct.removeNullCharacters)(ut.join("")))}return ot.join(`
|
||
`)})}setDocument(ot){var ut,Tt;if(this.pdfDocument&&(this.eventBus.dispatch("pagesdestroy",{source:this}),this._cancelRendering(),this._resetView(),(ut=this.findController)==null||ut.setDocument(null),(Tt=this._scriptingManager)==null||Tt.setDocument(null),t(this,I)&&(t(this,I).destroy(),Zl(this,I,null))),this.pdfDocument=ot,!ot)return;const jt=ot.numPages,Jt=ot.getPage(1),Lt=ot.getOptionalContentConfig(),Yt=t(this,K)?ot.getPermissions():Promise.resolve();if(jt>Tl.FORCE_SCROLL_MODE_PAGE){console.warn("Forcing PAGE-scrolling for performance reasons, given the length of the document.");const Kt=this._scrollMode=Ct.ScrollMode.PAGE;this.eventBus.dispatch("scrollmodechanged",{source:this,mode:Kt})}this._pagesCapability.promise.then(()=>{this.eventBus.dispatch("pagesloaded",{source:this,pagesCount:jt})},()=>{}),this._onBeforeDraw=Kt=>{const $t=this._pages[Kt.pageNumber-1];$t&&t(this,Q).push($t)},this.eventBus._on("pagerender",this._onBeforeDraw),this._onAfterDraw=Kt=>{Kt.cssTransform||this._onePageRenderedCapability.settled||(this._onePageRenderedCapability.resolve({timestamp:Kt.timestamp}),this.eventBus._off("pagerendered",this._onAfterDraw),this._onAfterDraw=null,t(this,dt)&&(document.removeEventListener("visibilitychange",t(this,dt)),Zl(this,dt,null)))},this.eventBus._on("pagerendered",this._onAfterDraw),Promise.all([Jt,Yt]).then(([Kt,$t])=>{var tl,bl;if(ot!==this.pdfDocument)return;this._firstPageCapability.resolve(Kt),this._optionalContentConfigPromise=Lt;const{annotationEditorMode:Bt,annotationMode:rl,textLayerMode:hl}=A(this,zt,Gt).call(this,$t);if(hl!==Ct.TextLayerMode.DISABLE){const Wt=Zl(this,m,document.createElement("div"));Wt.id="hiddenCopyElement",this.viewer.before(Wt)}if(Bt!==pt.AnnotationEditorType.DISABLE){const Wt=Bt;ot.isPureXfa?console.warn("Warning: XFA-editing is not implemented."):Vl(Wt)?(Zl(this,I,new pt.AnnotationEditorUIManager(this.container,this.viewer,t(this,R),this.eventBus,ot,this.pageColors)),Wt!==pt.AnnotationEditorType.NONE&&t(this,I).updateMode(Wt)):console.error(`Invalid AnnotationEditor mode: ${Wt}`)}const Il=A(this,it,Nt).bind(this),Wl=this._scrollMode===Ct.ScrollMode.PAGE?null:this.viewer,nt=this.currentScale,T=Kt.getViewport({scale:nt*pt.PixelsPerInch.PDF_TO_CSS_UNITS});this.viewer.style.setProperty("--scale-factor",T.scale),(((tl=this.pageColors)==null?void 0:tl.foreground)==="CanvasText"||((bl=this.pageColors)==null?void 0:bl.background)==="Canvas")&&this.viewer.style.setProperty("--hcm-highligh-filter",ot.filterFactory.addHighlightHCMFilter("CanvasText","Canvas","HighlightText","Highlight"));for(let Wt=1;Wt<=jt;++Wt){const yt=new cl.PDFPageView({container:Wl,eventBus:this.eventBus,id:Wt,scale:nt,defaultViewport:T.clone(),optionalContentConfigPromise:Lt,renderingQueue:this.renderingQueue,textLayerMode:hl,annotationMode:rl,imageResourcesPath:this.imageResourcesPath,isOffscreenCanvasSupported:this.isOffscreenCanvasSupported,maxCanvasPixels:this.maxCanvasPixels,pageColors:this.pageColors,l10n:this.l10n,layerProperties:Il});this._pages.push(yt)}const ct=this._pages[0];ct&&(ct.setPdfPage(Kt),this.linkService.cachePageRef(1,Kt.ref)),this._scrollMode===Ct.ScrollMode.PAGE?A(this,Pt,at).call(this):this._spreadMode!==Ct.SpreadMode.NONE&&this._updateSpreadMode(),A(this,Xt,Ut).call(this).then(()=>Sl(this,null,function*(){var Wt,yt;if((Wt=this.findController)==null||Wt.setDocument(ot),(yt=this._scriptingManager)==null||yt.setDocument(ot),t(this,m)&&(Zl(this,U,A(this,Vt,Ht).bind(this,hl)),document.addEventListener("copy",t(this,U))),t(this,I)&&this.eventBus.dispatch("annotationeditormodechanged",{source:this,mode:t(this,j)}),ot.loadingParams.disableAutoFetch||jt>Tl.FORCE_LAZY_PAGE_INIT){this._pagesCapability.resolve();return}let kt=jt-1;if(kt<=0){this._pagesCapability.resolve();return}for(let Et=2;Et<=jt;++Et){const sl=ot.getPage(Et).then(ml=>{const al=this._pages[Et-1];al.pdfPage||al.setPdfPage(ml),this.linkService.cachePageRef(Et,ml.ref),--kt===0&&this._pagesCapability.resolve()},ml=>{console.error(`Unable to get page ${Et} to initialize viewer`,ml),--kt===0&&this._pagesCapability.resolve()});Et%Tl.PAUSE_EAGER_PAGE_INIT===0&&(yield sl)}})),this.eventBus.dispatch("pagesinit",{source:this}),ot.getMetadata().then(({info:Wt})=>{ot===this.pdfDocument&&Wt.Language&&(this.viewer.lang=Wt.Language)}),this.defaultRenderingQueue&&this.update()}).catch(Kt=>{console.error("Unable to initialize viewer",Kt),this._pagesCapability.reject(Kt)})}setPageLabels(ot){var Tt;var ut;if(this.pdfDocument){ot?Array.isArray(ot)&&this.pdfDocument.numPages===ot.length?this._pageLabels=ot:(this._pageLabels=null,console.error("setPageLabels: Invalid page labels.")):this._pageLabels=null;for(let jt=0,Jt=this._pages.length;jt<Jt;jt++)this._pages[jt].setPageLabel((Tt=(ut=this._pageLabels)==null?void 0:ut[jt])!=null?Tt:null)}}_resetView(){this._pages=[],this._currentPageNumber=1,this._currentScale=Ct.UNKNOWN_SCALE,this._currentScaleValue=null,this._pageLabels=null,Zl(this,Q,new Ll(Xl)),this._location=null,this._pagesRotation=0,this._optionalContentConfigPromise=null,this._firstPageCapability=new pt.PromiseCapability,this._onePageRenderedCapability=new pt.PromiseCapability,this._pagesCapability=new pt.PromiseCapability,this._scrollMode=Ct.ScrollMode.VERTICAL,this._previousScrollMode=Ct.ScrollMode.UNKNOWN,this._spreadMode=Ct.SpreadMode.NONE,Zl(this,Zt,{previousPageNumber:1,scrollDown:!0,pages:[]}),this._onBeforeDraw&&(this.eventBus._off("pagerender",this._onBeforeDraw),this._onBeforeDraw=null),this._onAfterDraw&&(this.eventBus._off("pagerendered",this._onAfterDraw),this._onAfterDraw=null),t(this,dt)&&(document.removeEventListener("visibilitychange",t(this,dt)),Zl(this,dt,null)),this.viewer.textContent="",this._updateScrollMode(),this.viewer.removeAttribute("lang"),t(this,m)&&(document.removeEventListener("copy",t(this,U)),Zl(this,U,null),t(this,m).remove(),Zl(this,m,null))}_scrollUpdate(){this.pagesCount!==0&&this.update()}pageLabelToPageNumber(ot){if(!this._pageLabels)return null;const ut=this._pageLabels.indexOf(ot);return ut<0?null:ut+1}scrollPageIntoView({pageNumber:ot,destArray:ut=null,allowNegativeOffset:Tt=!1,ignoreDestinationZoom:jt=!1}){if(!this.pdfDocument)return;const Jt=Number.isInteger(ot)&&this._pages[ot-1];if(!Jt){console.error(`scrollPageIntoView: "${ot}" is not a valid pageNumber parameter.`);return}if(this.isInPresentationMode||!ut){this._setCurrentPageNumber(ot,!0);return}let Lt=0,Yt=0,Kt=0,$t=0,tl,bl;const Bt=Jt.rotation%180!==0,rl=(Bt?Jt.height:Jt.width)/Jt.scale/pt.PixelsPerInch.PDF_TO_CSS_UNITS,hl=(Bt?Jt.width:Jt.height)/Jt.scale/pt.PixelsPerInch.PDF_TO_CSS_UNITS;let Il=0;switch(ut[1].name){case"XYZ":Lt=ut[2],Yt=ut[3],Il=ut[4],Lt=Lt!==null?Lt:0,Yt=Yt!==null?Yt:hl;break;case"Fit":case"FitB":Il="page-fit";break;case"FitH":case"FitBH":Yt=ut[2],Il="page-width",Yt===null&&this._location?(Lt=this._location.left,Yt=this._location.top):(typeof Yt!="number"||Yt<0)&&(Yt=hl);break;case"FitV":case"FitBV":Lt=ut[2],Kt=rl,$t=hl,Il="page-height";break;case"FitR":Lt=ut[2],Yt=ut[3],Kt=ut[4]-Lt,$t=ut[5]-Yt;let ct=Ct.SCROLLBAR_PADDING,Wt=Ct.VERTICAL_PADDING;this.removePageBorders&&(ct=Wt=0),tl=(this.container.clientWidth-ct)/Kt/pt.PixelsPerInch.PDF_TO_CSS_UNITS,bl=(this.container.clientHeight-Wt)/$t/pt.PixelsPerInch.PDF_TO_CSS_UNITS,Il=Math.min(Math.abs(tl),Math.abs(bl));break;default:console.error(`scrollPageIntoView: "${ut[1].name}" is not a valid destination type.`);return}if(jt||(Il&&Il!==this._currentScale?this.currentScaleValue=Il:this._currentScale===Ct.UNKNOWN_SCALE&&(this.currentScaleValue=Ct.DEFAULT_SCALE_VALUE)),Il==="page-fit"&&!ut[4]){A(this,S,w).call(this,Jt);return}const Wl=[Jt.viewport.convertToViewportPoint(Lt,Yt),Jt.viewport.convertToViewportPoint(Lt+Kt,Yt+$t)];let nt=Math.min(Wl[0][0],Wl[1][0]),T=Math.min(Wl[0][1],Wl[1][1]);Tt||(nt=Math.max(nt,0),T=Math.max(T,0)),A(this,S,w).call(this,Jt,{left:nt,top:T})}_updateLocation(ot){const ut=this._currentScale,Tt=this._currentScaleValue,jt=parseFloat(Tt)===ut?Math.round(ut*1e4)/100:Tt,Jt=ot.id,Lt=this._pages[Jt-1],Yt=this.container,Kt=Lt.getPagePoint(Yt.scrollLeft-ot.x,Yt.scrollTop-ot.y),$t=Math.round(Kt[0]),tl=Math.round(Kt[1]);let bl=`#page=${Jt}`;this.isInPresentationMode||(bl+=`&zoom=${jt},${$t},${tl}`),this._location={pageNumber:Jt,scale:jt,top:tl,left:$t,rotation:this._pagesRotation,pdfOpenParams:bl}}update(){const ot=this._getVisiblePages(),ut=ot.views,Tt=ut.length;if(Tt===0)return;const jt=Math.max(Xl,2*Tt+1);t(this,Q).resize(jt,ot.ids),this.renderingQueue.renderHighestPriority(ot);const Jt=this._spreadMode===Ct.SpreadMode.NONE&&(this._scrollMode===Ct.ScrollMode.PAGE||this._scrollMode===Ct.ScrollMode.VERTICAL),Lt=this._currentPageNumber;let Yt=!1;for(const Kt of ut){if(Kt.percent<100)break;if(Kt.id===Lt&&Jt){Yt=!0;break}}this._setCurrentPageNumber(Yt?Lt:ut[0].id),this._updateLocation(ot.first),this.eventBus.dispatch("updateviewarea",{source:this,location:this._location})}containsElement(ot){return this.container.contains(ot)}focus(){this.container.focus()}get _isContainerRtl(){return getComputedStyle(this.container).direction==="rtl"}get isInPresentationMode(){return this.presentationModeState===Ct.PresentationModeState.FULLSCREEN}get isChangingPresentationMode(){return this.presentationModeState===Ct.PresentationModeState.CHANGING}get isHorizontalScrollbarEnabled(){return this.isInPresentationMode?!1:this.container.scrollWidth>this.container.clientWidth}get isVerticalScrollbarEnabled(){return this.isInPresentationMode?!1:this.container.scrollHeight>this.container.clientHeight}_getVisiblePages(){const ot=this._scrollMode===Ct.ScrollMode.PAGE?t(this,Zt).pages:this._pages,ut=this._scrollMode===Ct.ScrollMode.HORIZONTAL,Tt=ut&&this._isContainerRtl;return(0,Ct.getVisibleElements)({scrollEl:this.container,views:ot,sortByVisibility:!0,horizontal:ut,rtl:Tt})}cleanup(){for(const ot of this._pages)ot.renderingState!==Ct.RenderingStates.FINISHED&&ot.reset()}_cancelRendering(){for(const ot of this._pages)ot.cancelRendering()}forceRendering(ot){const ut=ot||this._getVisiblePages(),Tt=A(this,dl,ol).call(this,ut),jt=this._spreadMode!==Ct.SpreadMode.NONE&&this._scrollMode!==Ct.ScrollMode.HORIZONTAL,Jt=this.renderingQueue.getHighestPriority(ut,this._pages,Tt,jt);return Jt?(A(this,qt,vt).call(this,Jt).then(()=>{this.renderingQueue.renderView(Jt)}),!0):!1}get hasEqualPageSizes(){const ot=this._pages[0];for(let ut=1,Tt=this._pages.length;ut<Tt;++ut){const jt=this._pages[ut];if(jt.width!==ot.width||jt.height!==ot.height)return!1}return!0}getPagesOverview(){let ot;return this._pages.map(ut=>{const Tt=ut.pdfPage.getViewport({scale:1}),jt=(0,Ct.isPortraitOrientation)(Tt);if(ot===void 0)ot=jt;else if(this.enablePrintAutoRotate&&jt!==ot)return{width:Tt.height,height:Tt.width,rotation:(Tt.rotation-90)%360};return{width:Tt.width,height:Tt.height,rotation:Tt.rotation}})}get optionalContentConfigPromise(){return this.pdfDocument?this._optionalContentConfigPromise?this._optionalContentConfigPromise:(console.error("optionalContentConfigPromise: Not initialized yet."),this.pdfDocument.getOptionalContentConfig()):Promise.resolve(null)}set optionalContentConfigPromise(ot){if(!(ot instanceof Promise))throw new Error(`Invalid optionalContentConfigPromise: ${ot}`);this.pdfDocument&&this._optionalContentConfigPromise&&(this._optionalContentConfigPromise=ot,this.refresh(!1,{optionalContentConfigPromise:ot}),this.eventBus.dispatch("optionalcontentconfigchanged",{source:this,promise:ot}))}get scrollMode(){return this._scrollMode}set scrollMode(ot){if(this._scrollMode!==ot){if(!(0,Ct.isValidScrollMode)(ot))throw new Error(`Invalid scroll mode: ${ot}`);this.pagesCount>Tl.FORCE_SCROLL_MODE_PAGE||(this._previousScrollMode=this._scrollMode,this._scrollMode=ot,this.eventBus.dispatch("scrollmodechanged",{source:this,mode:ot}),this._updateScrollMode(this._currentPageNumber))}}_updateScrollMode(ot=null){const ut=this._scrollMode,Tt=this.viewer;Tt.classList.toggle("scrollHorizontal",ut===Ct.ScrollMode.HORIZONTAL),Tt.classList.toggle("scrollWrapped",ut===Ct.ScrollMode.WRAPPED),!(!this.pdfDocument||!ot)&&(ut===Ct.ScrollMode.PAGE?A(this,Pt,at).call(this):this._previousScrollMode===Ct.ScrollMode.PAGE&&this._updateSpreadMode(),this._currentScaleValue&&isNaN(this._currentScaleValue)&&A(this,Rt,gt).call(this,this._currentScaleValue,{noScroll:!0}),this._setCurrentPageNumber(ot,!0),this.update())}get spreadMode(){return this._spreadMode}set spreadMode(ot){if(this._spreadMode!==ot){if(!(0,Ct.isValidSpreadMode)(ot))throw new Error(`Invalid spread mode: ${ot}`);this._spreadMode=ot,this.eventBus.dispatch("spreadmodechanged",{source:this,mode:ot}),this._updateSpreadMode(this._currentPageNumber)}}_updateSpreadMode(ot=null){if(!this.pdfDocument)return;const ut=this.viewer,Tt=this._pages;if(this._scrollMode===Ct.ScrollMode.PAGE)A(this,Pt,at).call(this);else if(ut.textContent="",this._spreadMode===Ct.SpreadMode.NONE)for(const jt of this._pages)ut.append(jt.div);else{const jt=this._spreadMode-1;let Jt=null;for(let Lt=0,Yt=Tt.length;Lt<Yt;++Lt)Jt===null?(Jt=document.createElement("div"),Jt.className="spread",ut.append(Jt)):Lt%2===jt&&(Jt=Jt.cloneNode(!1),ut.append(Jt)),Jt.append(Tt[Lt].div)}ot&&(this._currentScaleValue&&isNaN(this._currentScaleValue)&&A(this,Rt,gt).call(this,this._currentScaleValue,{noScroll:!0}),this._setCurrentPageNumber(ot,!0),this.update())}_getPageAdvance(ot,ut=!1){switch(this._scrollMode){case Ct.ScrollMode.WRAPPED:{const{views:Tt}=this._getVisiblePages(),jt=new Map;for(const{id:Jt,y:Lt,percent:Yt,widthPercent:Kt}of Tt){if(Yt===0||Kt<100)continue;let $t=jt.get(Lt);$t||jt.set(Lt,$t||($t=[])),$t.push(Jt)}for(const Jt of jt.values()){const Lt=Jt.indexOf(ot);if(Lt===-1)continue;const Yt=Jt.length;if(Yt===1)break;if(ut)for(let Kt=Lt-1,$t=0;Kt>=$t;Kt--){const tl=Jt[Kt],bl=Jt[Kt+1]-1;if(tl<bl)return ot-bl}else for(let Kt=Lt+1,$t=Yt;Kt<$t;Kt++){const tl=Jt[Kt],bl=Jt[Kt-1]+1;if(tl>bl)return bl-ot}if(ut){const Kt=Jt[0];if(Kt<ot)return ot-Kt+1}else{const Kt=Jt[Yt-1];if(Kt>ot)return Kt-ot+1}break}break}case Ct.ScrollMode.HORIZONTAL:break;case Ct.ScrollMode.PAGE:case Ct.ScrollMode.VERTICAL:{if(this._spreadMode===Ct.SpreadMode.NONE)break;const Tt=this._spreadMode-1;if(ut&&ot%2!==Tt||!ut&&ot%2===Tt)break;const{views:jt}=this._getVisiblePages(),Jt=ut?ot-1:ot+1;for(const{id:Lt,percent:Yt,widthPercent:Kt}of jt)if(Lt===Jt){if(Yt>0&&Kt===100)return 2;break}break}}return 1}nextPage(){const ot=this._currentPageNumber,ut=this.pagesCount;if(ot>=ut)return!1;const Tt=this._getPageAdvance(ot,!1)||1;return this.currentPageNumber=Math.min(ot+Tt,ut),!0}previousPage(){const ot=this._currentPageNumber;if(ot<=1)return!1;const ut=this._getPageAdvance(ot,!0)||1;return this.currentPageNumber=Math.max(ot-ut,1),!0}increaseScale({drawingDelay:ot,scaleFactor:ut,steps:Tt}={}){if(!this.pdfDocument)return;let jt=this._currentScale;if(ut>1)jt=Math.round(jt*ut*100)/100;else{Tt!=null||(Tt=1);do jt=Math.ceil((jt*Ct.DEFAULT_SCALE_DELTA).toFixed(2)*10)/10;while(--Tt>0&&jt<Ct.MAX_SCALE)}A(this,Rt,gt).call(this,Math.min(Ct.MAX_SCALE,jt),{noScroll:!1,drawingDelay:ot})}decreaseScale({drawingDelay:ot,scaleFactor:ut,steps:Tt}={}){if(!this.pdfDocument)return;let jt=this._currentScale;if(ut>0&&ut<1)jt=Math.round(jt*ut*100)/100;else{Tt!=null||(Tt=1);do jt=Math.floor((jt/Ct.DEFAULT_SCALE_DELTA).toFixed(2)*10)/10;while(--Tt>0&&jt>Ct.MIN_SCALE)}A(this,Rt,gt).call(this,Math.max(Ct.MIN_SCALE,jt),{noScroll:!1,drawingDelay:ot})}get containerTopLeft(){return t(this,C)||Zl(this,C,[this.container.offsetTop,this.container.offsetLeft])}get annotationEditorMode(){return t(this,I)?t(this,j):pt.AnnotationEditorType.DISABLE}set annotationEditorMode({mode:ot,editId:ut=null}){if(!t(this,I))throw new Error("The AnnotationEditor is not enabled.");if(t(this,j)!==ot){if(!Vl(ot))throw new Error(`Invalid AnnotationEditor mode: ${ot}`);this.pdfDocument&&(Zl(this,j,ot),this.eventBus.dispatch("annotationeditormodechanged",{source:this,mode:ot}),t(this,I).updateMode(ot,ut))}}set annotationEditorParams({type:ot,value:ut}){if(!t(this,I))throw new Error("The AnnotationEditor is not enabled.");t(this,I).updateParams(ot,ut)}refresh(ot=!1,ut=Object.create(null)){if(this.pdfDocument){for(const Tt of this._pages)Tt.update(ut);t(this,It)!==null&&(clearTimeout(t(this,It)),Zl(this,It,null)),ot||this.update()}}}Q=new WeakMap,R=new WeakMap,j=new WeakMap,I=new WeakMap,k=new WeakMap,C=new WeakMap,U=new WeakMap,K=new WeakMap,u=new WeakMap,m=new WeakMap,_=new WeakMap,$=new WeakMap,P=new WeakMap,Zt=new WeakMap,dt=new WeakMap,It=new WeakMap,xt=new WeakMap,it=new WeakSet,Nt=function(){const Qt=this;return{get annotationEditorUIManager(){return t(Qt,I)},get annotationStorage(){var ot;return(ot=Qt.pdfDocument)==null?void 0:ot.annotationStorage},get downloadManager(){return Qt.downloadManager},get enableScripting(){return!!Qt._scriptingManager},get fieldObjectsPromise(){var ot;return(ot=Qt.pdfDocument)==null?void 0:ot.getFieldObjects()},get findController(){return Qt.findController},get hasJSActionsPromise(){var ot;return(ot=Qt.pdfDocument)==null?void 0:ot.hasJSActions()},get linkService(){return Qt.linkService}}},zt=new WeakSet,Gt=function(Qt){const ot={annotationEditorMode:t(this,j),annotationMode:t(this,k),textLayerMode:t(this,xt)};return Qt&&(!Qt.includes(pt.PermissionFlag.COPY)&&t(this,xt)===Ct.TextLayerMode.ENABLE&&(ot.textLayerMode=Ct.TextLayerMode.ENABLE_PERMISSIONS),Qt.includes(pt.PermissionFlag.MODIFY_CONTENTS)||(ot.annotationEditorMode=pt.AnnotationEditorType.DISABLE),!Qt.includes(pt.PermissionFlag.MODIFY_ANNOTATIONS)&&!Qt.includes(pt.PermissionFlag.FILL_INTERACTIVE_FORMS)&&t(this,k)===pt.AnnotationMode.ENABLE_FORMS&&(ot.annotationMode=pt.AnnotationMode.ENABLE)),ot},Xt=new WeakSet,Ut=function(){if(document.visibilityState==="hidden"||!this.container.offsetParent||this._getVisiblePages().views.length===0)return Promise.resolve();const Qt=new Promise(ot=>{Zl(this,dt,()=>{document.visibilityState==="hidden"&&(ot(),document.removeEventListener("visibilitychange",t(this,dt)),Zl(this,dt,null))}),document.addEventListener("visibilitychange",t(this,dt))});return Promise.race([this._onePageRenderedCapability.promise,Qt])},Vt=new WeakSet,Ht=function(Qt,ot){const ut=document.getSelection(),{focusNode:Tt,anchorNode:jt}=ut;if(jt&&Tt&&ut.containsNode(t(this,m))){if(t(this,u)||Qt===Ct.TextLayerMode.ENABLE_PERMISSIONS){ot.preventDefault(),ot.stopPropagation();return}Zl(this,u,!0);const Jt=this.container.style.cursor;this.container.style.cursor="wait";const Lt=Yt=>Zl(this,_,Yt.key==="Escape");window.addEventListener("keydown",Lt),this.getAllText().then(Yt=>Sl(this,null,function*(){Yt!==null&&(yield navigator.clipboard.writeText(Yt))})).catch(Yt=>{console.warn(`Something goes wrong when extracting the text: ${Yt.message}`)}).finally(()=>{Zl(this,u,!1),Zl(this,_,!1),window.removeEventListener("keydown",Lt),this.container.style.cursor=Jt}),ot.preventDefault(),ot.stopPropagation()}},Pt=new WeakSet,at=function(){if(this._scrollMode!==Ct.ScrollMode.PAGE)throw new Error("#ensurePageViewVisible: Invalid scrollMode value.");const Qt=this._currentPageNumber,ot=t(this,Zt),ut=this.viewer;if(ut.textContent="",ot.pages.length=0,this._spreadMode===Ct.SpreadMode.NONE&&!this.isInPresentationMode){const Tt=this._pages[Qt-1];ut.append(Tt.div),ot.pages.push(Tt)}else{const Tt=new Set,jt=this._spreadMode-1;jt===-1?Tt.add(Qt-1):Qt%2!==jt?(Tt.add(Qt-1),Tt.add(Qt)):(Tt.add(Qt-2),Tt.add(Qt-1));const Jt=document.createElement("div");if(Jt.className="spread",this.isInPresentationMode){const Lt=document.createElement("div");Lt.className="dummyPage",Jt.append(Lt)}for(const Lt of Tt){const Yt=this._pages[Lt];Yt&&(Jt.append(Yt.div),ot.pages.push(Yt))}ut.append(Jt)}ot.scrollDown=Qt>=ot.previousPageNumber,ot.previousPageNumber=Qt},S=new WeakSet,w=function(Qt,ot=null){const{div:ut,id:Tt}=Qt;if(this._currentPageNumber!==Tt&&this._setCurrentPageNumber(Tt),this._scrollMode===Ct.ScrollMode.PAGE&&(A(this,Pt,at).call(this),this.update()),!ot&&!this.isInPresentationMode){const jt=ut.offsetLeft+ut.clientLeft,Jt=jt+ut.clientWidth,{scrollLeft:Lt,clientWidth:Yt}=this.container;(this._scrollMode===Ct.ScrollMode.HORIZONTAL||jt<Lt||Jt>Lt+Yt)&&(ot={left:0,top:0})}(0,Ct.scrollIntoView)(ut,ot),!this._currentScaleValue&&this._location&&(this._location=null)},X=new WeakSet,J=function(Qt){return Qt===this._currentScale||Math.abs(Qt-this._currentScale)<1e-15},H=new WeakSet,et=function(Qt,ot,{noScroll:ut=!1,preset:Tt=!1,drawingDelay:jt=-1}){if(this._currentScaleValue=ot.toString(),A(this,X,J).call(this,Qt)){Tt&&this.eventBus.dispatch("scalechanging",{source:this,scale:Qt,presetValue:ot});return}this.viewer.style.setProperty("--scale-factor",Qt*pt.PixelsPerInch.PDF_TO_CSS_UNITS);const Jt=jt>=0&&jt<1e3;if(this.refresh(!0,{scale:Qt,drawingDelay:Jt?jt:-1}),Jt&&Zl(this,It,setTimeout(()=>{Zl(this,It,null),this.refresh()},jt)),this._currentScale=Qt,!ut){let Lt=this._currentPageNumber,Yt;this._location&&!(this.isInPresentationMode||this.isChangingPresentationMode)&&(Lt=this._location.pageNumber,Yt=[null,{name:"XYZ"},this._location.left,this._location.top,null]),this.scrollPageIntoView({pageNumber:Lt,destArray:Yt,allowNegativeOffset:!0})}this.eventBus.dispatch("scalechanging",{source:this,scale:Qt,presetValue:Tt?ot:void 0}),this.defaultRenderingQueue&&this.update()},lt=new WeakSet,Mt=function(){return this._spreadMode!==Ct.SpreadMode.NONE&&this._scrollMode!==Ct.ScrollMode.HORIZONTAL?2:1},Rt=new WeakSet,gt=function(Qt,ot){let ut=parseFloat(Qt);if(ut>0)ot.preset=!1,A(this,H,et).call(this,ut,Qt,ot);else{const Tt=this._pages[this._currentPageNumber-1];if(!Tt)return;let jt=Ct.SCROLLBAR_PADDING,Jt=Ct.VERTICAL_PADDING;this.isInPresentationMode?(jt=Jt=4,this._spreadMode!==Ct.SpreadMode.NONE&&(jt*=2)):this.removePageBorders?jt=Jt=0:this._scrollMode===Ct.ScrollMode.HORIZONTAL&&([jt,Jt]=[Jt,jt]);const Lt=(this.container.clientWidth-jt)/Tt.width*Tt.scale/t(this,lt,Mt),Yt=(this.container.clientHeight-Jt)/Tt.height*Tt.scale;switch(Qt){case"page-actual":ut=1;break;case"page-width":ut=Lt;break;case"page-height":ut=Yt;break;case"page-fit":ut=Math.min(Lt,Yt);break;case"auto":const Kt=(0,Ct.isPortraitOrientation)(Tt)?Lt:Math.min(Yt,Lt);ut=Math.min(Ct.MAX_AUTO_SCALE,Kt);break;default:console.error(`#setScale: "${Qt}" is an unknown zoom value.`);return}ot.preset=!0,A(this,H,et).call(this,ut,Qt,ot)}},Ot=new WeakSet,Dt=function(){const Qt=this._pages[this._currentPageNumber-1];this.isInPresentationMode&&A(this,Rt,gt).call(this,this._currentScaleValue,{noScroll:!0}),A(this,S,w).call(this,Qt)},qt=new WeakSet,vt=function(Qt){return Sl(this,null,function*(){var ot,ut;if(Qt.pdfPage)return Qt.pdfPage;try{const Tt=yield this.pdfDocument.getPage(Qt.id);return Qt.pdfPage||Qt.setPdfPage(Tt),(ut=(ot=this.linkService)._cachedPageNumber)!=null&&ut.call(ot,Tt.ref)||this.linkService.cachePageRef(Qt.id,Tt.ref),Tt}catch(Tt){return console.error("Unable to get page for page view",Tt),null}})},dl=new WeakSet,ol=function(Qt){var ot,ut;if(((ot=Qt.first)==null?void 0:ot.id)===1)return!0;if(((ut=Qt.last)==null?void 0:ut.id)===this.pagesCount)return!1;switch(this._scrollMode){case Ct.ScrollMode.PAGE:return t(this,Zt).scrollDown;case Ct.ScrollMode.HORIZONTAL:return this.scroll.right}return this.scroll.down},il=new WeakSet,_t=function(Qt=this.container.clientHeight){Qt!==t(this,$)&&(Zl(this,$,Qt),Ct.docStyle.setProperty("--viewer-container-height",`${Qt}px`))},Ft=new WeakSet,wt=function(Qt){for(const ot of Qt)if(ot.target===this.container){A(this,il,_t).call(this,Math.floor(ot.borderBoxSize[0].blockSize)),Zl(this,C,null);break}},O.PDFViewer=yl},(B,O,F)=>{Object.defineProperty(O,"__esModule",{value:!0}),O.PDFRenderingQueue=void 0;var L=F(4),g=F(2);const q=3e4;class v{constructor(){this.pdfViewer=null,this.pdfThumbnailViewer=null,this.onIdle=null,this.highestPriorityPage=null,this.idleTimeout=null,this.printing=!1,this.isThumbnailViewEnabled=!1,Object.defineProperty(this,"hasViewer",{value:()=>!!this.pdfViewer})}setViewer(R){this.pdfViewer=R}setThumbnailViewer(R){this.pdfThumbnailViewer=R}isHighestPriority(R){return this.highestPriorityPage===R.renderingId}renderHighestPriority(R){var j;this.idleTimeout&&(clearTimeout(this.idleTimeout),this.idleTimeout=null),!this.pdfViewer.forceRendering(R)&&(this.isThumbnailViewEnabled&&(j=this.pdfThumbnailViewer)!=null&&j.forceRendering()||this.printing||this.onIdle&&(this.idleTimeout=setTimeout(this.onIdle.bind(this),q)))}getHighestPriority(R,j,I,k=!1){const C=R.views,U=C.length;if(U===0)return null;for(let $=0;$<U;$++){const P=C[$].view;if(!this.isViewFinished(P))return P}const K=R.first.id,u=R.last.id;if(u-K+1>U){const $=R.ids;for(let P=1,Zt=u-K;P<Zt;P++){const dt=I?K+P:u-P;if($.has(dt))continue;const It=j[dt-1];if(!this.isViewFinished(It))return It}}let m=I?u:K-2,_=j[m];return _&&!this.isViewFinished(_)||k&&(m+=I?1:-1,_=j[m],_&&!this.isViewFinished(_))?_:null}isViewFinished(R){return R.renderingState===g.RenderingStates.FINISHED}renderView(R){switch(R.renderingState){case g.RenderingStates.FINISHED:return!1;case g.RenderingStates.PAUSED:this.highestPriorityPage=R.renderingId,R.resume();break;case g.RenderingStates.RUNNING:this.highestPriorityPage=R.renderingId;break;case g.RenderingStates.INITIAL:this.highestPriorityPage=R.renderingId,R.draw().finally(()=>{this.renderHighestPriority()}).catch(j=>{j instanceof L.RenderingCancelledException||console.error(`renderView: "${j}"`)});break}return!0}}O.PDFRenderingQueue=v}],M={};function p(B){var O=M[B];if(O!==void 0)return O.exports;var F=M[B]={exports:{}};return h[B](F,F.exports,p),F.exports}var f={};return(()=>{var B=f;Object.defineProperty(B,"__esModule",{value:!0}),Object.defineProperty(B,"AnnotationLayerBuilder",{enumerable:!0,get:function(){return g.AnnotationLayerBuilder}}),Object.defineProperty(B,"DownloadManager",{enumerable:!0,get:function(){return q.DownloadManager}}),Object.defineProperty(B,"EventBus",{enumerable:!0,get:function(){return v.EventBus}}),Object.defineProperty(B,"FindState",{enumerable:!0,get:function(){return O.FindState}}),Object.defineProperty(B,"GenericL10n",{enumerable:!0,get:function(){return Q.GenericL10n}}),Object.defineProperty(B,"LinkTarget",{enumerable:!0,get:function(){return F.LinkTarget}}),Object.defineProperty(B,"NullL10n",{enumerable:!0,get:function(){return R.NullL10n}}),Object.defineProperty(B,"PDFFindController",{enumerable:!0,get:function(){return O.PDFFindController}}),Object.defineProperty(B,"PDFHistory",{enumerable:!0,get:function(){return j.PDFHistory}}),Object.defineProperty(B,"PDFLinkService",{enumerable:!0,get:function(){return F.PDFLinkService}}),Object.defineProperty(B,"PDFPageView",{enumerable:!0,get:function(){return I.PDFPageView}}),Object.defineProperty(B,"PDFScriptingManager",{enumerable:!0,get:function(){return k.PDFScriptingManager}}),Object.defineProperty(B,"PDFSinglePageViewer",{enumerable:!0,get:function(){return C.PDFSinglePageViewer}}),Object.defineProperty(B,"PDFViewer",{enumerable:!0,get:function(){return U.PDFViewer}}),Object.defineProperty(B,"ProgressBar",{enumerable:!0,get:function(){return L.ProgressBar}}),Object.defineProperty(B,"RenderingStates",{enumerable:!0,get:function(){return L.RenderingStates}}),Object.defineProperty(B,"ScrollMode",{enumerable:!0,get:function(){return L.ScrollMode}}),Object.defineProperty(B,"SimpleLinkService",{enumerable:!0,get:function(){return F.SimpleLinkService}}),Object.defineProperty(B,"SpreadMode",{enumerable:!0,get:function(){return L.SpreadMode}}),Object.defineProperty(B,"StructTreeLayerBuilder",{enumerable:!0,get:function(){return K.StructTreeLayerBuilder}}),Object.defineProperty(B,"TextLayerBuilder",{enumerable:!0,get:function(){return u.TextLayerBuilder}}),Object.defineProperty(B,"XfaLayerBuilder",{enumerable:!0,get:function(){return m.XfaLayerBuilder}}),Object.defineProperty(B,"parseQueryString",{enumerable:!0,get:function(){return L.parseQueryString}});var O=p(1),F=p(5),L=p(2),g=p(6),q=p(8),v=p(9),Q=p(10),R=p(7),j=p(12),I=p(13),k=p(21),C=p(24),U=p(25),K=p(16),u=p(19),m=p(20)})(),f})())})(pdf_viewer);var pdf_viewerExports=pdf_viewer.exports;function addPrintStyles(st,r,h){const M=st.contentWindow.document.createElement("style");M.textContent=`
|
||
@page {
|
||
margin: 3mm;
|
||
size: ${r}pt ${h}pt;
|
||
}
|
||
body {
|
||
margin: 0;
|
||
}
|
||
canvas {
|
||
width: 100%;
|
||
page-break-after: always;
|
||
page-break-before: avoid;
|
||
page-break-inside: avoid;
|
||
}
|
||
`,st.contentWindow.document.head.appendChild(M),st.contentWindow.document.body.style.width="100%"}function createPrintIframe(st){return new Promise(r=>{const h=document.createElement("iframe");h.width="0",h.height="0",h.style.position="absolute",h.style.top="0",h.style.left="0",h.style.border="none",h.style.overflow="hidden",h.onload=()=>r(h),st.appendChild(h)})}function downloadPdf(st,r){const h=URL.createObjectURL(new Blob([st],{type:"application/pdf"})),M=document.createElement("a");M.href=h,M.download=r,M.style.display="none",document.body.append(M),M.click(),setTimeout(()=>{URL.revokeObjectURL(h),document.body.removeChild(M)},1e3)}function emptyElement(st){for(;st!=null&&st.firstChild;)st.removeChild(st.firstChild)}function releaseChildCanvases(st){st==null||st.querySelectorAll("canvas").forEach(r=>{var h;r.width=1,r.height=1,(h=r.getContext("2d"))==null||h.clearRect(0,0,1,1)})}const _hoisted_1$1=["id"],_hoisted_2$1=["id"],_hoisted_3$1=createBaseVNode("canvas",null,null,-1),_hoisted_4$1={key:0,class:"textLayer"},_hoisted_5$1={key:1,class:"annotationLayer"},_sfc_main$1=defineComponent({__name:"VuePdfEmbed",props:{annotationLayer:{type:Boolean},height:{},id:{},imageResourcesPath:{},page:{},rotation:{default:0},scale:{default:1},source:{},textLayer:{type:Boolean},width:{}},emits:["internal-link-clicked","loaded","loading-failed","password-requested","progress","rendered","rendering-failed"],setup(st,{expose:r,emit:h}){const M=st,p=shallowRef([]),f=shallowRef([]),B=ref([]),O=shallowRef(null),{doc:F}=useVuePdfEmbed({onError:k=>{p.value=[],h("loading-failed",k)},onPasswordRequest({callback:k,isWrongPassword:C}){h("password-requested",{callback:k,isWrongPassword:C})},onProgress:k=>{h("progress",k)},source:toRef(M,"source")}),L=computed(()=>{if(!F.value||!M.annotationLayer)return null;const k=new pdf_viewerExports.PDFLinkService;return k.setDocument(F.value),k.setViewer({scrollPageIntoView:({pageNumber:C})=>{h("internal-link-clicked",C)}}),k}),g=k=>Sl(this,null,function*(){var u;if(!F.value)return;const C=yield F.value.getData(),U=yield F.value.getMetadata(),K=(u=k!=null?k:U.contentDispositionFilename)!=null?u:"";downloadPdf(C,K)}),q=k=>{var K;let C,U;return M.height&&!M.width?(U=M.height,C=U/k):(C=(K=M.width)!=null?K:O.value.clientWidth,U=C*k),[C,U]},v=(k=300,C="",U=!1)=>Sl(this,null,function*(){var K,u,m;if(!F.value)return;const _=k/72,$=96/72;let P,Zt,dt;try{P=window.document.createElement("div"),P.style.display="none",window.document.body.appendChild(P),Zt=yield createPrintIframe(P);const It=M.page&&!U?[M.page]:[...Array(F.value.numPages+1).keys()].slice(1);yield Promise.all(It.map((xt,it)=>Sl(this,null,function*(){const Nt=yield F.value.getPage(xt),zt=Nt.getViewport({scale:1,rotation:0});if(it===0){const Ut=zt.width*_/$,Vt=zt.height*_/$;addPrintStyles(Zt,Ut,Vt)}const Gt=window.document.createElement("canvas");Gt.width=zt.width*_,Gt.height=zt.height*_,P.appendChild(Gt);const Xt=Gt.cloneNode();Zt.contentWindow.document.body.appendChild(Xt),yield Nt.render({canvasContext:Gt.getContext("2d"),intent:"print",transform:[_,0,0,_,0,0],viewport:zt}).promise,Xt.getContext("2d").drawImage(Gt,0,0)}))),C&&(dt=window.document.title,window.document.title=C),(K=Zt.contentWindow)==null||K.focus(),(u=Zt.contentWindow)==null||u.print()}finally{dt&&(window.document.title=dt),releaseChildCanvases(P),(m=P.parentNode)==null||m.removeChild(P)}}),Q=()=>Sl(this,null,function*(){if(F.value)try{p.value=M.page?[M.page]:[...Array(F.value.numPages+1).keys()].slice(1),B.value=Array(p.value.length).fill(1),yield Promise.all(p.value.map((k,C)=>Sl(this,null,function*(){const U=yield F.value.getPage(k),K=((M.rotation%90===0?M.rotation:0)+U.rotate)%360,[u,m,_]=Array.from(f.value[C].children),$=!!(K/90%2),[P,Zt]=q($?U.view[2]/U.view[3]:U.view[3]/U.view[2]),dt=`${Math.floor(P)}px`,It=`${Math.floor(Zt)}px`,xt=$?U.view[3]:U.view[2],it=P/xt,Nt=U.getViewport({scale:it,rotation:K});B.value[C]=it,u.style.width=dt,u.style.height=It,m&&(m.style.width=$?It:dt,m.style.height=$?dt:It),_&&(_.style.width=$?It:dt,_.style.height=$?dt:It),yield R(U,Nt.clone({scale:Nt.scale*window.devicePixelRatio*M.scale}),u),M.textLayer&&(yield I(U,Nt.clone({dontFlip:!0}),m)),M.annotationLayer&&(yield j(U,Nt.clone({dontFlip:!0}),_||m))}))),h("rendered")}catch(k){p.value=[],B.value=[],h("rendering-failed",k)}}),R=(k,C,U)=>Sl(this,null,function*(){U.width=C.width,U.height=C.height,yield k.render({canvasContext:U.getContext("2d"),viewport:C}).promise}),j=(k,C,U)=>Sl(this,null,function*(){emptyElement(U),new pdfExports.AnnotationLayer({accessibilityManager:null,annotationCanvasMap:null,div:U,l10n:null,page:k,viewport:C}).render({annotations:yield k.getAnnotations(),div:U,downloadManager:null,imageResourcesPath:M.imageResourcesPath,linkService:L.value,page:k,renderForms:!1,viewport:C})}),I=(k,C,U)=>Sl(this,null,function*(){emptyElement(U),yield pdfExports.renderTextLayer({container:U,textContentSource:yield k.getTextContent(),viewport:C}).promise});return watch(F,()=>{F.value&&h("loaded",F.value)},{immediate:!0}),watch(()=>M.source,()=>{releaseChildCanvases(O.value)}),watch(()=>[F.value,M.annotationLayer,M.height,M.imageResourcesPath,M.page,M.rotation,M.scale,M.textLayer,M.width],()=>{F.value&&Q()},{immediate:!0}),onBeforeUnmount(()=>{releaseChildCanvases(O.value)}),r({doc:F,download:g,print:v}),(k,C)=>(openBlock(),createElementBlock("div",{id:k.id,ref_key:"root",ref:O,class:"vue-pdf-embed"},[(openBlock(!0),createElementBlock(Fragment,null,renderList(p.value,(U,K)=>(openBlock(),createElementBlock("div",{key:U},[renderSlot(k.$slots,"before-page",{page:U}),createBaseVNode("div",{id:k.id&&`${k.id}-${U}`,ref_for:!0,ref_key:"pageRefs",ref:f,class:"vue-pdf-embed__page",style:normalizeStyle({"--scale-factor":B.value[K]})},[_hoisted_3$1,k.textLayer?(openBlock(),createElementBlock("div",_hoisted_4$1)):createCommentVNode("",!0),k.annotationLayer?(openBlock(),createElementBlock("div",_hoisted_5$1)):createCommentVNode("",!0)],12,_hoisted_2$1),renderSlot(k.$slots,"after-page",{page:U})]))),128))],8,_hoisted_1$1))}});window!=null&&window.Vue&&(window.VuePdfEmbed=_sfc_main$1,window.useVuePdfEmbed=useVuePdfEmbed);var $c;($c=pdfExports.GlobalWorkerOptions)!=null&&$c.workerSrc||(pdfExports.GlobalWorkerOptions.workerSrc=PdfWorker);const _hoisted_1={class:"font-medium"},_hoisted_2=["element-loading-text"],_hoisted_3={class:"flex justify-between items-center h-9"},_hoisted_4={key:0,class:"font-medium ml-1.25 text-xl"},_hoisted_5={key:1},_hoisted_6={class:"w-[170px] flex-bc"},source="https://xiaoxian521.github.io/hyperlink/pdf/Cookie%E5%92%8CSession%E5%8C%BA%E5%88%AB%E7%94%A8%E6%B3%95.pdf",_sfc_main=defineComponent({name:"Pdf",__name:"pdf",setup(st){const{t:r}=useI18n(),h=ref(),M=ref(1),p=ref(!0),f=ref(1),B=ref(0),O=ref(!1),F=[0,90,180,270],L=()=>{p.value=!1,M.value=h.value.doc.numPages},g=()=>{f.value=O.value?null:1},q=()=>{h.value.print()};return(v,Q)=>{const R=resolveComponent("el-link"),j=resolveComponent("el-pagination"),I=resolveComponent("el-checkbox"),k=resolveComponent("IconifyIconOnline"),C=resolveComponent("el-scrollbar"),U=resolveComponent("el-card"),K=resolveDirective("tippy"),u=resolveDirective("loading");return openBlock(),createBlock(U,{shadow:"never"},{header:withCtx(()=>[createBaseVNode("div",_hoisted_1,[createVNode(R,{href:"https://github.com/hrynko/vue-pdf-embed",target:"_blank",style:{margin:"0 5px 4px 0","font-size":"16px"}},{default:withCtx(()=>[createTextVNode(" PDF预览 ")]),_:1})]),createVNode(R,{class:"mt-2",href:"https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/able/pdf.vue",target:"_blank"},{default:withCtx(()=>[createTextVNode(" 代码位置 src/views/able/pdf.vue ")]),_:1})]),default:withCtx(()=>[withDirectives((openBlock(),createElementBlock("div",{class:"h-[calc(100vh-295px)]","element-loading-text":unref(r)("status.pureLoad")},[createBaseVNode("div",_hoisted_3,[O.value?(openBlock(),createElementBlock("div",_hoisted_4," 共"+toDisplayString(M.value)+"页 ",1)):(openBlock(),createElementBlock("div",_hoisted_5,[createVNode(j,{"current-page":f.value,"onUpdate:currentPage":Q[0]||(Q[0]=m=>f.value=m),background:"",layout:"prev, slot, next","page-size":1,total:M.value},{default:withCtx(()=>[createTextVNode(toDisplayString(f.value)+" / "+toDisplayString(M.value),1)]),_:1},8,["current-page","total"])])),createBaseVNode("div",_hoisted_6,[createVNode(I,{modelValue:O.value,"onUpdate:modelValue":Q[1]||(Q[1]=m=>O.value=m),onChange:g},{default:withCtx(()=>[createTextVNode(" 显示所有页面 ")]),_:1},8,["modelValue"]),withDirectives(createVNode(k,{icon:"ic:baseline-rotate-90-degrees-ccw",class:"cursor-pointer outline-transparent",onClick:Q[2]||(Q[2]=m=>B.value===3?B.value=0:B.value+=1)},null,512),[[K,{maxWidth:"none",content:`翻转(当前角度${F[B.value]}度)`}]]),withDirectives(createVNode(k,{icon:"ri:printer-line",class:"cursor-pointer outline-transparent",onClick:q},null,512),[[K,{maxWidth:"none",content:"打印"}]])])]),createVNode(C,null,{default:withCtx(()=>[createVNode(unref(_sfc_main$1),{ref_key:"pdfRef",ref:h,class:"h-full container overflow-auto",rotation:F[B.value],page:f.value,source,onRendered:L},null,8,["rotation","page"])]),_:1})],8,_hoisted_2)),[[u,p.value]])]),_:1})}}});export{_sfc_main as default};
|