@ilamy/calendar 1.8.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,7 +1,3 @@
1
- import{RRule as CU}from"rrule";import{AnimatePresence as N4,motion as V4}from"motion/react";import{clsx as L4}from"clsx";import{twMerge as A4}from"tailwind-merge";import Y0 from"dayjs";import Z4 from"dayjs/plugin/isBetween.js";import X4 from"dayjs/plugin/isSameOrAfter.js";import J4 from"dayjs/plugin/isSameOrBefore.js";import Q4 from"dayjs/plugin/localeData.js";import Y4 from"dayjs/plugin/localizedFormat.js";import q4 from"dayjs/plugin/minMax.js";import U4 from"dayjs/plugin/timezone.js";import z4 from"dayjs/plugin/utc.js";import _4 from"dayjs/plugin/weekday.js";import K4 from"dayjs/plugin/weekOfYear.js";var P5,G4=(P,$,Z)=>{let X=$.prototype,J=Z.tz.setDefault;Z.tz.setDefault=(U)=>{return P5=U,J(U)};let{startOf:Y,endOf:Q}=X;function q(U,_){let G=U.$x?.$timezone||P5;if(!G)return _;let K=Z.tz(_.format("YYYY-MM-DDTHH:mm:ss"),G).utcOffset();if(_.utcOffset()!==K)return _.tz(G,!0);return _}X.startOf=function(U,_){let G=Y.call(this,U,_);return q(this,G)},X.endOf=Q};Y0.extend(_4);Y0.extend(K4);Y0.extend(X4);Y0.extend(J4);Y0.extend(Z4);Y0.extend(q4);Y0.extend(U4);Y0.extend(z4);Y0.extend(Q4);Y0.extend(Y4);Y0.extend(G4);var $5=(...P)=>{return Y0.tz(...P)};Object.assign($5,Y0);var p=$5;var j0=1,Z5=24,B0=24,ZP=4,X5="bg-secondary text-muted-foreground pointer-events-none",D0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};function A(...P){return A4(L4(P))}var kP=(P)=>{if(!P||P.length===0)return;return new Set(P.map(($)=>D0[$]))};function XP(P){if(P===void 0)return;if(p.isDayjs(P))return P;let $=p(P);return $.isValid()?$:void 0}var J5=(P,$)=>{let Z={...P};for(let X of $)delete Z[X];return Z};function mP(P){if(!P||!P.length)return[];return P.map(($)=>{return{...$,start:p.isDayjs($.start)?$.start:p($.start),end:p.isDayjs($.end)?$.end:p($.end)}})}import{jsx as Q5}from"react/jsx-runtime";var W4={hidden:({direction:P})=>({opacity:0,x:P==="horizontal"?10:0,y:P==="vertical"?-10:0}),visible:({delay:P})=>({opacity:1,x:0,y:0,transition:{duration:0.2,ease:[0.4,0,0.2,1],delay:P}}),exit:({direction:P})=>({opacity:0,x:P==="horizontal"?-10:0,y:P==="vertical"?-10:0,transition:{duration:0.15}})},x=({children:P,transitionKey:$,delay:Z=0,className:X,direction:J="vertical",layout:Y,layoutId:Q,"data-testid":q,ref:U,..._})=>Q5(N4,{mode:"wait",children:Q5(V4.div,{animate:"visible",className:A("inline-block w-full",X),custom:{delay:Z,direction:J},"data-testid":q,exit:"exit",initial:"hidden",layout:Y,layoutId:Q,ref:U,variants:W4,..._,children:P},$)});x.displayName="AnimatedSection";import{DndContext as D4,MouseSensor as x4,pointerWithin as v4,TouchSensor as y4,useSensor as B5,useSensors as c4}from"@dnd-kit/core";import{useRef as O5,useState as i4}from"react";import{Slot as F4}from"@radix-ui/react-slot";import{cva as M4}from"class-variance-authority";import{jsx as O4}from"react/jsx-runtime";var B4=M4("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:$,size:Z,asChild:X=!1,...J}){return O4(X?F4:"button",{className:A(B4({variant:$,size:Z,className:P})),"data-slot":"button",...J})}import*as P0 from"@radix-ui/react-dialog";import{XIcon as f4}from"lucide-react";import{jsx as O0,jsxs as V2}from"react/jsx-runtime";function JP({...P}){return O0(P0.Root,{"data-slot":"dialog",...P})}function R4({...P}){return O0(P0.Portal,{"data-slot":"dialog-portal",...P})}function I4({className:P,...$}){return O0(P0.Overlay,{className:A("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",P),"data-slot":"dialog-overlay",...$})}function QP({className:P,children:$,...Z}){return V2(R4,{"data-slot":"dialog-portal",children:[O0(I4,{}),V2(P0.Content,{className:A("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg max-h-[90%]",P),"data-slot":"dialog-content",...Z,children:[$,V2(P0.Close,{className:"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:[O0(f4,{}),O0("span",{className:"sr-only",children:"Close"})]})]})]})}function YP({className:P,...$}){return O0("div",{className:A("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...$})}function gP({className:P,...$}){return O0("div",{className:A("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...$})}function qP({className:P,...$}){return O0(P0.Title,{className:A("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...$})}function CP({className:P,...$}){return O0(P0.Description,{className:A("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...$})}import{useContext as V5}from"react";import{createContext as S4}from"react";var hP=S4(void 0);import{createContext as p4}from"react";var EP=p4(void 0);import{useCallback as s0,useMemo as w4}from"react";import{useCallback as t,useEffect as M2,useMemo as L5,useRef as B2,useState as t0}from"react";import{RRule as T4}from"rrule";var jP=(P)=>{return new Date(Date.UTC(P.year(),P.month(),P.date(),P.hour(),P.minute(),P.second(),P.millisecond()))},H4=(P,$)=>{return $.year(P.getUTCFullYear()).month(P.getUTCMonth()).date(P.getUTCDate()).hour(P.getUTCHours()).minute(P.getUTCMinutes()).second(P.getUTCSeconds()).millisecond(P.getUTCMilliseconds())},UP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},f0=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},q5=(P,$)=>{let Z=f0($),X=P.findIndex((J)=>f0(J)===Z&&J.rrule&&!J.recurrenceId);if(X===-1)throw Error("Base recurring event not found");return X},U5=(P)=>P.start.subtract(1,"day").endOf("day").toDate(),Y5=(P,$)=>{let Z=$.diff($.startOf("day"),"millisecond");return P.startOf("day").add(Z,"millisecond")},b4=(P,$)=>{let Z=P.start;if($.start)Z=Y5(P.start,$.start);let X=P.end;if($.start&&$.end)X=Z.add($.end.diff($.start),"millisecond");else if($.start)X=Z.add(P.end.diff(P.start),"millisecond");else if($.end)X=Y5(P.end,$.end);let J=$.rrule??P.rrule,Y;if(J)Y={...J,dtstart:Z.toDate()};return{start:Z,end:X,rrule:Y}},W2=({event:P,currentEvents:$,startDate:Z,endDate:X})=>{if(!P.rrule)return[];try{let J=jP(P.start),Y=P.rrule.until?jP(p(P.rrule.until)):void 0,Q={...P.rrule,dtstart:J,until:Y},q=new T4(Q),U=f0(P),_=$.filter((f)=>f.recurrenceId&&f0(f)===U),G=P.end.diff(P.start),K=jP(Z.subtract(G,"millisecond")),V=jP(X);return q.between(K,V,!0).map((f,F)=>{let z=H4(f,P.start),L=_.find((k)=>XP(k.recurrenceId)?.isSame(z));if(L)return{...P,...L};let W=P.end.diff(P.start),R=z.add(W,"millisecond"),I=`${P.id}_${F}`,S=f0(P);return{...P,id:I,start:z,end:R,uid:S,rrule:void 0}}).filter((f)=>{if(P.exdates&&P.exdates.length>0){let L=f.start.toISOString();if(P.exdates?.includes(L))return!1}return f.start.isSameOrBefore(X)&&f.end.isSameOrAfter(Z)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},z5=({targetEvent:P,updates:$,currentEvents:Z,scope:X})=>{let J=[...Z],Y=q5(J,P),Q=J[Y];switch(X){case"this":{let q=P.start.toISOString(),_=[...Q.exdates||[],q],G={...Q,exdates:_};J[Y]=G;let K=`${P.id}_modified_${Date.now()}`,V={...J5(P,["width","height","top","left","right"]),...$,id:K,recurrenceId:q,uid:f0(Q),rrule:void 0};J.push(V);break}case"following":{let q=U5(P),U={...Q,rrule:{...Q.rrule,until:q}};J[Y]=U;let _=Q.end.diff(Q.start),G=$.start||P.start,K=$.end||G.add(_),V=`${Q.id}_following`,O=`${V}@ilamy.calendar`,N={...Q,...$,rrule:{...Q.rrule,...$.rrule,dtstart:G.toDate()},id:V,uid:O,start:G,end:K,recurrenceId:void 0};J.push(N);break}case"all":{let q=f0(Q),U=b4(Q,$);J[Y]={...Q,...$,start:U.start,end:U.end,rrule:U.rrule,exdates:void 0};let _=(G)=>{let K=Boolean(G.recurrenceId)&&!G.rrule,V=f0(G)===q;return K&&V};return J.filter((G)=>!_(G))}default:throw Error(`Invalid scope: ${X}. Must be 'this', 'following', or 'all'`)}return J},_5=({targetEvent:P,currentEvents:$,scope:Z})=>{let X=[...$],J=q5(X,P),Y=X[J];switch(Z){case"this":{let Q=P.start.toISOString(),U=[...Y.exdates||[],Q],_={...Y,exdates:U};X[J]=_;break}case"following":{let Q={...Y,rrule:{...Y.rrule,until:U5(P)}};X[J]=Q;break}case"all":{let Q=f0(P);return X.filter((U)=>f0(U)!==Q)}default:throw Error(`Invalid scope: ${Z}. Must be 'this', 'following', or 'all'`)}return X};var F2={today:"Today",create:"Create",new:"New",update:"Update",delete:"Delete",cancel:"Cancel",export:"Export",event:"Event",events:"Events",newEvent:"New Event",title:"Title",description:"Description",location:"Location",allDay:"All day",startDate:"Start Date",endDate:"End Date",startTime:"Start Time",searchTime:"Search time...",endTime:"End Time",color:"Color",createEvent:"Create Event",editEvent:"Edit Event",addNewEvent:"Add a new event to your calendar",editEventDetails:"Edit your event details",eventTitlePlaceholder:"Event title",eventDescriptionPlaceholder:"Event description (optional)",eventLocationPlaceholder:"Event location (optional)",repeat:"Repeat",repeats:"Repeats",customRecurrence:"Custom recurrence",daily:"Daily",weekly:"Weekly",monthly:"Monthly",yearly:"Yearly",interval:"Interval",repeatOn:"Repeat on",never:"Never",count:"Count",every:"Every",ends:"Ends",after:"After",occurrences:"occurrences",on:"On",editRecurringEvent:"Edit recurring event",deleteRecurringEvent:"Delete recurring event",editRecurringEventQuestion:"is a recurring event. How would you like to edit it?",deleteRecurringEventQuestion:"is a recurring event. How would you like to delete it?",thisEvent:"This event",thisEventDescription:"Only change this specific occurrence",thisAndFollowingEvents:"This and following events",thisAndFollowingEventsDescription:"Edit this and all future occurrences",allEvents:"All events",allEventsDescription:"Edit the entire recurring series",onlyChangeThis:"Only change this specific occurrence",changeThisAndFuture:"Change this and all future occurrences",changeEntireSeries:"Change the entire recurring series",onlyDeleteThis:"Only delete this specific occurrence",deleteThisAndFuture:"Delete this and all future occurrences",deleteEntireSeries:"Delete the entire recurring series",month:"Month",week:"Week",day:"Day",year:"Year",more:"more",resources:"Resources",resource:"Resource",time:"Time",date:"Date",noResourcesVisible:"No resources visible",addResourcesOrShowExisting:"Add resources or show existing ones"};function u(P){return P.isSame(p(),"day")}function r(P){return P.format("YYYY-MM-DD")}function d(P,$){let Z=P.startOf("week").day($),X=P.isBefore(Z)?Z.subtract(1,"week"):Z;return Array.from({length:7},(J,Y)=>X.add(Y,"day"))}function zP(P,$){let Z=d(P.startOf("month"),$);return Array.from({length:6},(X,J)=>{let Y=Z[0].add(J,"week");return d(Y,$)})}function K5(P){let $=P.daysInMonth(),Z=P.startOf("month");return Array.from({length:$},(X,J)=>Z.add(J,"day"))}function G5({referenceDate:P=p(),length:$=24}={}){let Z=P.startOf("day");return Array.from({length:$},(X,J)=>Z.hour(J).minute(0).second(0).millisecond(0))}function _P(P,$){let Z=new Set($.map((X)=>String(X.id)));return P.filter((X)=>Z.has(String(X.id)))}function DP(P,$,Z){let X=P.start.isSameOrAfter($)&&P.start.isSameOrBefore(Z),J=P.end.isSameOrAfter($)&&P.end.isSameOrBefore(Z),Y=P.start.isBefore($)&&P.end.isAfter(Z);return X||J||Y}var A5={day:"day",week:"week",month:"month",year:"year"},O2=(P,$,Z)=>{if($==="day"||$==="year")return{start:P.startOf($),end:P.endOf($)};if($==="week"){let J=d(P,Z);return{start:J[0].startOf("day"),end:J[6].endOf("day")}}let X=zP(P,Z);return{start:X[0][0].startOf("day"),end:X[5][6].endOf("day")}},xP=(P)=>{let{events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J=p(),businessHours:Y,onEventAdd:Q,onEventUpdate:q,onEventDelete:U,onDateChange:_,onViewChange:G,locale:K,timezone:V,translations:O,translator:N}=P,[f,F]=t0(p.isDayjs(J)?J:p(J)),[z,L]=t0(X),[W,R]=t0($),[I,S]=t0(!1),[w,k]=t0(null),[C,E]=t0(null),[c,a]=t0(K||"en"),j=B2($),m=B2(V),l=B2(void 0),_0=L5(()=>{if(N)return N;let b=O||F2;return(T)=>b[T]||T},[O,N]),L0=t((b,T)=>{let D=[];for(let V0 of W)if(V0.rrule)D.push(...W2({event:V0,currentEvents:W,startDate:b,endDate:T}));else if(DP(V0,b,T))D.push(V0);return D},[W]),M0=t(()=>{return O2(f,z,Z)},[f,z,Z]),H0=L5(()=>{let{start:b,end:T}=M0();return L0(b,T)},[L0,M0]);M2(()=>{if($!==j.current)R($),j.current=$},[$]),M2(()=>{if(K&&K!==l.current)a(K),p.locale(K),F((b)=>b.locale(K)),l.current=K},[K]),M2(()=>{if(V&&V!==m.current)p.tz.setDefault(V),F((b)=>b.tz(V)),R((b)=>b.map((T)=>({...T,start:T.start.tz(V),end:T.end.tz(V)}))),m.current=V},[V]);let J0=t((b)=>{F(b);let T=O2(b,z,Z);_?.(b,T)},[_,z,Z]),A0=J0,K0=t((b)=>{let T=b===1?f.add(1,A5[z]):f.subtract(1,A5[z]);J0(T)},[f,z,J0]),Z0=t(()=>K0(1),[K0]),b0=t(()=>K0(-1),[K0]),w0=t(()=>J0(p()),[J0]),k0=t((b)=>{R((T)=>[...T,b]),Q?.(b)},[Q]),i=t((b,T)=>{let D=W.find((N2)=>N2.id===b);if(!D)return;let V0={...D,...T};R((N2)=>N2.map((e2)=>e2.id===b?V0:e2)),q?.(V0)},[W,q]),X0=t((b,T,D)=>{q?.({...b,...T}),R(z5({targetEvent:b,updates:T,currentEvents:W,scope:D.scope}))},[W,q]),$P=t((b,T)=>{U?.(b),R(_5({targetEvent:b,currentEvents:W,scope:T.scope}))},[W,U]),H=t((b)=>{let T=W.find((D)=>D.id===b);if(!T)return;R((D)=>D.filter((V0)=>V0.id!==b)),U?.(T)},[W,U]),e=t((b)=>{if(b?.start)E(b.start);let T=b?.start??f;k({title:_0("newEvent"),start:T,end:b?.end??T.add(1,"hour"),resourceId:b?.resourceId,description:"",allDay:b?.allDay??!1}),S(!0)},[f,_0]),Q0=t(()=>{E(null),k(null),S(!1)},[]),N0=t((b)=>{L(b),G?.(b);let T=O2(f,b,Z);_?.(f,T)},[G,_,f,Z]),a0=t((b)=>{let T=b.uid;return W.find((D)=>(D.uid||`${D.id}@ilamy.calendar`)===T&&D.rrule)||null},[W]);return{currentDate:f,view:z,events:H0,rawEvents:W,isEventFormOpen:I,selectedEvent:w,selectedDate:C,firstDayOfWeek:Z,dayMaxEvents:ZP,currentLocale:c,businessHours:Y,setCurrentDate:F,selectDate:A0,setView:N0,nextPeriod:Z0,prevPeriod:b0,today:w0,addEvent:k0,updateEvent:i,updateRecurringEvent:X0,deleteEvent:H,deleteRecurringEvent:$P,openEventForm:e,closeEventForm:Q0,setSelectedEvent:k,setIsEventFormOpen:S,setSelectedDate:E,getEventsForDateRange:L0,findParentRecurringEvent:a0,t:_0}};import{jsx as k4}from"react/jsx-runtime";var f2=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},N5=({children:P,events:$=[],resources:Z=[],firstDayOfWeek:X=0,initialView:J="month",initialDate:Y,renderEvent:Q,onEventClick:q,onCellClick:U,isCellDisabled:_,onViewChange:G,onEventAdd:K,onEventUpdate:V,onEventDelete:O,onDateChange:N,locale:f,timezone:F,disableCellClick:z,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:R,eventSpacing:I=1,eventHeight:S=B0,stickyViewHeader:w=!0,viewHeaderClassName:k="",headerComponent:C,headerClassName:E,translations:c,translator:a,renderResource:j,renderEventForm:m,businessHours:l,timeFormat:_0="12-hour",classesOverride:L0,orientation:M0="horizontal",renderCurrentTimeIndicator:H0,renderHour:J0,hideNonBusinessHours:A0=!1,hideExportButton:K0=!1,hiddenDays:Z0,weekViewGranularity:b0="hourly",slotDuration:w0=60,scrollTime:k0})=>{let i=xP({events:$,firstDayOfWeek:X,initialView:J,initialDate:Y,businessHours:l,onEventAdd:K,onEventUpdate:V,onEventDelete:O,onDateChange:N,onViewChange:G,locale:f,timezone:F,translations:c,translator:a}),X0=s0((T)=>i.events.filter((D)=>f2(D).includes(T)),[i.events]),$P=s0((T)=>i.events.filter((D)=>f2(D).some((V0)=>T.includes(V0))),[i.events]),H=s0((T)=>{if(T===void 0)return;return Z.find((D)=>D.id===T)},[Z]),e=s0((T)=>{return Boolean(T.resourceIds&&T.resourceIds.length>1)},[]),Q0=s0((T)=>{i.setSelectedEvent(T),i.setIsEventFormOpen(!0)},[i]),N0=s0((T)=>{if(L)return;if(q)q(T);else Q0(T)},[L,q,Q0]),a0=s0((T)=>{if(z)return;if(U)U(T);else{let D={title:i.t("newEvent"),start:T.start,end:T.end,description:"",allDay:!1};if(T.resource!==void 0)D.resourceId=T.resource.id;i.setSelectedEvent(D),i.setSelectedDate(T.start),i.setIsEventFormOpen(!0)}},[U,z,i]),b=w4(()=>({...i,resources:Z,getEventsForResource:X0,getEventsForResources:$P,getResourceById:H,isEventCrossResource:e,getEventResourceIds:f2,onEventClick:N0,onCellClick:a0,isCellDisabled:_,renderEvent:Q,renderResource:j,renderEventForm:m,headerComponent:C,headerClassName:E,locale:f,timezone:F,disableCellClick:z,disableEventClick:L,disableDragAndDrop:W,dayMaxEvents:R,eventSpacing:I,eventHeight:S,stickyViewHeader:w,viewHeaderClassName:k,businessHours:l,timeFormat:_0,classesOverride:L0,orientation:M0,renderCurrentTimeIndicator:H0,renderHour:J0,hideNonBusinessHours:A0,hideExportButton:K0,hiddenDays:Z0,weekViewGranularity:b0,slotDuration:w0,scrollTime:k0}),[i,Z,X0,$P,H,e,N0,a0,_,Q,j,m,f,F,z,L,W,R,I,S,w,k,C,E,l,_0,L0,M0,H0,J0,A0,K0,Z0,b0,w0,k0]);return k4(EP.Provider,{value:b,children:P})};function B(P){let $=V5(EP),Z=V5(hP),X=$||Z;if(!X)throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider");return P?P(X):X}function m4(){let P=B();return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,resources:P.resources||[],setCurrentDate:P.setCurrentDate,selectDate:P.selectDate,setView:P.setView,nextPeriod:P.nextPeriod,prevPeriod:P.prevPeriod,today:P.today,addEvent:P.addEvent,updateEvent:P.updateEvent,deleteEvent:P.deleteEvent,openEventForm:P.openEventForm,closeEventForm:P.closeEventForm,getEventsForResource:P.getEventsForResource,businessHours:P.businessHours}}import{jsx as x0,jsxs as vP}from"react/jsx-runtime";var g4=[{scope:"this",title:"thisEvent",editKey:"onlyChangeThis",deleteKey:"onlyDeleteThis"},{scope:"following",title:"thisAndFollowingEvents",editKey:"changeThisAndFuture",deleteKey:"deleteThisAndFuture"},{scope:"all",title:"allEvents",editKey:"changeEntireSeries",deleteKey:"deleteEntireSeries"}];function fP({isOpen:P,onClose:$,onConfirm:Z,operationType:X,eventTitle:J}){let{t:Y}=B((U)=>({t:U.t})),Q=(U)=>{Z(U),$()},q=X==="edit";return x0(JP,{onOpenChange:$,open:P,children:vP(QP,{className:"max-w-md",children:[vP(YP,{children:[x0(qP,{children:q?Y("editRecurringEvent"):Y("deleteRecurringEvent")}),vP(CP,{children:['"',J,'"'," ",q?Y("editRecurringEventQuestion"):Y("deleteRecurringEventQuestion")]})]}),x0("div",{className:"space-y-3",children:g4.map(({scope:U,title:_,editKey:G,deleteKey:K})=>x0(g,{className:"w-full justify-start h-auto p-4",onClick:()=>Q(U),variant:"outline",children:vP("div",{className:"text-left",children:[x0("div",{className:"font-medium",children:Y(_)}),x0("div",{className:"text-sm text-muted-foreground",children:Y(q?G:K)})]})},U))}),x0(gP,{children:x0(g,{onClick:$,variant:"outline",children:Y("cancel")})})]})})}var W5=(P,$)=>{let{active:Z,over:X}=P;if(!Z||!X||!$)return null;let J=X.data.current||{},Y=J.type==="time-cell",{resourceId:Q,allDay:q}=J,U;if(Y){let{date:V,hour:O=0,minute:N=0}=J;U=p(V).hour(O).minute(N)}else{let{date:V}=J;U=p(V)}let _=$.end.diff($.start,"second"),G=U.add(_,"second");if(G.isSame(G.startOf("day")))G=G.subtract(1,"day").endOf("day");let K={start:U,end:G,resourceId:Q,allDay:Y?!1:q??$.allDay};return{activeEvent:$,updates:K}};import{DragOverlay as C4}from"@dnd-kit/core";import{snapCenterToCursor as h4}from"@dnd-kit/modifiers";import{useImperativeHandle as E4,useState as j4}from"react";import{jsx as F5}from"react/jsx-runtime";var M5=({ref:P})=>{let[$,Z]=j4(null);return E4(P,()=>({setActiveEvent:Z})),F5(C4,{modifiers:[h4],children:$&&F5("div",{className:A("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",$.backgroundColor||"bg-blue-500",$.color||"text-white"),children:$?.title})})};import{jsx as f5,jsxs as R5,Fragment as l4}from"react/jsx-runtime";var R2={isOpen:!1,event:null,updates:null};function yP({children:P}){let $=O5(null),Z=O5(null),{updateEvent:X,updateRecurringEvent:J,disableDragAndDrop:Y}=B((z)=>({updateEvent:z.updateEvent,updateRecurringEvent:z.updateRecurringEvent,disableDragAndDrop:z.disableDragAndDrop})),[Q,q]=i4({isOpen:!1,event:null,updates:null}),U=B5(x4,{activationConstraint:{distance:2}}),_=B5(y4,{activationConstraint:{delay:100,tolerance:5}}),G=c4(U,_),K=(z,L)=>{if(!z?.id||!L||Object.keys(L).length===0)return;if(UP(z))q({isOpen:!0,event:z,updates:L});else X(z.id,L)},V=(z)=>{if(!Q.event||!Q.updates){q(R2);return}try{J(Q.event,Q.updates,{scope:z,eventDate:Q.event.start})}catch{}finally{q(R2)}},O=()=>{q(R2)},N=(z)=>{let{active:L}=z;if(L.data.current?.type==="calendar-event")Z.current?.setActiveEvent(L.data.current.event),$.current=L.data.current.event},f=(z)=>{let L=W5(z,$.current);if(L){let{activeEvent:W,updates:R}=L;K(W,R)}$.current=null,Z.current?.setActiveEvent(null)},F=(z)=>{$.current=null};if(Y)return P;return R5(l4,{children:[R5(D4,{collisionDetection:v4,onDragCancel:F,onDragEnd:f,onDragStart:N,sensors:G,children:[P,f5(M5,{ref:Z})]}),f5(fP,{eventTitle:Q.event?.title||"",isOpen:Q.isOpen,onClose:O,onConfirm:V,operationType:"edit"})]})}import{useEffect as M$,useState as l0}from"react";import*as cP from"@radix-ui/react-checkbox";import{CheckIcon as u4}from"lucide-react";import{jsx as I2}from"react/jsx-runtime";function KP({className:P,...$}){return I2(cP.Root,{className:A("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...$,children:I2(cP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:I2(u4,{className:"size-3.5"})})})}import{PopoverClose as n4}from"@radix-ui/react-popover";import{Calendar as a4}from"lucide-react";import{useEffect as t4,useRef as s4,useState as e4}from"react";import{ChevronLeftIcon as o4,ChevronRightIcon as d4}from"lucide-react";import{useState as r4}from"react";import{jsx as G0,jsxs as S2}from"react/jsx-runtime";function I5({selected:P,defaultMonth:$,onSelect:Z,disabled:X,firstDayOfWeek:J=0,className:Y}){let[Q,q]=r4(()=>p($??P??new Date).startOf("month")),U=zP(Q,J),_=P?p(P).format("YYYY-MM-DD"):void 0,G=d(p(),J).map((K)=>K.format("dd"));return S2("div",{className:A("bg-background p-3 w-[280px]",Y),"data-slot":"calendar",children:[S2("div",{className:"flex items-center justify-between mb-2",children:[G0(g,{"aria-label":"Previous month",onClick:()=>q((K)=>K.subtract(1,"month")),size:"icon",variant:"ghost",children:G0(o4,{className:"size-4"})}),G0("div",{className:"text-sm font-medium select-none",children:Q.format("MMMM YYYY")}),G0(g,{"aria-label":"Next month",onClick:()=>q((K)=>K.add(1,"month")),size:"icon",variant:"ghost",children:G0(d4,{className:"size-4"})})]}),S2("table",{className:"w-full border-collapse",role:"grid",children:[G0("thead",{children:G0("tr",{children:G.map((K,V)=>G0("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:K},V))})}),G0("tbody",{children:U.map((K,V)=>G0("tr",{children:K.map((O)=>{let N=!O.isSame(Q,"month"),f=O.format("YYYY-MM-DD")===_,F=X?.(O.toDate())??!1;return G0("td",{className:"p-0 text-center","data-disabled":F,"data-outside":N,"data-selected":f,role:"gridcell",tabIndex:-1,children:G0("button",{"aria-disabled":F,"aria-hidden":N,className:A("w-full aspect-square rounded-md text-sm select-none",!F&&"hover:bg-accent cursor-pointer",N&&"text-muted-foreground/50",u(O)&&!f&&"bg-accent text-accent-foreground",f&&"bg-primary text-primary-foreground font-medium",F&&"opacity-50 cursor-not-allowed"),"data-disabled":F,"data-selected":f,disabled:F||N,onClick:()=>Z?.(O.toDate()),tabIndex:N?-1:0,type:"button",children:O.format("D")})},O.toISOString())})},V))})]})]})}import*as m0 from"@radix-ui/react-popover";import{jsx as iP}from"react/jsx-runtime";function v0({...P}){return iP(m0.Root,{"data-slot":"popover",...P})}function y0({...P}){return iP(m0.Trigger,{"data-slot":"popover-trigger",...P})}function c0({className:P,align:$="center",sideOffset:Z=4,...X}){return iP(m0.Portal,{children:iP(m0.Content,{align:$,className:A("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:Z,...X})})}import{jsx as GP,jsxs as p2}from"react/jsx-runtime";function lP({date:P,closeOnSelect:$,onChange:Z,label:X="Pick a date",className:J,disabled:Y}){let Q=B((K)=>K.firstDayOfWeek),q=s4(null),[U,_]=e4(P);t4(()=>{_(P)},[P]);let G=(K)=>{if(_(K),$)q.current?.click();Z?.(K)};return GP("div",{className:J,children:p2(v0,{children:[GP(y0,{asChild:!0,children:p2(g,{className:A("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[GP(a4,{}),U?p(U).format("ll"):GP("span",{children:X})]})}),p2(c0,{align:"start",className:"w-auto p-0",children:[GP(n4,{ref:q,style:{display:"none"}}),GP(I5,{defaultMonth:U,disabled:Y,firstDayOfWeek:Q,onSelect:G,selected:U})]})]})})}import{jsx as P$}from"react/jsx-runtime";function e0({className:P,type:$,...Z}){return P$("input",{className:A("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:$,...Z})}import*as S5 from"@radix-ui/react-label";import{jsx as $$}from"react/jsx-runtime";function q0({className:P,...$}){return $$(S5.Root,{className:A("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...$})}import*as R0 from"@radix-ui/react-scroll-area";import{jsx as RP,jsxs as Z$}from"react/jsx-runtime";function I0({className:P,children:$,viewPortProps:Z,...X}){return Z$(R0.Root,{className:A("relative",P),"data-slot":"scroll-area",...X,children:[RP(R0.Viewport,{...Z,className:A("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",Z?.className),"data-slot":"scroll-area-viewport",children:$}),RP(g0,{}),RP(R0.Corner,{})]})}function g0({className:P,orientation:$="vertical",...Z}){return RP(R0.ScrollAreaScrollbar,{className:A("flex touch-none p-px transition-colors select-none",$==="vertical"&&"h-full w-2.5 border-l border-l-transparent",$==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:$,...Z,children:RP(R0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as Q$}from"lucide-react";import{useEffect as Y$,useRef as T5,useState as T2}from"react";import{useMemo as X$}from"react";function p5({timeFormat:P="12-hour",minTime:$="00:00",maxTime:Z="23:45"}){return{timeOptions:X$(()=>{let Y=[],[Q,q]=$.split(":").map(Number),[U,_]=Z.split(":").map(Number),G=Q*60+q,K=U*60+_;for(let V=G;V<=K;V+=15){let O=Math.floor(V/60),N=V%60,f=`${O.toString().padStart(2,"0")}:${N.toString().padStart(2,"0")}`;Y.push(f)}return Y},[$,Z]),formatTime:(Y)=>{let[Q,q]=Y.split(":").map(Number),U=Q>=12?"PM":"AM",_=Q===0?12:Q>12?Q-12:Q;if(P==="24-hour")return`${Q.toString().padStart(2,"0")}:${q.toString().padStart(2,"0")}`;return`${_}:${q.toString().padStart(2,"0")} ${U}`}}}var LP=(P)=>String(P).padStart(2,"0"),J$=(P)=>typeof P==="number"?LP(P):P,M={col:{time:"time-col",date:"date-col",day:(P,$)=>{let Z=`day-col-${r(P)}`;return $!=null?`${Z}-resource-${$}`:Z},resource:(P,$)=>`${P}-col-resource-${$}`,allDay:(P,$)=>`all-day-col-${r(P)}-${$}`},cell:{day:(P,$,Z=0)=>{let X=r(P);return $!=null?`day-cell-${X}-${LP($)}-${LP(Z)}`:`day-cell-${X}`},verticalTime:(P)=>`vertical-time-${LP(P)}`,vertical:(P,$,Z,X)=>{let J=`vertical-cell-${r(P)}-${LP($)}-${LP(Z)}`;return X!=null?`${J}-resource-${X}`:J}},container:{vertical:{col:(P)=>`vertical-col-${P}`},horizontal:{row:(P)=>`horizontal-row-${P}`,rowLabel:(P)=>`horizontal-row-label-${P}`,event:(P)=>`horizontal-event-${P}`},eventsLayer:(P,$)=>`${P}-events-${$}`},header:{resource:{weekDay:"resource-week-day-header",timeLabel:(P,$)=>`resource-${P}-time-label-${J$($)}`},weekday:(P,$)=>`${P}-header-weekday-${$.toLowerCase()}`,week:{day:(P)=>`week-header-day-${P.toISOString()}`,hour:(P,$)=>`week-header-hour-${P.toISOString()}-${$}`,resource:(P)=>`week-header-resource-${P}`},year:{month:(P,$)=>$?`year-month-${$}-${P}`:`year-month-${P}`,day:(P,$)=>`year-day-${P}-${$}`}},allDayRow:(P)=>`allday-row-${P??"main"}`,listKey:(...P)=>P.join("-"),dayNumber:(P)=>u(P)?"day-number-today":`day-number-${P.format("D")}`,timePicker:(P)=>`time-picker-${P??""}`,droppable:{dayCell:(P,$)=>{let Z=P.toISOString(),X=$?.allDay?"-allday":"",J=$?.resourceId!=null?`-resource-${$.resourceId}`:"";return`drop-day-cell-${Z}${X}${J}`}}};import{jsx as i0,jsxs as H2}from"react/jsx-runtime";var q$=(P)=>{P.stopPropagation()};function H5({value:P,onChange:$,minTime:Z="00:00",maxTime:X="23:45",timeFormat:J="12-hour",placeholder:Y="Select time...",className:Q,disabled:q=!1,name:U}){let[_,G]=T2(!1),[K,V]=T2(""),O=T5(null),N=T5(null),[f,F]=T2(0),{timeOptions:z,formatTime:L}=p5({timeFormat:J,minTime:Z,maxTime:X}),W=z.filter((S)=>{return L(S).toLowerCase().includes(K.toLowerCase())}),R=(S)=>{$(S),G(!1),V("")};Y$(()=>{if(_){if(N.current)F(N.current.offsetWidth);setTimeout(()=>{O.current?.focus()},0)}},[_]);let I=P?L(P):Y;return H2(v0,{onOpenChange:G,open:_,children:[i0(y0,{asChild:!0,children:H2(g,{"aria-controls":"time-picker-listbox","aria-expanded":_,className:A("w-full justify-start",Q),"data-testid":M.timePicker(U),disabled:q,ref:N,role:"combobox",variant:"outline",children:[i0(Q$,{className:"mr-2 h-4 w-4"}),I]})}),H2(c0,{align:"start",className:"p-0",style:{width:f},children:[i0("div",{className:"p-2 border-b",children:i0(e0,{className:"h-8",onChange:(S)=>V(S.target.value),placeholder:"Search time...",ref:O,value:K})}),i0(I0,{className:"h-[200px]",onWheel:q$,children:i0("div",{className:"p-1",children:W.length===0?i0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):W.map((S)=>{let w=L(S);return i0("button",{className:A("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",S===P&&"bg-accent text-accent-foreground"),onClick:()=>R(S),type:"button",children:w},S)})})})]})]})}var b2=(P,$)=>{if(!$)return!0;let Z=!1;return uP($,{date:P,onMatch:()=>{Z=!0}}),Z},b5=({date:P,hour:$,minute:Z=0,businessHours:X})=>{if(!X)return!0;if($===void 0)return b2(P,X);let J=!1,Y=$*60+Z;return uP(X,{date:P,onMatch:(Q)=>{let q=Q.startTime??9,U=Q.endTime??17,_=q*60,G=U*60;if(Y>=_&&Y<G)J=!0}}),J},uP=(P,$)=>{let{date:Z,onMatch:X}=$;if(!P)return;let J=Array.isArray(P)?P:[P];for(let Y of J)if(Z&&Y.daysOfWeek){let Q=Z.day();if(Y.daysOfWeek.some((q)=>D0[q]===Q))X(Y)}else X(Y)},oP=(P)=>{let{allDates:$,businessHours:Z,resourceBusinessHours:X=[],hideNonBusinessHours:J}=P,Y=24,Q=0,q=!1,U=(G)=>{q=!0,Y=Math.min(Y,G.startTime??9),Q=Math.max(Q,G.endTime??17)},_=(G)=>{uP(Z,{date:G,onMatch:U});for(let K of X)uP(K,{date:G,onMatch:U})};for(let G of $)_(G);if(!q&&J){if(_(),!q)Y=9,Q=17,q=!0}return{minStart:Y,maxEnd:Q,hasBusinessHours:q}};var w2=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=p(P).hour(X).minute(J);return Z?Y.hour(0).minute(0):Y},w5=(P,$,Z)=>{let[X,J]=$.split(":").map(Number),Y=p(P).hour(X).minute(J);return Z?Y.hour(23).minute(59):Y},k2=(P,$)=>{if(!$)return{min:"00:00",max:"23:59"};let Z=p(P),{minStart:X,maxEnd:J,hasBusinessHours:Y}=oP({allDates:[Z],businessHours:$,hideNonBusinessHours:!1});if(!Y)return{min:"00:00",max:"23:59"};return{min:`${X.toString().padStart(2,"0")}:00`,max:`${(J-1).toString().padStart(2,"0")}:45`}};import{useEffect as G$,useState as y5}from"react";import{RRule as $0}from"rrule";import{jsx as dP}from"react/jsx-runtime";function k5({className:P,...$}){return dP("div",{className:A("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...$})}function m5({className:P,...$}){return dP("div",{className:A("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 p-4 pb-0 has-data-[slot=card-action]:grid-cols-[1fr_auto]",P),"data-slot":"card-header",...$})}function g5({className:P,...$}){return dP("div",{className:A("leading-none font-semibold",P),"data-slot":"card-title",...$})}function C5({className:P,...$}){return dP("div",{className:A("p-4 pt-0",P),"data-slot":"card-content",...$})}import*as h from"@radix-ui/react-select";import{CheckIcon as U$,ChevronDownIcon as h5,ChevronUpIcon as z$}from"lucide-react";import{jsx as s,jsxs as m2}from"react/jsx-runtime";function E5({...P}){return s(h.Root,{"data-slot":"select",...P})}function j5({...P}){return s(h.Value,{"data-slot":"select-value",...P})}function D5({className:P,size:$="default",children:Z,...X}){return m2(h.Trigger,{className:A("border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":$,"data-slot":"select-trigger",...X,children:[Z,s(h.Icon,{asChild:!0,children:s(h5,{className:"size-4 opacity-50"})})]})}function x5({className:P,children:$,position:Z="popper",align:X="center",...J}){return s(h.Portal,{children:m2(h.Content,{align:X,className:A("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",Z==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:Z,...J,children:[s(_$,{}),s(h.Viewport,{className:A("p-1",Z==="popper"&&"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),children:$}),s(K$,{})]})})}function v5({className:P,children:$,...Z}){return m2(h.Item,{className:A("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...Z,children:[s("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:s(h.ItemIndicator,{children:s(U$,{className:"size-4"})})}),s(h.ItemText,{children:$})]})}function _$({className:P,...$}){return s(h.ScrollUpButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...$,children:s(z$,{className:"size-4"})})}function K$({className:P,...$}){return s(h.ScrollDownButton,{className:A("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...$,children:s(h5,{className:"size-4"})})}import{jsx as v,jsxs as U0,Fragment as V$}from"react/jsx-runtime";var C2={DAILY:$0.DAILY,WEEKLY:$0.WEEKLY,MONTHLY:$0.MONTHLY,YEARLY:$0.YEARLY},L$=Object.fromEntries(Object.entries(C2).map(([P,$])=>[$,P])),g2=[$0.SU,$0.MO,$0.TU,$0.WE,$0.TH,$0.FR,$0.SA],A$=[{type:"never",id:"never",labelKey:"never"},{type:"count",id:"after",labelKey:"after"},{type:"until",id:"on",labelKey:"on"}],c5=(P)=>Math.max(1,Number.parseInt(P,10)||1),N$=(P,$)=>{if(!P)return $("customRecurrence");try{let Z=new $0(P).toText();return Z&&!Z.toLowerCase().includes("error")?Z.charAt(0).toUpperCase()+Z.slice(1):$("customRecurrence")}catch{return $("customRecurrence")}},i5=({value:P,onChange:$})=>{let{t:Z,firstDayOfWeek:X}=B((z)=>({t:z.t,firstDayOfWeek:z.firstDayOfWeek})),[J,Y]=y5(!!P),[Q,q]=y5(()=>P||null),U=g2.map((z,L)=>({value:z,label:p().day(L).format("ddd")})),_=g2.map((z,L)=>U[(L+X)%7]);G$(()=>{if(Y(!!P),P)q(P)},[P]);let G=(z)=>{if(!Q)return;let L={...Q,...z};q(L),$(J?L:null)},K=(z)=>{if(Y(z),!z){$(null);return}if(Q){$(Q);return}let L={freq:$0.DAILY,interval:1};q(L),$(L)},V=(z)=>{let L=Q?.byweekday||[],W=g2[z],R=L.includes(W)?L.filter((I)=>I!==W):[...L,W];G({byweekday:R.length?R:void 0})},O=(z)=>{let L={count:void 0,until:void 0};if(z==="count")L.count=Q?.count||1;if(z==="until")L.until=Q?.until||p().add(1,"month").endOf("day").toDate();G(L)},N=Q?.until?"until":Q?.count?"count":"never",f=L$[Q?.freq??$0.DAILY]||"DAILY",F=Array.isArray(Q?.byweekday)?Q.byweekday:Q?.byweekday?[Q.byweekday]:[];return U0(k5,{"data-testid":"recurrence-editor",children:[U0(m5,{className:"pb-3",children:[U0("div",{className:"flex items-center space-x-2",children:[v(KP,{checked:J,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:K}),v(g5,{className:"text-sm",children:Z("repeat")})]}),J&&P&&v("p",{className:"text-xs text-muted-foreground",children:N$(P,Z)})]}),J&&v(C5,{className:"pt-0",children:U0("div",{className:"space-y-4",children:[U0("div",{className:"grid grid-cols-2 gap-4",children:[U0("div",{children:[v(q0,{className:"text-xs",htmlFor:"frequency",children:Z("repeats")}),U0(E5,{onValueChange:(z)=>G({freq:C2[z]}),value:f,children:[v(D5,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:v(j5,{})}),v(x5,{children:Object.keys(C2).map((z)=>v(v5,{value:z,children:Z(z.toLowerCase())},z))})]})]}),U0("div",{children:[v(q0,{className:"text-xs",htmlFor:"interval",children:Z("every")}),v(e0,{className:"h-8",id:"interval",min:"1",onChange:(z)=>G({interval:c5(z.target.value)}),type:"number",value:Q?.interval||1})]})]}),Q?.freq===$0.WEEKLY&&U0("div",{children:[v(q0,{className:"text-xs",children:Z("repeatOn")}),v("div",{className:"flex flex-wrap gap-1 mt-1",children:_.map((z,L)=>U0("div",{className:"flex items-center space-x-1",children:[v(KP,{checked:F.includes(z.value),id:M.listKey("day",L),onCheckedChange:()=>V(L)}),v(q0,{className:"text-xs cursor-pointer",htmlFor:M.listKey("day",L),children:z.label})]},M.listKey("weekday",L)))})]}),U0("div",{children:[v(q0,{className:"text-xs",children:Z("ends")}),v("div",{className:"space-y-2 mt-1",children:A$.map(({type:z,id:L,labelKey:W})=>U0("div",{className:"flex items-center space-x-2",children:[v(KP,{checked:N===z,id:L,onCheckedChange:()=>O(z)}),v(q0,{className:"text-xs",htmlFor:L,children:Z(W)}),z==="count"&&N==="count"&&U0(V$,{children:[v(e0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(R)=>G({count:c5(R.target.value)}),type:"number",value:Q?.count||1}),v("span",{className:"text-xs",children:Z("occurrences")})]}),z==="until"&&N==="until"&&v(lP,{className:"h-6",date:Q?.until??void 0,onChange:(R)=>G({until:R?p(R).endOf("day").toDate():void 0})})]},z))})]})]})})]})};import{useCallback as rP,useState as W$}from"react";var l5={isOpen:!1,operationType:"edit",event:null};function u5(P){let{updateRecurringEvent:$,deleteRecurringEvent:Z}=B((_)=>({updateRecurringEvent:_.updateRecurringEvent,deleteRecurringEvent:_.deleteRecurringEvent})),[X,J]=W$(l5),Y=rP((_,G)=>{J({isOpen:!0,operationType:"edit",event:_,updates:G,onConfirm:(K)=>{$(_,G,{scope:K,eventDate:_.start})}})},[$]),Q=rP((_)=>{J({isOpen:!0,operationType:"delete",event:_,onConfirm:(G)=>{Z(_,{scope:G,eventDate:_.start})}})},[Z]),q=rP(()=>J(l5),[]),U=rP((_)=>{if(X.onConfirm)X.onConfirm(_);q(),P?.()},[X,q,P]);return{dialogState:X,openEditDialog:Y,openDeleteDialog:Q,closeDialog:q,handleConfirm:U}}import{useMemo as F$}from"react";var nP=(P)=>{let{businessHours:$,getResourceById:Z}=B((X)=>({businessHours:X.businessHours,getResourceById:X.getResourceById}));return F$(()=>{if(P!=null&&Z){let X=Z(P);if(X?.businessHours)return X.businessHours}return $},[P,Z,$])};import{jsx as y,jsxs as S0,Fragment as B$}from"react/jsx-runtime";var o5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],h2=({name:P,label:$,placeholder:Z,value:X,required:J=!1,onChange:Y})=>S0("div",{className:"grid gap-1 sm:gap-2",children:[y(q0,{className:"text-xs sm:text-sm",htmlFor:P,children:$}),y(e0,{className:"h-8 text-sm sm:h-9",id:P,name:P,onChange:Y,placeholder:Z,required:J,value:X})]}),d5=({selectedEvent:P,onClose:$,onUpdate:Z,onDelete:X,onAdd:J})=>{let{dialogState:Y,openEditDialog:Q,openDeleteDialog:q,closeDialog:U,handleConfirm:_}=u5($),{findParentRecurringEvent:G,t:K,timeFormat:V}=B((H)=>({findParentRecurringEvent:H.findParentRecurringEvent,t:H.t,timeFormat:H.timeFormat})),O=nP(P?.resourceId),N=P?.start??p(),f=P?.end??p().add(1,"hour"),F=P?G(P):null,[z,L]=l0(N.toDate()),[W,R]=l0(f.toDate()),[I,S]=l0(P?.allDay||!1),[w,k]=l0(P?.color||o5[0].value),[C,E]=l0(N.format("HH:mm")),[c,a]=l0(f.format("HH:mm")),[j,m]=l0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[l,_0]=l0(()=>{return P?.rrule||F?.rrule||null}),L0=(H)=>{if(!H)return;if(L(H),p(H).isAfter(p(W)))R(H)},M0=(H)=>{if(!H)return;if(R(H),H&&p(H).isBefore(p(z)))L(H)},H0=(H)=>{if(E(H),p(z).isSame(p(W),"day")&&H>c)a(H)},J0=(H)=>{if(a(H),p(z).isSame(p(W),"day")&&H<C)E(H)},A0=(H)=>{let{name:e,value:Q0}=H.target;m((N0)=>({...N0,[e]:Q0}))};M$(()=>{if(I)a("23:59")},[I]);let K0=(H)=>{H.preventDefault();let e=w2(z,C,I),Q0=w5(W,c,I),N0={id:P?.id||p().format("YYYYMMDDHHmmss"),title:j.title,start:e,end:Q0,resourceId:P?.resourceId,description:j.description,location:j.location,allDay:I,color:w,rrule:l||void 0};if(P?.id&&UP(P)){Q(P,{title:j.title,start:e,end:Q0,description:j.description,location:j.location,allDay:I,color:w,rrule:l||void 0});return}if(P?.id)Z?.(N0);else J?.(N0);$()},Z0=()=>{if(P?.id){if(UP(P)){q(P);return}X?.(P),$()}},b0=(H)=>{if(!H){_0(null);return}let e=w2(z,C,I);_0({...H,dtstart:e.toDate()})},w0=O?(H)=>!b2(p(H),O):void 0,k0=k2(z,O),i=k2(W,O),X0=[["startDate",z,L0],["endDate",W,M0]],$P=[["startTime","start-time",C,H0,k0],["endTime","end-time",c,J0,i]];return S0(B$,{children:[S0("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:K0,children:[y(I0,{className:"flex-1 min-h-0",children:S0("div",{className:"grid gap-3 sm:gap-4 p-1",children:[y(h2,{label:K("title"),name:"title",onChange:A0,placeholder:K("eventTitlePlaceholder"),required:!0,value:j.title}),y(h2,{label:K("description"),name:"description",onChange:A0,placeholder:K("eventDescriptionPlaceholder"),value:j.description}),S0("div",{className:"flex items-center space-x-2",children:[y(KP,{checked:I,id:"allDay",onCheckedChange:(H)=>S(H===!0)}),y(q0,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:K("allDay")})]}),y("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:X0.map(([H,e,Q0])=>S0("div",{children:[y(q0,{className:"text-xs sm:text-sm",children:K(H)}),y(lP,{className:"mt-1",closeOnSelect:!0,date:e,disabled:w0,onChange:Q0})]},H))}),!I&&y("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:$P.map(([H,e,Q0,N0,a0])=>S0("div",{children:[y(q0,{className:"text-xs sm:text-sm",children:K(H)}),y(H5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:a0.max,minTime:a0.min,name:e,onChange:N0,placeholder:K("searchTime"),timeFormat:V,value:Q0})]},H))}),S0("div",{className:"grid gap-1 sm:gap-2",children:[y(q0,{className:"text-xs sm:text-sm",children:K("color")}),y("div",{className:"flex flex-wrap gap-2",children:o5.map((H)=>y(g,{"aria-label":H.label,className:A(`${H.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,w===H.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>k(H.value),type:"button",variant:"ghost"},H.value))})]}),y(h2,{label:K("location"),name:"location",onChange:A0,placeholder:K("eventLocationPlaceholder"),value:j.location}),y(i5,{onChange:b0,value:l})]})}),S0(gP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&y(g,{className:"w-full sm:mr-auto sm:w-auto",onClick:Z0,size:"sm",type:"button",variant:"destructive",children:K("delete")}),S0("div",{className:"flex w-full gap-2 sm:w-auto",children:[y(g,{className:"flex-1 sm:flex-none",onClick:$,size:"sm",type:"button",variant:"outline",children:K("cancel")}),y(g,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?K("update"):K("create")})]})]})]}),y(fP,{eventTitle:Y.event?.title||"",isOpen:Y.isOpen,onClose:U,onConfirm:_,operationType:Y.operationType})]})};import{jsx as aP,jsxs as r5}from"react/jsx-runtime";var tP=()=>{let{t:P,selectedEvent:$,isEventFormOpen:Z,closeEventForm:X,addEvent:J,updateEvent:Y,deleteEvent:Q,renderEventForm:q}=B((K)=>({t:K.t,selectedEvent:K.selectedEvent,isEventFormOpen:K.isEventFormOpen,closeEventForm:K.closeEventForm,addEvent:K.addEvent,updateEvent:K.updateEvent,deleteEvent:K.deleteEvent,renderEventForm:K.renderEventForm})),G={open:Z,onClose:X,selectedEvent:$,onAdd:J,onUpdate:(K)=>{Y(K.id,K)},onDelete:(K)=>{Q(K.id)}};if(q)return q(G);return aP(JP,{onOpenChange:X,open:Z,children:r5(QP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[r5(YP,{className:"mb-2 sm:mb-4 shrink-0",children:[aP(qP,{className:"text-base sm:text-lg",children:$?.id?P("editEvent"):P("createEvent")}),aP(CP,{className:"text-xs sm:text-sm",children:$?.id?P("editEventDetails"):P("addNewEvent")})]}),aP(d5,{...G})]})})};import{Calendar as h$,Download as E$,Menu as j$,Plus as D$}from"lucide-react";import{useState as x$}from"react";import{RRule as O$}from"rrule";var E2=`\r
2
- `,f$=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(E2),eP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
- `,"\\n").replaceAll("\r","")},sP=(P,$=!1)=>{return $?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},n5=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},R$=(P)=>{try{return new O$(P).toString().split(`
4
- `).find((Z)=>Z.startsWith("RRULE:"))||""}catch{return""}},I$=(P)=>{let $=p().utc().format("YYYYMMDD[T]HHmmss[Z]"),Z=P.allDay?";VALUE=DATE":"",X=P.rrule?R$(P.rrule):"",J=P.exdates?.length?P.exdates.map((q)=>sP(p(q),P.allDay)).join(","):null,Y=P.recurrenceId?sP(p(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${n5(P)}`,`DTSTART${Z}:${sP(P.start,P.allDay)}`,`DTEND${Z}:${sP(P.end,P.allDay)}`,`SUMMARY:${eP(P.title)}`,P.description&&`DESCRIPTION:${eP(P.description)}`,P.location&&`LOCATION:${eP(P.location)}`,X,J&&`EXDATE:${J}`,Y&&`RECURRENCE-ID:${Y}`,`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(E2)},S$=(P)=>{let $=new Set;return P.filter((Z)=>{let X=n5(Z),J=Z.rrule&&!Z.recurrenceId,Y=Z.recurrenceId&&!Z.rrule;if(J)return $.add(X),!0;if(Y)return!0;return!Z.rrule&&!Z.recurrenceId&&!$.has(X)})},p$=(P,$="ilamy Calendar")=>{let Z=eP($),X=S$(P).map(I$);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${Z}`,`X-WR-CALDESC:Exported from ${Z}`,f$,...X,"END:VCALENDAR"].join(E2)},a5=(P,$="calendar.ics",Z="ilamy Calendar")=>{let X=new Blob([p$(P,Z)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(X),Y=$.endsWith(".ics")?$:`${$}.ics`,Q=document.createElement("a");Q.href=J,Q.download=Y,document.body.append(Q),Q.click(),Q.remove(),URL.revokeObjectURL(J)};import{ChevronDown as T$}from"lucide-react";import{useState as H$}from"react";function t5(){let{currentLocale:P,timezone:$}=B((X)=>({currentLocale:X.currentLocale,timezone:X.timezone}));return{formatDateRange:(X,J)=>new Intl.DateTimeFormat(P,{timeZone:$,month:"short",day:"numeric"}).formatRange(X.toDate(),J.toDate())}}import{jsx as n,jsxs as j2,Fragment as P2}from"react/jsx-runtime";var b$=()=>{let{currentDate:P,view:$,selectDate:Z,t:X,firstDayOfWeek:J}=B((L)=>({currentDate:L.currentDate,view:L.view,selectDate:L.selectDate,t:L.t,firstDayOfWeek:L.firstDayOfWeek})),{formatDateRange:Y}=t5(),[Q,q]=H$(null),U=Array.from({length:12},(L,W)=>P.month(W).format("MMMM")),_=P.year(),G=Array.from({length:11},(L,W)=>_-5+W),K=d(P,J),V=(L)=>{Z(L),q(null)},O=()=>n(P2,{children:U.map((L,W)=>n(g,{className:A("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>V(P.month(W)),variant:"ghost",children:L},W))}),N=()=>n(P2,{children:G.map((L)=>n(g,{className:A("justify-start font-normal",P.year()===L&&"bg-primary/10"),onClick:()=>V(P.year(L)),variant:"ghost",children:L},L))}),f=()=>n(P2,{children:Array.from({length:7},(L,W)=>{let R=P.subtract(3,"week").add(W,"week"),I=d(R,J),S=I[0],w=I[6],k=R.isSame(P,"week");return n(g,{className:A("justify-start font-normal",k&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:n("div",{className:"flex w-full items-center justify-between",children:n("span",{children:Y(S,w)})})},r(S))})}),F=()=>{let L=P.startOf("month"),W=P.daysInMonth();return n(P2,{children:Array.from({length:W},(R,I)=>{let S=L.date(I+1),w=S.isSame(P,"day"),k=u(S);return n(g,{className:A("justify-start font-normal",w&&"bg-primary/10"),onClick:()=>V(S),variant:"ghost",children:j2("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:S.format("ll")}),k&&n("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:X("today")})]})},r(S))})})};return[{id:"month",hidden:$==="year",title:P.format("MMMM"),render:O},{id:"year",hidden:!1,title:P.format("YYYY"),render:N},{id:"week",hidden:$!=="week",title:Y(K[0],K[6]),render:f},{id:"day",hidden:$!=="day",title:P.format("dddd, D"),render:F}].filter((L)=>!L.hidden).map((L)=>j2(v0,{onOpenChange:(W)=>q(W?L.id:null),open:Q===L.id,children:[n(y0,{asChild:!0,children:j2(g,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[n(x,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",transitionKey:M.listKey(L.id,r(P)),children:L.title}),n(T$,{className:"h-4 w-4"})]})}),n(c0,{className:"w-40 p-0",children:n("div",{className:"flex max-h-60 flex-col overflow-auto",children:L.render()})})]},L.id))},s5=b$;import{ChevronLeft as w$,ChevronRight as k$}from"lucide-react";import{jsx as AP,jsxs as C$}from"react/jsx-runtime";var m$=["day","week","month","year"],g$=({currentView:P,onChange:$,variant:Z="default",size:X="sm",className:J,onToday:Y,onNext:Q,onPrevious:q})=>{let{t:U,resources:_}=B((N)=>({t:N.t,resources:N.resources})),G=Z==="grid",K=_&&_.length>0,V=(N)=>{return A(G?"w-full":"",P===N&&"bg-primary/80")},O=(N)=>{return P===N?"default":"outline"};return C$("div",{className:A(G?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[AP(g,{onClick:q,size:X,variant:"outline",children:AP(w$,{className:"h-4 w-4"})}),AP(g,{onClick:Q,size:X,variant:"outline",children:AP(k$,{className:"h-4 w-4"})}),m$.map((N)=>{if(K&&N==="year")return null;return AP(g,{className:V(N),onClick:()=>$(N),size:X,variant:O(N),children:U(N)},N)}),AP(g,{onClick:Y,size:X,variant:"outline",children:U("today")})]})},D2=g$;import{jsx as o,jsxs as C0}from"react/jsx-runtime";var v$=({className:P=""})=>{let{view:$,setView:Z,nextPeriod:X,prevPeriod:J,today:Y,openEventForm:Q,headerComponent:q,headerClassName:U,rawEvents:_,t:G,hideExportButton:K}=B((W)=>({view:W.view,setView:W.setView,nextPeriod:W.nextPeriod,prevPeriod:W.prevPeriod,today:W.today,openEventForm:W.openEventForm,headerComponent:W.headerComponent,headerClassName:W.headerClassName,rawEvents:W.rawEvents,t:W.t,hideExportButton:W.hideExportButton})),[V,O]=x$(!1),N=()=>O(!1),f=(W)=>(...R)=>{W(...R),N()},F=()=>{let W=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;a5(_,W,"ilamy Calendar"),N()},z=()=>C0(g,{className:"flex items-center gap-1",onClick:()=>Q(),size:"sm",variant:"default",children:[o(D$,{className:"h-4 w-4"}),o("span",{className:"hidden @4xl:inline",children:G("new")})]}),L=({fullWidth:W=!1})=>C0(g,{className:A("flex items-center gap-1",W&&"w-full gap-2"),onClick:F,size:"sm",variant:"outline",children:[o(E$,{className:"h-4 w-4"}),W?`${G("export")} Calendar (.ics)`:o("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]});if(q)return q;return o("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:C0("div",{className:A("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,U),children:[C0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[o(h$,{className:"h-5 w-5"}),o(s5,{})]}),C0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[C0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[o(D2,{className:"justify-end",currentView:$,onChange:Z,onNext:X,onPrevious:J,onToday:Y,variant:"default"}),o(z,{}),!K&&o(L,{})]}),C0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[o(z,{}),C0(v0,{onOpenChange:O,open:V,children:[o(y0,{asChild:!0,children:o(g,{size:"sm",variant:"outline",children:o(j$,{className:"h-4 w-4"})})}),o(c0,{align:"end",className:"w-[240px] p-2",children:C0("div",{className:"space-y-2",children:[o(D2,{currentView:$,onChange:f(Z),onNext:f(X),onPrevious:f(J),onToday:f(Y),variant:"grid"}),!K&&o("div",{className:"pt-2 border-t",children:o(L,{fullWidth:!0})})]})})]})]})]})]})})},IP=v$;import{memo as L9}from"react";import{memo as Y1,useMemo as U9}from"react";import{useMemo as x2}from"react";var e5=({days:P,events:$,dayMaxEvents:Z,dayNumberHeight:X=Z5,gridType:J="day",eventSpacing:Y=j0,eventBarHeight:Q=B0})=>{let q=P.at(0),U=P.at(-1);if(!q||!U)return[];let _=J==="hour"?q.startOf("hour"):q.startOf("day"),G=J==="hour"?U.endOf("hour"):U.endOf("day"),K=P.length,V=$.filter((R)=>R.end.diff(R.start,J)>0),O=$.filter((R)=>R.end.diff(R.start,J)===0),N=[...V].sort((R,I)=>{let S=R.start.diff(I.start);if(S!==0)return S;return I.end.diff(I.start)-R.end.diff(R.start)}),f=[...O].sort((R,I)=>R.start.diff(I.start)),F=Array.from({length:Z},()=>Array.from({length:K},()=>({taken:!1,event:null}))),z=[],L=(R,I)=>{for(let S=0;S<Z;S++){let w=!0;for(let k=R;k<=I;k++)if(F[S][k].taken){w=!1;break}if(w)return S}return-1},W=(R,I,S,w,k,C)=>{for(let c=I;c<=S;c++)F[R][c]={taken:!0,event:w};let E=S-I+1;z.push({left:I/K*100,width:E/K*100,top:X+Y+R*(Q+Y),height:Q,position:R,...w,isTruncatedStart:k,isTruncatedEnd:C})};for(let R of N){let I=p.max(R.start.startOf(J),_),S=J==="hour"?R.end.subtract(1,"minute"):R.end,w=p.min(S.startOf(J),G),k=Math.max(0,I.diff(_,J)),C=Math.min(K-1,w.diff(_,J)),E=R.start.startOf(J).isBefore(_),c=R.end.startOf(J).isAfter(G),a=L(k,C);if(a!==-1){W(a,k,C,R,E,c);continue}for(let j=k+1;j<=C;j++){let m=L(j,C);if(m!==-1){W(m,j,C,R,!0,c);break}}}for(let R of f){let I=p.max(R.start.startOf(J),_),S=Math.max(0,Math.min(K-1,I.diff(_,J))),w=L(S,S);if(w!==-1)W(w,S,S,R,!1,!1)}return z};var v2=({days:P,allDay:$,dayNumberHeight:Z,resourceId:X,gridType:J})=>{let{getEventsForDateRange:Y,dayMaxEvents:Q,eventSpacing:q,eventHeight:U,getEventsForResource:_}=B(),G=P.at(0),K=P.at(-1),V=G?.startOf("day"),O=K?.endOf("day"),N=x2(()=>{if(!V||!O)return[];let z=Y(V,O);if(X)z=_P(z,_(X));if($)z=z.filter((L)=>!!L.allDay===$);return z},[Y,_,V,O,X,$]),f=x2(()=>{let z=new Map;for(let L of P){let W=r(L),R=L.startOf("day"),I=L.endOf("day"),S=N.filter((w)=>DP(w,R,I));z.set(W,S)}return z},[P,N]);return{positionedEvents:x2(()=>{return e5({days:P,events:N,dayMaxEvents:Q,dayNumberHeight:Z,eventSpacing:q,eventBarHeight:U,gridType:J})},[P,Q,Z,q,U,N,J]),dayEventsMap:f}};import s$,{memo as e$,useMemo as P9}from"react";import{jsx as y$}from"react/jsx-runtime";var P1=({date:P,className:$})=>{let Z=u(P);return y$("div",{className:A("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",Z&&"bg-primary text-primary-foreground font-medium",$),"data-testid":M.dayNumber(P),children:P.format("D")})};import{useImperativeHandle as d$,useState as $1}from"react";import{useDraggable as c$}from"@dnd-kit/core";import{memo as i$}from"react";import{jsx as SP,jsxs as o$}from"react/jsx-runtime";var l$=(P,$)=>{if(P&&$)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if($)return"rounded-l-md rounded-r-none";return"rounded-md"};function u$({elementId:P,event:$,className:Z,style:X,disableDrag:J=!1}){let{onEventClick:Y,renderEvent:Q,disableEventClick:q,disableDragAndDrop:U}=B(),{attributes:_,listeners:G,setNodeRef:K,isDragging:V}=c$({id:P,data:{event:$,type:"calendar-event"},disabled:J||U}),O=()=>{let N=$,f=N.isTruncatedStart,F=N.isTruncatedEnd;return o$("div",{className:A($.backgroundColor||"bg-blue-500",$.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",l$(Boolean(f),Boolean(F))),style:{backgroundColor:$.backgroundColor,color:$.color},children:[f&&SP("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),SP("p",{className:A("text-[10px] font-semibold sm:text-xs mt-0.5",f&&"pl-1",F&&"pr-1"),children:$.title}),F&&SP("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return SP(x,{className:A("truncate h-full w-full",J||U?q?"cursor-default":"cursor-pointer":"cursor-grab",V&&!(J||U)&&"cursor-grabbing shadow-lg",Z),layout:!0,layoutId:P,onClick:(N)=>{N.stopPropagation(),Y($)},ref:K,style:X,transitionKey:P,..._,...G,children:Q?Q($):SP(O,{})})}var NP=i$(u$,(P,$)=>{return P.elementId===$.elementId&&P.disableDrag===$.disableDrag&&P.className===$.className&&P.event===$.event});import{jsx as pP,jsxs as r$}from"react/jsx-runtime";var Z1=({ref:P})=>{let[$,Z]=$1(!1),[X,J]=$1(null),{currentDate:Y,firstDayOfWeek:Q,eventHeight:q}=B();d$(P,()=>({open:()=>Z(!0),close:()=>Z(!1),setSelectedDayEvents:(G)=>J(G)}));let _=Y.startOf("month").clone();while(_.day()!==Q)_=_.subtract(1,"day");return pP(JP,{onOpenChange:Z,open:$,children:r$(QP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[pP(YP,{children:pP(qP,{children:X?.day.format("MMMM D, YYYY")})}),pP("div",{className:"mt-4 space-y-3",children:X?.events.map((G)=>{return pP(NP,{className:"relative my-1",elementId:`all-events-dialog-event-$${G.id}`,event:G,style:{height:`${q}px`}},G.id)})})]})})};import{useDroppable as n$}from"@dnd-kit/core";import{jsx as t$}from"react/jsx-runtime";function a$(P,$,Z){let X=P.hour($??0).minute(Z??0);if($!==void 0&&Z!==void 0)return{start:X,end:X.minute(Z+15)};if($!==void 0)return{start:X,end:X.hour($+1).minute(0)};return{start:X,end:X.hour(23).minute(59)}}function X1({id:P,type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q,children:q,className:U,style:_,"data-testid":G,disabled:K=!1}){let{onCellClick:V,isCellDisabled:O,getResourceById:N,disableDragAndDrop:f,disableCellClick:F,classesOverride:z,view:L}=B(),{start:W,end:R}=a$(Z,X,J),I=N?.(Y),S={start:W,end:R,resource:I,allDay:Q},w=K||Boolean(O?.(S)),k=F||w,{isOver:C,setNodeRef:E}=n$({id:P,data:{type:$,date:Z,hour:X,minute:J,resourceId:Y,allDay:Q},disabled:f||w}),c=(m)=>{if(m.stopPropagation(),k)return;V(S)},a=C&&!f&&!w,j=z?.disabledCell||X5;return t$("div",{className:A("droppable-cell",U,a&&"bg-accent",k?"cursor-default":"cursor-pointer",w&&j),"data-disabled":w.toString(),"data-testid":G,"data-view":L,onClick:c,ref:E,style:_,children:q})}import{jsx as $2,jsxs as Z2,Fragment as J1}from"react/jsx-runtime";var $9=({day:P,hour:$,minute:Z,className:X="",resourceId:J,gridType:Y="day",shouldRenderEvents:Q=!0,allDay:q=!1,precomputedEvents:U,"data-testid":_,showDayNumber:G=!1,children:K})=>{let V=s$.useRef(null),{dayMaxEvents:O=0,getEventsForDateRange:N,currentDate:f,t:F,getEventsForResource:z,currentLocale:L,eventSpacing:W,eventHeight:R}=B(),I=nP(J),S=P9(()=>{if(!Q)return[];if(U)return U;let m=N(P.startOf(Y),P.endOf(Y));if(q)m=m.filter((l)=>l.allDay);if(J)return _P(m,z(J)??[]);return m},[U,P,J,N,z,Y,Q,q]),w=(m,l)=>{V.current?.setSelectedDayEvents({day:m,events:l}),V.current?.open()},k=P.month()===f.month(),C=S.length-O,E=C>0,c=b5({date:P,hour:Y==="hour"?P.hour():void 0,businessHours:I}),a=Y==="hour"?M.cell.day(P,P.format("HH"),P.format("mm")):M.cell.day(P),j=M.droppable.dayCell(P,{allDay:q,resourceId:J});return Z2(J1,{children:[$2(X1,{allDay:q,className:A("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r border-b min-w-0",X),"data-testid":_||a,date:P,disabled:!c||!k,hour:$,id:j,minute:Z,resourceId:J,type:"day-cell",children:Z2("div",{className:"flex flex-col h-full w-full","data-testid":"grid-cell-content",style:{gap:`${W}px`},children:[G&&$2(P1,{date:P,locale:L}),Q&&Z2(J1,{children:[S.slice(0,O).map((m,l)=>$2("div",{className:"w-full shrink-0","data-testid":m?.title,style:{height:`${R}px`}},M.listKey("empty",l,m.id))),E&&Z2("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs shrink-0 mt-1",onClick:(m)=>{m.stopPropagation(),w(P,S)},onKeyDown:(m)=>{if(m.key==="Enter"||m.key===" ")m.preventDefault(),m.stopPropagation(),w(P,S)},role:"button",tabIndex:0,children:["+",C," ",F("more")]})]}),K]})}),$2(Z1,{ref:V})]})},TP=e$($9);import{jsx as Q1}from"react/jsx-runtime";var u0=({resource:P,className:$,children:Z,"data-testid":X})=>{let{renderResource:J}=B();return Q1("div",{className:A("flex items-center justify-center p-2 border-r last:border-r-0",$),"data-testid":X,style:{color:P.color,backgroundColor:P.backgroundColor},children:J?J(P):Z??Q1("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as Q9}from"react";import{memo as Z9}from"react";import{jsx as y2,Fragment as J9}from"react/jsx-runtime";var X9=({rangeStart:P,rangeEnd:$,now:Z,resource:X,axis:J="vertical"})=>{let{renderCurrentTimeIndicator:Y,view:Q}=B((V)=>({renderCurrentTimeIndicator:V.renderCurrentTimeIndicator,view:V.view})),q=Z??p();if(!(q.isSameOrAfter(P)&&q.isBefore($)))return null;let _=$.diff(P,"minute"),K=q.diff(P,"minute")/_*100;if(Y)return y2(J9,{children:Y({currentTime:q,rangeStart:P,rangeEnd:$,progress:K,resource:X,view:Q,axis:J})});if(J==="horizontal")return y2("div",{className:"absolute top-0 bottom-0 w-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{left:`${K}%`}});return y2("div",{className:"absolute left-0 right-0 h-0.5 bg-red-500 z-50 pointer-events-none","data-testid":"current-time-indicator",style:{top:`${K}%`}})},X2=Z9(X9);import{jsx as c2,jsxs as q9}from"react/jsx-runtime";var Y9=({gridType:P="day",days:$,resourceId:Z,resource:X,"data-testid":J,positionedEvents:Y})=>{let{eventHeight:Q}=B(),q=$.at(0)?.startOf("day"),U=$.at(0),_=$.at(-1)?.add(1,P),G=P==="hour"&&Boolean(U&&_);return q9("div",{className:"absolute inset-0 pointer-events-none z-10 overflow-clip","data-testid":J,children:[G&&U&&_&&c2(X2,{axis:"horizontal",rangeEnd:_,rangeStart:U,resource:X}),Y.map((K)=>{let V=`${K.id}-${K.position}-${q?.toISOString()}-${Z??"no-resource"}`;return c2("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-left":K.left,"data-testid":M.container.horizontal.event(K.id),"data-top":K.top,"data-width":K.width,style:{left:`calc(${K.left}% + var(--spacing) * 0.25)`,width:`calc(${K.width}% - var(--spacing) * 1)`,top:`${K.top}px`,height:`${Q}px`},children:c2(NP,{className:"h-full w-full shadow",elementId:V,event:K})},M.listKey(V,"wrapper"))})]})},i2=Q9(Y9);import{jsx as W0,jsxs as l2}from"react/jsx-runtime";var z9=({id:P,resource:$,gridType:Z="day",variant:X="resource",dayNumberHeight:J,className:Y,columns:Q=[],allDay:q,showDayNumber:U=!1,isLastRow:_=!1})=>{let{renderResource:G}=B(),K=X==="resource",V=Q.some((F)=>F.days),O=U9(()=>{if(V)return[];return Q.map((F)=>F.day).filter((F)=>Boolean(F))},[Q,V]),{positionedEvents:N,dayEventsMap:f}=v2({days:O,gridType:Z,resourceId:$?.id,dayNumberHeight:J,allDay:q});return l2("div",{className:A("flex flex-1 relative min-w-0",Y),"data-testid":M.container.horizontal.row(P),children:[K&&$&&W0(u0,{className:"w-20 sm:w-40 sticky left-0 bg-background z-20 h-full","data-testid":M.container.horizontal.rowLabel($.id),resource:$,children:G?G($):W0("div",{className:"wrap-break-word text-sm",children:$.title})}),l2("div",{className:"relative flex-1 flex min-w-0",children:[W0("div",{className:"flex w-full min-w-0",children:Q.map((F,z)=>{if(F.days)return W0(_9,{allDay:q,col:F,dayNumberHeight:J,gridType:Z,id:P,isLastCol:z===Q.length-1,isLastRow:_,resource:$,resourceId:$?.id,showDayNumber:U},F.id);return F.day?W0(TP,{allDay:q,className:A("flex-1 w-20",_&&"border-b-0",F.className),day:F.day,gridType:Z,hour:Z==="hour"?F.day.hour():void 0,precomputedEvents:f.get(r(F.day)),resourceId:$?.id,showDayNumber:U},F.day.toISOString()):null})}),!V&&W0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:W0(i2,{"data-testid":M.container.eventsLayer("horizontal",P),days:O,gridType:Z,positionedEvents:N,resource:$,resourceId:$?.id})})]})]})},_9=Y1(({col:P,gridType:$="day",allDay:Z,resource:X,resourceId:J,dayNumberHeight:Y,showDayNumber:Q,isLastRow:q,isLastCol:U,id:_})=>{let G=P.days??[],{positionedEvents:K}=v2({days:G,gridType:$,resourceId:J,dayNumberHeight:Y,allDay:Z});return l2("div",{className:"flex relative w-full",children:[W0("div",{className:"flex w-full",children:G.map((V)=>W0(TP,{allDay:Z,className:A("flex-1 w-20",q&&"border-b-0",!U&&"border-r!",P.className),day:V,gridType:$,hour:$==="hour"?V.hour():void 0,resourceId:J,showDayNumber:Q},V.toISOString()))}),W0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:W0(i2,{"data-testid":M.container.eventsLayer("horizontal",_),days:G,gridType:$,positionedEvents:K,resource:X,resourceId:J})})]})}),J2=Y1(z9);import{memo as K9}from"react";import{jsx as q1}from"react/jsx-runtime";var G9=({className:P})=>{let{t:$}=B();return q1("div",{className:A("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex border-b items-center justify-center px-1 text-xs text-muted-foreground",P),children:q1("span",{className:"truncate",children:$("allDay")})})},VP=K9(G9);import{jsx as U1,jsxs as N9}from"react/jsx-runtime";var A9=({days:P,classes:$,resource:Z,showSpacer:X=!0})=>{let J=P.map((Y,Q)=>({id:M.col.allDay(Y,Q),day:Y,gridType:"day",className:A("h-full min-h-12 border-r last:border-r-0",$?.cell)}));return N9("div",{className:A("flex w-full bg-background",$?.row),"data-testid":"all-day-row",children:[X&&U1(VP,{className:$?.spacer}),U1(J2,{allDay:!0,className:"flex-1 min-h-fit border-b",columns:J,dayNumberHeight:0,gridType:"day",id:M.allDayRow(Z?.id),isLastRow:!0,resource:Z,variant:"regular"})]})},o0=L9(A9);import{jsx as _1,Fragment as z1}from"react/jsx-runtime";var p0=({date:P})=>{let{renderHour:$,timeFormat:Z}=B();if($)return _1(z1,{children:$(P)});return _1(z1,{children:P.format(Z==="12-hour"?"h A":"H")})};import{useRef as m9}from"react";import{useEffect as V9,useRef as W9}from"react";var F9=/^(\d{1,2})(?::\d{1,2})?(?::\d{1,2})?$/,M9="[data-hour]",B9=(P)=>{let $=F9.exec(P);if(!$)return null;let Z=Number.parseInt($[1],10);return Z>=0&&Z<=23?Z:null},u2=(P)=>Number.parseInt(P.getAttribute("data-hour")??"",10),O9=(P,$)=>{let Z=P.at(0),X=P.at(-1);if(!Z||!X)return null;if($<=u2(Z))return Z;if($>=u2(X))return X;return P.find((J)=>u2(J)===$)??null},f9=(P,$,Z,X)=>{let J=$.getBoundingClientRect(),Y=Z.getBoundingClientRect();if(X==="horizontal"){P.scrollTo({left:J.left-Y.left,behavior:"auto"});return}P.scrollTo({top:J.top-Y.top,behavior:"auto"})},Q2=({viewportRef:P,scrollTime:$,enabled:Z,scrollKey:X,axis:J="vertical"})=>{let Y=W9(null);V9(()=>{if(!Z||!$)return;if(Y.current===X)return;let Q=B9($);if(Q===null)return;let q=P.current;if(!q)return;let U=Array.from(q.querySelectorAll(M9)),_=U.at(0),G=O9(U,Q);if(!_||!G)return;f9(q,G,_,J),Y.current=X},[Z,$,X,P,J])};import{memo as p9}from"react";import{memo as R9}from"react";import{useMemo as G1}from"react";var K1=({days:P,gridType:$="hour",events:Z})=>{let X=Z.filter((O)=>!O.allDay).toSorted((O,N)=>O.start.diff(N.start));if(X.length===0)return[];let J=P.at(0)||p(),Y=P.length,Q=$==="day",q=[],U=[],_=null;for(let O of X){if(_&&O.start.isSameOrAfter(_)){if(U.length>0)q.push(U);U=[]}U.push(O),_=_?p.max(_,O.end):O.end}if(U.length>0)q.push(U);let G=(O)=>{let N=O.start.diff(J,$,!0),f=O.end.diff(J,$,!0);if(Q){if(N=Math.floor(N),f=Math.ceil(f),f<=N)f=N+1}if(N<0)N=0;if(f>Y)f=Y;let F=Math.max(0,f-N);if(F===0)return null;return{top:N/Y*100,height:F/Y*100}},K=(O)=>O===2?25:O===3?50:O===4?60:70,V=[];for(let O of q){if(O.length===1){let z=O[0],L=G(z);if(!L)continue;V.push({...z,left:0,width:100,...L});continue}let N=[...O].sort((z,L)=>{let W=L.end.diff(L.start,"minute")-z.end.diff(z.start,"minute");return W!==0?W:z.start.diff(L.start)}),f=N.length,F=f>1?K(f)/(f-1):0;for(let z=0;z<f;z++){let L=N[z],W=G(L);if(!W)continue;let R=z===0?0:F*z;V.push({...L,...W,left:R,width:100-R,zIndex:z+1})}}return V};var L1=({days:P,gridType:$,resourceId:Z})=>{let{getEventsForDateRange:X,getEventsForResource:J}=B(),Y=P.at(0),Q=P.at(-1),q=Y?.startOf("day"),U=Q?.endOf("day"),_=G1(()=>{if(!q||!U)return[];let K=X(q,U);if(Z)K=_P(K,J(Z));return K.filter((V)=>!V.allDay)},[q,U,X,Z,J]);return G1(()=>{return K1({days:P,events:_,gridType:$})},[P,$,_])};import{jsx as o2,jsxs as S9}from"react/jsx-runtime";var I9=({days:P,gridType:$="hour",resourceId:Z,resource:X,"data-testid":J})=>{let Y=L1({days:P,gridType:$,resourceId:Z}),Q=P.at(0),q=P.at(-1)?.add(1,$),U=$==="hour"&&Boolean(Q&&q);return S9("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":J,children:[U&&Q&&q&&o2(X2,{rangeEnd:q,rangeStart:Q,resource:X}),Y.map((_,G)=>{let K=`event-${_.id}-${G}-${P.at(0)?.toISOString()}-${Z??"no-resource"}`,V=_.end.diff(_.start,"minute")<=15;return o2("div",{className:"absolute",style:{left:`${_.left}%`,width:`calc(${_.width}% - var(--spacing) * 2)`,top:`${_.top}%`,height:`${_.height}%`},children:o2(NP,{className:A("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":V}),elementId:K,event:_})},M.listKey(K,"wrapper"))})]})},A1=R9(I9);import{jsx as WP,jsxs as H9}from"react/jsx-runtime";var T9=({id:P,days:$,resourceId:Z,resource:X,"data-testid":J,gridType:Y,className:Q,renderCell:q,noEvents:U,slotDurationMinutes:_=60,isLastColumn:G})=>{let K=Math.floor(60/_),V=Array.from({length:K},(N,f)=>f*_),O=V.length>1;return WP("div",{className:A("flex flex-col flex-1 items-center min-w-20 justify-center bg-background relative",G?"border-r-0":"border-r",Q),"data-testid":J||M.container.vertical.col(P),children:H9("div",{className:"w-full h-full relative grid",style:{gridTemplateRows:`repeat(${$.length}, minmax(0, 1fr))`},children:[$.map((N,f)=>{let F=N.format("HH");if(q){let z=P===M.col.time,L=z?M.cell.verticalTime(F):M.cell.vertical(N,F,"00",Z);return WP("div",{className:"min-h-[60px] border-b border-r","data-hour":z?F:void 0,"data-testid":L,children:q(N)},M.listKey(P,f,F))}return WP("div",{className:"flex flex-col min-h-[60px]",children:V.map((z)=>{let L=String(z).padStart(2,"0"),W=M.cell.vertical(N,F,L,Z);return WP(TP,{className:A("hover:bg-accent relative z-10 flex-1 min-h-0 cursor-pointer border-b border-r-0",O&&"border-dashed"),"data-testid":W,day:O?N.minute(z):N,gridType:Y,hour:N.hour(),minute:O?z:void 0,resourceId:Z,shouldRenderEvents:!1},M.listKey(P,f,L))})},M.listKey(P,f,F))}),!U&&WP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:WP(A1,{"data-testid":M.container.eventsLayer("vertical",P),days:$,gridType:Y,resource:X,resourceId:Z})})]})})},N1=p9(T9);import{memo as b9}from"react";import{jsx as V1,jsxs as k9}from"react/jsx-runtime";var w9=({children:P,classes:$,allDayRow:Z,expandAllDayRow:X=!1})=>{let{stickyViewHeader:J,viewHeaderClassName:Y}=B((q)=>({stickyViewHeader:q.stickyViewHeader,viewHeaderClassName:q.viewHeaderClassName})),Q="min-w-full w-fit";return k9("div",{className:A(X&&"flex h-full flex-col",J&&"sticky top-0 z-21 bg-background",Y),children:[V1("div",{className:A("h-12 border-b","min-w-full w-fit",$?.header),"data-testid":"vertical-grid-header",children:P}),Z&&V1("div",{className:A("flex min-h-12","min-w-full w-fit",X&&"flex-1 overflow-hidden",$?.allDay),"data-testid":"vertical-grid-all-day",children:Z})]})},W1=b9(w9);import{jsx as FP,jsxs as F1}from"react/jsx-runtime";var T0=({columns:P,children:$,gridType:Z="day",variant:X="resource",classes:J,allDayRow:Y,slotDurationMinutes:Q,style:q})=>{let U=X==="resource",_=!U,G=P.every((z)=>!z.days?.length),{currentDate:K,view:V,scrollTime:O}=B(),N=m9(null);Q2({viewportRef:N,scrollTime:O,enabled:Z==="hour"&&!G,scrollKey:`${V}-${K.format("YYYY-MM-DD")}`});let F=$&&FP(W1,{allDayRow:Y,classes:{header:J?.header,allDay:J?.allDay},expandAllDayRow:G,children:$});if(G&&F)return FP("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:F});return F1("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:q,children:[_&&F,F1(I0,{className:A("h-full",_&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:N},children:[U&&F,FP("div",{className:A("flex flex-1 min-w-full w-fit",J?.body),"data-testid":"vertical-grid-body",children:P.map((z,L)=>FP(N1,{...z,gridType:Z,isLastColumn:L===P.length-1,slotDurationMinutes:Q},M.listKey(z.id,L)))}),FP(g0,{className:"z-30"})," ",FP(g0,{className:"z-30",orientation:"horizontal"})," "]})]})};function z0({referenceDate:P,businessHours:$,hideNonBusinessHours:Z,allDates:X=[P],resourceBusinessHours:J=[]}){let Y=G5({referenceDate:P}),Q=!!$||J.length>0;if(!(Z&&Q))return Y;let{minStart:U,maxEnd:_,hasBusinessHours:G}=oP({allDates:X,businessHours:$,resourceBusinessHours:J,hideNonBusinessHours:Z});if(!G)return Y;if(U>=_)return[];return Y.filter((K)=>{let V=K.hour();return V>=U&&V<_})}import{jsx as MP,jsxs as g9}from"react/jsx-runtime";var M1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=B(),Y=u(P),Q=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P]}),q={id:M.col.time,day:void 0,days:Q,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(_)=>MP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:MP(p0,{date:_})})},U={id:M.col.day(P),day:P,days:Q,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return MP(T0,{allDayRow:MP(o0,{days:[P]}),classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[q,U],gridType:"hour",slotDurationMinutes:J,variant:"regular",children:MP("div",{className:"flex flex-1 justify-center items-center min-h-12","data-testid":"day-view-header",children:g9(x,{className:A("flex justify-center items-center text-center text-sm font-semibold sm:text-xl",Y&&"text-primary"),transitionKey:r(P),children:[P.format("dddd, LL"),Y&&MP("span",{className:"bg-primary text-primary-foreground ml-2 rounded-full px-1 py-0.5 text-xs sm:px-2 sm:text-sm",children:$("today")})]})})})};import{useMemo as D9}from"react";import{useRef as j9}from"react";import{memo as C9}from"react";import{jsx as E9}from"react/jsx-runtime";var h9=({children:P,className:$})=>{let{stickyViewHeader:Z,viewHeaderClassName:X}=B((J)=>({stickyViewHeader:J.stickyViewHeader,viewHeaderClassName:J.viewHeaderClassName}));return E9("div",{className:A("flex h-12 w-fit",Z&&"sticky top-0 z-21 bg-background",$,X),"data-testid":"horizontal-grid-header",children:P})},B1=C9(h9);import{jsx as BP,jsxs as O1}from"react/jsx-runtime";var Y2=({rows:P,children:$,classes:Z,allDay:X,gridType:J,variant:Y="resource",dayNumberHeight:Q})=>{let{currentDate:q,view:U,scrollTime:_}=B(),G=j9(null),K=Y==="resource",V=!K;Q2({viewportRef:G,scrollTime:_,enabled:J==="hour"&&K,scrollKey:`${U}-${q.format("YYYY-MM-DD")}`,axis:"horizontal"});let N=$&&BP(B1,{className:Z?.header,children:$});return O1("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[V&&N,O1(I0,{className:A("h-full",V&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:G},children:[K&&N,BP("div",{className:A("flex flex-1 w-fit",Z?.body),"data-testid":"horizontal-grid-body",children:BP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((f,F)=>BP(J2,{allDay:f.allDay??X,dayNumberHeight:Q,gridType:J,isLastRow:F===P.length-1,variant:Y,...f},f.id))},q.format("YYYY-MM"))}),BP(g0,{className:"z-30"}),BP(g0,{className:"z-30",orientation:"horizontal"})]})]})};import{jsx as d2}from"react/jsx-runtime";var f1=({className:P})=>{let{firstDayOfWeek:$,stickyViewHeader:Z,viewHeaderClassName:X,currentDate:J}=B(),Y=d(J,$);return d2("div",{className:A("flex w-full",Z&&"sticky top-0 z-20",X,P),"data-testid":"month-header",children:Y.map((Q,q)=>d2(x,{className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1 min-w-0","data-testid":M.header.weekday("month",Q.format("ddd")),delay:q*0.05,transitionKey:Q.toISOString(),children:d2("span",{className:"text-sm capitalize truncate w-full block",children:Q.format("ddd")})},Q.toISOString()))})};import{jsx as R1}from"react/jsx-runtime";var I1=()=>{let{currentDate:P,firstDayOfWeek:$}=B(),X=D9(()=>zP(P,$),[P,$]).map((J,Y)=>({id:M.listKey("week",Y),columns:J.map((Q)=>({id:M.col.day(Q),day:Q,className:"w-auto",gridType:"day"})),className:"flex-1",showDayNumber:!0}));return R1(Y2,{classes:{body:"w-full",header:"w-full"},rows:X,variant:"regular",children:R1(f1,{className:"h-12"})})};import{useMemo as q2}from"react";import{jsx as h0,jsxs as r2}from"react/jsx-runtime";var S1="flex-1 min-w-0",p1="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",T1=()=>{let{t:P,currentDate:$,firstDayOfWeek:Z,selectDate:X,openEventForm:J,businessHours:Y,hideNonBusinessHours:Q,hiddenDays:q,slotDuration:U}=B(),_=q2(()=>d($,Z),[$,Z]),G=q2(()=>q?_.filter((F)=>!q.has(F.day())):_,[_,q]),K=q2(()=>z0({referenceDate:$,businessHours:Y,hideNonBusinessHours:Q,allDates:_}),[$,Y,Q,_]),V={id:M.col.time,days:K,day:void 0,className:`shrink-0 ${p1} sticky left-0 bg-background z-20 border-r-0`,gridType:"hour",noEvents:!0,renderCell:(F)=>h0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:h0(p0,{date:F})})},O=q2(()=>{return G.map((F)=>({id:M.col.day(F),day:F,label:F.format("D"),className:S1,days:z0({referenceDate:F,businessHours:Y,hideNonBusinessHours:Q,allDates:_}),value:F}))},[_,Y,Q,G.map]),N={"--visible-days":G.length},f="w-full";return h0(T0,{allDayRow:h0(o0,{classes:{cell:S1,spacer:p1},days:G}),classes:{header:"w-full h-18",allDay:"w-full",body:"w-full"},columns:[V,...O],gridType:"hour",slotDurationMinutes:U,style:N,variant:"regular",children:r2("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[h0("div",{className:"w-10 sm:w-16 min-w-10 sm:min-w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:r2("div",{className:"flex flex-col items-center justify-center min-w-0 w-full",children:[h0("span",{className:"text-muted-foreground text-xs truncate w-full text-center",children:P("week")}),h0("span",{className:"font-medium truncate w-full text-center",children:$.week()})]})}),G.map((F,z)=>{let L=u(F),W=M.header.week.day(F);return r2(x,{className:A("hover:bg-accent flex-1 min-w-0 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-20 h-full",L&&"bg-primary/10 font-bold"),"data-testid":M.header.weekday("week",F.format("dddd")),delay:z*0.05,onClick:()=>{X(F),J({start:F})},transitionKey:W,children:[h0("div",{className:"text-xs sm:text-sm truncate w-full",children:F.format("ddd")}),h0("div",{className:A("mx-auto mt-1 flex h-6 w-6 items-center justify-center rounded-full text-xs",L&&"bg-primary text-primary-foreground"),children:F.format("D")})]},W)})]})})};import{jsx as d0,jsxs as HP}from"react/jsx-runtime";var x9=["bg-primary","bg-blue-500","bg-green-500"],v9=42,H1=()=>{let{currentDate:P,selectDate:$,events:Z,setView:X,getEventsForDateRange:J,t:Y,firstDayOfWeek:Q}=B(),q=P.year(),U=d(p(),Q).map((z)=>({id:z.day().toString(),label:z.format("dd")})),_=()=>{return Array.from({length:12},(z,L)=>{let W=p().year(q).month(L).startOf("month"),R=Z.filter((I)=>I.start.year()===q&&I.start.month()===L);return{date:W,name:W.format("MMMM"),eventCount:R.length,monthKey:W.format("MM")}})},G=(z)=>{let L=z.startOf("month").startOf("week");return Array.from({length:v9},(W,R)=>{let I=L.add(R,"day"),S=I.startOf("day"),w=I.endOf("day"),k=J(S,w);return{date:I,dayKey:r(I),isInCurrentMonth:I.month()===z.month(),isToday:u(I),isSelected:I.isSame(P,"day"),eventCount:k.length}})},K=(z,L,W)=>{W?.stopPropagation(),$(z),X(L)},V=(z)=>{let L=z===1?Y("event"):Y("events");return`${z} ${L}`},O=(z)=>{let W=z.isInCurrentMonth?"":"text-muted-foreground opacity-50",R=z.isToday?"bg-primary text-primary-foreground rounded-full":"",I=z.isSelected&&!z.isToday?"bg-muted rounded-full font-bold":"",S=z.eventCount>0&&!z.isToday&&!z.isSelected?"font-medium":"";return A("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",W,R,I,S)},N=(z,L)=>{return A("h-[3px] w-[3px] rounded-full",L?"bg-primary-foreground":z)},f=_(),F=(z)=>{if(z===0)return"";return V(z)};return HP(I0,{className:"h-full","data-testid":"year-view",children:[d0("div",{className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3","data-testid":"year-grid",children:f.map((z,L)=>{let W=G(z.date),R=L*0.05;return HP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":M.header.year.month(z.monthKey),children:[HP(x,{className:"mb-2 flex items-center justify-between",delay:R,transitionKey:M.listKey("month",z.monthKey),children:[d0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":M.header.year.month(z.monthKey,"title"),onClick:()=>K(z.date,"month"),type:"button",children:z.name}),z.eventCount>0&&d0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":M.header.year.month(z.monthKey,"count"),children:V(z.eventCount)})]},M.listKey("month",z.monthKey)),HP("div",{className:"grid grid-cols-7 gap-px text-[0.6rem]","data-testid":M.header.year.month(z.monthKey,"mini"),children:[U.map((I)=>d0("div",{className:"text-muted-foreground h-3 text-center",children:I.label},M.listKey("header",z.monthKey,I.id))),W.map((I)=>{let S=M.header.year.day(z.date.format("YYYY-MM"),I.dayKey),w=I.eventCount>0,k=Math.min(I.eventCount,3),C=x9.slice(0,k);return HP("button",{className:O(I),"data-testid":S,onClick:(E)=>K(I.date,"day",E),title:F(I.eventCount),type:"button",children:[d0("span",{className:"text-center leading-none",children:I.date.date()}),w&&d0("div",{className:A("absolute bottom-0 flex w-full justify-center space-x-px",I.isToday&&"bottom-px"),children:C.map((E)=>d0("span",{className:N(E,I.isToday)},E))})]},I.dayKey)})]})]},z.monthKey)})}),d0(g0,{className:"z-30"})]})};import{useCallback as n2,useMemo as y9}from"react";import{jsx as c9}from"react/jsx-runtime";var b1=({children:P,events:$=[],firstDayOfWeek:Z=0,initialView:X="month",initialDate:J,renderEvent:Y,onEventClick:Q,onCellClick:q,isCellDisabled:U,onViewChange:_,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:O,locale:N,timezone:f,disableCellClick:F,disableEventClick:z,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:R=j0,eventHeight:I=B0,stickyViewHeader:S=!0,viewHeaderClassName:w="",headerComponent:k,headerClassName:C,businessHours:E,renderEventForm:c,translations:a,translator:j,timeFormat:m="12-hour",classesOverride:l,renderCurrentTimeIndicator:_0,renderHour:L0,hideNonBusinessHours:M0=!1,hideExportButton:H0=!1,hiddenDays:J0,slotDuration:A0=60,scrollTime:K0})=>{let Z0=xP({events:$,firstDayOfWeek:Z,initialView:X,initialDate:J,businessHours:E,onEventAdd:G,onEventUpdate:K,onEventDelete:V,onDateChange:O,onViewChange:_,locale:N,timezone:f,translations:a,translator:j}),b0=n2((X0)=>{Z0.setSelectedEvent(X0),Z0.setIsEventFormOpen(!0)},[Z0]),w0=n2((X0)=>{if(z)return;if(Q)Q(X0);else b0(X0)},[z,Q,b0]),k0=n2((X0)=>{if(F)return;if(q)q(X0);else Z0.openEventForm(X0)},[q,F,Z0]),i=y9(()=>({...Z0,renderEvent:Y,onEventClick:w0,onCellClick:k0,isCellDisabled:U,locale:N,timezone:f,disableCellClick:F,disableEventClick:z,disableDragAndDrop:L,dayMaxEvents:W,eventSpacing:R,eventHeight:I,stickyViewHeader:S,viewHeaderClassName:w,headerComponent:k,headerClassName:C,businessHours:E,renderEventForm:c,timeFormat:m,classesOverride:l,renderCurrentTimeIndicator:_0,renderHour:L0,hideNonBusinessHours:M0,hideExportButton:H0,hiddenDays:J0,slotDuration:A0,scrollTime:K0}),[Z0,Y,w0,k0,U,N,f,F,z,L,W,R,I,S,w,k,C,E,c,m,l,_0,L0,M0,H0,J0,A0,K0]);return c9(hP.Provider,{value:i,children:P})};import{jsx as F0,jsxs as u9}from"react/jsx-runtime";var i9=()=>{let{view:P,dayMaxEvents:$}=B();return u9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[F0(IP,{className:"p-1 shrink-0"}),F0(yP,{children:F0(x,{className:"w-full min-h-0 flex-1",direction:"horizontal",transitionKey:P,children:F0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:F0(I1,{dayMaxEvents:$},"month"),week:F0(T1,{},"week"),day:F0(M1,{},"day"),year:F0(H1,{},"year")}[P]})})}),F0(tP,{})]})},l9=({events:P,firstDayOfWeek:$="sunday",initialView:Z="month",initialDate:X,dayMaxEvents:J=ZP,eventSpacing:Y=j0,eventHeight:Q=B0,stickyViewHeader:q=!0,viewHeaderClassName:U="",timeFormat:_="12-hour",hideNonBusinessHours:G=!1,hiddenDays:K,...V})=>{return F0(b1,{dayMaxEvents:J,eventHeight:Q,eventSpacing:Y,events:mP(P),firstDayOfWeek:D0[$],hiddenDays:kP(K),hideNonBusinessHours:G,initialDate:XP(X),initialView:Z,stickyViewHeader:q,timeFormat:_,viewHeaderClassName:U,...V,children:F0(i9,{})})};import{jsx as o9}from"react/jsx-runtime";var OP=({days:P,gridType:$="day",children:Z,classes:X})=>{let{resources:J}=B(),Y=P.map((q)=>{let U=Array.isArray(q),_=U?q[0]:q;return{id:_?M.col.day(_):"day-col-unknown",day:U?void 0:q,days:U?q:void 0,className:X?.cell,gridType:$}}),Q=J.map((q)=>({id:q.id,title:q.title,resource:q,columns:Y}));return o9(Y2,{classes:X,dayNumberHeight:0,gridType:$,rows:Q,children:Z})};import{jsx as a2}from"react/jsx-runtime";var U2=({hours:P,view:$,delayStep:Z})=>a2("div",{className:"flex h-12 border-b",children:P.map((X,J)=>{let Y=X.isSame(p(),"hour"),Q=X.format("HH"),q=M.header.week.hour(X,J);return a2(x,{className:A("min-w-20 flex-1 border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",Y&&"bg-blue-50 text-blue-600 font-medium"),"data-hour":Q,"data-testid":M.header.resource.timeLabel($,Q),delay:J*Z,transitionKey:M.listKey(q,"motion"),children:a2(p0,{date:X})},M.listKey(q,"animated"))})});import{jsx as z2,jsxs as d9}from"react/jsx-runtime";var w1=()=>{let{currentDate:P,t:$,businessHours:Z,hideNonBusinessHours:X,resources:J}=B(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:J.map((Q)=>Q.businessHours).filter(Boolean)});return d9(OP,{classes:{header:"min-w-full",body:"min-w-full",cell:"min-w-20 flex-1"},days:Y,gridType:"hour",children:[z2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:z2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),z2("div",{className:"flex-1 flex flex-col",children:z2(U2,{delayStep:0.05,hours:Y,view:"day"})})]})};import{jsx as PP,jsxs as k1}from"react/jsx-runtime";var m1=()=>{let{currentDate:P,resources:$,businessHours:Z,hideNonBusinessHours:X,slotDuration:J}=B(),Y=z0({referenceDate:P,businessHours:Z,hideNonBusinessHours:X,allDates:[P],resourceBusinessHours:$.map((U)=>U.businessHours).filter(Boolean)}),Q={id:M.col.time,day:void 0,days:Y,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"hour",noEvents:!0,renderCell:(U)=>PP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:PP(p0,{date:U})})},q=$.map((U)=>({id:M.col.day(P,U.id),resourceId:U.id,resource:U,days:Y,day:P,gridType:"hour"}));return PP(T0,{allDayRow:k1("div",{className:"flex w-full",children:[PP(VP,{}),$.map((U)=>PP(o0,{classes:{cell:"min-w-20 border-r!"},days:[P],resource:U,showSpacer:!1},M.allDayRow(U.id)))]}),classes:{body:"w-full",header:"w-full"},columns:[Q,...q],"data-testid":"resource-day",gridType:"hour",slotDurationMinutes:J,children:k1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[PP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((U)=>PP(u0,{className:"min-w-20 flex-1",resource:U},M.listKey("resource-cell",U.id)))]})})};import{jsx as g1}from"react/jsx-runtime";var C1=()=>{let{orientation:P}=B();if(P==="vertical")return g1(m1,{});return g1(w1,{})};import{useMemo as r9}from"react";import{jsx as _2,jsxs as h1}from"react/jsx-runtime";var E1=()=>{let{currentDate:P,t:$}=B(),Z=r9(()=>{return K5(P)},[P]);return h1(OP,{days:Z,children:[_2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:_2("div",{className:"text-sm truncate px-1 min-w-0",children:$("resources")})}),Z.map((X,J)=>{let Y=`resource-month-header-${X.toISOString()}`;return h1(x,{className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",delay:J*0.05,transitionKey:M.listKey(Y,"motion"),children:[_2("div",{className:"text-xs font-medium",children:X.format("D")}),_2("div",{className:"text-xs text-muted-foreground",children:X.format("ddd")})]},M.listKey(Y,"animated"))})]})};import{jsx as bP,jsxs as j1}from"react/jsx-runtime";var D1=()=>{let{currentDate:P,resources:$}=B(),Z=P.startOf("month"),X=Array.from({length:P.daysInMonth()},(Q,q)=>Z.add(q,"day")),J={id:M.col.date,days:X,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:"day",noEvents:!0,renderCell:(Q)=>j1("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[bP("span",{children:Q.format("D")}),bP("span",{children:Q.format("ddd")})]})},Y=$.map((Q)=>({id:M.col.resource("month",Q.id),day:void 0,resourceId:Q.id,days:X,gridType:"day"}));return bP(T0,{classes:{header:"w-full",body:"w-full"},columns:[J,...Y],"data-testid":"resource-month-vertical-grid",children:j1("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[bP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((Q)=>bP(u0,{className:"min-w-20 flex-1",resource:Q},M.listKey("resource-cell",Q.id)))]})})};import{jsx as x1}from"react/jsx-runtime";var v1=()=>{let{orientation:P}=B();if(P==="vertical")return x1(D1,{});return x1(E1,{})};import{useMemo as t2}from"react";function r0(){let{currentDate:P,firstDayOfWeek:$,resources:Z,weekViewGranularity:X,businessHours:J,hideNonBusinessHours:Y,hiddenDays:Q}=B(),q=X==="hourly",U=t2(()=>d(P,$),[P,$]),_=t2(()=>Q?U.filter((K)=>!Q.has(K.day())):U,[U,Q]),G=t2(()=>Z.flatMap((K)=>K.businessHours?[K.businessHours]:[]),[Z]);return{isHourly:q,resources:Z,weekDays:U,visibleDays:_,currentDate:P,businessHours:J,hideNonBusinessHours:Y,resourceBusinessHours:G}}import{jsx as K2,jsxs as n9}from"react/jsx-runtime";var y1=({days:P})=>{let{weekViewGranularity:$}=B(),Z=$==="hourly";return K2("div",{className:"flex h-12",children:P.map((X,J)=>{let Y=u(X),Q=M.header.week.day(X);return K2(x,{className:A("shrink-0 border-r last:border-r-0 border-b flex-1 flex items-center text-center font-medium min-w-20",Y&&"bg-primary/10 font-bold"),"data-testid":M.header.resource.weekDay,delay:J*0.05,transitionKey:M.listKey(Q,"motion"),children:n9("div",{className:A(Z?"sticky left-1/2":"w-full text-center"),children:[K2("div",{className:"text-sm truncate w-full",children:X.format("ddd")}),K2("div",{className:"text-xs text-muted-foreground",children:X.format("D")})]})},M.listKey(Q,"animated"))})})};import{useMemo as a9}from"react";function c1(){let{isHourly:P,weekDays:$,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}=r0();return{weekHours:a9(()=>{if(!P)return[];return $.map((Q)=>z0({referenceDate:Q,businessHours:Z,hideNonBusinessHours:X,resourceBusinessHours:J}))},[P,$,Z,X,J])}}import{jsx as G2,jsxs as i1}from"react/jsx-runtime";var l1=()=>{let{t:P}=B(),{isHourly:$,weekDays:Z}=r0(),{weekHours:X}=c1();return i1(OP,{classes:{header:A($?"h-24":"h-12","min-w-full"),body:"min-w-full",cell:"min-w-20 flex-1"},days:$?X:Z,gridType:$?"hour":"day",children:[G2("div",{className:"w-20 sm:w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:G2("div",{className:"text-sm truncate px-1 min-w-0",children:P("resources")})}),i1("div",{className:"flex-1 flex flex-col",children:[G2(y1,{days:Z}),$&&G2(U2,{delayStep:0.005,hours:X.flat(),view:"week"})]})]})};import{useMemo as a1}from"react";import{jsx as L2,jsxs as u1}from"react/jsx-runtime";var o1=({columns:P})=>{let{currentDate:$}=B();return u1("div",{className:"flex h-12",children:[L2("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:L2("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:$.week()})}),P.map((Z,X)=>{let J=Z.day;if(!J)return null;let Y=u(J),Q=M.header.week.hour(J,Z.resourceId??"");return u1(x,{className:A("min-w-20 flex-1 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background",Y&&"bg-primary/10 font-bold"),"data-testid":M.header.resource.timeLabel("week",J.format("HH")),delay:X*0.05,transitionKey:M.listKey(Q,"motion"),children:[L2("div",{className:"text-sm truncate w-full text-center",children:J.format("ddd")}),L2("div",{className:"text-xs text-muted-foreground",children:J.format("D")})]},M.listKey(Q,"animated"))})]})};import{jsx as wP,jsxs as d1}from"react/jsx-runtime";var r1=({resources:P})=>{let{weekViewGranularity:$,t:Z,currentDate:X}=B(),J=$==="hourly";return d1("div",{className:"flex h-12",children:[wP("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:d1("span",{className:A("px-2 h-full w-full flex flex-col justify-center text-xs text-muted-foreground text-center min-w-0",J?"justify-end":"justify-center border-b"),children:[wP("span",{className:"truncate w-full",children:Z("week")}),!J&&wP("span",{className:"font-medium text-foreground truncate w-full",children:X.week()})]})}),P.map((Y)=>{return wP(u0,{className:"min-w-20 flex-1 border-b",resource:Y,children:wP("div",{className:A("sticky text-sm font-medium truncate",J?"left-1/4":"left-1"),children:Y.title})},M.listKey("resource-cell",Y.id))})]})};import{useCallback as t9,useMemo as A2}from"react";function n1(){let{isHourly:P,resources:$,weekDays:Z,visibleDays:X,currentDate:J,businessHours:Y,hideNonBusinessHours:Q,resourceBusinessHours:q}=r0(),U=t9((O)=>{return z0({referenceDate:O,businessHours:Y,hideNonBusinessHours:Q,allDates:Z,resourceBusinessHours:q})},[Y,Q,Z,q]),_=A2(()=>U(J),[J,U]),G=A2(()=>$.flatMap((O)=>X.map((N)=>({id:M.col.day(N,O.id),className:"min-w-20 flex-1",resourceId:O.id,resource:O,day:N,days:U(N),gridType:"hour"}))),[$,X,U]),K=A2(()=>$.map((O)=>({id:M.col.resource("week",O.id),className:"min-w-20 flex-1",day:void 0,resourceId:O.id,resource:O,days:Z,gridType:"day"})),[$,Z]),V=A2(()=>{if(P)return G;return K},[P,G,K]);return{hours:_,columns:V}}import{jsx as E0,jsxs as s2,Fragment as s9}from"react/jsx-runtime";var t1=()=>{let{isHourly:P,resources:$,weekDays:Z,visibleDays:X}=r0(),{hours:J,columns:Y}=n1(),{slotDuration:Q}=B(),q=a1(()=>({id:P?M.col.time:M.col.date,days:P?J:Z,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20 border-r-0",gridType:P?"hour":"day",noEvents:!0,renderCell:(_)=>E0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:P?E0(p0,{date:_}):s2(s9,{children:[E0("span",{children:_.format("ddd")}),E0("span",{children:_.format("D")})]})})}),[J,P,Z]),U=a1(()=>{if(!P)return;return s2("div",{className:"flex w-full",children:[E0(VP,{}),$.map((_)=>E0(o0,{classes:{cell:"min-w-20 flex-1 border-r!"},days:X,resource:_,showSpacer:!1},M.allDayRow(_.id)))]})},[P,$,X]);return E0(T0,{allDayRow:U,classes:{header:P?"h-24":"h-12"},columns:[q,...Y],"data-testid":"resource-week",gridType:P?"hour":"day",slotDurationMinutes:Q,children:s2("div",{className:"flex-1 flex flex-col",children:[E0(r1,{resources:$,visibleDays:X}),P&&E0(o1,{columns:Y})]})})};import{jsx as s1}from"react/jsx-runtime";var e1=()=>{let{orientation:P}=B();if(P==="vertical")return s1(t1,{});return s1(l1,{})};import{jsx as n0,jsxs as e9}from"react/jsx-runtime";var P4=()=>{let{view:P}=B();return e9("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-resource-calendar",children:[n0(IP,{className:"p-1"}),n0(yP,{children:n0(x,{className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",direction:"horizontal",transitionKey:P,children:n0("div",{className:"border h-full w-full","data-testid":"calendar-body",children:{month:n0(v1,{},"month"),week:n0(e1,{},"week"),day:n0(C1,{},"day")}[P]})})}),n0(tP,{})]})};import{jsx as $4}from"react/jsx-runtime";var P3=({events:P=[],resources:$=[],firstDayOfWeek:Z="sunday",initialView:X="month",initialDate:J,disableDragAndDrop:Y=!1,dayMaxEvents:Q=ZP,timeFormat:q="12-hour",eventSpacing:U=j0,eventHeight:_=B0,hiddenDays:G,...K})=>{return $4(N5,{dayMaxEvents:Q,disableDragAndDrop:Y,eventHeight:_,eventSpacing:U,events:mP(P),firstDayOfWeek:D0[Z],hiddenDays:kP(G),initialDate:XP(J),initialView:X,resources:$,timeFormat:q,...K,children:$4(P4,{})})};export{m4 as useIlamyCalendarContext,UP as isRecurringEvent,W2 as generateRecurringEvents,F2 as defaultTranslations,CU as RRule,P3 as IlamyResourceCalendar,l9 as IlamyCalendar};
5
-
6
- //# debugId=E3405ED10124047A64756E2164756E21
7
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbi50c3giLCAic3JjL2xpYi91dGlscy9pbmRleC50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXIudHMiLCAic3JjL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdC50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2xpYi91dGlscy9ldmVudC11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2xpYi91dGlscy9rZXlzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3Vycy50cyIsICJzcmMvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvYmFzZS1oZWFkZXIudHN4IiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9ncmlkLWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL2RheS1udW1iZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50LnRzeCIsICJzcmMvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdXNlLXNjcm9sbC10by10aW1lLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3Vycy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3LnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3RpbWUtaGVhZGVyLXJvdy50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC12ZXJ0aWNhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YS50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaG9yaXpvbnRhbC9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF5LWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2hvcml6b250YWwvdXNlLXJlc291cmNlLXdlZWstaG9yaXpvbnRhbC1kYXRhLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9ob3Jpem9udGFsL3Jlc291cmNlLXdlZWstaG9yaXpvbnRhbC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3Jlc291cmNlLXdlZWstdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy92ZXJ0aWNhbC9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLXJlc291cmNlLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3ZlcnRpY2FsL3VzZS1yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRhdGEudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9yZXNvdXJjZS1jYWxlbmRhci1ib2R5LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAiLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuZXhwb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5leHBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQsIFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHsgSWxhbXlDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHtcblx0Q2VsbEluZm8sXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcblx0UmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyxcblx0U2xvdER1cmF0aW9uLFxufSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuLy8gRXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJy4vZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbi8vIFJSVUxFLWJhc2VkIHJlY3VycmVuY2Ugc3lzdGVtXG5leHBvcnQge1xuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0aXNSZWN1cnJpbmdFdmVudCxcbn0gZnJvbSAnLi9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmV4cG9ydCB0eXBlIHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG4vLyBSZXNvdXJjZSBjYWxlbmRhciB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rc1xuZXhwb3J0IHtcblx0dHlwZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybixcblx0dXNlSWxhbXlDYWxlbmRhckNvbnRleHQsXG59IGZyb20gJy4vaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcblx0VHJhbnNsYXRpb25LZXksXG5cdFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJy4vdHlwZXMnXG4iLAogICAgImltcG9ydCB7XG5cdEFuaW1hdGVQcmVzZW5jZSxcblx0dHlwZSBIVE1MTW90aW9uUHJvcHMsXG5cdG1vdGlvbixcblx0dHlwZSBWYXJpYW50cyxcbn0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbmltYXRlZFNlY3Rpb25Qcm9wc1xuXHRleHRlbmRzIE9taXQ8SFRNTE1vdGlvblByb3BzPCdkaXYnPiwgJ2NoaWxkcmVuJyB8ICdsYXlvdXQnIHwgJ2xheW91dElkJz4ge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG5cdHRyYW5zaXRpb25LZXk6IHN0cmluZ1xuXHRkZWxheT86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlyZWN0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xuXHRsYXlvdXQ/OiBib29sZWFuIHwgJ3Bvc2l0aW9uJyB8ICdzaXplJyB8ICdwcmVzZXJ2ZS1hc3BlY3QnXG5cdGxheW91dElkPzogc3RyaW5nXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgdmFyaWFudHM6IFZhcmlhbnRzID0ge1xuXHRoaWRkZW46ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAxMCA6IDAsXG5cdFx0eTogZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gLTEwIDogMCxcblx0fSksXG5cdHZpc2libGU6ICh7IGRlbGF5IH06IHsgZGVsYXk6IG51bWJlciB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDEsXG5cdFx0eDogMCxcblx0XHR5OiAwLFxuXHRcdHRyYW5zaXRpb246IHsgZHVyYXRpb246IDAuMiwgZWFzZTogWzAuNCwgMCwgMC4yLCAxXSwgZGVsYXkgfSxcblx0fSksXG5cdGV4aXQ6ICh7IGRpcmVjdGlvbiB9OiB7IGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB9KSA9PiAoe1xuXHRcdG9wYWNpdHk6IDAsXG5cdFx0eDogZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAtMTAgOiAwLFxuXHRcdHk6IGRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IC0xMCA6IDAsXG5cdFx0dHJhbnNpdGlvbjogeyBkdXJhdGlvbjogMC4xNSB9LFxuXHR9KSxcbn1cblxuZXhwb3J0IGNvbnN0IEFuaW1hdGVkU2VjdGlvbjogUmVhY3QuRkM8QW5pbWF0ZWRTZWN0aW9uUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdHRyYW5zaXRpb25LZXksXG5cdGRlbGF5ID0gMCxcblx0Y2xhc3NOYW1lLFxuXHRkaXJlY3Rpb24gPSAndmVydGljYWwnLFxuXHRsYXlvdXQsXG5cdGxheW91dElkLFxuXHQnZGF0YS10ZXN0aWQnOiB0ZXN0SWQsXG5cdHJlZixcblx0Li4ucHJvcHNcbn0pID0+IChcblx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRhbmltYXRlPVwidmlzaWJsZVwiXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdpbmxpbmUtYmxvY2sgdy1mdWxsJywgY2xhc3NOYW1lKX1cblx0XHRcdGN1c3RvbT17eyBkZWxheSwgZGlyZWN0aW9uIH19XG5cdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0ZXhpdD1cImV4aXRcIlxuXHRcdFx0aW5pdGlhbD1cImhpZGRlblwiXG5cdFx0XHRrZXk9e3RyYW5zaXRpb25LZXl9XG5cdFx0XHRsYXlvdXQ9e2xheW91dH1cblx0XHRcdGxheW91dElkPXtsYXlvdXRJZH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0dmFyaWFudHM9e3ZhcmlhbnRzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L21vdGlvbi5kaXY+XG5cdDwvQW5pbWF0ZVByZXNlbmNlPlxuKVxuXG5BbmltYXRlZFNlY3Rpb24uZGlzcGxheU5hbWUgPSAnQW5pbWF0ZWRTZWN0aW9uJ1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5pbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcblx0cmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9wdGlvbmFsIFdlZWtEYXlzW10gbGlzdCBpbnRvIGEgU2V0PG51bWJlcj4gb2YgZGF5IGluZGljZXNcbiAqICgwID0gU3VuZGF5LCAxID0gTW9uZGF5LCAuLi4pLCBvciB1bmRlZmluZWQgaWYgdGhlIGxpc3QgaXMgZW1wdHkuXG4gKi9cbmV4cG9ydCBjb25zdCB0b0hpZGRlbkRheXNTZXQgPSAoXG5cdGhpZGRlbkRheXM/OiBXZWVrRGF5c1tdXG4pOiBTZXQ8bnVtYmVyPiB8IHVuZGVmaW5lZCA9PiB7XG5cdGlmICghaGlkZGVuRGF5cyB8fCBoaWRkZW5EYXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZFxuXHRyZXR1cm4gbmV3IFNldChoaWRkZW5EYXlzLm1hcCgoZGF5KSA9PiBXRUVLX0RBWVNfTlVNQkVSX01BUFtkYXldKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEYXRlKFxuXHRkYXRlOiBEYXlqcyB8IERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IERheWpzIHwgdW5kZWZpbmVkIHtcblx0aWYgKGRhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWRcblx0fVxuXHRpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xuXHRcdHJldHVybiBkYXRlXG5cdH1cblx0Y29uc3QgcGFyc2VkRGF0ZSA9IGRheWpzKGRhdGUpXG5cdHJldHVybiBwYXJzZWREYXRlLmlzVmFsaWQoKSA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IG9taXRLZXlzID0gPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcblx0b2JqOiBULFxuXHRrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4gPT4ge1xuXHRjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkZWxldGUgcmVzdWx0W2tleV1cblx0fVxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBjYWxlbmRhciBldmVudHMgZnJvbSBwdWJsaWMtZmFjaW5nIGZvcm1hdCB0byBpbnRlcm5hbCBmb3JtYXQuXG4gKiBDb252ZXJ0cyBmbGV4aWJsZSBkYXRlIHR5cGVzIChkYXlqcywgRGF0ZSwgc3RyaW5nKSB0byBzdHJpY3QgZGF5anMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZXZlbnRzIC0gQXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZmxleGlibGUgZGF0ZSB0eXBlc1xuICogQHJldHVybnMgTm9ybWFsaXplZCBhcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBkYXlqcyBkYXRlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZWd1bGFyIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgZXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKlxuICogLy8gUmVzb3VyY2UgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCByZXNvdXJjZUV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFdmVudHM8XG5cdFRJbnB1dCBleHRlbmRzIHtcblx0XHRzdGFydDogRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdFx0ZW5kOiBEYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0fSxcblx0VE91dHB1dCxcbj4oZXZlbnRzOiBUSW5wdXRbXSB8IHVuZGVmaW5lZCk6IFRPdXRwdXRbXSB7XG5cdGlmICghZXZlbnRzIHx8ICFldmVudHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHRyZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcblx0XHRcdGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcblx0XHR9IGFzIFRPdXRwdXRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBPcFVuaXRUeXBlIGFzIERheWpzT3BVbml0VHlwZSwgUGx1Z2luRnVuYyB9IGZyb20gJ2RheWpzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXIuanMnXG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlLmpzJ1xuaW1wb3J0IGxvY2FsZURhdGEgZnJvbSAnZGF5anMvcGx1Z2luL2xvY2FsZURhdGEuanMnXG5pbXBvcnQgbG9jYWxpemVkRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGl6ZWRGb3JtYXQuanMnXG5pbXBvcnQgbWluTWF4IGZyb20gJ2RheWpzL3BsdWdpbi9taW5NYXguanMnXG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lLmpzJ1xuaW1wb3J0IHV0YyBmcm9tICdkYXlqcy9wbHVnaW4vdXRjLmpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcblxuLyoqXG4gKiBQbHVnaW4gdGhhdCBmaXhlcyBhIGRheWpzLXRpbWV6b25lIGJ1ZyB3aGVyZSAuc3RhcnRPZigpIGFuZCAuZW5kT2YoKSBkcm9wXG4gKiB0aW1lem9uZSBpbmZvIHdoZW4gdGhlIHN5c3RlbSdzIGxvY2FsIHRpbWV6b25lIGhhcyBhIERTVCB0cmFuc2l0aW9uIG5lYXJcbiAqIHRoZSB0YXJnZXQgZGF0ZS4gQWZ0ZXIgZWFjaCBzdGFydE9mL2VuZE9mIGNhbGwsIGlmIHRoZSBVVEMgb2Zmc2V0IGhhc1xuICogZHJpZnRlZCBmcm9tIHdoYXQgdGhlIHRpbWV6b25lIGV4cGVjdHMsIHJlLWFwcGx5IHRoZSB0aW1lem9uZSB3aXRoXG4gKiBrZWVwTG9jYWxUaW1lPXRydWUgdG8gcmVzdG9yZSB0aGUgY29ycmVjdCBvZmZzZXQuXG4gKi9cbmludGVyZmFjZSBEYXlqc0ludGVybmFsIGV4dGVuZHMgZGF5anMuRGF5anMge1xuXHQkeDogeyAkdGltZXpvbmU/OiBzdHJpbmcgfVxufVxuXG5sZXQgZGVmYXVsdFRpbWV6b25lOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuY29uc3QgZml4VGltZXpvbmVPZmZzZXQ6IFBsdWdpbkZ1bmMgPSAoX29wdGlvbiwgZGF5anNDbGFzcywgZGF5anNGYWN0b3J5KSA9PiB7XG5cdGNvbnN0IHByb3RvID0gZGF5anNDbGFzcy5wcm90b3R5cGVcblxuXHQvLyBJbnRlcmNlcHQgc2V0RGVmYXVsdCB0byB0cmFjayB0aGUgY29uZmlndXJlZCB0aW1lem9uZVxuXHRjb25zdCBvcmlnaW5hbFNldERlZmF1bHQgPSBkYXlqc0ZhY3RvcnkudHouc2V0RGVmYXVsdFxuXHRkYXlqc0ZhY3RvcnkudHouc2V0RGVmYXVsdCA9ICh0aW1lem9uZT86IHN0cmluZykgPT4ge1xuXHRcdGRlZmF1bHRUaW1lem9uZSA9IHRpbWV6b25lXG5cdFx0cmV0dXJuIG9yaWdpbmFsU2V0RGVmYXVsdCh0aW1lem9uZSlcblx0fVxuXG5cdHR5cGUgU3RhcnRPZkZuID0gKHVuaXQ6IERheWpzT3BVbml0VHlwZSwgX3N0YXJ0T2Y/OiBib29sZWFuKSA9PiBkYXlqcy5EYXlqc1xuXHRjb25zdCBvcmlnaW5hbFN0YXJ0T2YgPSBwcm90by5zdGFydE9mIGFzIFN0YXJ0T2ZGblxuXHRjb25zdCBvcmlnaW5hbEVuZE9mID0gcHJvdG8uZW5kT2ZcblxuXHRmdW5jdGlvbiByZXN0b3JlVGltZXpvbmUoXG5cdFx0aW5zdGFuY2U6IGRheWpzLkRheWpzLFxuXHRcdHJlc3VsdDogZGF5anMuRGF5anNcblx0KTogZGF5anMuRGF5anMge1xuXHRcdGNvbnN0IHR6ID0gKGluc3RhbmNlIGFzIERheWpzSW50ZXJuYWwpLiR4Py4kdGltZXpvbmUgfHwgZGVmYXVsdFRpbWV6b25lXG5cdFx0aWYgKCF0eikgcmV0dXJuIHJlc3VsdFxuXG5cdFx0Y29uc3QgZXhwZWN0ZWRPZmZzZXQgPSBkYXlqc0ZhY3Rvcnlcblx0XHRcdC50eihyZXN1bHQuZm9ybWF0KCdZWVlZLU1NLUREVEhIOm1tOnNzJyksIHR6KVxuXHRcdFx0LnV0Y09mZnNldCgpXG5cdFx0aWYgKHJlc3VsdC51dGNPZmZzZXQoKSAhPT0gZXhwZWN0ZWRPZmZzZXQpIHtcblx0XHRcdHJldHVybiByZXN1bHQudHoodHosIHRydWUpXG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHRcblx0fVxuXG5cdC8vIGRheWpzJ3MgZW5kT2YgY2FsbHMgc3RhcnRPZih1bml0LCBmYWxzZSkgaW50ZXJuYWxseSDigJQgdGhlIHNlY29uZCBhcmdcblx0Ly8gKF9zdGFydE9mKSBjb250cm9scyBzdGFydC12cy1lbmQgYmVoYXZpb3IuIFdlIG11c3QgZm9yd2FyZCBpdC5cblx0cHJvdG8uc3RhcnRPZiA9IGZ1bmN0aW9uICh1bml0OiBEYXlqc09wVW5pdFR5cGUsIF9zdGFydE9mPzogYm9vbGVhbikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsU3RhcnRPZi5jYWxsKHRoaXMsIHVuaXQsIF9zdGFydE9mKVxuXHRcdHJldHVybiByZXN0b3JlVGltZXpvbmUodGhpcywgcmVzdWx0KVxuXHR9XG5cblx0Ly8gZW5kT2YgZGVsZWdhdGVzIHRvIHN0YXJ0T2YodW5pdCwgZmFsc2UpLCBzbyB0aGUgcGF0Y2hlZCBzdGFydE9mIGhhbmRsZXMgaXRcblx0cHJvdG8uZW5kT2YgPSBvcmlnaW5hbEVuZE9mXG59XG5cbi8vIEV4dGVuZCBkYXlqcyB3aXRoIHBsdWdpbnNcbmRheWpzLmV4dGVuZCh3ZWVrZGF5KVxuZGF5anMuZXh0ZW5kKHdlZWtPZlllYXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSlcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pXG5kYXlqcy5leHRlbmQobWluTWF4KVxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKVxuZGF5anMuZXh0ZW5kKHV0YylcbmRheWpzLmV4dGVuZChsb2NhbGVEYXRhKVxuZGF5anMuZXh0ZW5kKGxvY2FsaXplZEZvcm1hdClcbmRheWpzLmV4dGVuZChmaXhUaW1lem9uZU9mZnNldClcblxuLy8gQ3VzdG9tIGRheWpzIGNvbnN0cnVjdG9yIHRoYXQgYXV0b21hdGljYWxseSB1c2VzIC50eigpIGZvciBhbGwgaW5zdGFuY2VzLlxuLy8gVGhpcyBlbnN1cmVzIHRoYXQgZGF5anMoKSBjYWxscyB0aHJvdWdob3V0IHRoZSBjb2RlYmFzZSBob25vciB0aGUgZGVmYXVsdFxuLy8gdGltZXpvbmUgc2V0IHZpYSBkYXlqcy50ei5zZXREZWZhdWx0KCkuXG5jb25zdCB0aW1lem9uZUF3YXJlRGF5anMgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdHJldHVybiAoZGF5anMgYXMgdW5rbm93biBhcyB7IHR6OiAoLi4uYTogdW5rbm93bltdKSA9PiBkYXlqcy5EYXlqcyB9KS50eihcblx0XHQuLi5hcmdzXG5cdClcbn1cblxuLy8gQXR0YWNoIGFsbCBzdGF0aWMgbWV0aG9kcyBhbmQgcHJvcGVydGllcyBmcm9tIHRoZSBvcmlnaW5hbCBkYXlqcyB0byBvdXIgd3JhcHBlci5cbi8vIFRoaXMgYWxsb3dzIHRoZSB3cmFwcGVyIHRvIGJlIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LlxuT2JqZWN0LmFzc2lnbih0aW1lem9uZUF3YXJlRGF5anMsIGRheWpzKVxuXG4vLyBFeHBvcnQgdGhlIERheWpzIHR5cGUgc2VwYXJhdGVseSBmb3IgdXNlIGFzIGEgdHlwZSBpbiBvdGhlciBmaWxlcy5cbi8vIEZpbGVzIHNob3VsZCB1c2UgJ2ltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSBcIkAvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnXCInXG5leHBvcnQgdHlwZSB7IERheWpzLCBNYW5pcHVsYXRlVHlwZSwgT3BVbml0VHlwZSB9IGZyb20gJ2RheWpzJ1xuZXhwb3J0IGRlZmF1bHQgdGltZXpvbmVBd2FyZURheWpzIGFzIHR5cGVvZiBkYXlqc1xuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI0IC8vIHB4IChoLTYpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuZXhwb3J0IGNvbnN0IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FID1cblx0J2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG5cdHN1bmRheTogMCxcblx0bW9uZGF5OiAxLFxuXHR0dWVzZGF5OiAyLFxuXHR3ZWRuZXNkYXk6IDMsXG5cdHRodXJzZGF5OiA0LFxuXHRmcmlkYXk6IDUsXG5cdHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcblx0MDogJ3N1bmRheScsXG5cdDE6ICdtb25kYXknLFxuXHQyOiAndHVlc2RheScsXG5cdDM6ICd3ZWRuZXNkYXknLFxuXHQ0OiAndGh1cnNkYXknLFxuXHQ1OiAnZnJpZGF5Jyxcblx0NjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUge1xuXHREcmFnQ2FuY2VsRXZlbnQsXG5cdERyYWdFbmRFdmVudCxcblx0RHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQge1xuXHREbmRDb250ZXh0LFxuXHRNb3VzZVNlbnNvcixcblx0cG9pbnRlcldpdGhpbixcblx0VG91Y2hTZW5zb3IsXG5cdHVzZVNlbnNvcixcblx0dXNlU2Vuc29ycyxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRVcGRhdGVkRXZlbnQgfSBmcm9tICcuL2RuZC11dGlscydcbmltcG9ydCB7IEV2ZW50RHJhZ092ZXJsYXkgfSBmcm9tICcuL2V2ZW50LWRyYWctb3ZlcmxheSdcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcblx0Y2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5jb25zdCBDTE9TRURfRElBTE9HID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRldmVudDogbnVsbCxcblx0dXBkYXRlczogbnVsbCxcbn0gYXMgY29uc3RcblxuZXhwb3J0IGZ1bmN0aW9uIENhbGVuZGFyRG5kQ29udGV4dCh7IGNoaWxkcmVuIH06IENhbGVuZGFyRG5kQ29udGV4dFByb3BzKSB7XG5cdGNvbnN0IGFjdGl2ZUV2ZW50UmVmID0gdXNlUmVmPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cdGNvbnN0IGRyYWdPdmVybGF5UmVmID0gdXNlUmVmPHtcblx0XHRzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbCkgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHQvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuXHRjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdGV2ZW50OiBudWxsLFxuXHRcdHVwZGF0ZXM6IG51bGwsXG5cdH0pXG5cblx0Ly8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuXHRjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuXHRcdC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkaXN0YW5jZTogMixcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG5cdFx0Ly8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRlbGF5OiAxMDAsXG5cdFx0XHR0b2xlcmFuY2U6IDUsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cblx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcblx0Y29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB7XG5cdFx0aWYgKCFldmVudD8uaWQgfHwgIXVwZGF0ZXMgfHwgT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChldmVudCkpIHtcblx0XHRcdC8vIFJlY3VycmluZyBldmVudHM6IHByb21wdCB0aGUgdXNlciB2aWEgZGlhbG9nIGJlZm9yZSBhcHBseWluZy5cblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogdHJ1ZSwgZXZlbnQsIHVwZGF0ZXMgfSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIHVwZGF0ZXMpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY29uZmlybWF0aW9uXG5cdGNvbnN0IGhhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybSA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdGlmICghcmVjdXJyaW5nRGlhbG9nLmV2ZW50IHx8ICFyZWN1cnJpbmdEaWFsb2cudXBkYXRlcykge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuXHRcdFx0XHRzY29wZSxcblx0XHRcdFx0ZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG5cdFx0XHR9KVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKENMT1NFRF9ESUFMT0cpXG5cdFx0fVxuXHR9XG5cblx0Ly8gSGFuZGxlIHJlY3VycmluZyBldmVudCBkaWFsb2cgY2xvc2Vcblx0Y29uc3QgaGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZSA9ICgpID0+IHtcblx0XHRzZXRSZWN1cnJpbmdEaWFsb2coQ0xPU0VEX0RJQUxPRylcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IChldmVudDogRHJhZ1N0YXJ0RXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGFjdGl2ZSB9ID0gZXZlbnRcblxuXHRcdC8vIFNldCB0aGUgYWN0aXZlIGV2ZW50IGJhc2VkIG9uIHRoZSBldmVudCBkYXRhXG5cdFx0aWYgKGFjdGl2ZS5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICdjYWxlbmRhci1ldmVudCcpIHtcblx0XHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnQpXG5cdFx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gYWN0aXZlLmRhdGEuY3VycmVudC5ldmVudFxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuXHRcdGNvbnN0IHVwZGF0ZWRFdmVudCA9IGdldFVwZGF0ZWRFdmVudChldmVudCwgYWN0aXZlRXZlbnRSZWYuY3VycmVudClcblx0XHRpZiAodXBkYXRlZEV2ZW50KSB7XG5cdFx0XHRjb25zdCB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH0gPSB1cGRhdGVkRXZlbnRcblx0XHRcdHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcblx0XHR9XG5cblx0XHQvLyBDbGVhciB0aGUgYWN0aXZlIGV2ZW50IHJlZmVyZW5jZVxuXHRcdGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQgPSBudWxsXG5cdFx0ZHJhZ092ZXJsYXlSZWYuY3VycmVudD8uc2V0QWN0aXZlRXZlbnQobnVsbClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZURyYWdDYW5jZWwgPSAoX2V2ZW50OiBEcmFnQ2FuY2VsRXZlbnQpID0+IHtcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHR9XG5cblx0Ly8gSWYgZHJhZyBhbmQgZHJvcCBpcyBkaXNhYmxlZCwganVzdCByZXR1cm4gY2hpbGRyZW4gd2l0aG91dCBEbmRDb250ZXh0XG5cdGlmIChkaXNhYmxlRHJhZ0FuZERyb3ApIHtcblx0XHRyZXR1cm4gY2hpbGRyZW4gYXMgUmVhY3QuUmVhY3RFbGVtZW50XG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RG5kQ29udGV4dFxuXHRcdFx0XHRjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG5cdFx0XHRcdG9uRHJhZ0NhbmNlbD17aGFuZGxlRHJhZ0NhbmNlbH1cblx0XHRcdFx0b25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuXHRcdFx0XHRvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuXHRcdFx0XHRzZW5zb3JzPXtzZW5zb3JzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxFdmVudERyYWdPdmVybGF5IHJlZj17ZHJhZ092ZXJsYXlSZWZ9IC8+XG5cdFx0XHQ8L0RuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cblx0XHRcdFx0aXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuXHRcdFx0XHRvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBTbG90IH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNsb3QnXG5pbXBvcnQgdHlwZSB7IFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB7IGN2YSB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuXHRcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG5cdHtcblx0XHR2YXJpYW50czoge1xuXHRcdFx0dmFyaWFudDoge1xuXHRcdFx0XHRkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcblx0XHRcdFx0ZGVzdHJ1Y3RpdmU6XG5cdFx0XHRcdFx0J2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIGRhcms6YmctZGVzdHJ1Y3RpdmUvNjAnLFxuXHRcdFx0XHRvdXRsaW5lOlxuXHRcdFx0XHRcdCdib3JkZXIgYmctYmFja2dyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwJyxcblx0XHRcdFx0c2Vjb25kYXJ5OlxuXHRcdFx0XHRcdCdiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuXHRcdFx0XHRnaG9zdDpcblx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuXHRcdFx0XHRsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuXHRcdFx0fSxcblx0XHRcdHNpemU6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcblx0XHRcdFx0c206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuXHRcdFx0XHRsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG5cdFx0XHRcdGljb246ICdzaXplLTknLFxuXHRcdFx0XHQnaWNvbi1zbSc6ICdzaXplLTgnLFxuXHRcdFx0XHQnaWNvbi1sZyc6ICdzaXplLTEwJyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRkZWZhdWx0VmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6ICdkZWZhdWx0Jyxcblx0XHRcdHNpemU6ICdkZWZhdWx0Jyxcblx0XHR9LFxuXHR9XG4pXG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0dmFyaWFudCxcblx0c2l6ZSxcblx0YXNDaGlsZCA9IGZhbHNlLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2J1dHRvbic+ICZcblx0VmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4gJiB7XG5cdFx0YXNDaGlsZD86IGJvb2xlYW5cblx0fSkge1xuXHRjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiAnYnV0dG9uJ1xuXG5cdHJldHVybiAoXG5cdFx0PENvbXBcblx0XHRcdGNsYXNzTmFtZT17Y24oYnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuXHRcdFx0ZGF0YS1zbG90PVwiYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gRGlhbG9nKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJkaWFsb2dcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cImRpYWxvZy10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dQb3J0YWwoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWw+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlBvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dDbG9zZSh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNsb3NlPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBkYXRhLXNsb3Q9XCJkaWFsb2ctY2xvc2VcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ092ZXJsYXkoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLk92ZXJsYXk+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZml4ZWQgaW5zZXQtMCB6LTUwIGJnLWJsYWNrLzUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1BvcnRhbCBkYXRhLXNsb3Q9XCJkaWFsb2ctcG9ydGFsXCI+XG5cdFx0XHQ8RGlhbG9nT3ZlcmxheSAvPlxuXHRcdFx0PERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXScsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1jb250ZW50XCJcblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgY2xhc3NOYW1lPVwicmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1czpyaW5nLXJpbmcgZGF0YS1bc3RhdGU9b3Blbl06YmctYWNjZW50IGRhdGEtW3N0YXRlPW9wZW5dOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBhYnNvbHV0ZSB0b3AtNCByaWdodC00IHJvdW5kZWQteHMgb3BhY2l0eS03MCB0cmFuc2l0aW9uLW9wYWNpdHkgaG92ZXI6b3BhY2l0eS0xMDAgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZm9jdXM6b3V0bGluZS1oaWRkZW4gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIj5cblx0XHRcdFx0XHQ8WEljb24gLz5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XG5cdFx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNsb3NlPlxuXHRcdFx0PC9EaWFsb2dQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L0RpYWxvZ1BvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1oZWFkZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBEaWFsb2dUaXRsZSh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVGl0bGU+KSB7XG5cdHJldHVybiAoXG5cdFx0PERpYWxvZ1ByaW1pdGl2ZS5UaXRsZVxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nRGVzY3JpcHRpb24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1kZXNjcmlwdGlvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0Nsb3NlLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ092ZXJsYXksXG5cdERpYWxvZ1BvcnRhbCxcblx0RGlhbG9nVGl0bGUsXG5cdERpYWxvZ1RyaWdnZXIsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldyB9IGZyb20gJ0AvdHlwZXMnXG5cbi8qKlxuICogRnVsbCBpbnRlcm5hbCBjb250ZXh0IHR5cGUgdXNlZCBieSBsaWJyYXJ5IGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSA9IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZVxuXG4vKipcbiAqIFB1YmxpY2x5IGV4cG9zZWQgY2FsZW5kYXIgY29udGV4dCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcblx0cmVhZG9ubHkgY3VycmVudERhdGU6IERheWpzXG5cdHJlYWRvbmx5IHZpZXc6IENhbGVuZGFyVmlld1xuXHRyZWFkb25seSBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyZWFkb25seSBpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0cmVhZG9ubHkgc2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVhZG9ubHkgc2VsZWN0ZWREYXRlOiBEYXlqcyB8IG51bGxcblx0cmVhZG9ubHkgZmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRyZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cblx0cmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRyZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRyZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRyZWFkb25seSB1cGRhdGVFdmVudDogKFxuXHRcdGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcblx0XHRldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuXHQpID0+IHZvaWRcblx0cmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0cmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0cmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0cmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcblx0XHRyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcblx0KSA9PiBDYWxlbmRhckV2ZW50W11cblx0cmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBob29rIHRoYXQgcmV0dXJucyB0aGUgZnVsbCBjb250ZXh0LlxuICogVXNlZCBieSBpbnRlcm5hbCB2aWV3cywgaGVhZGVycywgYW5kIGdyaWQgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KCk6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3RvcjogKGNvbnRleHQ6IFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZSkgPT4gVFxuKTogVFxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0PFQ+KFxuXHRzZWxlY3Rvcj86IChjb250ZXh0OiBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUpID0+IFRcbik6IFQgfCBTbWFydENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHRjb25zdCByZXNvdXJjZUNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRjb25zdCByZWd1bGFyQ29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuXG5cdC8vIEluIHJlZ3VsYXIgY2FsZW5kYXJzLCByZXNvdXJjZS1zcGVjaWZpYyBmaWVsZHMgd2lsbCBiZSB1bmRlZmluZWQuXG5cdGNvbnN0IGNvbnRleHQgPSAocmVzb3VyY2VDb250ZXh0IHx8XG5cdFx0cmVndWxhckNvbnRleHQpIGFzIFNtYXJ0Q2FsZW5kYXJDb250ZXh0VHlwZVxuXG5cdGlmICghY29udGV4dCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VTbWFydENhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlciBvciBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3IoY29udGV4dCkgOiBjb250ZXh0XG59XG5cbi8qKlxuICogUHVibGljIGhvb2sgZXhwb3J0ZWQgZm9yIGxpYnJhcnkgdXNlcnMuXG4gKiBSZXR1cm5zIGEgbGltaXRlZCBzZXQgb2YgY29tbW9ubHkgdXNlZCBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWxhbXlDYWxlbmRhckNvbnRleHQoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRjb25zdCBjb250ZXh0ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiB7XG5cdFx0Y3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG5cdFx0dmlldzogY29udGV4dC52aWV3LFxuXHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0c2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzIHx8IFtdLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IGNvbnRleHQuZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzLCBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbEluZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyVmlldywgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W10gLy8gVW5wcm9jZXNzZWQgZXZlbnRzIGZvciBleHBvcnRcblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgLy8gMCBmb3IgU3VuZGF5LCAxIGZvciBNb25kYXksIGV0Yy5cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBEYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKHN0YXJ0RGF0ZTogRGF5anMsIGVuZERhdGU6IERheWpzKSA9PiBDYWxlbmRhckV2ZW50W11cblx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsSW5mbykgPT4gdm9pZFxuXHRpc0NlbGxEaXNhYmxlZD86IChpbmZvOiBDZWxsSW5mbykgPT4gYm9vbGVhblxuXHRjdXJyZW50TG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZzogbnVtYmVyXG5cdGV2ZW50SGVpZ2h0OiBudW1iZXJcblx0c3RpY2t5Vmlld0hlYWRlcjogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lOiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3QuUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuXHR0OiBUcmFuc2xhdG9yRnVuY3Rpb25cblx0dGltZUZvcm1hdDogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGVFeHBvcnRCdXR0b24/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxuXHRzbG90RHVyYXRpb246IFNsb3REdXJhdGlvblxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG59XG5cbi8vIENhbGVuZGFyQ29udGV4dCBpcyBrZXB0IGZvciBpbnRlcm5hbCBQcm92aWRlciB1c2FnZVxuZXhwb3J0IGNvbnN0IENhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPiA9XG5cdGNyZWF0ZUNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyQ29udGV4dFR5cGUgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2VsbEluZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIGV4dGVuZHMgQ2FsZW5kYXJDb250ZXh0VHlwZSB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXG5cdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRnZXRFdmVudHNGb3JSZXNvdXJjZTogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldEV2ZW50c0ZvclJlc291cmNlczogKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKSA9PiBDYWxlbmRhckV2ZW50W11cblx0Z2V0UmVzb3VyY2VCeUlkOiAoXG5cdFx0cmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkXG5cdCkgPT4gUmVzb3VyY2UgfCB1bmRlZmluZWRcblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0aXNFdmVudENyb3NzUmVzb3VyY2U6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuXHRnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IChzdHJpbmcgfCBudW1iZXIpW11cblxuXHQvLyBBZGRpdGlvbmFsIHByb3BlcnRpZXMgZnJvbSBjYWxlbmRhciBjb250ZXh0XG5cdG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbEluZm8pID0+IHZvaWRcblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0b3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcblx0d2Vla1ZpZXdHcmFudWxhcml0eTogJ2hvdXJseScgfCAnZGFpbHknXG59XG5cbi8vIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IGlzIGtlcHQgZm9yIGludGVybmFsIFByb3ZpZGVyIHVzYWdlXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8XG5cdFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZFxuPiA9IGNyZWF0ZUNvbnRleHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJQcm92aWRlclByb3BzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuaW1wb3J0IHR5cGUge1xuXHRDYWxlbmRhckNsYXNzZXNPdmVycmlkZSxcblx0Q2VsbEluZm8sXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJFbmdpbmUgfSBmcm9tICdAL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2NvbnRleHQnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcblx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG5cdH1cblx0aWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cblx0fVxuXHRyZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdHJlc291cmNlcz86IFJlc291cmNlW11cblx0cmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlc092ZXJyaWRlPzogQ2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGVcblx0b3JpZW50YXRpb24/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG5cdHdlZWtWaWV3R3JhbnVsYXJpdHk/OiAnaG91cmx5JyB8ICdkYWlseSdcblx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3I/OiAoXG5cdFx0cHJvcHM6IFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHNcblx0KSA9PiBSZWFjdC5SZWFjdE5vZGVcblx0cmVuZGVySG91cj86IChkYXRlOiBEYXlqcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGhpZGVOb25CdXNpbmVzc0hvdXJzPzogYm9vbGVhblxuXHRzbG90RHVyYXRpb24/OiBTbG90RHVyYXRpb25cblx0c2Nyb2xsVGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRpc0NlbGxEaXNhYmxlZCxcblx0b25WaWV3Q2hhbmdlLFxuXHRvbkV2ZW50QWRkLFxuXHRvbkV2ZW50VXBkYXRlLFxuXHRvbkV2ZW50RGVsZXRlLFxuXHRvbkRhdGVDaGFuZ2UsXG5cdGxvY2FsZSxcblx0dGltZXpvbmUsXG5cdGRpc2FibGVDZWxsQ2xpY2ssXG5cdGRpc2FibGVFdmVudENsaWNrLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdGRheU1heEV2ZW50cyxcblx0ZXZlbnRTcGFjaW5nID0gMSxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHRoZWFkZXJDb21wb25lbnQsXG5cdGhlYWRlckNsYXNzTmFtZSxcblx0dHJhbnNsYXRpb25zLFxuXHR0cmFuc2xhdG9yLFxuXHRyZW5kZXJSZXNvdXJjZSxcblx0cmVuZGVyRXZlbnRGb3JtLFxuXHRidXNpbmVzc0hvdXJzLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRjbGFzc2VzT3ZlcnJpZGUsXG5cdG9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0cmVuZGVySG91cixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZUV4cG9ydEJ1dHRvbiA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHR3ZWVrVmlld0dyYW51bGFyaXR5ID0gJ2hvdXJseScsXG5cdHNsb3REdXJhdGlvbiA9IDYwLFxuXHRzY3JvbGxUaW1lLFxufSkgPT4ge1xuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlOiBvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdC8vIEV2ZW50IHV0aWxpdGllcyDigJQgYm90aCBmaWx0ZXJzIGdvIHRocm91Z2ggZ2V0RXZlbnRSZXNvdXJjZUlkcyBzbyBzaW5nbGVcblx0Ly8gYW5kIG11bHRpLXJlc291cmNlIGV2ZW50cyBhcmUgaGFuZGxlZCB1bmlmb3JtbHkuXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IENhbGVuZGFyRXZlbnRbXSA9PlxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZSkgPT5cblx0XHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyhlKS5pbmNsdWRlcyhyZXNvdXJjZUlkKVxuXHRcdFx0KSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogQ2FsZW5kYXJFdmVudFtdID0+XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5ldmVudHMuZmlsdGVyKChlKSA9PlxuXHRcdFx0XHRnZXRFdmVudFJlc291cmNlSWRzKGUpLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG5cdFx0XHQpLFxuXHRcdFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRSZXNvdXJjZUJ5SWQgPSB1c2VDYWxsYmFjayhcblx0XHQocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkKTogUmVzb3VyY2UgfCB1bmRlZmluZWQgPT4ge1xuXHRcdFx0aWYgKHJlc291cmNlSWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzb3VyY2VzLmZpbmQoKHJlc291cmNlKSA9PiByZXNvdXJjZS5pZCA9PT0gcmVzb3VyY2VJZClcblx0XHR9LFxuXHRcdFtyZXNvdXJjZXNdXG5cdClcblxuXHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0Y29uc3QgaXNFdmVudENyb3NzUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0XHRyZXR1cm4gQm9vbGVhbihldmVudC5yZXNvdXJjZUlkcyAmJiBldmVudC5yZXNvdXJjZUlkcy5sZW5ndGggPiAxKVxuXHR9LCBbXSlcblxuXHQvLyBDdXN0b20gaGFuZGxlcnNcblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbEluZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5ld0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBjYWxlbmRhckVuZ2luZS50KCduZXdFdmVudCcpLFxuXHRcdFx0XHRcdHN0YXJ0OiBpbmZvLnN0YXJ0LFxuXHRcdFx0XHRcdGVuZDogaW5mby5lbmQsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXG5cdFx0XHRcdGlmIChpbmZvLnJlc291cmNlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRuZXdFdmVudC5yZXNvdXJjZUlkID0gaW5mby5yZXNvdXJjZS5pZFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChuZXdFdmVudClcblx0XHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWREYXRlKGluZm8uc3RhcnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0W29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cblx0KVxuXG5cdC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuXHRjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuXHRcdCgpID0+ICh7XG5cdFx0XHQuLi5jYWxlbmRhckVuZ2luZSxcblx0XHRcdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdFx0XHRyZXNvdXJjZXMsXG5cdFx0XHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2VzLFxuXHRcdFx0Z2V0UmVzb3VyY2VCeUlkLFxuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudFJlc291cmNlSWRzLFxuXHRcdFx0Ly8gT3ZlcnJpZGUgaGFuZGxlcnNcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHQvLyBQYXNzLXRocm91Z2ggcHJvcHNcblx0XHRcdGlzQ2VsbERpc2FibGVkLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZXNvdXJjZXMsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlcyxcblx0XHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0aGFuZGxlRXZlbnRDbGljayxcblx0XHRcdGhhbmRsZURhdGVDbGljayxcblx0XHRcdGlzQ2VsbERpc2FibGVkLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0XHRcdHJlbmRlckhvdXIsXG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdGhpZGVFeHBvcnRCdXR0b24sXG5cdFx0XHRoaWRkZW5EYXlzLFxuXHRcdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRWYWx1ZX0+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7XG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50IGFzIGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCxcblx0Z2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50IGFzIHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCBkYXlqcywge1xuXHR0eXBlIERheWpzLFxuXHR0eXBlIE1hbmlwdWxhdGVUeXBlLFxufSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzLCBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBldmVudE92ZXJsYXBzUmFuZ2UgfSBmcm9tICdAL2xpYi91dGlscy9ldmVudC11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IERheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBEYXlqcywgcmFuZ2U6IHsgc3RhcnQ6IERheWpzOyBlbmQ6IERheWpzIH0pID0+IHZvaWRcblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0dHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG5cdHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZVJldHVybiB7XG5cdGN1cnJlbnREYXRlOiBEYXlqc1xuXHR2aWV3OiBDYWxlbmRhclZpZXdcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0cmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0aXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHNlbGVjdGVkRGF0ZTogRGF5anMgfCBudWxsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0Y3VycmVudExvY2FsZTogc3RyaW5nXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHNldEN1cnJlbnREYXRlOiAoZGF0ZTogRGF5anMpID0+IHZvaWRcblx0c2VsZWN0RGF0ZTogKGRhdGU6IERheWpzKSA9PiB2b2lkXG5cdHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0bmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHRvZGF5OiAoKSA9PiB2b2lkXG5cdGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0dXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHRjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuXHRzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG5cdHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG5cdHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248RGF5anMgfCBudWxsPj5cblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0dDogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmNvbnN0IFZJRVdfVU5JVFM6IFJlY29yZDxDYWxlbmRhclZpZXcsIE1hbmlwdWxhdGVUeXBlPiA9IHtcblx0ZGF5OiAnZGF5Jyxcblx0d2VlazogJ3dlZWsnLFxuXHRtb250aDogJ21vbnRoJyxcblx0eWVhcjogJ3llYXInLFxufVxuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlVmlld1JhbmdlID0gKFxuXHRkYXRlOiBEYXlqcyxcblx0dmlldzogQ2FsZW5kYXJWaWV3LFxuXHRmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9ID0+IHtcblx0aWYgKHZpZXcgPT09ICdkYXknIHx8IHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdHJldHVybiB7IHN0YXJ0OiBkYXRlLnN0YXJ0T2YodmlldyksIGVuZDogZGF0ZS5lbmRPZih2aWV3KSB9XG5cdH1cblx0aWYgKHZpZXcgPT09ICd3ZWVrJykge1xuXHRcdGNvbnN0IGRheXMgPSBnZXRXZWVrRGF5cyhkYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRyZXR1cm4geyBzdGFydDogZGF5c1swXS5zdGFydE9mKCdkYXknKSwgZW5kOiBkYXlzWzZdLmVuZE9mKCdkYXknKSB9XG5cdH1cblx0Ly8gbW9udGggdmlldzogNiB3ZWVrcyDDlyA3IGRheXNcblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKGRhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRyZXR1cm4geyBzdGFydDogd2Vla3NbMF1bMF0uc3RhcnRPZignZGF5JyksIGVuZDogd2Vla3NbNV1bNl0uZW5kT2YoJ2RheScpIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyRW5naW5lID0gKFxuXHRjb25maWc6IENhbGVuZGFyRW5naW5lQ29uZmlnXG4pOiBDYWxlbmRhckVuZ2luZVJldHVybiA9PiB7XG5cdGNvbnN0IHtcblx0XHRldmVudHMgPSBbXSxcblx0XHRmaXJzdERheU9mV2VlayA9IDAsXG5cdFx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRcdGluaXRpYWxEYXRlID0gZGF5anMoKSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9ID0gY29uZmlnXG5cblx0Y29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxEYXlqcz4oXG5cdFx0ZGF5anMuaXNEYXlqcyhpbml0aWFsRGF0ZSkgPyBpbml0aWFsRGF0ZSA6IGRheWpzKGluaXRpYWxEYXRlKVxuXHQpXG5cdGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPENhbGVuZGFyVmlldz4oaW5pdGlhbFZpZXcpXG5cdGNvbnN0IFtjdXJyZW50RXZlbnRzLCBzZXRDdXJyZW50RXZlbnRzXSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnRbXT4oZXZlbnRzKVxuXHRjb25zdCBbaXNFdmVudEZvcm1PcGVuLCBzZXRJc0V2ZW50Rm9ybU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZEV2ZW50LCBzZXRTZWxlY3RlZEV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8RGF5anMgfCBudWxsPihudWxsKVxuXHRjb25zdCBbY3VycmVudExvY2FsZSwgc2V0Q3VycmVudExvY2FsZV0gPSB1c2VTdGF0ZShsb2NhbGUgfHwgJ2VuJylcblx0Y29uc3QgbGFzdEV2ZW50c1Byb3AgPSB1c2VSZWYoZXZlbnRzKVxuXHRjb25zdCBsYXN0VGltZXpvbmVQcm9wID0gdXNlUmVmKHRpbWV6b25lKVxuXHRjb25zdCBsYXN0TG9jYWxlUHJvcCA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuXHRjb25zdCB0OiBUcmFuc2xhdG9yRnVuY3Rpb24gPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAodHJhbnNsYXRvcikgcmV0dXJuIHRyYW5zbGF0b3Jcblx0XHRjb25zdCBkaWN0ID0gdHJhbnNsYXRpb25zIHx8IGRlZmF1bHRUcmFuc2xhdGlvbnNcblx0XHRyZXR1cm4gKGtleTogc3RyaW5nKSA9PiBkaWN0W2tleSBhcyBrZXlvZiBUcmFuc2xhdGlvbnNdIHx8IGtleVxuXHR9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuXHRjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcblx0XHQoc3RhcnREYXRlOiBEYXlqcywgZW5kRGF0ZTogRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRcdFx0Y29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG5cdFx0XHRmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcblx0XHRcdFx0aWYgKGV2ZW50LnJydWxlKSB7XG5cdFx0XHRcdFx0YWxsRXZlbnRzLnB1c2goXG5cdFx0XHRcdFx0XHQuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdFx0XHRzdGFydERhdGUsXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSBlbHNlIGlmIChldmVudE92ZXJsYXBzUmFuZ2UoZXZlbnQsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChldmVudClcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHJldHVybiBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzICE9PSBsYXN0RXZlbnRzUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHRcdGxhc3RFdmVudHNQcm9wLmN1cnJlbnQgPSBldmVudHNcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKGxvY2FsZSAmJiBsb2NhbGUgIT09IGxhc3RMb2NhbGVQcm9wLmN1cnJlbnQpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0XHRsYXN0TG9jYWxlUHJvcC5jdXJyZW50ID0gbG9jYWxlXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmICh0aW1lem9uZSAmJiB0aW1lem9uZSAhPT0gbGFzdFRpbWV6b25lUHJvcC5jdXJyZW50KSB7XG5cdFx0XHRkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuXHRcdFx0c2V0Q3VycmVudERhdGUoKHByZXYpID0+IHByZXYudHoodGltZXpvbmUpKVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT5cblx0XHRcdFx0cHJldi5tYXAoKGUpID0+ICh7XG5cdFx0XHRcdFx0Li4uZSxcblx0XHRcdFx0XHRzdGFydDogZS5zdGFydC50eih0aW1lem9uZSksXG5cdFx0XHRcdFx0ZW5kOiBlLmVuZC50eih0aW1lem9uZSksXG5cdFx0XHRcdH0pKVxuXHRcdFx0KVxuXHRcdFx0bGFzdFRpbWV6b25lUHJvcC5jdXJyZW50ID0gdGltZXpvbmVcblx0XHR9XG5cdH0sIFt0aW1lem9uZV0pXG5cblx0Y29uc3QgdXBkYXRlRGF0ZUFuZE5vdGlmeSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdEYXRlOiBEYXlqcykgPT4ge1xuXHRcdFx0c2V0Q3VycmVudERhdGUobmV3RGF0ZSlcblx0XHRcdGNvbnN0IHJhbmdlID0gY2FsY3VsYXRlVmlld1JhbmdlKG5ld0RhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4obmV3RGF0ZSwgcmFuZ2UpXG5cdFx0fSxcblx0XHRbb25EYXRlQ2hhbmdlLCB2aWV3LCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1cGRhdGVEYXRlQW5kTm90aWZ5XG5cblx0Y29uc3QgbmF2aWdhdGVQZXJpb2QgPSB1c2VDYWxsYmFjayhcblx0XHQoZGlyZWN0aW9uOiAxIHwgLTEpID0+IHtcblx0XHRcdGNvbnN0IG5ld0RhdGUgPVxuXHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHQ/IGN1cnJlbnREYXRlLmFkZCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRcdDogY3VycmVudERhdGUuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdHVwZGF0ZURhdGVBbmROb3RpZnkobmV3RGF0ZSlcblx0XHR9LFxuXHRcdFtjdXJyZW50RGF0ZSwgdmlldywgdXBkYXRlRGF0ZUFuZE5vdGlmeV1cblx0KVxuXG5cdGNvbnN0IG5leHRQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgxKSwgW25hdmlnYXRlUGVyaW9kXSlcblx0Y29uc3QgcHJldlBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKC0xKSwgW25hdmlnYXRlUGVyaW9kXSlcblxuXHRjb25zdCB0b2RheSA9IHVzZUNhbGxiYWNrKFxuXHRcdCgpID0+IHVwZGF0ZURhdGVBbmROb3RpZnkoZGF5anMoKSksXG5cdFx0W3VwZGF0ZURhdGVBbmROb3RpZnldXG5cdClcblxuXHRjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcblx0XHRcdG9uRXZlbnRBZGQ/LihldmVudClcblx0XHR9LFxuXHRcdFtvbkV2ZW50QWRkXVxuXHQpXG5cblx0Y29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRjb25zdCBldmVudFRvVXBkYXRlID0gY3VycmVudEV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9VcGRhdGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudFRvVXBkYXRlLCAuLi51cGRhdGVzIH1cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4gKGV2ZW50LmlkID09PSBldmVudElkID8gbmV3RXZlbnQgOiBldmVudCkpXG5cdFx0XHQpXG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4obmV3RXZlbnQpXG5cdFx0fSxcblx0XHRbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cblx0KVxuXG5cdGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KFxuXHRcdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdFx0KSA9PiB7XG5cdFx0XHRvbkV2ZW50VXBkYXRlPy4oeyAuLi5ldmVudCwgLi4udXBkYXRlcyB9KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG5cdFx0XHRvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKFxuXHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuXHRcdFx0XHRcdHRhcmdldEV2ZW50OiBldmVudCxcblx0XHRcdFx0XHRjdXJyZW50RXZlbnRzLFxuXHRcdFx0XHRcdHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRpZiAoIWV2ZW50VG9EZWxldGUpIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+IHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKSlcblx0XHRcdG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG5cdClcblxuXHRjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdGlmIChldmVudERhdGE/LnN0YXJ0KSB7XG5cdFx0XHRcdHNldFNlbGVjdGVkRGF0ZShldmVudERhdGEuc3RhcnQpXG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzdGFydCA9IGV2ZW50RGF0YT8uc3RhcnQgPz8gY3VycmVudERhdGVcblx0XHRcdHNldFNlbGVjdGVkRXZlbnQoe1xuXHRcdFx0XHR0aXRsZTogdCgnbmV3RXZlbnQnKSxcblx0XHRcdFx0c3RhcnQsXG5cdFx0XHRcdGVuZDogZXZlbnREYXRhPy5lbmQgPz8gc3RhcnQuYWRkKDEsICdob3VyJyksXG5cdFx0XHRcdHJlc291cmNlSWQ6IGV2ZW50RGF0YT8ucmVzb3VyY2VJZCxcblx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRhbGxEYXk6IGV2ZW50RGF0YT8uYWxsRGF5ID8/IGZhbHNlLFxuXHRcdFx0fSBhcyBDYWxlbmRhckV2ZW50KVxuXHRcdFx0c2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY3VycmVudERhdGUsIHRdXG5cdClcblxuXHRjb25zdCBjbG9zZUV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUobnVsbClcblx0XHRzZXRTZWxlY3RlZEV2ZW50KG51bGwpXG5cdFx0c2V0SXNFdmVudEZvcm1PcGVuKGZhbHNlKVxuXHR9LCBbXSlcblxuXHRjb25zdCBoYW5kbGVWaWV3Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG5cdFx0KG5ld1ZpZXc6IENhbGVuZGFyVmlldykgPT4ge1xuXHRcdFx0c2V0VmlldyhuZXdWaWV3KVxuXHRcdFx0b25WaWV3Q2hhbmdlPy4obmV3Vmlldylcblx0XHRcdC8vIFZpZXcgY2hhbmdlIGFmZmVjdHMgdmlzaWJsZSByYW5nZSDigJQgbm90aWZ5IGNvbnN1bWVyc1xuXHRcdFx0Y29uc3QgcmFuZ2UgPSBjYWxjdWxhdGVWaWV3UmFuZ2UoY3VycmVudERhdGUsIG5ld1ZpZXcsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0b25EYXRlQ2hhbmdlPy4oY3VycmVudERhdGUsIHJhbmdlKVxuXHRcdH0sXG5cdFx0W29uVmlld0NoYW5nZSwgb25EYXRlQ2hhbmdlLCBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdGN1cnJlbnRFdmVudHMuZmluZChcblx0XHRcdFx0XHQoZSkgPT4gKGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYCkgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG5cdFx0XHRcdCkgfHwgbnVsbFxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHZpZXcsXG5cdFx0ZXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG5cdFx0cmF3RXZlbnRzOiBjdXJyZW50RXZlbnRzLFxuXHRcdGlzRXZlbnRGb3JtT3Blbixcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdHNlbGVjdGVkRGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRkYXlNYXhFdmVudHM6IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdHNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGUsXG5cdFx0c2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0YWRkRXZlbnQsXG5cdFx0dXBkYXRlRXZlbnQsXG5cdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0ZGVsZXRlRXZlbnQsXG5cdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZXRTZWxlY3RlZEV2ZW50LFxuXHRcdHNldElzRXZlbnRGb3JtT3Blbixcblx0XHRzZXRTZWxlY3RlZERhdGUsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHR0LFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBvbWl0S2V5cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYi91dGlscydcblxuLyoqXG4gKiBDb252ZXJ0cyBhIERheWpzIG9iamVjdCB0byBhIFwiRmxvYXRpbmcgVGltZVwiIERhdGUgcmVwcmVzZW50YXRpb24uXG4gKiBJbiBGbG9hdGluZyBUaW1lLCB3ZSB1c2UgYSBVVEMgRGF0ZSBvYmplY3QgYnV0IHNldCBpdHMgVVRDIGNvbXBvbmVudHNcbiAqIHRvIG1hdGNoIHRoZSBsb2NhbCBjb21wb25lbnRzIG9mIHRoZSB1c2VyJ3MgZGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgUlJ1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIGl0IGVuc3VyZXMgdGhhdCBhIHJ1bGVcbiAqIGxpa2UgXCJFdmVyeSBXZWRuZXNkYXlcIiByZWZlcnMgdG8gdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXksIGV2ZW4gaWZcbiAqIHRoYXQgdGltZSBmYWxscyBvbiBhIFRodXJzZGF5IGluIGFjdHVhbCBVVEMuXG4gKi9cbmNvbnN0IHRvRmxvYXRpbmdEYXRlID0gKGQ6IERheWpzKTogRGF0ZSA9PiB7XG5cdHJldHVybiBuZXcgRGF0ZShcblx0XHREYXRlLlVUQyhcblx0XHRcdGQueWVhcigpLFxuXHRcdFx0ZC5tb250aCgpLFxuXHRcdFx0ZC5kYXRlKCksXG5cdFx0XHRkLmhvdXIoKSxcblx0XHRcdGQubWludXRlKCksXG5cdFx0XHRkLnNlY29uZCgpLFxuXHRcdFx0ZC5taWxsaXNlY29uZCgpXG5cdFx0KVxuXHQpXG59XG5cbi8qKlxuICogQ29udmVydHMgYSBcIkZsb2F0aW5nIFRpbWVcIiBEYXRlIGJhY2sgdG8gYSBEYXlqcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGNvbnRleHQuXG4gKiBJdCB0YWtlcyB0aGUgWU1ESE1TIGNvbXBvbmVudHMgZnJvbSB0aGUgVVRDIERhdGUgYW5kIGFwcGxpZXMgdGhlbSB0byB0aGVcbiAqIHJlZmVyZW5jZSBEYXlqcyBvYmplY3QgKHByZXNlcnZpbmcgaXRzIHRpbWV6b25lL2xvY2FsZSkuXG4gKi9cbmNvbnN0IGZyb21GbG9hdGluZ0RhdGUgPSAoZGF0ZTogRGF0ZSwgcmVmZXJlbmNlOiBEYXlqcyk6IERheWpzID0+IHtcblx0cmV0dXJuIHJlZmVyZW5jZVxuXHRcdC55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSlcblx0XHQubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKVxuXHRcdC5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKVxuXHRcdC5ob3VyKGRhdGUuZ2V0VVRDSG91cnMoKSlcblx0XHQubWludXRlKGRhdGUuZ2V0VVRDTWludXRlcygpKVxuXHRcdC5zZWNvbmQoZGF0ZS5nZXRVVENTZWNvbmRzKCkpXG5cdFx0Lm1pbGxpc2Vjb25kKGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpXG59XG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbi8qKlxuICogQ29uc2lzdGVudGx5IGRlcml2ZXMgYSBwYXJlbnQgVUlEIGZyb20gYW4gZXZlbnQuXG4gKiBVc2VzIHRoZSBleHBsaWNpdCBgdWlkYCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGAke2lkfUBpbGFteS5jYWxlbmRhcmAuXG4gKi9cbmNvbnN0IGdldEV2ZW50UGFyZW50VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcblx0cmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50ICh0aGUgb25lIHdpdGggcnJ1bGUgYW5kIG5vIHJlY3VycmVuY2VJZClcbiAqIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHBhcmVudCBVSUQgYXMgdGhlIHRhcmdldCBldmVudC5cbiAqIFRocm93cyBpZiBub3QgZm91bmQg4oCUIGNhbGxlcnMgYXNzdW1lIHRoZSBzZXJpZXMgZXhpc3RzLlxuICovXG5jb25zdCBmaW5kQmFzZUV2ZW50SW5kZXggPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuKTogbnVtYmVyID0+IHtcblx0Y29uc3QgdGFyZ2V0VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQodGFyZ2V0RXZlbnQpXG5cdGNvbnN0IGluZGV4ID0gZXZlbnRzLmZpbmRJbmRleChcblx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHRhcmdldFVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuXHQpXG5cdGlmIChpbmRleCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG5cdH1cblx0cmV0dXJuIGluZGV4XG59XG5cbi8qKlxuICogRm9yIHRoZSBcImZvbGxvd2luZ1wiIHNjb3BlOiB0aGUgVU5USUwgZGF0ZSB0aGF0IHRlcm1pbmF0ZXMgdGhlIG9yaWdpbmFsXG4gKiBzZXJpZXMgaXMgdGhlIGVuZCBvZiB0aGUgZGF5IEJFRk9SRSB0aGUgdGFyZ2V0IGV2ZW50J3Mgc3RhcnQuIFRoaXMga2VlcHNcbiAqIHRoZSBsYXN0IHByZS10YXJnZXQgb2NjdXJyZW5jZSBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXMuXG4gKi9cbmNvbnN0IGdldFNlcmllc1Rlcm1pbmF0aW9uRGF0ZSA9ICh0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudCk6IERhdGUgPT5cblx0dGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4vKipcbiAqIEtlZXBzIHRoZSBjYWxlbmRhciBkYXkgZnJvbSBgdGFyZ2V0YCB3aGlsZSBhcHBseWluZyB0aGUgdGltZS1vZi1kYXkgZnJvbSBgc291cmNlYC5cbiAqIFVzZWQgdG8gZWRpdCByZWN1cnJpbmcgc2VyaWVzIGFuY2hvcnMgd2l0aG91dCBzaGlmdGluZyB0aGUgc2VyaWVzIHRvIGFuIGluc3RhbmNlIGRheS5cbiAqL1xuY29uc3Qgd2l0aFRpbWVPZkRheSA9ICh0YXJnZXQ6IERheWpzLCBzb3VyY2U6IERheWpzKTogRGF5anMgPT4ge1xuXHRjb25zdCB0aW1lT2ZEYXlNcyA9IHNvdXJjZS5kaWZmKHNvdXJjZS5zdGFydE9mKCdkYXknKSwgJ21pbGxpc2Vjb25kJylcblx0cmV0dXJuIHRhcmdldC5zdGFydE9mKCdkYXknKS5hZGQodGltZU9mRGF5TXMsICdtaWxsaXNlY29uZCcpXG59XG5cbi8qKlxuICogRm9yIHNjb3BlIFwiYWxsXCI6IGFwcGx5IHRoZSBzdWJtaXR0ZWQgd2FsbC1jbG9jayB0aW1lIHRvIHRoZSBiYXNlIGV2ZW50IGFuY2hvci5cbiAqIFRoaXMga2VlcHMgdGhlIHNlcmllcyBhbmNob3JlZCB0byBpdHMgb3JpZ2luYWwgZGF0ZSB3aGlsZSBjaGFuZ2luZyBpdHMgdGltZS5cbiAqL1xuY29uc3QgYXBwbHlBbGxTY29wZVVwZGF0ZXMgPSAoXG5cdGJhc2VFdmVudDogQ2FsZW5kYXJFdmVudCxcblx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuKTogeyBzdGFydDogRGF5anM7IGVuZDogRGF5anM7IHJydWxlOiBSUnVsZU9wdGlvbnMgfCB1bmRlZmluZWQgfSA9PiB7XG5cdGxldCBuZXdTdGFydCA9IGJhc2VFdmVudC5zdGFydFxuXHQvLyBpZiB0aGUgc3RhcnQgaGFzIGNoYW5nZWQga2VlcCB0aGUgc2FtZSBjYWxlbmRhciBkYXkgYnV0IHdpdGggdGhlIG5ldyB0aW1lXG5cdGlmICh1cGRhdGVzLnN0YXJ0KSB7XG5cdFx0bmV3U3RhcnQgPSB3aXRoVGltZU9mRGF5KGJhc2VFdmVudC5zdGFydCwgdXBkYXRlcy5zdGFydClcblx0fVxuXG5cdGxldCBuZXdFbmQgPSBiYXNlRXZlbnQuZW5kXG5cdC8vIGVuc3VyZSB0aGUgbmV3IGVuZCBpcyBjb21wdXRlIHNvIHRoZSBkdXJhdGlvbiBpcyBwcmVzZXJ2ZWRcblx0aWYgKHVwZGF0ZXMuc3RhcnQgJiYgdXBkYXRlcy5lbmQpIHtcblx0XHRuZXdFbmQgPSBuZXdTdGFydC5hZGQodXBkYXRlcy5lbmQuZGlmZih1cGRhdGVzLnN0YXJ0KSwgJ21pbGxpc2Vjb25kJylcblx0fSBlbHNlIGlmICh1cGRhdGVzLnN0YXJ0KSB7XG5cdFx0bmV3RW5kID0gbmV3U3RhcnQuYWRkKGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpLCAnbWlsbGlzZWNvbmQnKVxuXHR9IGVsc2UgaWYgKHVwZGF0ZXMuZW5kKSB7XG5cdFx0bmV3RW5kID0gd2l0aFRpbWVPZkRheShiYXNlRXZlbnQuZW5kLCB1cGRhdGVzLmVuZClcblx0fVxuXG5cdGNvbnN0IG1lcmdlZFJydWxlID0gdXBkYXRlcy5ycnVsZSA/PyBiYXNlRXZlbnQucnJ1bGVcblx0bGV0IG5ld1JydWxlOiBSUnVsZU9wdGlvbnMgfCB1bmRlZmluZWRcblx0aWYgKG1lcmdlZFJydWxlKSB7XG5cdFx0bmV3UnJ1bGUgPSB7IC4uLm1lcmdlZFJydWxlLCBkdHN0YXJ0OiBuZXdTdGFydC50b0RhdGUoKSB9XG5cdH1cblxuXHRyZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kLCBycnVsZTogbmV3UnJ1bGUgfVxufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVSZWN1cnJpbmdFdmVudHNQcm9wcyB7XG5cdGV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzdGFydERhdGU6IERheWpzXG5cdGVuZERhdGU6IERheWpzXG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyA9ICh7XG5cdGV2ZW50LFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzdGFydERhdGUsXG5cdGVuZERhdGUsXG59OiBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Ly8gSWYgbm90IGEgcmVjdXJyaW5nIGV2ZW50LCByZXR1cm4gZW1wdHkgYXJyYXlcblx0aWYgKCFldmVudC5ycnVsZSkge1xuXHRcdHJldHVybiBbXVxuXHR9XG5cblx0dHJ5IHtcblx0XHQvLyBEVFNUQVJUIGFuZCBTRUFSQ0ggV0lORE9XIFRSQU5TRk9STUFUSU9OXG5cdFx0Ly8gVHJhbnNmb3JtIGFsbCBkYXRlcyB0byBcImZsb2F0aW5nIHRpbWVcIiAoVVRDIHdpdGggbG9jYWwgY29tcG9uZW50cylcblx0XHQvLyBUaGlzIGVuc3VyZXMgUlJ1bGUgZXZhbHVhdGVzIFwiV2VkbmVzZGF5XCIgYXMgdGhlIHVzZXIncyBsb2NhbCBXZWRuZXNkYXlcblx0XHRjb25zdCBmbG9hdGluZ1N0YXJ0ID0gdG9GbG9hdGluZ0RhdGUoZXZlbnQuc3RhcnQpXG5cdFx0Y29uc3QgZmxvYXRpbmdVbnRpbCA9IGV2ZW50LnJydWxlLnVudGlsXG5cdFx0XHQ/IHRvRmxvYXRpbmdEYXRlKGRheWpzKGV2ZW50LnJydWxlLnVudGlsKSlcblx0XHRcdDogdW5kZWZpbmVkXG5cblx0XHRjb25zdCBydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zID0ge1xuXHRcdFx0Li4uZXZlbnQucnJ1bGUsXG5cdFx0XHRkdHN0YXJ0OiBmbG9hdGluZ1N0YXJ0LFxuXHRcdFx0dW50aWw6IGZsb2F0aW5nVW50aWwsXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBwYXJlbnRVaWQgPSBnZXRFdmVudFBhcmVudFVJRChldmVudClcblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBnZXRFdmVudFBhcmVudFVJRChlKSA9PT0gcGFyZW50VWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gdG9GbG9hdGluZ0RhdGUoXG5cdFx0XHRzdGFydERhdGUuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHQpXG5cdFx0Y29uc3QgZW5kRGF0ZVRpbWUgPSB0b0Zsb2F0aW5nRGF0ZShlbmREYXRlKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZnJvbUZsb2F0aW5nRGF0ZShvY2N1cnJlbmNlLCBldmVudC5zdGFydClcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZ2V0RXZlbnRQYXJlbnRVSUQoZXZlbnQpXG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdFx0aWQ6IHJlY3VycmluZ0V2ZW50SWQsXG5cdFx0XHRcdFx0c3RhcnQ6IG9jY3VycmVuY2VEYXRlLFxuXHRcdFx0XHRcdGVuZDogbmV3RW5kVGltZSxcblx0XHRcdFx0XHR1aWQ6IHBhcmVudFVJRCwgLy8gU2FtZSBVSUQgYXMgcGFyZW50IGZvciBwcm9wZXIgZ3JvdXBpbmdcblx0XHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBJbnN0YW5jZSBldmVudHMgZG9uJ3QgaGF2ZSBSUlVMRVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigocmVjdXJyaW5nRXZlbnQpID0+IHtcblx0XHRcdFx0Ly8gRmlsdGVyIG91dCBFWERBVEUgZXhjbHVzaW9uc1xuXHRcdFx0XHRjb25zdCBoYXNFeGRhdGVzID0gZXZlbnQuZXhkYXRlcyAmJiBldmVudC5leGRhdGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0aWYgKGhhc0V4ZGF0ZXMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudFN0YXJ0SVNPID0gcmVjdXJyaW5nRXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0XHRcdGNvbnN0IGlzRXhjbHVkZWQgPSBldmVudC5leGRhdGVzPy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuXHRcdFx0XHRcdGlmIChpc0V4Y2x1ZGVkKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2Vcblx0XHRcdFx0Ly8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcblx0XHRcdFx0Ly8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuXHRcdFx0XHRjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG5cdFx0XHRcdFx0cmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG5cdFx0XHRcdHJldHVybiBldmVudFNwYW5zUmFuZ2Vcblx0XHRcdH0pXG5cblx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuXHRcdClcblx0fVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG5cdHRhcmdldEV2ZW50LFxuXHR1cGRhdGVzLFxuXHRjdXJyZW50RXZlbnRzLFxuXHRzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gZmluZEJhc2VFdmVudEluZGV4KHVwZGF0ZWRFdmVudHMsIHRhcmdldEV2ZW50KVxuXHRjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG5cdHN3aXRjaCAoc2NvcGUpIHtcblx0XHRjYXNlICd0aGlzJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcblx0XHRcdGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuXHRcdFx0Y29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cblx0XHRcdC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcblx0XHRcdGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuXHRcdFx0XHQuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG5cdFx0XHRcdC4uLnVwZGF0ZXMsXG5cdFx0XHRcdGlkOiBtb2RpZmllZEV2ZW50SWQsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG5cdFx0XHRcdHVpZDogZ2V0RXZlbnRQYXJlbnRVSUQoYmFzZUV2ZW50KSwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG5cdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2ZvbGxvd2luZyc6IHtcblx0XHRcdC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcblxuXHRcdFx0Ly8gQ3JlYXRlIG5ldyBzZXJpZXMgc3RhcnRpbmcgZnJvbSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3Qgb3JpZ2luYWxEdXJhdGlvbiA9IGJhc2VFdmVudC5lbmQuZGlmZihiYXNlRXZlbnQuc3RhcnQpXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNTdGFydFRpbWUgPSB1cGRhdGVzLnN0YXJ0IHx8IHRhcmdldEV2ZW50LnN0YXJ0XG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFbmRUaW1lID1cblx0XHRcdFx0dXBkYXRlcy5lbmQgfHwgbmV3U2VyaWVzU3RhcnRUaW1lLmFkZChvcmlnaW5hbER1cmF0aW9uKVxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzSWQgPSBgJHtiYXNlRXZlbnQuaWR9X2ZvbGxvd2luZ2Bcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1VJRCA9IGAke25ld1Nlcmllc0lkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0Li4udXBkYXRlcy5ycnVsZSxcblx0XHRcdFx0XHRkdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUudG9EYXRlKCksXG5cdFx0XHRcdH0gYXMgUlJ1bGVPcHRpb25zLFxuXHRcdFx0XHRpZDogbmV3U2VyaWVzSWQsXG5cdFx0XHRcdHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG5cdFx0XHRcdHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG5cdFx0XHRcdGVuZDogbmV3U2VyaWVzRW5kVGltZSxcblx0XHRcdFx0cmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudCAoYW5jaG9yIGRhdGVzLCBub3QgaW5zdGFuY2UgZGF5KVxuXHRcdFx0Y29uc3QgcGFyZW50VWlkID0gZ2V0RXZlbnRQYXJlbnRVSUQoYmFzZUV2ZW50KVxuXHRcdFx0Y29uc3QgYW5jaG9yZWQgPSBhcHBseUFsbFNjb3BlVXBkYXRlcyhiYXNlRXZlbnQsIHVwZGF0ZXMpXG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRzdGFydDogYW5jaG9yZWQuc3RhcnQsXG5cdFx0XHRcdGVuZDogYW5jaG9yZWQuZW5kLFxuXHRcdFx0XHRycnVsZTogYW5jaG9yZWQucnJ1bGUsXG5cdFx0XHRcdGV4ZGF0ZXM6IHVuZGVmaW5lZCxcblx0XHRcdH1cblx0XHRcdGNvbnN0IGlzRGV0YWNoZWRPdmVycmlkZU9mU2VyaWVzID0gKGU6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcblx0XHRcdFx0Y29uc3QgaXNEZXRhY2hlZE92ZXJyaWRlID0gQm9vbGVhbihlLnJlY3VycmVuY2VJZCkgJiYgIWUucnJ1bGVcblx0XHRcdFx0Y29uc3QgYmVsb25nc1RvU2VyaWVzID0gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgPT09IHBhcmVudFVpZFxuXHRcdFx0XHRyZXR1cm4gaXNEZXRhY2hlZE92ZXJyaWRlICYmIGJlbG9uZ3NUb1Nlcmllc1xuXHRcdFx0fVxuXHRcdFx0Ly8gR29vZ2xlLUNhbGVuZGFyIGJlaGF2aW9yOiBhbiBcImFsbFwiIGVkaXQgcmVzZXRzIHRoZSBzZXJpZXMg4oCUIGRyb3AgZGV0YWNoZWRcblx0XHRcdC8vIG92ZXJyaWRlcyBhbmQgY2xlYXIgZXhjZXB0aW9ucyAocHJldmlvdXNseSBzcGxpdC9kZWxldGVkIG9jY3VycmVuY2VzIHJldHVybikuXG5cdFx0XHRyZXR1cm4gdXBkYXRlZEV2ZW50cy5maWx0ZXIoKGUpID0+ICFpc0RldGFjaGVkT3ZlcnJpZGVPZlNlcmllcyhlKSlcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXHRjb25zdCBiYXNlRXZlbnRJbmRleCA9IGZpbmRCYXNlRXZlbnRJbmRleCh1cGRhdGVkRXZlbnRzLCB0YXJnZXRFdmVudClcblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblx0XHRcdGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHR1bnRpbDogZ2V0U2VyaWVzVGVybWluYXRpb25EYXRlKHRhcmdldEV2ZW50KSxcblx0XHRcdFx0fSBhcyBSUnVsZU9wdGlvbnMsXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFJlbW92ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXNcblx0XHRcdGNvbnN0IHRhcmdldFVpZCA9IGdldEV2ZW50UGFyZW50VUlEKHRhcmdldEV2ZW50KVxuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZ2V0RXZlbnRQYXJlbnRVSUQoZSkgIT09IHRhcmdldFVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0c2VhcmNoVGltZTogJ1NlYXJjaCB0aW1lLi4uJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqIFdoZXRoZXIgdGhlIGdpdmVuIGRhdGUgZmFsbHMgb24gdG9kYXkgKGNhbGVuZGFyIGRheSwgcmVzcGVjdGluZyB0aW1lem9uZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUb2RheShkYXRlOiBEYXlqcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gZGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG59XG5cbi8qKiBgWVlZWS1NTS1ERGAgc3RyaW5nIHVzZWQgYXMgYSBzdGFibGUgcGVyLWRheSBrZXkgYWNyb3NzIHRoZSBjb2RlYmFzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlLZXkoZGF0ZTogRGF5anMpOiBzdHJpbmcge1xuXHRyZXR1cm4gZGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBEYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogRGF5anMpOiBEYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRjb25zdCBzdGFydE9mTW9udGggPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0c3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxufVxuXG5pbnRlcmZhY2UgR2V0RGF5SG91cnNPcHRpb25zIHtcblx0cmVmZXJlbmNlRGF0ZT86IERheWpzXG5cdGxlbmd0aD86IG51bWJlclxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBhcnJheSBvZiAyNCBkYXlqcyBvYmplY3RzIHJlcHJlc2VudGluZyBob3VybHkgc2xvdHMgZm9yIGEgZGF5LlxuICogVXNlcyAuaG91cihpKSBzbyBlYWNoIHJvdyBtYXBzIHRvIFwidGhlIGhvdXIgbGFiZWxlZCBpXCIg4oCUIGtlZXBpbmcgZ3JpZCByb3dzXG4gKiBhbGlnbmVkIGFjcm9zcyBjb2x1bW5zIGluIHdlZWsgdmlld3MuIE9uIERTVCBzcHJpbmctZm9yd2FyZCwgLmhvdXIoMikgcmV0dXJuc1xuICogMyBBTSAodGhlIG5vbi1leGlzdGVudCBob3VyIGlzIGNvbGxhcHNlZCksIGJ1dCB0aGUgZ3JpZCBrZXkgZml4IChkYXlJbmRleClcbiAqIGFuZCBwZXItZGF5IGdlbmVyYXRpb24gaW4gdmlld3MgaGFuZGxlIHRoaXMgY29ycmVjdGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IERheWpzW10ge1xuXHRjb25zdCBzdGFydE9mRGF5ID0gcmVmZXJlbmNlRGF0ZS5zdGFydE9mKCdkYXknKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRzdGFydE9mRGF5LmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKS5taWxsaXNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqXG4gKiBLZWVwIG9ubHkgZXZlbnRzIHdob3NlIGlkIGFwcGVhcnMgaW4gYHJlc291cmNlRXZlbnRzYC4gSWRzIGFyZSBjb21wYXJlZCBhc1xuICogc3RyaW5ncyBzbyBudW1lcmljL3N0cmluZyBtaXNtYXRjaGVzIGJldHdlZW4gc291cmNlcyBkb24ndCBjYXVzZSBmYWxzZVxuICogbmVnYXRpdmVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG5cdHJlc291cmNlRXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbik6IENhbGVuZGFyRXZlbnRbXSB7XG5cdGNvbnN0IGlkcyA9IG5ldyBTZXQocmVzb3VyY2VFdmVudHMubWFwKChlKSA9PiBTdHJpbmcoZS5pZCkpKVxuXHRyZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGlkcy5oYXMoU3RyaW5nKGV2ZW50LmlkKSkpXG59XG5cbi8qKlxuICogV2hldGhlciBhbiBldmVudCdzIGludGVydmFsIG92ZXJsYXBzIHdpdGggdGhlIGBbc3RhcnQsIGVuZF1gIHJhbmdlXG4gKiAoaW5jbHVzaXZlKS4gQ292ZXJzIHRoZSB0aHJlZSBjYXNlczogc3RhcnRzIGluc2lkZSB0aGUgcmFuZ2UsIGVuZHMgaW5zaWRlXG4gKiB0aGUgcmFuZ2UsIG9yIGZ1bGx5IHNwYW5zIHRoZSByYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50T3ZlcmxhcHNSYW5nZShcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdHN0YXJ0OiBEYXlqcyxcblx0ZW5kOiBEYXlqc1xuKTogYm9vbGVhbiB7XG5cdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnQpICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZClcblx0Y29uc3QgZW5kc0luUmFuZ2UgPVxuXHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0KSAmJiBldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kKVxuXHRjb25zdCBzcGFuc1JhbmdlID0gZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnQpICYmIGV2ZW50LmVuZC5pc0FmdGVyKGVuZClcblx0cmV0dXJuIHN0YXJ0c0luUmFuZ2UgfHwgZW5kc0luUmFuZ2UgfHwgc3BhbnNSYW5nZVxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5jb25zdCBTQ09QRVMgPSBbXG5cdHtcblx0XHRzY29wZTogJ3RoaXMnLFxuXHRcdHRpdGxlOiAndGhpc0V2ZW50Jyxcblx0XHRlZGl0S2V5OiAnb25seUNoYW5nZVRoaXMnLFxuXHRcdGRlbGV0ZUtleTogJ29ubHlEZWxldGVUaGlzJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnZm9sbG93aW5nJyxcblx0XHR0aXRsZTogJ3RoaXNBbmRGb2xsb3dpbmdFdmVudHMnLFxuXHRcdGVkaXRLZXk6ICdjaGFuZ2VUaGlzQW5kRnV0dXJlJyxcblx0XHRkZWxldGVLZXk6ICdkZWxldGVUaGlzQW5kRnV0dXJlJyxcblx0fSxcblx0e1xuXHRcdHNjb3BlOiAnYWxsJyxcblx0XHR0aXRsZTogJ2FsbEV2ZW50cycsXG5cdFx0ZWRpdEtleTogJ2NoYW5nZUVudGlyZVNlcmllcycsXG5cdFx0ZGVsZXRlS2V5OiAnZGVsZXRlRW50aXJlU2VyaWVzJyxcblx0fSxcbl0gYXMgY29uc3RcblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b25DbG9zZTogKCkgPT4gdm9pZFxuXHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcgfCAnZGVsZXRlJ1xuXHRldmVudFRpdGxlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlY3VycmVuY2VFZGl0RGlhbG9nKHtcblx0aXNPcGVuLFxuXHRvbkNsb3NlLFxuXHRvbkNvbmZpcm0sXG5cdG9wZXJhdGlvblR5cGUsXG5cdGV2ZW50VGl0bGUsXG59OiBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzKSB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7IHQ6IGNvbnRleHQudCB9KSlcblxuXHRjb25zdCBoYW5kbGVTY29wZVNlbGVjdCA9IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdG9uQ29uZmlybShzY29wZSlcblx0XHRvbkNsb3NlKClcblx0fVxuXG5cdGNvbnN0IGlzRWRpdCA9IG9wZXJhdGlvblR5cGUgPT09ICdlZGl0J1xuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9IG9wZW49e2lzT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1tZFwiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdlZGl0UmVjdXJyaW5nRXZlbnQnKSA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHQ8RGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0XHRcIntldmVudFRpdGxlfVwieycgJ31cblx0XHRcdFx0XHRcdHtpc0VkaXRcblx0XHRcdFx0XHRcdFx0PyB0KCdlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpXG5cdFx0XHRcdFx0XHRcdDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnRRdWVzdGlvbicpfVxuXHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdDwvRGlhbG9nSGVhZGVyPlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0zXCI+XG5cdFx0XHRcdFx0e1NDT1BFUy5tYXAoKHsgc2NvcGUsIHRpdGxlLCBlZGl0S2V5LCBkZWxldGVLZXkgfSkgPT4gKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdFx0a2V5PXtzY29wZX1cblx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3Qoc2NvcGUpfVxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KHRpdGxlKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dChpc0VkaXQgPyBlZGl0S2V5IDogZGVsZXRlS2V5KX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi90eXBlcydcblxuaW50ZXJmYWNlIERyb3BDZWxsRGF0YSB7XG5cdHR5cGU/OiBzdHJpbmdcblx0ZGF0ZT86IHN0cmluZ1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGdldFVwZGF0ZWRFdmVudCA9IChcblx0ZXZlbnQ6IERyYWdFbmRFdmVudCxcblx0YWN0aXZlRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4pID0+IHtcblx0Y29uc3QgeyBhY3RpdmUsIG92ZXIgfSA9IGV2ZW50XG5cblx0aWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXG5cdGNvbnN0IGRhdGEgPSAob3Zlci5kYXRhLmN1cnJlbnQgfHwge30pIGFzIERyb3BDZWxsRGF0YVxuXHRjb25zdCBpc1RpbWVDZWxsID0gZGF0YS50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gZGF0YVxuXHRsZXQgbmV3U3RhcnQ6IERheWpzXG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBkYXRhXG5cblx0XHQvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG5cdFx0bmV3U3RhcnQgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpXG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgeyBkYXRlIH0gPSBkYXRhXG5cblx0XHRuZXdTdGFydCA9IGRheWpzKGRhdGUpXG5cdH1cblxuXHRjb25zdCBldmVudER1cmF0aW9uID0gYWN0aXZlRXZlbnQuZW5kLmRpZmYoYWN0aXZlRXZlbnQuc3RhcnQsICdzZWNvbmQnKVxuXG5cdC8vIENyZWF0ZSBuZXcgZW5kIHRpbWUgYnkgYWRkaW5nIHRoZSBvcmlnaW5hbCBkdXJhdGlvblxuXHRsZXQgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGV2ZW50RHVyYXRpb24sICdzZWNvbmQnKVxuXG5cdGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcblx0XHQvLyBJZiB0aGUgbmV3IGVuZCB0aW1lIGlzIGF0IG1pZG5pZ2h0LCBzZXQgaXQgdG8gMjQgaG91cnMgb2YgcGFydGlhbCBkYXlcblx0XHRuZXdFbmQgPSBuZXdFbmQuc3VidHJhY3QoMSwgJ2RheScpLmVuZE9mKCdkYXknKVxuXHR9XG5cblx0Ly8gVXBkYXRlIHRoZSBldmVudCB3aXRoIG5ldyB0aW1lcyBhbmQgcmVzb3VyY2UgaWYgY2hhbmdlZFxuXHRjb25zdCB1cGRhdGVzID0ge1xuXHRcdHN0YXJ0OiBuZXdTdGFydCxcblx0XHRlbmQ6IG5ld0VuZCxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGFsbERheTogaXNUaW1lQ2VsbCA/IGZhbHNlIDogKGFsbERheSA/PyBhY3RpdmVFdmVudC5hbGxEYXkpLFxuXHR9XG5cdHJldHVybiB7IGFjdGl2ZUV2ZW50LCB1cGRhdGVzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ092ZXJsYXkgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRXZlbnREcmFnT3ZlcmxheVByb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8eyBzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkIH0+XG59XG5cbmV4cG9ydCBjb25zdCBFdmVudERyYWdPdmVybGF5OiBSZWFjdC5GQzxFdmVudERyYWdPdmVybGF5UHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRzZXRBY3RpdmVFdmVudCxcblx0fSkpXG5cblx0cmV0dXJuIChcblx0XHQ8RHJhZ092ZXJsYXkgbW9kaWZpZXJzPXtbc25hcENlbnRlclRvQ3Vyc29yXX0+XG5cdFx0XHR7YWN0aXZlRXZlbnQgJiYgKFxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdjdXJzb3ItZ3JhYiB0cnVuY2F0ZSByb3VuZGVkIGJnLWFtYmVyLTIwMCBwLTIgdGV4dC1bMTBweF0gc2hhZG93LWxnIHNtOnRleHQteHMgdy0yMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcblx0XHRcdFx0XHRcdGFjdGl2ZUV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7YWN0aXZlRXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCl9XG5cdFx0PC9EcmFnT3ZlcmxheT5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBEaWFsb2dGb290ZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0RheSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQge1xuXHRidWlsZERhdGVUaW1lLFxuXHRidWlsZEVuZERhdGVUaW1lLFxuXHRnZXRUaW1lQ29uc3RyYWludHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgdXNlRWZmZWN0aXZlQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvaG9va3MvdXNlLWVmZmVjdGl2ZS1idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBbXG5cdHsgdmFsdWU6ICdiZy1ibHVlLTEwMCB0ZXh0LWJsdWUtODAwJywgbGFiZWw6ICdCbHVlJyB9LFxuXHR7IHZhbHVlOiAnYmctZ3JlZW4tMTAwIHRleHQtZ3JlZW4tODAwJywgbGFiZWw6ICdHcmVlbicgfSxcblx0eyB2YWx1ZTogJ2JnLXB1cnBsZS0xMDAgdGV4dC1wdXJwbGUtODAwJywgbGFiZWw6ICdQdXJwbGUnIH0sXG5cdHsgdmFsdWU6ICdiZy1yZWQtMTAwIHRleHQtcmVkLTgwMCcsIGxhYmVsOiAnUmVkJyB9LFxuXHR7IHZhbHVlOiAnYmcteWVsbG93LTEwMCB0ZXh0LXllbGxvdy04MDAnLCBsYWJlbDogJ1llbGxvdycgfSxcblx0eyB2YWx1ZTogJ2JnLXBpbmstMTAwIHRleHQtcGluay04MDAnLCBsYWJlbDogJ1BpbmsnIH0sXG5cdHsgdmFsdWU6ICdiZy1pbmRpZ28tMTAwIHRleHQtaW5kaWdvLTgwMCcsIGxhYmVsOiAnSW5kaWdvJyB9LFxuXHR7IHZhbHVlOiAnYmctYW1iZXItMTAwIHRleHQtYW1iZXItODAwJywgbGFiZWw6ICdBbWJlcicgfSxcblx0eyB2YWx1ZTogJ2JnLWVtZXJhbGQtMTAwIHRleHQtZW1lcmFsZC04MDAnLCBsYWJlbDogJ0VtZXJhbGQnIH0sXG5cdHsgdmFsdWU6ICdiZy1za3ktMTAwIHRleHQtc2t5LTgwMCcsIGxhYmVsOiAnU2t5JyB9LFxuXHR7IHZhbHVlOiAnYmctdmlvbGV0LTEwMCB0ZXh0LXZpb2xldC04MDAnLCBsYWJlbDogJ1Zpb2xldCcgfSxcblx0eyB2YWx1ZTogJ2JnLXJvc2UtMTAwIHRleHQtcm9zZS04MDAnLCBsYWJlbDogJ1Jvc2UnIH0sXG5cdHsgdmFsdWU6ICdiZy10ZWFsLTEwMCB0ZXh0LXRlYWwtODAwJywgbGFiZWw6ICdUZWFsJyB9LFxuXHR7IHZhbHVlOiAnYmctb3JhbmdlLTEwMCB0ZXh0LW9yYW5nZS04MDAnLCBsYWJlbDogJ09yYW5nZScgfSxcbl1cblxudHlwZSBUZXh0RmllbGROYW1lID0gJ3RpdGxlJyB8ICdkZXNjcmlwdGlvbicgfCAnbG9jYXRpb24nXG5cbmludGVyZmFjZSBFdmVudEZvcm1UZXh0RmllbGRQcm9wcyB7XG5cdG5hbWU6IFRleHRGaWVsZE5hbWVcblx0bGFiZWw6IHN0cmluZ1xuXHRwbGFjZWhvbGRlcjogc3RyaW5nXG5cdHZhbHVlOiBzdHJpbmdcblx0cmVxdWlyZWQ/OiBib29sZWFuXG5cdG9uQ2hhbmdlOiAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4gdm9pZFxufVxuXG4vLyBTaGFyZWQgdGl0bGUgLyBkZXNjcmlwdGlvbiAvIGxvY2F0aW9uIGlucHV0cyAobXVzdCBsaXZlIG91dHNpZGUgRXZlbnRGb3JtIHRvIGtlZXAgZm9jdXMpLlxuY29uc3QgRXZlbnRGb3JtVGV4dEZpZWxkID0gKHtcblx0bmFtZSxcblx0bGFiZWwsXG5cdHBsYWNlaG9sZGVyLFxuXHR2YWx1ZSxcblx0cmVxdWlyZWQgPSBmYWxzZSxcblx0b25DaGFuZ2UsXG59OiBFdmVudEZvcm1UZXh0RmllbGRQcm9wcykgPT4gKFxuXHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj17bmFtZX0+XG5cdFx0XHR7bGFiZWx9XG5cdFx0PC9MYWJlbD5cblx0XHQ8SW5wdXRcblx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRpZD17bmFtZX1cblx0XHRcdG5hbWU9e25hbWV9XG5cdFx0XHRvbkNoYW5nZT17b25DaGFuZ2V9XG5cdFx0XHRwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG5cdFx0XHRyZXF1aXJlZD17cmVxdWlyZWR9XG5cdFx0XHR2YWx1ZT17dmFsdWV9XG5cdFx0Lz5cblx0PC9kaXY+XG4pXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuXHRvcGVuPzogYm9vbGVhblxuXHRzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0b25BZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25VcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25EZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgRXZlbnRGb3JtOiBSZWFjdC5GQzxFdmVudEZvcm1Qcm9wcz4gPSAoe1xuXHRzZWxlY3RlZEV2ZW50LFxuXHRvbkNsb3NlLFxuXHRvblVwZGF0ZSxcblx0b25EZWxldGUsXG5cdG9uQWRkLFxufSkgPT4ge1xuXHRjb25zdCB7XG5cdFx0ZGlhbG9nU3RhdGUsXG5cdFx0b3BlbkVkaXREaWFsb2csXG5cdFx0b3BlbkRlbGV0ZURpYWxvZyxcblx0XHRjbG9zZURpYWxvZyxcblx0XHRoYW5kbGVDb25maXJtLFxuXHR9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cblx0Y29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQsIHRpbWVGb3JtYXQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuXHRcdChjb250ZXh0KSA9PiAoe1xuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcblx0XHRcdHQ6IGNvbnRleHQudCxcblx0XHRcdHRpbWVGb3JtYXQ6IGNvbnRleHQudGltZUZvcm1hdCxcblx0XHR9KVxuXHQpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKFxuXHRcdHNlbGVjdGVkRXZlbnQ/LnJlc291cmNlSWRcblx0KVxuXG5cdGNvbnN0IHN0YXJ0ID0gc2VsZWN0ZWRFdmVudD8uc3RhcnQgPz8gZGF5anMoKVxuXHRjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmQgPz8gZGF5anMoKS5hZGQoMSwgJ2hvdXInKVxuXG5cdC8vIEZpbmQgcGFyZW50IGV2ZW50IGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnQgaW5zdGFuY2Vcblx0Y29uc3QgcGFyZW50RXZlbnQgPSBzZWxlY3RlZEV2ZW50XG5cdFx0PyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudClcblx0XHQ6IG51bGxcblxuXHQvLyBGb3JtIHN0YXRlXG5cdGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShzdGFydC50b0RhdGUoKSlcblx0Y29uc3QgW2VuZERhdGUsIHNldEVuZERhdGVdID0gdXNlU3RhdGUoZW5kLnRvRGF0ZSgpKVxuXHRjb25zdCBbaXNBbGxEYXksIHNldElzQWxsRGF5XSA9IHVzZVN0YXRlKHNlbGVjdGVkRXZlbnQ/LmFsbERheSB8fCBmYWxzZSlcblx0Y29uc3QgW3NlbGVjdGVkQ29sb3IsIHNldFNlbGVjdGVkQ29sb3JdID0gdXNlU3RhdGUoXG5cdFx0c2VsZWN0ZWRFdmVudD8uY29sb3IgfHwgQ09MT1JfT1BUSU9OU1swXS52YWx1ZVxuXHQpXG5cblx0Ly8gVGltZSBzdGF0ZVxuXHRjb25zdCBbc3RhcnRUaW1lLCBzZXRTdGFydFRpbWVdID0gdXNlU3RhdGUoc3RhcnQuZm9ybWF0KCdISDptbScpKVxuXHRjb25zdCBbZW5kVGltZSwgc2V0RW5kVGltZV0gPSB1c2VTdGF0ZShlbmQuZm9ybWF0KCdISDptbScpKVxuXG5cdC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuXHRjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG5cdFx0dGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuXHRcdGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcblx0XHRsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG5cdH0pXG5cblx0Ly8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuXHRjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcblx0XHRjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG5cdFx0cmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuXHR9KVxuXG5cdC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG5cdGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0aWYgKCFkYXRlKSByZXR1cm5cblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF5anMoZGF0ZSkuaXNBZnRlcihkYXlqcyhlbmREYXRlKSkpIHtcblx0XHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRpZiAoIWRhdGUpIHJldHVyblxuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBlZmZlY3RpdmVCdXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgZWZmZWN0aXZlQnVzaW5lc3NIb3VycylcblxuXHRjb25zdCBkYXRlRmllbGRzID0gW1xuXHRcdFsnc3RhcnREYXRlJywgc3RhcnREYXRlLCBoYW5kbGVTdGFydERhdGVDaGFuZ2VdLFxuXHRcdFsnZW5kRGF0ZScsIGVuZERhdGUsIGhhbmRsZUVuZERhdGVDaGFuZ2VdLFxuXHRdIGFzIGNvbnN0XG5cblx0Y29uc3QgdGltZUZpZWxkcyA9IFtcblx0XHRbXG5cdFx0XHQnc3RhcnRUaW1lJyxcblx0XHRcdCdzdGFydC10aW1lJyxcblx0XHRcdHN0YXJ0VGltZSxcblx0XHRcdGhhbmRsZVN0YXJ0VGltZUNoYW5nZSxcblx0XHRcdHN0YXJ0Q29uc3RyYWludHMsXG5cdFx0XSxcblx0XHRbJ2VuZFRpbWUnLCAnZW5kLXRpbWUnLCBlbmRUaW1lLCBoYW5kbGVFbmRUaW1lQ2hhbmdlLCBlbmRDb25zdHJhaW50c10sXG5cdF0gYXMgY29uc3RcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8Zm9ybSBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBtaW4taC0wXCIgb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG5cdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuXHRcdFx0XHRcdFx0PEV2ZW50Rm9ybVRleHRGaWVsZFxuXHRcdFx0XHRcdFx0XHRsYWJlbD17dCgndGl0bGUnKX1cblx0XHRcdFx0XHRcdFx0bmFtZT1cInRpdGxlXCJcblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnRUaXRsZVBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkXG5cdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2Rlc2NyaXB0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJkZXNjcmlwdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2lzQWxsRGF5fVxuXHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHR7dCgnYWxsRGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdHtkYXRlRmllbGRzLm1hcCgoW2xhYmVsLCBkYXRlLCBvbkNoYW5nZV0pID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGtleT17bGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsb3NlT25TZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17ZGF0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cblx0XHRcdFx0XHRcdFx0XHR7dGltZUZpZWxkcy5tYXAoKFtsYWJlbCwgbmFtZSwgdmFsdWUsIG9uQ2hhbmdlLCBjXSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBrZXk9e2xhYmVsfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KGxhYmVsKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGltZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtjLm1heH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtjLm1pbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPXtuYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtvbkNoYW5nZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnc2VhcmNoVGltZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3ZhbHVlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWxhYmVsPXtjb2xvci5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRgJHtjb2xvci52YWx1ZX0gaC02IHctNiByb3VuZGVkLWZ1bGwgc206aC04IHNtOnctOGAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sb3IudmFsdWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdDxFdmVudEZvcm1UZXh0RmllbGRcblx0XHRcdFx0XHRcdFx0bGFiZWw9e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdG5hbWU9XCJsb2NhdGlvblwiXG5cdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cblx0XHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9e3QoJ2V2ZW50TG9jYXRpb25QbGFjZWhvbGRlcicpfVxuXHRcdFx0XHRcdFx0XHR2YWx1ZT17Zm9ybVZhbHVlcy5sb2NhdGlvbn1cblx0XHRcdFx0XHRcdC8+XG5cblx0XHRcdFx0XHRcdHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG5cdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXG5cdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtoYW5kbGVEZWxldGV9XG5cdFx0XHRcdFx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZGVzdHJ1Y3RpdmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIlxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRzaXplPVwic21cIlxuXHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDxCdXR0b24gY2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiIHNpemU9XCJzbVwiIHR5cGU9XCJzdWJtaXRcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgndXBkYXRlJykgOiB0KCdjcmVhdGUnKX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0RpYWxvZ0Zvb3Rlcj5cblx0XHRcdDwvZm9ybT5cblxuXHRcdFx0ey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cblx0XHRcdDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuXHRcdFx0XHRldmVudFRpdGxlPXtkaWFsb2dTdGF0ZS5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17ZGlhbG9nU3RhdGUuaXNPcGVufVxuXHRcdFx0XHRvbkNsb3NlPXtjbG9zZURpYWxvZ31cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVDb25maXJtfVxuXHRcdFx0XHRvcGVyYXRpb25UeXBlPXtkaWFsb2dTdGF0ZS5vcGVyYXRpb25UeXBlfVxuXHRcdFx0Lz5cblx0XHQ8Lz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBDaGVja2JveFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtY2hlY2tib3gnXG5pbXBvcnQgeyBDaGVja0ljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBDaGVja2JveFByaW1pdGl2ZS5Sb290Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxDaGVja2JveFByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQncGVlciBib3JkZXItaW5wdXQgZGFyazpiZy1pbnB1dC8zMCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1wcmltYXJ5IGRhdGEtW3N0YXRlPWNoZWNrZWRdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6ZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTpib3JkZXItcHJpbWFyeSBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBzaXplLTQgc2hyaW5rLTAgcm91bmRlZC1bNHB4XSBib3JkZXIgc2hhZG93LXhzIHRyYW5zaXRpb24tc2hhZG93IG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjaGVja2JveFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvclxuXHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWN1cnJlbnQgdHJhbnNpdGlvbi1ub25lXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcblx0XHRcdD5cblx0XHRcdFx0PENoZWNrSWNvbiBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG5cdFx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLkluZGljYXRvcj5cblx0XHQ8L0NoZWNrYm94UHJpbWl0aXZlLlJvb3Q+XG5cdClcbn1cblxuZXhwb3J0IHsgQ2hlY2tib3ggfVxuIiwKICAgICJpbXBvcnQgeyBQb3BvdmVyQ2xvc2UgfSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuXHRkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG5cdG9uQ2hhbmdlPzogKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHZvaWRcblx0bGFiZWw/OiBzdHJpbmdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIERhdGVQaWNrZXIoe1xuXHRkYXRlLFxuXHRjbG9zZU9uU2VsZWN0LFxuXHRvbkNoYW5nZSxcblx0bGFiZWwgPSAnUGljayBhIGRhdGUnLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG5cdGNvbnN0IGZpcnN0RGF5T2ZXZWVrID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KGNvbnRleHQpID0+IGNvbnRleHQuZmlyc3REYXlPZldlZWtcblx0KVxuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0fSwgW2RhdGVdKVxuXG5cdGNvbnN0IGhhbmRsZURhdGVTZWxlY3QgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldFNlbGVjdGVkRGF0ZShkYXRlKVxuXHRcdGlmIChjbG9zZU9uU2VsZWN0KSB7XG5cdFx0XHRwb3BPdmVyUmVmLmN1cnJlbnQ/LmNsaWNrKClcblx0XHR9XG5cdFx0b25DaGFuZ2U/LihkYXRlKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cblx0XHRcdDxQb3BvdmVyPlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLWVtcHR5PXshZGF0ZX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8Q2FsZW5kYXJJY29uIC8+XG5cdFx0XHRcdFx0XHR7c2VsZWN0ZWREYXRlID8gKFxuXHRcdFx0XHRcdFx0XHRkYXlqcyhzZWxlY3RlZERhdGUpLmZvcm1hdCgnbGwnKVxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0PHNwYW4+e2xhYmVsfTwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBhbGlnbj1cInN0YXJ0XCIgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiPlxuXHRcdFx0XHRcdDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSBzdHlsZT17eyBkaXNwbGF5OiAnbm9uZScgfX0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdFx0Zmlyc3REYXlPZldlZWs9e2ZpcnN0RGF5T2ZXZWVrfVxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkxlZnRJY29uLCBDaGV2cm9uUmlnaHRJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzLCBpc1RvZGF5IH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuaW50ZXJmYWNlIENhbGVuZGFyUHJvcHMge1xuXHRzZWxlY3RlZD86IERhdGVcblx0ZGVmYXVsdE1vbnRoPzogRGF0ZVxuXHRvblNlbGVjdD86IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG5cdGRpc2FibGVkPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW5cblx0Zmlyc3REYXlPZldlZWs/OiBudW1iZXJcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhcih7XG5cdHNlbGVjdGVkLFxuXHRkZWZhdWx0TW9udGgsXG5cdG9uU2VsZWN0LFxuXHRkaXNhYmxlZCxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRjbGFzc05hbWUsXG59OiBDYWxlbmRhclByb3BzKSB7XG5cdGNvbnN0IFt2aWV3TW9udGgsIHNldFZpZXdNb250aF0gPSB1c2VTdGF0ZTxEYXlqcz4oKCkgPT5cblx0XHRkYXlqcyhkZWZhdWx0TW9udGggPz8gc2VsZWN0ZWQgPz8gbmV3IERhdGUoKSkuc3RhcnRPZignbW9udGgnKVxuXHQpXG5cblx0Y29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKHZpZXdNb250aCwgZmlyc3REYXlPZldlZWspXG5cdGNvbnN0IHNlbGVjdGVkS2V5ID0gc2VsZWN0ZWRcblx0XHQ/IGRheWpzKHNlbGVjdGVkKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXHRcdDogdW5kZWZpbmVkXG5cblx0Y29uc3Qgd2Vla2RheUhlYWRlcnMgPSBnZXRXZWVrRGF5cyhkYXlqcygpLCBmaXJzdERheU9mV2VlaykubWFwKChkKSA9PlxuXHRcdGQuZm9ybWF0KCdkZCcpXG5cdClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJhY2tncm91bmQgcC0zIHctWzI4MHB4XScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1sYWJlbD1cIlByZXZpb3VzIG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uc3VidHJhY3QoMSwgJ21vbnRoJykpfVxuXHRcdFx0XHRcdHNpemU9XCJpY29uXCJcblx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lXCI+XG5cdFx0XHRcdFx0e3ZpZXdNb250aC5mb3JtYXQoJ01NTU0gWVlZWScpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGFyaWEtbGFiZWw9XCJOZXh0IG1vbnRoXCJcblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZXRWaWV3TW9udGgoKG0pID0+IG0uYWRkKDEsICdtb250aCcpKX1cblx0XHRcdFx0XHRzaXplPVwiaWNvblwiXG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDaGV2cm9uUmlnaHRJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDx0YWJsZVxuXHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlXCJcblx0XHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub05vbmludGVyYWN0aXZlRWxlbWVudFRvSW50ZXJhY3RpdmVSb2xlOiBkYXRlLXBpY2tlciBwYXR0ZXJuIOKAlCBXQUktQVJJQSBncmlkIHJvbGUgb24gYSB0YWJsZSBpcyBjYW5vbmljYWwgZm9yIGNhbGVuZGFyc1xuXHRcdFx0XHRyb2xlPVwiZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDx0aGVhZD5cblx0XHRcdFx0XHQ8dHI+XG5cdFx0XHRcdFx0XHR7d2Vla2RheUhlYWRlcnMubWFwKChsYWJlbCwgaSkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8dGhcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14cyBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBweS0xXCJcblx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vQXJyYXlJbmRleEtleTogd2Vla2RheSBoZWFkZXIgb3JkZXIgaXMgc3RhYmxlXG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e2xhYmVsfVxuXHRcdFx0XHRcdFx0XHQ8L3RoPlxuXHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0PC90aGVhZD5cblx0XHRcdFx0PHRib2R5PlxuXHRcdFx0XHRcdHt3ZWVrcy5tYXAoKHdlZWssIHdlZWtJZHgpID0+IChcblx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9BcnJheUluZGV4S2V5OiB3ZWVrIHJvdyBvcmRlciBpcyBzdGFibGUgd2l0aGluIGEgbW9udGhcblx0XHRcdFx0XHRcdDx0ciBrZXk9e3dlZWtJZHh9PlxuXHRcdFx0XHRcdFx0XHR7d2Vlay5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzT3V0c2lkZSA9ICFkYXkuaXNTYW1lKHZpZXdNb250aCwgJ21vbnRoJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpID09PSBzZWxlY3RlZEtleVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRGlzYWJsZWQgPSBkaXNhYmxlZD8uKGRheS50b0RhdGUoKSkgPz8gZmFsc2Vcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHRkXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInAtMCB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtb3V0c2lkZT17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2RheS50b0lTT1N0cmluZygpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vTm9uaW50ZXJhY3RpdmVFbGVtZW50VG9JbnRlcmFjdGl2ZVJvbGU6IGRhdGUtcGlja2VyIHBhdHRlcm4g4oCUIFdBSS1BUklBIGdyaWRjZWxsIG9uIHRkIGlzIGNhbm9uaWNhbDsga2V5Ym9hcmQgbmF2IGxpdmVzIG9uIHRoZSBjaGlsZCBidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0cm9sZT1cImdyaWRjZWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9ey0xfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWhpZGRlbj17aXNPdXRzaWRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndy1mdWxsIGFzcGVjdC1zcXVhcmUgcm91bmRlZC1tZCB0ZXh0LXNtIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc0Rpc2FibGVkICYmICdob3ZlcjpiZy1hY2NlbnQgY3Vyc29yLXBvaW50ZXInLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNPdXRzaWRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQvNTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheShkYXkpICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCFpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpc1NlbGVjdGVkICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzRGlzYWJsZWQgJiYgJ29wYWNpdHktNTAgY3Vyc29yLW5vdC1hbGxvd2VkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS1kaXNhYmxlZD17aXNEaXNhYmxlZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXNlbGVjdGVkPXtpc1NlbGVjdGVkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtpc0Rpc2FibGVkIHx8IGlzT3V0c2lkZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvblNlbGVjdD8uKGRheS50b0RhdGUoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9e2lzT3V0c2lkZSA/IC0xIDogMH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdEJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0PC90ZD5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC90cj5cblx0XHRcdFx0XHQpKX1cblx0XHRcdFx0PC90Ym9keT5cblx0XHRcdDwvdGFibGU+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUG9wb3ZlclByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtcG9wb3ZlcidcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG5cdGNsYXNzTmFtZSxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0c2lkZU9mZnNldCA9IDQsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcblx0XHRcdFx0YWxpZ249e2FsaWdufVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcblx0XHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcblx0XHRcdFx0c2lkZU9mZnNldD17c2lkZU9mZnNldH1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0Lz5cblx0XHQ8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuXHRyZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyQW5jaG9yLCBQb3BvdmVyQ29udGVudCwgUG9wb3ZlclRyaWdnZXIgfVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2lucHV0Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8aW5wdXRcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmaWxlOnRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgc2VsZWN0aW9uOmJnLXByaW1hcnkgc2VsZWN0aW9uOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgYm9yZGVyLWlucHV0IGZsZXggaC05IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMSB0ZXh0LWJhc2Ugc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmaWxlOmlubGluZS1mbGV4IGZpbGU6aC03IGZpbGU6Ym9yZGVyLTAgZmlsZTpiZy10cmFuc3BhcmVudCBmaWxlOnRleHQtc20gZmlsZTpmb250LW1lZGl1bSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIG1kOnRleHQtc20nLFxuXHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0nLFxuXHRcdFx0XHQnYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiaW5wdXRcIlxuXHRcdFx0dHlwZT17dHlwZX1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgTGFiZWxQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWxhYmVsJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8TGFiZWxQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJsYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFNjcm9sbEFyZWFQcm9wc1xuXHRleHRlbmRzIFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+IHtcblx0dmlld1BvcnRQcm9wcz86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxufVxuXG5mdW5jdGlvbiBTY3JvbGxBcmVhKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0dmlld1BvcnRQcm9wcyxcblx0Li4ucHJvcHNcbn06IFNjcm9sbEFyZWFQcm9wcykge1xuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHR7Li4udmlld1BvcnRQcm9wc31cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgc2l6ZS1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTEnLFxuXHRcdFx0XHRcdHZpZXdQb3J0UHJvcHM/LmNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cblx0XHRcdDxTY3JvbGxCYXIgLz5cblx0XHRcdDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG5cdGNsYXNzTmFtZSxcblx0b3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuXHRcdFx0XHRcdCdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuXHRcdFx0XHRvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG5cdFx0XHRcdFx0J2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtc2Nyb2xsYmFyXCJcblx0XHRcdG9yaWVudGF0aW9uPXtvcmllbnRhdGlvbn1cblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcblx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctYm9yZGVyIHJlbGF0aXZlIGZsZXgtMSByb3VuZGVkLWZ1bGxcIlxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG5cdFx0XHQvPlxuXHRcdDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuXHQpXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCB7IENsb2NrIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG5cdC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG5cdGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG5cdHZhbHVlOiBzdHJpbmdcblx0b25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRwbGFjZWhvbGRlcj86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG5cdG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuXHR2YWx1ZSxcblx0b25DaGFuZ2UsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0cGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuXHRjbGFzc05hbWUsXG5cdGRpc2FibGVkID0gZmFsc2UsXG5cdG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcblx0Y29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcblx0Y29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblx0Y29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcblx0Y29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuXHRjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0XHR0aW1lRm9ybWF0LFxuXHRcdG1pblRpbWUsXG5cdFx0bWF4VGltZSxcblx0fSlcblxuXHQvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuXHRjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcblx0XHRjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuXHRcdHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdG9uQ2hhbmdlKHRpbWUpXG5cdFx0c2V0T3BlbihmYWxzZSlcblx0XHRzZXRTZWFyY2goJycpXG5cdH1cblxuXHQvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChvcGVuKSB7XG5cdFx0XHRpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG5cdFx0XHRcdHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG5cdFx0XHR9XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0aW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuXHRcdFx0fSwgMClcblx0XHR9XG5cdH0sIFtvcGVuXSlcblxuXHRjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG5cdHJldHVybiAoXG5cdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRPcGVufSBvcGVuPXtvcGVufT5cblx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0YXJpYS1jb250cm9scz1cInRpbWUtcGlja2VyLWxpc3Rib3hcIlxuXHRcdFx0XHRcdGFyaWEtZXhwYW5kZWQ9e29wZW59XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigndy1mdWxsIGp1c3RpZnktc3RhcnQnLCBjbGFzc05hbWUpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLnRpbWVQaWNrZXIobmFtZSl9XG5cdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkfVxuXHRcdFx0XHRcdHJlZj17dHJpZ2dlclJlZn1cblx0XHRcdFx0XHRyb2xlPVwiY29tYm9ib3hcIlxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdHtjdXJyZW50VGltZVN0cmluZ31cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0PFBvcG92ZXJDb250ZW50XG5cdFx0XHRcdGFsaWduPVwic3RhcnRcIlxuXHRcdFx0XHRjbGFzc05hbWU9XCJwLTBcIlxuXHRcdFx0XHRzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG5cdFx0XHRcdFx0XHRyZWY9e2lucHV0UmVmfVxuXHRcdFx0XHRcdFx0dmFsdWU9e3NlYXJjaH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG5cdFx0XHRcdFx0XHR7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0Ti9BXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KSA6IChcblx0XHRcdFx0XHRcdFx0ZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHgtMiBweS0xLjUgdGV4dC1zbSBvdXRsaW5lLW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlzU2VsZWN0ZWQgJiYgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdCh0aW1lKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0aW1lU3RyaW5nfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHQ8L1BvcG92ZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdG1pblRpbWU/OiBzdHJpbmdcblx0bWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdG1pblRpbWUgPSAnMDA6MDAnLFxuXHRtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuXHQvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG5cdGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0Y29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cblx0XHRjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRcdGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cblx0XHRjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcblx0XHRjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuXHRcdGZvciAoXG5cdFx0XHRsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcblx0XHRcdHRvdGFsTWludXRlcyArPSAxNVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuXHRcdFx0Y29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cblx0XHRcdGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdFx0dGltZXMucHVzaCh0aW1lU3RyaW5nKVxuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lc1xuXHR9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cblx0Y29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuXHRcdGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cblx0XHRpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG5cdFx0XHRyZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHRpbWVPcHRpb25zLFxuXHRcdGZvcm1hdFRpbWUsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBpc1RvZGF5IH0gZnJvbSAnLi9kYXRlLXV0aWxzJ1xuXG50eXBlIElkID0gc3RyaW5nIHwgbnVtYmVyXG5cbmNvbnN0IHBhZDIgPSAobjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpXG5jb25zdCBwYWRIb3VySWZOdW1iZXIgPSAoaG91cjogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nID0+XG5cdHR5cGVvZiBob3VyID09PSAnbnVtYmVyJyA/IHBhZDIoaG91cikgOiBob3VyXG5cbi8qKlxuICogQ2VudHJhbGl6ZWQgZmFjdG9yeSBmb3Iga2V5cywgaWRzLCBhbmQgZGF0YS10ZXN0aWRzLiBFYWNoIGVudHJ5IHJldHVybnMgYVxuICogc2VtYW50aWMgc3RyaW5nIGlkZW50aWZpZWQgYnkgaXRzIGNvbmNlcHQgcHJlZml4IChlLmcuIGBkYXktY29sLWAsXG4gKiBgZGF5LWNlbGwtYCwgYHdlZWstaGVhZGVyLWRheS1gKS4gVGhlIGNhbGwgc2l0ZSBjaG9vc2VzIHRoZSByb2xlIOKAlCB0aGVcbiAqIHNhbWUgc3RyaW5nIGNhbiBzZXJ2ZSBhcyBhIFJlYWN0IGBrZXk9YCwgYW4gYGlkYCwgb3IgYSBgZGF0YS10ZXN0aWRgLlxuICpcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vdGtkb2RvLmV1L2Jsb2cvZWZmZWN0aXZlLXJlYWN0LXF1ZXJ5LWtleXMjdXNlLXF1ZXJ5LWtleS1mYWN0b3JpZXMuXG4gKiBQcmV2ZW50cyBhZC1ob2Mgc3RyaW5nIGNvbmNhdGVuYXRpb24gc28gY3Jvc3MtY3V0dGluZyBjaGFuZ2VzIChwcmVmaXgsXG4gKiBzZXBhcmF0b3IsIGZvcm1hdCkgYXJlIG9uZS1wb2ludC5cbiAqL1xuZXhwb3J0IGNvbnN0IGtleXMgPSB7XG5cdC8vIEdyaWQgY29sdW1uIGNvbmZpZ3VyYXRpb24gaWRzXG5cdGNvbDoge1xuXHRcdHRpbWU6ICd0aW1lLWNvbCcsXG5cdFx0ZGF0ZTogJ2RhdGUtY29sJyxcblx0XHRkYXk6IChkYXk6IERheWpzLCByZXNvdXJjZUlkPzogSWQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgZGF5LWNvbC0ke2dldERheUtleShkYXkpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHRcdHJlc291cmNlOiAoc2NvcGU6ICd3ZWVrJyB8ICdtb250aCcsIHJlc291cmNlSWQ6IElkKSA9PlxuXHRcdFx0YCR7c2NvcGV9LWNvbC1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCxcblx0XHRhbGxEYXk6IChkYXk6IERheWpzLCBpbmRleDogbnVtYmVyKSA9PlxuXHRcdFx0YGFsbC1kYXktY29sLSR7Z2V0RGF5S2V5KGRheSl9LSR7aW5kZXh9YCxcblx0fSxcblxuXHQvLyBHcmlkIGNlbGwgaWRlbnRpZmllcnNcblx0Y2VsbDoge1xuXHRcdGRheTogKGRheTogRGF5anMsIGhvdXI/OiBudW1iZXIgfCBzdHJpbmcsIG1pbnV0ZTogbnVtYmVyIHwgc3RyaW5nID0gMCkgPT4ge1xuXHRcdFx0Y29uc3QgayA9IGdldERheUtleShkYXkpXG5cdFx0XHRyZXR1cm4gaG91ciAhPSBudWxsXG5cdFx0XHRcdD8gYGRheS1jZWxsLSR7a30tJHtwYWQyKGhvdXIpfS0ke3BhZDIobWludXRlKX1gXG5cdFx0XHRcdDogYGRheS1jZWxsLSR7a31gXG5cdFx0fSxcblx0XHR2ZXJ0aWNhbFRpbWU6IChob3VyOiBudW1iZXIgfCBzdHJpbmcpID0+IGB2ZXJ0aWNhbC10aW1lLSR7cGFkMihob3VyKX1gLFxuXHRcdHZlcnRpY2FsOiAoXG5cdFx0XHRkYXk6IERheWpzLFxuXHRcdFx0aG91cjogbnVtYmVyIHwgc3RyaW5nLFxuXHRcdFx0bWludXRlOiBudW1iZXIgfCBzdHJpbmcsXG5cdFx0XHRyZXNvdXJjZUlkPzogSWRcblx0XHQpID0+IHtcblx0XHRcdGNvbnN0IGJhc2UgPSBgdmVydGljYWwtY2VsbC0ke2dldERheUtleShkYXkpfS0ke3BhZDIoaG91cil9LSR7cGFkMihtaW51dGUpfWBcblx0XHRcdHJldHVybiByZXNvdXJjZUlkICE9IG51bGwgPyBgJHtiYXNlfS1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6IGJhc2Vcblx0XHR9LFxuXHR9LFxuXG5cdC8vIENvbnRhaW5lciAod3JhcHBlcikgaWRlbnRpZmllcnNcblx0Y29udGFpbmVyOiB7XG5cdFx0dmVydGljYWw6IHtcblx0XHRcdGNvbDogKGlkOiBJZCkgPT4gYHZlcnRpY2FsLWNvbC0ke2lkfWAsXG5cdFx0fSxcblx0XHRob3Jpem9udGFsOiB7XG5cdFx0XHRyb3c6IChpZDogSWQpID0+IGBob3Jpem9udGFsLXJvdy0ke2lkfWAsXG5cdFx0XHRyb3dMYWJlbDogKHJlc291cmNlSWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1yb3ctbGFiZWwtJHtyZXNvdXJjZUlkfWAsXG5cdFx0XHRldmVudDogKGV2ZW50SWQ6IElkKSA9PiBgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50SWR9YCxcblx0XHR9LFxuXHRcdGV2ZW50c0xheWVyOiAob3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcsIGlkOiBJZCkgPT5cblx0XHRcdGAke29yaWVudGF0aW9ufS1ldmVudHMtJHtpZH1gLFxuXHR9LFxuXG5cdC8vIEhlYWRlciBpZGVudGlmaWVyc1xuXHRoZWFkZXI6IHtcblx0XHRyZXNvdXJjZToge1xuXHRcdFx0d2Vla0RheTogJ3Jlc291cmNlLXdlZWstZGF5LWhlYWRlcicsXG5cdFx0XHR0aW1lTGFiZWw6ICh2aWV3OiAnd2VlaycgfCAnZGF5JywgaG91cjogbnVtYmVyIHwgc3RyaW5nKSA9PlxuXHRcdFx0XHRgcmVzb3VyY2UtJHt2aWV3fS10aW1lLWxhYmVsLSR7cGFkSG91cklmTnVtYmVyKGhvdXIpfWAsXG5cdFx0fSxcblx0XHR3ZWVrZGF5OiAodmlldzogJ3dlZWsnIHwgJ21vbnRoJywgbmFtZTogc3RyaW5nKSA9PlxuXHRcdFx0YCR7dmlld30taGVhZGVyLXdlZWtkYXktJHtuYW1lLnRvTG93ZXJDYXNlKCl9YCxcblx0XHR3ZWVrOiB7XG5cdFx0XHRkYXk6IChkYXk6IERheWpzKSA9PiBgd2Vlay1oZWFkZXItZGF5LSR7ZGF5LnRvSVNPU3RyaW5nKCl9YCxcblx0XHRcdGhvdXI6IChkYXk6IERheWpzLCByZWY6IElkKSA9PlxuXHRcdFx0XHRgd2Vlay1oZWFkZXItaG91ci0ke2RheS50b0lTT1N0cmluZygpfS0ke3JlZn1gLFxuXHRcdFx0cmVzb3VyY2U6IChyZXNvdXJjZUlkOiBJZCkgPT4gYHdlZWstaGVhZGVyLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gLFxuXHRcdH0sXG5cdFx0eWVhcjoge1xuXHRcdFx0bW9udGg6IChtb250aEtleTogc3RyaW5nLCBwYXJ0PzogJ3RpdGxlJyB8ICdjb3VudCcgfCAnbWluaScpID0+XG5cdFx0XHRcdHBhcnQgPyBgeWVhci1tb250aC0ke3BhcnR9LSR7bW9udGhLZXl9YCA6IGB5ZWFyLW1vbnRoLSR7bW9udGhLZXl9YCxcblx0XHRcdGRheTogKG1vbnRoS2V5OiBzdHJpbmcsIGRheUtleTogc3RyaW5nKSA9PlxuXHRcdFx0XHRgeWVhci1kYXktJHttb250aEtleX0tJHtkYXlLZXl9YCxcblx0XHR9LFxuXHR9LFxuXG5cdC8vIFJlc291cmNlLXNjb3BlZCBhbGwtZGF5IHJvdyBpZCAoZmFsbHMgYmFjayB0byAnbWFpbicgd2hlbiB1bnNjb3BlZCkuXG5cdGFsbERheVJvdzogKHJlc291cmNlSWQ/OiBJZCkgPT4gYGFsbGRheS1yb3ctJHtyZXNvdXJjZUlkID8/ICdtYWluJ31gLFxuXG5cdC8vIEdlbmVyaWMgaXRlcmF0aW9uIGtleSBjb21wb3NlciBmb3IgUmVhY3QgYGtleT1gIHByb3BzLCBsaXN0IG1hcmtlcnMsXG5cdC8vIGFuZCBzdWZmaXhlZCB3cmFwcGVyIGtleXMgKGUuZy4gYGxpc3RLZXkoYmFzZSwgJ2FuaW1hdGVkJylgKS5cblx0bGlzdEtleTogKC4uLnBhcnRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBwYXJ0cy5qb2luKCctJyksXG5cblx0Ly8gRGF5TnVtYmVyIGNvbXBvbmVudCB0ZXN0aWQg4oCUIGBkYXktbnVtYmVyLXRvZGF5YCB3aGVuIHRoZSBkYXRlIGlzIHRvZGF5LFxuXHQvLyBvdGhlcndpc2UgYGRheS1udW1iZXIte0R9YC5cblx0ZGF5TnVtYmVyOiAoZGF0ZTogRGF5anMpID0+XG5cdFx0aXNUb2RheShkYXRlKSA/ICdkYXktbnVtYmVyLXRvZGF5JyA6IGBkYXktbnVtYmVyLSR7ZGF0ZS5mb3JtYXQoJ0QnKX1gLFxuXG5cdC8vIEZvcm0gZWxlbWVudCB0ZXN0aWQgZm9yIHRpbWUgcGlja2VycyAobmFtZSA9ICdzdGFydCcgLyAnZW5kJyBldGMuKVxuXHR0aW1lUGlja2VyOiAobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiBgdGltZS1waWNrZXItJHtuYW1lID8/ICcnfWAsXG5cblx0Ly8gRHJvcHBhYmxlIGlkcyAoZG5kLWtpdCByZWdpc3RyeSDigJQgSVNPIGZvciBwZXItc2xvdCB1bmlxdWVuZXNzKS5cblx0Ly8gYGRyb3AtYCBwcmVmaXggYXZvaWRzIGNvbGxpZGluZyB3aXRoIGBjZWxsLmRheWAgdGVzdGlkcy5cblx0ZHJvcHBhYmxlOiB7XG5cdFx0ZGF5Q2VsbDogKGRheTogRGF5anMsIG9wdGlvbnM/OiB7IGFsbERheT86IGJvb2xlYW47IHJlc291cmNlSWQ/OiBJZCB9KSA9PiB7XG5cdFx0XHRjb25zdCBpc28gPSBkYXkudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgYWxsRGF5UGFydCA9IG9wdGlvbnM/LmFsbERheSA/ICctYWxsZGF5JyA6ICcnXG5cdFx0XHRjb25zdCByZXNvdXJjZVBhcnQgPVxuXHRcdFx0XHRvcHRpb25zPy5yZXNvdXJjZUlkICE9IG51bGwgPyBgLXJlc291cmNlLSR7b3B0aW9ucy5yZXNvdXJjZUlkfWAgOiAnJ1xuXHRcdFx0cmV0dXJuIGBkcm9wLWRheS1jZWxsLSR7aXNvfSR7YWxsRGF5UGFydH0ke3Jlc291cmNlUGFydH1gXG5cdFx0fSxcblx0fSxcbn0gYXMgY29uc3RcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheS5cbiAqXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjaGVja1xuICogQHBhcmFtIGJ1c2luZXNzSG91cnMgVGhlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gKHNpbmdsZSBvciBhcnJheSlcbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGRhdGUgaXMgYSBidXNpbmVzcyBkYXksIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0RheSA9IChcblx0ZGF0ZTogRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBib29sZWFuID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGxldCBoYXNNYXRjaCA9IGZhbHNlXG5cdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHtcblx0XHRkYXRlLFxuXHRcdG9uTWF0Y2g6ICgpID0+IHtcblx0XHRcdGhhc01hdGNoID0gdHJ1ZVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGhhc01hdGNoXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcblx0ZGF0ZTogRGF5anNcblx0aG91cj86IG51bWJlclxuXHRtaW51dGU/OiBudW1iZXJcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG5cdGRhdGUsXG5cdGhvdXIsXG5cdG1pbnV0ZSA9IDAsXG5cdGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcblx0Ly8gSWYgYnVzaW5lc3MgaG91cnMgYXJlIG5vdCBjb25maWd1cmVkLCBjb25zaWRlciBldmVyeXRoaW5nIGFzIFwiYnVzaW5lc3MgaG91cnNcIlxuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHtcblx0XHRyZXR1cm4gdHJ1ZVxuXHR9XG5cblx0Ly8gSWYgaG91ciBpcyBub3QgcHJvdmlkZWQsIHdlIGFzc3VtZSB0aGUgdXNlciBvbmx5IGNhcmVzIGFib3V0IHRoZSBkYXlcblx0aWYgKGhvdXIgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdH1cblxuXHRsZXQgaXNJbkJ1c2luZXNzSG91ciA9IGZhbHNlXG5cdGNvbnN0IGN1cnJlbnRNaW51dGVzID0gaG91ciAqIDYwICsgbWludXRlXG5cblx0cHJvY2Vzc0J1c2luZXNzSG91cnMoYnVzaW5lc3NIb3Vycywge1xuXHRcdGRhdGUsXG5cdFx0b25NYXRjaDogKGNvbmZpZykgPT4ge1xuXHRcdFx0Ly8gQ2hlY2sgdGltZSBhZ2FpbnN0IHRoaXMgc3BlY2lmaWMgY29uZmlnXG5cdFx0XHQvLyBzdGFydFRpbWUgYW5kIGVuZFRpbWUgYXJlIG51bWJlcnMgKDAtMjQpXG5cdFx0XHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0XHRcdGNvbnN0IGVuZEggPSBjb25maWcuZW5kVGltZSA/PyAxN1xuXG5cdFx0XHRjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuXHRcdFx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdFx0XHRpZiAoY3VycmVudE1pbnV0ZXMgPj0gc3RhcnRNaW51dGVzICYmIGN1cnJlbnRNaW51dGVzIDwgZW5kTWludXRlcykge1xuXHRcdFx0XHRpc0luQnVzaW5lc3NIb3VyID0gdHJ1ZVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pXG5cblx0cmV0dXJuIGlzSW5CdXNpbmVzc0hvdXJcbn1cblxuLyoqXG4gKiBIZWxwZXIgdG8gcHJvY2VzcyBhIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gYW5kIHVwZGF0ZSB0aGUgcmFuZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzQnVzaW5lc3NIb3VycyA9IChcblx0Ymg6IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10gfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHtcblx0XHRkYXRlPzogRGF5anNcblx0XHRvbk1hdGNoOiAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB2b2lkXG5cdH1cbikgPT4ge1xuXHRjb25zdCB7IGRhdGUsIG9uTWF0Y2ggfSA9IG9wdGlvbnNcblx0aWYgKCFiaCkgcmV0dXJuXG5cblx0Y29uc3QgY29uZmlncyA9IEFycmF5LmlzQXJyYXkoYmgpID8gYmggOiBbYmhdXG5cblx0Zm9yIChjb25zdCBjb25maWcgb2YgY29uZmlncykge1xuXHRcdGlmIChkYXRlICYmIGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0XHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IFdFRUtfREFZU19OVU1CRVJfTUFQW2RdID09PSBkYXlPZldlZWspXG5cdFx0XHQpIHtcblx0XHRcdFx0b25NYXRjaChjb25maWcpXG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uTWF0Y2goY29uZmlnKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSG91cnNSYW5nZSB7XG5cdG1pblN0YXJ0OiBudW1iZXJcblx0bWF4RW5kOiBudW1iZXJcblx0aGFzQnVzaW5lc3NIb3VyczogYm9vbGVhblxufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHVuaW9uIG9mIGJ1c2luZXNzIGhvdXJzIHJhbmdlcyBhY3Jvc3MgbXVsdGlwbGUgZGF0ZXMgYW5kL29yIHJlc291cmNlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlID0gKG9wdGlvbnM6IHtcblx0YWxsRGF0ZXM6IERheWpzW11cblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG59KTogQnVzaW5lc3NIb3Vyc1JhbmdlID0+IHtcblx0Y29uc3Qge1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gW10sXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdH0gPSBvcHRpb25zXG5cblx0bGV0IG1pblN0YXJ0ID0gMjRcblx0bGV0IG1heEVuZCA9IDBcblx0bGV0IGhhc0J1c2luZXNzSG91cnMgPSBmYWxzZVxuXG5cdGNvbnN0IG9uTWF0Y2ggPSAoY29uZmlnOiBCdXNpbmVzc0hvdXJzKSA9PiB7XG5cdFx0aGFzQnVzaW5lc3NIb3VycyA9IHRydWVcblx0XHRtaW5TdGFydCA9IE1hdGgubWluKG1pblN0YXJ0LCBjb25maWcuc3RhcnRUaW1lID8/IDkpXG5cdFx0bWF4RW5kID0gTWF0aC5tYXgobWF4RW5kLCBjb25maWcuZW5kVGltZSA/PyAxNylcblx0fVxuXG5cdC8vIEludm9rZSBwcm9jZXNzQnVzaW5lc3NIb3VycyBmb3IgdGhlIGdsb2JhbCBjb25maWcgYW5kIGV2ZXJ5IHJlc291cmNlXG5cdC8vIGNvbmZpZywgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBzcGVjaWZpYyBkYXRlLlxuXHRjb25zdCBwcm9jZXNzQWxsID0gKGRhdGU/OiBEYXlqcykgPT4ge1xuXHRcdHByb2Nlc3NCdXNpbmVzc0hvdXJzKGJ1c2luZXNzSG91cnMsIHsgZGF0ZSwgb25NYXRjaCB9KVxuXHRcdGZvciAoY29uc3QgcmJoIG9mIHJlc291cmNlQnVzaW5lc3NIb3Vycykge1xuXHRcdFx0cHJvY2Vzc0J1c2luZXNzSG91cnMocmJoLCB7IGRhdGUsIG9uTWF0Y2ggfSlcblx0XHR9XG5cdH1cblxuXHRmb3IgKGNvbnN0IGRhdGUgb2YgYWxsRGF0ZXMpIHByb2Nlc3NBbGwoZGF0ZSlcblxuXHQvLyBGYWxsYmFjazogcmV0cnkgd2l0aG91dCBkYXRlIHNjb3BpbmcsIHRoZW4gZGVmYXVsdCB0byA5LTE3IGlmIHN0aWxsIGVtcHR5LlxuXHRpZiAoIWhhc0J1c2luZXNzSG91cnMgJiYgaGlkZU5vbkJ1c2luZXNzSG91cnMpIHtcblx0XHRwcm9jZXNzQWxsKClcblx0XHRpZiAoIWhhc0J1c2luZXNzSG91cnMpIHtcblx0XHRcdG1pblN0YXJ0ID0gOVxuXHRcdFx0bWF4RW5kID0gMTdcblx0XHRcdGhhc0J1c2luZXNzSG91cnMgPSB0cnVlXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGNhbGN1bGF0ZUJ1c2luZXNzSG91cnNSYW5nZSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgYnVpbGREYXRlVGltZSA9IChcblx0ZGF0ZTogRGF0ZSxcblx0dGltZTogc3RyaW5nLFxuXHRpc0FsbERheTogYm9vbGVhblxuKTogRGF5anMgPT4ge1xuXHRjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdGNvbnN0IGJhc2UgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXJzKS5taW51dGUobWludXRlcylcblx0cmV0dXJuIGlzQWxsRGF5ID8gYmFzZS5ob3VyKDApLm1pbnV0ZSgwKSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IERheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVDb25zdHJhaW50cyA9IChcblx0ZGF0ZTogRGF0ZSxcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cbikgPT4ge1xuXHRpZiAoIWJ1c2luZXNzSG91cnMpIHJldHVybiB7IG1pbjogJzAwOjAwJywgbWF4OiAnMjM6NTknIH1cblxuXHRjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhkYXRlKVxuXG5cdGNvbnN0IHsgbWluU3RhcnQsIG1heEVuZCwgaGFzQnVzaW5lc3NIb3VycyB9ID0gY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlKHtcblx0XHRhbGxEYXRlczogW2RheWpzRGF0ZV0sXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3VyczogZmFsc2UsXG5cdH0pXG5cblx0aWYgKCFoYXNCdXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHsgbWluOiAnMDA6MDAnLCBtYXg6ICcyMzo1OScgfVxuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRtaW46IGAke21pblN0YXJ0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgLFxuXHRcdG1heDogYCR7KG1heEVuZCAtIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06NDVgLFxuXHR9XG59XG4iLAogICAgImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgV2Vla2RheSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdFRyaWdnZXIsXG5cdFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgRlJFUV9NQVAgPSB7XG5cdERBSUxZOiBSUnVsZS5EQUlMWSxcblx0V0VFS0xZOiBSUnVsZS5XRUVLTFksXG5cdE1PTlRITFk6IFJSdWxlLk1PTlRITFksXG5cdFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxufSBhcyBjb25zdFxuY29uc3QgRlJFUV9UT19TVFIgPSBPYmplY3QuZnJvbUVudHJpZXMoXG5cdE9iamVjdC5lbnRyaWVzKEZSRVFfTUFQKS5tYXAoKFtrLCB2XSkgPT4gW3YsIGtdKVxuKSBhcyBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+XG5jb25zdCBXRUVLREFZUyA9IFtcblx0UlJ1bGUuU1UsXG5cdFJSdWxlLk1PLFxuXHRSUnVsZS5UVSxcblx0UlJ1bGUuV0UsXG5cdFJSdWxlLlRILFxuXHRSUnVsZS5GUixcblx0UlJ1bGUuU0EsXG5dXG5cbmNvbnN0IEVORF9UWVBFUyA9IFtcblx0eyB0eXBlOiAnbmV2ZXInLCBpZDogJ25ldmVyJywgbGFiZWxLZXk6ICduZXZlcicgfSxcblx0eyB0eXBlOiAnY291bnQnLCBpZDogJ2FmdGVyJywgbGFiZWxLZXk6ICdhZnRlcicgfSxcblx0eyB0eXBlOiAndW50aWwnLCBpZDogJ29uJywgbGFiZWxLZXk6ICdvbicgfSxcbl0gYXMgY29uc3RcbmNvbnN0IHBhcnNlTnVtID0gKHY6IHN0cmluZykgPT4gTWF0aC5tYXgoMSwgTnVtYmVyLnBhcnNlSW50KHYsIDEwKSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcblx0b3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcblx0dDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcblx0aWYgKCFvcHRzKSB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuXHRcdHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcblx0XHRcdD8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcblx0XHRcdDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuXHR2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcblx0b25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuXHRjb25zdCB7IHQsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdHQ6IGN0eC50LFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdH0pKVxuXHRjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuXHRjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG5cdGNvbnN0IFdFRUtEQVlfT1BUSU9OUyA9IFdFRUtEQVlTLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoe1xuXHRcdHZhbHVlLFxuXHRcdGxhYmVsOiBkYXlqcygpLmRheShpbmRleCkuZm9ybWF0KCdkZGQnKSxcblx0fSkpXG5cdGNvbnN0IHdlZWtEYXlzID0gV0VFS0RBWVMubWFwKFxuXHRcdChkLCBpKSA9PiBXRUVLREFZX09QVElPTlNbKGkgKyBmaXJzdERheU9mV2VlaykgJSA3XVxuXHQpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRzZXRTaG93KCEhdmFsdWUpXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRzZXRPcHRzKHZhbHVlKVxuXHRcdH1cblx0fSwgW3ZhbHVlXSlcblxuXHRjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG5cdFx0aWYgKCFvcHRzKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG5cdFx0c2V0T3B0cyhuZXh0KVxuXHRcdG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG5cdFx0c2V0U2hvdyhjaGVja2VkKVxuXHRcdGlmICghY2hlY2tlZCkge1xuXHRcdFx0b25DaGFuZ2UobnVsbClcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAob3B0cykge1xuXHRcdFx0b25DaGFuZ2Uob3B0cylcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuXHRcdHNldE9wdHMoZGVmKVxuXHRcdG9uQ2hhbmdlKGRlZilcblx0fVxuXG5cdGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG5cdFx0Y29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cblx0XHRjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG5cdFx0XHQ/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG5cdFx0XHQ6IFsuLi5jdXJyLCBkYXldXG5cdFx0dXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcblx0fVxuXG5cdGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG5cdFx0Y29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cblx0XHRpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuXHRcdFx0dS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcblx0XHR9XG5cdFx0aWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcblx0XHRcdHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcblx0XHR9XG5cdFx0dXBkYXRlKHUpXG5cdH1cblxuXHRjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuXHRjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuXHRjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcblx0XHQ/IG9wdHMuYnl3ZWVrZGF5XG5cdFx0OiBvcHRzPy5ieXdlZWtkYXlcblx0XHRcdD8gW29wdHMuYnl3ZWVrZGF5XVxuXHRcdFx0OiBbXVxuXG5cdHJldHVybiAoXG5cdFx0PENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuXHRcdFx0PENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0Y2hlY2tlZD17c2hvd31cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuXHRcdFx0XHRcdFx0aWQ9XCJyZWN1cnJpbmdcIlxuXHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXt0b2dnbGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHR7c2hvdyAmJiB2YWx1ZSAmJiAoXG5cdFx0XHRcdFx0PHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG5cdFx0XHRcdFx0PC9wPlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9DYXJkSGVhZGVyPlxuXG5cdFx0XHR7c2hvdyAmJiAoXG5cdFx0XHRcdDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCIgaHRtbEZvcj1cImZyZXF1ZW5jeVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3JlcGVhdHMnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDxTZWxlY3Rcblx0XHRcdFx0XHRcdFx0XHRcdG9uVmFsdWVDaGFuZ2U9eyhmKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBmcmVxOiBGUkVRX01BUFtmIGFzIGtleW9mIHR5cGVvZiBGUkVRX01BUF0gfSlcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmcmVxfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RUcmlnZ2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiZnJlcXVlbmN5LXNlbGVjdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiZnJlcXVlbmN5XCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFZhbHVlIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdFRyaWdnZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KGYudG9Mb3dlckNhc2UoKSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RJdGVtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0Q29udGVudD5cblx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdD5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiaW50ZXJ2YWxcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdldmVyeScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLThcIlxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJpbnRlcnZhbFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHR7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KCd3ZWVrZGF5JywgaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2J5d2Vla2RheS5pbmNsdWRlcyhkLnZhbHVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtrZXlzLmxpc3RLZXkoJ2RheScsIGkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQteHMgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHRtbEZvcj17a2V5cy5saXN0S2V5KCdkYXknLCBpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7ZC5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdCl9XG5cblx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ2VuZHMnKX08L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG5cdFx0XHRcdFx0XHRcdFx0e0VORF9UWVBFUy5tYXAoKHsgdHlwZSwgaWQsIGxhYmVsS2V5IH0pID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCIga2V5PXt0eXBlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gdHlwZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKHR5cGUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9e2lkfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7dChsYWJlbEtleSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0eXBlID09PSAnY291bnQnICYmIGVuZFR5cGUgPT09ICdjb3VudCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW49XCIxXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3R5cGUgPT09ICd1bnRpbCcgJiYgZW5kVHlwZSA9PT0gJ3VudGlsJyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlPXtvcHRzPy51bnRpbCA/PyB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17KGQpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW50aWw6IGRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD8gZGF5anMoZCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRBY3Rpb24sXG5cdENhcmRDb250ZW50LFxuXHRDYXJkRGVzY3JpcHRpb24sXG5cdENhcmRGb290ZXIsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRUaXRsZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1wbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zaXplPXtzaXplfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXRyaWdnZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuXHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cblx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0cG9zaXRpb24gPSAncG9wcGVyJyxcblx0YWxpZ24gPSAnY2VudGVyJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRhbGlnbj17YWxpZ259XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctMzIgb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG5cdFx0XHRcdHBvc2l0aW9uPXtwb3NpdGlvbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpIHctZnVsbCBtaW4tdy0oLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCkgc2Nyb2xsLW15LTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHRcdDxTZWxlY3RTY3JvbGxEb3duQnV0dG9uIC8+XG5cdFx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Db250ZW50PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RMYWJlbCh7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuTGFiZWw+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5MYWJlbFxuXHRcdFx0Y2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWxhYmVsXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdEl0ZW0oe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5JdGVtPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgcmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtc20gcHktMS41IHByLTggcGwtMiB0ZXh0LXNtIG91dGxpbmUtaGlkZGVuIHNlbGVjdC1ub25lIGRhdGEtZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLWRpc2FibGVkOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG5cdFx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdFx0XHQ8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG5cdFx0XHRjbGFzc05hbWU9e2NuKCdiZy1ib3JkZXIgcG9pbnRlci1ldmVudHMtbm9uZSAtbXgtMSBteS0xIGgtcHgnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LXNlcGFyYXRvclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG5cdGNsYXNzTmFtZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG5cdFx0PC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cblx0KVxufVxuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdFNlbGVjdENvbnRlbnQsXG5cdFNlbGVjdEdyb3VwLFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RMYWJlbCxcblx0U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcblx0U2VsZWN0U2Nyb2xsVXBCdXR0b24sXG5cdFNlbGVjdFNlcGFyYXRvcixcblx0U2VsZWN0VHJpZ2dlcixcblx0U2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgRGlhbG9nU3RhdGUge1xuXHRpc09wZW46IGJvb2xlYW5cblx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdHVwZGF0ZXM/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdG9uQ29uZmlybT86IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4gdm9pZFxufVxuXG5jb25zdCBDTE9TRURfU1RBVEU6IERpYWxvZ1N0YXRlID0ge1xuXHRpc09wZW46IGZhbHNlLFxuXHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdGV2ZW50OiBudWxsLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ29tcGxldGU/OiAoKSA9PiB2b2lkKSB7XG5cdGNvbnN0IHsgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIGRlbGV0ZVJlY3VycmluZ0V2ZW50IH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudDogY29udGV4dC5kZWxldGVSZWN1cnJpbmdFdmVudCxcblx0XHR9KSlcblxuXHRjb25zdCBbZGlhbG9nU3RhdGUsIHNldERpYWxvZ1N0YXRlXSA9IHVzZVN0YXRlPERpYWxvZ1N0YXRlPihDTE9TRURfU1RBVEUpXG5cblx0Y29uc3Qgb3BlbkVkaXREaWFsb2cgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldERpYWxvZ1N0YXRlKHtcblx0XHRcdFx0aXNPcGVuOiB0cnVlLFxuXHRcdFx0XHRvcGVyYXRpb25UeXBlOiAnZWRpdCcsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHR1cGRhdGVzLFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB1cGRhdGVzLCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbdXBkYXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBvcGVuRGVsZXRlRGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2RlbGV0ZScsXG5cdFx0XHRcdGV2ZW50LFxuXHRcdFx0XHRvbkNvbmZpcm06IChzY29wZTogUmVjdXJyZW5jZUVkaXRTY29wZSkgPT4ge1xuXHRcdFx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50KGV2ZW50LCB7XG5cdFx0XHRcdFx0XHRzY29wZSxcblx0XHRcdFx0XHRcdGV2ZW50RGF0ZTogZXZlbnQuc3RhcnQsXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSxcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbZGVsZXRlUmVjdXJyaW5nRXZlbnRdXG5cdClcblxuXHRjb25zdCBjbG9zZURpYWxvZyA9IHVzZUNhbGxiYWNrKCgpID0+IHNldERpYWxvZ1N0YXRlKENMT1NFRF9TVEFURSksIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVzb3VyY2Utc3BlY2lmaWMgYnVzaW5lc3MgaG91cnMgd2hlbiBhdmFpbGFibGUsIG90aGVyd2lzZVxuICogZmFsbHMgYmFjayB0byB0aGUgY2FsZW5kYXItd2lkZSBgYnVzaW5lc3NIb3Vyc2AuIFNoYXJlZCBieSBjb21wb25lbnRzXG4gKiB0aGF0IG5lZWQgcGVyLXJlc291cmNlIHdvcmtpbmctaG91cnMgc2VtYW50aWNzIChncmlkIGNlbGxzLCBldmVudCBmb3JtKS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSAoXG5cdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZFxuKTogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSB8IHVuZGVmaW5lZCA9PiB7XG5cdGNvbnN0IHsgYnVzaW5lc3NIb3VycywgZ2V0UmVzb3VyY2VCeUlkIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGJ1c2luZXNzSG91cnM6IGN0eC5idXNpbmVzc0hvdXJzLFxuXHRcdGdldFJlc291cmNlQnlJZDogY3R4LmdldFJlc291cmNlQnlJZCxcblx0fSkpXG5cblx0cmV0dXJuIHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChyZXNvdXJjZUlkICE9IG51bGwgJiYgZ2V0UmVzb3VyY2VCeUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZChyZXNvdXJjZUlkKVxuXHRcdFx0aWYgKHJlc291cmNlPy5idXNpbmVzc0hvdXJzKSB7XG5cdFx0XHRcdHJldHVybiByZXNvdXJjZS5idXNpbmVzc0hvdXJzXG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH0sIFtyZXNvdXJjZUlkLCBnZXRSZXNvdXJjZUJ5SWQsIGJ1c2luZXNzSG91cnNdKVxufVxuIiwKICAgICJpbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0Rlc2NyaXB0aW9uLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICcuL2V2ZW50LWZvcm0nXG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm1EaWFsb2cgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHR0LFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuLFxuXHRcdGNsb3NlRXZlbnRGb3JtLFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoe1xuXHRcdHQ6IGNvbnRleHQudCxcblx0XHRzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG5cdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm06IGNvbnRleHQucmVuZGVyRXZlbnRGb3JtLFxuXHR9KSlcblxuXHRjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0ZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG5cdH1cblxuXHRjb25zdCBldmVudEZvcm1Qcm9wcyA9IHtcblx0XHRvcGVuOiBpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0b25DbG9zZTogY2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRvbkFkZDogYWRkRXZlbnQsXG5cdFx0b25VcGRhdGU6IGhhbmRsZU9uVXBkYXRlLFxuXHRcdG9uRGVsZXRlOiBoYW5kbGVPbkRlbGV0ZSxcblx0fVxuXG5cdGlmIChyZW5kZXJFdmVudEZvcm0pIHtcblx0XHRyZXR1cm4gcmVuZGVyRXZlbnRGb3JtKGV2ZW50Rm9ybVByb3BzKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17Y2xvc2VFdmVudEZvcm19IG9wZW49e2lzRXZlbnRGb3JtT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtWzkwdmhdIHctWzkwdnddIG1heC13LVs1MDBweF0gcC00IHNtOnAtNiBvdmVyZmxvdy1oaWRkZW4gZ2FwLTBcIj5cblx0XHRcdFx0PERpYWxvZ0hlYWRlciBjbGFzc05hbWU9XCJtYi0yIHNtOm1iLTQgc2hyaW5rLTBcIj5cblx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudCcpIDogdCgnY3JlYXRlRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ2VkaXRFdmVudERldGFpbHMnKSA6IHQoJ2FkZE5ld0V2ZW50Jyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uLCBEb3dubG9hZCwgTWVudSwgUGx1cyB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvdXRpbHMvZXhwb3J0LWljYWwnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuXG5pbnRlcmZhY2UgSGVhZGVyUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgSGVhZGVyOiBSZWFjdC5GQzxIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgPSAnJyB9KSA9PiB7XG5cdGNvbnN0IHtcblx0XHR2aWV3LFxuXHRcdHNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRyYXdFdmVudHMsXG5cdFx0dCxcblx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHRcdGhpZGVFeHBvcnRCdXR0b246IGN0eC5oaWRlRXhwb3J0QnV0dG9uLFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdC8vIFdyYXAgYW55IGhhbmRsZXIgc28gaXQgYWxzbyBjbG9zZXMgdGhlIG1vYmlsZSBtZW51IGFmdGVyIGZpcmluZy5cblx0Y29uc3Qgd2l0aENsb3NlID1cblx0XHQ8QXJncyBleHRlbmRzIHVua25vd25bXT4oZm46ICguLi5hcmdzOiBBcmdzKSA9PiB2b2lkKSA9PlxuXHRcdCguLi5hcmdzOiBBcmdzKSA9PiB7XG5cdFx0XHRmbiguLi5hcmdzKVxuXHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHR9XG5cblx0Y29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuXHRcdGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2Bcblx0XHRkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuXHRcdGNsb3NlTW9iaWxlTWVudSgpXG5cdH1cblxuXHRjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiXG5cdFx0XHRvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG5cdFx0XHRzaXplPVwic21cIlxuXHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdD5cblx0XHRcdDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cblx0XHQ8L0J1dHRvbj5cblx0KVxuXG5cdGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEnLCBmdWxsV2lkdGggJiYgJ3ctZnVsbCBnYXAtMicpfVxuXHRcdFx0b25DbGljaz17aGFuZGxlRXhwb3J0fVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJvdXRsaW5lXCJcblx0XHQ+XG5cdFx0XHQ8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHR7ZnVsbFdpZHRoID8gKFxuXHRcdFx0XHRgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuXHRcdFx0KSA6IChcblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cblx0XHRcdCl9XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG5cdFx0cmV0dXJuIGhlYWRlckNvbXBvbmVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTInLFxuXHRcdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0XHRoZWFkZXJDbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG5cdFx0XHRcdFx0PENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cblx0XHRcdFx0XHQ8VGl0bGVDb250ZW50IC8+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuXHRcdFx0XHRcdFx0PFZpZXdDb250cm9sc1xuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17c2V0Vmlld31cblx0XHRcdFx0XHRcdFx0b25OZXh0PXtuZXh0UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuXHRcdFx0XHRcdFx0XHRvblRvZGF5PXt0b2RheX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlZmF1bHRcIlxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIDxFeHBvcnRCdXR0b24gLz59XG5cdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0xIEBtZC9iYXNlLWhlYWRlcjpoaWRkZW5cIj5cblx0XHRcdFx0XHRcdDxOZXdFdmVudEJ1dHRvbiAvPlxuXHRcdFx0XHRcdFx0PFBvcG92ZXIgb25PcGVuQ2hhbmdlPXtzZXRNb2JpbGVNZW51T3Blbn0gb3Blbj17bW9iaWxlTWVudU9wZW59PlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIHNpemU9XCJzbVwiIHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TWVudSBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyVHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0PFBvcG92ZXJDb250ZW50IGFsaWduPVwiZW5kXCIgY2xhc3NOYW1lPVwidy1bMjQwcHhdIHAtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Vmlld0NvbnRyb2xzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRWaWV3PXt2aWV3fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17d2l0aENsb3NlKHNldFZpZXcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9e3dpdGhDbG9zZShuZXh0UGVyaW9kKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17d2l0aENsb3NlKHByZXZQZXJpb2QpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblRvZGF5PXt3aXRoQ2xvc2UodG9kYXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0eyFoaWRlRXhwb3J0QnV0dG9uICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdFx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBEYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzIH0gZnJvbSAnQC9ob29rcy91c2UtZGF0ZS10aW1lLWZvcm1hdHRlcnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgVGl0bGVDb250ZW50ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCB2aWV3LCBzZWxlY3REYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2VsZWN0RGF0ZTogY3R4LnNlbGVjdERhdGUsXG5cdFx0XHR0OiBjdHgudCxcblx0XHRcdGZpcnN0RGF5T2ZXZWVrOiBjdHguZmlyc3REYXlPZldlZWssXG5cdFx0fSkpXG5cblx0Y29uc3QgeyBmb3JtYXREYXRlUmFuZ2UgfSA9IHVzZURhdGVUaW1lRm9ybWF0dGVycygpXG5cblx0Y29uc3QgW29wZW5Qb3BvdmVyLCBzZXRPcGVuUG9wb3Zlcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpbmRleCkgPT5cblx0XHRjdXJyZW50RGF0ZS5tb250aChpbmRleCkuZm9ybWF0KCdNTU1NJylcblx0KVxuXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IGhhbmRsZVNlbGVjdERhdGUgPSAoZGF0ZTogRGF5anMpID0+IHtcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0T3BlblBvcG92ZXIobnVsbClcblx0fVxuXG5cdGNvbnN0IHJlbmRlck1vbnRoQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLm1vbnRoKCkgPT09IGluZGV4ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXtpbmRleH1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGN1cnJlbnREYXRlLm1vbnRoKGluZGV4KSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHttb250aH1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlclllYXJDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0Y3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0a2V5PXt5ZWFyfVxuXHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdERhdGUoY3VycmVudERhdGUueWVhcih5ZWFyKSl9XG5cdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt5ZWFyfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdCkpfVxuXHRcdDwvPlxuXHQpXG5cblx0Y29uc3QgcmVuZGVyV2Vla0NvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMod2Vla0RhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdFx0XHRjb25zdCBzdGFydCA9IGRheXNbMF1cblx0XHRcdFx0Y29uc3QgZW5kID0gZGF5c1s2XVxuXHRcdFx0XHRjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdGlzQ3VycmVudFdlZWsgJiYgJ2JnLXByaW1hcnkvMTAnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0a2V5PXtnZXREYXlLZXkoc3RhcnQpfVxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0RGF0ZShzdGFydCl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57Zm9ybWF0RGF0ZVJhbmdlKHN0YXJ0LCBlbmQpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCB0b2RheSA9IGlzVG9kYXkoZGF5KVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRcdFx0aXNDdXJyZW50RGF5ICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRrZXk9e2dldERheUtleShkYXkpfVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3REYXRlKGRheSl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuPntkYXkuZm9ybWF0KCdsbCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHR7dG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgcG9wb3ZlcnMgPSBbXG5cdFx0e1xuXHRcdFx0aWQ6ICdtb250aCcsXG5cdFx0XHRoaWRkZW46IHZpZXcgPT09ICd5ZWFyJyxcblx0XHRcdHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdHJlbmRlcjogcmVuZGVyTW9udGhDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd5ZWFyJyxcblx0XHRcdGhpZGRlbjogZmFsc2UsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlclllYXJDb250ZW50LFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0aWQ6ICd3ZWVrJyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ3dlZWsnLFxuXHRcdFx0dGl0bGU6IGZvcm1hdERhdGVSYW5nZSh3ZWVrRGF5c1swXSwgd2Vla0RheXNbNl0pLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJXZWVrQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnZGF5Jyxcblx0XHRcdGhpZGRlbjogdmlldyAhPT0gJ2RheScsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlckRheUNvbnRlbnQsXG5cdFx0fSxcblx0XVxuXG5cdHJldHVybiBwb3BvdmVyc1xuXHRcdC5maWx0ZXIoKHApID0+ICFwLmhpZGRlbilcblx0XHQubWFwKChwb3BvdmVyKSA9PiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRrZXk9e3BvcG92ZXIuaWR9XG5cdFx0XHRcdG9uT3BlbkNoYW5nZT17KG9wZW4pID0+IHNldE9wZW5Qb3BvdmVyKG9wZW4gPyBwb3BvdmVyLmlkIDogbnVsbCl9XG5cdFx0XHRcdG9wZW49e29wZW5Qb3BvdmVyID09PSBwb3BvdmVyLmlkfVxuXHRcdFx0PlxuXHRcdFx0XHQ8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtYnV0dG9uXCJcblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1idXR0b25cIlxuXHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkocG9wb3Zlci5pZCwgZ2V0RGF5S2V5KGN1cnJlbnREYXRlKSl9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHtwb3BvdmVyLnRpdGxlfVxuXHRcdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHRcdDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG5cdFx0XHRcdFx0XHR7cG9wb3Zlci5yZW5kZXIoKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdDwvUG9wb3Zlcj5cblx0XHQpKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRGF0ZVRpbWVGb3JtYXR0ZXJzKCkge1xuXHRjb25zdCB7IGN1cnJlbnRMb2NhbGUsIHRpbWV6b25lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdGN1cnJlbnRMb2NhbGU6IGN0eC5jdXJyZW50TG9jYWxlLFxuXHRcdHRpbWV6b25lOiBjdHgudGltZXpvbmUsXG5cdH0pKVxuXG5cdGNvbnN0IGZvcm1hdERhdGVSYW5nZSA9IChzdGFydDogRGF5anMsIGVuZDogRGF5anMpID0+XG5cdFx0bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0dGltZVpvbmU6IHRpbWV6b25lLFxuXHRcdFx0bW9udGg6ICdzaG9ydCcsXG5cdFx0XHRkYXk6ICdudW1lcmljJyxcblx0XHR9KS5mb3JtYXRSYW5nZShzdGFydC50b0RhdGUoKSwgZW5kLnRvRGF0ZSgpKVxuXG5cdHJldHVybiB7IGZvcm1hdERhdGVSYW5nZSB9XG59XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJy4vYWxsLWRheS1jZWxsJ1xuXG5pbnRlcmZhY2UgQWxsRGF5Um93UHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGNsYXNzZXM/OiB7IHJvdz86IHN0cmluZzsgY2VsbD86IHN0cmluZzsgc3BhY2VyPzogc3RyaW5nIH1cblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRzaG93U3BhY2VyPzogYm9vbGVhblxufVxuXG5jb25zdCBOb01lbW9BbGxEYXlSb3c6IFJlYWN0LkZDPEFsbERheVJvd1Byb3BzPiA9ICh7XG5cdGRheXMsXG5cdGNsYXNzZXMsXG5cdHJlc291cmNlLFxuXHRzaG93U3BhY2VyID0gdHJ1ZSxcbn0pID0+IHtcblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXksIGluZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5hbGxEYXkoZGF5LCBpbmRleCksXG5cdFx0ZGF5LFxuXHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRjbGFzc05hbWU6IGNuKCdoLWZ1bGwgbWluLWgtMTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJywgY2xhc3Nlcz8uY2VsbCksXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwgYmctYmFja2dyb3VuZCcsIGNsYXNzZXM/LnJvdyl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCJcblx0XHQ+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdCBib3JkZXItYlwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17a2V5cy5hbGxEYXlSb3cocmVzb3VyY2U/LmlkKX1cblx0XHRcdFx0aXNMYXN0Um93XG5cdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdFx0Lz5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Um93ID0gbWVtbyhOb01lbW9BbGxEYXlSb3cpXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0ZGF5cz86IERheWpzW11cblx0Z3JpZFR5cGU6ICdkYXknIHwgJ2hvdXInXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRyZW5kZXJDZWxsPzogKHJvdzogSG9yaXpvbnRhbEdyaWRSb3dQcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyB7XG5cdGlkOiBzdHJpbmcgfCBudW1iZXJcblx0cmVzb3VyY2U/OiBSZXNvdXJjZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y29sdW1ucz86IEhvcml6b250YWxHcmlkQ29sdW1uW11cblx0YWxsRGF5PzogYm9vbGVhblxuXHRzaG93RGF5TnVtYmVyPzogYm9vbGVhblxuXHRpc0xhc3RSb3c/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkUm93OiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFJvd1Byb3BzPiA9ICh7XG5cdGlkLFxuXHRyZXNvdXJjZSxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcblx0Y2xhc3NOYW1lLFxuXHRjb2x1bW5zID0gW10sXG5cdGFsbERheSxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRpc0xhc3RSb3cgPSBmYWxzZSxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Ly8gRmxhdCBjb2x1bW5zOiBlYWNoIGNvbHVtbiBoYXMgY29sLmRheSAocmVndWxhciBtb250aCwgcmVzb3VyY2UgbW9udGgpXG5cdC8vIEdyb3VwZWQgY29sdW1uczogZWFjaCBjb2x1bW4gaGFzIGNvbC5kYXlzW10gKHJlc291cmNlIHdlZWsgaG9yaXpvbnRhbClcblx0Y29uc3QgaXNHcm91cGVkID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5kYXlzKVxuXG5cdC8vIENvbGxlY3QgYWxsIGRheXMgZm9yIGZsYXQgcm93c1xuXHRjb25zdCBmbGF0RGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmIChpc0dyb3VwZWQpIHJldHVybiBbXVxuXHRcdHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoKGQpOiBkIGlzIERheWpzID0+IEJvb2xlYW4oZCkpXG5cdH0sIFtjb2x1bW5zLCBpc0dyb3VwZWRdKVxuXG5cdC8vIENvbXB1dGUgZXZlbnRzIG9uY2UgYXQgdGhlIHJvdyBsZXZlbCDigJQgc2hhcmVkIGJldHdlZW4gR3JpZENlbGxzIGFuZCBldmVudHMgbGF5ZXJcblx0Y29uc3QgeyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXM6IGZsYXREYXlzLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHJlc291cmNlSWQ6IHJlc291cmNlPy5pZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgcmVsYXRpdmUgbWluLXctMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5jb250YWluZXIuaG9yaXpvbnRhbC5yb3coaWQpfVxuXHRcdD5cblx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgcmVzb3VyY2UgJiYgKFxuXHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBzbTp3LTQwIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGgtZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmhvcml6b250YWwucm93TGFiZWwocmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndyYXAtYnJlYWstd29yZCB0ZXh0LXNtXCI+e3Jlc291cmNlLnRpdGxlfTwvZGl2PlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvUmVzb3VyY2VDZWxsPlxuXHRcdFx0KX1cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXggbWluLXctMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIG1pbi13LTBcIj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChjb2wuZGF5cykge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdDxHcm91cGVkQ29sdW1uXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRcdGNvbD17Y29sfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2w9e2luZGV4ID09PSBjb2x1bW5zLmxlbmd0aCAtIDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3c9e2lzTGFzdFJvd31cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17Y29sLmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiBjb2wuZGF5ID8gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdyAmJiAnYm9yZGVyLWItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2wuY2xhc3NOYW1lXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXk9e2NvbC5kYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2dyaWRUeXBlID09PSAnaG91cicgPyBjb2wuZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2NvbC5kYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0XHRwcmVjb21wdXRlZEV2ZW50cz17ZGF5RXZlbnRzTWFwLmdldChnZXREYXlLZXkoY29sLmRheSkpfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdFx0XHRzaG93RGF5TnVtYmVyPXtzaG93RGF5TnVtYmVyfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KSA6IG51bGxcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0ey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcm93ICovfVxuXHRcdFx0XHR7IWlzR3JvdXBlZCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0XHRkYXlzPXtmbGF0RGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRwb3NpdGlvbmVkRXZlbnRzPXtwb3NpdGlvbmVkRXZlbnRzfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlPy5pZH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG4vKipcbiAqIEEgY29sdW1uIGNvbnRhaW5pbmcgbXVsdGlwbGUgZGF5cyAoZS5nLiwgb25lIGRheSdzIGhvdXJseSBzbG90cyBpbiByZXNvdXJjZSB3ZWVrIHZpZXcpLlxuICogTmVlZHMgaXRzIG93biB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIGNhbGwgc2luY2UgZXZlbnRzIGFyZSBzY29wZWQgdG8gdGhpcyBkYXkgZ3JvdXAuXG4gKi9cbmNvbnN0IEdyb3VwZWRDb2x1bW4gPSBtZW1vKFxuXHQoe1xuXHRcdGNvbCxcblx0XHRncmlkVHlwZSA9ICdkYXknLFxuXHRcdGFsbERheSxcblx0XHRyZXNvdXJjZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGRheU51bWJlckhlaWdodCxcblx0XHRzaG93RGF5TnVtYmVyLFxuXHRcdGlzTGFzdFJvdyxcblx0XHRpc0xhc3RDb2wsXG5cdFx0aWQsXG5cdH06IHtcblx0XHRjb2w6IEhvcml6b250YWxHcmlkQ29sdW1uXG5cdFx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRcdGFsbERheT86IGJvb2xlYW5cblx0XHRyZXNvdXJjZT86IFJlc291cmNlXG5cdFx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRcdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRcdHNob3dEYXlOdW1iZXI6IGJvb2xlYW5cblx0XHRpc0xhc3RSb3c6IGJvb2xlYW5cblx0XHRpc0xhc3RDb2w6IGJvb2xlYW5cblx0XHRpZDogc3RyaW5nIHwgbnVtYmVyXG5cdH0pID0+IHtcblx0XHRjb25zdCBkYXlzID0gY29sLmRheXMgPz8gW11cblx0XHRjb25zdCB7IHBvc2l0aW9uZWRFdmVudHMgfSA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGFsbERheSxcblx0XHR9KVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCByZWxhdGl2ZSB3LWZ1bGxcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdHtkYXlzLm1hcCgoZGF5KSA9PiAoXG5cdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2ZsZXgtMSB3LTIwJyxcblx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdCFpc0xhc3RDb2wgJiYgJ2JvcmRlci1yIScsXG5cdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXk9e2RheX1cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gZGF5LmhvdXIoKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0XHRcdFx0c2hvd0RheU51bWJlcj17c2hvd0RheU51bWJlcn1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cblx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRFdmVudHNMYXllclxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCdob3Jpem9udGFsJywgaWQpfVxuXHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdHBvc2l0aW9uZWRFdmVudHM9e3Bvc2l0aW9uZWRFdmVudHN9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG4pXG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZFJvdyA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3cpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldERheUtleSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQge1xuXHRldmVudE92ZXJsYXBzUmFuZ2UsXG5cdGZpbHRlckV2ZW50c0J5UmVzb3VyY2UsXG59IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHtcblx0Z2V0UG9zaXRpb25lZEV2ZW50cyxcblx0dHlwZSBQb3NpdGlvbmVkRXZlbnQsXG59IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcblx0ZGF5czogRGF5anNbXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRXZWVrRXZlbnRzUmVzdWx0IHtcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cblx0ZGF5RXZlbnRzTWFwOiBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+XG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0YWxsRGF5LFxuXHRkYXlOdW1iZXJIZWlnaHQsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlLFxufTogVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzKTogUHJvY2Vzc2VkV2Vla0V2ZW50c1Jlc3VsdCA9PiB7XG5cdGNvbnN0IHtcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdGV2ZW50U3BhY2luZyxcblx0XHRldmVudEhlaWdodCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCBmaXJzdCA9IGRheXMuYXQoMClcblx0Y29uc3QgbGFzdCA9IGRheXMuYXQoLTEpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCB3ZWVrRW5kID0gbGFzdD8uZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCF3ZWVrU3RhcnQgfHwgIXdlZWtFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IHdlZWtFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uod2Vla1N0YXJ0LCB3ZWVrRW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0d2Vla0V2ZW50cyxcblx0XHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdGNvbnN0IGRheUV2ZW50c01hcCA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYWxlbmRhckV2ZW50W10+KClcblx0XHRmb3IgKGNvbnN0IGRheSBvZiBkYXlzKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBnZXREYXlLZXkoZGF5KVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXkuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheS5lbmRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+XG5cdFx0XHRcdGV2ZW50T3ZlcmxhcHNSYW5nZShlLCBkYXlTdGFydCwgZGF5RW5kKVxuXHRcdFx0KVxuXHRcdFx0bWFwLnNldChrZXksIGRheUV2ZW50cylcblx0XHR9XG5cdFx0cmV0dXJuIG1hcFxuXHR9LCBbZGF5cywgZXZlbnRzXSlcblxuXHRjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuXHRcdFx0ZGF5cyxcblx0XHRcdGV2ZW50cyxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGRheU51bWJlckhlaWdodCxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdGV2ZW50QmFySGVpZ2h0OiBldmVudEhlaWdodCxcblx0XHRcdGdyaWRUeXBlLFxuXHRcdH0pXG5cdH0sIFtcblx0XHRkYXlzLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdGV2ZW50SGVpZ2h0LFxuXHRcdGV2ZW50cyxcblx0XHRncmlkVHlwZSxcblx0XSlcblxuXHRyZXR1cm4geyBwb3NpdGlvbmVkRXZlbnRzLCBkYXlFdmVudHNNYXAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMsIHsgdHlwZSBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHtcblx0REFZX05VTUJFUl9IRUlHSFQsXG5cdEVWRU5UX0JBUl9IRUlHSFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG5cdGV2ZW50QmFySGVpZ2h0PzogbnVtYmVyIC8vIEN1c3RvbSBoZWlnaHQgZm9yIGV2ZW50IGJhcnMgaW4gcGl4ZWxzIChkZWZhdWx0cyB0byBFVkVOVF9CQVJfSEVJR0hUKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGV2ZW50cyxcblx0ZGF5TWF4RXZlbnRzLFxuXHRkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdGV2ZW50QmFySGVpZ2h0ID0gRVZFTlRfQkFSX0hFSUdIVCxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHQvLyBGb3IgaG91ci1iYXNlZCBncmlkcywgdXNlIGFjdHVhbCBmaXJzdC9sYXN0IGhvdXJzIGZyb20gZGF5cyBhcnJheVxuXHQvLyBGb3IgZGF5LWJhc2VkIGdyaWRzLCB1c2Ugc3RhcnQvZW5kIG9mIGRheSB0byBjYXB0dXJlIGFsbCBldmVudHNcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRpZiAoIWZpcnN0IHx8ICFsYXN0KSByZXR1cm4gW11cblxuXHRjb25zdCBmaXJzdERheSA9XG5cdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGZpcnN0LnN0YXJ0T2YoJ2hvdXInKSA6IGZpcnN0LnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IGxhc3REYXkgPSBncmlkVHlwZSA9PT0gJ2hvdXInID8gbGFzdC5lbmRPZignaG91cicpIDogbGFzdC5lbmRPZignZGF5Jylcblx0Y29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG5cdC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcblx0Y29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG5cdGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0KGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG5cdClcblxuXHQvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuXHRjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuXHRcdGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdGlmIChzdGFydERpZmYgIT09IDApIHtcblx0XHRcdHJldHVybiBzdGFydERpZmZcblx0XHR9XG5cdFx0cmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0fSlcblxuXHQvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cblx0XHRhLnN0YXJ0LmRpZmYoYi5zdGFydClcblx0KVxuXG5cdC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3Ncblx0Y29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogZGF5TWF4RXZlbnRzIH0sXG5cdFx0KCkgPT5cblx0XHRcdEFycmF5LmZyb20oeyBsZW5ndGg6IGRheUNvdW50IH0sICgpID0+ICh7IHRha2VuOiBmYWxzZSwgZXZlbnQ6IG51bGwgfSkpXG5cdClcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBGaW5kIHRoZSBmaXJzdCByb3cgd2hlcmUgZXZlcnkgY29sdW1uIGZyb20gc3RhcnRDb2wuLmVuZENvbCBpcyBmcmVlOyAtMSBpZiBub25lLlxuXHRjb25zdCBmaW5kQXZhaWxhYmxlUm93ID0gKHN0YXJ0Q29sOiBudW1iZXIsIGVuZENvbDogbnVtYmVyKTogbnVtYmVyID0+IHtcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkgcmV0dXJuIHJvd1xuXHRcdH1cblx0XHRyZXR1cm4gLTFcblx0fVxuXG5cdGNvbnN0IHBsYWNlID0gKFxuXHRcdHJvdzogbnVtYmVyLFxuXHRcdHN0YXJ0Q29sOiBudW1iZXIsXG5cdFx0ZW5kQ29sOiBudW1iZXIsXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG5cdFx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcblx0XHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuXHQpID0+IHtcblx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdH1cblx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdGxlZnQ6IChzdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcblx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHR0b3A6XG5cdFx0XHRcdGRheU51bWJlckhlaWdodCArIGV2ZW50U3BhY2luZyArIHJvdyAqIChldmVudEJhckhlaWdodCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRoZWlnaHQ6IGV2ZW50QmFySGVpZ2h0LFxuXHRcdFx0cG9zaXRpb246IHJvdyxcblx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHR9XG5cblx0Ly8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3Rcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuXHRcdGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuXHRcdGNvbnN0IGFkanVzdGVkRW5kID1cblx0XHRcdGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG5cdFx0Y29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG5cdFx0Y29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHRjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBGaXJzdCB0cnk6IHBsYWNlIGZyb20gb3JpZ2luYWwgc3RhcnQgcG9zaXRpb25cblx0XHRjb25zdCByb3cgPSBmaW5kQXZhaWxhYmxlUm93KHN0YXJ0Q29sLCBlbmRDb2wpXG5cdFx0aWYgKHJvdyAhPT0gLTEpIHtcblx0XHRcdHBsYWNlKHJvdywgc3RhcnRDb2wsIGVuZENvbCwgZXZlbnQsIGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjazogdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRmb3IgKGxldCB0cnlTdGFydCA9IHN0YXJ0Q29sICsgMTsgdHJ5U3RhcnQgPD0gZW5kQ29sOyB0cnlTdGFydCsrKSB7XG5cdFx0XHRjb25zdCB0cnVuY1JvdyA9IGZpbmRBdmFpbGFibGVSb3codHJ5U3RhcnQsIGVuZENvbClcblx0XHRcdGlmICh0cnVuY1JvdyAhPT0gLTEpIHtcblx0XHRcdFx0cGxhY2UodHJ1bmNSb3csIHRyeVN0YXJ0LCBlbmRDb2wsIGV2ZW50LCB0cnVlLCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTdGVwIDI6IEZpbGwgZ2FwcyB3aXRoIHNpbmdsZS1kYXkgZXZlbnRzXG5cdGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkU2luZ2xlRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cdFx0Y29uc3Qgcm93ID0gZmluZEF2YWlsYWJsZVJvdyhjb2wsIGNvbClcblx0XHRpZiAocm93ICE9PSAtMSkge1xuXHRcdFx0cGxhY2Uocm93LCBjb2wsIGNvbCwgZXZlbnQsIGZhbHNlLCBmYWxzZSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlOdW1iZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvZGF5LW51bWJlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCB7IHVzZUVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2hvb2tzL3VzZS1lZmZlY3RpdmUtYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZmlsdGVyRXZlbnRzQnlSZXNvdXJjZSB9IGZyb20gJ0AvbGliL3V0aWxzL2V2ZW50LXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcblx0ZGF5OiBEYXlqc1xuXHRob3VyPzogbnVtYmVyIC8vIE9wdGlvbmFsIGhvdXIgZm9yIGhvdXItYmFzZWQgZ3JpZHNcblx0bWludXRlPzogbnVtYmVyIC8vIE9wdGlvbmFsIG1pbnV0ZSBmb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzXG5cdGRheU1heEV2ZW50cz86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIC8vIE9wdGlvbmFsIHJlc291cmNlIElEIGZvciByZXNvdXJjZS1zcGVjaWZpYyBkYXkgY2VsbHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRzaG91bGRSZW5kZXJFdmVudHM/OiBib29sZWFuIC8vIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIGV2ZW50cyBzaG91bGQgYmUgcmVuZGVyZWRcblx0YWxsRGF5PzogYm9vbGVhbiAvLyBGbGFnIHRvIGluZGljYXRlIGlmIHRoaXMgaXMgYW4gYWxsLWRheSBjZWxsXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuIC8vIEZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBkYXkgbnVtYmVyXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cHJlY29tcHV0ZWRFdmVudHM/OiBDYWxlbmRhckV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vR3JpZENlbGw6IFJlYWN0LkZDPEdyaWRQcm9wcz4gPSAoe1xuXHRkYXksXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0Y2xhc3NOYW1lID0gJycsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHNob3VsZFJlbmRlckV2ZW50cyA9IHRydWUsXG5cdGFsbERheSA9IGZhbHNlLFxuXHRwcmVjb21wdXRlZEV2ZW50cyxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0c2hvd0RheU51bWJlciA9IGZhbHNlLFxuXHRjaGlsZHJlbixcbn0pID0+IHtcblx0Y29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT4obnVsbClcblx0Y29uc3Qge1xuXHRcdGRheU1heEV2ZW50cyA9IDAsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdHQsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Y3VycmVudExvY2FsZSxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0ZXZlbnRIZWlnaHQsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGVmZmVjdGl2ZUJ1c2luZXNzSG91cnMgPSB1c2VFZmZlY3RpdmVCdXNpbmVzc0hvdXJzKHJlc291cmNlSWQpXG5cblx0Y29uc3QgdG9kYXlFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIXNob3VsZFJlbmRlckV2ZW50cykge1xuXHRcdFx0cmV0dXJuIFtdXG5cdFx0fVxuXG5cdFx0Ly8gVXNlIHByZS1jb21wdXRlZCBldmVudHMgZnJvbSB0aGUgcm93IGxldmVsIHdoZW4gYXZhaWxhYmxlXG5cdFx0aWYgKHByZWNvbXB1dGVkRXZlbnRzKSB7XG5cdFx0XHRyZXR1cm4gcHJlY29tcHV0ZWRFdmVudHNcblx0XHR9XG5cblx0XHRsZXQgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG5cdFx0XHRkYXkuc3RhcnRPZihncmlkVHlwZSksXG5cdFx0XHRkYXkuZW5kT2YoZ3JpZFR5cGUpXG5cdFx0KVxuXG5cdFx0aWYgKGFsbERheSkge1xuXHRcdFx0dG9kYXlFdmVudHMgPSB0b2RheUV2ZW50cy5maWx0ZXIoKGUpID0+IGUuYWxsRGF5KVxuXHRcdH1cblxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRyZXR1cm4gZmlsdGVyRXZlbnRzQnlSZXNvdXJjZShcblx0XHRcdFx0dG9kYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpID8/IFtdXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRvZGF5RXZlbnRzXG5cdH0sIFtcblx0XHRwcmVjb21wdXRlZEV2ZW50cyxcblx0XHRkYXksXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0c2hvdWxkUmVuZGVyRXZlbnRzLFxuXHRcdGFsbERheSxcblx0XSlcblxuXHQvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcblx0Y29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IERheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuXHRcdGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG5cdFx0XHRkYXksXG5cdFx0XHRldmVudHMsXG5cdFx0fSlcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG5cdH1cblxuXHRjb25zdCBpc0N1cnJlbnRNb250aCA9IGRheS5tb250aCgpID09PSBjdXJyZW50RGF0ZS5tb250aCgpXG5cblx0Y29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcblx0Y29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cblx0Y29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcblx0XHRkYXRlOiBkYXksXG5cdFx0aG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG5cdFx0YnVzaW5lc3NIb3VyczogZWZmZWN0aXZlQnVzaW5lc3NIb3Vycyxcblx0fSlcblxuXHRjb25zdCB0ZXN0SWQgPVxuXHRcdGdyaWRUeXBlID09PSAnaG91cidcblx0XHRcdD8ga2V5cy5jZWxsLmRheShkYXksIGRheS5mb3JtYXQoJ0hIJyksIGRheS5mb3JtYXQoJ21tJykpXG5cdFx0XHQ6IGtleXMuY2VsbC5kYXkoZGF5KVxuXHRjb25zdCBkcm9wcGFibGVJZCA9IGtleXMuZHJvcHBhYmxlLmRheUNlbGwoZGF5LCB7IGFsbERheSwgcmVzb3VyY2VJZCB9KVxuXG5cdHJldHVybiAoXG5cdFx0PD5cblx0XHRcdDxEcm9wcGFibGVDZWxsXG5cdFx0XHRcdGFsbERheT17YWxsRGF5fVxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdIHJlbGF0aXZlIGJvcmRlci1yIGJvcmRlci1iIG1pbi13LTAnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZCB8fCB0ZXN0SWR9XG5cdFx0XHRcdGRhdGU9e2RheX1cblx0XHRcdFx0ZGlzYWJsZWQ9eyFpc0J1c2luZXNzIHx8ICFpc0N1cnJlbnRNb250aH1cblx0XHRcdFx0aG91cj17aG91cn1cblx0XHRcdFx0aWQ9e2Ryb3BwYWJsZUlkfVxuXHRcdFx0XHRtaW51dGU9e21pbnV0ZX1cblx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2VJZH1cblx0XHRcdFx0dHlwZT1cImRheS1jZWxsXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIHctZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJncmlkLWNlbGwtY29udGVudFwiXG5cdFx0XHRcdFx0c3R5bGU9e3sgZ2FwOiBgJHtldmVudFNwYWNpbmd9cHhgIH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7c2hvd0RheU51bWJlciAmJiA8RGF5TnVtYmVyIGRhdGU9e2RheX0gbG9jYWxlPXtjdXJyZW50TG9jYWxlfSAvPn1cblxuXHRcdFx0XHRcdHtzaG91bGRSZW5kZXJFdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0ey8qIFJlbmRlciBwbGFjZWhvbGRlcnMgZm9yIGV2ZW50cyB0aGF0IG9jY3VyIHRvZGF5IHNvIHRoYXQgdGhlIGNlbGwgaGVpZ2h0IGlzIGFjY29yZGluZyB0byBkYXlNYXhFdmVudHMuICovfVxuXHRcdFx0XHRcdFx0XHR7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBzaHJpbmstMFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2VtcHR5Jywgcm93SW5kZXgsIGV2ZW50LmlkKX1cblx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPXt7IGhlaWdodDogYCR7ZXZlbnRIZWlnaHR9cHhgIH19XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0ey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG5cdFx0XHRcdFx0XHRcdHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogVXNpbmcgZGl2IGFzIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBzaHJpbmstMCBtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0b25LZXlEb3duPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdHRhYkluZGV4PXswfVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdCt7aGlkZGVuRXZlbnRzQ291bnR9IHt0KCdtb3JlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0Ryb3BwYWJsZUNlbGw+XG5cblx0XHRcdHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cblx0XHRcdDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cblx0XHQ8Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgR3JpZENlbGwgPSBtZW1vKE5vTWVtb0dyaWRDZWxsKSBhcyB0eXBlb2YgTm9NZW1vR3JpZENlbGxcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIERheU51bWJlclByb3BzIHtcblx0ZGF0ZTogRGF5anNcblx0bG9jYWxlPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRheSBudW1iZXIgZm9yIGEgY2FsZW5kYXIgY2VsbCwgaGlnaGxpZ2h0aW5nICd0b2RheScgd2l0aCBhIHByaW1hcnkgYmFja2dyb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IERheU51bWJlcjogUmVhY3QuRkM8RGF5TnVtYmVyUHJvcHM+ID0gKHsgZGF0ZSwgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRhdGUpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuZGF5TnVtYmVyKGRhdGUpfVxuXHRcdD5cblx0XHRcdHtkYXRlLmZvcm1hdCgnRCcpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcblx0ZGF5OiBEYXlqc1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG5cdHJlZjogUmVhY3QuUmVmPHtcblx0XHRvcGVuOiAoKSA9PiB2b2lkXG5cdFx0Y2xvc2U6ICgpID0+IHZvaWRcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcblx0fT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG5cdGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG5cdFx0dXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaywgZXZlbnRIZWlnaHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcblx0XHRvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuXHRcdGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcblx0XHRzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG5cdFx0XHRzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuXHR9KSlcblxuXHQvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cblx0Ly8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG5cdC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG5cdGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG5cdHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcblx0XHRhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0gb3Blbj17ZGlhbG9nT3Blbn0+XG5cdFx0XHQ8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF5RXZlbnRzPy5kYXkuZm9ybWF0KCdNTU1NIEQsIFlZWVknKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHQ8L0RpYWxvZ0hlYWRlcj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJtdC00IHNwYWNlLXktM1wiPlxuXHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTFcIiAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17YGFsbC1ldmVudHMtZGlhbG9nLWV2ZW50LSQke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0XHRcdGtleT17ZXZlbnQuaWR9XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9e3sgaGVpZ2h0OiBgJHtldmVudEhlaWdodH1weGAgfX1cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L0RpYWxvZ0NvbnRlbnQ+XG5cdFx0PC9EaWFsb2c+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlRHJhZ2dhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcblx0fVxuXHRyZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG5cdGVsZW1lbnRJZCxcblx0ZXZlbnQsXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG5cdGVsZW1lbnRJZDogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IENTU1Byb3BlcnRpZXNcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0ZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG5cdGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG5cdFx0aWQ6IGVsZW1lbnRJZCxcblx0XHRkYXRhOiB7XG5cdFx0XHRldmVudCxcblx0XHRcdHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG5cdFx0fSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuXHR9KVxuXG5cdC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuXHRjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuXHRcdC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cblx0XHRjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuXHRcdFx0aXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG5cdFx0fVxuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0ZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0ZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuXHRcdFx0XHRcdCdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuXHRcdFx0XHRcdGdldEJvcmRlclJhZGl1c0NsYXNzKFxuXHRcdFx0XHRcdFx0Qm9vbGVhbihpc1RydW5jYXRlZFN0YXJ0KSxcblx0XHRcdFx0XHRcdEJvb2xlYW4oaXNUcnVuY2F0ZWRFbmQpXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG5cdFx0XHQ+XG5cdFx0XHRcdHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG5cdFx0XHRcdHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IHRpdGxlICovfVxuXHRcdFx0XHQ8cFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG5cdFx0XHRcdFx0XHQvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtldmVudC50aXRsZX1cblx0XHRcdFx0PC9wPlxuXG5cdFx0XHRcdHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcblx0XHRcdFx0ZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG5cdFx0XHRcdFx0PyBkaXNhYmxlRXZlbnRDbGlja1xuXHRcdFx0XHRcdFx0PyAnY3Vyc29yLWRlZmF1bHQnXG5cdFx0XHRcdFx0XHQ6ICdjdXJzb3ItcG9pbnRlcidcblx0XHRcdFx0XHQ6ICdjdXJzb3ItZ3JhYicsXG5cdFx0XHRcdGlzRHJhZ2dpbmcgJiZcblx0XHRcdFx0XHQhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcblx0XHRcdFx0XHQnY3Vyc29yLWdyYWJiaW5nIHNoYWRvdy1sZycsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGxheW91dD17dHJ1ZX1cblx0XHRcdGxheW91dElkPXtlbGVtZW50SWR9XG5cdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH19XG5cdFx0XHRyZWY9e3NldE5vZGVSZWZ9XG5cdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0XHR0cmFuc2l0aW9uS2V5PXtlbGVtZW50SWR9XG5cdFx0XHR7Li4uYXR0cmlidXRlc31cblx0XHRcdHsuLi5saXN0ZW5lcnN9XG5cdFx0PlxuXHRcdFx0ey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuXHRcdFx0e3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG5cdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcblx0RHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuXHQocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcblx0XHQvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG5cdFx0cmV0dXJuIChcblx0XHRcdHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcblx0XHRcdHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG5cdFx0XHRwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG5cdFx0XHRwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuXHRcdClcblx0fVxuKVxuIiwKICAgICJpbXBvcnQgeyB1c2VEcm9wcGFibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENlbGxJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERyb3BwYWJsZUNlbGxQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0dHlwZTogJ2RheS1jZWxsJyB8ICd0aW1lLWNlbGwnXG5cdGRhdGU6IERheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0YWxsRGF5PzogYm9vbGVhblxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0c3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0ZGlzYWJsZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogVGhlIHRpbWUgc3BhbiBhIGNlbGwgcmVwcmVzZW50cy4gR3JhbnVsYXJpdHkgZm9sbG93cyB0aGUgdmlldzogYSAxNS1taW51dGVcbiAqIHNsb3QgKGRheSksIGEgb25lLWhvdXIgc2xvdCAod2VlayksIG9yIHRoZSB3aG9sZSBkYXkgKG1vbnRoKS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2VsbFJhbmdlKFxuXHRkYXRlOiBEYXlqcyxcblx0aG91cj86IG51bWJlcixcblx0bWludXRlPzogbnVtYmVyXG4pOiB7IHN0YXJ0OiBEYXlqczsgZW5kOiBEYXlqcyB9IHtcblx0Y29uc3Qgc3RhcnQgPSBkYXRlLmhvdXIoaG91ciA/PyAwKS5taW51dGUobWludXRlID8/IDApXG5cblx0aWYgKGhvdXIgIT09IHVuZGVmaW5lZCAmJiBtaW51dGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB7IHN0YXJ0LCBlbmQ6IHN0YXJ0Lm1pbnV0ZShtaW51dGUgKyAxNSkgfVxuXHR9XG5cdGlmIChob3VyICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4geyBzdGFydCwgZW5kOiBzdGFydC5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgfVxuXHR9XG5cdHJldHVybiB7IHN0YXJ0LCBlbmQ6IHN0YXJ0LmhvdXIoMjMpLm1pbnV0ZSg1OSkgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3Qge1xuXHRcdG9uQ2VsbENsaWNrLFxuXHRcdGlzQ2VsbERpc2FibGVkLFxuXHRcdGdldFJlc291cmNlQnlJZCxcblx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRjbGFzc2VzT3ZlcnJpZGUsXG5cdFx0dmlldyxcblx0fSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldENlbGxSYW5nZShkYXRlLCBob3VyLCBtaW51dGUpXG5cdC8vIGBnZXRSZXNvdXJjZUJ5SWRgIGlzIG9ubHkgcHJlc2VudCBvbiByZXNvdXJjZSBjYWxlbmRhcnM7IHJlZ3VsYXIgY2FsZW5kYXJzIHJlc29sdmUgdG8gdW5kZWZpbmVkLlxuXHRjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlQnlJZD8uKHJlc291cmNlSWQpXG5cdGNvbnN0IGNlbGxJbmZvOiBDZWxsSW5mbyA9IHsgc3RhcnQsIGVuZCwgcmVzb3VyY2UsIGFsbERheSB9XG5cblx0Ly8gRGlzYWJsZWQgYnkgYnVzaW5lc3MgaG91cnMgKGBkaXNhYmxlZGAgcHJvcCkgb3IgdGhlIGNvbnN1bWVyJ3MgcHJlZGljYXRlLlxuXHRjb25zdCBjZWxsRGlzYWJsZWQgPSBkaXNhYmxlZCB8fCBCb29sZWFuKGlzQ2VsbERpc2FibGVkPy4oY2VsbEluZm8pKVxuXHRjb25zdCBjbGlja0Jsb2NrZWQgPSBkaXNhYmxlQ2VsbENsaWNrIHx8IGNlbGxEaXNhYmxlZFxuXG5cdGNvbnN0IHsgaXNPdmVyLCBzZXROb2RlUmVmIH0gPSB1c2VEcm9wcGFibGUoe1xuXHRcdGlkLFxuXHRcdGRhdGE6IHsgdHlwZSwgZGF0ZSwgaG91ciwgbWludXRlLCByZXNvdXJjZUlkLCBhbGxEYXkgfSxcblx0XHRkaXNhYmxlZDogZGlzYWJsZURyYWdBbmREcm9wIHx8IGNlbGxEaXNhYmxlZCxcblx0fSlcblxuXHRjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRpZiAoY2xpY2tCbG9ja2VkKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0b25DZWxsQ2xpY2soY2VsbEluZm8pXG5cdH1cblxuXHRjb25zdCBzaG93RHJvcEhpZ2hsaWdodCA9IGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICFjZWxsRGlzYWJsZWRcblx0Y29uc3QgZGlzYWJsZWRDbGFzcyA9IGNsYXNzZXNPdmVycmlkZT8uZGlzYWJsZWRDZWxsIHx8IERJU0FCTEVEX0NFTExfQ0xBU1NOQU1FXG5cblx0cmV0dXJuIChcblx0XHQvLyBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogVGhlIGNlbGwgaXMgaW50ZXJhY3RpdmUgZm9yIGV2ZW50IGNyZWF0aW9uXG5cdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VLZXlXaXRoQ2xpY2tFdmVudHM6IEtleSBldmVudHMgYXJlIGhhbmRsZWQgYnkgcGFyZW50IGNvbXBvbmVudHNcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZHJvcHBhYmxlLWNlbGwnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHNob3dEcm9wSGlnaGxpZ2h0ICYmICdiZy1hY2NlbnQnLFxuXHRcdFx0XHRjbGlja0Jsb2NrZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcblx0XHRcdFx0Y2VsbERpc2FibGVkICYmIGRpc2FibGVkQ2xhc3Ncblx0XHRcdCl9XG5cdFx0XHRkYXRhLWRpc2FibGVkPXtjZWxsRGlzYWJsZWQudG9TdHJpbmcoKX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuXHRcdFx0ZGF0YS12aWV3PXt2aWV3fVxuXHRcdFx0b25DbGljaz17aGFuZGxlQ2VsbENsaWNrfVxuXHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUNlbGxQcm9wcyB7XG5cdHJlc291cmNlOiBSZXNvdXJjZVxuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0J2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDZWxsOiBSZWFjdC5GQzxSZXNvdXJjZUNlbGxQcm9wcz4gPSAoe1xuXHRyZXNvdXJjZSxcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcbn0pID0+IHtcblx0Y29uc3QgeyByZW5kZXJSZXNvdXJjZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAnLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdGNvbG9yOiByZXNvdXJjZS5jb2xvcixcblx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiByZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG5cdFx0XHR9fVxuXHRcdD5cblx0XHRcdHtyZW5kZXJSZXNvdXJjZVxuXHRcdFx0XHQ/IHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHQ6IChjaGlsZHJlbiA/PyAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGVcIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ3VycmVudFRpbWVJbmRpY2F0b3IgfSBmcm9tICdAL2NvbXBvbmVudHMvY3VycmVudC10aW1lLWluZGljYXRvcidcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHR5cGUgeyBQb3NpdGlvbmVkRXZlbnQgfSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cydcblxuZXhwb3J0IGludGVyZmFjZSBIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IERheWpzW11cblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcblx0cG9zaXRpb25lZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W11cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7XG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRwb3NpdGlvbmVkRXZlbnRzLFxufSkgPT4ge1xuXHRjb25zdCB7IGV2ZW50SGVpZ2h0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHdlZWtTdGFydCA9IGRheXMuYXQoMCk/LnN0YXJ0T2YoJ2RheScpXG5cblx0Ly8gTm93LWxpbmUgaXMgZ2F0ZWQgdG8gaG91ci1yZXNvbHV0aW9uIGhvcml6b250YWwgZ3JpZHMgKHJlc291cmNlIGRheSBob3Jpem9udGFsLFxuXHQvLyByZXNvdXJjZSB3ZWVrIGhvcml6b250YWwgaG91cmx5KS4gRGF5LXJlc29sdXRpb24gZ3JpZHMg4oCUIHJlZ3VsYXIgTW9udGhWaWV3IGFuZFxuXHQvLyByZXNvdXJjZSBNb250aFZpZXcg4oCUIHNraXAgaXQ7IGEgMjRoLXBlcmNlbnRhZ2UgbGluZSBwZXIgY2VsbCB3b3VsZCBiZSBhXG5cdC8vIG1lYW5pbmdsZXNzIDFweCBzbGl2ZXIuXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblx0Y29uc3Qgc2hvd05vd0xpbmUgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmIEJvb2xlYW4ocmFuZ2VTdGFydCAmJiByYW5nZUVuZClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3Nob3dOb3dMaW5lICYmIHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRheGlzPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0cmFuZ2VFbmQ9e3JhbmdlRW5kfVxuXHRcdFx0XHRcdHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9XG5cdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KX1cblx0XHRcdHtwb3NpdGlvbmVkRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQ/LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdGRhdGEtbGVmdD17ZXZlbnQubGVmdH1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmNvbnRhaW5lci5ob3Jpem9udGFsLmV2ZW50KGV2ZW50LmlkKX1cblx0XHRcdFx0XHRcdGRhdGEtdG9wPXtldmVudC50b3B9XG5cdFx0XHRcdFx0XHRkYXRhLXdpZHRoPXtldmVudC53aWR0aH1cblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGV2ZW50S2V5LCAnd3JhcHBlcicpfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYGNhbGMoJHtldmVudC5sZWZ0fSUgKyB2YXIoLS1zcGFjaW5nKSAqIDAuMjUpYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMSlgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH1weGAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnRIZWlnaHR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBDdXJyZW50VGltZUluZGljYXRvclByb3BzIHtcblx0LyoqIFRoZSBzdGFydCBkYXRlL3RpbWUgb2YgdGhlIGNvbnRhaW5lcidzIHRpbWVsaW5lIChlLmcuLCB0b3Agb2YgdGhlIGNvbHVtbikgKi9cblx0cmFuZ2VTdGFydDogRGF5anNcblx0LyoqIFRoZSBlbmQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgYm90dG9tIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlRW5kOiBEYXlqc1xuXHQvKiogT3B0aW9uYWwgcmVmZXJlbmNlIHRpbWUgZm9yIFwibm93XCIgKHVzZWZ1bCBmb3IgdGVzdGluZykgKi9cblx0bm93PzogRGF5anNcblx0LyoqIFRoZSByZXNvdXJjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2x1bW4gKG9wdGlvbmFsKSAqL1xuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdC8qKlxuXHQgKiBMYXlvdXQgYXhpcyB0aGUgaW5kaWNhdG9yIGlzIHJlbmRlcmVkIGFsb25nLiBEZWZhdWx0cyB0byBgJ3ZlcnRpY2FsJ2AuXG5cdCAqIC0gYCd2ZXJ0aWNhbCdgOiBob3Jpem9udGFsIGxpbmUgcG9zaXRpb25lZCBieSBgdG9wOiB7cHJvZ3Jlc3N9JWAgKGRheS93ZWVrIHZlcnRpY2FsIGdyaWRzKS5cblx0ICogLSBgJ2hvcml6b250YWwnYDogdmVydGljYWwgbGluZSBwb3NpdGlvbmVkIGJ5IGBsZWZ0OiB7cHJvZ3Jlc3N9JWAgKGhvcml6b250YWwgcmVzb3VyY2UgaG91ciBncmlkcykuXG5cdCAqL1xuXHRheGlzPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJ1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSByZWQgbWFya2VyIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgdGltZSByZWxhdGl2ZSB0byBhIGNvbnRhaW5lcidzIHRpbWVsaW5lLlxuICogSGlkZXMgaXRzZWxmIHdoZW4gYG5vd2AgaXMgb3V0c2lkZSB0aGUgcmFuZ2UuIFN3aXRjaGVzIG9yaWVudGF0aW9uIHZpYSB0aGUgYGF4aXNgIHByb3Ag4oCUXG4gKiB2ZXJ0aWNhbCAoZGVmYXVsdCkgZHJhd3MgYSBob3Jpem9udGFsIGxpbmUgZm9yIHZlcnRpY2FsIGdyaWRzOyBob3Jpem9udGFsIGRyYXdzIGEgdmVydGljYWxcbiAqIGxpbmUgZm9yIGhvcml6b250YWwgcmVzb3VyY2UgaG91ciBncmlkcy4gU3VwcG9ydHMgY3VzdG9tIHJlbmRlcmluZyB2aWFcbiAqIGByZW5kZXJDdXJyZW50VGltZUluZGljYXRvcmAgZnJvbSBjb250ZXh0LlxuICovXG5jb25zdCBOb01lbW9DdXJyZW50VGltZUluZGljYXRvciA9ICh7XG5cdHJhbmdlU3RhcnQsXG5cdHJhbmdlRW5kLFxuXHRub3c6IHByb3BOb3csXG5cdHJlc291cmNlLFxuXHRheGlzID0gJ3ZlcnRpY2FsJyxcbn06IEN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMpID0+IHtcblx0Ly8gR2V0IHJlbmRlciBmdW5jdGlvbiBhbmQgY3VycmVudCB2aWV3IGZyb20gY29udGV4dFxuXHRjb25zdCB7IHJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yLCB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcjogc3RhdGUucmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHR2aWV3OiBzdGF0ZS52aWV3LFxuXHRcdH0pXG5cdClcblxuXHRjb25zdCBub3cgPSBwcm9wTm93ID8/IGRheWpzKClcblxuXHQvLyBDaGVjayBpZiBjdXJyZW50IHRpbWUgZmFsbHMgd2l0aGluIHRoaXMgcmFuZ2Vcblx0Y29uc3QgaXNXaXRoaW5SYW5nZSA9IG5vdy5pc1NhbWVPckFmdGVyKHJhbmdlU3RhcnQpICYmIG5vdy5pc0JlZm9yZShyYW5nZUVuZClcblxuXHRpZiAoIWlzV2l0aGluUmFuZ2UpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IHJhbmdlRW5kLmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IG1pbnV0ZXNGcm9tU3RhcnQgPSBub3cuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgcHJvZ3Jlc3MgPSAobWludXRlc0Zyb21TdGFydCAvIHRvdGFsRHVyYXRpb24pICogMTAwXG5cblx0Ly8gSWYgY3VzdG9tIHJlbmRlciBmdW5jdGlvbiBpcyBwcm92aWRlZCB2aWEgY29udGV4dCwgdXNlIGl0XG5cdGlmIChyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8PlxuXHRcdFx0XHR7cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3Ioe1xuXHRcdFx0XHRcdGN1cnJlbnRUaW1lOiBub3csXG5cdFx0XHRcdFx0cmFuZ2VTdGFydCxcblx0XHRcdFx0XHRyYW5nZUVuZCxcblx0XHRcdFx0XHRwcm9ncmVzcyxcblx0XHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHRcdGF4aXMsXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC8+XG5cdFx0KVxuXHR9XG5cblx0Ly8gRGVmYXVsdCBpbmRpY2F0b3IgcmVuZGVyaW5nXG5cdGlmIChheGlzID09PSAnaG9yaXpvbnRhbCcpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiY3VycmVudC10aW1lLWluZGljYXRvclwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0bGVmdDogYCR7cHJvZ3Jlc3N9JWAsXG5cdFx0XHRcdH19XG5cdFx0XHQvPlxuXHRcdClcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHJpZ2h0LTAgaC0wLjUgYmctcmVkLTUwMCB6LTUwIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcblx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdHRvcDogYCR7cHJvZ3Jlc3N9JWAsXG5cdFx0XHR9fVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEN1cnJlbnRUaW1lSW5kaWNhdG9yID0gbWVtbyhOb01lbW9DdXJyZW50VGltZUluZGljYXRvcilcbiIsCiAgICAiaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIEFsbERheUNlbGxQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBOb01lbW9BbGxEYXlDZWxsOiBSZWFjdC5GQzxBbGxEYXlDZWxsUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3ctMTYgYm9yZGVyLXIgc2hyaW5rLTAgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgZmxleCBib3JkZXItYiBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMSB0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0cnVuY2F0ZVwiPnt0KCdhbGxEYXknKX08L3NwYW4+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IEFsbERheUNlbGwgPSBtZW1vKE5vTWVtb0FsbERheUNlbGwpXG4iLAogICAgImltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIEhvdXJMYWJlbFByb3BzIHtcblx0ZGF0ZTogRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IEhvdXJMYWJlbDogUmVhY3QuRkM8SG91ckxhYmVsUHJvcHM+ID0gKHsgZGF0ZSB9KSA9PiB7XG5cdGNvbnN0IHsgcmVuZGVySG91ciwgdGltZUZvcm1hdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChyZW5kZXJIb3VyKSB7XG5cdFx0cmV0dXJuIDw+e3JlbmRlckhvdXIoZGF0ZSl9PC8+XG5cdH1cblxuXHRyZXR1cm4gPD57ZGF0ZS5mb3JtYXQodGltZUZvcm1hdCA9PT0gJzEyLWhvdXInID8gJ2ggQScgOiAnSCcpfTwvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgdXNlU2Nyb2xsVG9UaW1lIH0gZnJvbSAnLi91c2Utc2Nyb2xsLXRvLXRpbWUnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRDb2wsIHR5cGUgVmVydGljYWxHcmlkQ29sUHJvcHMgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtY29sJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRQcm9wcyB7XG5cdGNvbHVtbnM6IFZlcnRpY2FsR3JpZENvbFByb3BzW11cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmc7IGFsbERheT86IHN0cmluZyB9XG5cdGFsbERheVJvdz86IFJlYWN0LlJlYWN0Tm9kZVxuXHQvKipcblx0ICogR3JhbnVsYXJpdHkgb2YgZWFjaCBob3VyIHJvdyBpbiBtaW51dGVzLiBGb3J3YXJkZWQgdG8gVmVydGljYWxHcmlkQ29sLlxuXHQgKi9cblx0c2xvdER1cmF0aW9uTWludXRlcz86IG51bWJlclxuXHRzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdHNsb3REdXJhdGlvbk1pbnV0ZXMsXG5cdHN0eWxlLFxufSkgPT4ge1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cdGNvbnN0IGlzUmVndWxhckNhbGVuZGFyID0gIWlzUmVzb3VyY2VDYWxlbmRhclxuXHQvLyBUcmlnZ2VyZWQgd2hlbiBgaGlkZU5vbkJ1c2luZXNzSG91cnNgIGZpbHRlcnMgZXZlcnkgY29sdW1uIHRvIHplcm8gaG91cnNcblx0Ly8gKGUuZy4gYnVzaW5lc3MgaG91cnMgYHN0YXJ0VGltZTogMCwgZW5kVGltZTogMGApLiBUaGUgYWxsLWRheSByb3cgdGFrZXNcblx0Ly8gdGhlIGZyZWVkIHZlcnRpY2FsIHNwYWNlIHNvIHRoZSB2aWV3IGRvZXNuJ3QgcmVuZGVyIGFuIGVtcHR5IHRpbWUgZ3JpZC5cblx0Y29uc3QgZXhwYW5kQWxsRGF5Um93ID0gY29sdW1ucy5ldmVyeSgoYykgPT4gIWMuZGF5cz8ubGVuZ3RoKVxuXG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNjcm9sbFRpbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3Qgdmlld3BvcnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IGhhc0hvdXJzVG9TY3JvbGwgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmICFleHBhbmRBbGxEYXlSb3dcblxuXHR1c2VTY3JvbGxUb1RpbWUoe1xuXHRcdHZpZXdwb3J0UmVmLFxuXHRcdHNjcm9sbFRpbWUsXG5cdFx0ZW5hYmxlZDogaGFzSG91cnNUb1Njcm9sbCxcblx0XHRzY3JvbGxLZXk6IGAke3ZpZXd9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YCxcblx0fSlcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogY2xhc3Nlcz8uaGVhZGVyLCBhbGxEYXk6IGNsYXNzZXM/LmFsbERheSB9fVxuXHRcdFx0ZXhwYW5kQWxsRGF5Um93PXtleHBhbmRBbGxEYXlSb3d9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyPlxuXHQpXG5cblx0Ly8gV2hlbiBhbGwgY29sdW1ucyBhcmUgZW1wdHkgKG5vIGhvdXJzIHRvIGRpc3BsYXkpLCBza2lwIHRoZSBTY3JvbGxBcmVhXG5cdC8vIGVudGlyZWx5IHNvIHRoZSBoZWFkZXIgKHdpdGggdGhlIGV4cGFuZGVkIGFsbC1kYXkgcm93KSB0YWtlcyB0aGUgZnVsbFxuXHQvLyBjb250YWluZXIgaGVpZ2h0LiBoLWZ1bGwgb24gYSBmbGV4IGNoaWxkIG9ubHkgcmVzb2x2ZXMgY29ycmVjdGx5IGFnYWluc3Rcblx0Ly8gYSBwYXJlbnQgd2l0aCBhIGRlZmluaXRlIGhlaWdodCwgYW5kIFJhZGl4J3MgVmlld3BvcnQgd3JhcHBlciBoYXMgb25seVxuXHQvLyBtaW4taGVpZ2h0IChub3QgZXhwbGljaXQgaGVpZ2h0KSwgd2hpY2ggaXMgd2h5IHRoZSBhbGwtZGF5IHJvdydzXG5cdC8vIGZsZXgtMSB3b3VsZG4ndCBncm93IHdoZW4gbmVzdGVkIGluc2lkZSB0aGUgU2Nyb2xsQXJlYS5cblx0aWYgKGV4cGFuZEFsbERheVJvdyAmJiBoZWFkZXIpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbFwiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0XHRzdHlsZT17c3R5bGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHtoZWFkZXJ9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cImgtZnVsbCBmbGV4IGZsZXgtY29sXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdFx0c3R5bGU9e3N0eWxlfVxuXHRcdD5cblx0XHRcdHsvKiBoZWFkZXIgcm93ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLXNjcm9sbFwiXG5cdFx0XHRcdHZpZXdQb3J0UHJvcHM9e3tcblx0XHRcdFx0XHRjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcsXG5cdFx0XHRcdFx0cmVmOiB2aWV3cG9ydFJlZixcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0ey8qIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYSAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBmbGV4LTEgbWluLXctZnVsbCB3LWZpdCcsIGNsYXNzZXM/LmJvZHkpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkQ29sXG5cdFx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGNvbHVtbi5pZCwgaW5kZXgpfVxuXHRcdFx0XHRcdFx0XHR7Li4uY29sdW1ufVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbj17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9uTWludXRlc31cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPiB7LyogdmVydGljYWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPnsnICd9XG5cdFx0XHRcdHsvKiBob3Jpem9udGFsIHNjcm9sbGJhciAqL31cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB0eXBlIFJlZk9iamVjdCwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IHR5cGUgU2Nyb2xsVG9UaW1lQXhpcyA9ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCdcblxuZXhwb3J0IGludGVyZmFjZSBVc2VTY3JvbGxUb1RpbWVPcHRpb25zIHtcblx0LyoqXG5cdCAqIFJlZiB0byB0aGUgYWN0dWFsIHNjcm9sbGluZyBlbGVtZW50IChlLmcuIHRoZSBSYWRpeCBTY3JvbGxBcmVhIHZpZXdwb3J0KS5cblx0ICogVGhlIGhvb2sgc2Nyb2xscyB0aGlzIGVsZW1lbnQgZGlyZWN0bHkgc28gdGhlIHBhcmVudCBwYWdlIGlzIG5vdCBhZmZlY3RlZC5cblx0ICovXG5cdHZpZXdwb3J0UmVmOiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuXHRzY3JvbGxUaW1lPzogc3RyaW5nXG5cdGVuYWJsZWQ6IGJvb2xlYW5cblx0c2Nyb2xsS2V5OiBzdHJpbmdcblx0LyoqXG5cdCAqIFZlcnRpY2FsIHNjcm9sbHMgYWxvbmcgdGhlIFkgYXhpcyAoYHNjcm9sbFRvcGApLCBob3Jpem9udGFsIGFsb25nIHRoZSBYXG5cdCAqIGF4aXMgKGBzY3JvbGxMZWZ0YCkuXG5cdCAqXG5cdCAqIEBkZWZhdWx0ICd2ZXJ0aWNhbCdcblx0ICovXG5cdGF4aXM/OiBTY3JvbGxUb1RpbWVBeGlzXG59XG5cbmNvbnN0IEhPVVJfUEFUVEVSTiA9IC9eKFxcZHsxLDJ9KSg/OjpcXGR7MSwyfSk/KD86OlxcZHsxLDJ9KT8kL1xuY29uc3QgSE9VUl9TRUxFQ1RPUiA9ICdbZGF0YS1ob3VyXSdcblxuY29uc3QgcGFyc2VIb3VyID0gKHRpbWU6IHN0cmluZyk6IG51bWJlciB8IG51bGwgPT4ge1xuXHRjb25zdCBtYXRjaCA9IEhPVVJfUEFUVEVSTi5leGVjKHRpbWUpXG5cdGlmICghbWF0Y2gpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdGNvbnN0IGhvdXIgPSBOdW1iZXIucGFyc2VJbnQobWF0Y2hbMV0sIDEwKVxuXHRjb25zdCBpc0luUmFuZ2UgPSBob3VyID49IDAgJiYgaG91ciA8PSAyM1xuXHRyZXR1cm4gaXNJblJhbmdlID8gaG91ciA6IG51bGxcbn1cblxuY29uc3QgcmVhZFJvd0hvdXIgPSAocm93OiBIVE1MRWxlbWVudCk6IG51bWJlciA9PlxuXHROdW1iZXIucGFyc2VJbnQocm93LmdldEF0dHJpYnV0ZSgnZGF0YS1ob3VyJykgPz8gJycsIDEwKVxuXG5jb25zdCBmaW5kVGFyZ2V0Um93ID0gKFxuXHRyb3dzOiBIVE1MRWxlbWVudFtdLFxuXHR0YXJnZXRIb3VyOiBudW1iZXJcbik6IEhUTUxFbGVtZW50IHwgbnVsbCA9PiB7XG5cdGNvbnN0IGZpcnN0Um93ID0gcm93cy5hdCgwKVxuXHRjb25zdCBsYXN0Um93ID0gcm93cy5hdCgtMSlcblx0aWYgKCFmaXJzdFJvdyB8fCAhbGFzdFJvdykge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblxuXHRpZiAodGFyZ2V0SG91ciA8PSByZWFkUm93SG91cihmaXJzdFJvdykpIHtcblx0XHRyZXR1cm4gZmlyc3RSb3dcblx0fVxuXHRpZiAodGFyZ2V0SG91ciA+PSByZWFkUm93SG91cihsYXN0Um93KSkge1xuXHRcdHJldHVybiBsYXN0Um93XG5cdH1cblx0cmV0dXJuIHJvd3MuZmluZCgocm93KSA9PiByZWFkUm93SG91cihyb3cpID09PSB0YXJnZXRIb3VyKSA/PyBudWxsXG59XG5cbmNvbnN0IHNjcm9sbFZpZXdwb3J0VG9Sb3cgPSAoXG5cdHZpZXdwb3J0OiBIVE1MRWxlbWVudCxcblx0dGFyZ2V0Um93OiBIVE1MRWxlbWVudCxcblx0Zmlyc3RSb3c6IEhUTUxFbGVtZW50LFxuXHRheGlzOiBTY3JvbGxUb1RpbWVBeGlzXG4pID0+IHtcblx0Ly8gVXNlIHRoZSBmaXJzdCByb3cgYXMgdGhlIHJlZmVyZW5jZSBmb3IgXCJzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgdGltZVxuXHQvLyBhcmVhLlwiIEl0IG5hdHVyYWxseSBzaXRzIHBhc3QgYW55IHN0aWNreS1sZWZ0IChvciBzdGlja3ktdG9wKSBoZWFkZXJcblx0Ly8gbGlrZSB0aGUgUmVzb3VyY2VzIGNvbHVtbi4gU2V0dGluZyBzY3JvbGxMZWZ0L3Njcm9sbFRvcCB0byB0aGUgb2Zmc2V0XG5cdC8vIGZyb20gZmlyc3Qgcm93IHRvIHRhcmdldCByb3cgbGFuZHMgdGhlIHRhcmdldCB3aGVyZSB0aGUgZmlyc3Qgcm93IHNhdCxcblx0Ly8gaS5lLiByaWdodCBhdCB0aGUgc3RhcnQgb2YgdGhlIHZpc2libGUgdGltZSBhcmVhIGluc3RlYWQgb2YgYmVoaW5kIHRoZVxuXHQvLyBzdGlja3kgY29sdW1uLlxuXHRjb25zdCB0YXJnZXRSZWN0ID0gdGFyZ2V0Um93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cdGNvbnN0IGZpcnN0UmVjdCA9IGZpcnN0Um93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cblx0aWYgKGF4aXMgPT09ICdob3Jpem9udGFsJykge1xuXHRcdHZpZXdwb3J0LnNjcm9sbFRvKHtcblx0XHRcdGxlZnQ6IHRhcmdldFJlY3QubGVmdCAtIGZpcnN0UmVjdC5sZWZ0LFxuXHRcdFx0YmVoYXZpb3I6ICdhdXRvJyxcblx0XHR9KVxuXHRcdHJldHVyblxuXHR9XG5cblx0dmlld3BvcnQuc2Nyb2xsVG8oe1xuXHRcdHRvcDogdGFyZ2V0UmVjdC50b3AgLSBmaXJzdFJlY3QudG9wLFxuXHRcdGJlaGF2aW9yOiAnYXV0bycsXG5cdH0pXG59XG5cbmV4cG9ydCBjb25zdCB1c2VTY3JvbGxUb1RpbWUgPSAoe1xuXHR2aWV3cG9ydFJlZixcblx0c2Nyb2xsVGltZSxcblx0ZW5hYmxlZCxcblx0c2Nyb2xsS2V5LFxuXHRheGlzID0gJ3ZlcnRpY2FsJyxcbn06IFVzZVNjcm9sbFRvVGltZU9wdGlvbnMpID0+IHtcblx0Y29uc3QgbGFzdFNjcm9sbGVkS2V5UmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoIWVuYWJsZWQgfHwgIXNjcm9sbFRpbWUpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRpZiAobGFzdFNjcm9sbGVkS2V5UmVmLmN1cnJlbnQgPT09IHNjcm9sbEtleSkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3QgdGFyZ2V0SG91ciA9IHBhcnNlSG91cihzY3JvbGxUaW1lKVxuXHRcdGlmICh0YXJnZXRIb3VyID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRjb25zdCB2aWV3cG9ydCA9IHZpZXdwb3J0UmVmLmN1cnJlbnRcblx0XHRpZiAoIXZpZXdwb3J0KSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgcm93cyA9IEFycmF5LmZyb20oXG5cdFx0XHR2aWV3cG9ydC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihIT1VSX1NFTEVDVE9SKVxuXHRcdClcblx0XHRjb25zdCBmaXJzdFJvdyA9IHJvd3MuYXQoMClcblx0XHRjb25zdCB0YXJnZXRSb3cgPSBmaW5kVGFyZ2V0Um93KHJvd3MsIHRhcmdldEhvdXIpXG5cdFx0aWYgKCFmaXJzdFJvdyB8fCAhdGFyZ2V0Um93KSB7XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0c2Nyb2xsVmlld3BvcnRUb1Jvdyh2aWV3cG9ydCwgdGFyZ2V0Um93LCBmaXJzdFJvdywgYXhpcylcblx0XHRsYXN0U2Nyb2xsZWRLZXlSZWYuY3VycmVudCA9IHNjcm9sbEtleVxuXHR9LCBbZW5hYmxlZCwgc2Nyb2xsVGltZSwgc2Nyb2xsS2V5LCB2aWV3cG9ydFJlZiwgYXhpc10pXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5PzogRGF5anNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVuZGVySGVhZGVyPzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckNlbGw/OiAoZGF0ZTogRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRub0V2ZW50cz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEdyYW51bGFyaXR5IG9mIGVhY2ggaG91ciByb3cgaW4gbWludXRlcy4gYDYwYCByZW5kZXJzIG9uZSBjZWxsIHBlciBob3VyIHdpdGhcblx0ICogbm8gc3ViLWhvdXIgbGluZXMuIGAzMGAgcmVuZGVycyB0d28uIGAxNWAgcmVuZGVycyBmb3VyIHdpdGggZGFzaGVkIHNlcGFyYXRvcnMuXG5cdCAqL1xuXHRzbG90RHVyYXRpb25NaW51dGVzPzogbnVtYmVyXG5cdC8qKiBXaGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QgY29sdW1uIGluIHRoZSBncmlkICovXG5cdGlzTGFzdENvbHVtbj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkQ29sOiBSZWFjdC5GQzxWZXJ0aWNhbEdyaWRDb2xQcm9wcz4gPSAoe1xuXHRpZCxcblx0ZGF5cyxcblx0cmVzb3VyY2VJZCxcblx0cmVzb3VyY2UsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGdyaWRUeXBlLFxuXHRjbGFzc05hbWUsXG5cdHJlbmRlckNlbGwsXG5cdG5vRXZlbnRzLFxuXHRzbG90RHVyYXRpb25NaW51dGVzID0gNjAsXG5cdGlzTGFzdENvbHVtbixcbn0pID0+IHtcblx0Y29uc3Qgc2xvdENvdW50ID0gTWF0aC5mbG9vcig2MCAvIHNsb3REdXJhdGlvbk1pbnV0ZXMpXG5cdGNvbnN0IGNlbGxPZmZzZXRzID0gQXJyYXkuZnJvbShcblx0XHR7IGxlbmd0aDogc2xvdENvdW50IH0sXG5cdFx0KF8sIGkpID0+IGkgKiBzbG90RHVyYXRpb25NaW51dGVzXG5cdClcblx0Y29uc3QgaGFzU3ViSG91clNsb3RzID0gY2VsbE9mZnNldHMubGVuZ3RoID4gMVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGZsZXgtY29sIGZsZXgtMSBpdGVtcy1jZW50ZXIgbWluLXctMjAganVzdGlmeS1jZW50ZXIgYmctYmFja2dyb3VuZCByZWxhdGl2ZScsXG5cdFx0XHRcdGlzTGFzdENvbHVtbiA/ICdib3JkZXItci0wJyA6ICdib3JkZXItcicsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGtleXMuY29udGFpbmVyLnZlcnRpY2FsLmNvbChpZCl9XG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgc2xvdHMgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLWZ1bGwgcmVsYXRpdmUgZ3JpZFwiXG5cdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0Z3JpZFRlbXBsYXRlUm93czogYHJlcGVhdCgke2RheXMubGVuZ3RofSwgbWlubWF4KDAsIDFmcikpYCxcblx0XHRcdFx0fX1cblx0XHRcdD5cblx0XHRcdFx0e2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblxuXHRcdFx0XHRcdGlmIChyZW5kZXJDZWxsKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBpc1RpbWVHdXR0ZXIgPSBpZCA9PT0ga2V5cy5jb2wudGltZVxuXHRcdFx0XHRcdFx0Y29uc3QgdGVzdElkID0gaXNUaW1lR3V0dGVyXG5cdFx0XHRcdFx0XHRcdD8ga2V5cy5jZWxsLnZlcnRpY2FsVGltZShob3VyU3RyKVxuXHRcdFx0XHRcdFx0XHQ6IGtleXMuY2VsbC52ZXJ0aWNhbChkYXksIGhvdXJTdHIsICcwMCcsIHJlc291cmNlSWQpXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLWgtWzYwcHhdIGJvcmRlci1iIGJvcmRlci1yXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLWhvdXI9e2lzVGltZUd1dHRlciA/IGhvdXJTdHIgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIGhvdXJTdHIpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckNlbGwoZGF5KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBtaW4taC1bNjBweF1cIlxuXHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIGhvdXJTdHIpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7Y2VsbE9mZnNldHMubWFwKChtaW51dGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBtbSA9IFN0cmluZyhtaW51dGUpLnBhZFN0YXJ0KDIsICcwJylcblx0XHRcdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBrZXlzLmNlbGwudmVydGljYWwoZGF5LCBob3VyU3RyLCBtbSwgcmVzb3VyY2VJZClcblxuXHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgZmxleC0xIG1pbi1oLTAgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWIgYm9yZGVyLXItMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aGFzU3ViSG91clNsb3RzICYmICdib3JkZXItZGFzaGVkJ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk9e2hhc1N1YkhvdXJTbG90cyA/IGRheS5taW51dGUobWludXRlKSA6IGRheX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyPXtkYXkuaG91cigpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShpZCwgZGF5SW5kZXgsIG1tKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0bWludXRlPXtoYXNTdWJIb3VyU2xvdHMgPyBtaW51dGUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9IC8vIEV2ZW50cyBhcmUgcmVuZGVyZWQgaW4gYSBzZXBhcmF0ZSBsYXllclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG91bGRSZW5kZXJFdmVudHM9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblxuXHRcdFx0XHR7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuXHRcdFx0XHR7IW5vRXZlbnRzICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkRXZlbnRzTGF5ZXJcblx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuY29udGFpbmVyLmV2ZW50c0xheWVyKCd2ZXJ0aWNhbCcsIGlkKX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZENvbCA9IG1lbW8oXG5cdE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuKSBhcyB0eXBlb2YgTm9NZW1vVmVydGljYWxHcmlkQ29sXG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEN1cnJlbnRUaW1lSW5kaWNhdG9yIH0gZnJvbSAnQC9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3InXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHMge1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdGRheXM6IERheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcblx0cmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdHJlc291cmNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuXHRjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheXMsIGdyaWRUeXBlLCByZXNvdXJjZUlkIH0pXG5cdGNvbnN0IHJhbmdlU3RhcnQgPSBkYXlzLmF0KDApXG5cdGNvbnN0IHJhbmdlRW5kID0gZGF5cy5hdCgtMSk/LmFkZCgxLCBncmlkVHlwZSlcblx0Ly8gT25seSBzaG93IHRoZSBcIm5vd1wiIGxpbmUgaW4gaG91ci1yZXNvbHV0aW9uIGdyaWRzLiBJbiBkYXktcmVzb2x1dGlvblxuXHQvLyB2ZXJ0aWNhbCB2aWV3cyAocmVzb3VyY2UgbW9udGgsIHJlc291cmNlIHdlZWsgZGFpbHkpIGEgc3ViLWRheSBwZXJjZW50YWdlXG5cdC8vIGxpbmUgaXMgbWVhbmluZ2xlc3MsIHNvIHN1cHByZXNzIGl0IOKAlCBtaXJyb3JzIHRoZSBob3Jpem9udGFsIGV2ZW50cyBsYXllci5cblx0Y29uc3Qgc2hvd05vd0xpbmUgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmIEJvb2xlYW4ocmFuZ2VTdGFydCAmJiByYW5nZUVuZClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0PlxuXHRcdFx0e3Nob3dOb3dMaW5lICYmIHJhbmdlU3RhcnQgJiYgcmFuZ2VFbmQgJiYgKFxuXHRcdFx0XHQ8Q3VycmVudFRpbWVJbmRpY2F0b3Jcblx0XHRcdFx0XHRyYW5nZUVuZD17cmFuZ2VFbmR9XG5cdFx0XHRcdFx0cmFuZ2VTdGFydD17cmFuZ2VTdGFydH1cblx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKT8udG9JU09TdHJpbmcoKX0tJHtyZXNvdXJjZUlkID8/ICduby1yZXNvdXJjZSd9YFxuXHRcdFx0XHRjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShldmVudEtleSwgJ3dyYXBwZXInKX1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9JWAsXG5cdFx0XHRcdFx0XHRcdGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbigncG9pbnRlci1ldmVudHMtYXV0bycsIHtcblx0XHRcdFx0XHRcdFx0XHQnWyZfcF06dGV4dC1bMTBweF0gWyZfcF06bXQtMCc6IGlzU2hvcnRFdmVudCxcblx0XHRcdFx0XHRcdFx0fSl9XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnRJZD17ZXZlbnRLZXl9XG5cdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXIpXG4iLAogICAgImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGZpbHRlckV2ZW50c0J5UmVzb3VyY2UgfSBmcm9tICdAL2xpYi91dGlscy9ldmVudC11dGlscydcbmltcG9ydCB7XG5cdGdldFBvc2l0aW9uZWREYXlFdmVudHMsXG5cdHR5cGUgUG9zaXRpb25lZEV2ZW50LFxufSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEV2ZW50c0ZvclJlc291cmNlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgZmlyc3QgPSBkYXlzLmF0KDApXG5cdGNvbnN0IGxhc3QgPSBkYXlzLmF0KC0xKVxuXHRjb25zdCBkYXlTdGFydCA9IGZpcnN0Py5zdGFydE9mKCdkYXknKVxuXHRjb25zdCBkYXlFbmQgPSBsYXN0Py5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoIWRheVN0YXJ0IHx8ICFkYXlFbmQpIHJldHVybiBbXVxuXG5cdFx0bGV0IGRheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRkYXlFdmVudHMgPSBmaWx0ZXJFdmVudHNCeVJlc291cmNlKFxuXHRcdFx0XHRkYXlFdmVudHMsXG5cdFx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Ly8gVmVydGljYWwgZ3JpZHMgKERheS9XZWVrL1Jlc291cmNlIFZlcnRpY2FsKSBuZXZlciByZW5kZXIgYWxsLWRheSBldmVudHNcblx0XHQvLyBhcyB0aG9zZSBhcmUgaGFuZGxlZCBieSB0aGUgYWxsLWRheS1yb3cgb3IgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHRpbWUgZ3JpZC5cblx0XHRyZXR1cm4gZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHR9LCBbXG5cdFx0ZGF5U3RhcnQsXG5cdFx0ZGF5RW5kLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRdKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQb3NpdGlvbmVkRXZlbnRbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZ3JpZFR5cGUsIGV2ZW50c10pXG5cblx0cmV0dXJuIHRvZGF5RXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMge1xuXHRkYXlzOiBEYXlqc1tdXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgfCAnbWludXRlJ1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2hvdXInLFxuXHRldmVudHMsXG59OiBHZXRQb3NpdGlvbmVkRGF5RXZlbnRzUGFyYW1zKTogUG9zaXRpb25lZEV2ZW50W10gPT4ge1xuXHQvLyBGaWx0ZXIgb3V0IGFsbC1kYXkgZXZlbnRzIGFuZCBzb3J0IGJ5IHN0YXJ0IHRpbWVcblx0Y29uc3Qgc29ydGVkRXZlbnRzID0gZXZlbnRzXG5cdFx0LmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHRcdC50b1NvcnRlZCgoYSwgYikgPT4gYS5zdGFydC5kaWZmKGIuc3RhcnQpKVxuXG5cdGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHQvLyBEZXRlcm1pbmUgZ3JpZCBib3VuZGFyaWVzIGFuZCBtZXRyaWNzXG5cdC8vIFVzZSBleHBsaWNpdCBzdGFydE9mIHRvIGVuc3VyZSB3ZSBhcmUgYW5jaG9yZWQgdG8gdGhlIGdyaWQgdW5pdCBib3VuZGFyaWVzXG5cdC8vIFRoaXMgcHJldmVudHMgb2Zmc2V0cyBpZiB0aGUgZ3JpZCBkYXlzIGFyZSBub3Qgbm9ybWFsaXplZFxuXHRjb25zdCBncmlkU3RhcnQgPSBkYXlzLmF0KDApIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IERheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gQ29tcHV0ZSB0b3AvaGVpZ2h0IHBlcmNlbnRhZ2VzIGZvciBhbiBldmVudCwgY2xhbXBlZCB0byBncmlkOyBudWxsIGlmIG91dHNpZGUuXG5cdGNvbnN0IGNvbXB1dGVUb3BIZWlnaHQgPSAoXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0KTogeyB0b3A6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB8IG51bGwgPT4ge1xuXHRcdGxldCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5kaWZmKGdyaWRTdGFydCwgZ3JpZFR5cGUsIHRydWUpXG5cdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdGlmIChpc0Rpc2NyZXRlKSB7XG5cdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkgZW5kVGltZSA9IHN0YXJ0VGltZSArIDFcblx0XHR9XG5cdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRpZiAoZW5kVGltZSA+IHRvdGFsVW5pdHMpIGVuZFRpbWUgPSB0b3RhbFVuaXRzXG5cdFx0Y29uc3QgZHVyYXRpb24gPSBNYXRoLm1heCgwLCBlbmRUaW1lIC0gc3RhcnRUaW1lKVxuXHRcdGlmIChkdXJhdGlvbiA9PT0gMCkgcmV0dXJuIG51bGxcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDAsXG5cdFx0XHRoZWlnaHQ6IChkdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwLFxuXHRcdH1cblx0fVxuXG5cdC8vIE1heCBjbHVzdGVyIG9mZnNldCBieSBldmVudCBjb3VudCAoMiBldmVudHMg4oaSIDI1JSwgZXRjLilcblx0Y29uc3QgbWF4T2Zmc2V0QnlDb3VudCA9IChuOiBudW1iZXIpID0+XG5cdFx0biA9PT0gMiA/IDI1IDogbiA9PT0gMyA/IDUwIDogbiA9PT0gNCA/IDYwIDogNzBcblxuXHQvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIGNvbXB1dGUgcG9zaXRpb25zXG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuXHRcdFx0Y29uc3QgcG9zID0gY29tcHV0ZVRvcEhlaWdodChldmVudClcblx0XHRcdGlmICghcG9zKSBjb250aW51ZVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goeyAuLi5ldmVudCwgbGVmdDogMCwgd2lkdGg6IDEwMCwgLi4ucG9zIH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyDigJQgbGF5ZXJlZCBwb3NpdGlvbmluZy4gTG9uZ2VzdCBkdXJhdGlvbiBmaXJzdCwgdGllLWJyZWFrXG5cdFx0Ly8gYnkgZWFybGllc3Qgc3RhcnQuXG5cdFx0Y29uc3Qgc29ydGVkQ2x1c3RlciA9IFsuLi5jbHVzdGVyXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0XHRjb25zdCBkdXJEaWZmID1cblx0XHRcdFx0Yi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJykgLSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuXHRcdFx0cmV0dXJuIGR1ckRpZmYgIT09IDAgPyBkdXJEaWZmIDogYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0fSlcblxuXHRcdGNvbnN0IG4gPSBzb3J0ZWRDbHVzdGVyLmxlbmd0aFxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gbiA+IDEgPyBtYXhPZmZzZXRCeUNvdW50KG4pIC8gKG4gLSAxKSA6IDBcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBldmVudCA9IHNvcnRlZENsdXN0ZXJbaV1cblx0XHRcdGNvbnN0IHBvcyA9IGNvbXB1dGVUb3BIZWlnaHQoZXZlbnQpXG5cdFx0XHRpZiAoIXBvcykgY29udGludWVcblx0XHRcdC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoOyBsYXRlciBldmVudHMgYXJlIG9mZnNldC5cblx0XHRcdGNvbnN0IGxlZnQgPSBpID09PSAwID8gMCA6IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0Li4ucG9zLFxuXHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHR3aWR0aDogMTAwIC0gbGVmdCxcblx0XHRcdFx0ekluZGV4OiBpICsgMSxcblx0XHRcdH0pXG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJQcm9wcyB7XG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG5cdGV4cGFuZEFsbERheVJvdz86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93LCBleHBhbmRBbGxEYXlSb3cgPSBmYWxzZSB9KSA9PiB7XG5cdGNvbnN0IHsgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoXG5cdFx0KHN0YXRlKSA9PiAoe1xuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcjogc3RhdGUuc3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0YXRlLnZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0fSlcblx0KVxuXHRjb25zdCBUb3RhbFdpZHRoQ2xhc3MgPSAnbWluLXctZnVsbCB3LWZpdCdcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRleHBhbmRBbGxEYXlSb3cgJiYgJ2ZsZXggaC1mdWxsIGZsZXgtY29sJyxcblx0XHRcdFx0c3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjEgYmctYmFja2dyb3VuZCcsIC8vIFotaW5kZXggYWJvdmUgdGhlIGxlZnQgc3RpY2t5IHJlc291cmNlIGNvbHVtblxuXHRcdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC0xMiBib3JkZXItYicsIFRvdGFsV2lkdGhDbGFzcywgY2xhc3Nlcz8uaGVhZGVyKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvZGl2PlxuXHRcdFx0ey8qIEFsbC1kYXkgcm93ICovfVxuXHRcdFx0e2FsbERheVJvdyAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggbWluLWgtMTInLFxuXHRcdFx0XHRcdFx0VG90YWxXaWR0aENsYXNzLFxuXHRcdFx0XHRcdFx0ZXhwYW5kQWxsRGF5Um93ICYmICdmbGV4LTEgb3ZlcmZsb3ctaGlkZGVuJyxcblx0XHRcdFx0XHRcdGNsYXNzZXM/LmFsbERheVxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWFsbC1kYXlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FsbERheVJvd31cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXJcbilcbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgY2FsY3VsYXRlQnVzaW5lc3NIb3Vyc1JhbmdlIH0gZnJvbSAnLi9idXNpbmVzcy1ob3VycydcblxuaW50ZXJmYWNlIEdldFZpZXdIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlOiBEYXlqc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycz86IGJvb2xlYW5cblx0LyoqXG5cdCAqIEZvciB2aWV3cyB3aXRoIG11bHRpcGxlIGRheXMgKGxpa2UgV2Vla1ZpZXcpLCB3ZSBtaWdodCB3YW50IHRvIHNob3dcblx0ICogdGhlIHVuaW9uIG9mIGFsbCBidXNpbmVzcyBob3VycyBhY3Jvc3MgdGhvc2UgZGF5cy5cblx0ICovXG5cdGFsbERhdGVzPzogRGF5anNbXVxuXHQvKipcblx0ICogT3B0aW9uYWwgYWRkaXRpb25hbCBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9ucyAoZS5nLiwgZnJvbSByZXNvdXJjZXMpLlxuXHQgKiBUaGVzZSB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZSBnbG9iYWwgYnVzaW5lc3NIb3VycyB3aGVuIGNhbGN1bGF0aW5nIHRoZSB2aXNpYmxlIHJhbmdlLlxuXHQgKi9cblx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzPzogKEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW10pW11cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGxpc3Qgb2YgaG91cnMgdG8gZGlzcGxheSBpbiB0aGUgY2FsZW5kYXIgdmlldy5cbiAqIElmIGhpZGVOb25CdXNpbmVzc0hvdXJzIGlzIHRydWUsIGl0IGZpbHRlcnMgdGhlIGhvdXJzIGJhc2VkIG9uIGJ1c2luZXNzSG91cnMgY29uZmlndXJhdGlvbi5cbiAqIEZvciBtdWx0aXBsZSBkYXRlcywgaXQgdGFrZXMgdGhlIGVhcmxpZXN0IHN0YXJ0IGFuZCBsYXRlc3QgZW5kIGFjcm9zcyBhbGwgZGF0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0YWxsRGF0ZXMgPSBbcmVmZXJlbmNlRGF0ZV0sXG5cdHJlc291cmNlQnVzaW5lc3NIb3VycyA9IFtdLFxufTogR2V0Vmlld0hvdXJzT3B0aW9ucyk6IERheWpzW10ge1xuXHRjb25zdCBob3VycyA9IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZSB9KVxuXG5cdGNvbnN0IGhhc0J1c2luZXNzSG91cnNDb25maWcgPVxuXHRcdCEhYnVzaW5lc3NIb3VycyB8fCByZXNvdXJjZUJ1c2luZXNzSG91cnMubGVuZ3RoID4gMFxuXHRjb25zdCBzaG91bGRGaWx0ZXJCeUJ1c2luZXNzSG91cnMgPVxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzICYmIGhhc0J1c2luZXNzSG91cnNDb25maWdcblxuXHRpZiAoIXNob3VsZEZpbHRlckJ5QnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0Y29uc3QgeyBtaW5TdGFydCwgbWF4RW5kLCBoYXNCdXNpbmVzc0hvdXJzIH0gPSBjYWxjdWxhdGVCdXNpbmVzc0hvdXJzUmFuZ2Uoe1xuXHRcdGFsbERhdGVzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHR9KVxuXG5cdGlmICghaGFzQnVzaW5lc3NIb3VycykgcmV0dXJuIGhvdXJzXG5cblx0aWYgKG1pblN0YXJ0ID49IG1heEVuZCkgcmV0dXJuIFtdXG5cblx0cmV0dXJuIGhvdXJzLmZpbHRlcigoaCkgPT4ge1xuXHRcdGNvbnN0IGhvdXIgPSBoLmhvdXIoKVxuXHRcdHJldHVybiBob3VyID49IG1pblN0YXJ0ICYmIGhvdXIgPCBtYXhFbmRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQWxsRGF5Um93IH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktcm93J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUtleSwgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQsIGJ1c2luZXNzSG91cnMsIGhpZGVOb25CdXNpbmVzc0hvdXJzLCBzbG90RHVyYXRpb24gfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCB0b2RheSA9IGlzVG9kYXkoY3VycmVudERhdGUpXG5cdGNvbnN0IGhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHR9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiBrZXlzLmNvbC50aW1lLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGJvcmRlci1yLTAnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17ZGF0ZX0gLz5cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHRjb25zdCBjb2x1bW5zID0ge1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUpLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiAndy1mdWxsJyxcblx0XHRcdFx0Ym9keTogJ3ctZnVsbCcsXG5cdFx0XHRcdGFsbERheTogJ3ctZnVsbCcsXG5cdFx0XHR9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCBjb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBmbGV4LTEganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIG1pbi1oLTEyJ31cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJkYXktdmlldy1oZWFkZXJcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgc206dGV4dC14bCcsXG5cdFx0XHRcdFx0XHR0b2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17Z2V0RGF5S2V5KGN1cnJlbnREYXRlKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ2RkZGQsIExMJyl9XG5cdFx0XHRcdFx0e3RvZGF5ICYmIChcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBnZXRNb250aFdlZWtzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla3MgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcblx0XHRbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuXHQpXG5cblx0Y29uc3Qgcm93cyA9IHdlZWtzLm1hcCgoZGF5cywgd2Vla0luZGV4KSA9PiAoe1xuXHRcdGlkOiBrZXlzLmxpc3RLZXkoJ3dlZWsnLCB3ZWVrSW5kZXgpLFxuXHRcdGNvbHVtbnM6IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSksXG5cdFx0XHRkYXksXG5cdFx0XHRjbGFzc05hbWU6ICd3LWF1dG8nLFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VTY3JvbGxUb1RpbWUgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC91c2Utc2Nyb2xsLXRvLXRpbWUnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyJ1xuaW1wb3J0IHtcblx0SG9yaXpvbnRhbEdyaWRSb3csXG5cdHR5cGUgSG9yaXpvbnRhbEdyaWRSb3dQcm9wcyxcbn0gZnJvbSAnLi9ob3Jpem9udGFsLWdyaWQtcm93J1xuXG5pbnRlcmZhY2UgSG9yaXpvbnRhbEdyaWRQcm9wcyB7XG5cdHJvd3M6IEhvcml6b250YWxHcmlkUm93UHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRjbGFzc2VzPzogeyBoZWFkZXI/OiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBIb3Jpem9udGFsR3JpZDogUmVhY3QuRkM8SG9yaXpvbnRhbEdyaWRQcm9wcz4gPSAoe1xuXHRyb3dzLFxuXHRjaGlsZHJlbixcblx0Y2xhc3Nlcyxcblx0YWxsRGF5OiB0b3BMZXZlbEFsbERheSxcblx0Z3JpZFR5cGUsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRkYXlOdW1iZXJIZWlnaHQsXG59KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNjcm9sbFRpbWUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3Qgdmlld3BvcnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG5cdGNvbnN0IGlzUmVzb3VyY2VDYWxlbmRhciA9IHZhcmlhbnQgPT09ICdyZXNvdXJjZSdcblx0Y29uc3QgaXNSZWd1bGFyQ2FsZW5kYXIgPSAhaXNSZXNvdXJjZUNhbGVuZGFyXG5cdGNvbnN0IGNhbkhvcml6b250YWxTY3JvbGxUb0hvdXIgPSBncmlkVHlwZSA9PT0gJ2hvdXInICYmIGlzUmVzb3VyY2VDYWxlbmRhclxuXG5cdHVzZVNjcm9sbFRvVGltZSh7XG5cdFx0dmlld3BvcnRSZWYsXG5cdFx0c2Nyb2xsVGltZSxcblx0XHRlbmFibGVkOiBjYW5Ib3Jpem9udGFsU2Nyb2xsVG9Ib3VyLFxuXHRcdHNjcm9sbEtleTogYCR7dmlld30tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGF4aXM6ICdob3Jpem9udGFsJyxcblx0fSlcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIGNsYXNzTmFtZT17Y2xhc3Nlcz8uaGVhZGVyfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyPlxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJoLWZ1bGwgZmxleCBmbGV4LWNvbFwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1jb250YWluZXJcIlxuXHRcdD5cblx0XHRcdHsvKipcblx0XHRcdCAqIGhlYWRlciByb3cgaXMgcmVuZGVyZWQgb3V0c2lkZSBzY3JvbGwgYXJlYSBmb3IgcmVndWxhciBjYWxlbmRhclxuXHRcdFx0ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbignaC1mdWxsJywgaXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17e1xuXHRcdFx0XHRcdGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyxcblx0XHRcdFx0XHRyZWY6IHZpZXdwb3J0UmVmLFxuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyoqXG5cdFx0XHRcdCAqIGhlYWRlciByb3cgZm9yIHJlc291cmNlIGNhbGVuZGFyIGluc2lkZSBzY3JvbGwgYXJlYVxuXHRcdFx0XHQgKiAqL31cblx0XHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSB3LWZpdCcsIGNsYXNzZXM/LmJvZHkpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiaG9yaXpvbnRhbC1ncmlkLWJvZHlcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGZsZXggZmxleC1jb2wgZmxleC0xXCJcblx0XHRcdFx0XHRcdGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3Jvd3MubWFwKChyb3csIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRcdFx0XHRcdGFsbERheT17cm93LmFsbERheSA/PyB0b3BMZXZlbEFsbERheX1cblx0XHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQ9e2RheU51bWJlckhlaWdodH1cblx0XHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdFx0aXNMYXN0Um93PXtpbmRleCA9PT0gcm93cy5sZW5ndGggLSAxfVxuXHRcdFx0XHRcdFx0XHRcdGtleT17cm93LmlkfVxuXHRcdFx0XHRcdFx0XHRcdHZhcmlhbnQ9e3ZhcmlhbnR9XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnJvd31cblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPlxuXHRcdFx0PC9TY3JvbGxBcmVhPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBNb250aEhlYWRlclByb3BzIHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBNb250aEhlYWRlcjogUmVhY3QuRkM8TW9udGhIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuXHRjb25zdCB7IGZpcnN0RGF5T2ZXZWVrLCBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lLCBjdXJyZW50RGF0ZSB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gUmVvcmRlciB3ZWVrIGRheXMgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcblx0Y29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCB3LWZ1bGwnLFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcblx0XHQ+XG5cdFx0XHR7d2Vla0RheXMubWFwKCh3ZWVrRGF5LCBpbmRleCkgPT4gKFxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleC0xIG1pbi13LTBcIlxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci53ZWVrZGF5KCdtb250aCcsIHdlZWtEYXkuZm9ybWF0KCdkZGQnKSl9XG5cdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRrZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGNhcGl0YWxpemUgdHJ1bmNhdGUgdy1mdWxsIGJsb2NrXCI+XG5cdFx0XHRcdFx0XHR7d2Vla0RheS5mb3JtYXQoJ2RkZCcpfVxuXHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQpKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IGdldFZpZXdIb3VycyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvdmlldy1ob3VycydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgQ0VMTF9DTEFTUyA9ICdmbGV4LTEgbWluLXctMCdcbmNvbnN0IExFRlRfQ09MX1dJRFRIID0gJ3ctMTAgc206dy0xNiBtaW4tdy0xMCBzbTptaW4tdy0xNiBtYXgtdy0xMCBzbTptYXgtdy0xNidcblxuZXhwb3J0IGNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZGVuRGF5cyxcblx0XHRzbG90RHVyYXRpb24sXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHZpc2libGVEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0aGlkZGVuRGF5c1xuXHRcdFx0XHQ/IHdlZWtEYXlzLmZpbHRlcigoZGF5KSA9PiAhaGlkZGVuRGF5cy5oYXMoZGF5LmRheSgpKSlcblx0XHRcdFx0OiB3ZWVrRGF5cyxcblx0XHRbd2Vla0RheXMsIGhpZGRlbkRheXNdXG5cdClcblxuXHRjb25zdCBob3VycyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlLFxuXHRcdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0YWxsRGF0ZXM6IHdlZWtEYXlzLFxuXHRcdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXNdXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6IGBzaHJpbmstMCAke0xFRlRfQ09MX1dJRFRIfSBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wYCxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Ly8gR2VuZXJhdGUgd2VlayBkYXlzIOKAlCBlYWNoIGNvbHVtbiBnZXRzIGl0cyBvd24gaG91cnMgb24gdGhlIGNvcnJlY3QgZGF0ZVxuXHRjb25zdCBjb2x1bW5zID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0cmV0dXJuIHZpc2libGVEYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGtleXMuY29sLmRheShkYXkpLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdH0pLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzLCBidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3VycywgdmlzaWJsZURheXMubWFwXSlcblxuXHRjb25zdCBjc3NWYXJzID0ge1xuXHRcdCctLXZpc2libGUtZGF5cyc6IHZpc2libGVEYXlzLmxlbmd0aCxcblx0fSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzXG5cblx0Y29uc3QgV2lkdGhDbGFzcyA9ICd3LWZ1bGwnXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogQ0VMTF9DTEFTUywgc3BhY2VyOiBMRUZUX0NPTF9XSURUSCB9fVxuXHRcdFx0XHRcdGRheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHQvPlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17e1xuXHRcdFx0XHRoZWFkZXI6IGAke1dpZHRoQ2xhc3N9IGgtMThgLFxuXHRcdFx0XHRhbGxEYXk6IFdpZHRoQ2xhc3MsXG5cdFx0XHRcdGJvZHk6IFdpZHRoQ2xhc3MsXG5cdFx0XHR9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHRzbG90RHVyYXRpb25NaW51dGVzPXtzbG90RHVyYXRpb259XG5cdFx0XHRzdHlsZT17Y3NzVmFyc31cblx0XHRcdHZhcmlhbnQ9XCJyZWd1bGFyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT17J2ZsZXggaC1mdWxsIGZsZXgtMSd9IGRhdGEtdGVzdGlkPVwid2Vlay12aWV3LWhlYWRlclwiPlxuXHRcdFx0XHR7LyogQ29ybmVyIGNlbGwgd2l0aCB3ZWVrIG51bWJlciAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgaC1mdWxsIHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItciBwLTIgZmxleFwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLXctMCB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXhzIHRydW5jYXRlIHctZnVsbCB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHR7dCgnd2VlaycpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdHJ1bmNhdGUgdy1mdWxsIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS53ZWVrKCl9XG5cdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7dmlzaWJsZURheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdG9kYXkgPSBpc1RvZGF5KGRheSlcblx0XHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmRheShkYXkpXG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIG1pbi13LTAgZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWNlbnRlciBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCB3LTIwIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIud2Vla2RheSgnd2VlaycsIGRheS5mb3JtYXQoJ2RkZGQnKSl9XG5cdFx0XHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIDAuMDV9XG5cdFx0XHRcdFx0XHRcdGtleT17a2V5fVxuXHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZWN0RGF0ZShkYXkpXG5cdFx0XHRcdFx0XHRcdFx0b3BlbkV2ZW50Rm9ybSh7IHN0YXJ0OiBkYXkgfSlcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbktleT17a2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbSB0cnVuY2F0ZSB3LWZ1bGxcIj5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdteC1hdXRvIG10LTEgZmxleCBoLTYgdy02IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cycsXG5cdFx0XHRcdFx0XHRcdFx0XHR0b2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ0QnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcywgeyB0eXBlIERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5S2V5LCBnZXRXZWVrRGF5cywgaXNUb2RheSB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuY29uc3QgRVZFTlRfRE9UX0NPTE9SUyA9IFsnYmctcHJpbWFyeScsICdiZy1ibHVlLTUwMCcsICdiZy1ncmVlbi01MDAnXVxuY29uc3QgREFZU19JTl9NSU5JX0NBTEVOREFSID0gNDJcblxuaW50ZXJmYWNlIE1vbnRoRGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdG5hbWU6IHN0cmluZ1xuXHRldmVudENvdW50OiBudW1iZXJcblx0bW9udGhLZXk6IHN0cmluZ1xufVxuXG5pbnRlcmZhY2UgRGF5RGF0YSB7XG5cdGRhdGU6IERheWpzXG5cdGRheUtleTogc3RyaW5nXG5cdGlzSW5DdXJyZW50TW9udGg6IGJvb2xlYW5cblx0aXNUb2RheTogYm9vbGVhblxuXHRpc1NlbGVjdGVkOiBib29sZWFuXG5cdGV2ZW50Q291bnQ6IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgWWVhclZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdGV2ZW50cyxcblx0XHRzZXRWaWV3LFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHR0LFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG5cdGNvbnN0IHdlZWtkYXlIZWFkZXJzID0gZ2V0V2Vla0RheXMoZGF5anMoKSwgZmlyc3REYXlPZldlZWspLm1hcCgoZCkgPT4gKHtcblx0XHRpZDogZC5kYXkoKS50b1N0cmluZygpLFxuXHRcdGxhYmVsOiBkLmZvcm1hdCgnZGQnKSxcblx0fSkpXG5cblx0Y29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcblx0XHRcdFx0LnllYXIoY3VycmVudFllYXIpXG5cdFx0XHRcdC5tb250aChtb250aEluZGV4KVxuXHRcdFx0XHQuc3RhcnRPZignbW9udGgnKVxuXHRcdFx0Y29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG5cdFx0XHRcdChldmVudCkgPT5cblx0XHRcdFx0XHRldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuXHRcdFx0KVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBtb250aERhdGUsXG5cdFx0XHRcdG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG5cdFx0XHRcdG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IERheWpzKTogRGF5RGF0YVtdID0+IHtcblx0XHRjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuXHRcdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG5cdFx0XHRjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5Jylcblx0XHRcdGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG5cdFx0XHRjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRlOiBkYXlEYXRlLFxuXHRcdFx0XHRkYXlLZXk6IGdldERheUtleShkYXlEYXRlKSxcblx0XHRcdFx0aXNJbkN1cnJlbnRNb250aDogZGF5RGF0ZS5tb250aCgpID09PSBtb250aERhdGUubW9udGgoKSxcblx0XHRcdFx0aXNUb2RheTogaXNUb2RheShkYXlEYXRlKSxcblx0XHRcdFx0aXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcblx0XHRcdFx0ZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuXHRcdFx0fVxuXHRcdH0pXG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcblx0XHRkYXRlOiBEYXlqcyxcblx0XHR2aWV3OiAnbW9udGgnIHwgJ2RheScsXG5cdFx0ZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG5cdCkgPT4ge1xuXHRcdGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuXHRcdHNlbGVjdERhdGUoZGF0ZSlcblx0XHRzZXRWaWV3KHZpZXcpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcblx0XHRyZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcblx0fVxuXG5cdGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGJhc2VDbGFzcyA9XG5cdFx0XHQncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuXHRcdGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcblx0XHRcdD8gJydcblx0XHRcdDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuXHRcdGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuXHRcdFx0PyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG5cdFx0XHQ6ICcnXG5cdFx0Y29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG5cdFx0XHRkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuXHRcdGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cblx0XHRcdGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cblx0XHRyZXR1cm4gY24oXG5cdFx0XHRiYXNlQ2xhc3MsXG5cdFx0XHRvdXRzaWRlTW9udGhDbGFzcyxcblx0XHRcdHRvZGF5Q2xhc3MsXG5cdFx0XHRzZWxlY3RlZENsYXNzLFxuXHRcdFx0aGFzRXZlbnRzQ2xhc3Ncblx0XHQpXG5cdH1cblxuXHRjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG5cdFx0cmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG5cdH1cblxuXHRjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuXHRjb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG5cdFx0aWYgKGV2ZW50Q291bnQgPT09IDApIHtcblx0XHRcdHJldHVybiAnJ1xuXHRcdH1cblx0XHRyZXR1cm4gZ2V0RXZlbnRDb3VudExhYmVsKGV2ZW50Q291bnQpXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImgtZnVsbFwiIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCI+XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgYXV0by1yb3dzLWZyIGdyaWQtY29scy0xIGdhcC00IHAtNCBzbTpncmlkLWNvbHMtMiBsZzpncmlkLWNvbHMtM1wiXG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcblx0XHRcdD5cblx0XHRcdFx0e21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcblx0XHRcdFx0XHRjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci55ZWFyLm1vbnRoKG1vbnRoLm1vbnRoS2V5KX1cblx0XHRcdFx0XHRcdFx0a2V5PXttb250aC5tb250aEtleX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1iLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCJcblx0XHRcdFx0XHRcdFx0XHRkZWxheT17YW5pbWF0aW9uRGVsYXl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ21vbnRoJywgbW9udGgubW9udGhLZXkpfVxuXHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleSgnbW9udGgnLCBtb250aC5tb250aEtleSl9XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtIGhvdmVyOnVuZGVybGluZSBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSwgJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvRGF0ZShtb250aC5kYXRlLCAnbW9udGgnKX1cblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHttb250aC5uYW1lfVxuXHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXG5cdFx0XHRcdFx0XHRcdFx0e21vbnRoLmV2ZW50Q291bnQgPiAwICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2tleXMuaGVhZGVyLnllYXIubW9udGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9udGgubW9udGhLZXksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2NvdW50J1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7Z2V0RXZlbnRDb3VudExhYmVsKG1vbnRoLmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZWRTZWN0aW9uPlxuXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy03IGdhcC1weCB0ZXh0LVswLjZyZW1dXCJcblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIueWVhci5tb250aChtb250aC5tb250aEtleSwgJ21pbmknKX1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHt3ZWVrZGF5SGVhZGVycy5tYXAoKGRheSkgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ2hlYWRlcicsIG1vbnRoLm1vbnRoS2V5LCBkYXkuaWQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5c0luTW9udGgubWFwKChkYXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRheVRlc3RJZCA9IGtleXMuaGVhZGVyLnllYXIuZGF5KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtb250aC5kYXRlLmZvcm1hdCgnWVlZWS1NTScpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXkuZGF5S2V5XG5cdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNFdmVudHMgPSBkYXkuZXZlbnRDb3VudCA+IDBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb3VudCA9IE1hdGgubWluKGRheS5ldmVudENvdW50LCAzKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvbG9ycyA9IEVWRU5UX0RPVF9DT0xPUlMuc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGVEb3RDb3VudFxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZGF0ZS5kYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2hhc0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtcHgnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5ICYmICdib3R0b20tcHgnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt2aXNpYmxlRG90Q29sb3JzLm1hcCgoZG90Q29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90Q29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkb3RDb2xvcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxJbmZvLFxuXHREYXRlUmFuZ2UsXG5cdFJlbmRlckN1cnJlbnRUaW1lSW5kaWNhdG9yUHJvcHMsXG5cdFNsb3REdXJhdGlvbixcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbEluZm8pID0+IHZvaWRcblx0aXNDZWxsRGlzYWJsZWQ/OiAoaW5mbzogQ2VsbEluZm8pID0+IGJvb2xlYW5cblx0b25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogRGF5anMsIHJhbmdlOiBEYXRlUmFuZ2UpID0+IHZvaWRcblx0bG9jYWxlPzogc3RyaW5nXG5cdHRpbWV6b25lPzogc3RyaW5nXG5cdGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGV2ZW50U3BhY2luZz86IG51bWJlclxuXHRldmVudEhlaWdodD86IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyPzogYm9vbGVhblxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nXG5cdGhlYWRlckNvbXBvbmVudD86IFJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuXHRoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuXHRyZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdE5vZGVcblx0Ly8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxuXHR0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcj86IChcblx0XHRwcm9wczogUmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wc1xuXHQpID0+IFJlYWN0Tm9kZVxuXHRyZW5kZXJIb3VyPzogKGRhdGU6IERheWpzKSA9PiBSZWFjdE5vZGVcblx0aGlkZU5vbkJ1c2luZXNzSG91cnM/OiBib29sZWFuXG5cdGhpZGVFeHBvcnRCdXR0b24/OiBib29sZWFuXG5cdGhpZGRlbkRheXM/OiBTZXQ8bnVtYmVyPlxuXHRzbG90RHVyYXRpb24/OiBTbG90RHVyYXRpb25cblx0c2Nyb2xsVGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG5cdGNoaWxkcmVuLFxuXHRldmVudHMgPSBbXSxcblx0Zmlyc3REYXlPZldlZWsgPSAwLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRyZW5kZXJFdmVudCxcblx0b25FdmVudENsaWNrLFxuXHRvbkNlbGxDbGljayxcblx0aXNDZWxsRGlzYWJsZWQsXG5cdG9uVmlld0NoYW5nZSxcblx0b25FdmVudEFkZCxcblx0b25FdmVudFVwZGF0ZSxcblx0b25FdmVudERlbGV0ZSxcblx0b25EYXRlQ2hhbmdlLFxuXHRsb2NhbGUsXG5cdHRpbWV6b25lLFxuXHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRkaXNhYmxlRXZlbnRDbGljayxcblx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRkYXlNYXhFdmVudHMsXG5cdGV2ZW50U3BhY2luZyA9IEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRldmVudEhlaWdodCA9IEVWRU5UX0JBUl9IRUlHSFQsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRidXNpbmVzc0hvdXJzLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdHRyYW5zbGF0aW9ucyxcblx0dHJhbnNsYXRvcixcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRyZW5kZXJDdXJyZW50VGltZUluZGljYXRvcixcblx0cmVuZGVySG91cixcblx0aGlkZU5vbkJ1c2luZXNzSG91cnMgPSBmYWxzZSxcblx0aGlkZUV4cG9ydEJ1dHRvbiA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHRzbG90RHVyYXRpb24gPSA2MCxcblx0c2Nyb2xsVGltZSxcbn0pID0+IHtcblx0Ly8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcblx0Y29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG5cdFx0ZXZlbnRzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGluaXRpYWxWaWV3LFxuXHRcdGluaXRpYWxEYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0b25FdmVudEFkZCxcblx0XHRvbkV2ZW50VXBkYXRlLFxuXHRcdG9uRXZlbnREZWxldGUsXG5cdFx0b25EYXRlQ2hhbmdlLFxuXHRcdG9uVmlld0NoYW5nZSxcblx0XHRsb2NhbGUsXG5cdFx0dGltZXpvbmUsXG5cdFx0dHJhbnNsYXRpb25zLFxuXHRcdHRyYW5zbGF0b3IsXG5cdH0pXG5cblx0Y29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuXHRjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0XHRpZiAob25FdmVudENsaWNrKSB7XG5cdFx0XHRcdG9uRXZlbnRDbGljayhldmVudClcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVkaXRFdmVudChldmVudClcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG5cdClcblxuXHRjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcblx0XHQoaW5mbzogQ2VsbEluZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRpc0NlbGxEaXNhYmxlZCxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdGhhbmRsZUV2ZW50Q2xpY2ssXG5cdFx0XHRoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRpc0NlbGxEaXNhYmxlZCxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0ZXZlbnRIZWlnaHQsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0cmVuZGVyQ3VycmVudFRpbWVJbmRpY2F0b3IsXG5cdFx0XHRyZW5kZXJIb3VyLFxuXHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRoaWRlRXhwb3J0QnV0dG9uLFxuXHRcdFx0aGlkZGVuRGF5cyxcblx0XHRcdHNsb3REdXJhdGlvbixcblx0XHRcdHNjcm9sbFRpbWUsXG5cdFx0XVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtRGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS1kaWFsb2cnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IE1vbnRoVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLXZpZXcnXG5pbXBvcnQgeyBXZWVrVmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IHsgWWVhclZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldydcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG4vLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZHVwbGljYXRlc1xuaW1wb3J0ICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHtcblx0SWxhbXlDYWxlbmRhclByb3BFdmVudCxcblx0SWxhbXlDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlLCB0b0hpZGRlbkRheXNTZXQgfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ2FsZW5kYXJDb250ZW50OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3LCBkYXlNYXhFdmVudHMgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwiaWxhbXktY2FsZW5kYXJcIj5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xIHNocmluay0wXCIgLz5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBtaW4taC0wIGZsZXgtMVwiXG5cdFx0XHRcdFx0ZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG5cdFx0XHRcdFx0dHJhbnNpdGlvbktleT17dmlld31cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyIGgtZnVsbCB3LWZ1bGxcIiBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWJvZHlcIj5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBJbGFteUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcblx0dmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRoaWRlTm9uQnVzaW5lc3NIb3VycyA9IGZhbHNlLFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxDYWxlbmRhclByb3ZpZGVyXG5cdFx0XHRkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cblx0XHRcdGV2ZW50SGVpZ2h0PXtldmVudEhlaWdodH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oZXZlbnRzKX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycz17aGlkZU5vbkJ1c2luZXNzSG91cnN9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDYWxlbmRhckNvbnRlbnQgLz5cblx0XHQ8L0NhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcblx0LyoqXG5cdCAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuXHQgKi9cblx0ZGF5czogRGF5anNbXSB8IERheWpzW11bXVxuXHQvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuXHQgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcblx0ICovXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0LyoqXG5cdCAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuXHQgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuXHQgKi9cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBib2R5Pzogc3RyaW5nOyBzY3JvbGw/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmcgfVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnZGF5Jyxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzZXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShkYXkpXG5cdFx0Y29uc3QgcmVmRGF5ID0gaXNBcnJheSA/IGRheVswXSA6IGRheVxuXHRcdHJldHVybiB7XG5cdFx0XHRpZDogcmVmRGF5ID8ga2V5cy5jb2wuZGF5KHJlZkRheSkgOiAnZGF5LWNvbC11bmtub3duJyxcblx0XHRcdGRheTogaXNBcnJheSA/IHVuZGVmaW5lZCA6IGRheSxcblx0XHRcdGRheXM6IGlzQXJyYXkgPyBkYXkgOiB1bmRlZmluZWQsXG5cdFx0XHRjbGFzc05hbWU6IGNsYXNzZXM/LmNlbGwsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9XG5cdH0pXG5cblx0Y29uc3Qgcm93cyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiByZXNvdXJjZS5pZCxcblx0XHR0aXRsZTogcmVzb3VyY2UudGl0bGUsXG5cdFx0cmVzb3VyY2U6IHJlc291cmNlLFxuXHRcdGNvbHVtbnMsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXtjbGFzc2VzfVxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXswfVxuXHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0cm93cz17cm93c31cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9Ib3Jpem9udGFsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBIb3VyTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvaG91ci1sYWJlbC9ob3VyLWxhYmVsJ1xuaW1wb3J0IGRheWpzLCB7IHR5cGUgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFRpbWVIZWFkZXJSb3dQcm9wcyB7XG5cdGhvdXJzOiBEYXlqc1tdXG5cdHZpZXc6ICd3ZWVrJyB8ICdkYXknXG5cdC8vIFBlci1pdGVtIGFuaW1hdGlvbiBkZWxheS4gQ2FsbGVycyBwYXNzIGRpZmZlcmVudCBzdGVwIHZhbHVlcyBkZXBlbmRpbmcgb25cblx0Ly8gdGhlIGxpc3QgbGVuZ3RoIChlLmcuIDAuMDA1IGZvciBhIHdlZWsgb2YgaG91cnMsIDAuMDUgZm9yIGEgc2luZ2xlIGRheSkuXG5cdGRlbGF5U3RlcDogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBUaW1lSGVhZGVyUm93OiBSZWFjdC5GQzxUaW1lSGVhZGVyUm93UHJvcHM+ID0gKHtcblx0aG91cnMsXG5cdHZpZXcsXG5cdGRlbGF5U3RlcCxcbn0pID0+IChcblx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cblx0XHR7aG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBpc05vd0hvdXIgPSBjb2wuaXNTYW1lKGRheWpzKCksICdob3VyJylcblx0XHRcdGNvbnN0IGhvdXJTdHIgPSBjb2wuZm9ybWF0KCdISCcpXG5cdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoY29sLCBpbmRleClcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J21pbi13LTIwIGZsZXgtMSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRpc05vd0hvdXIgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCBmb250LW1lZGl1bSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtaG91cj17aG91clN0cn1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIucmVzb3VyY2UudGltZUxhYmVsKHZpZXcsIGhvdXJTdHIpfVxuXHRcdFx0XHRcdGRlbGF5PXtpbmRleCAqIGRlbGF5U3RlcH1cblx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleShrZXksICdhbmltYXRlZCcpfVxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxIb3VyTGFiZWwgZGF0ZT17Y29sfSAvPlxuXHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdClcblx0XHR9KX1cblx0PC9kaXY+XG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IFRpbWVIZWFkZXJSb3cgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvdGltZS1oZWFkZXItcm93J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgYnVzaW5lc3NIb3VycywgaGlkZU5vbkJ1c2luZXNzSG91cnMsIHJlc291cmNlcyB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0Vmlld0hvdXJzKHtcblx0XHRyZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGFsbERhdGVzOiBbY3VycmVudERhdGVdLFxuXHRcdHJlc291cmNlQnVzaW5lc3NIb3VyczogcmVzb3VyY2VzXG5cdFx0XHQubWFwKChyKSA9PiByLmJ1c2luZXNzSG91cnMpXG5cdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIChCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdKVtdLFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkXG5cdFx0XHRjbGFzc2VzPXt7XG5cdFx0XHRcdGhlYWRlcjogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRib2R5OiAnbWluLXctZnVsbCcsXG5cdFx0XHRcdGNlbGw6ICdtaW4tdy0yMCBmbGV4LTEnLFxuXHRcdFx0fX1cblx0XHRcdGRheXM9e2RheUhvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMjAgc206dy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgcHgtMSBtaW4tdy0wXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0PFRpbWVIZWFkZXJSb3cgZGVsYXlTdGVwPXswLjA1fSBob3Vycz17ZGF5SG91cnN9IHZpZXc9XCJkYXlcIiAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmVydGljYWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0Y3VycmVudERhdGUsXG5cdFx0cmVzb3VyY2VzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0c2xvdER1cmF0aW9uLFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBob3VycyA9IGdldFZpZXdIb3Vycyh7XG5cdFx0cmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRhbGxEYXRlczogW2N1cnJlbnREYXRlXSxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnM6IHJlc291cmNlc1xuXHRcdFx0Lm1hcCgocikgPT4gci5idXNpbmVzc0hvdXJzKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKSBhcyAoQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXSlbXSxcblx0fSlcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wudGltZSxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHQ8SG91ckxhYmVsIGRhdGU9e2RhdGV9IC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5kYXkoY3VycmVudERhdGUsIHJlc291cmNlLmlkKSxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRyZXNvdXJjZSxcblx0XHRkYXlzOiBob3Vycyxcblx0XHRkYXk6IGN1cnJlbnREYXRlLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0YWxsRGF5Um93PXtcblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTIwIGJvcmRlci1yIScgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17W2N1cnJlbnREYXRlXX1cblx0XHRcdFx0XHRcdFx0a2V5PXtrZXlzLmFsbERheVJvdyhyZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgYm9keTogJ3ctZnVsbCcsIGhlYWRlcjogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLWRheVwiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0c2xvdER1cmF0aW9uTWludXRlcz17c2xvdER1cmF0aW9ufVxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTIwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgncmVzb3VyY2UtY2VsbCcsIHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlRGF5VmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlRGF5VmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VEYXlIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZWRTZWN0aW9uIH0gZnJvbSAnQC9jb21wb25lbnRzL2FuaW1hdGlvbnMvYW5pbWF0ZWQtc2VjdGlvbidcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRNb250aERheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIC0gZGF5cyBvZiB0aGUgbW9udGhcblx0Y29uc3QgbW9udGhEYXlzID0gdXNlTWVtbzxEYXlqc1tdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1vbnRoRGF5cyhjdXJyZW50RGF0ZSlcblx0fSwgW2N1cnJlbnREYXRlXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXttb250aERheXN9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRydW5jYXRlIHB4LTEgbWluLXctMFwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVkU2VjdGlvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy0yMCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgZm9udC1tZWRpdW1cIj57ZGF5LmZvcm1hdCgnRCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGtleXMgfSBmcm9tICdAL2xpYi91dGlscy9rZXlzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHN0YXJ0T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblx0Y29uc3QgZGF5c0luTW9udGggPSBBcnJheS5mcm9tKFxuXHRcdHsgbGVuZ3RoOiBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpIH0sXG5cdFx0KF8sIGkpID0+IHN0YXJ0T2ZNb250aC5hZGQoaSwgJ2RheScpXG5cdClcblxuXHRjb25zdCBmaXJzdENvbCA9IHtcblx0XHRpZDoga2V5cy5jb2wuZGF0ZSxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRjbGFzc05hbWU6XG5cdFx0XHQnc2hyaW5rLTAgdy0xNiBtaW4tdy0xNiBtYXgtdy0xNiBzdGlja3kgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMCBib3JkZXItci0wJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IERheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBrZXlzLmNvbC5yZXNvdXJjZSgnbW9udGgnLCByZXNvdXJjZS5pZCksXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogZGF5c0luTW9udGgsXG5cdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsJywgYm9keTogJ3ctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLXZlcnRpY2FsLWdyaWRcIlxuXHRcdD5cblx0XHRcdHsvKiBIZWFkZXIgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT17J2ZsZXggYm9yZGVyLWIgaC0xMiBmbGV4LTEnfVxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInJlc291cmNlLW1vbnRoLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgYm9yZGVyLXIgdy0xNiBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm1pbi13LTIwIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2tleXMubGlzdEtleSgncmVzb3VyY2UtY2VsbCcsIHJlc291cmNlLmlkKX1cblx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpKX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKSB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRyZXNvdXJjZXMsXG5cdFx0d2Vla1ZpZXdHcmFudWxhcml0eSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGhpZGVOb25CdXNpbmVzc0hvdXJzLFxuXHRcdGhpZGRlbkRheXMsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgaXNIb3VybHkgPSB3ZWVrVmlld0dyYW51bGFyaXR5ID09PSAnaG91cmx5J1xuXG5cdGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuXHRcdFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG5cdClcblxuXHRjb25zdCB2aXNpYmxlRGF5cyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdGhpZGRlbkRheXNcblx0XHRcdFx0PyB3ZWVrRGF5cy5maWx0ZXIoKGRheSkgPT4gIWhpZGRlbkRheXMuaGFzKGRheS5kYXkoKSkpXG5cdFx0XHRcdDogd2Vla0RheXMsXG5cdFx0W3dlZWtEYXlzLCBoaWRkZW5EYXlzXVxuXHQpXG5cblx0Y29uc3QgcmVzb3VyY2VCdXNpbmVzc0hvdXJzID0gdXNlTWVtbyhcblx0XHQoKSA9PiByZXNvdXJjZXMuZmxhdE1hcCgocikgPT4gKHIuYnVzaW5lc3NIb3VycyA/IFtyLmJ1c2luZXNzSG91cnNdIDogW10pKSxcblx0XHRbcmVzb3VyY2VzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRpc0hvdXJseSxcblx0XHRyZXNvdXJjZXMsXG5cdFx0d2Vla0RheXMsXG5cdFx0dmlzaWJsZURheXMsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyUHJvcHMge1xuXHRkYXlzOiBEYXlqc1tdXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VXZWVrSG9yaXpvbnRhbERheUhlYWRlclByb3BzXG4+ID0gKHsgZGF5cyB9KSA9PiB7XG5cdGNvbnN0IHsgd2Vla1ZpZXdHcmFudWxhcml0eSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBpc0hvdXJseSA9IHdlZWtWaWV3R3JhbnVsYXJpdHkgPT09ICdob3VybHknXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0e2RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHRvZGF5ID0gaXNUb2RheShkYXkpXG5cdFx0XHRcdGNvbnN0IGtleSA9IGtleXMuaGVhZGVyLndlZWsuZGF5KGRheSlcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleC0xIGZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIG1pbi13LTIwJyxcblx0XHRcdFx0XHRcdFx0dG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtrZXlzLmhlYWRlci5yZXNvdXJjZS53ZWVrRGF5fVxuXHRcdFx0XHRcdFx0ZGVsYXk9e2luZGV4ICogMC4wNX1cblx0XHRcdFx0XHRcdGtleT17a2V5cy5saXN0S2V5KGtleSwgJ2FuaW1hdGVkJyl9XG5cdFx0XHRcdFx0XHR0cmFuc2l0aW9uS2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnbW90aW9uJyl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdGlzSG91cmx5ID8gJ3N0aWNreSBsZWZ0LTEvMicgOiAndy1mdWxsIHRleHQtY2VudGVyJ1xuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgdy1mdWxsXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ0QnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0FuaW1hdGVkU2VjdGlvbj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZ2V0Vmlld0hvdXJzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy92aWV3LWhvdXJzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF0YSgpIHtcblx0Y29uc3Qge1xuXHRcdGlzSG91cmx5LFxuXHRcdHdlZWtEYXlzLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXG5cdGNvbnN0IHdlZWtIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdGlmICghaXNIb3VybHkpIHJldHVybiBbXVxuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT5cblx0XHRcdGdldFZpZXdIb3Vycyh7XG5cdFx0XHRcdHJlZmVyZW5jZURhdGU6IGRheSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdHJlc291cmNlQnVzaW5lc3NIb3Vycyxcblx0XHRcdH0pXG5cdFx0KVxuXHR9LCBbXG5cdFx0aXNIb3VybHksXG5cdFx0d2Vla0RheXMsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRoaWRlTm9uQnVzaW5lc3NIb3Vycyxcblx0XHRyZXNvdXJjZUJ1c2luZXNzSG91cnMsXG5cdF0pXG5cblx0cmV0dXJuIHsgd2Vla0hvdXJzIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgVGltZUhlYWRlclJvdyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy90aW1lLWhlYWRlci1yb3cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEgfSBmcm9tICcuLi91c2UtcmVzb3VyY2Utd2Vlay12aWV3LWRhdGEnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwtZGF5LWhlYWRlcidcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla0hvcml6b250YWxEYXRhIH0gZnJvbSAnLi91c2UtcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLWRhdGEnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IHsgaXNIb3VybHksIHdlZWtEYXlzIH0gPSB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSgpXG5cdGNvbnN0IHsgd2Vla0hvdXJzIH0gPSB1c2VSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF0YSgpXG5cblx0cmV0dXJuIChcblx0XHQ8UmVzb3VyY2VFdmVudEdyaWRcblx0XHRcdGNsYXNzZXM9e3tcblx0XHRcdFx0aGVhZGVyOiBjbihpc0hvdXJseSA/ICdoLTI0JyA6ICdoLTEyJywgJ21pbi13LWZ1bGwnKSxcblx0XHRcdFx0Ym9keTogJ21pbi13LWZ1bGwnLFxuXHRcdFx0XHRjZWxsOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdH19XG5cdFx0XHRkYXlzPXtpc0hvdXJseSA/IHdlZWtIb3VycyA6IHdlZWtEYXlzfVxuXHRcdFx0Z3JpZFR5cGU9e2lzSG91cmx5ID8gJ2hvdXInIDogJ2RheSd9XG5cdFx0PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTIwIHNtOnctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRydW5jYXRlIHB4LTEgbWluLXctMFwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsRGF5SGVhZGVyIGRheXM9e3dlZWtEYXlzfSAvPlxuXHRcdFx0XHR7aXNIb3VybHkgJiYgKFxuXHRcdFx0XHRcdDxUaW1lSGVhZGVyUm93XG5cdFx0XHRcdFx0XHRkZWxheVN0ZXA9ezAuMDA1fVxuXHRcdFx0XHRcdFx0aG91cnM9e3dlZWtIb3Vycy5mbGF0KCl9XG5cdFx0XHRcdFx0XHR2aWV3PVwid2Vla1wiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvUmVzb3VyY2VFdmVudEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IEhvdXJMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3VyLWxhYmVsL2hvdXItbGFiZWwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZVdlZWtWaWV3RGF0YSB9IGZyb20gJy4uL3VzZS1yZXNvdXJjZS13ZWVrLXZpZXctZGF0YSdcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLWRheS1oZWFkZXInXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLXJlc291cmNlLWhlYWRlcidcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZlcnRpY2FsRGF0YSB9IGZyb20gJy4vdXNlLXJlc291cmNlLXdlZWstdmVydGljYWwtZGF0YSdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBpc0hvdXJseSwgcmVzb3VyY2VzLCB3ZWVrRGF5cywgdmlzaWJsZURheXMgfSA9XG5cdFx0dXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXHRjb25zdCB7IGhvdXJzLCBjb2x1bW5zIH0gPSB1c2VSZXNvdXJjZVdlZWtWZXJ0aWNhbERhdGEoKVxuXHRjb25zdCB7IHNsb3REdXJhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IGZpcnN0Q29sID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0aWQ6IGlzSG91cmx5ID8ga2V5cy5jb2wudGltZSA6IGtleXMuY29sLmRhdGUsXG5cdFx0XHRkYXlzOiBpc0hvdXJseSA/IGhvdXJzIDogd2Vla0RheXMsXG5cdFx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRcdGNsYXNzTmFtZTpcblx0XHRcdFx0J3Nocmluay0wIHctMTYgbWluLXctMTYgbWF4LXctMTYgc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjAgYm9yZGVyLXItMCcsXG5cdFx0XHRncmlkVHlwZTogaXNIb3VybHkgPyAoJ2hvdXInIGFzIGNvbnN0KSA6ICgnZGF5JyBhcyBjb25zdCksXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBEYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e2lzSG91cmx5ID8gKFxuXHRcdFx0XHRcdFx0PEhvdXJMYWJlbCBkYXRlPXtkYXRlfSAvPlxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj57ZGF0ZS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpLFxuXHRcdH0pLFxuXHRcdFtob3VycywgaXNIb3VybHksIHdlZWtEYXlzXVxuXHQpXG5cblx0Y29uc3QgYWxsRGF5Um93ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFpc0hvdXJseSkgcmV0dXJuIHVuZGVmaW5lZFxuXHRcdHJldHVybiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsXCI+XG5cdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTIwIGZsZXgtMSBib3JkZXItciEnIH19XG5cdFx0XHRcdFx0XHRkYXlzPXt2aXNpYmxlRGF5c31cblx0XHRcdFx0XHRcdGtleT17a2V5cy5hbGxEYXlSb3cocmVzb3VyY2UuaWQpfVxuXHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpXG5cdH0sIFtpc0hvdXJseSwgcmVzb3VyY2VzLCB2aXNpYmxlRGF5c10pXG5cblx0cmV0dXJuIChcblx0XHQ8VmVydGljYWxHcmlkXG5cdFx0XHRhbGxEYXlSb3c9e2FsbERheVJvd31cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiBpc0hvdXJseSA/ICdoLTI0JyA6ICdoLTEyJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT17aXNIb3VybHkgPyAnaG91cicgOiAnZGF5J31cblx0XHRcdHNsb3REdXJhdGlvbk1pbnV0ZXM9e3Nsb3REdXJhdGlvbn1cblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBmbGV4IGZsZXgtY29sXCI+XG5cdFx0XHRcdDxSZXNvdXJjZVdlZWtWZXJ0aWNhbFJlc291cmNlSGVhZGVyXG5cdFx0XHRcdFx0cmVzb3VyY2VzPXtyZXNvdXJjZXN9XG5cdFx0XHRcdFx0dmlzaWJsZURheXM9e3Zpc2libGVEYXlzfVxuXHRcdFx0XHQvPlxuXHRcdFx0XHR7aXNIb3VybHkgJiYgPFJlc291cmNlV2Vla1ZlcnRpY2FsRGF5SGVhZGVyIGNvbHVtbnM9e2NvbHVtbnN9IC8+fVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlZFNlY3Rpb24gfSBmcm9tICdAL2NvbXBvbmVudHMvYW5pbWF0aW9ucy9hbmltYXRlZC1zZWN0aW9uJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBEYXlqcyB9IGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGlzVG9kYXkgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsga2V5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2tleXMnXG5cbmludGVyZmFjZSBSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzIHtcblx0Y29sdW1uczogQXJyYXk8eyBkYXk/OiBEYXlqczsgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciB9PlxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWxEYXlIZWFkZXI6IFJlYWN0LkZDPFxuXHRSZXNvdXJjZVdlZWtWZXJ0aWNhbERheUhlYWRlclByb3BzXG4+ID0gKHsgY29sdW1ucyB9KSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNocmluay0wIHctMTYgYm9yZGVyLXIgYm9yZGVyLWIgei0yMCBiZy1iYWNrZ3JvdW5kIHN0aWNreSBsZWZ0LTBcIj5cblx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgZm9udC1tZWRpdW1cIj5cblx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdHtjb2x1bW5zLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBkYXkgPSBjb2wuZGF5XG5cdFx0XHRcdGlmICghZGF5KSByZXR1cm4gbnVsbFxuXHRcdFx0XHRjb25zdCB0b2RheSA9IGlzVG9kYXkoZGF5KVxuXHRcdFx0XHRjb25zdCBrZXkgPSBrZXlzLmhlYWRlci53ZWVrLmhvdXIoZGF5LCBjb2wucmVzb3VyY2VJZCA/PyAnJylcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxBbmltYXRlZFNlY3Rpb25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdHRvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17a2V5cy5oZWFkZXIucmVzb3VyY2UudGltZUxhYmVsKFxuXHRcdFx0XHRcdFx0XHQnd2VlaycsXG5cdFx0XHRcdFx0XHRcdGRheS5mb3JtYXQoJ0hIJylcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRkZWxheT17aW5kZXggKiAwLjA1fVxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoa2V5LCAnYW5pbWF0ZWQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e2tleXMubGlzdEtleShrZXksICdtb3Rpb24nKX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdHJ1bmNhdGUgdy1mdWxsIHRleHQtY2VudGVyXCI+XG5cdFx0XHRcdFx0XHRcdHtkYXkuZm9ybWF0KCdkZGQnKX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnRCcpfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIHsgRGF5anMgfSBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcblxuaW50ZXJmYWNlIFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJQcm9wcyB7XG5cdHJlc291cmNlczogUmVzb3VyY2VbXVxuXHR2aXNpYmxlRGF5czogRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmVydGljYWxSZXNvdXJjZUhlYWRlcjogUmVhY3QuRkM8XG5cdFJlc291cmNlV2Vla1ZlcnRpY2FsUmVzb3VyY2VIZWFkZXJQcm9wc1xuPiA9ICh7IHJlc291cmNlcyB9KSA9PiB7XG5cdGNvbnN0IHsgd2Vla1ZpZXdHcmFudWxhcml0eSwgdCwgY3VycmVudERhdGUgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KClcblx0Y29uc3QgaXNIb3VybHkgPSB3ZWVrVmlld0dyYW51bGFyaXR5ID09PSAnaG91cmx5J1xuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTJcIj5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1jZW50ZXIgbWluLXctMCcsXG5cdFx0XHRcdFx0XHRpc0hvdXJseSA/ICdqdXN0aWZ5LWVuZCcgOiAnanVzdGlmeS1jZW50ZXIgYm9yZGVyLWInXG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlIHctZnVsbFwiPnt0KCd3ZWVrJyl9PC9zcGFuPlxuXHRcdFx0XHRcdHshaXNIb3VybHkgJiYgKFxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHRydW5jYXRlIHctZnVsbFwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUud2VlaygpfVxuXHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IHtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8UmVzb3VyY2VDZWxsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtaW4tdy0yMCBmbGV4LTEgYm9yZGVyLWJcIlxuXHRcdFx0XHRcdFx0a2V5PXtrZXlzLmxpc3RLZXkoJ3Jlc291cmNlLWNlbGwnLCByZXNvdXJjZS5pZCl9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdCdzdGlja3kgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZScsXG5cdFx0XHRcdFx0XHRcdFx0aXNIb3VybHkgPyAnbGVmdC0xLzQnIDogJ2xlZnQtMSdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3Jlc291cmNlLnRpdGxlfVxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9SZXNvdXJjZUNlbGw+XG5cdFx0XHRcdClcblx0XHRcdH0pfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBnZXRWaWV3SG91cnMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL3ZpZXctaG91cnMnXG5pbXBvcnQgdHlwZSB7IERheWpzIH0gZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBrZXlzIH0gZnJvbSAnQC9saWIvdXRpbHMva2V5cydcbmltcG9ydCB7IHVzZVJlc291cmNlV2Vla1ZpZXdEYXRhIH0gZnJvbSAnLi4vdXNlLXJlc291cmNlLXdlZWstdmlldy1kYXRhJ1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVzb3VyY2VXZWVrVmVydGljYWxEYXRhKCkge1xuXHRjb25zdCB7XG5cdFx0aXNIb3VybHksXG5cdFx0cmVzb3VyY2VzLFxuXHRcdHdlZWtEYXlzLFxuXHRcdHZpc2libGVEYXlzLFxuXHRcdGN1cnJlbnREYXRlLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHR9ID0gdXNlUmVzb3VyY2VXZWVrVmlld0RhdGEoKVxuXG5cdGNvbnN0IGdldEhvdXJzID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRhdGU6IERheWpzKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0Vmlld0hvdXJzKHtcblx0XHRcdFx0cmVmZXJlbmNlRGF0ZTogZGF0ZSxcblx0XHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdFx0aGlkZU5vbkJ1c2luZXNzSG91cnMsXG5cdFx0XHRcdGFsbERhdGVzOiB3ZWVrRGF5cyxcblx0XHRcdFx0cmVzb3VyY2VCdXNpbmVzc0hvdXJzLFxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtidXNpbmVzc0hvdXJzLCBoaWRlTm9uQnVzaW5lc3NIb3Vycywgd2Vla0RheXMsIHJlc291cmNlQnVzaW5lc3NIb3Vyc11cblx0KVxuXG5cdGNvbnN0IGhvdXJzID0gdXNlTWVtbygoKSA9PiBnZXRIb3VycyhjdXJyZW50RGF0ZSksIFtjdXJyZW50RGF0ZSwgZ2V0SG91cnNdKVxuXHRjb25zdCBob3VybHlDb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLmZsYXRNYXAoKHJlc291cmNlKSA9PlxuXHRcdFx0XHR2aXNpYmxlRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdFx0XHRpZDoga2V5cy5jb2wuZGF5KGRheSwgcmVzb3VyY2UuaWQpLFxuXHRcdFx0XHRcdGNsYXNzTmFtZTogJ21pbi13LTIwIGZsZXgtMScsXG5cdFx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdFx0cmVzb3VyY2UsXG5cdFx0XHRcdFx0ZGF5LFxuXHRcdFx0XHRcdGRheXM6IGdldEhvdXJzKGRheSksXG5cdFx0XHRcdFx0Z3JpZFR5cGU6ICdob3VyJyBhcyBjb25zdCxcblx0XHRcdFx0fSkpXG5cdFx0XHQpLFxuXHRcdFtyZXNvdXJjZXMsIHZpc2libGVEYXlzLCBnZXRIb3Vyc11cblx0KVxuXG5cdC8vIFVzZXMgYHdlZWtEYXlzYCAoYWxsIDcpIGludGVudGlvbmFsbHksIG5vdCBgdmlzaWJsZURheXNgLiBOb24tY29udGlndW91c1xuXHQvLyB2aXNpYmxlIGRheXMgd291bGQgYnJlYWsgbXVsdGktZGF5IGV2ZW50IHBvc2l0aW9uaW5nLCBzbyBgaGlkZGVuRGF5c2AgaXNcblx0Ly8gbm90IHN1cHBvcnRlZCBpbiBkYWlseSBncmFudWxhcml0eS5cblx0Y29uc3QgZGFpbHlDb2x1bW5zID0gdXNlTWVtbyhcblx0XHQoKSA9PlxuXHRcdFx0cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+ICh7XG5cdFx0XHRcdGlkOiBrZXlzLmNvbC5yZXNvdXJjZSgnd2VlaycsIHJlc291cmNlLmlkKSxcblx0XHRcdFx0Y2xhc3NOYW1lOiAnbWluLXctMjAgZmxleC0xJyxcblx0XHRcdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0XHRcdHJlc291cmNlSWQ6IHJlc291cmNlLmlkLFxuXHRcdFx0XHRyZXNvdXJjZSxcblx0XHRcdFx0ZGF5czogd2Vla0RheXMsXG5cdFx0XHRcdGdyaWRUeXBlOiAnZGF5JyBhcyBjb25zdCxcblx0XHRcdH0pKSxcblx0XHRbcmVzb3VyY2VzLCB3ZWVrRGF5c11cblx0KVxuXG5cdGNvbnN0IGNvbHVtbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRpZiAoaXNIb3VybHkpIHJldHVybiBob3VybHlDb2x1bW5zXG5cdFx0cmV0dXJuIGRhaWx5Q29sdW1uc1xuXHR9LCBbaXNIb3VybHksIGhvdXJseUNvbHVtbnMsIGRhaWx5Q29sdW1uc10pXG5cblx0cmV0dXJuIHsgaG91cnMsIGNvbHVtbnMgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlV2Vla0hvcml6b250YWwgfSBmcm9tICcuL2hvcml6b250YWwvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrVmVydGljYWwgfSBmcm9tICcuL3ZlcnRpY2FsL3Jlc291cmNlLXdlZWstdmVydGljYWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBvcmllbnRhdGlvbiB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKVxuXG5cdGlmIChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuXHRcdHJldHVybiA8UmVzb3VyY2VXZWVrVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFuaW1hdGVkU2VjdGlvbiB9IGZyb20gJ0AvY29tcG9uZW50cy9hbmltYXRpb25zL2FuaW1hdGVkLXNlY3Rpb24nXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IEV2ZW50Rm9ybURpYWxvZyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0tZGlhbG9nJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB7IFJlc291cmNlRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldydcbmltcG9ydCB7IFJlc291cmNlTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJCb2R5OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyB2aWV3IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgdmlld01hcDogUmVjb3JkPHN0cmluZywgUmVhY3QuUmVhY3ROb2RlPiA9IHtcblx0XHRtb250aDogPFJlc291cmNlTW9udGhWaWV3IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFJlc291cmNlV2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuXHRcdGRheTogPFJlc291cmNlRGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCJcblx0XHRcdGRhdGEtdGVzdGlkPVwiaWxhbXktcmVzb3VyY2UtY2FsZW5kYXJcIlxuXHRcdD5cblx0XHRcdDxIZWFkZXIgY2xhc3NOYW1lPVwicC0xXCIgLz5cblxuXHRcdFx0ey8qIENhbGVuZGFyIEJvZHkgd2l0aCBBbmltYXRlZFNlY3Rpb24gZm9yIHZpZXcgdHJhbnNpdGlvbnMgKi99XG5cdFx0XHQ8Q2FsZW5kYXJEbmRDb250ZXh0PlxuXHRcdFx0XHQ8QW5pbWF0ZWRTZWN0aW9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXSBAY29udGFpbmVyL2NhbGVuZGFyLWJvZHlcIlxuXHRcdFx0XHRcdGRpcmVjdGlvbj1cImhvcml6b250YWxcIlxuXHRcdFx0XHRcdHRyYW5zaXRpb25LZXk9e3ZpZXd9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImJvcmRlciBoLWZ1bGwgdy1mdWxsXCIgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1ib2R5XCI+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9BbmltYXRlZFNlY3Rpb24+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuXHRcdFx0PEV2ZW50Rm9ybURpYWxvZyAvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0RVZFTlRfQkFSX0hFSUdIVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlLCB0b0hpZGRlbkRheXNTZXQgfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuXG5leHBvcnQgY29uc3QgSWxhbXlSZXNvdXJjZUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcz4gPSAoe1xuXHRldmVudHMgPSBbXSxcblx0cmVzb3VyY2VzID0gW10sXG5cdGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuXHRkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0ZXZlbnRIZWlnaHQgPSBFVkVOVF9CQVJfSEVJR0hULFxuXHRoaWRkZW5EYXlzLFxuXHQuLi5wcm9wc1xufSkgPT4ge1xuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG5cdFx0XHRldmVudEhlaWdodD17ZXZlbnRIZWlnaHR9XG5cdFx0XHRldmVudFNwYWNpbmc9e2V2ZW50U3BhY2luZ31cblx0XHRcdGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oXG5cdFx0XHRcdGV2ZW50c1xuXHRcdFx0KX1cblx0XHRcdGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG5cdFx0XHRoaWRkZW5EYXlzPXt0b0hpZGRlbkRheXNTZXQoaGlkZGVuRGF5cyl9XG5cdFx0XHRpbml0aWFsRGF0ZT17c2FmZURhdGUoaW5pdGlhbERhdGUpfVxuXHRcdFx0aW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuXHRcdFx0cmVzb3VyY2VzPXtyZXNvdXJjZXN9XG5cdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxSZXNvdXJjZUNhbGVuZGFyQm9keSAvPlxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyPlxuXHQpXG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFFQSxnQkFBUyxlQ0ZULDBCQUNDLGFBRUEsc0JDRkQsZUFBUyxjQUNULGtCQUFTLHdCQ0RULHNCQUNBLDBDQUNBLDhDQUNBLCtDQUNBLDJDQUNBLGdEQUNBLHVDQUNBLHlDQUNBLG9DQUNBLHdDQUNBLDJDQWFBLElBQUksR0FFRSxHQUFnQyxDQUFDLEVBQVMsRUFBWSxJQUFpQixDQUM1RSxJQUFNLEVBQVEsRUFBVyxVQUduQixFQUFxQixFQUFhLEdBQUcsV0FDM0MsRUFBYSxHQUFHLFdBQWEsQ0FBQyxJQUFzQixDQUVuRCxPQURBLEdBQWtCLEVBQ1gsRUFBbUIsQ0FBUSxHQUluQyxJQUE4QixRQUF4QixFQUNzQixNQUF0QixHQUFnQixFQUV0QixTQUFTLENBQWUsQ0FDdkIsRUFDQSxFQUNjLENBQ2QsSUFBTSxFQUFNLEVBQTJCLElBQUksV0FBYSxHQUN4RCxHQUFJLENBQUMsRUFBSSxPQUFPLEVBRWhCLElBQU0sRUFBaUIsRUFDckIsR0FBRyxFQUFPLE9BQU8scUJBQXFCLEVBQUcsQ0FBRSxFQUMzQyxVQUFVLEVBQ1osR0FBSSxFQUFPLFVBQVUsSUFBTSxFQUMxQixPQUFPLEVBQU8sR0FBRyxFQUFJLEVBQUksRUFFMUIsT0FBTyxFQUtSLEVBQU0sUUFBVSxRQUFTLENBQUMsRUFBdUIsRUFBb0IsQ0FDcEUsSUFBTSxFQUFTLEVBQWdCLEtBQUssS0FBTSxFQUFNLENBQVEsRUFDeEQsT0FBTyxFQUFnQixLQUFNLENBQU0sR0FJcEMsRUFBTSxNQUFRLEdBSWYsR0FBTSxPQUFPLEVBQU8sRUFDcEIsR0FBTSxPQUFPLEVBQVUsRUFDdkIsR0FBTSxPQUFPLEVBQWEsRUFDMUIsR0FBTSxPQUFPLEVBQWMsRUFDM0IsR0FBTSxPQUFPLEVBQVMsRUFDdEIsR0FBTSxPQUFPLEVBQU0sRUFDbkIsR0FBTSxPQUFPLEVBQVEsRUFDckIsR0FBTSxPQUFPLEVBQUcsRUFDaEIsR0FBTSxPQUFPLEVBQVUsRUFDdkIsR0FBTSxPQUFPLEVBQWUsRUFDNUIsR0FBTSxPQUFPLEVBQWlCLEVBSzlCLElBQU0sR0FBcUIsSUFBSSxJQUFvQixDQUNsRCxPQUFRLEdBQThELEdBQ3JFLEdBQUcsQ0FDSixHQUtELE9BQU8sT0FBTyxHQUFvQixFQUFLLEVBS3ZDLElBQWUsS0M5RlIsSUFBTSxHQUF1QixFQUN2QixHQUFvQixHQUNwQixHQUFtQixHQUNuQixHQUF5QixFQUN6QixHQUNaLHlEQUVZLEdBQWlELENBQzdELE9BQVEsRUFDUixPQUFRLEVBQ1IsUUFBUyxFQUNULFVBQVcsRUFDWCxTQUFVLEVBQ1YsT0FBUSxFQUNSLFNBQVUsQ0FDWCxFRlZPLFNBQVMsQ0FBRSxJQUFJLEVBQXNCLENBQzNDLE9BQU8sR0FBUSxHQUFLLENBQU0sQ0FBQyxFQU9yQixJQUFNLEdBQWtCLENBQzlCLElBQzZCLENBQzdCLEdBQUksQ0FBQyxHQUFjLEVBQVcsU0FBVyxFQUFHLE9BQzVDLE9BQU8sSUFBSSxJQUFJLEVBQVcsSUFBSSxDQUFDLElBQVEsR0FBcUIsRUFBSSxDQUFDLEdBRzNELFNBQVMsRUFBUSxDQUN2QixFQUNvQixDQUNwQixHQUFJLElBQVMsT0FDWixPQUVELEdBQUksRUFBTSxRQUFRLENBQUksRUFDckIsT0FBTyxFQUVSLElBQU0sRUFBYSxFQUFNLENBQUksRUFDN0IsT0FBTyxFQUFXLFFBQVEsRUFBSSxFQUFhLE9BR3JDLElBQU0sR0FBVyxDQUN2QixFQUNBLElBQ2dCLENBQ2hCLElBQU0sRUFBUyxJQUFLLENBQUksRUFDeEIsUUFBVyxLQUFPLEVBQ2pCLE9BQU8sRUFBTyxHQUVmLE9BQU8sR0FpQkQsU0FBUyxFQU1mLENBQUMsRUFBeUMsQ0FDMUMsR0FBSSxDQUFDLEdBQVUsQ0FBQyxFQUFPLE9BQ3RCLE1BQU8sQ0FBQyxFQUdULE9BQU8sRUFBTyxJQUFJLENBQUMsSUFBVSxDQUM1QixNQUFPLElBQ0gsRUFDSCxNQUFPLEVBQU0sUUFBUSxFQUFNLEtBQUssRUFBSSxFQUFNLE1BQVEsRUFBTSxFQUFNLEtBQUssRUFDbkUsSUFBSyxFQUFNLFFBQVEsRUFBTSxHQUFHLEVBQUksRUFBTSxJQUFNLEVBQU0sRUFBTSxHQUFHLENBQzVELEVBQ0EsMkNEeERGLElBQU0sR0FBcUIsQ0FDMUIsT0FBUSxFQUFHLGdCQUEyRCxDQUNyRSxRQUFTLEVBQ1QsRUFBRyxJQUFjLGFBQWUsR0FBSyxFQUNyQyxFQUFHLElBQWMsV0FBYSxJQUFNLENBQ3JDLEdBQ0EsUUFBUyxFQUFHLFlBQWdDLENBQzNDLFFBQVMsRUFDVCxFQUFHLEVBQ0gsRUFBRyxFQUNILFdBQVksQ0FBRSxTQUFVLElBQUssS0FBTSxDQUFDLElBQUssRUFBRyxJQUFLLENBQUMsRUFBRyxPQUFNLENBQzVELEdBQ0EsS0FBTSxFQUFHLGdCQUEyRCxDQUNuRSxRQUFTLEVBQ1QsRUFBRyxJQUFjLGFBQWUsSUFBTSxFQUN0QyxFQUFHLElBQWMsV0FBYSxJQUFNLEVBQ3BDLFdBQVksQ0FBRSxTQUFVLElBQUssQ0FDOUIsRUFDRCxFQUVhLEVBQWtELEVBQzlELFdBQ0EsZ0JBQ0EsUUFBUSxFQUNSLFlBQ0EsWUFBWSxXQUNaLFNBQ0EsV0FDQSxjQUFlLEVBQ2YsU0FDRyxLQUVILEdBaUJFLEdBakJGLENBQWlCLEtBQUssT0FBdEIsU0FDQyxHQWVFLEdBQU8sSUFmVCxDQUNDLFFBQVEsVUFDUixVQUFXLEVBQUcsc0JBQXVCLENBQVMsRUFDOUMsT0FBUSxDQUFFLFFBQU8sV0FBVSxFQUMzQixjQUFhLEVBQ2IsS0FBSyxPQUNMLFFBQVEsU0FFUixPQUFRLEVBQ1IsU0FBVSxFQUNWLElBQUssRUFDTCxTQUFVLE1BQ04sRUFaTCxTQWNFLEdBUEksQ0FRSixFQUNELEVBR0gsRUFBZ0IsWUFBYyxrQklwRTlCLHFCQUNDLGtCQUNBLG9CQUNBLGtCQUNBLGdCQUNBLGlCQUNBLHVCQUdELGlCQUFTLGVBQVEsZUNkakIsZUFBUyw4QkFFVCxjQUFTLDJFQUtULElBQU0sR0FBaUIsR0FDdEIsOGJBQ0EsQ0FDQyxTQUFVLENBQ1QsUUFBUyxDQUNSLFFBQVMseURBQ1QsWUFDQyxvSkFDRCxRQUNDLHdJQUNELFVBQ0MsK0RBQ0QsTUFDQyx1RUFDRCxLQUFNLGlEQUNQLEVBQ0EsS0FBTSxDQUNMLFFBQVMsZ0NBQ1QsR0FBSSxnREFDSixHQUFJLHVDQUNKLEtBQU0sU0FDTixVQUFXLFNBQ1gsVUFBVyxTQUNaLENBQ0QsRUFDQSxnQkFBaUIsQ0FDaEIsUUFBUyxVQUNULEtBQU0sU0FDUCxDQUNELENBQ0QsRUFFQSxTQUFTLENBQU0sRUFDZCxZQUNBLFVBQ0EsT0FDQSxVQUFVLE1BQ1AsR0FJQSxDQUdILE9BQ0MsR0FIWSxFQUFVLEdBQU8sU0FHN0IsQ0FDQyxVQUFXLEVBQUcsR0FBZSxDQUFFLFVBQVMsT0FBTSxXQUFVLENBQUMsQ0FBQyxFQUMxRCxZQUFVLFlBQ04sRUFDTCxFQ3hERiwwQ0FDQSxnQkFBUywwRUFLVCxTQUFTLEVBQU0sS0FDWCxHQUNrRCxDQUNyRCxPQUFPLEdBQWlCLFFBQWpCLENBQXNCLFlBQVUsWUFBYSxFQUFPLEVBUzVELFNBQVMsRUFBWSxLQUNqQixHQUNvRCxDQUN2RCxPQUFPLEdBQWlCLFVBQWpCLENBQXdCLFlBQVUsbUJBQW9CLEVBQU8sRUFTckUsU0FBUyxFQUFhLEVBQ3JCLGVBQ0csR0FDcUQsQ0FDeEQsT0FDQyxHQUFpQixXQUFqQixDQUNDLFVBQVcsRUFDVix5SkFDQSxDQUNELEVBQ0EsWUFBVSxvQkFDTixFQUNMLEVBSUYsU0FBUyxFQUFhLEVBQ3JCLFlBQ0EsY0FDRyxHQUNxRCxDQUN4RCxPQUNDLEdBZ0JFLEdBaEJGLENBQWMsWUFBVSxnQkFBeEIsU0FnQkUsQ0FmRCxHQUFDLEdBQUQsRUFBZSxFQUNmLEdBYWtCLFdBYmxCLENBQ0MsVUFBVyxFQUNWLDBYQUNBLENBQ0QsRUFDQSxZQUFVLG9CQUNOLEVBTkwsU0FhRSxDQUxBLEVBQ0QsR0FHa0IsU0FIbEIsQ0FBdUIsVUFBVSxvV0FBakMsU0FHRSxDQUZELEdBQUMsR0FBRCxFQUFPLEVBQ1AsR0FBaUMsT0FBakMsQ0FBTSxVQUFVLFVBQWhCLGlCQUFpQyxHQUNoQyxHQUNELEdBQ0QsRUFJSixTQUFTLEVBQVksRUFBRyxlQUFjLEdBQXNDLENBQzNFLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVyxFQUFHLCtDQUFnRCxDQUFTLEVBQ3ZFLFlBQVUsbUJBQ04sRUFDTCxFQUlGLFNBQVMsRUFBWSxFQUFHLGVBQWMsR0FBc0MsQ0FDM0UsT0FDQyxHQUFDLE1BQUQsQ0FDQyxVQUFXLEVBQ1YseURBQ0EsQ0FDRCxFQUNBLFlBQVUsbUJBQ04sRUFDTCxFQUlGLFNBQVMsRUFBVyxFQUNuQixlQUNHLEdBQ21ELENBQ3RELE9BQ0MsR0FBaUIsU0FBakIsQ0FDQyxVQUFXLEVBQUcscUNBQXNDLENBQVMsRUFDN0QsWUFBVSxrQkFDTixFQUNMLEVBSUYsU0FBUyxFQUFpQixFQUN6QixlQUNHLEdBQ3lELENBQzVELE9BQ0MsR0FBaUIsZUFBakIsQ0FDQyxVQUFXLEVBQUcsZ0NBQWlDLENBQVMsRUFDeEQsWUFBVSx3QkFDTixFQUNMLEVDckhGLHFCQUFTLGVDQVQsd0JBQVMsZUErRUYsSUFBTSxHQUNaLEdBQStDLE1BQVMsRUNoRnpELHdCQUFTLGVBOEJGLElBQU0sR0FFVCxHQUF1RCxNQUFTLEVDL0JwRSxzQkFBUyxjQUFhLGVDRHRCLHNCQUFTLGVBQWEsY0FBVyxhQUFTLGVBQVEsZUNBbEQsZ0JBQVMsZUFlVCxJQUFNLEdBQWlCLENBQUMsSUFBbUIsQ0FDMUMsT0FBTyxJQUFJLEtBQ1YsS0FBSyxJQUNKLEVBQUUsS0FBSyxFQUNQLEVBQUUsTUFBTSxFQUNSLEVBQUUsS0FBSyxFQUNQLEVBQUUsS0FBSyxFQUNQLEVBQUUsT0FBTyxFQUNULEVBQUUsT0FBTyxFQUNULEVBQUUsWUFBWSxDQUNmLENBQ0QsR0FRSyxHQUFtQixDQUFDLEVBQVksSUFBNEIsQ0FDakUsT0FBTyxFQUNMLEtBQUssRUFBSyxlQUFlLENBQUMsRUFDMUIsTUFBTSxFQUFLLFlBQVksQ0FBQyxFQUN4QixLQUFLLEVBQUssV0FBVyxDQUFDLEVBQ3RCLEtBQUssRUFBSyxZQUFZLENBQUMsRUFDdkIsT0FBTyxFQUFLLGNBQWMsQ0FBQyxFQUMzQixPQUFPLEVBQUssY0FBYyxDQUFDLEVBQzNCLFlBQVksRUFBSyxtQkFBbUIsQ0FBQyxHQUczQixHQUFtQixDQUFDLElBQWtDLENBQ2xFLE9BQU8sUUFBUSxFQUFNLE9BQVMsRUFBTSxjQUFnQixFQUFNLEdBQUcsR0FPeEQsR0FBb0IsQ0FBQyxJQUFpQyxDQUMzRCxPQUFPLEVBQU0sS0FBTyxHQUFHLEVBQU0scUJBUXhCLEdBQXFCLENBQzFCLEVBQ0EsSUFDWSxDQUNaLElBQU0sRUFBWSxHQUFrQixDQUFXLEVBQ3pDLEVBQVEsRUFBTyxVQUNwQixDQUFDLElBQU0sR0FBa0IsQ0FBQyxJQUFNLEdBQWEsRUFBRSxPQUFTLENBQUMsRUFBRSxZQUM1RCxFQUNBLEdBQUksSUFBVSxHQUNiLE1BQVUsTUFBTSxnQ0FBZ0MsRUFFakQsT0FBTyxHQVFGLEdBQTJCLENBQUMsSUFDakMsRUFBWSxNQUFNLFNBQVMsRUFBRyxLQUFLLEVBQUUsTUFBTSxLQUFLLEVBQUUsT0FBTyxFQU1wRCxHQUFnQixDQUFDLEVBQWUsSUFBeUIsQ0FDOUQsSUFBTSxFQUFjLEVBQU8sS0FBSyxFQUFPLFFBQVEsS0FBSyxFQUFHLGFBQWEsRUFDcEUsT0FBTyxFQUFPLFFBQVEsS0FBSyxFQUFFLElBQUksRUFBYSxhQUFhLEdBT3RELEdBQXVCLENBQzVCLEVBQ0EsSUFDbUUsQ0FDbkUsSUFBSSxFQUFXLEVBQVUsTUFFekIsR0FBSSxFQUFRLE1BQ1gsRUFBVyxHQUFjLEVBQVUsTUFBTyxFQUFRLEtBQUssRUFHeEQsSUFBSSxFQUFTLEVBQVUsSUFFdkIsR0FBSSxFQUFRLE9BQVMsRUFBUSxJQUM1QixFQUFTLEVBQVMsSUFBSSxFQUFRLElBQUksS0FBSyxFQUFRLEtBQUssRUFBRyxhQUFhLEVBQzlELFFBQUksRUFBUSxNQUNsQixFQUFTLEVBQVMsSUFBSSxFQUFVLElBQUksS0FBSyxFQUFVLEtBQUssRUFBRyxhQUFhLEVBQ2xFLFFBQUksRUFBUSxJQUNsQixFQUFTLEdBQWMsRUFBVSxJQUFLLEVBQVEsR0FBRyxFQUdsRCxJQUFNLEVBQWMsRUFBUSxPQUFTLEVBQVUsTUFDM0MsRUFDSixHQUFJLEVBQ0gsRUFBVyxJQUFLLEVBQWEsUUFBUyxFQUFTLE9BQU8sQ0FBRSxFQUd6RCxNQUFPLENBQUUsTUFBTyxFQUFVLElBQUssRUFBUSxNQUFPLENBQVMsR0FVM0MsR0FBMEIsRUFDdEMsUUFDQSxnQkFDQSxZQUNBLGFBQ29ELENBRXBELEdBQUksQ0FBQyxFQUFNLE1BQ1YsTUFBTyxDQUFDLEVBR1QsR0FBSSxDQUlILElBQU0sRUFBZ0IsR0FBZSxFQUFNLEtBQUssRUFDMUMsRUFBZ0IsRUFBTSxNQUFNLE1BQy9CLEdBQWUsRUFBTSxFQUFNLE1BQU0sS0FBSyxDQUFDLEVBQ3ZDLE9BRUcsRUFBNEIsSUFDOUIsRUFBTSxNQUNULFFBQVMsRUFDVCxNQUFPLENBQ1IsRUFDTSxFQUFPLElBQUksR0FBTSxDQUFXLEVBRTVCLEVBQVksR0FBa0IsQ0FBSyxFQUNuQyxFQUFZLEVBQWMsT0FDL0IsQ0FBQyxJQUFNLEVBQUUsY0FBZ0IsR0FBa0IsQ0FBQyxJQUFNLENBQ25ELEVBR00sRUFBZ0IsRUFBTSxJQUFJLEtBQUssRUFBTSxLQUFLLEVBSTFDLEVBQXdCLEdBQzdCLEVBQVUsU0FBUyxFQUFlLGFBQWEsQ0FDaEQsRUFDTSxFQUFjLEdBQWUsQ0FBTyxFQXlEMUMsT0F0RG9CLEVBQUssUUFBUSxFQUF1QixFQUFhLEVBQUksRUFJdkUsSUFBSSxDQUFDLEVBQVksSUFBVSxDQUMzQixJQUFNLEVBQWlCLEdBQWlCLEVBQVksRUFBTSxLQUFLLEVBQ3pELEVBQW1CLEVBQVUsS0FBSyxDQUFDLElBQ3hDLEdBQVMsRUFBRSxZQUFZLEdBQUcsT0FBTyxDQUFjLENBQ2hELEVBR0EsR0FBSSxFQUNILE1BQU8sSUFBSyxLQUFVLENBQWlCLEVBSXhDLElBQU0sRUFBbUIsRUFBTSxJQUFJLEtBQUssRUFBTSxLQUFLLEVBQzdDLEVBQWEsRUFBZSxJQUFJLEVBQWtCLGFBQWEsRUFDL0QsRUFBbUIsR0FBRyxFQUFNLE1BQU0sSUFDbEMsRUFBWSxHQUFrQixDQUFLLEVBWXpDLE1BVHNDLElBQ2xDLEVBQ0gsR0FBSSxFQUNKLE1BQU8sRUFDUCxJQUFLLEVBQ0wsSUFBSyxFQUNMLE1BQU8sTUFDUixFQUdBLEVBQ0EsT0FBTyxDQUFDLElBQW1CLENBRzNCLEdBRG1CLEVBQU0sU0FBVyxFQUFNLFFBQVEsT0FBUyxFQUMzQyxDQUNmLElBQU0sRUFBZ0IsRUFBZSxNQUFNLFlBQVksRUFFdkQsR0FEbUIsRUFBTSxTQUFTLFNBQVMsQ0FBYSxFQUV2RCxNQUFPLEdBV1QsT0FIQyxFQUFlLE1BQU0sZUFBZSxDQUFPLEdBQzNDLEVBQWUsSUFBSSxjQUFjLENBQVMsRUFHM0MsRUFHRCxNQUFPLEVBQU8sQ0FFZixNQUFVLE1BQ1QsMEJBQTBCLEtBQUssVUFBVSxFQUFNLEtBQUssYUFBYSxhQUFpQixNQUFRLEVBQU0sUUFBVSxpQkFDM0csSUFXVyxHQUF1QixFQUNuQyxjQUNBLFVBQ0EsZ0JBQ0EsV0FDaUQsQ0FDakQsSUFBTSxFQUFnQixDQUFDLEdBQUcsQ0FBYSxFQUNqQyxFQUFpQixHQUFtQixFQUFlLENBQVcsRUFDOUQsRUFBWSxFQUFjLEdBRWhDLE9BQVEsT0FDRixPQUFRLENBRVosSUFBTSxFQUFzQixFQUFZLE1BQU0sWUFBWSxFQUVwRCxFQUFpQixDQUFDLEdBREEsRUFBVSxTQUFXLENBQUMsRUFDRixDQUFtQixFQUV6RCxFQUFtQixJQUNyQixFQUNILFFBQVMsQ0FDVixFQUNBLEVBQWMsR0FBa0IsRUFHaEMsSUFBTSxFQUFrQixHQUFHLEVBQVksZUFBZSxLQUFLLElBQUksSUFDekQsRUFBK0IsSUFFakMsR0FBUyxFQUFhLENBQUMsUUFBUyxTQUFVLE1BQU8sT0FBUSxPQUFPLENBQUMsS0FDakUsRUFDSCxHQUFJLEVBQ0osYUFBYyxFQUNkLElBQUssR0FBa0IsQ0FBUyxFQUNoQyxNQUFPLE1BQ1IsRUFDQSxFQUFjLEtBQUssQ0FBYSxFQUNoQyxLQUNELEtBRUssWUFBYSxDQUVqQixJQUFNLEVBQWtCLEdBQXlCLENBQVcsRUFHdEQsRUFBa0IsSUFDcEIsRUFDSCxNQUFPLElBQ0gsRUFBVSxNQUNiLE1BQU8sQ0FDUixDQUNELEVBQ0EsRUFBYyxHQUFrQixFQUdoQyxJQUFNLEVBQW1CLEVBQVUsSUFBSSxLQUFLLEVBQVUsS0FBSyxFQUNyRCxFQUFxQixFQUFRLE9BQVMsRUFBWSxNQUNsRCxFQUNMLEVBQVEsS0FBTyxFQUFtQixJQUFJLENBQWdCLEVBQ2pELEVBQWMsR0FBRyxFQUFVLGVBQzNCLEVBQWUsR0FBRyxtQkFFbEIsRUFBZ0MsSUFDbEMsS0FDQSxFQUNILE1BQU8sSUFDSCxFQUFVLFNBQ1YsRUFBUSxNQUNYLFFBQVMsRUFBbUIsT0FBTyxDQUNwQyxFQUNBLEdBQUksRUFDSixJQUFLLEVBQ0wsTUFBTyxFQUNQLElBQUssRUFDTCxhQUFjLE1BQ2YsRUFDQSxFQUFjLEtBQUssQ0FBYyxFQUNqQyxLQUNELEtBRUssTUFBTyxDQUVYLElBQU0sRUFBWSxHQUFrQixDQUFTLEVBQ3ZDLEVBQVcsR0FBcUIsRUFBVyxDQUFPLEVBQ3hELEVBQWMsR0FBa0IsSUFDNUIsS0FDQSxFQUNILE1BQU8sRUFBUyxNQUNoQixJQUFLLEVBQVMsSUFDZCxNQUFPLEVBQVMsTUFDaEIsUUFBUyxNQUNWLEVBQ0EsSUFBTSxFQUE2QixDQUFDLElBQThCLENBQ2pFLElBQU0sRUFBcUIsUUFBUSxFQUFFLFlBQVksR0FBSyxDQUFDLEVBQUUsTUFDbkQsRUFBa0IsR0FBa0IsQ0FBQyxJQUFNLEVBQ2pELE9BQU8sR0FBc0IsR0FJOUIsT0FBTyxFQUFjLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFBMkIsQ0FBQyxDQUFDLENBQ2xFLFNBR0MsTUFBVSxNQUNULGtCQUFrQiwwQ0FDbkIsRUFHRixPQUFPLEdBU0ssR0FBdUIsRUFDbkMsY0FDQSxnQkFDQSxXQUNpRCxDQUNqRCxJQUFNLEVBQWdCLENBQUMsR0FBRyxDQUFhLEVBQ2pDLEVBQWlCLEdBQW1CLEVBQWUsQ0FBVyxFQUM5RCxFQUFZLEVBQWMsR0FFaEMsT0FBUSxPQUNGLE9BQVEsQ0FFWixJQUFNLEVBQXNCLEVBQVksTUFBTSxZQUFZLEVBRXBELEVBQWlCLENBQUMsR0FEQSxFQUFVLFNBQVcsQ0FBQyxFQUNGLENBQW1CLEVBRXpELEVBQW1CLElBQUssRUFBVyxRQUFTLENBQWUsRUFDakUsRUFBYyxHQUFrQixFQUNoQyxLQUNELEtBRUssWUFBYSxDQUVqQixJQUFNLEVBQWtCLElBQ3BCLEVBQ0gsTUFBTyxJQUNILEVBQVUsTUFDYixNQUFPLEdBQXlCLENBQVcsQ0FDNUMsQ0FDRCxFQUNBLEVBQWMsR0FBa0IsRUFDaEMsS0FDRCxLQUVLLE1BQU8sQ0FFWCxJQUFNLEVBQVksR0FBa0IsQ0FBVyxFQUkvQyxPQUhrQyxFQUFjLE9BQy9DLENBQUMsSUFBTSxHQUFrQixDQUFDLElBQU0sQ0FDakMsQ0FFRCxTQUdDLE1BQVUsTUFDVCxrQkFBa0IsMENBQ25CLEVBR0YsT0FBTyxHQ3haRCxJQUFNLEdBQW9DLENBRWhELE1BQU8sUUFDUCxPQUFRLFNBQ1IsSUFBSyxNQUNMLE9BQVEsU0FDUixPQUFRLFNBQ1IsT0FBUSxTQUNSLE9BQVEsU0FHUixNQUFPLFFBQ1AsT0FBUSxTQUNSLFNBQVUsWUFDVixNQUFPLFFBQ1AsWUFBYSxjQUNiLFNBQVUsV0FDVixPQUFRLFVBQ1IsVUFBVyxhQUNYLFFBQVMsV0FDVCxVQUFXLGFBQ1gsV0FBWSxpQkFDWixRQUFTLFdBQ1QsTUFBTyxRQUdQLFlBQWEsZUFDYixVQUFXLGFBQ1gsWUFBYSxtQ0FDYixpQkFBa0IsMEJBQ2xCLHNCQUF1QixjQUN2Qiw0QkFBNkIsK0JBQzdCLHlCQUEwQiw0QkFHMUIsT0FBUSxTQUNSLFFBQVMsVUFDVCxpQkFBa0Isb0JBQ2xCLE1BQU8sUUFDUCxPQUFRLFNBQ1IsUUFBUyxVQUNULE9BQVEsU0FDUixTQUFVLFdBQ1YsU0FBVSxZQUNWLE1BQU8sUUFDUCxNQUFPLFFBQ1AsTUFBTyxRQUNQLEtBQU0sT0FDTixNQUFPLFFBQ1AsWUFBYSxjQUNiLEdBQUksS0FHSixtQkFBb0IsdUJBQ3BCLHFCQUFzQix5QkFDdEIsMkJBQ0MsdURBQ0QsNkJBQ0MseURBQ0QsVUFBVyxhQUNYLHFCQUFzQix1Q0FDdEIsdUJBQXdCLDRCQUN4QixrQ0FBbUMsdUNBQ25DLFVBQVcsYUFDWCxxQkFBc0IsbUNBQ3RCLGVBQWdCLHVDQUNoQixvQkFBcUIseUNBQ3JCLG1CQUFvQixxQ0FDcEIsZUFBZ0IsdUNBQ2hCLG9CQUFxQix5Q0FDckIsbUJBQW9CLHFDQUdwQixNQUFPLFFBQ1AsS0FBTSxPQUNOLElBQUssTUFDTCxLQUFNLE9BQ04sS0FBTSxPQUdOLFVBQVcsWUFDWCxTQUFVLFdBQ1YsS0FBTSxPQUNOLEtBQU0sT0FDTixtQkFBb0IsdUJBQ3BCLDJCQUE0QixxQ0FDN0IsRUNyRk8sU0FBUyxDQUFPLENBQUMsRUFBc0IsQ0FDN0MsT0FBTyxFQUFLLE9BQU8sRUFBTSxFQUFHLEtBQUssRUFJM0IsU0FBUyxDQUFTLENBQUMsRUFBcUIsQ0FDOUMsT0FBTyxFQUFLLE9BQU8sWUFBWSxFQXVCekIsU0FBUyxDQUFXLENBQzFCLEVBQ0EsRUFDVSxDQUNWLElBQU0sRUFBNkIsRUFDakMsUUFBUSxNQUFNLEVBQ2QsSUFBSSxDQUFjLEVBRWQsRUFBc0IsRUFBWSxTQUFTLENBQTBCLEVBQ3hFLEVBQTJCLFNBQVMsRUFBRyxNQUFNLEVBQzdDLEVBRUgsT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQUUsRUFBRyxDQUFDLEVBQUcsSUFDcEMsRUFBb0IsSUFBSSxFQUFVLEtBQUssQ0FDeEMsRUFPTSxTQUFTLEVBQWEsQ0FDNUIsRUFDQSxFQUNZLENBQ1osSUFBTSxFQUFZLEVBQVksRUFBVSxRQUFRLE9BQU8sRUFBRyxDQUFjLEVBRXhFLE9BQU8sTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFFLEVBQUcsQ0FBQyxFQUFHLElBQWMsQ0FDbEQsSUFBTSxFQUFZLEVBQVUsR0FBRyxJQUFJLEVBQVcsTUFBTSxFQUNwRCxPQUFPLEVBQVksRUFBVyxDQUFjLEVBQzVDLEVBR0ssU0FBUyxFQUFZLENBQUMsRUFBMkIsQ0FDdkQsSUFBTSxFQUFjLEVBQVUsWUFBWSxFQUNwQyxFQUFlLEVBQVUsUUFBUSxPQUFPLEVBQzlDLE9BQU8sTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFZLEVBQUcsQ0FBQyxFQUFHLElBQzlDLEVBQWEsSUFBSSxFQUFHLEtBQUssQ0FDMUIsRUFlTSxTQUFTLEVBQVcsRUFDMUIsZ0JBQWdCLEVBQU0sRUFDdEIsU0FBUyxJQUNjLENBQUMsRUFBWSxDQUNwQyxJQUFNLEVBQWEsRUFBYyxRQUFRLEtBQUssRUFDOUMsT0FBTyxNQUFNLEtBQUssQ0FBRSxRQUFPLEVBQUcsQ0FBQyxFQUFHLElBQ2pDLEVBQVcsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQ3JELEVDcEZNLFNBQVMsRUFBc0IsQ0FDckMsRUFDQSxFQUNrQixDQUNsQixJQUFNLEVBQU0sSUFBSSxJQUFJLEVBQWUsSUFBSSxDQUFDLElBQU0sT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQzNELE9BQU8sRUFBTyxPQUFPLENBQUMsSUFBVSxFQUFJLElBQUksT0FBTyxFQUFNLEVBQUUsQ0FBQyxDQUFDLEVBUW5ELFNBQVMsRUFBa0IsQ0FDakMsRUFDQSxFQUNBLEVBQ1UsQ0FDVixJQUFNLEVBQ0wsRUFBTSxNQUFNLGNBQWMsQ0FBSyxHQUFLLEVBQU0sTUFBTSxlQUFlLENBQUcsRUFDN0QsRUFDTCxFQUFNLElBQUksY0FBYyxDQUFLLEdBQUssRUFBTSxJQUFJLGVBQWUsQ0FBRyxFQUN6RCxFQUFhLEVBQU0sTUFBTSxTQUFTLENBQUssR0FBSyxFQUFNLElBQUksUUFBUSxDQUFHLEVBQ3ZFLE9BQU8sR0FBaUIsR0FBZSxFSjZDeEMsSUFBTSxHQUFtRCxDQUN4RCxJQUFLLE1BQ0wsS0FBTSxPQUNOLE1BQU8sUUFDUCxLQUFNLE1BQ1AsRUFFYSxHQUFxQixDQUNqQyxFQUNBLEVBQ0EsSUFDa0MsQ0FDbEMsR0FBSSxJQUFTLE9BQVMsSUFBUyxPQUM5QixNQUFPLENBQUUsTUFBTyxFQUFLLFFBQVEsQ0FBSSxFQUFHLElBQUssRUFBSyxNQUFNLENBQUksQ0FBRSxFQUUzRCxHQUFJLElBQVMsT0FBUSxDQUNwQixJQUFNLEVBQU8sRUFBWSxFQUFNLENBQWMsRUFDN0MsTUFBTyxDQUFFLE1BQU8sRUFBSyxHQUFHLFFBQVEsS0FBSyxFQUFHLElBQUssRUFBSyxHQUFHLE1BQU0sS0FBSyxDQUFFLEVBR25FLElBQU0sRUFBUSxHQUFjLEVBQU0sQ0FBYyxFQUNoRCxNQUFPLENBQUUsTUFBTyxFQUFNLEdBQUcsR0FBRyxRQUFRLEtBQUssRUFBRyxJQUFLLEVBQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFFLEdBRzlELEdBQW9CLENBQ2hDLElBQzBCLENBQzFCLElBQ0MsU0FBUyxDQUFDLEVBQ1YsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUFjLEVBQU0sRUFDcEIsZ0JBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLGVBQ0EsU0FDQSxXQUNBLGVBQ0EsY0FDRyxHQUVHLEVBQWEsR0FBa0IsR0FDckMsRUFBTSxRQUFRLENBQVcsRUFBSSxFQUFjLEVBQU0sQ0FBVyxDQUM3RCxHQUNPLEVBQU0sR0FBVyxHQUF1QixDQUFXLEdBQ25ELEVBQWUsR0FBb0IsR0FBMEIsQ0FBTSxHQUNuRSxFQUFpQixHQUFzQixHQUFTLEVBQUssR0FDckQsRUFBZSxHQUFvQixHQUErQixJQUFJLEdBQ3RFLEVBQWMsR0FBbUIsR0FBdUIsSUFBSSxHQUM1RCxFQUFlLEdBQW9CLEdBQVMsR0FBVSxJQUFJLEVBQzNELEVBQWlCLEdBQU8sQ0FBTSxFQUM5QixFQUFtQixHQUFPLENBQVEsRUFDbEMsRUFBaUIsR0FBMkIsTUFBUyxFQUVyRCxHQUF3QixHQUFRLElBQU0sQ0FDM0MsR0FBSSxFQUFZLE9BQU8sRUFDdkIsSUFBTSxFQUFPLEdBQWdCLEdBQzdCLE1BQU8sQ0FBQyxJQUFnQixFQUFLLElBQThCLEdBQ3pELENBQUMsRUFBYyxDQUFVLENBQUMsRUFFdkIsR0FBd0IsRUFDN0IsQ0FBQyxFQUFrQixJQUFvQyxDQUN0RCxJQUFNLEVBQTZCLENBQUMsRUFFcEMsUUFBVyxNQUFTLEVBQ25CLEdBQUksR0FBTSxNQUNULEVBQVUsS0FDVCxHQUFHLEdBQXdCLENBQzFCLFNBQ0EsZ0JBQ0EsWUFDQSxTQUNELENBQUMsQ0FDRixFQUNNLFFBQUksR0FBbUIsR0FBTyxFQUFXLENBQU8sRUFDdEQsRUFBVSxLQUFLLEVBQUssRUFHdEIsT0FBTyxHQUVSLENBQUMsQ0FBYSxDQUNmLEVBRU0sR0FBc0IsRUFBWSxJQUFNLENBQzdDLE9BQU8sR0FBbUIsRUFBYSxFQUFNLENBQWMsR0FDekQsQ0FBQyxFQUFhLEVBQU0sQ0FBYyxDQUFDLEVBRWhDLEdBQWtCLEdBQVEsSUFBTSxDQUNyQyxJQUFRLFFBQU8sT0FBUSxHQUFvQixFQUMzQyxPQUFPLEdBQXNCLEVBQU8sQ0FBRyxHQUNyQyxDQUFDLEdBQXVCLEVBQW1CLENBQUMsRUFFL0MsR0FBVSxJQUFNLENBQ2YsR0FBSSxJQUFXLEVBQWUsUUFDN0IsRUFBaUIsQ0FBTSxFQUN2QixFQUFlLFFBQVUsR0FFeEIsQ0FBQyxDQUFNLENBQUMsRUFFWCxHQUFVLElBQU0sQ0FDZixHQUFJLEdBQVUsSUFBVyxFQUFlLFFBQ3ZDLEVBQWlCLENBQU0sRUFDdkIsRUFBTSxPQUFPLENBQU0sRUFDbkIsRUFBZSxDQUFDLElBQWEsRUFBUyxPQUFPLENBQU0sQ0FBQyxFQUNwRCxFQUFlLFFBQVUsR0FFeEIsQ0FBQyxDQUFNLENBQUMsRUFFWCxHQUFVLElBQU0sQ0FDZixHQUFJLEdBQVksSUFBYSxFQUFpQixRQUM3QyxFQUFNLEdBQUcsV0FBVyxDQUFRLEVBQzVCLEVBQWUsQ0FBQyxJQUFTLEVBQUssR0FBRyxDQUFRLENBQUMsRUFDMUMsRUFBaUIsQ0FBQyxJQUNqQixFQUFLLElBQUksQ0FBQyxLQUFPLElBQ2IsRUFDSCxNQUFPLEVBQUUsTUFBTSxHQUFHLENBQVEsRUFDMUIsSUFBSyxFQUFFLElBQUksR0FBRyxDQUFRLENBQ3ZCLEVBQUUsQ0FDSCxFQUNBLEVBQWlCLFFBQVUsR0FFMUIsQ0FBQyxDQUFRLENBQUMsRUFFYixJQUFNLEdBQXNCLEVBQzNCLENBQUMsSUFBbUIsQ0FDbkIsRUFBZSxDQUFPLEVBQ3RCLElBQU0sRUFBUSxHQUFtQixFQUFTLEVBQU0sQ0FBYyxFQUM5RCxJQUFlLEVBQVMsQ0FBSyxHQUU5QixDQUFDLEVBQWMsRUFBTSxDQUFjLENBQ3BDLEVBRU0sR0FBYSxHQUViLEdBQWlCLEVBQ3RCLENBQUMsSUFBc0IsQ0FDdEIsSUFBTSxFQUNMLElBQWMsRUFDWCxFQUFZLElBQUksRUFBRyxHQUFXLEVBQUssRUFDbkMsRUFBWSxTQUFTLEVBQUcsR0FBVyxFQUFLLEVBQzVDLEdBQW9CLENBQU8sR0FFNUIsQ0FBQyxFQUFhLEVBQU0sRUFBbUIsQ0FDeEMsRUFFTSxHQUFhLEVBQVksSUFBTSxHQUFlLENBQUMsRUFBRyxDQUFDLEVBQWMsQ0FBQyxFQUNsRSxHQUFhLEVBQVksSUFBTSxHQUFlLEVBQUUsRUFBRyxDQUFDLEVBQWMsQ0FBQyxFQUVuRSxHQUFRLEVBQ2IsSUFBTSxHQUFvQixFQUFNLENBQUMsRUFDakMsQ0FBQyxFQUFtQixDQUNyQixFQUVNLEdBQVcsRUFDaEIsQ0FBQyxJQUF5QixDQUN6QixFQUFpQixDQUFDLElBQVMsQ0FBQyxHQUFHLEVBQU0sQ0FBSyxDQUFDLEVBQzNDLElBQWEsQ0FBSyxHQUVuQixDQUFDLENBQVUsQ0FDWixFQUVNLEVBQWMsRUFDbkIsQ0FBQyxFQUEwQixJQUFvQyxDQUM5RCxJQUFNLEVBQWdCLEVBQWMsS0FBSyxDQUFDLEtBQVUsR0FBTSxLQUFPLENBQU8sRUFDeEUsR0FBSSxDQUFDLEVBQ0osT0FHRCxJQUFNLEdBQVcsSUFBSyxLQUFrQixDQUFRLEVBQ2hELEVBQWlCLENBQUMsS0FDakIsR0FBSyxJQUFJLENBQUMsS0FBVyxHQUFNLEtBQU8sRUFBVSxHQUFXLEVBQU0sQ0FDOUQsRUFDQSxJQUFnQixFQUFRLEdBRXpCLENBQUMsRUFBZSxDQUFhLENBQzlCLEVBRU0sR0FBdUIsRUFDNUIsQ0FDQyxFQUNBLEVBQ0EsSUFDSSxDQUNKLElBQWdCLElBQUssS0FBVSxDQUFRLENBQUMsRUFDeEMsRUFDQyxHQUF5QixDQUN4QixZQUFhLEVBQ2IsVUFDQSxnQkFDQSxNQUFPLEVBQVEsS0FDaEIsQ0FBQyxDQUNGLEdBRUQsQ0FBQyxFQUFlLENBQWEsQ0FDOUIsRUFFTSxHQUF1QixFQUM1QixDQUFDLEVBQXNCLElBQW1DLENBQ3pELElBQWdCLENBQUssRUFDckIsRUFDQyxHQUF5QixDQUN4QixZQUFhLEVBQ2IsZ0JBQ0EsTUFBTyxFQUFRLEtBQ2hCLENBQUMsQ0FDRixHQUVELENBQUMsRUFBZSxDQUFhLENBQzlCLEVBRU0sRUFBYyxFQUNuQixDQUFDLElBQTZCLENBQzdCLElBQU0sRUFBZ0IsRUFBYyxLQUFLLENBQUMsSUFBTSxFQUFFLEtBQU8sQ0FBTyxFQUNoRSxHQUFJLENBQUMsRUFDSixPQUdELEVBQWlCLENBQUMsSUFBUyxFQUFLLE9BQU8sQ0FBQyxLQUFNLEdBQUUsS0FBTyxDQUFPLENBQUMsRUFDL0QsSUFBZ0IsQ0FBYSxHQUU5QixDQUFDLEVBQWUsQ0FBYSxDQUM5QixFQUVNLEVBQWdCLEVBQ3JCLENBQUMsSUFBdUMsQ0FDdkMsR0FBSSxHQUFXLE1BQ2QsRUFBZ0IsRUFBVSxLQUFLLEVBRWhDLElBQU0sRUFBUSxHQUFXLE9BQVMsRUFDbEMsRUFBaUIsQ0FDaEIsTUFBTyxHQUFFLFVBQVUsRUFDbkIsUUFDQSxJQUFLLEdBQVcsS0FBTyxFQUFNLElBQUksRUFBRyxNQUFNLEVBQzFDLFdBQVksR0FBVyxXQUN2QixZQUFhLEdBQ2IsT0FBUSxHQUFXLFFBQVUsRUFDOUIsQ0FBa0IsRUFDbEIsRUFBbUIsRUFBSSxHQUV4QixDQUFDLEVBQWEsRUFBQyxDQUNoQixFQUVNLEdBQWlCLEVBQVksSUFBTSxDQUN4QyxFQUFnQixJQUFJLEVBQ3BCLEVBQWlCLElBQUksRUFDckIsRUFBbUIsRUFBSyxHQUN0QixDQUFDLENBQUMsRUFFQyxHQUFtQixFQUN4QixDQUFDLElBQTBCLENBQzFCLEVBQVEsQ0FBTyxFQUNmLElBQWUsQ0FBTyxFQUV0QixJQUFNLEVBQVEsR0FBbUIsRUFBYSxFQUFTLENBQWMsRUFDckUsSUFBZSxFQUFhLENBQUssR0FFbEMsQ0FBQyxFQUFjLEVBQWMsRUFBYSxDQUFjLENBQ3pELEVBRU0sR0FBMkIsRUFDaEMsQ0FBQyxJQUErQyxDQUMvQyxJQUFNLEVBQVksRUFBTSxJQUN4QixPQUNDLEVBQWMsS0FDYixDQUFDLEtBQU8sRUFBRSxLQUFPLEdBQUcsRUFBRSx1QkFBeUIsR0FBYSxFQUFFLEtBQy9ELEdBQUssTUFHUCxDQUFDLENBQWEsQ0FDZixFQUVBLE1BQU8sQ0FDTixjQUNBLE9BQ0EsT0FBUSxHQUNSLFVBQVcsRUFDWCxrQkFDQSxnQkFDQSxlQUNBLGlCQUNBLGFBQWMsR0FDZCxnQkFDQSxnQkFDQSxpQkFDQSxjQUNBLFFBQVMsR0FDVCxjQUNBLGNBQ0EsU0FDQSxZQUNBLGNBQ0Esd0JBQ0EsY0FDQSx3QkFDQSxnQkFDQSxrQkFDQSxtQkFDQSxxQkFDQSxrQkFDQSx5QkFDQSw0QkFDQSxJQUNELDRDRDdXRCxJQUFNLEdBQXNCLENBQUMsSUFBOEMsQ0FDMUUsR0FBSSxFQUFNLFlBQ1QsT0FBTyxFQUFNLFlBRWQsR0FBSSxFQUFNLGFBQWUsT0FDeEIsTUFBTyxDQUFDLEVBQU0sVUFBVSxFQUV6QixNQUFPLENBQUMsR0FtQkksR0FFVCxFQUNILFdBQ0EsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUNBLGNBQ0EsZUFDQSxjQUNBLGlCQUNBLGVBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLGVBQWUsRUFDZixjQUFjLEdBQ2QsbUJBQW1CLEdBQ25CLHNCQUFzQixHQUN0QixrQkFDQSxrQkFDQSxlQUNBLGFBQ0EsaUJBQ0Esa0JBQ0EsZ0JBQ0EsY0FBYSxVQUNiLG1CQUNBLGVBQWMsYUFDZCw4QkFDQSxjQUNBLHdCQUF1QixHQUN2QixvQkFBbUIsR0FDbkIsY0FDQSx1QkFBc0IsU0FDdEIsZ0JBQWUsR0FDZixpQkFDSyxDQUVMLElBQU0sRUFBaUIsR0FBa0IsQ0FDeEMsU0FDQSxpQkFDQSxjQUNBLGNBQ0EsZ0JBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLGFBQWMsRUFDZCxTQUNBLFdBQ0EsZUFDQSxZQUNELENBQUMsRUFJSyxHQUF1QixHQUM1QixDQUFDLElBQ0EsRUFBZSxPQUFPLE9BQU8sQ0FBQyxJQUM3QixHQUFvQixDQUFDLEVBQUUsU0FBUyxDQUFVLENBQzNDLEVBQ0QsQ0FBQyxFQUFlLE1BQU0sQ0FDdkIsRUFFTSxHQUF3QixHQUM3QixDQUFDLElBQ0EsRUFBZSxPQUFPLE9BQU8sQ0FBQyxJQUM3QixHQUFvQixDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQU8sRUFBWSxTQUFTLEVBQUUsQ0FBQyxDQUM3RCxFQUNELENBQUMsRUFBZSxNQUFNLENBQ3ZCLEVBRU0sRUFBa0IsR0FDdkIsQ0FBQyxJQUFrRSxDQUNsRSxHQUFJLElBQWUsT0FDbEIsT0FFRCxPQUFPLEVBQVUsS0FBSyxDQUFDLElBQWEsRUFBUyxLQUFPLENBQVUsR0FFL0QsQ0FBQyxDQUFTLENBQ1gsRUFHTSxFQUF1QixHQUFZLENBQUMsSUFBa0MsQ0FDM0UsT0FBTyxRQUFRLEVBQU0sYUFBZSxFQUFNLFlBQVksT0FBUyxDQUFDLEdBQzlELENBQUMsQ0FBQyxFQUdDLEdBQVksR0FDakIsQ0FBQyxJQUF5QixDQUN6QixFQUFlLGlCQUFpQixDQUFLLEVBQ3JDLEVBQWUsbUJBQW1CLEVBQUksR0FFdkMsQ0FBQyxDQUFjLENBQ2hCLEVBRU0sR0FBbUIsR0FDeEIsQ0FBQyxJQUF5QixDQUN6QixHQUFJLEVBQ0gsT0FFRCxHQUFJLEVBQ0gsRUFBYSxDQUFLLEVBRWxCLFFBQVUsQ0FBSyxHQUdqQixDQUFDLEVBQW1CLEVBQWMsRUFBUyxDQUM1QyxFQUVNLEdBQWtCLEdBQ3ZCLENBQUMsSUFBbUIsQ0FDbkIsR0FBSSxFQUNILE9BR0QsR0FBSSxFQUNILEVBQVksQ0FBSSxFQUNWLEtBQ04sSUFBTSxFQUEwQixDQUMvQixNQUFPLEVBQWUsRUFBRSxVQUFVLEVBQ2xDLE1BQU8sRUFBSyxNQUNaLElBQUssRUFBSyxJQUNWLFlBQWEsR0FDYixPQUFRLEVBQ1QsRUFFQSxHQUFJLEVBQUssV0FBYSxPQUNyQixFQUFTLFdBQWEsRUFBSyxTQUFTLEdBR3JDLEVBQWUsaUJBQWlCLENBQVEsRUFDeEMsRUFBZSxnQkFBZ0IsRUFBSyxLQUFLLEVBQ3pDLEVBQWUsbUJBQW1CLEVBQUksSUFHeEMsQ0FBQyxFQUFhLEVBQWtCLENBQWMsQ0FDL0MsRUFHTSxFQUFlLEdBQ3BCLEtBQU8sSUFDSCxFQUVILFlBRUEsd0JBQ0EseUJBQ0Esa0JBQ0EsdUJBQ0EsdUJBRUEsYUFBYyxHQUNkLFlBQWEsR0FFYixpQkFDQSxjQUNBLGlCQUNBLGtCQUNBLGtCQUNBLGtCQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLGVBQ0EsY0FDQSxtQkFDQSxzQkFDQSxnQkFDQSxjQUNBLG1CQUNBLGVBQ0EsOEJBQ0EsY0FDQSx3QkFDQSxvQkFDQSxjQUNBLHVCQUNBLGdCQUNBLGFBQ0QsR0FDQSxDQUNDLEVBQ0EsRUFDQSxHQUNBLEdBQ0EsRUFDQSxFQUNBLEdBQ0EsR0FDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxFQUNELENBQ0QsRUFFQSxPQUNDLEdBRUUsR0FBd0IsU0FGMUIsQ0FBa0MsTUFBTyxFQUF6QyxTQUNFLEVBQ0EsR0hsT0csU0FBUyxDQUEwQixDQUN6QyxFQUMrQixDQUMvQixJQUFNLEVBQWtCLEdBQVcsRUFBdUIsRUFDcEQsRUFBaUIsR0FBVyxFQUFlLEVBRzNDLEVBQVcsR0FDaEIsRUFFRCxHQUFJLENBQUMsRUFDSixNQUFVLE1BQ1QsNEZBQ0QsRUFHRCxPQUFPLEVBQVcsRUFBUyxDQUFPLEVBQUksRUFPaEMsU0FBUyxFQUF1QixFQUFrQyxDQUN4RSxJQUFNLEVBQVUsRUFBd0IsRUFFeEMsTUFBTyxDQUNOLFlBQWEsRUFBUSxZQUNyQixLQUFNLEVBQVEsS0FDZCxPQUFRLEVBQVEsT0FDaEIsZ0JBQWlCLEVBQVEsZ0JBQ3pCLGNBQWUsRUFBUSxjQUN2QixhQUFjLEVBQVEsYUFDdEIsZUFBZ0IsRUFBUSxlQUN4QixVQUFXLEVBQVEsV0FBYSxDQUFDLEVBQ2pDLGVBQWdCLEVBQVEsZUFDeEIsV0FBWSxFQUFRLFdBQ3BCLFFBQVMsRUFBUSxRQUNqQixXQUFZLEVBQVEsV0FDcEIsV0FBWSxFQUFRLFdBQ3BCLE1BQU8sRUFBUSxNQUNmLFNBQVUsRUFBUSxTQUNsQixZQUFhLEVBQVEsWUFDckIsWUFBYSxFQUFRLFlBQ3JCLGNBQWUsRUFBUSxjQUN2QixlQUFnQixFQUFRLGVBQ3hCLHFCQUFzQixFQUFRLHFCQUM5QixjQUFlLEVBQVEsYUFDeEIsc0RTMUZELElBQU0sR0FBUyxDQUNkLENBQ0MsTUFBTyxPQUNQLE1BQU8sWUFDUCxRQUFTLGlCQUNULFVBQVcsZ0JBQ1osRUFDQSxDQUNDLE1BQU8sWUFDUCxNQUFPLHlCQUNQLFFBQVMsc0JBQ1QsVUFBVyxxQkFDWixFQUNBLENBQ0MsTUFBTyxNQUNQLE1BQU8sWUFDUCxRQUFTLHFCQUNULFVBQVcsb0JBQ1osQ0FDRCxFQVVPLFNBQVMsRUFBb0IsRUFDbkMsU0FDQSxVQUNBLFlBQ0EsZ0JBQ0EsY0FDNkIsQ0FDN0IsSUFBUSxLQUFNLEVBQXdCLENBQUMsS0FBYSxDQUFFLEVBQUcsRUFBUSxDQUFFLEVBQUUsRUFFL0QsRUFBb0IsQ0FBQyxJQUErQixDQUN6RCxFQUFVLENBQUssRUFDZixFQUFRLEdBR0gsRUFBUyxJQUFrQixPQUVqQyxPQUNDLEdBc0NFLEdBdENGLENBQVEsYUFBYyxFQUFTLEtBQU0sRUFBckMsU0FDQyxHQW9DRSxHQXBDRixDQUFlLFVBQVUsV0FBekIsU0FvQ0UsQ0FuQ0QsR0FVRSxHQVZGLFVBVUUsQ0FURCxHQUVFLEdBRkYsVUFDRSxFQUFTLEVBQUUsb0JBQW9CLEVBQUksRUFBRSxzQkFBc0IsRUFDM0QsRUFDRixHQUtFLEdBTEYsVUFLRSxDQUxGLElBQ0csRUFESCxJQUNnQixJQUNkLEVBQ0UsRUFBRSw0QkFBNEIsRUFDOUIsRUFBRSw4QkFBOEIsR0FDbEMsR0FDRCxFQUVGLEdBZ0JFLE1BaEJGLENBQUssVUFBVSxZQUFmLFNBQ0UsR0FBTyxJQUFJLEVBQUcsUUFBTyxRQUFPLFVBQVMsZUFDckMsR0FZRSxFQVpGLENBQ0MsVUFBVSxrQ0FFVixRQUFTLElBQU0sRUFBa0IsQ0FBSyxFQUN0QyxRQUFRLFVBSlQsU0FNQyxHQUtFLE1BTEYsQ0FBSyxVQUFVLFlBQWYsU0FLRSxDQUpELEdBQXlDLE1BQXpDLENBQUssVUFBVSxjQUFmLFNBQThCLEVBQUUsQ0FBSyxFQUFJLEVBQ3pDLEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRSxFQUFFLEVBQVMsRUFBVSxDQUFTLEVBQzlCLEdBQ0QsR0FURyxDQVVKLENBQ0YsRUFDQSxFQUVGLEdBSUUsR0FKRixVQUNDLEdBRUUsRUFGRixDQUFRLFFBQVMsRUFBUyxRQUFRLFVBQWxDLFNBQ0UsRUFBRSxRQUFRLEVBQ1YsRUFDRCxHQUNELEVBQ0QsRUNuRkcsSUFBTSxHQUFrQixDQUM5QixFQUNBLElBQ0ksQ0FDSixJQUFRLFNBQVEsUUFBUyxFQUV6QixHQUFJLENBQUMsR0FBVSxDQUFDLEdBQVEsQ0FBQyxFQUN4QixPQUFPLEtBR1IsSUFBTSxFQUFRLEVBQUssS0FBSyxTQUFXLENBQUMsRUFDOUIsRUFBYSxFQUFLLE9BQVMsYUFDekIsYUFBWSxVQUFXLEVBQzNCLEVBRUosR0FBSSxFQUFZLENBQ2YsSUFBUSxPQUFNLE9BQU8sRUFBRyxTQUFTLEdBQU0sRUFHdkMsRUFBVyxFQUFNLENBQUksRUFBRSxLQUFLLENBQUksRUFBRSxPQUFPLENBQU0sRUFDekMsS0FDTixJQUFRLFFBQVMsRUFFakIsRUFBVyxFQUFNLENBQUksRUFHdEIsSUFBTSxFQUFnQixFQUFZLElBQUksS0FBSyxFQUFZLE1BQU8sUUFBUSxFQUdsRSxFQUFTLEVBQVMsSUFBSSxFQUFlLFFBQVEsRUFFakQsR0FBSSxFQUFPLE9BQU8sRUFBTyxRQUFRLEtBQUssQ0FBQyxFQUV0QyxFQUFTLEVBQU8sU0FBUyxFQUFHLEtBQUssRUFBRSxNQUFNLEtBQUssRUFJL0MsSUFBTSxFQUFVLENBQ2YsTUFBTyxFQUNQLElBQUssRUFDTCxhQUNBLE9BQVEsRUFBYSxHQUFTLEdBQVUsRUFBWSxNQUNyRCxFQUNBLE1BQU8sQ0FBRSxjQUFhLFNBQVEsR0N4RC9CLHNCQUFTLHVCQUNULDZCQUFTLDRCQUVULDhCQUFTLGVBQXFCLHdEQVF2QixJQUFNLEdBQW9ELEVBQUcsU0FBVSxDQUM3RSxJQUFPLEVBQWEsR0FBa0IsR0FBK0IsSUFBSSxFQU16RSxPQUpBLEdBQW9CLEVBQUssS0FBTyxDQUMvQixnQkFDRCxFQUFFLEVBR0QsR0FZRSxHQVpGLENBQWEsVUFBVyxDQUFDLEVBQWtCLEVBQTNDLFNBQ0UsR0FDQSxHQVFFLE1BUkYsQ0FDQyxVQUFXLEVBQ1Ysc0ZBQ0EsRUFBWSxpQkFBbUIsY0FDL0IsRUFBWSxPQUFTLFlBQ3RCLEVBTEQsU0FPRSxHQUFhLE1BQ2IsRUFFRixzRWRKSixJQUFNLEdBQWdCLENBQ3JCLE9BQVEsR0FDUixNQUFPLEtBQ1AsUUFBUyxJQUNWLEVBRU8sU0FBUyxFQUFrQixFQUFHLFlBQXFDLENBQ3pFLElBQU0sRUFBaUIsR0FBc0IsSUFBSSxFQUMzQyxFQUFpQixHQUVwQixJQUFJLEdBRUMsY0FBYSx1QkFBc0Isc0JBQzFDLEVBQXdCLENBQUMsS0FBYSxDQUNyQyxZQUFhLEVBQVEsWUFDckIscUJBQXNCLEVBQVEscUJBQzlCLG1CQUFvQixFQUFRLGtCQUM3QixFQUFFLEdBR0ksRUFBaUIsR0FBc0IsR0FJM0MsQ0FDRixPQUFRLEdBQ1IsTUFBTyxLQUNQLFFBQVMsSUFDVixDQUFDLEVBR0ssRUFBYyxHQUFVLEdBQWEsQ0FFMUMscUJBQXNCLENBQ3JCLFNBQVUsQ0FDWCxDQUNELENBQUMsRUFFSyxFQUFjLEdBQVUsR0FBYSxDQUUxQyxxQkFBc0IsQ0FDckIsTUFBTyxJQUNQLFVBQVcsQ0FDWixDQUNELENBQUMsRUFFSyxFQUFVLEdBQVcsRUFBYSxDQUFXLEVBRzdDLEVBQXFCLENBQzFCLEVBQ0EsSUFDSSxDQUNKLEdBQUksQ0FBQyxHQUFPLElBQU0sQ0FBQyxHQUFXLE9BQU8sS0FBSyxDQUFPLEVBQUUsU0FBVyxFQUM3RCxPQUdELEdBQUksR0FBaUIsQ0FBSyxFQUV6QixFQUFtQixDQUFFLE9BQVEsR0FBTSxRQUFPLFNBQVEsQ0FBQyxFQUVuRCxPQUFZLEVBQU0sR0FBSSxDQUFPLEdBS3pCLEVBQThCLENBQUMsSUFBK0IsQ0FDbkUsR0FBSSxDQUFDLEVBQWdCLE9BQVMsQ0FBQyxFQUFnQixRQUFTLENBQ3ZELEVBQW1CLEVBQWEsRUFDaEMsT0FHRCxHQUFJLENBQ0gsRUFBcUIsRUFBZ0IsTUFBTyxFQUFnQixRQUFTLENBQ3BFLFFBQ0EsVUFBVyxFQUFnQixNQUFNLEtBQ2xDLENBQUMsRUFDQSxLQUFNLFNBRU4sQ0FDRCxFQUFtQixFQUFhLElBSzVCLEVBQTRCLElBQU0sQ0FDdkMsRUFBbUIsRUFBYSxHQUczQixFQUFrQixDQUFDLElBQTBCLENBQ2xELElBQVEsVUFBVyxFQUduQixHQUFJLEVBQU8sS0FBSyxTQUFTLE9BQVMsaUJBQ2pDLEVBQWUsU0FBUyxlQUFlLEVBQU8sS0FBSyxRQUFRLEtBQUssRUFDaEUsRUFBZSxRQUFVLEVBQU8sS0FBSyxRQUFRLE9BSXpDLEVBQWdCLENBQUMsSUFBd0IsQ0FDOUMsSUFBTSxFQUFlLEdBQWdCLEVBQU8sRUFBZSxPQUFPLEVBQ2xFLEdBQUksRUFBYyxDQUNqQixJQUFRLGNBQWEsV0FBWSxFQUNqQyxFQUFtQixFQUFhLENBQU8sRUFJeEMsRUFBZSxRQUFVLEtBQ3pCLEVBQWUsU0FBUyxlQUFlLElBQUksR0FHdEMsRUFBbUIsQ0FBQyxJQUE0QixDQUNyRCxFQUFlLFFBQVUsTUFJMUIsR0FBSSxFQUNILE9BQU8sRUFHUixPQUNDLGdCQW9CRSxDQW5CRCxHQVNFLEdBVEYsQ0FDQyxtQkFBb0IsR0FDcEIsYUFBYyxFQUNkLFVBQVcsRUFDWCxZQUFhLEVBQ2IsUUFBUyxFQUxWLFNBU0UsQ0FGQSxFQUNELEdBQUMsR0FBRCxDQUFrQixJQUFLLEVBQWdCLEdBQ3RDLEVBR0YsR0FBQyxHQUFELENBQ0MsV0FBWSxFQUFnQixPQUFPLE9BQVMsR0FDNUMsT0FBUSxFQUFnQixPQUN4QixRQUFTLEVBQ1QsVUFBVyxFQUNYLGNBQWMsT0FDZixHQUNDLEVldktKLG9CQUFTLGVBQVcsZUNEcEIsNENBQ0Esb0JBQVMsK0RBS1QsU0FBUyxFQUFRLEVBQ2hCLGVBQ0csR0FDb0QsQ0FDdkQsT0FDQyxHQWNvQixRQWRwQixDQUNDLFVBQVcsRUFDViw4ZUFDQSxDQUNELEVBQ0EsWUFBVSxjQUNOLEVBTkwsU0FRQyxHQUtvQixhQUxwQixDQUNDLFVBQVUsZ0VBQ1YsWUFBVSxxQkFGWCxTQUlDLEdBQUMsR0FBRCxDQUFXLFVBQVUsV0FBVyxFQUMvQixFQUNELEVDekJKLHVCQUFTLGlDQUNULG1CQUFTLHNCQUNULG9CQUFTLGFBQVcsZUFBUSxlQ0Y1QiwwQkFBUyx1QkFBaUIsc0JBQzFCLG1CQUFTLG1FQWVGLFNBQVMsRUFBUSxFQUN2QixXQUNBLGVBQ0EsV0FDQSxXQUNBLGlCQUFpQixFQUNqQixhQUNpQixDQUNqQixJQUFPLEVBQVcsR0FBZ0IsR0FBZ0IsSUFDakQsRUFBTSxHQUFnQixHQUFZLElBQUksSUFBTSxFQUFFLFFBQVEsT0FBTyxDQUM5RCxFQUVNLEVBQVEsR0FBYyxFQUFXLENBQWMsRUFDL0MsRUFBYyxFQUNqQixFQUFNLENBQVEsRUFBRSxPQUFPLFlBQVksRUFDbkMsT0FFRyxFQUFpQixFQUFZLEVBQU0sRUFBRyxDQUFjLEVBQUUsSUFBSSxDQUFDLElBQ2hFLEVBQUUsT0FBTyxJQUFJLENBQ2QsRUFFQSxPQUNDLEdBNkZFLE1BN0ZGLENBQ0MsVUFBVyxFQUFHLDhCQUErQixDQUFTLEVBQ3RELFlBQVUsV0FGWCxTQTZGRSxDQXpGRCxHQW9CRSxNQXBCRixDQUFLLFVBQVUseUNBQWYsU0FvQkUsQ0FuQkQsR0FPRSxFQVBGLENBQ0MsYUFBVyxpQkFDWCxRQUFTLElBQU0sRUFBYSxDQUFDLElBQU0sRUFBRSxTQUFTLEVBQUcsT0FBTyxDQUFDLEVBQ3pELEtBQUssT0FDTCxRQUFRLFFBSlQsU0FNQyxHQUFDLEdBQUQsQ0FBaUIsVUFBVSxTQUFTLEVBQ25DLEVBQ0YsR0FFRSxNQUZGLENBQUssVUFBVSxrQ0FBZixTQUNFLEVBQVUsT0FBTyxXQUFXLEVBQzVCLEVBQ0YsR0FPRSxFQVBGLENBQ0MsYUFBVyxhQUNYLFFBQVMsSUFBTSxFQUFhLENBQUMsSUFBTSxFQUFFLElBQUksRUFBRyxPQUFPLENBQUMsRUFDcEQsS0FBSyxPQUNMLFFBQVEsUUFKVCxTQU1DLEdBQUMsR0FBRCxDQUFrQixVQUFVLFNBQVMsRUFDcEMsR0FDRCxFQUVGLEdBa0VFLFFBbEVGLENBQ0MsVUFBVSx5QkFFVixLQUFLLE9BSE4sU0FrRUUsQ0E3REQsR0FZRSxRQVpGLFVBQ0MsR0FVRSxLQVZGLFVBQ0UsRUFBZSxJQUFJLENBQUMsRUFBTyxJQUMzQixHQU1FLEtBTkYsQ0FDQyxVQUFVLDZEQURYLFNBS0UsR0FGSSxDQUdKLENBQ0YsRUFDQSxFQUNELEVBQ0YsR0ErQ0UsUUEvQ0YsVUFDRSxFQUFNLElBQUksQ0FBQyxFQUFNLElBRWpCLEdBMENFLEtBMUNGLFVBQ0UsRUFBSyxJQUFJLENBQUMsSUFBUSxDQUNsQixJQUFNLEVBQVksQ0FBQyxFQUFJLE9BQU8sRUFBVyxPQUFPLEVBQzFDLEVBQWEsRUFBSSxPQUFPLFlBQVksSUFBTSxFQUMxQyxFQUFhLElBQVcsRUFBSSxPQUFPLENBQUMsR0FBSyxHQUMvQyxPQUNDLEdBaUNFLEtBakNGLENBQ0MsVUFBVSxrQkFDVixnQkFBZSxFQUNmLGVBQWMsRUFDZCxnQkFBZSxFQUdmLEtBQUssV0FDTCxTQUFVLEdBUlgsU0FVQyxHQXNCRSxTQXRCRixDQUNDLGdCQUFlLEVBQ2YsY0FBYSxFQUNiLFVBQVcsRUFDVixzREFDQSxDQUFDLEdBQWMsaUNBQ2YsR0FBYSwyQkFDYixFQUFRLENBQUcsR0FDVixDQUFDLEdBQ0QsbUNBQ0QsR0FDQyxpREFDRCxHQUFjLCtCQUNmLEVBQ0EsZ0JBQWUsRUFDZixnQkFBZSxFQUNmLFNBQVUsR0FBYyxFQUN4QixRQUFTLElBQU0sSUFBVyxFQUFJLE9BQU8sQ0FBQyxFQUN0QyxTQUFVLEVBQVksR0FBSyxFQUMzQixLQUFLLFNBbkJOLFNBcUJFLEVBQUksT0FBTyxHQUFHLEVBQ2QsR0EzQkcsRUFBSSxZQUFZLENBNEJwQixFQUVILEdBekNPLENBMENQLENBQ0YsRUFDQSxHQUNELEdBQ0QsRUNuSUosb0ZBS0EsU0FBUyxFQUFPLEtBQ1osR0FDbUQsQ0FDdEQsT0FBTyxHQUFrQixRQUFsQixDQUF1QixZQUFVLGFBQWMsRUFBTyxFQUc5RCxTQUFTLEVBQWMsS0FDbkIsR0FDc0QsQ0FDekQsT0FBTyxHQUFrQixXQUFsQixDQUEwQixZQUFVLHFCQUFzQixFQUFPLEVBR3pFLFNBQVMsRUFBYyxFQUN0QixZQUNBLFFBQVEsU0FDUixhQUFhLEtBQ1YsR0FDc0QsQ0FDekQsT0FDQyxHQVdtQixVQVhuQixVQUNDLEdBQWtCLFdBQWxCLENBQ0MsTUFBTyxFQUNQLFVBQVcsRUFDVixpZUFDQSxDQUNELEVBQ0EsWUFBVSxrQkFDVixXQUFZLEtBQ1IsRUFDTCxFQUNDLHNERlpHLFNBQVMsRUFBVSxFQUN6QixPQUNBLGdCQUNBLFdBQ0EsUUFBUSxjQUNSLFlBQ0EsWUFDbUIsQ0FDbkIsSUFBTSxFQUFpQixFQUN0QixDQUFDLElBQVksRUFBUSxjQUN0QixFQUNNLEVBQWEsR0FBaUMsSUFBSSxHQUNqRCxFQUFjLEdBQW1CLEdBQTJCLENBQUksRUFFdkUsR0FBVSxJQUFNLENBQ2YsRUFBZ0IsQ0FBSSxHQUNsQixDQUFDLENBQUksQ0FBQyxFQUVULElBQU0sRUFBbUIsQ0FBQyxJQUEyQixDQUVwRCxHQURBLEVBQWdCLENBQUksRUFDaEIsRUFDSCxFQUFXLFNBQVMsTUFBTSxFQUUzQixJQUFXLENBQUksR0FHaEIsT0FDQyxHQTZCRSxNQTdCRixDQUFLLFVBQVcsRUFBaEIsU0FDQyxHQTJCRSxHQTNCRixVQTJCRSxDQTFCRCxHQWVFLEdBZkYsQ0FBZ0IsUUFBTyxHQUF2QixTQUNDLEdBYUUsRUFiRixDQUNDLFVBQVcsRUFDVixvRkFDRCxFQUNBLGFBQVksQ0FBQyxFQUNiLFFBQVEsVUFMVCxTQWFFLENBTkQsR0FBQyxHQUFELEVBQWMsRUFDYixFQUNBLEVBQU0sQ0FBWSxFQUFFLE9BQU8sSUFBSSxFQUUvQixHQUFlLE9BQWYsVUFBTyxFQUFRLEdBRWYsRUFDRCxFQUNGLEdBU0UsR0FURixDQUFnQixNQUFNLFFBQVEsVUFBVSxhQUF4QyxTQVNFLENBUkQsR0FBQyxHQUFELENBQWMsSUFBSyxFQUFZLE1BQU8sQ0FBRSxRQUFTLE1BQU8sRUFBRyxFQUMzRCxHQUFDLEdBQUQsQ0FDQyxhQUFjLEVBQ2QsU0FBVSxFQUNWLGVBQWdCLEVBQ2hCLFNBQVUsRUFDVixTQUFVLEVBQ1gsR0FDQyxHQUNELEVBQ0QsMkNHM0VKLFNBQVMsRUFBSyxFQUFHLFlBQVcsVUFBUyxHQUF3QyxDQUM1RSxPQUNDLEdBQUMsUUFBRCxDQUNDLFVBQVcsRUFDVixrY0FDQSxnRkFDQSx5R0FDQSxDQUNELEVBQ0EsWUFBVSxRQUNWLEtBQU0sS0FDRixFQUNMLEVDaEJGLGtGQUtBLFNBQVMsRUFBSyxFQUNiLGVBQ0csR0FDaUQsQ0FDcEQsT0FDQyxHQUFnQixRQUFoQixDQUNDLFVBQVcsRUFDVixzTkFDQSxDQUNELEVBQ0EsWUFBVSxXQUNOLEVBQ0wsRUNqQkYsbUdBVUEsU0FBUyxFQUFVLEVBQ2xCLFlBQ0EsV0FDQSxtQkFDRyxHQUNnQixDQUNuQixPQUNDLEdBaUJzQixRQWpCdEIsQ0FDQyxVQUFXLEVBQUcsV0FBWSxDQUFTLEVBQ25DLFlBQVUsaUJBQ04sRUFITCxTQWlCRSxDQVpELEdBU3NCLFlBVHRCLElBQ0ssRUFDSixVQUFXLEVBQ1YscUpBQ0EsR0FBZSxTQUNoQixFQUNBLFlBQVUsdUJBTlgsU0FRRSxFQUNBLEVBQ0YsR0FBQyxHQUFELEVBQVcsRUFDWCxHQUFxQixVQUFyQixFQUE0QixHQUMzQixFQUlKLFNBQVMsRUFBUyxFQUNqQixZQUNBLGNBQWMsY0FDWCxHQUNxRSxDQUN4RSxPQUNDLEdBaUJzQix1QkFqQnRCLENBQ0MsVUFBVyxFQUNWLHFEQUNBLElBQWdCLFlBQ2YsNkNBQ0QsSUFBZ0IsY0FDZiwrQ0FDRCxDQUNELEVBQ0EsWUFBVSx3QkFDVixZQUFhLEtBQ1QsRUFYTCxTQWFDLEdBQXFCLG1CQUFyQixDQUNDLFVBQVUseUNBQ1YsWUFBVSxvQkFDWCxFQUNDLEVDN0RKLGdCQUFTLHNCQUNULG9CQUFTLGFBQVcsZUFBUSxlQ0Q1QixrQkFBUyxlQVNGLFNBQVMsRUFBeUIsRUFDeEMsYUFBYSxVQUNiLFVBQVUsUUFDVixVQUFVLFNBQ3dCLENBcUNsQyxNQUFPLENBQ04sWUFwQ21CLEdBQVEsSUFBTSxDQUNqQyxJQUFNLEVBQWtCLENBQUMsR0FDbEIsRUFBUyxHQUFhLEVBQVEsTUFBTSxHQUFHLEVBQUUsSUFBSSxNQUFNLEdBQ25ELEVBQVMsR0FBYSxFQUFRLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxFQUVwRCxFQUFrQixFQUFVLEdBQUssRUFDakMsRUFBa0IsRUFBVSxHQUFLLEVBRXZDLFFBQ0ssRUFBZSxFQUNuQixHQUFnQixFQUNoQixHQUFnQixHQUNmLENBQ0QsSUFBTSxFQUFRLEtBQUssTUFBTSxFQUFlLEVBQUUsRUFDcEMsRUFBVSxFQUFlLEdBRXpCLEVBQWEsR0FBRyxFQUFNLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxLQUFLLEVBQVEsU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLElBQzdGLEVBQU0sS0FBSyxDQUFVLEVBR3RCLE9BQU8sR0FDTCxDQUFDLEVBQVMsQ0FBTyxDQUFDLEVBZ0JwQixXQWRrQixDQUFDLElBQWlCLENBQ3BDLElBQU8sRUFBTyxHQUFXLEVBQUssTUFBTSxHQUFHLEVBQUUsSUFBSSxNQUFNLEVBQzdDLEVBQVMsR0FBUyxHQUFLLEtBQU8sS0FDOUIsRUFBZSxJQUFVLEVBQUksR0FBSyxFQUFRLEdBQUssRUFBUSxHQUFLLEVBRWxFLEdBQUksSUFBZSxVQUNsQixNQUFPLEdBQUcsRUFBTSxTQUFTLEVBQUUsU0FBUyxFQUFHLEdBQUcsS0FBSyxFQUFRLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxJQUdsRixNQUFPLEdBQUcsS0FBZ0IsRUFBUSxTQUFTLEVBQUUsU0FBUyxFQUFHLEdBQUcsS0FBSyxJQU1sRSxFQ2hERCxJQUFNLEdBQU8sQ0FBQyxJQUErQixPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUcsR0FBRyxFQUNoRSxHQUFrQixDQUFDLElBQ3hCLE9BQU8sSUFBUyxTQUFXLEdBQUssQ0FBSSxFQUFJLEVBWTVCLEVBQU8sQ0FFbkIsSUFBSyxDQUNKLEtBQU0sV0FDTixLQUFNLFdBQ04sSUFBSyxDQUFDLEVBQVksSUFBb0IsQ0FDckMsSUFBTSxFQUFPLFdBQVcsRUFBVSxDQUFHLElBQ3JDLE9BQU8sR0FBYyxLQUFPLEdBQUcsY0FBaUIsSUFBZSxHQUVoRSxTQUFVLENBQUMsRUFBeUIsSUFDbkMsR0FBRyxrQkFBc0IsSUFDMUIsT0FBUSxDQUFDLEVBQVksSUFDcEIsZUFBZSxFQUFVLENBQUcsS0FBSyxHQUNuQyxFQUdBLEtBQU0sQ0FDTCxJQUFLLENBQUMsRUFBWSxFQUF3QixFQUEwQixJQUFNLENBQ3pFLElBQU0sRUFBSSxFQUFVLENBQUcsRUFDdkIsT0FBTyxHQUFRLEtBQ1osWUFBWSxLQUFLLEdBQUssQ0FBSSxLQUFLLEdBQUssQ0FBTSxJQUMxQyxZQUFZLEtBRWhCLGFBQWMsQ0FBQyxJQUEwQixpQkFBaUIsR0FBSyxDQUFJLElBQ25FLFNBQVUsQ0FDVCxFQUNBLEVBQ0EsRUFDQSxJQUNJLENBQ0osSUFBTSxFQUFPLGlCQUFpQixFQUFVLENBQUcsS0FBSyxHQUFLLENBQUksS0FBSyxHQUFLLENBQU0sSUFDekUsT0FBTyxHQUFjLEtBQU8sR0FBRyxjQUFpQixJQUFlLEVBRWpFLEVBR0EsVUFBVyxDQUNWLFNBQVUsQ0FDVCxJQUFLLENBQUMsSUFBVyxnQkFBZ0IsR0FDbEMsRUFDQSxXQUFZLENBQ1gsSUFBSyxDQUFDLElBQVcsa0JBQWtCLElBQ25DLFNBQVUsQ0FBQyxJQUFtQix3QkFBd0IsSUFDdEQsTUFBTyxDQUFDLElBQWdCLG9CQUFvQixHQUM3QyxFQUNBLFlBQWEsQ0FBQyxFQUF3QyxJQUNyRCxHQUFHLFlBQXNCLEdBQzNCLEVBR0EsT0FBUSxDQUNQLFNBQVUsQ0FDVCxRQUFTLDJCQUNULFVBQVcsQ0FBQyxFQUFzQixJQUNqQyxZQUFZLGdCQUFtQixHQUFnQixDQUFJLEdBQ3JELEVBQ0EsUUFBUyxDQUFDLEVBQXdCLElBQ2pDLEdBQUcsb0JBQXVCLEVBQUssWUFBWSxJQUM1QyxLQUFNLENBQ0wsSUFBSyxDQUFDLElBQWUsbUJBQW1CLEVBQUksWUFBWSxJQUN4RCxLQUFNLENBQUMsRUFBWSxJQUNsQixvQkFBb0IsRUFBSSxZQUFZLEtBQUssSUFDMUMsU0FBVSxDQUFDLElBQW1CLHdCQUF3QixHQUN2RCxFQUNBLEtBQU0sQ0FDTCxNQUFPLENBQUMsRUFBa0IsSUFDekIsRUFBTyxjQUFjLEtBQVEsSUFBYSxjQUFjLElBQ3pELElBQUssQ0FBQyxFQUFrQixJQUN2QixZQUFZLEtBQVksR0FDMUIsQ0FDRCxFQUdBLFVBQVcsQ0FBQyxJQUFvQixjQUFjLEdBQWMsU0FJNUQsUUFBUyxJQUFJLElBQWtDLEVBQU0sS0FBSyxHQUFHLEVBSTdELFVBQVcsQ0FBQyxJQUNYLEVBQVEsQ0FBSSxFQUFJLG1CQUFxQixjQUFjLEVBQUssT0FBTyxHQUFHLElBR25FLFdBQVksQ0FBQyxJQUE2QixlQUFlLEdBQVEsS0FJakUsVUFBVyxDQUNWLFFBQVMsQ0FBQyxFQUFZLElBQW9ELENBQ3pFLElBQU0sRUFBTSxFQUFJLFlBQVksRUFDdEIsRUFBYSxHQUFTLE9BQVMsVUFBWSxHQUMzQyxFQUNMLEdBQVMsWUFBYyxLQUFPLGFBQWEsRUFBUSxhQUFlLEdBQ25FLE1BQU8saUJBQWlCLElBQU0sSUFBYSxJQUU3QyxDQUNELHNERnRHQSxJQUFNLEdBQWMsQ0FBQyxJQUF3QyxDQUU1RCxFQUFFLGdCQUFnQixHQWVaLFNBQVMsRUFBVSxFQUN6QixRQUNBLFdBQ0EsVUFBVSxRQUNWLFVBQVUsUUFDVixhQUFhLFVBQ2IsY0FBYyxpQkFDZCxZQUNBLFdBQVcsR0FDWCxRQUNtQixDQUNuQixJQUFPLEVBQU0sR0FBVyxHQUFTLEVBQUssR0FDL0IsRUFBUSxHQUFhLEdBQVMsRUFBRSxFQUNqQyxFQUFXLEdBQXlCLElBQUksRUFDeEMsRUFBYSxHQUEwQixJQUFJLEdBQzFDLEVBQWMsR0FBbUIsR0FBaUIsQ0FBQyxHQUVsRCxjQUFhLGNBQWUsR0FBMEIsQ0FDN0QsYUFDQSxVQUNBLFNBQ0QsQ0FBQyxFQUdLLEVBQWtCLEVBQVksT0FBTyxDQUFDLElBQVMsQ0FFcEQsT0FEc0IsRUFBVyxDQUFJLEVBQ2hCLFlBQVksRUFBRSxTQUFTLEVBQU8sWUFBWSxDQUFDLEVBQ2hFLEVBRUssRUFBZSxDQUFDLElBQWlCLENBQ3RDLEVBQVMsQ0FBSSxFQUNiLEVBQVEsRUFBSyxFQUNiLEVBQVUsRUFBRSxHQUliLEdBQVUsSUFBTSxDQUNmLEdBQUksRUFBTSxDQUNULEdBQUksRUFBVyxRQUNkLEVBQWdCLEVBQVcsUUFBUSxXQUFXLEVBRS9DLFdBQVcsSUFBTSxDQUNoQixFQUFTLFNBQVMsTUFBTSxHQUN0QixDQUFDLElBRUgsQ0FBQyxDQUFJLENBQUMsRUFFVCxJQUFNLEVBQW9CLEVBQVEsRUFBVyxDQUFLLEVBQUksRUFFdEQsT0FDQyxHQTBERSxHQTFERixDQUFTLGFBQWMsRUFBUyxLQUFNLEVBQXRDLFNBMERFLENBekRELEdBY0UsR0FkRixDQUFnQixRQUFPLEdBQXZCLFNBQ0MsR0FZRSxFQVpGLENBQ0MsZ0JBQWMsc0JBQ2QsZ0JBQWUsRUFDZixVQUFXLEVBQUcsdUJBQXdCLENBQVMsRUFDL0MsY0FBYSxFQUFLLFdBQVcsQ0FBSSxFQUNqQyxTQUFVLEVBQ1YsSUFBSyxFQUNMLEtBQUssV0FDTCxRQUFRLFVBUlQsU0FZRSxDQUZELEdBQUMsR0FBRCxDQUFPLFVBQVUsZUFBZSxFQUMvQixHQUNBLEVBQ0QsRUFDRixHQXlDRSxHQXpDRixDQUNDLE1BQU0sUUFDTixVQUFVLE1BQ1YsTUFBTyxDQUFFLE1BQU8sQ0FBYSxFQUg5QixTQXlDRSxDQXBDRCxHQVFFLE1BUkYsQ0FBSyxVQUFVLGVBQWYsU0FDQyxHQUFDLEdBQUQsQ0FDQyxVQUFVLE1BQ1YsU0FBVSxDQUFDLElBQU0sRUFBVSxFQUFFLE9BQU8sS0FBSyxFQUN6QyxZQUFZLGlCQUNaLElBQUssRUFDTCxNQUFPLEVBQ1IsRUFDQyxFQUNGLEdBMEJFLEdBMUJGLENBQVksVUFBVSxZQUFZLFFBQVMsR0FBM0MsU0FDQyxHQXdCRSxNQXhCRixDQUFLLFVBQVUsTUFBZixTQUNFLEVBQWdCLFNBQVcsRUFDM0IsR0FFRSxNQUZGLENBQUssVUFBVSxpREFBZixlQUVFLEVBRUYsRUFBZ0IsSUFBSSxDQUFDLElBQVMsQ0FDN0IsSUFBTSxFQUFhLEVBQVcsQ0FBSSxFQUVsQyxPQUNDLEdBVUUsU0FWRixDQUNDLFVBQVcsRUFDViwwS0FKZ0IsSUFBUyxHQUtYLGtDQUNmLEVBRUEsUUFBUyxJQUFNLEVBQWEsQ0FBSSxFQUNoQyxLQUFLLFNBUE4sU0FTRSxHQUpJLENBS0osRUFFSCxFQUVELEVBQ0QsR0FDRCxHQUNELEVHaklHLElBQU0sR0FBZ0IsQ0FDNUIsRUFDQSxJQUNhLENBQ2IsR0FBSSxDQUFDLEVBQ0osTUFBTyxHQUdSLElBQUksRUFBVyxHQVFmLE9BUEEsR0FBcUIsRUFBZSxDQUNuQyxPQUNBLFFBQVMsSUFBTSxDQUNkLEVBQVcsR0FFYixDQUFDLEVBRU0sR0FnQkssR0FBaUIsRUFDN0IsT0FDQSxPQUNBLFNBQVMsRUFDVCxtQkFDcUMsQ0FFckMsR0FBSSxDQUFDLEVBQ0osTUFBTyxHQUlSLEdBQUksSUFBUyxPQUNaLE9BQU8sR0FBYyxFQUFNLENBQWEsRUFHekMsSUFBSSxFQUFtQixHQUNqQixFQUFpQixFQUFPLEdBQUssRUFtQm5DLE9BakJBLEdBQXFCLEVBQWUsQ0FDbkMsT0FDQSxRQUFTLENBQUMsSUFBVyxDQUdwQixJQUFNLEVBQVMsRUFBTyxXQUFhLEVBQzdCLEVBQU8sRUFBTyxTQUFXLEdBRXpCLEVBQWUsRUFBUyxHQUN4QixFQUFhLEVBQU8sR0FFMUIsR0FBSSxHQUFrQixHQUFnQixFQUFpQixFQUN0RCxFQUFtQixHQUd0QixDQUFDLEVBRU0sR0FNSyxHQUF1QixDQUNuQyxFQUNBLElBSUksQ0FDSixJQUFRLE9BQU0sV0FBWSxFQUMxQixHQUFJLENBQUMsRUFBSSxPQUVULElBQU0sRUFBVSxNQUFNLFFBQVEsQ0FBRSxFQUFJLEVBQUssQ0FBQyxDQUFFLEVBRTVDLFFBQVcsS0FBVSxFQUNwQixHQUFJLEdBQVEsRUFBTyxXQUFZLENBQzlCLElBQU0sRUFBWSxFQUFLLElBQUksRUFDM0IsR0FDQyxFQUFPLFdBQVcsS0FBSyxDQUFDLElBQU0sR0FBcUIsS0FBTyxDQUFTLEVBRW5FLEVBQVEsQ0FBTSxFQUdmLE9BQVEsQ0FBTSxHQWNKLEdBQThCLENBQUMsSUFLbEIsQ0FDekIsSUFDQyxXQUNBLGdCQUNBLHdCQUF3QixDQUFDLEVBQ3pCLHdCQUNHLEVBRUEsRUFBVyxHQUNYLEVBQVMsRUFDVCxFQUFtQixHQUVqQixFQUFVLENBQUMsSUFBMEIsQ0FDMUMsRUFBbUIsR0FDbkIsRUFBVyxLQUFLLElBQUksRUFBVSxFQUFPLFdBQWEsQ0FBQyxFQUNuRCxFQUFTLEtBQUssSUFBSSxFQUFRLEVBQU8sU0FBVyxFQUFFLEdBS3pDLEVBQWEsQ0FBQyxJQUFpQixDQUNwQyxHQUFxQixFQUFlLENBQUUsT0FBTSxTQUFRLENBQUMsRUFDckQsUUFBVyxLQUFPLEVBQ2pCLEdBQXFCLEVBQUssQ0FBRSxPQUFNLFNBQVEsQ0FBQyxHQUk3QyxRQUFXLEtBQVEsRUFBVSxFQUFXLENBQUksRUFHNUMsR0FBSSxDQUFDLEdBQW9CLEdBRXhCLEdBREEsRUFBVyxFQUNQLENBQUMsRUFDSixFQUFXLEVBQ1gsRUFBUyxHQUNULEVBQW1CLEdBSXJCLE1BQU8sQ0FBRSxXQUFVLFNBQVEsa0JBQWlCLEdDaEt0QyxJQUFNLEdBQWdCLENBQzVCLEVBQ0EsRUFDQSxJQUNXLENBQ1gsSUFBTyxFQUFPLEdBQVcsRUFBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFDN0MsRUFBTyxFQUFNLENBQUksRUFBRSxLQUFLLENBQUssRUFBRSxPQUFPLENBQU8sRUFDbkQsT0FBTyxFQUFXLEVBQUssS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUksR0FHL0IsR0FBbUIsQ0FDL0IsRUFDQSxFQUNBLElBQ1csQ0FDWCxJQUFPLEVBQU8sR0FBVyxFQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxFQUM3QyxFQUFPLEVBQU0sQ0FBSSxFQUFFLEtBQUssQ0FBSyxFQUFFLE9BQU8sQ0FBTyxFQUNuRCxPQUFPLEVBQVcsRUFBSyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBSSxHQUdqQyxHQUFxQixDQUNqQyxFQUNBLElBQ0ksQ0FDSixHQUFJLENBQUMsRUFBZSxNQUFPLENBQUUsSUFBSyxRQUFTLElBQUssT0FBUSxFQUV4RCxJQUFNLEVBQVksRUFBTSxDQUFJLEdBRXBCLFdBQVUsU0FBUSxvQkFBcUIsR0FBNEIsQ0FDMUUsU0FBVSxDQUFDLENBQVMsRUFDcEIsZ0JBQ0EscUJBQXNCLEVBQ3ZCLENBQUMsRUFFRCxHQUFJLENBQUMsRUFDSixNQUFPLENBQUUsSUFBSyxRQUFTLElBQUssT0FBUSxFQUdyQyxNQUFPLENBQ04sSUFBSyxHQUFHLEVBQVMsU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLE9BQzNDLElBQUssSUFBSSxFQUFTLEdBQUcsU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLE1BQ2hELEdDN0NELG9CQUFTLGVBQW9CLGVBRTdCLGdCQUFTLHdEQ0VULFNBQVMsRUFBSSxFQUFHLGVBQWMsR0FBc0MsQ0FDbkUsT0FDQyxHQUFDLE1BQUQsQ0FDQyxVQUFXLEVBQ1YsdUVBQ0EsQ0FDRCxFQUNBLFlBQVUsVUFDTixFQUNMLEVBSUYsU0FBUyxFQUFVLEVBQUcsZUFBYyxHQUFzQyxDQUN6RSxPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVcsRUFDVixnSkFDQSxDQUNELEVBQ0EsWUFBVSxpQkFDTixFQUNMLEVBSUYsU0FBUyxFQUFTLEVBQUcsZUFBYyxHQUFzQyxDQUN4RSxPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVcsRUFBRyw2QkFBOEIsQ0FBUyxFQUNyRCxZQUFVLGdCQUNOLEVBQ0wsRUEyQkYsU0FBUyxFQUFXLEVBQUcsZUFBYyxHQUFzQyxDQUMxRSxPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVcsRUFBRyxXQUFZLENBQVMsRUFDbkMsWUFBVSxrQkFDTixFQUNMLEVDckVGLHlDQUNBLG9CQUFTLHNCQUFXLG9CQUFpQix5RUFLckMsU0FBUyxFQUFNLEtBQ1gsR0FDa0QsQ0FDckQsT0FBTyxFQUFpQixPQUFqQixDQUFzQixZQUFVLFlBQWEsRUFBTyxFQVM1RCxTQUFTLEVBQVcsS0FDaEIsR0FDbUQsQ0FDdEQsT0FBTyxFQUFpQixRQUFqQixDQUF1QixZQUFVLGtCQUFtQixFQUFPLEVBR25FLFNBQVMsRUFBYSxFQUNyQixZQUNBLE9BQU8sVUFDUCxjQUNHLEdBR0QsQ0FDRixPQUNDLEdBYWtCLFVBYmxCLENBQ0MsVUFBVyxFQUNWLDZ5QkFDQSxDQUNELEVBQ0EsWUFBVyxFQUNYLFlBQVUsb0JBQ04sRUFQTCxTQWFFLENBSkEsRUFDRCxFQUVrQixPQUZsQixDQUFzQixRQUFPLEdBQTdCLFNBQ0MsRUFBQyxHQUFELENBQWlCLFVBQVUsb0JBQW9CLEVBQzlDLEdBQ0QsRUFJSixTQUFTLEVBQWEsRUFDckIsWUFDQSxXQUNBLFdBQVcsU0FDWCxRQUFRLFlBQ0wsR0FDcUQsQ0FDeEQsT0FDQyxFQXlCa0IsU0F6QmxCLFVBQ0MsR0F1QmtCLFVBdkJsQixDQUNDLE1BQU8sRUFDUCxVQUFXLEVBQ1YsNGlCQUNBLElBQWEsVUFDWixrSUFDRCxDQUNELEVBQ0EsWUFBVSxpQkFDVixTQUFVLEtBQ04sRUFWTCxTQXVCRSxDQVhELEVBQUMsR0FBRCxFQUFzQixFQUN0QixFQVFrQixXQVJsQixDQUNDLFVBQVcsRUFDVixNQUNBLElBQWEsVUFDWiwyRkFDRixFQUxELFNBT0UsRUFDQSxFQUNGLEVBQUMsR0FBRCxFQUF3QixHQUN2QixFQUNELEVBaUJKLFNBQVMsRUFBVSxFQUNsQixZQUNBLGNBQ0csR0FDa0QsQ0FDckQsT0FDQyxHQWNrQixPQWRsQixDQUNDLFVBQVcsRUFDVix3YUFDQSxDQUNELEVBQ0EsWUFBVSxpQkFDTixFQU5MLFNBY0UsQ0FORCxFQUlFLE9BSkYsQ0FBTSxVQUFVLDZEQUFoQixTQUNDLEVBRWtCLGdCQUZsQixVQUNDLEVBQUMsR0FBRCxDQUFXLFVBQVUsU0FBUyxFQUM3QixFQUNELEVBQ0YsRUFBc0QsV0FBdEQsVUFBMkIsRUFBVyxHQUNyQyxFQWlCSixTQUFTLEVBQW9CLEVBQzVCLGVBQ0csR0FDNEQsQ0FDL0QsT0FDQyxFQVNrQixpQkFUbEIsQ0FDQyxVQUFXLEVBQ1YsdURBQ0EsQ0FDRCxFQUNBLFlBQVUsNkJBQ04sRUFOTCxTQVFDLEVBQUMsR0FBRCxDQUFlLFVBQVUsU0FBUyxFQUNqQyxFQUlKLFNBQVMsRUFBc0IsRUFDOUIsZUFDRyxHQUM4RCxDQUNqRSxPQUNDLEVBU2tCLG1CQVRsQixDQUNDLFVBQVcsRUFDVix1REFDQSxDQUNELEVBQ0EsWUFBVSwrQkFDTixFQU5MLFNBUUMsRUFBQyxHQUFELENBQWlCLFVBQVUsU0FBUyxFQUNuQyxvRUZySkosSUFBTSxHQUFXLENBQ2hCLE1BQU8sR0FBTSxNQUNiLE9BQVEsR0FBTSxPQUNkLFFBQVMsR0FBTSxRQUNmLE9BQVEsR0FBTSxNQUNmLEVBQ00sR0FBYyxPQUFPLFlBQzFCLE9BQU8sUUFBUSxFQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUcsS0FBTyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQ2hELEVBQ00sR0FBVyxDQUNoQixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEVBQ1AsRUFFTSxHQUFZLENBQ2pCLENBQUUsS0FBTSxRQUFTLEdBQUksUUFBUyxTQUFVLE9BQVEsRUFDaEQsQ0FBRSxLQUFNLFFBQVMsR0FBSSxRQUFTLFNBQVUsT0FBUSxFQUNoRCxDQUFFLEtBQU0sUUFBUyxHQUFJLEtBQU0sU0FBVSxJQUFLLENBQzNDLEVBQ00sR0FBVyxDQUFDLElBQWMsS0FBSyxJQUFJLEVBQUcsT0FBTyxTQUFTLEVBQUcsRUFBRSxHQUFLLENBQUMsRUFFakUsR0FBaUIsQ0FDdEIsRUFDQSxJQUNJLENBQ0osR0FBSSxDQUFDLEVBQ0osT0FBTyxFQUFFLGtCQUFrQixFQUU1QixHQUFJLENBQ0gsSUFBTSxFQUFPLElBQUksR0FBTSxDQUFJLEVBQUUsT0FBTyxFQUNwQyxPQUFPLEdBQVEsQ0FBQyxFQUFLLFlBQVksRUFBRSxTQUFTLE9BQU8sRUFDaEQsRUFBSyxPQUFPLENBQUMsRUFBRSxZQUFZLEVBQUksRUFBSyxNQUFNLENBQUMsRUFDM0MsRUFBRSxrQkFBa0IsRUFDdEIsS0FBTSxDQUNQLE9BQU8sRUFBRSxrQkFBa0IsSUFTaEIsR0FBb0MsRUFBRyxRQUFPLGNBQWUsQ0FDekUsSUFBUSxJQUFHLGtCQUFtQixFQUF3QixDQUFDLEtBQVMsQ0FDL0QsRUFBRyxFQUFJLEVBQ1AsZUFBZ0IsRUFBSSxjQUNyQixFQUFFLEdBQ0ssRUFBTSxHQUFXLEdBQVMsQ0FBQyxDQUFDLENBQUssR0FDakMsRUFBTSxHQUFXLEdBQThCLElBQU0sR0FBUyxJQUFJLEVBRW5FLEVBQWtCLEdBQVMsSUFBSSxDQUFDLEVBQU8sS0FBVyxDQUN2RCxRQUNBLE1BQU8sRUFBTSxFQUFFLElBQUksQ0FBSyxFQUFFLE9BQU8sS0FBSyxDQUN2QyxFQUFFLEVBQ0ksRUFBVyxHQUFTLElBQ3pCLENBQUMsRUFBRyxJQUFNLEVBQWlCLEdBQUksR0FBa0IsRUFDbEQsRUFFQSxHQUFVLElBQU0sQ0FFZixHQURBLEVBQVEsQ0FBQyxDQUFDLENBQUssRUFDWCxFQUNILEVBQVEsQ0FBSyxHQUVaLENBQUMsQ0FBSyxDQUFDLEVBRVYsSUFBTSxFQUFTLENBQUMsSUFBNkIsQ0FDNUMsR0FBSSxDQUFDLEVBQ0osT0FFRCxJQUFNLEVBQU8sSUFBSyxLQUFTLENBQUUsRUFDN0IsRUFBUSxDQUFJLEVBQ1osRUFBUyxFQUFPLEVBQU8sSUFBSSxHQUd0QixFQUFTLENBQUMsSUFBcUIsQ0FFcEMsR0FEQSxFQUFRLENBQU8sRUFDWCxDQUFDLEVBQVMsQ0FDYixFQUFTLElBQUksRUFDYixPQUVELEdBQUksRUFBTSxDQUNULEVBQVMsQ0FBSSxFQUNiLE9BRUQsSUFBTSxFQUFNLENBQUUsS0FBTSxHQUFNLE1BQU8sU0FBVSxDQUFFLEVBQzdDLEVBQVEsQ0FBRyxFQUNYLEVBQVMsQ0FBRyxHQUdQLEVBQVksQ0FBQyxJQUFjLENBQ2hDLElBQU0sRUFBUSxHQUFNLFdBQTJCLENBQUMsRUFDMUMsRUFBTSxHQUFTLEdBQ2YsRUFBTyxFQUFLLFNBQVMsQ0FBRyxFQUMzQixFQUFLLE9BQU8sQ0FBQyxJQUFNLElBQU0sQ0FBRyxFQUM1QixDQUFDLEdBQUcsRUFBTSxDQUFHLEVBQ2hCLEVBQU8sQ0FBRSxVQUFXLEVBQUssT0FBUyxFQUFPLE1BQVUsQ0FBQyxHQUcvQyxFQUFhLENBQUMsSUFBc0MsQ0FDekQsSUFBTSxFQUEyQixDQUFFLE1BQU8sT0FBVyxNQUFPLE1BQVUsRUFDdEUsR0FBSSxJQUFTLFFBQ1osRUFBRSxNQUFRLEdBQU0sT0FBUyxFQUUxQixHQUFJLElBQVMsUUFDWixFQUFFLE1BQVEsR0FBTSxPQUFTLEVBQU0sRUFBRSxJQUFJLEVBQUcsT0FBTyxFQUFFLE1BQU0sS0FBSyxFQUFFLE9BQU8sRUFFdEUsRUFBTyxDQUFDLEdBR0gsRUFBVSxHQUFNLE1BQVEsUUFBVSxHQUFNLE1BQVEsUUFBVSxRQUMxRCxFQUFPLEdBQVksR0FBTSxNQUFRLEdBQU0sUUFBVSxRQUNqRCxFQUFZLE1BQU0sUUFBUSxHQUFNLFNBQVMsRUFDNUMsRUFBSyxVQUNMLEdBQU0sVUFDTCxDQUFDLEVBQUssU0FBUyxFQUNmLENBQUMsRUFFTCxPQUNDLEdBMklFLEdBM0lGLENBQU0sY0FBWSxvQkFBbEIsU0EySUUsQ0ExSUQsR0FlRSxHQWZGLENBQVksVUFBVSxPQUF0QixTQWVFLENBZEQsR0FRRSxNQVJGLENBQUssVUFBVSw4QkFBZixTQVFFLENBUEQsRUFBQyxHQUFELENBQ0MsUUFBUyxFQUNULGNBQVksb0JBQ1osR0FBRyxZQUNILGdCQUFpQixFQUNsQixFQUNBLEVBQThDLEdBQTlDLENBQVcsVUFBVSxVQUFyQixTQUFnQyxFQUFFLFFBQVEsRUFBSSxHQUM3QyxFQUNELEdBQVEsR0FDUixFQUVFLElBRkYsQ0FBRyxVQUFVLGdDQUFiLFNBQ0UsR0FBZSxFQUFPLENBQUMsRUFDdkIsR0FFRixFQUVELEdBQ0EsRUFzSEUsR0F0SEYsQ0FBYSxVQUFVLE9BQXZCLFNBQ0MsR0FvSEUsTUFwSEYsQ0FBSyxVQUFVLFlBQWYsU0FvSEUsQ0FuSEQsR0EwQ0UsTUExQ0YsQ0FBSyxVQUFVLHlCQUFmLFNBMENFLENBekNELEdBeUJFLE1BekJGLFVBeUJFLENBeEJELEVBRUUsR0FGRixDQUFPLFVBQVUsVUFBVSxRQUFRLFlBQW5DLFNBQ0UsRUFBRSxTQUFTLEVBQ1gsRUFDRixHQW9CRSxHQXBCRixDQUNDLGNBQWUsQ0FBQyxJQUNmLEVBQU8sQ0FBRSxLQUFNLEdBQVMsRUFBNEIsQ0FBQyxFQUV0RCxNQUFPLEVBSlIsU0FvQkUsQ0FkRCxFQU1FLEdBTkYsQ0FDQyxVQUFVLE1BQ1YsY0FBWSxtQkFDWixHQUFHLFlBSEosU0FLQyxFQUFDLEdBQUQsRUFBYSxFQUNaLEVBQ0YsRUFNRSxHQU5GLFVBQ0UsT0FBTyxLQUFLLEVBQVEsRUFBRSxJQUFJLENBQUMsSUFDM0IsRUFFRSxHQUZGLENBQW9CLE1BQU8sRUFBM0IsU0FDRSxFQUFFLEVBQUUsWUFBWSxDQUFDLEdBREYsQ0FFZixDQUNGLEVBQ0EsR0FDRCxHQUNELEVBQ0YsR0FjRSxNQWRGLFVBY0UsQ0FiRCxFQUVFLEdBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUSxXQUFuQyxTQUNFLEVBQUUsT0FBTyxFQUNULEVBQ0YsRUFBQyxHQUFELENBQ0MsVUFBVSxNQUNWLEdBQUcsV0FDSCxJQUFJLElBQ0osU0FBVSxDQUFDLElBQ1YsRUFBTyxDQUFFLFNBQVUsR0FBUyxFQUFFLE9BQU8sS0FBSyxDQUFFLENBQUMsRUFFOUMsS0FBSyxTQUNMLE1BQU8sR0FBTSxVQUFZLEVBQzFCLEdBQ0MsR0FDRCxFQUVELEdBQU0sT0FBUyxHQUFNLFFBQ3JCLEdBc0JFLE1BdEJGLFVBc0JFLENBckJELEVBQTRDLEdBQTVDLENBQU8sVUFBVSxVQUFqQixTQUE0QixFQUFFLFVBQVUsRUFBSSxFQUM1QyxFQW1CRSxNQW5CRixDQUFLLFVBQVUsNEJBQWYsU0FDRSxFQUFTLElBQUksQ0FBQyxFQUFHLElBQ2pCLEdBZUUsTUFmRixDQUNDLFVBQVUsOEJBRFgsU0FlRSxDQVhELEVBQUMsR0FBRCxDQUNDLFFBQVMsRUFBVSxTQUFTLEVBQUUsS0FBSyxFQUNuQyxHQUFJLEVBQUssUUFBUSxNQUFPLENBQUMsRUFDekIsZ0JBQWlCLElBQU0sRUFBVSxDQUFDLEVBQ25DLEVBQ0EsRUFLRSxHQUxGLENBQ0MsVUFBVSx5QkFDVixRQUFTLEVBQUssUUFBUSxNQUFPLENBQUMsRUFGL0IsU0FJRSxFQUFFLE1BQ0YsSUFaRyxFQUFLLFFBQVEsVUFBVyxDQUFDLENBYTdCLENBQ0YsRUFDQSxHQUNELEVBR0gsR0E0Q0UsTUE1Q0YsVUE0Q0UsQ0EzQ0QsRUFBd0MsR0FBeEMsQ0FBTyxVQUFVLFVBQWpCLFNBQTRCLEVBQUUsTUFBTSxFQUFJLEVBQ3hDLEVBeUNFLE1BekNGLENBQUssVUFBVSxpQkFBZixTQUNFLEdBQVUsSUFBSSxFQUFHLE9BQU0sS0FBSSxjQUMzQixHQXFDRSxNQXJDRixDQUFLLFVBQVUsOEJBQWYsU0FxQ0UsQ0FwQ0QsRUFBQyxHQUFELENBQ0MsUUFBUyxJQUFZLEVBQ3JCLEdBQUksRUFDSixnQkFBaUIsSUFBTSxFQUFXLENBQUksRUFDdkMsRUFDQSxFQUVFLEdBRkYsQ0FBTyxVQUFVLFVBQVUsUUFBUyxFQUFwQyxTQUNFLEVBQUUsQ0FBUSxFQUNWLEVBQ0QsSUFBUyxTQUFXLElBQVksU0FDaEMsZ0JBWUUsQ0FYRCxFQUFDLEdBQUQsQ0FDQyxVQUFVLG1CQUNWLGNBQVksY0FDWixJQUFJLElBQ0osU0FBVSxDQUFDLElBQ1YsRUFBTyxDQUFFLE1BQU8sR0FBUyxFQUFFLE9BQU8sS0FBSyxDQUFFLENBQUMsRUFFM0MsS0FBSyxTQUNMLE1BQU8sR0FBTSxPQUFTLEVBQ3ZCLEVBQ0EsRUFBOEMsT0FBOUMsQ0FBTSxVQUFVLFVBQWhCLFNBQTJCLEVBQUUsYUFBYSxFQUFJLEdBQzdDLEVBRUYsSUFBUyxTQUFXLElBQVksU0FDaEMsRUFBQyxHQUFELENBQ0MsVUFBVSxNQUNWLEtBQU0sR0FBTSxPQUFTLE9BQ3JCLFNBQVUsQ0FBQyxJQUNWLEVBQU8sQ0FDTixNQUFPLEVBQ0osRUFBTSxDQUFDLEVBQUUsTUFBTSxLQUFLLEVBQUUsT0FBTyxFQUM3QixNQUNKLENBQUMsRUFFSCxJQW5DZ0QsQ0FxQ2hELENBQ0YsRUFDQSxHQUNELEdBQ0QsRUFDRCxHQUVGLEdHM1JKLHNCQUFTLGVBQWEsZUFhdEIsSUFBTSxHQUE0QixDQUNqQyxPQUFRLEdBQ1IsY0FBZSxPQUNmLE1BQU8sSUFDUixFQUVPLFNBQVMsRUFBd0IsQ0FBQyxFQUF5QixDQUNqRSxJQUFRLHVCQUFzQix3QkFDN0IsRUFBd0IsQ0FBQyxLQUFhLENBQ3JDLHFCQUFzQixFQUFRLHFCQUM5QixxQkFBc0IsRUFBUSxvQkFDL0IsRUFBRSxHQUVJLEVBQWEsR0FBa0IsR0FBc0IsRUFBWSxFQUVsRSxFQUFpQixHQUN0QixDQUFDLEVBQXNCLElBQW9DLENBQzFELEVBQWUsQ0FDZCxPQUFRLEdBQ1IsY0FBZSxPQUNmLFFBQ0EsVUFDQSxVQUFXLENBQUMsSUFBK0IsQ0FDMUMsRUFBcUIsRUFBTyxFQUFTLENBQ3BDLFFBQ0EsVUFBVyxFQUFNLEtBQ2xCLENBQUMsRUFFSCxDQUFDLEdBRUYsQ0FBQyxDQUFvQixDQUN0QixFQUVNLEVBQW1CLEdBQ3hCLENBQUMsSUFBeUIsQ0FDekIsRUFBZSxDQUNkLE9BQVEsR0FDUixjQUFlLFNBQ2YsUUFDQSxVQUFXLENBQUMsSUFBK0IsQ0FDMUMsRUFBcUIsRUFBTyxDQUMzQixRQUNBLFVBQVcsRUFBTSxLQUNsQixDQUFDLEVBRUgsQ0FBQyxHQUVGLENBQUMsQ0FBb0IsQ0FDdEIsRUFFTSxFQUFjLEdBQVksSUFBTSxFQUFlLEVBQVksRUFBRyxDQUFDLENBQUMsRUFFaEUsRUFBZ0IsR0FDckIsQ0FBQyxJQUErQixDQUMvQixHQUFJLEVBQVksVUFDZixFQUFZLFVBQVUsQ0FBSyxFQUU1QixFQUFZLEVBRVosSUFBYSxHQUVkLENBQUMsRUFBYSxFQUFhLENBQVUsQ0FDdEMsRUFFQSxNQUFPLENBQ04sY0FDQSxpQkFDQSxtQkFDQSxjQUNBLGVBQ0QsRUNuRkQsa0JBQVMsZUFTRixJQUFNLEdBQTRCLENBQ3hDLElBQ2lELENBQ2pELElBQVEsZ0JBQWUsbUJBQW9CLEVBQXdCLENBQUMsS0FBUyxDQUM1RSxjQUFlLEVBQUksY0FDbkIsZ0JBQWlCLEVBQUksZUFDdEIsRUFBRSxFQUVGLE9BQU8sR0FBUSxJQUFNLENBQ3BCLEdBQUksR0FBYyxNQUFRLEVBQWlCLENBQzFDLElBQU0sRUFBVyxFQUFnQixDQUFVLEVBQzNDLEdBQUksR0FBVSxjQUNiLE9BQU8sRUFBUyxjQUdsQixPQUFPLEdBQ0wsQ0FBQyxFQUFZLEVBQWlCLENBQWEsQ0FBQyxxRWpCRWhELElBQU0sR0FBZ0IsQ0FDckIsQ0FBRSxNQUFPLDRCQUE2QixNQUFPLE1BQU8sRUFDcEQsQ0FBRSxNQUFPLDhCQUErQixNQUFPLE9BQVEsRUFDdkQsQ0FBRSxNQUFPLGdDQUFpQyxNQUFPLFFBQVMsRUFDMUQsQ0FBRSxNQUFPLDBCQUEyQixNQUFPLEtBQU0sRUFDakQsQ0FBRSxNQUFPLGdDQUFpQyxNQUFPLFFBQVMsRUFDMUQsQ0FBRSxNQUFPLDRCQUE2QixNQUFPLE1BQU8sRUFDcEQsQ0FBRSxNQUFPLGdDQUFpQyxNQUFPLFFBQVMsRUFDMUQsQ0FBRSxNQUFPLDhCQUErQixNQUFPLE9BQVEsRUFDdkQsQ0FBRSxNQUFPLGtDQUFtQyxNQUFPLFNBQVUsRUFDN0QsQ0FBRSxNQUFPLDBCQUEyQixNQUFPLEtBQU0sRUFDakQsQ0FBRSxNQUFPLGdDQUFpQyxNQUFPLFFBQVMsRUFDMUQsQ0FBRSxNQUFPLDRCQUE2QixNQUFPLE1BQU8sRUFDcEQsQ0FBRSxNQUFPLDRCQUE2QixNQUFPLE1BQU8sRUFDcEQsQ0FBRSxNQUFPLGdDQUFpQyxNQUFPLFFBQVMsQ0FDM0QsRUFnQk0sR0FBcUIsRUFDMUIsT0FDQSxRQUNBLGNBQ0EsUUFDQSxXQUFXLEdBQ1gsY0FFQSxHQWFFLE1BYkYsQ0FBSyxVQUFVLHNCQUFmLFNBYUUsQ0FaRCxFQUVFLEdBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFTLEVBQS9DLFNBQ0UsRUFDQSxFQUNGLEVBQUMsR0FBRCxDQUNDLFVBQVUscUJBQ1YsR0FBSSxFQUNKLEtBQU0sRUFDTixTQUFVLEVBQ1YsWUFBYSxFQUNiLFNBQVUsRUFDVixNQUFPLEVBQ1IsR0FDQyxFQVlVLEdBQXNDLEVBQ2xELGdCQUNBLFVBQ0EsV0FDQSxXQUNBLFdBQ0ssQ0FDTCxJQUNDLGNBQ0EsaUJBQ0EsbUJBQ0EsY0FDQSxpQkFDRyxHQUF5QixDQUFPLEdBRTVCLDJCQUEwQixJQUFHLGNBQWUsRUFDbkQsQ0FBQyxLQUFhLENBQ2IseUJBQTBCLEVBQVEseUJBQ2xDLEVBQUcsRUFBUSxFQUNYLFdBQVksRUFBUSxVQUNyQixFQUNELEVBQ00sRUFBeUIsR0FDOUIsR0FBZSxVQUNoQixFQUVNLEVBQVEsR0FBZSxPQUFTLEVBQU0sRUFDdEMsRUFBTSxHQUFlLEtBQU8sRUFBTSxFQUFFLElBQUksRUFBRyxNQUFNLEVBR2pELEVBQWMsRUFDakIsRUFBeUIsQ0FBYSxFQUN0QyxNQUdJLEVBQVcsR0FBZ0IsR0FBUyxFQUFNLE9BQU8sQ0FBQyxHQUNsRCxFQUFTLEdBQWMsR0FBUyxFQUFJLE9BQU8sQ0FBQyxHQUM1QyxFQUFVLEdBQWUsR0FBUyxHQUFlLFFBQVUsRUFBSyxHQUNoRSxFQUFlLEdBQW9CLEdBQ3pDLEdBQWUsT0FBUyxHQUFjLEdBQUcsS0FDMUMsR0FHTyxFQUFXLEdBQWdCLEdBQVMsRUFBTSxPQUFPLE9BQU8sQ0FBQyxHQUN6RCxFQUFTLEdBQWMsR0FBUyxFQUFJLE9BQU8sT0FBTyxDQUFDLEdBR25ELEVBQVksR0FBaUIsR0FBUyxDQUM1QyxNQUFPLEdBQWUsT0FBUyxHQUMvQixZQUFhLEdBQWUsYUFBZSxHQUMzQyxTQUFVLEdBQWUsVUFBWSxFQUN0QyxDQUFDLEdBR00sRUFBTyxJQUFZLEdBQThCLElBQU0sQ0FFN0QsT0FEbUIsR0FBZSxPQUFTLEdBQWEsT0FDbkMsS0FDckIsRUFHSyxHQUF3QixDQUFDLElBQTJCLENBQ3pELEdBQUksQ0FBQyxFQUFNLE9BRVgsR0FEQSxFQUFhLENBQUksRUFDYixFQUFNLENBQUksRUFBRSxRQUFRLEVBQU0sQ0FBTyxDQUFDLEVBQ3JDLEVBQVcsQ0FBSSxHQUlYLEdBQXNCLENBQUMsSUFBMkIsQ0FDdkQsR0FBSSxDQUFDLEVBQU0sT0FFWCxHQURBLEVBQVcsQ0FBSSxFQUNYLEdBQVEsRUFBTSxDQUFJLEVBQUUsU0FBUyxFQUFNLENBQVMsQ0FBQyxFQUNoRCxFQUFhLENBQUksR0FLYixHQUF3QixDQUFDLElBQWlCLENBRy9DLEdBRkEsRUFBYSxDQUFJLEVBRWIsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUM1RCxFQUFXLENBQUksR0FJWCxHQUFzQixDQUFDLElBQWlCLENBRzdDLEdBRkEsRUFBVyxDQUFJLEVBRVgsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUM1RCxFQUFhLENBQUksR0FLYixHQUFvQixDQUN6QixJQUNJLENBQ0osSUFBUSxPQUFNLFVBQVUsRUFBRSxPQUMxQixFQUFjLENBQUMsTUFBVSxJQUFLLElBQU8sR0FBTyxFQUFNLEVBQUUsR0FHckQsR0FBVSxJQUFNLENBRWYsR0FBSSxFQUNILEVBQVcsT0FBTyxHQUVqQixDQUFDLENBQVEsQ0FBQyxFQUViLElBQU0sR0FBZSxDQUFDLElBQXVCLENBQzVDLEVBQUUsZUFBZSxFQUVqQixJQUFNLEVBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDNUQsR0FBYyxHQUFpQixFQUFTLEVBQVMsQ0FBUSxFQUV6RCxHQUEyQixDQUNoQyxHQUFJLEdBQWUsSUFBTSxFQUFNLEVBQUUsT0FBTyxnQkFBZ0IsRUFDeEQsTUFBTyxFQUFXLE1BQ2xCLE1BQU8sRUFDUCxJQUFLLEdBQ0wsV0FBWSxHQUFlLFdBQzNCLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLEdBQVMsTUFDakIsRUFFQSxHQUFJLEdBQWUsSUFBTSxHQUFpQixDQUFhLEVBQUcsQ0FDekQsRUFBZSxFQUFlLENBQzdCLE1BQU8sRUFBVyxNQUNsQixNQUFPLEVBQ1AsSUFBSyxHQUNMLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLEdBQVMsTUFDakIsQ0FBQyxFQUNELE9BR0QsR0FBSSxHQUFlLEdBQ2xCLElBQVcsRUFBUyxFQUVwQixTQUFRLEVBQVMsRUFFbEIsRUFBUSxHQUdILEdBQWUsSUFBTSxDQUMxQixHQUFJLEdBQWUsR0FBSSxDQUV0QixHQUFJLEdBQWlCLENBQWEsRUFBRyxDQUVwQyxFQUFpQixDQUFhLEVBQzlCLE9BRUQsSUFBVyxDQUFhLEVBQ3hCLEVBQVEsSUFJSixHQUFvQixDQUFDLElBQWtDLENBQzVELEdBQUksQ0FBQyxFQUFVLENBQ2QsR0FBUyxJQUFJLEVBQ2IsT0FFRCxJQUFNLEVBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDbEUsR0FBUyxJQUFLLEVBQVUsUUFBUyxFQUFjLE9BQU8sQ0FBRSxDQUFDLEdBR3BELEdBQXNCLEVBQ3pCLENBQUMsSUFBZSxDQUFDLEdBQWMsRUFBTSxDQUFJLEVBQUcsQ0FBc0IsRUFDbEUsT0FFRyxHQUFtQixHQUFtQixFQUFXLENBQXNCLEVBQ3ZFLEVBQWlCLEdBQW1CLEVBQVMsQ0FBc0IsRUFFbkUsR0FBYSxDQUNsQixDQUFDLFlBQWEsRUFBVyxFQUFxQixFQUM5QyxDQUFDLFVBQVcsRUFBUyxFQUFtQixDQUN6QyxFQUVNLEdBQWEsQ0FDbEIsQ0FDQyxZQUNBLGFBQ0EsRUFDQSxHQUNBLEVBQ0QsRUFDQSxDQUFDLFVBQVcsV0FBWSxFQUFTLEdBQXFCLENBQWMsQ0FDckUsRUFFQSxPQUNDLGdCQXdJRSxDQXZJRCxHQTZIRSxPQTdIRixDQUFNLFVBQVUsK0JBQStCLFNBQVUsR0FBekQsU0E2SEUsQ0E1SEQsRUErRkUsR0EvRkYsQ0FBWSxVQUFVLGlCQUF0QixTQUNDLEdBNkZFLE1BN0ZGLENBQUssVUFBVSwwQkFBZixTQTZGRSxDQTVGRCxFQUFDLEdBQUQsQ0FDQyxNQUFPLEVBQUUsT0FBTyxFQUNoQixLQUFLLFFBQ0wsU0FBVSxHQUNWLFlBQWEsRUFBRSx1QkFBdUIsRUFDdEMsU0FBUSxHQUNSLE1BQU8sRUFBVyxNQUNuQixFQUNBLEVBQUMsR0FBRCxDQUNDLE1BQU8sRUFBRSxhQUFhLEVBQ3RCLEtBQUssY0FDTCxTQUFVLEdBQ1YsWUFBYSxFQUFFLDZCQUE2QixFQUM1QyxNQUFPLEVBQVcsWUFDbkIsRUFFQSxHQVNFLE1BVEYsQ0FBSyxVQUFVLDhCQUFmLFNBU0UsQ0FSRCxFQUFDLEdBQUQsQ0FDQyxRQUFTLEVBQ1QsR0FBRyxTQUNILGdCQUFpQixDQUFDLElBQVksRUFBWSxJQUFZLEVBQUksRUFDM0QsRUFDQSxFQUVFLEdBRkYsQ0FBTyxVQUFVLHFCQUFxQixRQUFRLFNBQTlDLFNBQ0UsRUFBRSxRQUFRLEVBQ1YsR0FDRCxFQUVGLEVBYUUsTUFiRixDQUFLLFVBQVUsa0NBQWYsU0FDRSxHQUFXLElBQUksRUFBRSxFQUFPLEVBQU0sTUFDOUIsR0FTRSxNQVRGLFVBU0UsQ0FSRCxFQUFrRCxHQUFsRCxDQUFPLFVBQVUscUJBQWpCLFNBQXVDLEVBQUUsQ0FBSyxFQUFJLEVBQ2xELEVBQUMsR0FBRCxDQUNDLFVBQVUsT0FDVixjQUFhLEdBQ2IsS0FBTSxFQUNOLFNBQVUsR0FDVixTQUFVLEdBQ1gsSUFSUyxDQVNSLENBQ0YsRUFDQSxFQUVELENBQUMsR0FDRCxFQWdCRSxNQWhCRixDQUFLLFVBQVUsa0NBQWYsU0FDRSxHQUFXLElBQUksRUFBRSxFQUFPLEVBQU0sR0FBTyxHQUFVLE1BQy9DLEdBWUUsTUFaRixVQVlFLENBWEQsRUFBa0QsR0FBbEQsQ0FBTyxVQUFVLHFCQUFqQixTQUF1QyxFQUFFLENBQUssRUFBSSxFQUNsRCxFQUFDLEdBQUQsQ0FDQyxVQUFVLDBCQUNWLFFBQVMsR0FBRSxJQUNYLFFBQVMsR0FBRSxJQUNYLEtBQU0sRUFDTixTQUFVLEdBQ1YsWUFBYSxFQUFFLFlBQVksRUFDM0IsV0FBWSxFQUNaLE1BQU8sR0FDUixJQVhTLENBWVIsQ0FDRixFQUNBLEVBR0gsR0FrQkUsTUFsQkYsQ0FBSyxVQUFVLHNCQUFmLFNBa0JFLENBakJELEVBQW9ELEdBQXBELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxPQUFPLEVBQUksRUFDcEQsRUFlRSxNQWZGLENBQUssVUFBVSx1QkFBZixTQUNFLEdBQWMsSUFBSSxDQUFDLElBQ25CLEVBQUMsRUFBRCxDQUNDLGFBQVksRUFBTSxNQUNsQixVQUFXLEVBQ1YsR0FBRyxFQUFNLDJDQUNULElBQWtCLEVBQU0sT0FDdkIsa0RBQ0YsRUFFQSxRQUFTLElBQU0sRUFBaUIsRUFBTSxLQUFLLEVBQzNDLEtBQUssU0FDTCxRQUFRLFNBSEgsRUFBTSxLQUlaLENBQ0EsRUFDQSxHQUNELEVBRUYsRUFBQyxHQUFELENBQ0MsTUFBTyxFQUFFLFVBQVUsRUFDbkIsS0FBSyxXQUNMLFNBQVUsR0FDVixZQUFhLEVBQUUsMEJBQTBCLEVBQ3pDLE1BQU8sRUFBVyxTQUNuQixFQUdBLEVBQUMsR0FBRCxDQUFrQixTQUFVLEdBQW1CLE1BQU8sRUFBTyxHQUM1RCxFQUNELEVBRUYsR0EwQkUsR0ExQkYsQ0FBYyxVQUFVLGlFQUF4QixTQTBCRSxDQXpCQSxHQUFlLElBQ2YsRUFRRSxFQVJGLENBQ0MsVUFBVSw4QkFDVixRQUFTLEdBQ1QsS0FBSyxLQUNMLEtBQUssU0FDTCxRQUFRLGNBTFQsU0FPRSxFQUFFLFFBQVEsRUFDVixFQUVILEdBYUUsTUFiRixDQUFLLFVBQVUsOEJBQWYsU0FhRSxDQVpELEVBUUUsRUFSRixDQUNDLFVBQVUsc0JBQ1YsUUFBUyxFQUNULEtBQUssS0FDTCxLQUFLLFNBQ0wsUUFBUSxVQUxULFNBT0UsRUFBRSxRQUFRLEVBQ1YsRUFDRixFQUVFLEVBRkYsQ0FBUSxVQUFVLHNCQUFzQixLQUFLLEtBQUssS0FBSyxTQUF2RCxTQUNFLEdBQWUsR0FBSyxFQUFFLFFBQVEsRUFBSSxFQUFFLFFBQVEsRUFDNUMsR0FDRCxHQUNELEdBQ0QsRUFHRixFQUFDLEdBQUQsQ0FDQyxXQUFZLEVBQVksT0FBTyxPQUFTLEdBQ3hDLE9BQVEsRUFBWSxPQUNwQixRQUFTLEVBQ1QsVUFBVyxFQUNYLGNBQWUsRUFBWSxjQUM1QixHQUNDLHVEa0IzWkcsSUFBTSxHQUFrQixJQUFNLENBQ3BDLElBQ0MsSUFDQSxnQkFDQSxrQkFDQSxpQkFDQSxXQUNBLGNBQ0EsY0FDQSxtQkFDRyxFQUF3QixDQUFDLEtBQWEsQ0FDekMsRUFBRyxFQUFRLEVBQ1gsY0FBZSxFQUFRLGNBQ3ZCLGdCQUFpQixFQUFRLGdCQUN6QixlQUFnQixFQUFRLGVBQ3hCLFNBQVUsRUFBUSxTQUNsQixZQUFhLEVBQVEsWUFDckIsWUFBYSxFQUFRLFlBQ3JCLGdCQUFpQixFQUFRLGVBQzFCLEVBQUUsRUFVSSxFQUFpQixDQUN0QixLQUFNLEVBQ04sUUFBUyxFQUNULGdCQUNBLE1BQU8sRUFDUCxTQWJzQixDQUFDLElBQXlCLENBQ2hELEVBQVksRUFBTSxHQUFJLENBQUssR0FhM0IsU0FWc0IsQ0FBQyxJQUF5QixDQUNoRCxFQUFZLEVBQU0sRUFBRSxFQVVyQixFQUVBLEdBQUksRUFDSCxPQUFPLEVBQWdCLENBQWMsRUFHdEMsT0FDQyxHQWFFLEdBYkYsQ0FBUSxhQUFjLEVBQWdCLEtBQU0sRUFBNUMsU0FDQyxHQVdFLEdBWEYsQ0FBZSxVQUFVLGlGQUF6QixTQVdFLENBVkQsR0FPRSxHQVBGLENBQWMsVUFBVSx3QkFBeEIsU0FPRSxDQU5ELEdBRUUsR0FGRixDQUFhLFVBQVUsdUJBQXZCLFNBQ0UsR0FBZSxHQUFLLEVBQUUsV0FBVyxFQUFJLEVBQUUsYUFBYSxFQUNwRCxFQUNGLEdBRUUsR0FGRixDQUFtQixVQUFVLHFCQUE3QixTQUNFLEdBQWUsR0FBSyxFQUFFLGtCQUFrQixFQUFJLEVBQUUsYUFBYSxFQUMzRCxHQUNELEVBRUYsR0FBQyxHQUFELElBQWUsRUFBZ0IsR0FDOUIsRUFDRCxHQ25FSixtQkFBUyxlQUEwQixXQUFVLFdBQU0sc0JBRW5ELG1CQUFTLGVDRlQsZ0JBQVMsZUFJVCxJQUFNLEdBQU87QUFBQSxFQUVQLEdBQWdCLENBQ3JCLGtCQUNBLFdBQ0EsaUJBQ0EsMEJBQ0EsYUFDQSxxQkFDQSxtQkFDQSxlQUNBLGVBQ0QsRUFBRSxLQUFLLEVBQUksRUFFTCxHQUFhLENBQUMsSUFBeUIsQ0FDNUMsT0FBTyxFQUNMLFdBQVcsS0FBTSxNQUFNLEVBQ3ZCLFdBQVcsSUFBSyxLQUFLLEVBQ3JCLFdBQVcsSUFBSyxLQUFLLEVBQ3JCLFdBQVc7QUFBQSxFQUFNLEtBQUssRUFDdEIsV0FBVyxLQUFNLEVBQUUsR0FHaEIsR0FBYSxDQUFDLEVBQWEsRUFBVyxLQUFrQixDQUM3RCxPQUFPLEVBQ0osRUFBSyxPQUFPLFVBQVUsRUFDdEIsRUFBSyxJQUFJLEVBQUUsT0FBTyxzQkFBc0IsR0FHdEMsR0FBUyxDQUFDLElBQWlDLENBQ2hELE9BQU8sRUFBTSxLQUFPLEdBQUcsRUFBTSxxQkFHeEIsR0FBYyxDQUFDLElBQWtDLENBQ3RELEdBQUksQ0FJSCxPQUhvQixJQUFJLEdBQ3ZCLENBQ0QsRUFBRSxTQUFTLEVBRUUsTUFBTTtBQUFBLENBQUksRUFBRSxLQUFLLENBQUMsSUFBUyxFQUFLLFdBQVcsUUFBUSxDQUFDLEdBQUssR0FFckUsS0FBTSxDQUNQLE1BQU8sS0FJSCxHQUF1QixDQUFDLElBQWlDLENBQzlELElBQU0sRUFBWSxFQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sc0JBQXNCLEVBQ3ZELEVBQVksRUFBTSxPQUFTLGNBQWdCLEdBQzNDLEVBQVEsRUFBTSxNQUFRLEdBQVksRUFBTSxLQUFLLEVBQUksR0FFakQsRUFBVSxFQUFNLFNBQVMsT0FDNUIsRUFBTSxRQUFRLElBQUksQ0FBQyxJQUFNLEdBQVcsRUFBTSxDQUFDLEVBQUcsRUFBTSxNQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFDckUsS0FFRyxFQUFlLEVBQU0sYUFDeEIsR0FBVyxFQUFNLEVBQU0sWUFBWSxFQUFHLEVBQU0sTUFBTSxFQUNsRCxLQXNCSCxNQXBCYyxDQUNiLGVBQ0EsT0FBTyxHQUFPLENBQUssSUFDbkIsVUFBVSxLQUFhLEdBQVcsRUFBTSxNQUFPLEVBQU0sTUFBTSxJQUMzRCxRQUFRLEtBQWEsR0FBVyxFQUFNLElBQUssRUFBTSxNQUFNLElBQ3ZELFdBQVcsR0FBVyxFQUFNLEtBQUssSUFDakMsRUFBTSxhQUFlLGVBQWUsR0FBVyxFQUFNLFdBQVcsSUFDaEUsRUFBTSxVQUFZLFlBQVksR0FBVyxFQUFNLFFBQVEsSUFDdkQsRUFDQSxHQUFXLFVBQVUsSUFDckIsR0FBZ0IsaUJBQWlCLElBQ2pDLFdBQVcsSUFDWCxXQUFXLElBQ1gsaUJBQWlCLElBQ2pCLG1CQUNBLGFBQ0EsZ0JBQ0EsWUFDRCxFQUVhLE9BQU8sT0FBTyxFQUFFLEtBQUssRUFBSSxHQUdqQyxHQUFlLENBQUMsSUFBNkMsQ0FDbEUsSUFBTSxFQUFXLElBQUksSUFFckIsT0FBTyxFQUFPLE9BQU8sQ0FBQyxJQUFVLENBQy9CLElBQU0sRUFBTSxHQUFPLENBQUssRUFDbEIsRUFBa0IsRUFBTSxPQUFTLENBQUMsRUFBTSxhQUN4QyxFQUFxQixFQUFNLGNBQWdCLENBQUMsRUFBTSxNQUV4RCxHQUFJLEVBRUgsT0FEQSxFQUFTLElBQUksQ0FBRyxFQUNULEdBRVIsR0FBSSxFQUNILE1BQU8sR0FFUixNQUFPLENBQUMsRUFBTSxPQUFTLENBQUMsRUFBTSxjQUFnQixDQUFDLEVBQVMsSUFBSSxDQUFHLEVBQy9ELEdBR1csR0FBb0IsQ0FDaEMsRUFDQSxFQUFlLG1CQUNILENBQ1osSUFBTSxFQUFPLEdBQVcsQ0FBWSxFQUM5QixFQUFnQixHQUFhLENBQU0sRUFBRSxJQUFJLEVBQW9CLEVBRW5FLE1BQU8sQ0FDTixrQkFDQSxjQUNBLHNDQUNBLHFCQUNBLGlCQUNBLGdCQUFnQixJQUNoQiw4QkFBOEIsSUFDOUIsR0FDQSxHQUFHLEVBQ0gsZUFDRCxFQUFFLEtBQUssRUFBSSxHQUdDLEdBQW9CLENBQ2hDLEVBQ0EsRUFBVyxlQUNYLEVBQWUsbUJBQ0wsQ0FDVixJQUFNLEVBQU8sSUFBSSxLQUFLLENBQUMsR0FBa0IsRUFBUSxDQUFZLENBQUMsRUFBRyxDQUNoRSxLQUFNLDZCQUNQLENBQUMsRUFDSyxFQUFNLElBQUksZ0JBQWdCLENBQUksRUFDOUIsRUFBcUIsRUFBUyxTQUFTLE1BQU0sRUFDaEQsRUFDQSxHQUFHLFFBRUEsRUFBTyxTQUFTLGNBQWMsR0FBRyxFQUN2QyxFQUFLLEtBQU8sRUFDWixFQUFLLFNBQVcsRUFFaEIsU0FBUyxLQUFLLE9BQU8sQ0FBSSxFQUN6QixFQUFLLE1BQU0sRUFDWCxFQUFLLE9BQU8sRUFDWixJQUFJLGdCQUFnQixDQUFHLEdDbEp4QixzQkFBUyxzQkFDVCxtQkFBUyxlQ0VGLFNBQVMsRUFBcUIsRUFBRyxDQUN2QyxJQUFRLGdCQUFlLFlBQWEsRUFBd0IsQ0FBQyxLQUFTLENBQ3JFLGNBQWUsRUFBSSxjQUNuQixTQUFVLEVBQUksUUFDZixFQUFFLEVBU0YsTUFBTyxDQUFFLGdCQVBlLENBQUMsRUFBYyxJQUN0QyxJQUFJLEtBQUssZUFBZSxFQUFlLENBQ3RDLFNBQVUsRUFDVixNQUFPLFFBQ1AsSUFBSyxTQUNOLENBQUMsRUFBRSxZQUFZLEVBQU0sT0FBTyxFQUFHLEVBQUksT0FBTyxDQUFDLENBRW5CLG9FREExQixJQUFNLEdBQWUsSUFBTSxDQUMxQixJQUFRLGNBQWEsT0FBTSxhQUFZLElBQUcsa0JBQ3pDLEVBQXdCLENBQUMsS0FBUyxDQUNqQyxZQUFhLEVBQUksWUFDakIsS0FBTSxFQUFJLEtBQ1YsV0FBWSxFQUFJLFdBQ2hCLEVBQUcsRUFBSSxFQUNQLGVBQWdCLEVBQUksY0FDckIsRUFBRSxHQUVLLG1CQUFvQixHQUFzQixHQUUzQyxFQUFhLEdBQWtCLEdBQXdCLElBQUksRUFFNUQsRUFBUyxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFDN0MsRUFBWSxNQUFNLENBQUssRUFBRSxPQUFPLE1BQU0sQ0FDdkMsRUFFTSxFQUFjLEVBQVksS0FBSyxFQUMvQixFQUFRLE1BQU0sS0FBSyxDQUFFLE9BQVEsRUFBRyxFQUFHLENBQUMsRUFBRyxJQUFNLEVBQWMsRUFBSSxDQUFDLEVBQ2hFLEVBQVcsRUFBWSxFQUFhLENBQWMsRUFFbEQsRUFBbUIsQ0FBQyxJQUFnQixDQUN6QyxFQUFXLENBQUksRUFDZixFQUFlLElBQUksR0FHZCxFQUFxQixJQUMxQixlQUNFLEVBQU8sSUFBSSxDQUFDLEVBQU8sSUFDbkIsRUFVRSxFQVZGLENBQ0MsVUFBVyxFQUNWLDRCQUNBLEVBQVksTUFBTSxJQUFNLEdBQVMsZUFDbEMsRUFFQSxRQUFTLElBQU0sRUFBaUIsRUFBWSxNQUFNLENBQUssQ0FBQyxFQUN4RCxRQUFRLFFBUFQsU0FTRSxHQUpJLENBS0osQ0FDRixFQUNBLEVBR0csRUFBb0IsSUFDekIsZUFDRSxFQUFNLElBQUksQ0FBQyxJQUNYLEVBVUUsRUFWRixDQUNDLFVBQVcsRUFDViw0QkFDQSxFQUFZLEtBQUssSUFBTSxHQUFRLGVBQ2hDLEVBRUEsUUFBUyxJQUFNLEVBQWlCLEVBQVksS0FBSyxDQUFJLENBQUMsRUFDdEQsUUFBUSxRQVBULFNBU0UsR0FKSSxDQUtKLENBQ0YsRUFDQSxFQUdHLEVBQW9CLElBQ3pCLGVBQ0UsTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFFLEVBQUcsQ0FBQyxFQUFHLElBQU0sQ0FDcEMsSUFBTSxFQUFXLEVBQVksU0FBUyxFQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUcsTUFBTSxFQUN4RCxFQUFPLEVBQVksRUFBVSxDQUFjLEVBQzNDLEVBQVEsRUFBSyxHQUNiLEVBQU0sRUFBSyxHQUNYLEVBQWdCLEVBQVMsT0FBTyxFQUFhLE1BQU0sRUFFekQsT0FDQyxFQVlFLEVBWkYsQ0FDQyxVQUFXLEVBQ1YsNEJBQ0EsR0FBaUIsZUFDbEIsRUFFQSxRQUFTLElBQU0sRUFBaUIsQ0FBSyxFQUNyQyxRQUFRLFFBUFQsU0FTQyxFQUVFLE1BRkYsQ0FBSyxVQUFVLDJDQUFmLFNBQ0MsRUFBcUMsT0FBckMsVUFBTyxFQUFnQixFQUFPLENBQUcsRUFBSSxFQUNwQyxHQU5HLEVBQVUsQ0FBSyxDQU9uQixFQUVILEVBQ0EsRUFHRyxFQUFtQixJQUFNLENBQzlCLElBQU0sRUFBVyxFQUFZLFFBQVEsT0FBTyxFQUN0QyxFQUFjLEVBQVksWUFBWSxFQUU1QyxPQUNDLGVBQ0UsTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFZLEVBQUcsQ0FBQyxFQUFHLElBQU0sQ0FDOUMsSUFBTSxFQUFNLEVBQVMsS0FBSyxFQUFJLENBQUMsRUFDekIsRUFBZSxFQUFJLE9BQU8sRUFBYSxLQUFLLEVBQzVDLEVBQVEsRUFBUSxDQUFHLEVBRXpCLE9BQ0MsRUFpQkUsRUFqQkYsQ0FDQyxVQUFXLEVBQ1YsNEJBQ0EsR0FBZ0IsZUFDakIsRUFFQSxRQUFTLElBQU0sRUFBaUIsQ0FBRyxFQUNuQyxRQUFRLFFBUFQsU0FTQyxHQU9FLE1BUEYsQ0FBSyxVQUFVLDJDQUFmLFNBT0UsQ0FORCxFQUEwQixPQUExQixVQUFPLEVBQUksT0FBTyxJQUFJLEVBQUksRUFDekIsR0FDQSxFQUVFLE9BRkYsQ0FBTSxVQUFVLDhEQUFoQixTQUNFLEVBQUUsT0FBTyxFQUNULEdBRUYsR0FYRyxFQUFVLENBQUcsQ0FZakIsRUFFSCxFQUNBLEdBK0JKLE1BM0JpQixDQUNoQixDQUNDLEdBQUksUUFDSixPQUFRLElBQVMsT0FDakIsTUFBTyxFQUFZLE9BQU8sTUFBTSxFQUNoQyxPQUFRLENBQ1QsRUFDQSxDQUNDLEdBQUksT0FDSixPQUFRLEdBQ1IsTUFBTyxFQUFZLE9BQU8sTUFBTSxFQUNoQyxPQUFRLENBQ1QsRUFDQSxDQUNDLEdBQUksT0FDSixPQUFRLElBQVMsT0FDakIsTUFBTyxFQUFnQixFQUFTLEdBQUksRUFBUyxFQUFFLEVBQy9DLE9BQVEsQ0FDVCxFQUNBLENBQ0MsR0FBSSxNQUNKLE9BQVEsSUFBUyxNQUNqQixNQUFPLEVBQVksT0FBTyxTQUFTLEVBQ25DLE9BQVEsQ0FDVCxDQUNELEVBR0UsT0FBTyxDQUFDLElBQU0sQ0FBQyxFQUFFLE1BQU0sRUFDdkIsSUFBSSxDQUFDLElBQ0wsR0EwQkUsR0ExQkYsQ0FFQyxhQUFjLENBQUMsSUFBUyxFQUFlLEVBQU8sRUFBUSxHQUFLLElBQUksRUFDL0QsS0FBTSxJQUFnQixFQUFRLEdBSC9CLFNBMEJFLENBckJELEVBZUUsR0FmRixDQUFnQixRQUFPLEdBQXZCLFNBQ0MsR0FhRSxFQWJGLENBQ0MsVUFBVSw4Q0FDVixjQUFZLHdCQUNaLFFBQVEsUUFIVCxTQWFFLENBUkQsRUFNRSxFQU5GLENBQ0MsVUFBVSw4Q0FDVixjQUFZLHdCQUNaLGNBQWUsRUFBSyxRQUFRLEVBQVEsR0FBSSxFQUFVLENBQVcsQ0FBQyxFQUgvRCxTQUtFLEVBQVEsTUFDUixFQUNGLEVBQUMsR0FBRCxDQUFhLFVBQVUsVUFBVSxHQUNoQyxFQUNELEVBQ0YsRUFJRSxHQUpGLENBQWdCLFVBQVUsV0FBMUIsU0FDQyxFQUVFLE1BRkYsQ0FBSyxVQUFVLHVDQUFmLFNBQ0UsRUFBUSxPQUFPLEVBQ2YsRUFDRCxJQXhCRyxFQUFRLEVBeUJaLENBQ0YsR0FHWSxNRTNNZixzQkFBUyxtQkFBYSwwRUFPdEIsSUFBTSxHQUE4QixDQUFDLE1BQU8sT0FBUSxRQUFTLE1BQU0sRUFhN0QsR0FBNEMsRUFDakQsY0FDQSxXQUNBLFVBQVUsVUFDVixPQUFPLEtBQ1AsWUFDQSxVQUNBLFNBQ0EsZ0JBQ0ssQ0FDTCxJQUFRLElBQUcsYUFBYyxFQUF3QixDQUFDLEtBQWEsQ0FDOUQsRUFBRyxFQUFRLEVBQ1gsVUFBVyxFQUFRLFNBQ3BCLEVBQUUsRUFDSSxFQUFTLElBQVksT0FDckIsRUFBcUIsR0FBYSxFQUFVLE9BQVMsRUFHckQsRUFBcUIsQ0FBQyxJQUF1QixDQUNsRCxPQUFPLEVBRU4sRUFBUyxTQUFXLEdBRXBCLElBQWdCLEdBQVksZUFDN0IsR0FHSyxFQUFnQixDQUFDLElBQXVCLENBQzdDLE9BQU8sSUFBZ0IsRUFBVyxVQUFZLFdBRy9DLE9BQ0MsR0FrQ0UsTUFsQ0YsQ0FDQyxVQUFXLEVBQ1YsRUFBUyx5QkFBMkIsYUFDcEMsQ0FDRCxFQUpELFNBa0NFLENBNUJELEdBRUUsRUFGRixDQUFRLFFBQVMsRUFBWSxLQUFNLEVBQU0sUUFBUSxVQUFqRCxTQUNDLEdBQUMsR0FBRCxDQUFhLFVBQVUsVUFBVSxFQUNoQyxFQUNGLEdBRUUsRUFGRixDQUFRLFFBQVMsRUFBUSxLQUFNLEVBQU0sUUFBUSxVQUE3QyxTQUNDLEdBQUMsR0FBRCxDQUFjLFVBQVUsVUFBVSxFQUNqQyxFQUVELEdBQWdCLElBQUksQ0FBQyxJQUFtQixDQUN4QyxHQUFJLEdBQXNCLElBQVMsT0FDbEMsT0FBTyxLQUdSLE9BQ0MsR0FRRSxFQVJGLENBQ0MsVUFBVyxFQUFtQixDQUFJLEVBRWxDLFFBQVMsSUFBTSxFQUFTLENBQUksRUFDNUIsS0FBTSxFQUNOLFFBQVMsRUFBYyxDQUFJLEVBTDVCLFNBT0UsRUFBRSxDQUFJLEdBTEYsQ0FNSixFQUVILEVBRUQsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFTLEtBQU0sRUFBTSxRQUFRLFVBQTlDLFNBQ0UsRUFBRSxPQUFPLEVBQ1QsR0FDRCxHQUlXLHlESnZFZixJQUFNLEdBQWdDLEVBQUcsWUFBWSxNQUFTLENBQzdELElBQ0MsT0FDQSxVQUNBLGFBQ0EsYUFDQSxRQUNBLGdCQUNBLGtCQUNBLGtCQUNBLFlBQ0EsSUFDQSxvQkFDRyxFQUF3QixDQUFDLEtBQVMsQ0FDckMsS0FBTSxFQUFJLEtBQ1YsUUFBUyxFQUFJLFFBQ2IsV0FBWSxFQUFJLFdBQ2hCLFdBQVksRUFBSSxXQUNoQixNQUFPLEVBQUksTUFDWCxjQUFlLEVBQUksY0FDbkIsZ0JBQWlCLEVBQUksZ0JBQ3JCLGdCQUFpQixFQUFJLGdCQUNyQixVQUFXLEVBQUksVUFDZixFQUFHLEVBQUksRUFDUCxpQkFBa0IsRUFBSSxnQkFDdkIsRUFBRSxHQUVLLEVBQWdCLEdBQXFCLEdBQVMsRUFBSyxFQUVwRCxFQUFrQixJQUFNLEVBQWtCLEVBQUssRUFHL0MsRUFDTCxDQUF5QixJQUN6QixJQUFJLElBQWUsQ0FDbEIsRUFBRyxHQUFHLENBQUksRUFDVixFQUFnQixHQUdaLEVBQWUsSUFBTSxDQUMxQixJQUFNLEVBQVcsa0JBQWtCLElBQUksS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEdBQUcsRUFBRSxTQUN2RSxHQUFrQixFQUFXLEVBQVUsZ0JBQWdCLEVBQ3ZELEVBQWdCLEdBR1gsRUFBaUIsSUFDdEIsR0FRRSxFQVJGLENBQ0MsVUFBVSwwQkFDVixRQUFTLElBQU0sRUFBYyxFQUM3QixLQUFLLEtBQ0wsUUFBUSxVQUpULFNBUUUsQ0FGRCxFQUFDLEdBQUQsQ0FBTSxVQUFVLFVBQVUsRUFDMUIsRUFBaUQsT0FBakQsQ0FBTSxVQUFVLHFCQUFoQixTQUFzQyxFQUFFLEtBQUssRUFBSSxHQUNoRCxFQUdHLEVBQWUsRUFBRyxZQUFZLE1BQ25DLEdBWUUsRUFaRixDQUNDLFVBQVcsRUFBRywwQkFBMkIsR0FBYSxjQUFjLEVBQ3BFLFFBQVMsRUFDVCxLQUFLLEtBQ0wsUUFBUSxVQUpULFNBWUUsQ0FORCxFQUFDLEdBQUQsQ0FBVSxVQUFVLFVBQVUsRUFDN0IsRUFDQSxHQUFHLEVBQUUsUUFBUSxvQkFFYixFQUFnRSxPQUFoRSxDQUFNLFVBQVUsaUNBQWhCLFNBQWtELEVBQUUsUUFBUSxFQUFJLEdBRWhFLEVBR0gsR0FBSSxFQUNILE9BQU8sRUFHUixPQUNDLEVBNERFLE1BNURGLENBQ0MsVUFBVSxnQ0FDVixjQUFZLGtCQUZiLFNBSUMsR0F1REUsTUF2REYsQ0FDQyxVQUFXLEVBQ1Ysb0ZBQ0EsRUFDQSxDQUNELEVBTEQsU0F1REUsQ0FoREQsR0FHRSxNQUhGLENBQUssVUFBVSxrRkFBZixTQUdFLENBRkQsRUFBQyxHQUFELENBQWMsVUFBVSxVQUFVLEVBQ2xDLEVBQUMsR0FBRCxFQUFjLEdBQ2IsRUFFRixHQTBDRSxNQTFDRixDQUFLLFVBQVUsaUhBQWYsU0EwQ0UsQ0F6Q0QsR0FZRSxNQVpGLENBQUssVUFBVSwrREFBZixTQVlFLENBWEQsRUFBQyxHQUFELENBQ0MsVUFBVSxjQUNWLFlBQWEsRUFDYixTQUFVLEVBQ1YsT0FBUSxFQUNSLFdBQVksRUFDWixRQUFTLEVBQ1QsUUFBUSxVQUNULEVBQ0EsRUFBQyxFQUFELEVBQWdCLEVBQ2YsQ0FBQyxHQUFvQixFQUFDLEVBQUQsRUFBYyxHQUNuQyxFQUVGLEdBMEJFLE1BMUJGLENBQUssVUFBVSw2REFBZixTQTBCRSxDQXpCRCxFQUFDLEVBQUQsRUFBZ0IsRUFDaEIsR0F1QkUsR0F2QkYsQ0FBUyxhQUFjLEVBQW1CLEtBQU0sRUFBaEQsU0F1QkUsQ0F0QkQsRUFJRSxHQUpGLENBQWdCLFFBQU8sR0FBdkIsU0FDQyxFQUVFLEVBRkYsQ0FBUSxLQUFLLEtBQUssUUFBUSxVQUExQixTQUNDLEVBQUMsR0FBRCxDQUFNLFVBQVUsVUFBVSxFQUN6QixFQUNELEVBQ0YsRUFnQkUsR0FoQkYsQ0FBZ0IsTUFBTSxNQUFNLFVBQVUsZ0JBQXRDLFNBQ0MsR0FjRSxNQWRGLENBQUssVUFBVSxZQUFmLFNBY0UsQ0FiRCxFQUFDLEdBQUQsQ0FDQyxZQUFhLEVBQ2IsU0FBVSxFQUFVLENBQU8sRUFDM0IsT0FBUSxFQUFVLENBQVUsRUFDNUIsV0FBWSxFQUFVLENBQVUsRUFDaEMsUUFBUyxFQUFVLENBQUssRUFDeEIsUUFBUSxPQUNULEVBQ0MsQ0FBQyxHQUNELEVBRUUsTUFGRixDQUFLLFVBQVUsZ0JBQWYsU0FDQyxFQUFDLEVBQUQsQ0FBYyxVQUFTLEdBQUMsRUFDdkIsR0FFRixFQUNELEdBQ0QsR0FDRCxHQUNELEdBQ0QsRUFDRCxHQUlXLE1LaktmLGVBQVMsZUNDVCxlQUFTLGNBQU0sZUNEZixrQkFBUyxlQzRCRixJQUFNLEdBQXNCLEVBQ2xDLE9BQ0EsU0FDQSxlQUNBLGtCQUFrQixHQUNsQixXQUFXLE1BQ1gsZUFBZSxHQUNmLGlCQUFpQixNQUNjLENBRy9CLElBQU0sRUFBUSxFQUFLLEdBQUcsQ0FBQyxFQUNqQixFQUFPLEVBQUssR0FBRyxFQUFFLEVBQ3ZCLEdBQUksQ0FBQyxHQUFTLENBQUMsRUFBTSxNQUFPLENBQUMsRUFFN0IsSUFBTSxFQUNMLElBQWEsT0FBUyxFQUFNLFFBQVEsTUFBTSxFQUFJLEVBQU0sUUFBUSxLQUFLLEVBQzVELEVBQVUsSUFBYSxPQUFTLEVBQUssTUFBTSxNQUFNLEVBQUksRUFBSyxNQUFNLEtBQUssRUFDckUsRUFBVyxFQUFLLE9BR2hCLEVBQWlCLEVBQU8sT0FBTyxDQUFDLElBQU0sRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFPLENBQVEsRUFBSSxDQUFDLEVBQ3ZFLEVBQWtCLEVBQU8sT0FDOUIsQ0FBQyxJQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUUsTUFBTyxDQUFRLElBQU0sQ0FDMUMsRUFHTSxFQUFpQixDQUFDLEdBQUcsQ0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFHLElBQU0sQ0FDekQsSUFBTSxFQUFZLEVBQUUsTUFBTSxLQUFLLEVBQUUsS0FBSyxFQUN0QyxHQUFJLElBQWMsRUFDakIsT0FBTyxFQUVSLE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQy9DLEVBR0ssRUFBa0IsQ0FBQyxHQUFHLENBQWUsRUFBRSxLQUFLLENBQUMsRUFBRyxJQUNyRCxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FDckIsRUFHTSxFQUE0RCxNQUFNLEtBQ3ZFLENBQUUsT0FBUSxDQUFhLEVBQ3ZCLElBQ0MsTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFTLEVBQUcsS0FBTyxDQUFFLE1BQU8sR0FBTyxNQUFPLElBQUssRUFBRSxDQUN4RSxFQUVNLEVBQXFDLENBQUMsRUFHdEMsRUFBbUIsQ0FBQyxFQUFrQixJQUEyQixDQUN0RSxRQUFTLEVBQU0sRUFBRyxFQUFNLEVBQWMsSUFBTyxDQUM1QyxJQUFJLEVBQVcsR0FDZixRQUFTLEVBQU0sRUFBVSxHQUFPLEVBQVEsSUFDdkMsR0FBSSxFQUFLLEdBQUssR0FBSyxNQUFPLENBQ3pCLEVBQVcsR0FDWCxNQUdGLEdBQUksRUFBVSxPQUFPLEVBRXRCLE1BQU8sSUFHRixFQUFRLENBQ2IsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLElBQ0ksQ0FDSixRQUFTLEVBQU0sRUFBVSxHQUFPLEVBQVEsSUFDdkMsRUFBSyxHQUFLLEdBQU8sQ0FBRSxNQUFPLEdBQU0sT0FBTSxFQUV2QyxJQUFNLEVBQVcsRUFBUyxFQUFXLEVBQ3JDLEVBQWdCLEtBQUssQ0FDcEIsS0FBTyxFQUFXLEVBQVksSUFDOUIsTUFBUSxFQUFXLEVBQVksSUFDL0IsSUFDQyxFQUFrQixFQUFlLEdBQU8sRUFBaUIsR0FDMUQsT0FBUSxFQUNSLFNBQVUsS0FDUCxFQUNILG1CQUNBLGdCQUNELENBQW9CLEdBSXJCLFFBQVcsS0FBUyxFQUFnQixDQUNuQyxJQUFNLEVBQWEsRUFBTSxJQUFJLEVBQU0sTUFBTSxRQUFRLENBQVEsRUFBRyxDQUFRLEVBQzlELEVBQ0wsSUFBYSxPQUFTLEVBQU0sSUFBSSxTQUFTLEVBQUcsUUFBUSxFQUFJLEVBQU0sSUFDekQsRUFBVyxFQUFNLElBQUksRUFBWSxRQUFRLENBQVEsRUFBRyxDQUFPLEVBQzNELEVBQVcsS0FBSyxJQUFJLEVBQUcsRUFBVyxLQUFLLEVBQVUsQ0FBUSxDQUFDLEVBQzFELEVBQVMsS0FBSyxJQUFJLEVBQVcsRUFBRyxFQUFTLEtBQUssRUFBVSxDQUFRLENBQUMsRUFFakUsRUFBbUIsRUFBTSxNQUFNLFFBQVEsQ0FBUSxFQUFFLFNBQVMsQ0FBUSxFQUNsRSxFQUFpQixFQUFNLElBQUksUUFBUSxDQUFRLEVBQUUsUUFBUSxDQUFPLEVBRzVELEVBQU0sRUFBaUIsRUFBVSxDQUFNLEVBQzdDLEdBQUksSUFBUSxHQUFJLENBQ2YsRUFBTSxFQUFLLEVBQVUsRUFBUSxFQUFPLEVBQWtCLENBQWMsRUFDcEUsU0FJRCxRQUFTLEVBQVcsRUFBVyxFQUFHLEdBQVksRUFBUSxJQUFZLENBQ2pFLElBQU0sRUFBVyxFQUFpQixFQUFVLENBQU0sRUFDbEQsR0FBSSxJQUFhLEdBQUksQ0FDcEIsRUFBTSxFQUFVLEVBQVUsRUFBUSxFQUFPLEdBQU0sQ0FBYyxFQUM3RCxRQU1ILFFBQVcsS0FBUyxFQUFpQixDQUNwQyxJQUFNLEVBQWEsRUFBTSxJQUFJLEVBQU0sTUFBTSxRQUFRLENBQVEsRUFBRyxDQUFRLEVBQzlELEVBQU0sS0FBSyxJQUNoQixFQUNBLEtBQUssSUFBSSxFQUFXLEVBQUcsRUFBVyxLQUFLLEVBQVUsQ0FBUSxDQUFDLENBQzNELEVBQ00sRUFBTSxFQUFpQixFQUFLLENBQUcsRUFDckMsR0FBSSxJQUFRLEdBQ1gsRUFBTSxFQUFLLEVBQUssRUFBSyxFQUFPLEdBQU8sRUFBSyxFQUkxQyxPQUFPLEdEcElELElBQU0sR0FBeUIsRUFDckMsT0FDQSxTQUNBLGtCQUNBLGFBQ0EsY0FDNkQsQ0FDN0QsSUFDQyx3QkFDQSxlQUNBLGVBQ0EsY0FDQSx3QkFDRyxFQUF3QixFQUV0QixFQUFRLEVBQUssR0FBRyxDQUFDLEVBQ2pCLEVBQU8sRUFBSyxHQUFHLEVBQUUsRUFDakIsRUFBWSxHQUFPLFFBQVEsS0FBSyxFQUNoQyxFQUFVLEdBQU0sTUFBTSxLQUFLLEVBRTNCLEVBQVMsR0FBUSxJQUFNLENBQzVCLEdBQUksQ0FBQyxHQUFhLENBQUMsRUFBUyxNQUFPLENBQUMsRUFFcEMsSUFBSSxFQUFhLEVBQXNCLEVBQVcsQ0FBTyxFQUN6RCxHQUFJLEVBQ0gsRUFBYSxHQUNaLEVBQ0EsRUFBcUIsQ0FBVSxDQUNoQyxFQUdELEdBQUksRUFDSCxFQUFhLEVBQVcsT0FBTyxDQUFDLElBQU0sQ0FBQyxDQUFDLEVBQUUsU0FBVyxDQUFNLEVBRzVELE9BQU8sR0FDTCxDQUNGLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxDQUNELENBQUMsRUFFSyxFQUFlLEdBQVEsSUFBTSxDQUNsQyxJQUFNLEVBQU0sSUFBSSxJQUNoQixRQUFXLEtBQU8sRUFBTSxDQUN2QixJQUFNLEVBQU0sRUFBVSxDQUFHLEVBQ25CLEVBQVcsRUFBSSxRQUFRLEtBQUssRUFDNUIsRUFBUyxFQUFJLE1BQU0sS0FBSyxFQUN4QixFQUFZLEVBQU8sT0FBTyxDQUFDLElBQ2hDLEdBQW1CLEVBQUcsRUFBVSxDQUFNLENBQ3ZDLEVBQ0EsRUFBSSxJQUFJLEVBQUssQ0FBUyxFQUV2QixPQUFPLEdBQ0wsQ0FBQyxFQUFNLENBQU0sQ0FBQyxFQXNCakIsTUFBTyxDQUFFLGlCQXBCZ0IsR0FBUSxJQUFNLENBQ3RDLE9BQU8sR0FBb0IsQ0FDMUIsT0FDQSxTQUNBLGVBQ0Esa0JBQ0EsZUFDQSxlQUFnQixFQUNoQixVQUNELENBQUMsR0FDQyxDQUNGLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0QsQ0FBQyxFQUUwQixjQUFhLEdFMUd6QyxtQkFBZ0IsY0FBTSx3RENlZixJQUFNLEdBQXNDLEVBQUcsT0FBTSxlQUFnQixDQUMzRSxJQUFNLEVBQVEsRUFBUSxDQUFJLEVBRTFCLE9BQ0MsR0FTRSxNQVRGLENBQ0MsVUFBVyxFQUNWLHlFQUNBLEdBQVMsaURBQ1QsQ0FDRCxFQUNBLGNBQWEsRUFBSyxVQUFVLENBQUksRUFOakMsU0FRRSxFQUFLLE9BQU8sR0FBRyxFQUNmLEdDM0JKLDhCQUFTLGVBQXFCLGVDRDlCLHVCQUFTLHVCQUVULGVBQVMsbUVBTVQsSUFBTSxHQUF1QixDQUM1QixFQUNBLElBQ0ksQ0FDSixHQUFJLEdBQW9CLEVBQ3ZCLE1BQU8sZUFFUixHQUFJLEVBQ0gsTUFBTyw4QkFFUixHQUFJLEVBQ0gsTUFBTyw4QkFFUixNQUFPLGNBR1IsU0FBUyxFQUF3QixFQUNoQyxZQUNBLFFBQ0EsWUFDQSxRQUNBLGNBQWMsSUFPWixDQUNGLElBQVEsZUFBYyxjQUFhLG9CQUFtQixzQkFDckQsRUFBd0IsR0FFakIsYUFBWSxZQUFXLGFBQVksY0FBZSxHQUFhLENBQ3RFLEdBQUksRUFDSixLQUFNLENBQ0wsUUFDQSxLQUFNLGdCQUNQLEVBQ0EsU0FBVSxHQUFlLENBQzFCLENBQUMsRUFHSyxFQUFzQixJQUFNLENBRWpDLElBQU0sRUFBZ0IsRUFJaEIsRUFBbUIsRUFBYyxpQkFDakMsRUFBaUIsRUFBYyxlQUVyQyxPQUNDLEdBaUNFLE1BakNGLENBQ0MsVUFBVyxFQUNWLEVBQU0saUJBQW1CLGNBQ3pCLEVBQU0sT0FBUyxhQUNmLGlGQUNBLEdBQ0MsUUFBUSxDQUFnQixFQUN4QixRQUFRLENBQWMsQ0FDdkIsQ0FDRCxFQUNBLE1BQU8sQ0FBRSxnQkFBaUIsRUFBTSxnQkFBaUIsTUFBTyxFQUFNLEtBQU0sRUFWckUsU0FpQ0UsQ0FwQkEsR0FDQSxHQUF5RSxNQUF6RSxDQUFLLFVBQVUsd0RBQTBELEVBSTFFLEdBU0UsSUFURixDQUNDLFVBQVcsRUFDViw4Q0FFQSxHQUFvQixPQUNwQixHQUFrQixNQUNuQixFQU5ELFNBUUUsRUFBTSxNQUNOLEVBR0QsR0FDQSxHQUEwRSxNQUExRSxDQUFLLFVBQVUseURBQTJELEdBRTFFLEdBSUosT0FDQyxHQTJCRSxFQTNCRixDQUNDLFVBQVcsRUFDVix5QkFDQSxHQUFlLEVBQ1osRUFDQyxpQkFDQSxpQkFDRCxjQUNILEdBQ0MsRUFBRSxHQUFlLElBQ2pCLDRCQUNELENBQ0QsRUFDQSxPQUFRLEdBQ1IsU0FBVSxFQUNWLFFBQVMsQ0FBQyxJQUFNLENBQ2YsRUFBRSxnQkFBZ0IsRUFDbEIsRUFBYSxDQUFLLEdBRW5CLElBQUssRUFDTCxNQUFPLEVBQ1AsY0FBZSxLQUNYLEtBQ0EsRUF2QkwsU0EwQkUsRUFBYyxFQUFZLENBQUssRUFBSSxHQUFDLEVBQUQsRUFBcUIsRUFDeEQsRUFJRyxJQUFNLEdBQWlCLEdBQzdCLEdBQ0EsQ0FBQyxFQUFXLElBQWMsQ0FFekIsT0FDQyxFQUFVLFlBQWMsRUFBVSxXQUNsQyxFQUFVLGNBQWdCLEVBQVUsYUFDcEMsRUFBVSxZQUFjLEVBQVUsV0FDbEMsRUFBVSxRQUFVLEVBQVUsTUFHakMsc0REbkhPLElBQU0sR0FBZ0QsRUFBRyxTQUFVLENBQ3pFLElBQU8sRUFBWSxHQUFpQixHQUFTLEVBQUssR0FDM0MsRUFBbUIsR0FDekIsR0FBbUMsSUFBSSxHQUNoQyxjQUFhLGlCQUFnQixlQUFnQixFQUF3QixFQUU3RSxHQUFvQixFQUFLLEtBQU8sQ0FDL0IsS0FBTSxJQUFNLEVBQWMsRUFBSSxFQUM5QixNQUFPLElBQU0sRUFBYyxFQUFLLEVBQ2hDLHFCQUFzQixDQUFDLElBQ3RCLEVBQXFCLENBQVMsQ0FDaEMsRUFBRSxFQU9GLElBQUksRUFKb0IsRUFBWSxRQUFRLE9BQU8sRUFJRixNQUFNLEVBQ3ZELE1BQU8sRUFBMkIsSUFBSSxJQUFNLEVBQzNDLEVBQTZCLEVBQTJCLFNBQVMsRUFBRyxLQUFLLEVBRzFFLE9BQ0MsR0FxQkUsR0FyQkYsQ0FBUSxhQUFjLEVBQWUsS0FBTSxFQUEzQyxTQUNDLEdBbUJFLEdBbkJGLENBQWUsVUFBVSx3Q0FBekIsU0FtQkUsQ0FsQkQsR0FJRSxHQUpGLFVBQ0MsR0FFRSxHQUZGLFVBQ0UsR0FBbUIsSUFBSSxPQUFPLGNBQWMsRUFDNUMsRUFDRCxFQUNGLEdBWUUsTUFaRixDQUFLLFVBQVUsaUJBQWYsU0FDRSxHQUFtQixPQUFPLElBQUksQ0FBQyxJQUFVLENBQ3pDLE9BQ0MsR0FBQyxHQUFELENBQ0MsVUFBVSxnQkFDVixVQUFXLDRCQUE0QixFQUFNLEtBQzdDLE1BQU8sRUFFUCxNQUFPLENBQUUsT0FBUSxHQUFHLEtBQWdCLEdBRC9CLEVBQU0sRUFFWixFQUVELEVBQ0EsR0FDRCxFQUNELEdFdEVKLHVCQUFTLGdFQTJCVCxTQUFTLEVBQVksQ0FDcEIsRUFDQSxFQUNBLEVBQytCLENBQy9CLElBQU0sRUFBUSxFQUFLLEtBQUssR0FBUSxDQUFDLEVBQUUsT0FBTyxHQUFVLENBQUMsRUFFckQsR0FBSSxJQUFTLFFBQWEsSUFBVyxPQUNwQyxNQUFPLENBQUUsUUFBTyxJQUFLLEVBQU0sT0FBTyxFQUFTLEVBQUUsQ0FBRSxFQUVoRCxHQUFJLElBQVMsT0FDWixNQUFPLENBQUUsUUFBTyxJQUFLLEVBQU0sS0FBSyxFQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBRSxFQUVyRCxNQUFPLENBQUUsUUFBTyxJQUFLLEVBQU0sS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUUsRUFHekMsU0FBUyxFQUFhLEVBQzVCLEtBQ0EsT0FDQSxPQUNBLE9BQ0EsU0FDQSxhQUNBLFNBQ0EsV0FDQSxZQUNBLFFBQ0EsY0FBZSxFQUNmLFdBQVcsSUFDVyxDQUN0QixJQUNDLGNBQ0EsaUJBQ0Esa0JBQ0EscUJBQ0EsbUJBQ0Esa0JBQ0EsUUFDRyxFQUF3QixHQUVwQixRQUFPLE9BQVEsR0FBYSxFQUFNLEVBQU0sQ0FBTSxFQUVoRCxFQUFXLElBQWtCLENBQVUsRUFDdkMsRUFBcUIsQ0FBRSxRQUFPLE1BQUssV0FBVSxRQUFPLEVBR3BELEVBQWUsR0FBWSxRQUFRLElBQWlCLENBQVEsQ0FBQyxFQUM3RCxFQUFlLEdBQW9CLEdBRWpDLFNBQVEsY0FBZSxHQUFhLENBQzNDLEtBQ0EsS0FBTSxDQUFFLE9BQU0sT0FBTSxPQUFNLFNBQVEsYUFBWSxRQUFPLEVBQ3JELFNBQVUsR0FBc0IsQ0FDakMsQ0FBQyxFQUVLLEVBQWtCLENBQUMsSUFBd0IsQ0FFaEQsR0FEQSxFQUFFLGdCQUFnQixFQUNkLEVBQ0gsT0FFRCxFQUFZLENBQVEsR0FHZixFQUFvQixHQUFVLENBQUMsR0FBc0IsQ0FBQyxFQUN0RCxFQUFnQixHQUFpQixjQUFnQixHQUV2RCxPQUdDLEdBZ0JFLE1BaEJGLENBQ0MsVUFBVyxFQUNWLGlCQUNBLEVBQ0EsR0FBcUIsWUFDckIsRUFBZSxpQkFBbUIsaUJBQ2xDLEdBQWdCLENBQ2pCLEVBQ0EsZ0JBQWUsRUFBYSxTQUFTLEVBQ3JDLGNBQWEsRUFDYixZQUFXLEVBQ1gsUUFBUyxFQUNULElBQUssRUFDTCxNQUFPLEVBYlIsU0FlRSxFQUNBLHFFSmxGSixJQUFNLEdBQXNDLEVBQzNDLE1BQ0EsT0FDQSxTQUNBLFlBQVksR0FDWixhQUNBLFdBQVcsTUFDWCxxQkFBcUIsR0FDckIsU0FBUyxHQUNULG9CQUNBLGNBQWUsRUFDZixnQkFBZ0IsR0FDaEIsY0FDSyxDQUNMLElBQU0sRUFBcUIsR0FBTSxPQUk5QixJQUFJLEdBRU4sZUFBZSxFQUNmLHdCQUNBLGNBQ0EsSUFDQSx1QkFDQSxnQkFDQSxlQUNBLGVBQ0csRUFBd0IsRUFDdEIsRUFBeUIsR0FBMEIsQ0FBVSxFQUU3RCxFQUFjLEdBQVEsSUFBTSxDQUNqQyxHQUFJLENBQUMsRUFDSixNQUFPLENBQUMsRUFJVCxHQUFJLEVBQ0gsT0FBTyxFQUdSLElBQUksRUFBYyxFQUNqQixFQUFJLFFBQVEsQ0FBUSxFQUNwQixFQUFJLE1BQU0sQ0FBUSxDQUNuQixFQUVBLEdBQUksRUFDSCxFQUFjLEVBQVksT0FBTyxDQUFDLElBQU0sRUFBRSxNQUFNLEVBR2pELEdBQUksRUFDSCxPQUFPLEdBQ04sRUFDQSxFQUFxQixDQUFVLEdBQUssQ0FBQyxDQUN0QyxFQUdELE9BQU8sR0FDTCxDQUNGLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDRCxDQUFDLEVBR0ssRUFBZ0IsQ0FBQyxFQUFZLElBQTRCLENBQzlELEVBQW1CLFNBQVMscUJBQXFCLENBQ2hELE1BQ0EsUUFDRCxDQUFDLEVBQ0QsRUFBbUIsU0FBUyxLQUFLLEdBRzVCLEVBQWlCLEVBQUksTUFBTSxJQUFNLEVBQVksTUFBTSxFQUVuRCxFQUFvQixFQUFZLE9BQVMsRUFDekMsRUFBa0IsRUFBb0IsRUFFdEMsRUFBYSxHQUFlLENBQ2pDLEtBQU0sRUFDTixLQUFNLElBQWEsT0FBUyxFQUFJLEtBQUssRUFBSSxPQUN6QyxjQUFlLENBQ2hCLENBQUMsRUFFSyxFQUNMLElBQWEsT0FDVixFQUFLLEtBQUssSUFBSSxFQUFLLEVBQUksT0FBTyxJQUFJLEVBQUcsRUFBSSxPQUFPLElBQUksQ0FBQyxFQUNyRCxFQUFLLEtBQUssSUFBSSxDQUFHLEVBQ2YsRUFBYyxFQUFLLFVBQVUsUUFBUSxFQUFLLENBQUUsU0FBUSxZQUFXLENBQUMsRUFFdEUsT0FDQyxnQkFrRUUsQ0FqRUQsR0E2REUsR0E3REYsQ0FDQyxPQUFRLEVBQ1IsVUFBVyxFQUNWLG1HQUNBLENBQ0QsRUFDQSxjQUFhLEdBQWMsRUFDM0IsS0FBTSxFQUNOLFNBQVUsQ0FBQyxHQUFjLENBQUMsRUFDMUIsS0FBTSxFQUNOLEdBQUksRUFDSixPQUFRLEVBQ1IsV0FBWSxFQUNaLEtBQUssV0FiTixTQWVDLEdBNkNFLE1BN0NGLENBQ0MsVUFBVSw4QkFDVixjQUFZLG9CQUNaLE1BQU8sQ0FBRSxJQUFLLEdBQUcsS0FBaUIsRUFIbkMsU0E2Q0UsQ0F4Q0EsR0FBaUIsR0FBQyxHQUFELENBQVcsS0FBTSxFQUFLLE9BQVEsRUFBZSxFQUU5RCxHQUNBLGdCQWtDRSxDQWhDQSxFQUFZLE1BQU0sRUFBRyxDQUFZLEVBQUUsSUFBSSxDQUFDLEVBQU8sSUFDL0MsR0FBQyxNQUFELENBQ0MsVUFBVSxrQkFDVixjQUFhLEdBQU8sTUFFcEIsTUFBTyxDQUFFLE9BQVEsR0FBRyxLQUFnQixHQUQvQixFQUFLLFFBQVEsUUFBUyxFQUFVLEVBQU0sRUFBRSxDQUU5QyxDQUNBLEVBR0EsR0FFQSxHQWtCRSxNQWxCRixDQUNDLFVBQVUsb0hBQ1YsUUFBUyxDQUFDLElBQU0sQ0FDZixFQUFFLGdCQUFnQixFQUVsQixFQUFjLEVBQUssQ0FBVyxHQUUvQixVQUFXLENBQUMsSUFBTSxDQUNqQixHQUFJLEVBQUUsTUFBUSxTQUFXLEVBQUUsTUFBUSxJQUNsQyxFQUFFLGVBQWUsRUFDakIsRUFBRSxnQkFBZ0IsRUFDbEIsRUFBYyxFQUFLLENBQVcsR0FHaEMsS0FBSyxTQUNMLFNBQVUsRUFmWCxTQWtCRSxDQWxCRixJQWlCRyxFQWpCSCxJQWlCdUIsRUFBRSxNQUFNLEdBQzdCLEdBRUYsRUFFRixHQUNBLEVBQ0QsRUFHRixHQUFDLEdBQUQsQ0FBZ0IsSUFBSyxFQUFvQixHQUN4QyxHQUlTLEdBQVcsR0FBSyxFQUFjLDJDS3pMcEMsSUFBTSxHQUE0QyxFQUN4RCxXQUNBLFlBQ0EsV0FDQSxjQUFlLEtBQ1YsQ0FDTCxJQUFRLGtCQUFtQixFQUF3QixFQUVuRCxPQUNDLEdBZ0JFLE1BaEJGLENBQ0MsVUFBVyxFQUNWLGdFQUNBLENBQ0QsRUFDQSxjQUFhLEVBQ2IsTUFBTyxDQUNOLE1BQU8sRUFBUyxNQUNoQixnQkFBaUIsRUFBUyxlQUMzQixFQVRELFNBV0UsRUFDRSxFQUFlLENBQVEsRUFDdEIsR0FDRCxHQUFnRSxNQUFoRSxDQUFLLFVBQVUsK0JBQWYsU0FBK0MsRUFBUyxNQUFRLEVBRWxFLEdDcENKLGVBQVMsZUNBVCxlQUFTLHVFQThCVCxJQUFNLEdBQTZCLEVBQ2xDLGFBQ0EsV0FDQSxJQUFLLEVBQ0wsV0FDQSxPQUFPLGNBQ3lCLENBRWhDLElBQVEsNkJBQTRCLFFBQVMsRUFDNUMsQ0FBQyxLQUFXLENBQ1gsMkJBQTRCLEVBQU0sMkJBQ2xDLEtBQU0sRUFBTSxJQUNiLEVBQ0QsRUFFTSxFQUFNLEdBQVcsRUFBTSxFQUs3QixHQUFJLEVBRmtCLEVBQUksY0FBYyxDQUFVLEdBQUssRUFBSSxTQUFTLENBQVEsR0FHM0UsT0FBTyxLQUdSLElBQU0sRUFBZ0IsRUFBUyxLQUFLLEVBQVksUUFBUSxFQUVsRCxFQURtQixFQUFJLEtBQUssRUFBWSxRQUFRLEVBQ2pCLEVBQWlCLElBR3RELEdBQUksRUFDSCxPQUNDLGdCQUNFLEVBQTJCLENBQzNCLFlBQWEsRUFDYixhQUNBLFdBQ0EsV0FDQSxXQUNBLE9BQ0EsTUFDRCxDQUFDLEVBQ0EsRUFLSixHQUFJLElBQVMsYUFDWixPQUNDLEdBQUMsTUFBRCxDQUNDLFVBQVUsb0VBQ1YsY0FBWSx5QkFDWixNQUFPLENBQ04sS0FBTSxHQUFHLElBQ1YsRUFDRCxFQUlGLE9BQ0MsR0FBQyxNQUFELENBQ0MsVUFBVSxvRUFDVixjQUFZLHlCQUNaLE1BQU8sQ0FDTixJQUFLLEdBQUcsSUFDVCxFQUNELEdBSVcsR0FBdUIsR0FBSyxFQUEwQixzRERqRm5FLElBQU0sR0FFRixFQUNILFdBQVcsTUFDWCxPQUNBLGFBQ0EsV0FDQSxjQUFlLEVBQ2Ysc0JBQ0ssQ0FDTCxJQUFRLGVBQWdCLEVBQXdCLEVBQzFDLEVBQVksRUFBSyxHQUFHLENBQUMsR0FBRyxRQUFRLEtBQUssRUFNckMsRUFBYSxFQUFLLEdBQUcsQ0FBQyxFQUN0QixFQUFXLEVBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFHLENBQVEsRUFDdkMsRUFBYyxJQUFhLFFBQVUsUUFBUSxHQUFjLENBQVEsRUFFekUsT0FDQyxHQXNDRSxNQXRDRixDQUNDLFVBQVUsMERBQ1YsY0FBYSxFQUZkLFNBc0NFLENBbENBLEdBQWUsR0FBYyxHQUM3QixHQUFDLEdBQUQsQ0FDQyxLQUFLLGFBQ0wsU0FBVSxFQUNWLFdBQVksRUFDWixTQUFVLEVBQ1gsRUFFQSxFQUFpQixJQUFJLENBQUMsSUFBVSxDQUNoQyxJQUFNLEVBQVcsR0FBRyxFQUFNLE1BQU0sRUFBTSxZQUFZLEdBQVcsWUFBWSxLQUFLLEdBQWMsZ0JBRTVGLE9BQ0MsR0FtQkUsTUFuQkYsQ0FDQyxVQUFVLGtEQUNWLFlBQVcsRUFBTSxLQUNqQixjQUFhLEVBQUssVUFBVSxXQUFXLE1BQU0sRUFBTSxFQUFFLEVBQ3JELFdBQVUsRUFBTSxJQUNoQixhQUFZLEVBQU0sTUFFbEIsTUFBTyxDQUNOLEtBQU0sUUFBUSxFQUFNLGlDQUNwQixNQUFPLFFBQVEsRUFBTSwrQkFDckIsSUFBSyxHQUFHLEVBQU0sUUFDZCxPQUFRLEdBQUcsS0FDWixFQVpELFNBY0MsR0FBQyxHQUFELENBQ0MsVUFBVSx1QkFDVixVQUFXLEVBQ1gsTUFBTyxFQUNSLEdBWkssRUFBSyxRQUFRLEVBQVUsU0FBUyxDQWFwQyxFQUVILEdBQ0EsR0FJUyxHQUE0QixHQUFLLEVBQStCLHNEVC9DN0UsSUFBTSxHQUE0RCxFQUNqRSxLQUNBLFdBQ0EsV0FBVyxNQUNYLFVBQVUsV0FDVixrQkFDQSxZQUNBLFVBQVUsQ0FBQyxFQUNYLFNBQ0EsZ0JBQWdCLEdBQ2hCLFlBQVksTUFDUCxDQUNMLElBQVEsa0JBQW1CLEVBQXdCLEVBRTdDLEVBQXFCLElBQVksV0FHakMsRUFBWSxFQUFRLEtBQUssQ0FBQyxJQUFRLEVBQUksSUFBSSxFQUcxQyxFQUFXLEdBQVEsSUFBTSxDQUM5QixHQUFJLEVBQVcsTUFBTyxDQUFDLEVBQ3ZCLE9BQU8sRUFBUSxJQUFJLENBQUMsSUFBUSxFQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBa0IsUUFBUSxDQUFDLENBQUMsR0FDdkUsQ0FBQyxFQUFTLENBQVMsQ0FBQyxHQUdmLG1CQUFrQixnQkFBaUIsR0FBdUIsQ0FDakUsS0FBTSxFQUNOLFdBQ0EsV0FBWSxHQUFVLEdBQ3RCLGtCQUNBLFFBQ0QsQ0FBQyxFQUVELE9BQ0MsR0F3RUUsTUF4RUYsQ0FDQyxVQUFXLEVBQUcsK0JBQWdDLENBQVMsRUFDdkQsY0FBYSxFQUFLLFVBQVUsV0FBVyxJQUFJLENBQUUsRUFGOUMsU0F3RUUsQ0FwRUEsR0FBc0IsR0FDdEIsR0FVRSxHQVZGLENBQ0MsVUFBVSx1REFDVixjQUFhLEVBQUssVUFBVSxXQUFXLFNBQVMsRUFBUyxFQUFFLEVBQzNELFNBQVUsRUFIWCxTQUtFLEVBQ0EsRUFBZSxDQUFRLEVBRXZCLEdBQTJELE1BQTNELENBQUssVUFBVSwwQkFBZixTQUEwQyxFQUFTLE1BQVEsRUFFM0QsRUFFSCxHQXNERSxNQXRERixDQUFLLFVBQVUsK0JBQWYsU0FzREUsQ0FyREQsR0FzQ0UsTUF0Q0YsQ0FBSyxVQUFVLHNCQUFmLFNBQ0UsRUFBUSxJQUFJLENBQUMsRUFBSyxJQUFVLENBQzVCLEdBQUksRUFBSSxLQUNQLE9BQ0MsR0FBQyxHQUFELENBQ0MsT0FBUSxFQUNSLElBQUssRUFDTCxnQkFBaUIsRUFDakIsU0FBVSxFQUNWLEdBQUksRUFDSixVQUFXLElBQVUsRUFBUSxPQUFTLEVBQ3RDLFVBQVcsRUFFWCxTQUFVLEVBQ1YsV0FBWSxHQUFVLEdBQ3RCLGNBQWUsR0FIVixFQUFJLEVBSVYsRUFJRixPQUFPLEVBQUksSUFDVixHQUFDLEdBQUQsQ0FDQyxPQUFRLEVBQ1IsVUFBVyxFQUNWLGNBQ0EsR0FBYSxhQUNiLEVBQUksU0FDTCxFQUNBLElBQUssRUFBSSxJQUNULFNBQVUsRUFDVixLQUFNLElBQWEsT0FBUyxFQUFJLElBQUksS0FBSyxFQUFJLE9BRTdDLGtCQUFtQixFQUFhLElBQUksRUFBVSxFQUFJLEdBQUcsQ0FBQyxFQUN0RCxXQUFZLEdBQVUsR0FDdEIsY0FBZSxHQUhWLEVBQUksSUFBSSxZQUFZLENBSTFCLEVBQ0csS0FDSixFQUNBLEVBR0QsQ0FBQyxHQUNELEdBU0UsTUFURixDQUFLLFVBQVUsNENBQWYsU0FDQyxHQUFDLEdBQUQsQ0FDQyxjQUFhLEVBQUssVUFBVSxZQUFZLGFBQWMsQ0FBRSxFQUN4RCxLQUFNLEVBQ04sU0FBVSxFQUNWLGlCQUFrQixFQUNsQixTQUFVLEVBQ1YsV0FBWSxHQUFVLEdBQ3ZCLEVBQ0MsR0FFRixHQUNELEdBUUUsR0FBZ0IsR0FDckIsRUFDQyxNQUNBLFdBQVcsTUFDWCxTQUNBLFdBQ0EsYUFDQSxrQkFDQSxnQkFDQSxZQUNBLFlBQ0EsUUFZSyxDQUNMLElBQU0sRUFBTyxFQUFJLE1BQVEsQ0FBQyxHQUNsQixvQkFBcUIsR0FBdUIsQ0FDbkQsT0FDQSxXQUNBLGFBQ0Esa0JBQ0EsUUFDRCxDQUFDLEVBRUQsT0FDQyxHQStCRSxNQS9CRixDQUFLLFVBQVUsdUJBQWYsU0ErQkUsQ0E5QkQsR0FrQkUsTUFsQkYsQ0FBSyxVQUFVLGNBQWYsU0FDRSxFQUFLLElBQUksQ0FBQyxJQUNWLEdBQUMsR0FBRCxDQUNDLE9BQVEsRUFDUixVQUFXLEVBQ1YsY0FDQSxHQUFhLGFBQ2IsQ0FBQyxHQUFhLFlBQ2QsRUFBSSxTQUNMLEVBQ0EsSUFBSyxFQUNMLFNBQVUsRUFDVixLQUFNLElBQWEsT0FBUyxFQUFJLEtBQUssRUFBSSxPQUV6QyxXQUFZLEVBQ1osY0FBZSxHQUZWLEVBQUksWUFBWSxDQUd0QixDQUNBLEVBQ0EsRUFFRixHQVNFLE1BVEYsQ0FBSyxVQUFVLDRDQUFmLFNBQ0MsR0FBQyxHQUFELENBQ0MsY0FBYSxFQUFLLFVBQVUsWUFBWSxhQUFjLENBQUUsRUFDeEQsS0FBTSxFQUNOLFNBQVUsRUFDVixpQkFBa0IsRUFDbEIsU0FBVSxFQUNWLFdBQVksRUFDYixFQUNDLEdBQ0QsRUFHTCxFQUVhLEdBQW9CLEdBQUssRUFBdUIsRVc1TjdELGVBQVMsd0RBUVQsSUFBTSxHQUE4QyxFQUFHLGVBQWdCLENBQ3RFLElBQVEsS0FBTSxFQUF3QixFQUN0QyxPQUNDLEdBT0UsTUFQRixDQUNDLFVBQVcsRUFDVix1SUFDQSxDQUNELEVBSkQsU0FNQyxHQUEwQyxPQUExQyxDQUFNLFVBQVUsV0FBaEIsU0FBNEIsRUFBRSxRQUFRLEVBQUksRUFDekMsR0FJUyxHQUFhLEdBQUssRUFBZ0Isc0RaUC9DLElBQU0sR0FBNEMsRUFDakQsT0FDQSxVQUNBLFdBQ0EsYUFBYSxNQUNSLENBQ0wsSUFBTSxFQUFVLEVBQUssSUFBSSxDQUFDLEVBQUssS0FBVyxDQUN6QyxHQUFJLEVBQUssSUFBSSxPQUFPLEVBQUssQ0FBSyxFQUM5QixNQUNBLFNBQVUsTUFDVixVQUFXLEVBQUcsMkNBQTRDLEdBQVMsSUFBSSxDQUN4RSxFQUFFLEVBRUYsT0FDQyxHQW1CRSxNQW5CRixDQUNDLFVBQVcsRUFBRyw0QkFBNkIsR0FBUyxHQUFHLEVBQ3ZELGNBQVksY0FGYixTQW1CRSxDQWRBLEdBQWMsR0FBQyxHQUFELENBQVksVUFBVyxHQUFTLE9BQVEsRUFHdkQsR0FBQyxHQUFELENBQ0MsT0FBTSxHQUNOLFVBQVUsNEJBQ1YsUUFBUyxFQUNULGdCQUFpQixFQUNqQixTQUFTLE1BQ1QsR0FBSSxFQUFLLFVBQVUsR0FBVSxFQUFFLEVBQy9CLFVBQVMsR0FDVCxTQUFVLEVBQ1YsUUFBUSxVQUNULEdBQ0MsR0FJUyxHQUFZLEdBQUssRUFBZSwwRGE3Q3RDLElBQU0sR0FBc0MsRUFBRyxVQUFXLENBQ2hFLElBQVEsYUFBWSxjQUFlLEVBQXdCLEVBRTNELEdBQUksRUFDSCxPQUFPLGdCQUFHLEVBQVcsQ0FBSSxFQUFJLEVBRzlCLE9BQU8sZ0JBQUcsRUFBSyxPQUFPLElBQWUsVUFBWSxNQUFRLEdBQUcsRUFBSSxHQ2JqRSxpQkFBUyxlQ0RULG9CQUF5QixhQUFXLGVBc0JwQyxJQUFNLEdBQWUsd0NBQ2YsR0FBZ0IsY0FFaEIsR0FBWSxDQUFDLElBQWdDLENBQ2xELElBQU0sRUFBUSxHQUFhLEtBQUssQ0FBSSxFQUNwQyxHQUFJLENBQUMsRUFDSixPQUFPLEtBRVIsSUFBTSxFQUFPLE9BQU8sU0FBUyxFQUFNLEdBQUksRUFBRSxFQUV6QyxPQURrQixHQUFRLEdBQUssR0FBUSxHQUNwQixFQUFPLE1BR3JCLEdBQWMsQ0FBQyxJQUNwQixPQUFPLFNBQVMsRUFBSSxhQUFhLFdBQVcsR0FBSyxHQUFJLEVBQUUsRUFFbEQsR0FBZ0IsQ0FDckIsRUFDQSxJQUN3QixDQUN4QixJQUFNLEVBQVcsRUFBSyxHQUFHLENBQUMsRUFDcEIsRUFBVSxFQUFLLEdBQUcsRUFBRSxFQUMxQixHQUFJLENBQUMsR0FBWSxDQUFDLEVBQ2pCLE9BQU8sS0FHUixHQUFJLEdBQWMsR0FBWSxDQUFRLEVBQ3JDLE9BQU8sRUFFUixHQUFJLEdBQWMsR0FBWSxDQUFPLEVBQ3BDLE9BQU8sRUFFUixPQUFPLEVBQUssS0FBSyxDQUFDLElBQVEsR0FBWSxDQUFHLElBQU0sQ0FBVSxHQUFLLE1BR3pELEdBQXNCLENBQzNCLEVBQ0EsRUFDQSxFQUNBLElBQ0ksQ0FPSixJQUFNLEVBQWEsRUFBVSxzQkFBc0IsRUFDN0MsRUFBWSxFQUFTLHNCQUFzQixFQUVqRCxHQUFJLElBQVMsYUFBYyxDQUMxQixFQUFTLFNBQVMsQ0FDakIsS0FBTSxFQUFXLEtBQU8sRUFBVSxLQUNsQyxTQUFVLE1BQ1gsQ0FBQyxFQUNELE9BR0QsRUFBUyxTQUFTLENBQ2pCLElBQUssRUFBVyxJQUFNLEVBQVUsSUFDaEMsU0FBVSxNQUNYLENBQUMsR0FHVyxHQUFrQixFQUM5QixjQUNBLGFBQ0EsVUFDQSxZQUNBLE9BQU8sY0FDc0IsQ0FDN0IsSUFBTSxFQUFxQixHQUFzQixJQUFJLEVBRXJELEdBQVUsSUFBTSxDQUNmLEdBQUksQ0FBQyxHQUFXLENBQUMsRUFDaEIsT0FFRCxHQUFJLEVBQW1CLFVBQVksRUFDbEMsT0FHRCxJQUFNLEVBQWEsR0FBVSxDQUFVLEVBQ3ZDLEdBQUksSUFBZSxLQUNsQixPQUdELElBQU0sRUFBVyxFQUFZLFFBQzdCLEdBQUksQ0FBQyxFQUNKLE9BRUQsSUFBTSxFQUFPLE1BQU0sS0FDbEIsRUFBUyxpQkFBOEIsRUFBYSxDQUNyRCxFQUNNLEVBQVcsRUFBSyxHQUFHLENBQUMsRUFDcEIsRUFBWSxHQUFjLEVBQU0sQ0FBVSxFQUNoRCxHQUFJLENBQUMsR0FBWSxDQUFDLEVBQ2pCLE9BRUQsR0FBb0IsRUFBVSxFQUFXLEVBQVUsQ0FBSSxFQUN2RCxFQUFtQixRQUFVLEdBQzNCLENBQUMsRUFBUyxFQUFZLEVBQVcsRUFBYSxDQUFJLENBQUMsR0N6SHZELGVBQVMsZUNEVCxlQUFTLGVDQVQsa0JBQVMsZUNpQkYsSUFBTSxHQUF5QixFQUNyQyxPQUNBLFdBQVcsT0FDWCxZQUNzRCxDQUV0RCxJQUFNLEVBQWUsRUFDbkIsT0FBTyxDQUFDLElBQU0sQ0FBQyxFQUFFLE1BQU0sRUFDdkIsU0FBUyxDQUFDLEVBQUcsSUFBTSxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUUxQyxHQUFJLEVBQWEsU0FBVyxFQUMzQixNQUFPLENBQUMsRUFNVCxJQUFNLEVBQVksRUFBSyxHQUFHLENBQUMsR0FBSyxFQUFNLEVBQ2hDLEVBQWEsRUFBSyxPQUNsQixFQUFhLElBQWEsTUFHMUIsRUFBOEIsQ0FBQyxFQUNqQyxFQUFrQyxDQUFDLEVBQ25DLEVBQTZCLEtBQ2pDLFFBQVcsS0FBUyxFQUFjLENBQ2pDLEdBQUksR0FBZ0IsRUFBTSxNQUFNLGNBQWMsQ0FBWSxFQUFHLENBQzVELEdBQUksRUFBZSxPQUFTLEVBQzNCLEVBQVMsS0FBSyxDQUFjLEVBRTdCLEVBQWlCLENBQUMsRUFFbkIsRUFBZSxLQUFLLENBQUssRUFDekIsRUFBZSxFQUFlLEVBQU0sSUFBSSxFQUFjLEVBQU0sR0FBRyxFQUFJLEVBQU0sSUFFMUUsR0FBSSxFQUFlLE9BQVMsRUFDM0IsRUFBUyxLQUFLLENBQWMsRUFJN0IsSUFBTSxFQUFtQixDQUN4QixJQUM0QyxDQUM1QyxJQUFJLEVBQVksRUFBTSxNQUFNLEtBQUssRUFBVyxFQUFVLEVBQUksRUFDdEQsRUFBVSxFQUFNLElBQUksS0FBSyxFQUFXLEVBQVUsRUFBSSxFQUN0RCxHQUFJLEdBR0gsR0FGQSxFQUFZLEtBQUssTUFBTSxDQUFTLEVBQ2hDLEVBQVUsS0FBSyxLQUFLLENBQU8sRUFDdkIsR0FBVyxFQUFXLEVBQVUsRUFBWSxFQUVqRCxHQUFJLEVBQVksRUFBRyxFQUFZLEVBQy9CLEdBQUksRUFBVSxFQUFZLEVBQVUsRUFDcEMsSUFBTSxFQUFXLEtBQUssSUFBSSxFQUFHLEVBQVUsQ0FBUyxFQUNoRCxHQUFJLElBQWEsRUFBRyxPQUFPLEtBQzNCLE1BQU8sQ0FDTixJQUFNLEVBQVksRUFBYyxJQUNoQyxPQUFTLEVBQVcsRUFBYyxHQUNuQyxHQUlLLEVBQW1CLENBQUMsSUFDekIsSUFBTSxFQUFJLEdBQUssSUFBTSxFQUFJLEdBQUssSUFBTSxFQUFJLEdBQUssR0FHeEMsRUFBcUMsQ0FBQyxFQUM1QyxRQUFXLEtBQVcsRUFBVSxDQUMvQixHQUFJLEVBQVEsU0FBVyxFQUFHLENBQ3pCLElBQU0sRUFBUSxFQUFRLEdBQ2hCLEVBQU0sRUFBaUIsQ0FBSyxFQUNsQyxHQUFJLENBQUMsRUFBSyxTQUNWLEVBQWdCLEtBQUssSUFBSyxFQUFPLEtBQU0sRUFBRyxNQUFPLE9BQVEsQ0FBSSxDQUFDLEVBQzlELFNBS0QsSUFBTSxFQUFnQixDQUFDLEdBQUcsQ0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFHLElBQU0sQ0FDakQsSUFBTSxFQUNMLEVBQUUsSUFBSSxLQUFLLEVBQUUsTUFBTyxRQUFRLEVBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFPLFFBQVEsRUFDN0QsT0FBTyxJQUFZLEVBQUksRUFBVSxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssRUFDckQsRUFFSyxFQUFJLEVBQWMsT0FDbEIsRUFBaUIsRUFBSSxFQUFJLEVBQWlCLENBQUMsR0FBSyxFQUFJLEdBQUssRUFFL0QsUUFBUyxFQUFJLEVBQUcsRUFBSSxFQUFHLElBQUssQ0FDM0IsSUFBTSxFQUFRLEVBQWMsR0FDdEIsRUFBTSxFQUFpQixDQUFLLEVBQ2xDLEdBQUksQ0FBQyxFQUFLLFNBRVYsSUFBTSxFQUFPLElBQU0sRUFBSSxFQUFJLEVBQWlCLEVBQzVDLEVBQWdCLEtBQUssSUFDakIsS0FDQSxFQUNILE9BQ0EsTUFBTyxJQUFNLEVBQ2IsT0FBUSxFQUFJLENBQ2IsQ0FBQyxHQUlILE9BQU8sR0R4R0QsSUFBTSxHQUF3QixFQUNwQyxPQUNBLFdBQ0EsZ0JBQ2lDLENBQ2pDLElBQVEsd0JBQXVCLHdCQUM5QixFQUF3QixFQUNuQixFQUFRLEVBQUssR0FBRyxDQUFDLEVBQ2pCLEVBQU8sRUFBSyxHQUFHLEVBQUUsRUFDakIsRUFBVyxHQUFPLFFBQVEsS0FBSyxFQUMvQixFQUFTLEdBQU0sTUFBTSxLQUFLLEVBRTFCLEVBQVMsR0FBUSxJQUFNLENBQzVCLEdBQUksQ0FBQyxHQUFZLENBQUMsRUFBUSxNQUFPLENBQUMsRUFFbEMsSUFBSSxFQUFZLEVBQXNCLEVBQVUsQ0FBTSxFQUN0RCxHQUFJLEVBQ0gsRUFBWSxHQUNYLEVBQ0EsRUFBcUIsQ0FBVSxDQUNoQyxFQUtELE9BQU8sRUFBVSxPQUFPLENBQUMsSUFBTSxDQUFDLEVBQUUsTUFBTSxHQUN0QyxDQUNGLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDRCxDQUFDLEVBVUQsT0FSb0IsR0FBMkIsSUFBTSxDQUNwRCxPQUFPLEdBQXVCLENBQzdCLE9BQ0EsU0FDQSxVQUNELENBQUMsR0FDQyxDQUFDLEVBQU0sRUFBVSxDQUFNLENBQUMsdUREdEM1QixJQUFNLEdBQXdFLEVBQzdFLE9BQ0EsV0FBVyxPQUNYLGFBQ0EsV0FDQSxjQUFlLEtBQ1YsQ0FDTCxJQUFNLEVBQWMsR0FBc0IsQ0FBRSxPQUFNLFdBQVUsWUFBVyxDQUFDLEVBQ2xFLEVBQWEsRUFBSyxHQUFHLENBQUMsRUFDdEIsRUFBVyxFQUFLLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRyxDQUFRLEVBSXZDLEVBQWMsSUFBYSxRQUFVLFFBQVEsR0FBYyxDQUFRLEVBRXpFLE9BQ0MsR0FvQ0UsTUFwQ0YsQ0FDQyxVQUFVLGdFQUNWLGNBQWEsRUFGZCxTQW9DRSxDQWhDQSxHQUFlLEdBQWMsR0FDN0IsR0FBQyxHQUFELENBQ0MsU0FBVSxFQUNWLFdBQVksRUFDWixTQUFVLEVBQ1gsRUFFQSxFQUFZLElBQUksQ0FBQyxFQUFPLElBQVUsQ0FDbEMsSUFBTSxFQUFXLFNBQVMsRUFBTSxNQUFNLEtBQVMsRUFBSyxHQUFHLENBQUMsR0FBRyxZQUFZLEtBQUssR0FBYyxnQkFDcEYsRUFBZSxFQUFNLElBQUksS0FBSyxFQUFNLE1BQU8sUUFBUSxHQUFLLEdBRTlELE9BQ0MsR0FpQkUsTUFqQkYsQ0FDQyxVQUFVLFdBRVYsTUFBTyxDQUNOLEtBQU0sR0FBRyxFQUFNLFFBQ2YsTUFBTyxRQUFRLEVBQU0sK0JBQ3JCLElBQUssR0FBRyxFQUFNLE9BQ2QsT0FBUSxHQUFHLEVBQU0sU0FDbEIsRUFSRCxTQVVDLEdBQUMsR0FBRCxDQUNDLFVBQVcsRUFBRyxzQkFBdUIsQ0FDcEMsK0JBQWdDLENBQ2pDLENBQUMsRUFDRCxVQUFXLEVBQ1gsTUFBTyxFQUNSLEdBZEssRUFBSyxRQUFRLEVBQVUsU0FBUyxDQWVwQyxFQUVILEdBQ0EsR0FJUyxHQUEwQixHQUFLLEVBQTZCLHNERDNDekUsSUFBTSxHQUF3RCxFQUM3RCxLQUNBLE9BQ0EsYUFDQSxXQUNBLGNBQWUsRUFDZixXQUNBLFlBQ0EsYUFDQSxXQUNBLHNCQUFzQixHQUN0QixrQkFDSyxDQUNMLElBQU0sRUFBWSxLQUFLLE1BQU0sR0FBSyxDQUFtQixFQUMvQyxFQUFjLE1BQU0sS0FDekIsQ0FBRSxPQUFRLENBQVUsRUFDcEIsQ0FBQyxFQUFHLElBQU0sRUFBSSxDQUNmLEVBQ00sRUFBa0IsRUFBWSxPQUFTLEVBQzdDLE9BQ0MsR0E4RUUsTUE5RUYsQ0FDQyxVQUFXLEVBQ1YsbUZBQ0EsRUFBZSxhQUFlLFdBQzlCLENBQ0QsRUFDQSxjQUFhLEdBQWMsRUFBSyxVQUFVLFNBQVMsSUFBSSxDQUFFLEVBTjFELFNBU0MsR0FvRUUsTUFwRUYsQ0FDQyxVQUFVLDhCQUNWLE1BQU8sQ0FDTixpQkFBa0IsVUFBVSxFQUFLLHlCQUNsQyxFQUpELFNBb0VFLENBOURBLEVBQUssSUFBSSxDQUFDLEVBQUssSUFBYSxDQUM1QixJQUFNLEVBQVUsRUFBSSxPQUFPLElBQUksRUFFL0IsR0FBSSxFQUFZLENBQ2YsSUFBTSxFQUFlLElBQU8sRUFBSyxJQUFJLEtBQy9CLEVBQVMsRUFDWixFQUFLLEtBQUssYUFBYSxDQUFPLEVBQzlCLEVBQUssS0FBSyxTQUFTLEVBQUssRUFBUyxLQUFNLENBQVUsRUFDcEQsT0FDQyxHQU9FLE1BUEYsQ0FDQyxVQUFVLGlDQUNWLFlBQVcsRUFBZSxFQUFVLE9BQ3BDLGNBQWEsRUFIZCxTQU1FLEVBQVcsQ0FBRyxHQUZWLEVBQUssUUFBUSxFQUFJLEVBQVUsQ0FBTyxDQUd0QyxFQUlKLE9BQ0MsR0F5QkUsTUF6QkYsQ0FDQyxVQUFVLDZCQURYLFNBSUUsRUFBWSxJQUFJLENBQUMsSUFBVyxDQUM1QixJQUFNLEVBQUssT0FBTyxDQUFNLEVBQUUsU0FBUyxFQUFHLEdBQUcsRUFDbkMsRUFBUyxFQUFLLEtBQUssU0FBUyxFQUFLLEVBQVMsRUFBSSxDQUFVLEVBRTlELE9BQ0MsR0FBQyxHQUFELENBQ0MsVUFBVyxFQUNWLGtGQUNBLEdBQW1CLGVBQ3BCLEVBQ0EsY0FBYSxFQUNiLElBQUssRUFBa0IsRUFBSSxPQUFPLENBQU0sRUFBSSxFQUM1QyxTQUFVLEVBQ1YsS0FBTSxFQUFJLEtBQUssRUFFZixPQUFRLEVBQWtCLEVBQVMsT0FDbkMsV0FBWSxFQUNaLG1CQUFvQixJQUhmLEVBQUssUUFBUSxFQUFJLEVBQVUsQ0FBRSxDQUluQyxFQUVELEdBdEJJLEVBQUssUUFBUSxFQUFJLEVBQVUsQ0FBTyxDQXVCdEMsRUFFSCxFQUdBLENBQUMsR0FDRCxHQVFFLE1BUkYsQ0FBSyxVQUFVLDRDQUFmLFNBQ0MsR0FBQyxHQUFELENBQ0MsY0FBYSxFQUFLLFVBQVUsWUFBWSxXQUFZLENBQUUsRUFDdEQsS0FBTSxFQUNOLFNBQVUsRUFDVixTQUFVLEVBQ1YsV0FBWSxFQUNiLEVBQ0MsR0FFRixFQUNELEdBSVMsR0FBa0IsR0FDOUIsRUFDRCxFSXRJQSxlQUFTLG1FQVlULElBQU0sR0FFRixFQUFHLFdBQVUsVUFBUyxZQUFXLGtCQUFrQixNQUFZLENBQ2xFLElBQVEsbUJBQWtCLHVCQUF3QixFQUNqRCxDQUFDLEtBQVcsQ0FDWCxpQkFBa0IsRUFBTSxpQkFDeEIsb0JBQXFCLEVBQU0sbUJBQzVCLEVBQ0QsRUFDTSxFQUFrQixtQkFDeEIsT0FDQyxHQTJCRSxNQTNCRixDQUNDLFVBQVcsRUFDVixHQUFtQix1QkFDbkIsR0FBb0Isa0NBQ3BCLENBQ0QsRUFMRCxTQTJCRSxDQXBCRCxHQUtFLE1BTEYsQ0FDQyxVQUFXLEVBQUcsZ0JBVk8sbUJBVTJCLEdBQVMsTUFBTSxFQUMvRCxjQUFZLHVCQUZiLFNBSUUsRUFDQSxFQUVELEdBQ0EsR0FVRSxNQVZGLENBQ0MsVUFBVyxFQUNWLGdCQW5CbUIsbUJBcUJuQixHQUFtQix5QkFDbkIsR0FBUyxNQUNWLEVBQ0EsY0FBWSx3QkFQYixTQVNFLEVBQ0EsR0FFRixHQUlTLEdBQThCLEdBQzFDLEVBQ0Qsc0ROaENPLElBQU0sR0FBNEMsRUFDeEQsVUFDQSxXQUNBLFdBQVcsTUFDWCxVQUFVLFdBQ1YsVUFDQSxZQUNBLHNCQUNBLFdBQ0ssQ0FDTCxJQUFNLEVBQXFCLElBQVksV0FDakMsRUFBb0IsQ0FBQyxFQUlyQixFQUFrQixFQUFRLE1BQU0sQ0FBQyxJQUFNLENBQUMsRUFBRSxNQUFNLE1BQU0sR0FFcEQsY0FBYSxPQUFNLGNBQWUsRUFBd0IsRUFDNUQsRUFBYyxHQUE4QixJQUFJLEVBSXRELEdBQWdCLENBQ2YsY0FDQSxhQUNBLFFBTHdCLElBQWEsUUFBVSxDQUFDLEVBTWhELFVBQVcsR0FBRyxLQUFRLEVBQVksT0FBTyxZQUFZLEdBQ3RELENBQUMsRUFFRCxJQUFNLEVBQVMsR0FDZCxHQU1FLEdBTkYsQ0FDQyxVQUFXLEVBQ1gsUUFBUyxDQUFFLE9BQVEsR0FBUyxPQUFRLE9BQVEsR0FBUyxNQUFPLEVBQzVELGdCQUFpQixFQUhsQixTQUtFLEVBQ0EsRUFTSCxHQUFJLEdBQW1CLEVBQ3RCLE9BQ0MsR0FNRSxNQU5GLENBQ0MsVUFBVSx1QkFDVixjQUFZLDBCQUNaLE1BQU8sRUFIUixTQUtFLEVBQ0EsRUFJSixPQUNDLEdBc0NFLE1BdENGLENBQ0MsVUFBVSx1QkFDVixjQUFZLDBCQUNaLE1BQU8sRUFIUixTQXNDRSxDQWhDQSxHQUFxQixFQUV0QixHQTZCRSxHQTdCRixDQUNDLFVBQVcsRUFBRyxTQUFVLEdBQXFCLGVBQWUsRUFDNUQsY0FBWSx1QkFDWixjQUFlLENBQ2QsVUFBVyxtQ0FDWCxJQUFLLENBQ04sRUFORCxTQTZCRSxDQXBCQSxHQUFzQixFQUV2QixHQWNFLE1BZEYsQ0FDQyxVQUFXLEVBQUcsK0JBQWdDLEdBQVMsSUFBSSxFQUMzRCxjQUFZLHFCQUZiLFNBS0UsRUFBUSxJQUFJLENBQUMsRUFBUSxJQUNyQixHQUFDLEdBQUQsSUFFSyxFQUNKLFNBQVUsRUFDVixhQUFjLElBQVUsRUFBUSxPQUFTLEVBQ3pDLG9CQUFxQixHQUpoQixFQUFLLFFBQVEsRUFBTyxHQUFJLENBQUssQ0FLbkMsQ0FDQSxFQUNBLEVBQ0YsR0FBQyxHQUFELENBQVcsVUFBVSxPQUFPLEVBMUI3QixJQTJCQyxHQUFDLEdBQUQsQ0FBVyxVQUFVLE9BQU8sWUFBWSxhQUFhLEVBQUcsS0FFdkQsR0FDRCxHTzlGRyxTQUFTLEVBQVksRUFDM0IsZ0JBQ0EsZ0JBQ0EsdUJBQ0EsV0FBVyxDQUFDLENBQWEsRUFDekIsd0JBQXdCLENBQUMsR0FDTyxDQUNoQyxJQUFNLEVBQVEsR0FBWSxDQUFFLGVBQWMsQ0FBQyxFQUVyQyxFQUNMLENBQUMsQ0FBQyxHQUFpQixFQUFzQixPQUFTLEVBSW5ELEdBQUksRUFGSCxHQUF3QixHQUVTLE9BQU8sRUFFekMsSUFBUSxXQUFVLFNBQVEsb0JBQXFCLEdBQTRCLENBQzFFLFdBQ0EsZ0JBQ0Esd0JBQ0Esc0JBQ0QsQ0FBQyxFQUVELEdBQUksQ0FBQyxFQUFrQixPQUFPLEVBRTlCLEdBQUksR0FBWSxFQUFRLE1BQU8sQ0FBQyxFQUVoQyxPQUFPLEVBQU0sT0FBTyxDQUFDLElBQU0sQ0FDMUIsSUFBTSxFQUFPLEVBQUUsS0FBSyxFQUNwQixPQUFPLEdBQVEsR0FBWSxFQUFPLEVBQ2xDLHNEQzdDSyxJQUFNLEdBQVUsSUFBTSxDQUM1QixJQUFRLGNBQWEsSUFBRyxnQkFBZSx1QkFBc0IsZ0JBQzVELEVBQXdCLEVBQ25CLEVBQVEsRUFBUSxDQUFXLEVBQzNCLEVBQVEsR0FBYSxDQUMxQixjQUFlLEVBQ2YsZ0JBQ0EsdUJBQ0EsU0FBVSxDQUFDLENBQVcsQ0FDdkIsQ0FBQyxFQUVLLEVBQVcsQ0FDaEIsR0FBSSxFQUFLLElBQUksS0FDYixJQUFLLE9BQ0wsS0FBTSxFQUNOLFVBQ0MsOEVBQ0QsU0FBVSxPQUNWLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQUVFLE1BRkYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0MsR0FBQyxHQUFELENBQVcsS0FBTSxFQUFNLEVBQ3RCLENBRUosRUFFTSxFQUFVLENBQ2YsR0FBSSxFQUFLLElBQUksSUFBSSxDQUFXLEVBQzVCLElBQUssRUFDTCxLQUFNLEVBQ04sVUFBVyw2QkFDWCxTQUFVLE1BQ1gsRUFFQSxPQUNDLEdBZ0NFLEdBaENGLENBQ0MsVUFBVyxHQUFDLEdBQUQsQ0FBVyxLQUFNLENBQUMsQ0FBVyxFQUFHLEVBQzNDLFFBQVMsQ0FDUixPQUFRLFNBQ1IsS0FBTSxTQUNOLE9BQVEsUUFDVCxFQUNBLFFBQVMsQ0FBQyxFQUFVLENBQU8sRUFDM0IsU0FBUyxPQUNULG9CQUFxQixFQUNyQixRQUFRLFVBVlQsU0FhQyxHQWtCRSxNQWxCRixDQUNDLFVBQVcsbURBQ1gsY0FBWSxrQkFGYixTQUlDLEdBYUUsRUFiRixDQUNDLFVBQVcsRUFDVixnRkFDQSxHQUFTLGNBQ1YsRUFDQSxjQUFlLEVBQVUsQ0FBVyxFQUxyQyxTQWFFLENBTkEsRUFBWSxPQUFPLFVBQVUsRUFDN0IsR0FDQSxHQUVFLE9BRkYsQ0FBTSxVQUFVLDhGQUFoQixTQUNFLEVBQUUsT0FBTyxFQUNULEdBRUYsRUFDRCxFQUNELEdDN0VKLGtCQUFTLGVDQVQsaUJBQVMsZUNEVCxlQUFTLHdEQVNULElBQU0sR0FBc0MsRUFDM0MsV0FDQSxlQUN5QyxDQUN6QyxJQUFRLG1CQUFrQix1QkFBd0IsRUFDakQsQ0FBQyxLQUFXLENBQ1gsaUJBQWtCLEVBQU0saUJBQ3hCLG9CQUFxQixFQUFNLG1CQUM1QixFQUNELEVBQ0EsT0FDQyxHQVVFLE1BVkYsQ0FDQyxVQUFXLEVBQ1Ysa0JBQ0EsR0FBb0Isa0NBQ3BCLEVBQ0EsQ0FDRCxFQUNBLGNBQVkseUJBUGIsU0FTRSxFQUNBLEdBSVMsR0FBZ0MsR0FDNUMsRUFDRCxzRERkTyxJQUFNLEdBQWdELEVBQzVELE9BQ0EsV0FDQSxVQUNBLE9BQVEsRUFDUixXQUNBLFVBQVUsV0FDVixxQkFDSyxDQUNMLElBQVEsY0FBYSxPQUFNLGNBQWUsRUFBd0IsRUFDNUQsRUFBYyxHQUE4QixJQUFJLEVBRWhELEVBQXFCLElBQVksV0FDakMsRUFBb0IsQ0FBQyxFQUczQixHQUFnQixDQUNmLGNBQ0EsYUFDQSxRQUxpQyxJQUFhLFFBQVUsRUFNeEQsVUFBVyxHQUFHLEtBQVEsRUFBWSxPQUFPLFlBQVksSUFDckQsS0FBTSxZQUNQLENBQUMsRUFFRCxJQUFNLEVBQVMsR0FDZCxHQUVFLEdBRkYsQ0FBK0IsVUFBVyxHQUFTLE9BQW5ELFNBQ0UsRUFDQSxFQUdILE9BQ0MsR0FnREUsTUFoREYsQ0FDQyxVQUFVLHVCQUNWLGNBQVksNEJBRmIsU0FnREUsQ0F6Q0EsR0FBcUIsRUFFdEIsR0FzQ0UsR0F0Q0YsQ0FDQyxVQUFXLEVBQUcsU0FBVSxHQUFxQixlQUFlLEVBQzVELGNBQVkseUJBQ1osY0FBZSxDQUNkLFVBQVcsbUNBQ1gsSUFBSyxDQUNOLEVBTkQsU0FzQ0UsQ0EzQkEsR0FBc0IsRUFHdkIsR0FvQkUsTUFwQkYsQ0FDQyxVQUFXLEVBQUcsb0JBQXFCLEdBQVMsSUFBSSxFQUNoRCxjQUFZLHVCQUZiLFNBSUMsR0FlRSxNQWZGLENBQ0MsVUFBVSx1Q0FEWCxTQUlFLEVBQUssSUFBSSxDQUFDLEVBQUssSUFDZixHQUFDLEdBQUQsQ0FDQyxPQUFRLEVBQUksUUFBVSxFQUN0QixnQkFBaUIsRUFDakIsU0FBVSxFQUNWLFVBQVcsSUFBVSxFQUFLLE9BQVMsRUFFbkMsUUFBUyxLQUNMLEdBRkMsRUFBSSxFQUdWLENBQ0EsR0FaSSxFQUFZLE9BQU8sU0FBUyxDQWFoQyxFQUNELEVBRUYsR0FBQyxHQUFELENBQVcsVUFBVSxPQUFPLEVBQzVCLEdBQUMsR0FBRCxDQUFXLFVBQVUsT0FBTyxZQUFZLGFBQWEsR0FDcEQsR0FDRCw0Q0UxRkcsSUFBTSxHQUEwQyxFQUFHLGVBQWdCLENBQ3pFLElBQVEsaUJBQWdCLG1CQUFrQixzQkFBcUIsZUFDOUQsRUFBd0IsRUFHbkIsRUFBVyxFQUFZLEVBQWEsQ0FBYyxFQUV4RCxPQUNDLEdBc0JFLE1BdEJGLENBQ0MsVUFBVyxFQUNWLGNBQ0EsR0FBb0Isb0JBQ3BCLEVBQ0EsQ0FDRCxFQUNBLGNBQVksZUFQYixTQVNFLEVBQVMsSUFBSSxDQUFDLEVBQVMsSUFDdkIsR0FVRSxFQVZGLENBQ0MsVUFBVSxnRkFDVixjQUFhLEVBQUssT0FBTyxRQUFRLFFBQVMsRUFBUSxPQUFPLEtBQUssQ0FBQyxFQUMvRCxNQUFPLEVBQVEsS0FFZixjQUFlLEVBQVEsWUFBWSxFQUxwQyxTQU9DLEdBRUUsT0FGRixDQUFNLFVBQVUsMkNBQWhCLFNBQ0UsRUFBUSxPQUFPLEtBQUssRUFDcEIsR0FMRyxFQUFRLFlBQVksQ0FNeEIsQ0FDRixFQUNBLDRDSGhDRyxJQUFNLEdBQXNDLElBQU0sQ0FDeEQsSUFBUSxjQUFhLGtCQUFtQixFQUF3QixFQU8xRCxFQUxRLEdBQ2IsSUFBTSxHQUFjLEVBQWEsQ0FBYyxFQUMvQyxDQUFDLEVBQWEsQ0FBYyxDQUM3QixFQUVtQixJQUFJLENBQUMsRUFBTSxLQUFlLENBQzVDLEdBQUksRUFBSyxRQUFRLE9BQVEsQ0FBUyxFQUNsQyxRQUFTLEVBQUssSUFBSSxDQUFDLEtBQVMsQ0FDM0IsR0FBSSxFQUFLLElBQUksSUFBSSxDQUFHLEVBQ3BCLE1BQ0EsVUFBVyxTQUNYLFNBQVUsS0FDWCxFQUFFLEVBQ0YsVUFBVyxTQUNYLGNBQWUsRUFDaEIsRUFBRSxFQUVGLE9BQ0MsR0FNRSxHQU5GLENBQ0MsUUFBUyxDQUFFLEtBQU0sU0FBVSxPQUFRLFFBQVMsRUFDNUMsS0FBTSxFQUNOLFFBQVEsVUFIVCxTQUtDLEdBQUMsR0FBRCxDQUFhLFVBQVUsT0FBTyxFQUM3QixHSW5DSixrQkFBUyxtRUFZVCxJQUFNLEdBQWEsaUJBQ2IsR0FBaUIseURBRVYsR0FBcUIsSUFBTSxDQUN2QyxJQUNDLElBQ0EsY0FDQSxpQkFDQSxhQUNBLGdCQUNBLGdCQUNBLHVCQUNBLGFBQ0EsZ0JBQ0csRUFBd0IsRUFFdEIsRUFBVyxHQUNoQixJQUFNLEVBQVksRUFBYSxDQUFjLEVBQzdDLENBQUMsRUFBYSxDQUFjLENBQzdCLEVBRU0sRUFBYyxHQUNuQixJQUNDLEVBQ0csRUFBUyxPQUFPLENBQUMsSUFBUSxDQUFDLEVBQVcsSUFBSSxFQUFJLElBQUksQ0FBQyxDQUFDLEVBQ25ELEVBQ0osQ0FBQyxFQUFVLENBQVUsQ0FDdEIsRUFFTSxFQUFRLEdBQ2IsSUFDQyxHQUFhLENBQ1osY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FDWCxDQUFDLEVBQ0YsQ0FBQyxFQUFhLEVBQWUsRUFBc0IsQ0FBUSxDQUM1RCxFQUVNLEVBQVcsQ0FDaEIsR0FBSSxFQUFLLElBQUksS0FDYixLQUFNLEVBQ04sSUFBSyxPQUNMLFVBQVcsWUFBWSxpREFDdkIsU0FBVSxPQUNWLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQUVFLE1BRkYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0MsR0FBQyxHQUFELENBQVcsS0FBTSxFQUFNLEVBQ3RCLENBRUosRUFHTSxFQUFVLEdBQVEsSUFBTSxDQUM3QixPQUFPLEVBQVksSUFBSSxDQUFDLEtBQVMsQ0FDaEMsR0FBSSxFQUFLLElBQUksSUFBSSxDQUFHLEVBQ3BCLE1BQ0EsTUFBTyxFQUFJLE9BQU8sR0FBRyxFQUNyQixVQUFXLEdBQ1gsS0FBTSxHQUFhLENBQ2xCLGNBQWUsRUFDZixnQkFDQSx1QkFDQSxTQUFVLENBQ1gsQ0FBQyxFQUNELE1BQU8sQ0FDUixFQUFFLEdBQ0EsQ0FBQyxFQUFVLEVBQWUsRUFBc0IsRUFBWSxHQUFHLENBQUMsRUFFN0QsRUFBVSxDQUNmLGlCQUFrQixFQUFZLE1BQy9CLEVBRU0sRUFBYSxTQUNuQixPQUNDLEdBa0VFLEdBbEVGLENBQ0MsVUFDQyxHQUFDLEdBQUQsQ0FDQyxRQUFTLENBQUUsS0FBTSxHQUFZLE9BQVEsRUFBZSxFQUNwRCxLQUFNLEVBQ1AsRUFFRCxRQUFTLENBQ1IsT0FBUSxjQUNSLE9BWGdCLFNBWWhCLEtBWmdCLFFBYWpCLEVBQ0EsUUFBUyxDQUFDLEVBQVUsR0FBRyxDQUFPLEVBQzlCLFNBQVMsT0FDVCxvQkFBcUIsRUFDckIsTUFBTyxFQUNQLFFBQVEsVUFoQlQsU0FrQkMsR0ErQ0UsTUEvQ0YsQ0FBSyxVQUFXLHFCQUFzQixjQUFZLG1CQUFsRCxTQStDRSxDQTdDRCxHQVNFLE1BVEYsQ0FBSyxVQUFVLGtHQUFmLFNBQ0MsR0FPRSxNQVBGLENBQUssVUFBVSwyREFBZixTQU9FLENBTkQsR0FFRSxPQUZGLENBQU0sVUFBVSw0REFBaEIsU0FDRSxFQUFFLE1BQU0sRUFDUixFQUNGLEdBRUUsT0FGRixDQUFNLFVBQVUsMENBQWhCLFNBQ0UsRUFBWSxLQUFLLEVBQ2pCLEdBQ0QsRUFDRCxFQUdELEVBQVksSUFBSSxDQUFDLEVBQUssSUFBVSxDQUNoQyxJQUFNLEVBQVEsRUFBUSxDQUFHLEVBQ25CLEVBQU0sRUFBSyxPQUFPLEtBQUssSUFBSSxDQUFHLEVBRXBDLE9BQ0MsR0F5QkUsRUF6QkYsQ0FDQyxVQUFXLEVBQ1YseUlBQ0EsR0FBUyx5QkFDVixFQUNBLGNBQWEsRUFBSyxPQUFPLFFBQVEsT0FBUSxFQUFJLE9BQU8sTUFBTSxDQUFDLEVBQzNELE1BQU8sRUFBUSxLQUVmLFFBQVMsSUFBTSxDQUNkLEVBQVcsQ0FBRyxFQUNkLEVBQWMsQ0FBRSxNQUFPLENBQUksQ0FBQyxHQUU3QixjQUFlLEVBWmhCLFNBeUJFLENBWEQsR0FFRSxNQUZGLENBQUssVUFBVSxxQ0FBZixTQUNFLEVBQUksT0FBTyxLQUFLLEVBQ2hCLEVBQ0YsR0FPRSxNQVBGLENBQ0MsVUFBVyxFQUNWLDZFQUNBLEdBQVMsb0NBQ1YsRUFKRCxTQU1FLEVBQUksT0FBTyxHQUFHLEVBQ2QsSUFqQkcsQ0FrQkosRUFFSCxHQUNBLEVBQ0QsdURDcEpKLElBQU0sR0FBbUIsQ0FBQyxhQUFjLGNBQWUsY0FBYyxFQUMvRCxHQUF3QixHQWtCakIsR0FBVyxJQUFNLENBQzdCLElBQ0MsY0FDQSxhQUNBLFNBQ0EsVUFDQSx3QkFDQSxJQUNBLGtCQUNHLEVBQXdCLEVBQ3RCLEVBQWMsRUFBWSxLQUFLLEVBRS9CLEVBQWlCLEVBQVksRUFBTSxFQUFHLENBQWMsRUFBRSxJQUFJLENBQUMsS0FBTyxDQUN2RSxHQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFDckIsTUFBTyxFQUFFLE9BQU8sSUFBSSxDQUNyQixFQUFFLEVBRUksRUFBcUIsSUFBbUIsQ0FDN0MsT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBZSxDQUNwRCxJQUFNLEVBQVksRUFBTSxFQUN0QixLQUFLLENBQVcsRUFDaEIsTUFBTSxDQUFVLEVBQ2hCLFFBQVEsT0FBTyxFQUNYLEVBQWdCLEVBQU8sT0FDNUIsQ0FBQyxJQUNBLEVBQU0sTUFBTSxLQUFLLElBQU0sR0FDdkIsRUFBTSxNQUFNLE1BQU0sSUFBTSxDQUMxQixFQUVBLE1BQU8sQ0FDTixLQUFNLEVBQ04sS0FBTSxFQUFVLE9BQU8sTUFBTSxFQUM3QixXQUFZLEVBQWMsT0FDMUIsU0FBVSxFQUFVLE9BQU8sSUFBSSxDQUNoQyxFQUNBLEdBR0ksRUFBdUIsQ0FBQyxJQUFnQyxDQUM3RCxJQUFNLEVBQXFCLEVBQVUsUUFBUSxPQUFPLEVBQUUsUUFBUSxNQUFNLEVBRXBFLE9BQU8sTUFBTSxLQUFLLENBQUUsT0FBUSxFQUFzQixFQUFHLENBQUMsRUFBRyxJQUFhLENBQ3JFLElBQU0sRUFBVSxFQUFtQixJQUFJLEVBQVUsS0FBSyxFQUNoRCxFQUFXLEVBQVEsUUFBUSxLQUFLLEVBQ2hDLEVBQVMsRUFBUSxNQUFNLEtBQUssRUFDNUIsRUFBYyxFQUFzQixFQUFVLENBQU0sRUFFMUQsTUFBTyxDQUNOLEtBQU0sRUFDTixPQUFRLEVBQVUsQ0FBTyxFQUN6QixpQkFBa0IsRUFBUSxNQUFNLElBQU0sRUFBVSxNQUFNLEVBQ3RELFFBQVMsRUFBUSxDQUFPLEVBQ3hCLFdBQVksRUFBUSxPQUFPLEVBQWEsS0FBSyxFQUM3QyxXQUFZLEVBQVksTUFDekIsRUFDQSxHQUdJLEVBQWlCLENBQ3RCLEVBQ0EsRUFDQSxJQUNJLENBQ0osR0FBTyxnQkFBZ0IsRUFDdkIsRUFBVyxDQUFJLEVBQ2YsRUFBUSxDQUFJLEdBR1AsRUFBcUIsQ0FBQyxJQUEwQixDQUNyRCxJQUFNLEVBQVksSUFBVSxFQUFJLEVBQUUsT0FBTyxFQUFJLEVBQUUsUUFBUSxFQUN2RCxNQUFPLEdBQUcsS0FBUyxLQUdkLEVBQWtCLENBQUMsSUFBeUIsQ0FHakQsSUFBTSxFQUFvQixFQUFJLGlCQUMzQixHQUNBLG1DQUNHLEVBQWEsRUFBSSxRQUNwQixrREFDQSxHQUNHLEVBQ0wsRUFBSSxZQUFjLENBQUMsRUFBSSxRQUFVLGtDQUFvQyxHQUNoRSxFQUNMLEVBQUksV0FBYSxHQUFLLENBQUMsRUFBSSxTQUFXLENBQUMsRUFBSSxXQUFhLGNBQWdCLEdBRXpFLE9BQU8sRUFaTixtSkFjQSxFQUNBLEVBQ0EsRUFDQSxDQUNELEdBR0ssRUFBdUIsQ0FBQyxFQUFlLElBQTZCLENBRXpFLE9BQU8sRUFBRywrQkFETyxFQUFVLHdCQUEwQixDQUNILEdBRzdDLEVBQWEsRUFBbUIsRUFFaEMsRUFBZ0IsQ0FBQyxJQUErQixDQUNyRCxHQUFJLElBQWUsRUFDbEIsTUFBTyxHQUVSLE9BQU8sRUFBbUIsQ0FBVSxHQUdyQyxPQUNDLEdBNEdFLEdBNUdGLENBQVksVUFBVSxTQUFTLGNBQVksWUFBM0MsU0E0R0UsQ0EzR0QsR0F5R0UsTUF6R0YsQ0FDQyxVQUFVLHdFQUNWLGNBQVksWUFGYixTQUlFLEVBQVcsSUFBSSxDQUFDLEVBQU8sSUFBZSxDQUN0QyxJQUFNLEVBQWMsRUFBcUIsRUFBTSxJQUFJLEVBQzdDLEVBQWlCLEVBQWEsS0FFcEMsT0FDQyxHQTZGRSxNQTdGRixDQUNDLFVBQVUsaUhBQ1YsY0FBYSxFQUFLLE9BQU8sS0FBSyxNQUFNLEVBQU0sUUFBUSxFQUZuRCxTQTZGRSxDQXhGRCxHQTBCRSxFQTFCRixDQUNDLFVBQVUseUNBQ1YsTUFBTyxFQUVQLGNBQWUsRUFBSyxRQUFRLFFBQVMsRUFBTSxRQUFRLEVBSnBELFNBMEJFLENBcEJELEdBT0UsU0FQRixDQUNDLFVBQVUscURBQ1YsY0FBYSxFQUFLLE9BQU8sS0FBSyxNQUFNLEVBQU0sU0FBVSxPQUFPLEVBQzNELFFBQVMsSUFBTSxFQUFlLEVBQU0sS0FBTSxPQUFPLEVBQ2pELEtBQUssU0FKTixTQU1FLEVBQU0sS0FDTixFQUVELEVBQU0sV0FBYSxHQUNuQixHQVFFLE9BUkYsQ0FDQyxVQUFVLG9FQUNWLGNBQWEsRUFBSyxPQUFPLEtBQUssTUFDN0IsRUFBTSxTQUNOLE9BQ0QsRUFMRCxTQU9FLEVBQW1CLEVBQU0sVUFBVSxFQUNuQyxJQXJCRSxFQUFLLFFBQVEsUUFBUyxFQUFNLFFBQVEsQ0F1QnhDLEVBRUYsR0EyREUsTUEzREYsQ0FDQyxVQUFVLHdDQUNWLGNBQWEsRUFBSyxPQUFPLEtBQUssTUFBTSxFQUFNLFNBQVUsTUFBTSxFQUYzRCxTQTJERSxDQXZEQSxFQUFlLElBQUksQ0FBQyxJQUNwQixHQUtFLE1BTEYsQ0FDQyxVQUFVLHdDQURYLFNBSUUsRUFBSSxPQUZBLEVBQUssUUFBUSxTQUFVLEVBQU0sU0FBVSxFQUFJLEVBQUUsQ0FHakQsQ0FDRixFQUVBLEVBQVksSUFBSSxDQUFDLElBQVEsQ0FDekIsSUFBTSxFQUFZLEVBQUssT0FBTyxLQUFLLElBQ2xDLEVBQU0sS0FBSyxPQUFPLFNBQVMsRUFDM0IsRUFBSSxNQUNMLEVBQ00sRUFBWSxFQUFJLFdBQWEsRUFDN0IsRUFBa0IsS0FBSyxJQUFJLEVBQUksV0FBWSxDQUFDLEVBQzVDLEVBQW1CLEdBQWlCLE1BQ3pDLEVBQ0EsQ0FDRCxFQUVBLE9BQ0MsR0E4QkUsU0E5QkYsQ0FDQyxVQUFXLEVBQWdCLENBQUcsRUFDOUIsY0FBYSxFQUViLFFBQVMsQ0FBQyxJQUFNLEVBQWUsRUFBSSxLQUFNLE1BQU8sQ0FBQyxFQUNqRCxNQUFPLEVBQWMsRUFBSSxVQUFVLEVBQ25DLEtBQUssU0FOTixTQThCRSxDQXRCRCxHQUVFLE9BRkYsQ0FBTSxVQUFVLDJCQUFoQixTQUNFLEVBQUksS0FBSyxLQUFLLEVBQ2QsRUFFRCxHQUNBLEdBZUUsTUFmRixDQUNDLFVBQVcsRUFDViwwREFDQSxFQUFJLFNBQVcsV0FDaEIsRUFKRCxTQU1FLEVBQWlCLElBQUksQ0FBQyxJQUN0QixHQUFDLE9BQUQsQ0FDQyxVQUFXLEVBQ1YsRUFDQSxFQUFJLE9BQ0wsR0FDSyxDQUNOLENBQ0EsRUFDQSxJQXpCRSxFQUFJLE1BMkJSLEVBRUgsR0FDQSxJQXpGRyxFQUFNLFFBMEZWLEVBRUgsRUFDQSxFQUNGLEdBQUMsR0FBRCxDQUFXLFVBQVUsT0FBTyxHQUMzQixHQ3BQSixzQkFBUyxjQUFhLHdEQThEZixJQUFNLEdBQW9ELEVBQ2hFLFdBQ0EsU0FBUyxDQUFDLEVBQ1YsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUNBLGNBQ0EsZUFDQSxjQUNBLGlCQUNBLGVBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLGVBQWUsR0FDZixjQUFjLEdBQ2QsbUJBQW1CLEdBQ25CLHNCQUFzQixHQUN0QixrQkFDQSxrQkFDQSxnQkFDQSxrQkFDQSxlQUNBLGFBQ0EsYUFBYSxVQUNiLGtCQUNBLDhCQUNBLGNBQ0Esd0JBQXVCLEdBQ3ZCLG9CQUFtQixHQUNuQixjQUNBLGdCQUFlLEdBQ2YsaUJBQ0ssQ0FFTCxJQUFNLEdBQWlCLEdBQWtCLENBQ3hDLFNBQ0EsaUJBQ0EsY0FDQSxjQUNBLGdCQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxlQUNBLFNBQ0EsV0FDQSxlQUNBLFlBQ0QsQ0FBQyxFQUVLLEdBQVksR0FDakIsQ0FBQyxLQUF5QixDQUN6QixHQUFlLGlCQUFpQixFQUFLLEVBQ3JDLEdBQWUsbUJBQW1CLEVBQUksR0FFdkMsQ0FBQyxFQUFjLENBQ2hCLEVBR00sR0FBbUIsR0FDeEIsQ0FBQyxLQUF5QixDQUN6QixHQUFJLEVBQ0gsT0FFRCxHQUFJLEVBQ0gsRUFBYSxFQUFLLEVBRWxCLFFBQVUsRUFBSyxHQUdqQixDQUFDLEVBQW1CLEVBQWMsRUFBUyxDQUM1QyxFQUVNLEdBQWtCLEdBQ3ZCLENBQUMsS0FBbUIsQ0FDbkIsR0FBSSxFQUNILE9BR0QsR0FBSSxFQUNILEVBQVksRUFBSSxFQUVoQixRQUFlLGNBQWMsRUFBSSxHQUduQyxDQUFDLEVBQWEsRUFBa0IsRUFBYyxDQUMvQyxFQUdNLEVBQWUsR0FDcEIsS0FBTyxJQUNILEdBQ0gsY0FDQSxhQUFjLEdBQ2QsWUFBYSxHQUNiLGlCQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLGVBQ0EsY0FDQSxtQkFDQSxzQkFDQSxrQkFDQSxrQkFDQSxnQkFDQSxrQkFDQSxhQUNBLGtCQUNBLDhCQUNBLGNBQ0Esd0JBQ0Esb0JBQ0EsY0FDQSxnQkFDQSxhQUNELEdBQ0EsQ0FDQyxHQUNBLEVBQ0EsR0FDQSxHQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxFQUNELENBQ0QsRUFFQSxPQUNDLEdBRUUsR0FBZ0IsU0FGbEIsQ0FBMEIsTUFBTyxFQUFqQyxTQUNFLEVBQ0EsdURDMU1KLElBQU0sR0FBNEIsSUFBTSxDQUN2QyxJQUFRLE9BQU0sZ0JBQWlCLEVBQXdCLEVBU3ZELE9BQ0MsR0FlRSxNQWZGLENBQUssVUFBVSw4QkFBOEIsY0FBWSxpQkFBekQsU0FlRSxDQWRELEdBQUMsR0FBRCxDQUFRLFVBQVUsZUFBZSxFQUVqQyxHQVVFLEdBVkYsVUFDQyxHQVFFLEVBUkYsQ0FDQyxVQUFVLHdCQUNWLFVBQVUsYUFDVixjQUFlLEVBSGhCLFNBS0MsR0FFRSxNQUZGLENBQUssVUFBVSx1QkFBdUIsY0FBWSxnQkFBbEQsU0FqQlksQ0FDZixNQUFPLEdBQUMsR0FBRCxDQUFXLGFBQWMsR0FBa0IsT0FBUSxFQUMxRCxLQUFNLEdBQUMsR0FBRCxHQUFjLE1BQU8sRUFDM0IsSUFBSyxHQUFDLEdBQUQsR0FBYSxLQUFNLEVBQ3hCLEtBQU0sR0FBQyxHQUFELEdBQWMsTUFBTyxDQUM1QixFQWFjLEdBQ1IsRUFDRCxFQUNELEVBQ0YsR0FBQyxHQUFELEVBQWlCLEdBQ2hCLEdBSVMsR0FBOEMsRUFDMUQsU0FDQSxpQkFBaUIsU0FDakIsY0FBYyxRQUNkLGNBQ0EsZUFBZSxHQUNmLGVBQWUsR0FDZixjQUFjLEdBQ2QsbUJBQW1CLEdBQ25CLHNCQUFzQixHQUN0QixhQUFhLFVBQ2IsdUJBQXVCLEdBQ3ZCLGdCQUNHLEtBQ0UsQ0FDTCxPQUNDLEdBZ0JFLEdBaEJGLENBQ0MsYUFBYyxFQUNkLFlBQWEsRUFDYixhQUFjLEVBQ2QsT0FBUSxHQUF1RCxDQUFNLEVBQ3JFLGVBQWdCLEdBQXFCLEdBQ3JDLFdBQVksR0FBZ0IsQ0FBVSxFQUN0QyxxQkFBc0IsRUFDdEIsWUFBYSxHQUFTLENBQVcsRUFDakMsWUFBYSxFQUNiLGlCQUFrQixFQUNsQixXQUFZLEVBQ1osb0JBQXFCLEtBQ2pCLEVBYkwsU0FlQyxHQUFDLEdBQUQsRUFBaUIsRUFDaEIsNENDakVHLElBQU0sR0FBc0QsRUFDbEUsT0FDQSxXQUFXLE1BQ1gsV0FDQSxhQUNLLENBQ0wsSUFBUSxhQUFjLEVBQXdCLEVBRXhDLEVBQVUsRUFBSyxJQUFJLENBQUMsSUFBUSxDQUNqQyxJQUFNLEVBQVUsTUFBTSxRQUFRLENBQUcsRUFDM0IsRUFBUyxFQUFVLEVBQUksR0FBSyxFQUNsQyxNQUFPLENBQ04sR0FBSSxFQUFTLEVBQUssSUFBSSxJQUFJLENBQU0sRUFBSSxrQkFDcEMsSUFBSyxFQUFVLE9BQVksRUFDM0IsS0FBTSxFQUFVLEVBQU0sT0FDdEIsVUFBVyxHQUFTLEtBQ3BCLFVBQ0QsRUFDQSxFQUVLLEVBQU8sRUFBVSxJQUFJLENBQUMsS0FBYyxDQUN6QyxHQUFJLEVBQVMsR0FDYixNQUFPLEVBQVMsTUFDaEIsU0FBVSxFQUNWLFNBQ0QsRUFBRSxFQUVGLE9BQ0MsR0FPRSxHQVBGLENBQ0MsUUFBUyxFQUNULGdCQUFpQixFQUNqQixTQUFVLEVBQ1YsS0FBTSxFQUpQLFNBTUUsRUFDQSw0Q0MzQ0csSUFBTSxHQUE4QyxFQUMxRCxRQUNBLE9BQ0EsZUFFQSxHQXFCRSxNQXJCRixDQUFLLFVBQVUscUJBQWYsU0FDRSxFQUFNLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDMUIsSUFBTSxFQUFZLEVBQUksT0FBTyxFQUFNLEVBQUcsTUFBTSxFQUN0QyxFQUFVLEVBQUksT0FBTyxJQUFJLEVBQ3pCLEVBQU0sRUFBSyxPQUFPLEtBQUssS0FBSyxFQUFLLENBQUssRUFDNUMsT0FDQyxHQVlFLEVBWkYsQ0FDQyxVQUFXLEVBQ1YsNkZBQ0EsR0FBYSxzQ0FDZCxFQUNBLFlBQVcsRUFDWCxjQUFhLEVBQUssT0FBTyxTQUFTLFVBQVUsRUFBTSxDQUFPLEVBQ3pELE1BQU8sRUFBUSxFQUVmLGNBQWUsRUFBSyxRQUFRLEVBQUssUUFBUSxFQVQxQyxTQVdDLEdBQUMsR0FBRCxDQUFXLEtBQU0sRUFBSyxHQUhqQixFQUFLLFFBQVEsRUFBSyxVQUFVLENBSWhDLEVBRUgsRUFDQSxzRENsQ0ksSUFBTSxHQUFrQyxJQUFNLENBQ3BELElBQVEsY0FBYSxJQUFHLGdCQUFlLHVCQUFzQixhQUM1RCxFQUF3QixFQUNuQixFQUFXLEdBQWEsQ0FDN0IsY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FBQyxDQUFXLEVBQ3RCLHNCQUF1QixFQUNyQixJQUFJLENBQUMsSUFBTSxFQUFFLGFBQWEsRUFDMUIsT0FBTyxPQUFPLENBQ2pCLENBQUMsRUFFRCxPQUNDLEdBZ0JFLEdBaEJGLENBQ0MsUUFBUyxDQUNSLE9BQVEsYUFDUixLQUFNLGFBQ04sS0FBTSxpQkFDUCxFQUNBLEtBQU0sRUFDTixTQUFTLE9BUFYsU0FnQkUsQ0FQRCxHQUVFLE1BRkYsQ0FBSyxVQUFVLGtIQUFmLFNBQ0MsR0FBaUUsTUFBakUsQ0FBSyxVQUFVLGdDQUFmLFNBQWdELEVBQUUsV0FBVyxFQUFJLEVBQ2hFLEVBRUYsR0FFRSxNQUZGLENBQUssVUFBVSx1QkFBZixTQUNDLEdBQUMsR0FBRCxDQUFlLFVBQVcsS0FBTSxNQUFPLEVBQVUsS0FBSyxNQUFNLEVBQzNELEdBQ0QsdURDMUJHLElBQU0sR0FBZ0MsSUFBTSxDQUNsRCxJQUNDLGNBQ0EsWUFDQSxnQkFDQSx1QkFDQSxnQkFDRyxFQUF3QixFQUN0QixFQUFRLEdBQWEsQ0FDMUIsY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsQ0FBQyxDQUFXLEVBQ3RCLHNCQUF1QixFQUNyQixJQUFJLENBQUMsSUFBTSxFQUFFLGFBQWEsRUFDMUIsT0FBTyxPQUFPLENBQ2pCLENBQUMsRUFFSyxFQUFXLENBQ2hCLEdBQUksRUFBSyxJQUFJLEtBQ2IsSUFBSyxPQUNMLEtBQU0sRUFDTixVQUNDLDhFQUNELFNBQVUsT0FDVixTQUFVLEdBQ1YsV0FBWSxDQUFDLElBQ1osR0FFRSxNQUZGLENBQUssVUFBVSx5RkFBZixTQUNDLEdBQUMsR0FBRCxDQUFXLEtBQU0sRUFBTSxFQUN0QixDQUVKLEVBRU0sRUFBVSxFQUFVLElBQUksQ0FBQyxLQUFjLENBQzVDLEdBQUksRUFBSyxJQUFJLElBQUksRUFBYSxFQUFTLEVBQUUsRUFDekMsV0FBWSxFQUFTLEdBQ3JCLFdBQ0EsS0FBTSxFQUNOLElBQUssRUFDTCxTQUFVLE1BQ1gsRUFBRSxFQUVGLE9BQ0MsR0FtQ0UsR0FuQ0YsQ0FDQyxVQUNDLEdBV0UsTUFYRixDQUFLLFVBQVUsY0FBZixTQVdFLENBVkQsR0FBQyxHQUFELEVBQVksRUFDWCxFQUFVLElBQUksQ0FBQyxJQUNmLEdBQUMsR0FBRCxDQUNDLFFBQVMsQ0FBRSxLQUFNLG9CQUFxQixFQUN0QyxLQUFNLENBQUMsQ0FBVyxFQUVsQixTQUFVLEVBQ1YsV0FBWSxJQUZQLEVBQUssVUFBVSxFQUFTLEVBQUUsQ0FHaEMsQ0FDQSxHQUNBLEVBRUgsUUFBUyxDQUFFLEtBQU0sU0FBVSxPQUFRLFFBQVMsRUFDNUMsUUFBUyxDQUFDLEVBQVUsR0FBRyxDQUFPLEVBQzlCLGNBQVksZUFDWixTQUFTLE9BQ1Qsb0JBQXFCLEVBbkJ0QixTQXNCQyxHQVlFLE1BWkYsQ0FDQyxVQUFXLDRCQUNYLGNBQVksd0JBRmIsU0FZRSxDQVJELEdBQUMsTUFBRCxDQUFLLFVBQVUsZ0VBQWdFLEVBQzlFLEVBQVUsSUFBSSxDQUFDLElBQ2YsR0FBQyxHQUFELENBQ0MsVUFBVSxrQkFFVixTQUFVLEdBREwsRUFBSyxRQUFRLGdCQUFpQixFQUFTLEVBQUUsQ0FFL0MsQ0FDQSxHQUNBLEVBQ0QsNENDcEZHLElBQU0sR0FBNEIsSUFBTSxDQUM5QyxJQUFRLGVBQWdCLEVBQXdCLEVBRWhELEdBQUksSUFBZ0IsV0FDbkIsT0FBTyxHQUFDLEdBQUQsRUFBcUIsRUFHN0IsT0FBTyxHQUFDLEdBQUQsRUFBdUIsR0NYL0Isa0JBQVMsbUVBUUYsSUFBTSxHQUFvQyxJQUFNLENBQ3RELElBQVEsY0FBYSxLQUFNLEVBQXdCLEVBRzdDLEVBQVksR0FBaUIsSUFBTSxDQUN4QyxPQUFPLEdBQWEsQ0FBVyxHQUM3QixDQUFDLENBQVcsQ0FBQyxFQUVoQixPQUNDLEdBc0JFLEdBdEJGLENBQW1CLEtBQU0sRUFBekIsU0FzQkUsQ0FyQkQsR0FFRSxNQUZGLENBQUssVUFBVSxrSEFBZixTQUNDLEdBQWlFLE1BQWpFLENBQUssVUFBVSxnQ0FBZixTQUFnRCxFQUFFLFdBQVcsRUFBSSxFQUNoRSxFQUVELEVBQVUsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM5QixJQUFNLEVBQU0seUJBQXlCLEVBQUksWUFBWSxJQUVyRCxPQUNDLEdBVUUsRUFWRixDQUNDLFVBQVUsNEVBQ1YsTUFBTyxFQUFRLEtBRWYsY0FBZSxFQUFLLFFBQVEsRUFBSyxRQUFRLEVBSjFDLFNBVUUsQ0FKRCxHQUF3RCxNQUF4RCxDQUFLLFVBQVUsc0JBQWYsU0FBc0MsRUFBSSxPQUFPLEdBQUcsRUFBSSxFQUN4RCxHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0UsRUFBSSxPQUFPLEtBQUssRUFDaEIsSUFORyxFQUFLLFFBQVEsRUFBSyxVQUFVLENBT2hDLEVBRUgsR0FDQSx1RENqQ0csSUFBTSxHQUFrQyxJQUFNLENBQ3BELElBQVEsY0FBYSxhQUFjLEVBQXdCLEVBQ3JELEVBQWUsRUFBWSxRQUFRLE9BQU8sRUFDMUMsRUFBYyxNQUFNLEtBQ3pCLENBQUUsT0FBUSxFQUFZLFlBQVksQ0FBRSxFQUNwQyxDQUFDLEVBQUcsSUFBTSxFQUFhLElBQUksRUFBRyxLQUFLLENBQ3BDLEVBRU0sRUFBVyxDQUNoQixHQUFJLEVBQUssSUFBSSxLQUNiLEtBQU0sRUFDTixJQUFLLE9BQ0wsVUFDQyw4RUFDRCxTQUFVLE1BQ1YsU0FBVSxHQUNWLFdBQVksQ0FBQyxJQUNaLEdBR0UsTUFIRixDQUFLLFVBQVUseUZBQWYsU0FHRSxDQUZELEdBQTBCLE9BQTFCLFVBQU8sRUFBSyxPQUFPLEdBQUcsRUFBSSxFQUMxQixHQUE0QixPQUE1QixVQUFPLEVBQUssT0FBTyxLQUFLLEVBQUksR0FDM0IsQ0FFSixFQUVNLEVBQVUsRUFBVSxJQUFJLENBQUMsS0FBYyxDQUM1QyxHQUFJLEVBQUssSUFBSSxTQUFTLFFBQVMsRUFBUyxFQUFFLEVBQzFDLElBQUssT0FDTCxXQUFZLEVBQVMsR0FDckIsS0FBTSxFQUNOLFNBQVUsS0FDWCxFQUFFLEVBRUYsT0FDQyxHQW1CRSxHQW5CRixDQUNDLFFBQVMsQ0FBRSxPQUFRLFNBQVUsS0FBTSxRQUFTLEVBQzVDLFFBQVMsQ0FBQyxFQUFVLEdBQUcsQ0FBTyxFQUM5QixjQUFZLCtCQUhiLFNBTUMsR0FZRSxNQVpGLENBQ0MsVUFBVyw0QkFDWCxjQUFZLHdCQUZiLFNBWUUsQ0FSRCxHQUFDLE1BQUQsQ0FBSyxVQUFVLGdFQUFnRSxFQUM5RSxFQUFVLElBQUksQ0FBQyxJQUNmLEdBQUMsR0FBRCxDQUNDLFVBQVUsa0JBRVYsU0FBVSxHQURMLEVBQUssUUFBUSxnQkFBaUIsRUFBUyxFQUFFLENBRS9DLENBQ0EsR0FDQSxFQUNELDRDQ3RERyxJQUFNLEdBQThCLElBQU0sQ0FDaEQsSUFBUSxlQUFnQixFQUF3QixFQUVoRCxHQUFJLElBQWdCLFdBQ25CLE9BQU8sR0FBQyxHQUFELEVBQXVCLEVBRy9CLE9BQU8sR0FBQyxHQUFELEVBQXlCLEdDWmpDLGtCQUFTLGVBSUYsU0FBUyxFQUF1QixFQUFHLENBQ3pDLElBQ0MsY0FDQSxpQkFDQSxZQUNBLHNCQUNBLGdCQUNBLHVCQUNBLGNBQ0csRUFBd0IsRUFFdEIsRUFBVyxJQUF3QixTQUVuQyxFQUFXLEdBQ2hCLElBQU0sRUFBWSxFQUFhLENBQWMsRUFDN0MsQ0FBQyxFQUFhLENBQWMsQ0FDN0IsRUFFTSxFQUFjLEdBQ25CLElBQ0MsRUFDRyxFQUFTLE9BQU8sQ0FBQyxJQUFRLENBQUMsRUFBVyxJQUFJLEVBQUksSUFBSSxDQUFDLENBQUMsRUFDbkQsRUFDSixDQUFDLEVBQVUsQ0FBVSxDQUN0QixFQUVNLEVBQXdCLEdBQzdCLElBQU0sRUFBVSxRQUFRLENBQUMsSUFBTyxFQUFFLGNBQWdCLENBQUMsRUFBRSxhQUFhLEVBQUksQ0FBQyxDQUFFLEVBQ3pFLENBQUMsQ0FBUyxDQUNYLEVBRUEsTUFBTyxDQUNOLFdBQ0EsWUFDQSxXQUNBLGNBQ0EsY0FDQSxnQkFDQSx1QkFDQSx1QkFDRCxzRENoQ00sSUFBTSxHQUVULEVBQUcsVUFBVyxDQUNqQixJQUFRLHVCQUF3QixFQUF3QixFQUNsRCxFQUFXLElBQXdCLFNBRXpDLE9BQ0MsR0E2QkUsTUE3QkYsQ0FBSyxVQUFVLFlBQWYsU0FDRSxFQUFLLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDekIsSUFBTSxFQUFRLEVBQVEsQ0FBRyxFQUNuQixFQUFNLEVBQUssT0FBTyxLQUFLLElBQUksQ0FBRyxFQUVwQyxPQUNDLEdBb0JFLEVBcEJGLENBQ0MsVUFBVyxFQUNWLHVHQUNBLEdBQVMseUJBQ1YsRUFDQSxjQUFhLEVBQUssT0FBTyxTQUFTLFFBQ2xDLE1BQU8sRUFBUSxLQUVmLGNBQWUsRUFBSyxRQUFRLEVBQUssUUFBUSxFQVIxQyxTQVVDLEdBU0UsTUFURixDQUNDLFVBQVcsRUFDVixFQUFXLGtCQUFvQixvQkFDaEMsRUFIRCxTQVNFLENBSkQsR0FBOEQsTUFBOUQsQ0FBSyxVQUFVLDBCQUFmLFNBQTBDLEVBQUksT0FBTyxLQUFLLEVBQUksRUFDOUQsR0FFRSxNQUZGLENBQUssVUFBVSxnQ0FBZixTQUNFLEVBQUksT0FBTyxHQUFHLEVBQ2QsR0FDRCxHQVpHLEVBQUssUUFBUSxFQUFLLFVBQVUsQ0FhaEMsRUFFSCxFQUNBLEdDaERKLGtCQUFTLGVBSUYsU0FBUyxFQUE2QixFQUFHLENBQy9DLElBQ0MsV0FDQSxXQUNBLGdCQUNBLHVCQUNBLHlCQUNHLEdBQXdCLEVBb0I1QixNQUFPLENBQUUsVUFsQlMsR0FBUSxJQUFNLENBQy9CLEdBQUksQ0FBQyxFQUFVLE1BQU8sQ0FBQyxFQUN2QixPQUFPLEVBQVMsSUFBSSxDQUFDLElBQ3BCLEdBQWEsQ0FDWixjQUFlLEVBQ2YsZ0JBQ0EsdUJBQ0EsdUJBQ0QsQ0FBQyxDQUNGLEdBQ0UsQ0FDRixFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0QsQ0FBQyxDQUVrQixzREN0QmIsSUFBTSxHQUFtQyxJQUFNLENBQ3JELElBQVEsS0FBTSxFQUF3QixHQUM5QixXQUFVLFlBQWEsR0FBd0IsR0FDL0MsYUFBYyxHQUE4QixFQUVwRCxPQUNDLEdBdUJFLEdBdkJGLENBQ0MsUUFBUyxDQUNSLE9BQVEsRUFBRyxFQUFXLE9BQVMsT0FBUSxZQUFZLEVBQ25ELEtBQU0sYUFDTixLQUFNLGlCQUNQLEVBQ0EsS0FBTSxFQUFXLEVBQVksRUFDN0IsU0FBVSxFQUFXLE9BQVMsTUFQL0IsU0F1QkUsQ0FkRCxHQUVFLE1BRkYsQ0FBSyxVQUFVLGtIQUFmLFNBQ0MsR0FBaUUsTUFBakUsQ0FBSyxVQUFVLGdDQUFmLFNBQWdELEVBQUUsV0FBVyxFQUFJLEVBQ2hFLEVBRUYsR0FTRSxNQVRGLENBQUssVUFBVSx1QkFBZixTQVNFLENBUkQsR0FBQyxHQUFELENBQWlDLEtBQU0sRUFBVSxFQUNoRCxHQUNBLEdBQUMsR0FBRCxDQUNDLFVBQVcsTUFDWCxNQUFPLEVBQVUsS0FBSyxFQUN0QixLQUFLLE9BQ04sR0FFQSxHQUNELEdDckNKLGtCQUFTLG1FQ1dGLElBQU0sR0FFVCxFQUFHLGFBQWMsQ0FDcEIsSUFBUSxlQUFnQixFQUF3QixFQUVoRCxPQUNDLEdBbUNFLE1BbkNGLENBQUssVUFBVSxZQUFmLFNBbUNFLENBbENELEdBSUUsTUFKRixDQUFLLFVBQVUsbUVBQWYsU0FDQyxHQUVFLE9BRkYsQ0FBTSxVQUFVLGlFQUFoQixTQUNFLEVBQVksS0FBSyxFQUNqQixFQUNELEVBQ0QsRUFBUSxJQUFJLENBQUMsRUFBSyxJQUFVLENBQzVCLElBQU0sRUFBTSxFQUFJLElBQ2hCLEdBQUksQ0FBQyxFQUFLLE9BQU8sS0FDakIsSUFBTSxFQUFRLEVBQVEsQ0FBRyxFQUNuQixFQUFNLEVBQUssT0FBTyxLQUFLLEtBQUssRUFBSyxFQUFJLFlBQWMsRUFBRSxFQUUzRCxPQUNDLEdBbUJFLEVBbkJGLENBQ0MsVUFBVyxFQUNWLDZIQUNBLEdBQVMseUJBQ1YsRUFDQSxjQUFhLEVBQUssT0FBTyxTQUFTLFVBQ2pDLE9BQ0EsRUFBSSxPQUFPLElBQUksQ0FDaEIsRUFDQSxNQUFPLEVBQVEsS0FFZixjQUFlLEVBQUssUUFBUSxFQUFLLFFBQVEsRUFYMUMsU0FtQkUsQ0FORCxHQUVFLE1BRkYsQ0FBSyxVQUFVLHNDQUFmLFNBQ0UsRUFBSSxPQUFPLEtBQUssRUFDaEIsRUFDRixHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0UsRUFBSSxPQUFPLEdBQUcsRUFDZCxJQVJHLEVBQUssUUFBUSxFQUFLLFVBQVUsQ0FTaEMsRUFFSCxHQUNBLHVEQ3hDRyxJQUFNLEdBRVQsRUFBRyxlQUFnQixDQUN0QixJQUFRLHNCQUFxQixJQUFHLGVBQWdCLEVBQXdCLEVBQ2xFLEVBQVcsSUFBd0IsU0FFekMsT0FDQyxHQW1DRSxNQW5DRixDQUFLLFVBQVUsWUFBZixTQW1DRSxDQWxDRCxHQWNFLE1BZEYsQ0FBSyxVQUFVLDBEQUFmLFNBQ0MsR0FZRSxPQVpGLENBQ0MsVUFBVyxFQUNWLG9HQUNBLEVBQVcsY0FBZ0IseUJBQzVCLEVBSkQsU0FZRSxDQU5ELEdBQStDLE9BQS9DLENBQU0sVUFBVSxrQkFBaEIsU0FBbUMsRUFBRSxNQUFNLEVBQUksRUFDOUMsQ0FBQyxHQUNELEdBRUUsT0FGRixDQUFNLFVBQVUsOENBQWhCLFNBQ0UsRUFBWSxLQUFLLEVBQ2pCLEdBRUYsRUFDRCxFQUVELEVBQVUsSUFBSSxDQUFDLElBQWEsQ0FDNUIsT0FDQyxHQWFFLEdBYkYsQ0FDQyxVQUFVLDJCQUVWLFNBQVUsRUFIWCxTQUtDLEdBT0UsTUFQRixDQUNDLFVBQVcsRUFDVixzQ0FDQSxFQUFXLFdBQWEsUUFDekIsRUFKRCxTQU1FLEVBQVMsTUFDVCxHQVZHLEVBQUssUUFBUSxnQkFBaUIsRUFBUyxFQUFFLENBVzdDLEVBRUgsR0FDQSxHQ3ZESixzQkFBUyxjQUFhLGVBTWYsU0FBUyxFQUEyQixFQUFHLENBQzdDLElBQ0MsV0FDQSxZQUNBLFdBQ0EsY0FDQSxjQUNBLGdCQUNBLHVCQUNBLHlCQUNHLEdBQXdCLEVBRXRCLEVBQVcsR0FDaEIsQ0FBQyxJQUFnQixDQUNoQixPQUFPLEdBQWEsQ0FDbkIsY0FBZSxFQUNmLGdCQUNBLHVCQUNBLFNBQVUsRUFDVix1QkFDRCxDQUFDLEdBRUYsQ0FBQyxFQUFlLEVBQXNCLEVBQVUsQ0FBcUIsQ0FDdEUsRUFFTSxFQUFRLEdBQVEsSUFBTSxFQUFTLENBQVcsRUFBRyxDQUFDLEVBQWEsQ0FBUSxDQUFDLEVBQ3BFLEVBQWdCLEdBQ3JCLElBQ0MsRUFBVSxRQUFRLENBQUMsSUFDbEIsRUFBWSxJQUFJLENBQUMsS0FBUyxDQUN6QixHQUFJLEVBQUssSUFBSSxJQUFJLEVBQUssRUFBUyxFQUFFLEVBQ2pDLFVBQVcsa0JBQ1gsV0FBWSxFQUFTLEdBQ3JCLFdBQ0EsTUFDQSxLQUFNLEVBQVMsQ0FBRyxFQUNsQixTQUFVLE1BQ1gsRUFBRSxDQUNILEVBQ0QsQ0FBQyxFQUFXLEVBQWEsQ0FBUSxDQUNsQyxFQUtNLEVBQWUsR0FDcEIsSUFDQyxFQUFVLElBQUksQ0FBQyxLQUFjLENBQzVCLEdBQUksRUFBSyxJQUFJLFNBQVMsT0FBUSxFQUFTLEVBQUUsRUFDekMsVUFBVyxrQkFDWCxJQUFLLE9BQ0wsV0FBWSxFQUFTLEdBQ3JCLFdBQ0EsS0FBTSxFQUNOLFNBQVUsS0FDWCxFQUFFLEVBQ0gsQ0FBQyxFQUFXLENBQVEsQ0FDckIsRUFFTSxFQUFVLEdBQVEsSUFBTSxDQUM3QixHQUFJLEVBQVUsT0FBTyxFQUNyQixPQUFPLEdBQ0wsQ0FBQyxFQUFVLEVBQWUsQ0FBWSxDQUFDLEVBRTFDLE1BQU8sQ0FBRSxRQUFPLFNBQVEscUVIeERsQixJQUFNLEdBQWlDLElBQU0sQ0FDbkQsSUFBUSxXQUFVLFlBQVcsV0FBVSxlQUN0QyxHQUF3QixHQUNqQixRQUFPLFdBQVksR0FBNEIsR0FDL0MsZ0JBQWlCLEVBQXdCLEVBRTNDLEVBQVcsR0FDaEIsS0FBTyxDQUNOLEdBQUksRUFBVyxFQUFLLElBQUksS0FBTyxFQUFLLElBQUksS0FDeEMsS0FBTSxFQUFXLEVBQVEsRUFDekIsSUFBSyxPQUNMLFVBQ0MsOEVBQ0QsU0FBVSxFQUFZLE9BQW9CLE1BQzFDLFNBQVUsR0FDVixXQUFZLENBQUMsSUFDWixHQVNFLE1BVEYsQ0FBSyxVQUFVLHlGQUFmLFNBQ0UsRUFDQSxHQUFDLEdBQUQsQ0FBVyxLQUFNLEVBQU0sRUFFdkIsZ0JBR0UsQ0FGRCxHQUE0QixPQUE1QixVQUFPLEVBQUssT0FBTyxLQUFLLEVBQUksRUFDNUIsR0FBMEIsT0FBMUIsVUFBTyxFQUFLLE9BQU8sR0FBRyxFQUFJLEdBQ3pCLEVBRUYsQ0FFSixHQUNBLENBQUMsRUFBTyxFQUFVLENBQVEsQ0FDM0IsRUFFTSxFQUFZLEdBQVEsSUFBTSxDQUMvQixHQUFJLENBQUMsRUFBVSxPQUNmLE9BQ0MsR0FXRSxNQVhGLENBQUssVUFBVSxjQUFmLFNBV0UsQ0FWRCxHQUFDLEdBQUQsRUFBWSxFQUNYLEVBQVUsSUFBSSxDQUFDLElBQ2YsR0FBQyxHQUFELENBQ0MsUUFBUyxDQUFFLEtBQU0sMkJBQTRCLEVBQzdDLEtBQU0sRUFFTixTQUFVLEVBQ1YsV0FBWSxJQUZQLEVBQUssVUFBVSxFQUFTLEVBQUUsQ0FHaEMsQ0FDQSxHQUNBLEdBRUQsQ0FBQyxFQUFVLEVBQVcsQ0FBVyxDQUFDLEVBRXJDLE9BQ0MsR0FlRSxHQWZGLENBQ0MsVUFBVyxFQUNYLFFBQVMsQ0FBRSxPQUFRLEVBQVcsT0FBUyxNQUFPLEVBQzlDLFFBQVMsQ0FBQyxFQUFVLEdBQUcsQ0FBTyxFQUM5QixjQUFZLGdCQUNaLFNBQVUsRUFBVyxPQUFTLE1BQzlCLG9CQUFxQixFQU50QixTQVFDLEdBTUUsTUFORixDQUFLLFVBQVUsdUJBQWYsU0FNRSxDQUxELEdBQUMsR0FBRCxDQUNDLFVBQVcsRUFDWCxZQUFhLEVBQ2QsRUFDQyxHQUFZLEdBQUMsR0FBRCxDQUErQixRQUFTLEVBQVMsR0FDN0QsRUFDRCw0Q0kxRUcsSUFBTSxHQUE2QixJQUFNLENBQy9DLElBQVEsZUFBZ0IsRUFBd0IsRUFFaEQsR0FBSSxJQUFnQixXQUNuQixPQUFPLEdBQUMsR0FBRCxFQUFzQixFQUc5QixPQUFPLEdBQUMsR0FBRCxFQUF3Qix1RENGekIsSUFBTSxHQUFpQyxJQUFNLENBQ25ELElBQVEsUUFBUyxFQUF3QixFQVF6QyxPQUNDLEdBcUJFLE1BckJGLENBQ0MsVUFBVSw4QkFDVixjQUFZLDBCQUZiLFNBcUJFLENBakJELEdBQUMsR0FBRCxDQUFRLFVBQVUsTUFBTSxFQUd4QixHQVVFLEdBVkYsVUFDQyxHQVFFLEVBUkYsQ0FDQyxVQUFVLHdEQUNWLFVBQVUsYUFDVixjQUFlLEVBSGhCLFNBS0MsR0FFRSxNQUZGLENBQUssVUFBVSx1QkFBdUIsY0FBWSxnQkFBbEQsU0FwQjZDLENBQ2hELE1BQU8sR0FBQyxHQUFELEdBQXVCLE9BQVEsRUFDdEMsS0FBTSxHQUFDLEdBQUQsR0FBc0IsTUFBTyxFQUNuQyxJQUFLLEdBQUMsR0FBRCxHQUFxQixLQUFNLENBQ2pDLEVBaUJjLEdBQ1IsRUFDRCxFQUNELEVBR0YsR0FBQyxHQUFELEVBQWlCLEdBQ2hCLDRDQ3pCRyxJQUFNLEdBQThELEVBQzFFLFNBQVMsQ0FBQyxFQUNWLFlBQVksQ0FBQyxFQUNiLGlCQUFpQixTQUNqQixjQUFjLFFBQ2QsY0FDQSxxQkFBcUIsR0FDckIsZUFBZSxHQUNmLGFBQWEsVUFDYixlQUFlLEdBQ2YsY0FBYyxHQUNkLGdCQUNHLEtBQ0UsQ0FDTCxPQUNDLEdBaUJFLEdBakJGLENBQ0MsYUFBYyxFQUNkLG1CQUFvQixFQUNwQixZQUFhLEVBQ2IsYUFBYyxFQUNkLE9BQVEsR0FDUCxDQUNELEVBQ0EsZUFBZ0IsR0FBcUIsR0FDckMsV0FBWSxHQUFnQixDQUFVLEVBQ3RDLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixVQUFXLEVBQ1gsV0FBWSxLQUNSLEVBZEwsU0FnQkMsR0FBQyxHQUFELEVBQXNCLEVBQ3JCIiwKICAiZGVidWdJZCI6ICJFMzQwNUVEMTAxMjQwNDdBNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
1
+ import{A as v2,B as w2,C as H2,D as pP,E as c2,F as d2,G as I4,H as e2,a as _,b as G,c as O4,d as q,e as a2,f as P2,g as p2,h as $2,i as rP,j as f2,k as z2,l as d,m as b0,n as yP,o as N0,p as hP,q as k,r as nP,s as t2,t as s2,u as T0,v as x2,w as lP,x as xP,y as g2,z as E2}from"./shared/chunk-328e2ygt.js";import"./shared/chunk-jfadfww5.js";var NP="event-form",KP="event-mutation-scope",LP=({event:P,onChange:p})=>{return G((f)=>f.renderSlot)(NP,{event:P,onChange:p})},F0=({dialog:P,onResolve:p,onCancel:$})=>{let f=G((Y)=>Y.getEventManager);if(!(P.isOpen&&P.event))return null;let z=f(P.event),b={event:P.event,operation:P.operation,resolve:p,cancel:$};return z?.renderSlot?.(KP,b)};import{useEffect as M4,useMemo as F4}from"react";import{DndContext as T5,MouseSensor as S5,pointerWithin as g5,TouchSensor as D5,useSensor as FP,useSensors as E5}from"@dnd-kit/core";import{useRef as AP}from"react";import{useCallback as A0,useEffect as B5,useRef as O5,useState as I5}from"react";var h0={isOpen:!1,operation:"edit",event:null};function V0(P){let{applyScopedEdit:p,applyScopedDelete:$}=G((Q)=>({applyScopedEdit:Q.applyScopedEdit,applyScopedDelete:Q.applyScopedDelete})),[f,z]=I5(h0),b=O5(f);B5(()=>{b.current=f},[f]);let Y=A0((Q,X)=>{z({isOpen:!0,operation:"edit",event:Q,updates:X})},[]),Z=A0((Q)=>{z({isOpen:!0,operation:"delete",event:Q})},[]),J=A0(()=>z(h0),[]),U=A0((Q)=>{let X=b.current;if(!X.event)return;if(X.operation==="edit")p(X.event,X.updates??{},Q);else $(X.event,Q);z(h0),P?.()},[p,$,P]);return{dialogState:f,openEditDialog:Y,openDeleteDialog:Z,closeDialog:J,handleConfirm:U}}var _P=(P,p)=>{let{active:$,over:f}=P;if(!$||!f||!p)return null;let z=f.data.current||{},b=z.type==="time-cell",{resourceId:Y,allDay:Z}=z,J;if(b){let{date:N,hour:M=0,minute:F=0}=z;J=_(N).hour(M).minute(F)}else{let{date:N}=z;J=_(N)}let U=p.end.diff(p.start,"second"),Q=J.add(U,"second");if(Q.isSame(Q.startOf("day")))Q=Q.subtract(1,"day").endOf("day");let X={start:J,end:Q,resourceId:Y,allDay:b?!1:Z??p.allDay};return{activeEvent:p,updates:X}};import{DragOverlay as R5}from"@dnd-kit/core";import{snapCenterToCursor as H5}from"@dnd-kit/modifiers";import{useImperativeHandle as k5,useState as m5}from"react";import{jsx as GP}from"react/jsx-runtime";var MP=({ref:P})=>{let[p,$]=m5(null);return k5(P,()=>({setActiveEvent:$})),GP(R5,{modifiers:[H5],children:p&&GP("div",{className:q("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",p.backgroundColor||"bg-blue-500",p.color||"text-white"),children:p?.title})})};import{jsx as VP,jsxs as WP,Fragment as w5}from"react/jsx-runtime";function BP({children:P}){let p=AP(null),$=AP(null),{updateEvent:f,getEventManager:z,disableDragAndDrop:b}=G((A)=>({updateEvent:A.updateEvent,getEventManager:A.getEventManager,disableDragAndDrop:A.disableDragAndDrop})),{dialogState:Y,openEditDialog:Z,closeDialog:J,handleConfirm:U}=V0(),Q=FP(S5,{activationConstraint:{distance:2}}),X=FP(D5,{activationConstraint:{delay:100,tolerance:5}}),N=E5(Q,X),M=(A,V)=>{let m=!V||Object.keys(V).length===0;if(!A?.id||m)return;if(z(A)?.applyEdit)Z(A,V);else f(A.id,V)},F=(A)=>{let{active:V}=A;if(V.data.current?.type==="calendar-event")$.current?.setActiveEvent(V.data.current.event),p.current=V.data.current.event},W=(A)=>{let V=_P(A,p.current);if(V){let{activeEvent:m,updates:B}=V;M(m,B)}p.current=null,$.current?.setActiveEvent(null)},K=(A)=>{p.current=null};if(b)return P;return WP(w5,{children:[WP(T5,{collisionDetection:g5,onDragCancel:K,onDragEnd:W,onDragStart:F,sensors:N,children:[P,VP(MP,{ref:$})]}),VP(F0,{dialog:Y,onCancel:J,onResolve:U})]})}import{Slot as C5}from"@radix-ui/react-slot";import{cva as v5}from"class-variance-authority";import{jsx as h5}from"react/jsx-runtime";var y5=v5("inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function R({className:P,variant:p,size:$,asChild:f=!1,...z}){return h5(f?C5:"button",{className:q(y5({variant:p,size:$,className:P})),"data-slot":"button",...z})}import*as W0 from"@radix-ui/react-checkbox";import{CheckIcon as j5}from"lucide-react";import{jsx as j0}from"react/jsx-runtime";function OP({className:P,...p}){return j0(W0.Root,{className:q("peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",P),"data-slot":"checkbox",...p,children:j0(W0.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:j0(j5,{className:"size-3.5"})})})}import{ChevronDownIcon as i5}from"lucide-react";import{useEffect as u5,useState as x5}from"react";import{jsx as o5}from"react/jsx-runtime";function P0({className:P,type:p,...$}){return o5("input",{className:q("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",P),"data-slot":"input",type:p,...$})}import*as y from"@radix-ui/react-popover";import{jsx as B0}from"react/jsx-runtime";function o({...P}){return B0(y.Root,{"data-slot":"popover",...P})}function i({...P}){return B0(y.Trigger,{"data-slot":"popover-trigger",...P})}function u({className:P,align:p="center",sideOffset:$=4,...f}){return B0(y.Portal,{children:B0(y.Content,{align:p,className:q("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",P),"data-slot":"popover-content",sideOffset:$,...f})})}import{jsx as x,jsxs as q0}from"react/jsx-runtime";var IP=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,o0=(P)=>Boolean(P&&IP.test(P)),c5=(P)=>{let p=P.match(/bg-([a-z]+)-\d+/)?.at(1);if(!p)return"Custom";return p.charAt(0).toUpperCase()+p.slice(1)};function RP({value:P,onChange:p,swatches:$=[],className:f,"aria-label":z="Select color"}){let[b,Y]=x5(o0(P)?P:"");u5(()=>{Y(o0(P)?P:"")},[P]);let Z=(X)=>{let N=X.target.value;if(Y(N),IP.test(N))p(N)},J=o0(P),U=$.find((X)=>X.value===P),Q;if(U)Q=U.label;else if(J)Q=P;else if(P)Q=c5(P);else Q="Pick a color";return q0(o,{children:[q0(i,{"aria-label":z,className:q("border-input focus-visible:border-ring focus-visible:ring-ring/50 flex h-9 w-full cursor-pointer items-center justify-between gap-2 rounded-md border bg-transparent px-3 text-sm shadow-xs outline-none focus-visible:ring-[3px]",f),"data-slot":"color-picker-trigger",type:"button",children:[q0("span",{className:"flex items-center gap-2",children:[x("span",{className:q("size-5 shrink-0 rounded-full border",!J&&P),style:J?{backgroundColor:P}:void 0}),x("span",{className:q(J&&"font-mono text-xs"),children:Q})]}),x(i5,{className:"size-4 shrink-0 opacity-50"})]}),q0(u,{className:"w-56","data-slot":"color-picker-content",children:[$.length>0&&x("div",{className:"grid grid-cols-7 gap-1.5",children:$.map((X)=>{let N=P===X.value;return x("button",{"aria-label":X.label,"aria-pressed":N,className:q("focus-visible:ring-ring size-6 cursor-pointer rounded-full border outline-none focus-visible:ring-2",X.value,N&&"ring-ring ring-2 ring-offset-1"),onClick:()=>p(X.value),type:"button"},X.value)})}),x("div",{className:"text-muted-foreground mt-3 mb-1.5 text-xs",children:"Custom"}),q0("div",{className:"flex items-center gap-2",children:[x("input",{"aria-label":"Custom color",className:"size-9 shrink-0 cursor-pointer rounded-md border bg-transparent",onChange:(X)=>p(X.target.value),type:"color",value:J?P:"#000000"}),x(P0,{"aria-label":"Hex color",className:"font-mono",onChange:Z,placeholder:"#000000",value:b})]})]})]})}import*as HP from"@radix-ui/react-label";import{jsx as d5}from"react/jsx-runtime";function l({className:P,...p}){return d5(HP.Root,{className:q("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",P),"data-slot":"label",...p})}import*as O from"@radix-ui/react-select";import{CheckIcon as r5,ChevronDownIcon as kP,ChevronUpIcon as n5}from"lucide-react";import{jsx as H,jsxs as i0}from"react/jsx-runtime";function mP({...P}){return H(O.Root,{"data-slot":"select",...P})}function TP({...P}){return H(O.Value,{"data-slot":"select-value",...P})}function SP({className:P,size:p="default",children:$,...f}){return i0(O.Trigger,{className:q("cursor-pointer border-input data-placeholder:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-size":p,"data-slot":"select-trigger",...f,children:[$,H(O.Icon,{asChild:!0,children:H(kP,{className:"size-4 opacity-50"})})]})}function gP({className:P,children:p,position:$="popper",align:f="center",...z}){return H(O.Portal,{children:i0(O.Content,{align:f,className:q("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",$==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",P),"data-slot":"select-content",position:$,...z,children:[H(l5,{}),H(O.Viewport,{className:q("p-1",$==="popper"&&"h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),children:p}),H(a5,{})]})})}function DP({className:P,children:p,...$}){return i0(O.Item,{className:q("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",P),"data-slot":"select-item",...$,children:[H("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:H(O.ItemIndicator,{children:H(r5,{className:"size-4"})})}),H(O.ItemText,{children:p})]})}function l5({className:P,...p}){return H(O.ScrollUpButton,{className:q("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...p,children:H(n5,{className:"size-4"})})}function a5({className:P,...p}){return H(O.ScrollDownButton,{className:q("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...p,children:H(kP,{className:"size-4"})})}import{jsx as t5}from"react/jsx-runtime";function EP({className:P,...p}){return t5("textarea",{className:q("flex field-sizing-content min-h-16 w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40",P),"data-slot":"textarea",...p})}function wP(P){if(P===void 0)return;if(_.isDayjs(P))return P;let p=_(P);return p.isValid()?p:void 0}function CP(P){let p=P.replace("#",""),$=p.length===3?p.split("").map((Z)=>Z+Z).join(""):p;if(!/^[0-9a-fA-F]{6}$/.test($))return"#000000";let f=Number.parseInt($.slice(0,2),16),z=Number.parseInt($.slice(2,4),16),b=Number.parseInt($.slice(4,6),16);return(f*299+z*587+b*114)/1000>=128?"#000000":"#ffffff"}import{useEffect as Kp,useState as w}from"react";import{PopoverClose as bp}from"@radix-ui/react-popover";import{Calendar as Zp}from"lucide-react";import{useEffect as Yp,useRef as Qp,useState as Jp}from"react";import{useState as pp}from"react";import{ChevronLeftIcon as s5,ChevronRightIcon as e5}from"lucide-react";import{jsx as U0,jsxs as Pp}from"react/jsx-runtime";function p0({label:P,onPrev:p,onNext:$,prevLabel:f,nextLabel:z}){return Pp("div",{className:"mb-2 flex items-center justify-between",children:[U0(R,{"aria-label":f,onClick:p,size:"icon",variant:"ghost",children:U0(s5,{className:"size-4"})}),U0("div",{className:"text-sm font-medium select-none",children:P}),U0(R,{"aria-label":z,onClick:$,size:"icon",variant:"ghost",children:U0(e5,{className:"size-4"})})]})}import{jsx as h,jsxs as vP}from"react/jsx-runtime";function $p(P){let p=P.weekHover&&!P.isCurrentWeek;return q("p-0 text-center",P.weekHover&&"first:rounded-l-md last:rounded-r-md",p&&"group-hover/week:bg-accent",P.isCurrentWeek&&"bg-primary")}function fp(P){return q("w-full aspect-square text-sm select-none",!P.isDisabled&&"cursor-pointer",!(P.weekHover||P.isDisabled)&&"hover:bg-accent rounded-md",P.isOutside&&"text-muted-foreground/50",P.isCurrent&&"rounded-md ring-1 ring-inset ring-foreground/40",P.isCurrentWeek&&"text-primary-foreground font-medium",P.isSelected&&"bg-primary text-primary-foreground rounded-md font-medium",P.isDisabled&&"opacity-50 cursor-not-allowed")}function zp({day:P,state:p,onSelect:$}){return h("td",{className:$p(p),"data-disabled":p.isDisabled,"data-outside":p.isOutside,"data-selected":p.isSelected,role:"gridcell",tabIndex:-1,children:h("button",{"aria-disabled":p.isDisabled,"aria-hidden":p.isOutside,className:fp(p),"data-disabled":p.isDisabled,"data-selected":p.isSelected,disabled:p.isDisabled||p.isOutside,onClick:()=>$?.(P.toDate()),tabIndex:p.isOutside?-1:0,type:"button",children:P.format("D")})})}function K0({selected:P,defaultMonth:p,onSelect:$,disabled:f,firstDayOfWeek:z=0,className:b,weekHover:Y=!1,highlightedWeekOf:Z}){let[J,U]=pp(()=>_(p??P??new Date).startOf("month")),Q=hP(J,z),X=P?_(P).format("YYYY-MM-DD"):void 0,N=N0(_(),z).map((K)=>K.format("dd")),M,F;if(Z){let K=N0(Z,z);M=K.at(0),F=K.at(-1)}let W=(K)=>{let A=K.format("YYYY-MM-DD")===X,V=!1;if(M&&F){let m=!K.isBefore(M,"day"),B=!K.isAfter(F,"day");V=m&&B}return{isOutside:!K.isSame(J,"month"),isSelected:A,isDisabled:f?.(K.toDate())??!1,isCurrent:yP(K)&&!A,isCurrentWeek:V,weekHover:Y}};return vP("div",{className:q("bg-background p-3 w-72",b),"data-slot":"calendar",children:[h(p0,{label:J.format("MMMM YYYY"),nextLabel:"Next month",onNext:()=>U((K)=>K.add(1,"month")),onPrev:()=>U((K)=>K.subtract(1,"month")),prevLabel:"Previous month"}),vP("table",{className:"w-full border-collapse",role:"grid",children:[h("thead",{children:h("tr",{children:N.map((K,A)=>h("th",{className:"text-muted-foreground text-xs font-medium select-none py-1",children:K},A))})}),h("tbody",{children:Q.map((K,A)=>h("tr",{className:q(Y&&"group/week"),children:K.map((V)=>h(zp,{day:V,onSelect:$,state:W(V)},V.toISOString()))},A))})]})]})}import{jsx as $0,jsxs as u0}from"react/jsx-runtime";function jP({date:P,closeOnSelect:p,onChange:$,label:f="Pick a date",className:z,disabled:b}){let Y=G((X)=>X.firstDayOfWeek),Z=Qp(null),[J,U]=Jp(P);Yp(()=>{U(P)},[P]);let Q=(X)=>{if(U(X),p)Z.current?.click();$?.(X)};return $0("div",{className:z,children:u0(o,{children:[$0(i,{asChild:!0,children:u0(R,{className:q("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[$0(Zp,{}),J?_(J).format("ll"):$0("span",{children:f})]})}),u0(u,{align:"start",className:"w-auto p-0",children:[$0(bp,{ref:Z,style:{display:"none"}}),$0(K0,{defaultMonth:J,disabled:b,firstDayOfWeek:Y,onSelect:Q,selected:J})]})]})})}import{Clock as qp}from"lucide-react";import{useEffect as Up,useRef as iP,useState as x0}from"react";import{useMemo as Xp}from"react";function oP({timeFormat:P="12-hour",minTime:p="00:00",maxTime:$="23:45"}){return{timeOptions:Xp(()=>{let b=[],[Y,Z]=p.split(":").map(Number),[J,U]=$.split(":").map(Number),Q=Y*60+Z,X=J*60+U;for(let N=Q;N<=X;N+=15){let M=Math.floor(N/60),F=N%60,W=`${M.toString().padStart(2,"0")}:${F.toString().padStart(2,"0")}`;b.push(W)}return b},[p,$]),formatTime:(b)=>{let[Y,Z]=b.split(":").map(Number);if(P==="24-hour")return`${Y.toString().padStart(2,"0")}:${Z.toString().padStart(2,"0")}`;let J=Y>=12?"PM":"AM",U=Y;if(Y===0)U=12;else if(Y>12)U=Y-12;return`${U}:${Z.toString().padStart(2,"0")} ${J}`}}}import{jsx as c,jsxs as c0}from"react/jsx-runtime";var Np=(P)=>{P.stopPropagation()};function uP({value:P,onChange:p,minTime:$="00:00",maxTime:f="23:45",timeFormat:z="12-hour",placeholder:b="Select time...",className:Y,disabled:Z=!1,name:J}){let[U,Q]=x0(!1),[X,N]=x0(""),M=iP(null),F=iP(null),[W,K]=x0(0),{timeOptions:A,formatTime:V}=oP({timeFormat:z,minTime:$,maxTime:f}),m=A.filter((S)=>{return V(S).toLowerCase().includes(X.toLowerCase())}),B=(S)=>{p(S),Q(!1),N("")};Up(()=>{if(U){if(F.current)K(F.current.offsetWidth);setTimeout(()=>{M.current?.focus()},0)}},[U]);let Q0=P?V(P):b;return c0(o,{onOpenChange:Q,open:U,children:[c(i,{asChild:!0,children:c0(R,{"aria-controls":"time-picker-listbox","aria-expanded":U,className:q("w-full justify-start",Y),"data-testid":k.timePicker(J),disabled:Z,ref:F,role:"combobox",variant:"outline",children:[c(qp,{className:"mr-2 h-4 w-4"}),Q0]})}),c0(u,{align:"start",className:"p-0",style:{width:W},children:[c("div",{className:"p-2 border-b",children:c(P0,{className:"h-8",onChange:(S)=>N(S.target.value),placeholder:"Search time...",ref:M,value:X})}),c(d,{className:"h-[200px]",onWheel:Np,children:c("div",{className:"p-1",children:m.length===0?c("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):m.map((S)=>{let G0=V(S);return c("button",{className:q("relative flex w-full cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground",S===P&&"bg-accent text-accent-foreground"),onClick:()=>B(S),type:"button",children:G0},S)})})})]})]})}var cP=(P,p,$)=>{let[f,z]=p.split(":").map(Number),b=_(P).hour(f).minute(z);return $?b.hour(0).minute(0):b},dP=(P,p,$)=>{let[f,z]=p.split(":").map(Number),b=_(P).hour(f).minute(z);return $?b.hour(23).minute(59):b},d0=(P,p)=>{if(!p)return{min:"00:00",max:"23:59"};let $=_(P),{minStart:f,maxEnd:z,hasBusinessHours:b}=xP({allDates:[$],businessHours:p,hideNonBusinessHours:!1});if(!b)return{min:"00:00",max:"23:59"};return{min:`${f.toString().padStart(2,"0")}:00`,max:`${(z-1).toString().padStart(2,"0")}:45`}};import{jsx as I,jsxs as g,Fragment as Fp}from"react/jsx-runtime";var aP="bg-blue-100 text-blue-800",Lp=[{value:aP,label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],tP=/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,_p=(P,p)=>{if(P&&tP.test(P))return P;return p??aP},Gp=(P)=>{if(tP.test(P))return{backgroundColor:P,color:CP(P)};return{backgroundColor:void 0,color:P}},Mp=({colorChanged:P,hadInitialColor:p,selectedColor:$,initialBackgroundColor:f,initialColor:z})=>{if(P||!p)return Gp($);return{backgroundColor:f,color:z}},r0=({name:P,label:p,placeholder:$,value:f,required:z=!1,multiline:b=!1,onChange:Y})=>g("div",{className:"grid gap-1 sm:gap-2",children:[I(l,{className:"text-xs sm:text-sm",htmlFor:P,children:p}),b?I(EP,{className:"min-h-16 text-sm",id:P,name:P,onChange:Y,placeholder:$,required:z,value:f}):I(P0,{className:"h-8 text-sm sm:h-9",id:P,name:P,onChange:Y,placeholder:$,required:z,value:f})]}),sP=({selectedEvent:P,onClose:p,onUpdate:$,onDelete:f,onAdd:z})=>{let{dialogState:b,openEditDialog:Y,openDeleteDialog:Z,closeDialog:J,handleConfirm:U}=V0(p),{t:Q,timeFormat:X,getEventManager:N,resources:M}=G((L)=>({t:L.t,timeFormat:L.timeFormat,getEventManager:L.getEventManager,resources:L.resources??[]})),{id:F,resourceId:W,resourceIds:K,start:A=_(),end:V=_().add(1,"hour"),allDay:m=!1,color:B,backgroundColor:Q0,title:S="",description:G0="",location:fP=""}=P??{},zP=M.length>0,bP=W??K?.at(0),ZP=zP&&bP===void 0,[S0,P5]=w(bP),g0=zP?S0:W,M0=nP(g0),YP=Boolean(P&&N(P)),[s,QP]=w(A.toDate()),[e,JP]=w(V.toDate()),[j,p5]=w(m),[D0,$5]=w(_p(Q0,B)),[f5,z5]=w(!1),b5=Boolean(B||Q0),Z5=(L)=>{$5(L),z5(!0)},[E0,XP]=w(A.format("HH:mm")),[w0,C0]=w(V.format("HH:mm")),[v,Y5]=w({title:S,description:G0,location:fP}),[v0,Q5]=w({}),J5={...P,...v0},X5=(L)=>Q5((D)=>({...D,...L})),q5=(L)=>{if(!L)return;if(QP(L),_(L).isAfter(_(e)))JP(L)},U5=(L)=>{if(!L)return;if(JP(L),L&&_(L).isBefore(_(s)))QP(L)},N5=(L)=>{if(XP(L),_(s).isSame(_(e),"day")&&L>w0)C0(L)},K5=(L)=>{if(C0(L),_(s).isSame(_(e),"day")&&L<E0)XP(L)},y0=(L)=>{let{name:D,value:E}=L.target;Y5((J0)=>({...J0,[D]:E}))};Kp(()=>{if(j)C0("23:59")},[j]);let L5=(L)=>{return M.find((E)=>String(E.id)===L)?.id??L},qP=ZP&&S0===void 0,_5=(L)=>{if(L.preventDefault(),qP)return;let D=cP(s,E0,j),E=dP(e,w0,j),J0=Mp({colorChanged:f5,hadInitialColor:b5,selectedColor:D0,initialBackgroundColor:Q0,initialColor:B}),X0={id:F||_().format("YYYYMMDDHHmmss"),title:v.title,start:D,end:E,resourceId:g0,description:v.description,location:v.location,allDay:j,...J0,...v0};if(P?.id&&YP){Y(P,{title:v.title,start:D,end:E,resourceId:g0,description:v.description,location:v.location,allDay:j,color:D0,...v0});return}if(F)$?.(X0);else z?.(X0);p()},G5=()=>{if(!P?.id)return;if(YP){Z(P);return}f?.(P),p()},UP;if(M0)UP=(L)=>!lP(_(L),M0);let M5=d0(s,M0),F5=d0(e,M0),A5=[["startDate",s,q5],["endDate",e,U5]],V5=[["startTime","start-time",E0,N5,M5],["endTime","end-time",w0,K5,F5]],W5=S0?.toString();return g(Fp,{children:[g("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:_5,children:[I(d,{className:"flex-1 min-h-0",children:g("div",{className:"grid gap-3 sm:gap-4 p-1",children:[I(r0,{label:Q("title"),name:"title",onChange:y0,placeholder:Q("eventTitlePlaceholder"),required:!0,value:v.title}),I(r0,{label:Q("description"),multiline:!0,name:"description",onChange:y0,placeholder:Q("eventDescriptionPlaceholder"),value:v.description}),ZP&&g("div",{className:"grid gap-1 sm:gap-2",children:[I(l,{className:"text-xs sm:text-sm",htmlFor:"resource",children:Q("resource")}),g(mP,{onValueChange:(L)=>P5(L5(L)),value:W5,children:[I(SP,{className:"h-8 text-sm sm:h-9","data-testid":"resource-select",id:"resource",children:I(TP,{placeholder:Q("selectResource")})}),I(gP,{children:M.map((L)=>I(DP,{value:String(L.id),children:L.title},String(L.id)))})]})]}),g("div",{className:"flex items-center space-x-2",children:[I(OP,{checked:j,id:"allDay",onCheckedChange:(L)=>p5(L===!0)}),I(l,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:Q("allDay")})]}),I("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:A5.map(([L,D,E])=>g("div",{children:[I(l,{className:"text-xs sm:text-sm",children:Q(L)}),I(jP,{className:"mt-1",closeOnSelect:!0,date:D,disabled:UP,onChange:E})]},L))}),!j&&I("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:V5.map(([L,D,E,J0,X0])=>g("div",{children:[I(l,{className:"text-xs sm:text-sm",children:Q(L)}),I(uP,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:X0.max,minTime:X0.min,name:D,onChange:J0,placeholder:Q("searchTime"),timeFormat:X,value:E})]},L))}),g("div",{className:"grid gap-1 sm:gap-2",children:[I(l,{className:"text-xs sm:text-sm",children:Q("color")}),I(RP,{"aria-label":Q("color"),onChange:Z5,swatches:Lp,value:D0})]}),I(r0,{label:Q("location"),name:"location",onChange:y0,placeholder:Q("eventLocationPlaceholder"),value:v.location}),I(LP,{event:J5,onChange:X5})]})}),g(rP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[F&&I(R,{className:"w-full sm:mr-auto sm:w-auto",onClick:G5,size:"sm",type:"button",variant:"destructive",children:Q("delete")}),g("div",{className:"flex w-full gap-2 sm:w-auto",children:[I(R,{className:"flex-1 sm:flex-none",onClick:p,size:"sm",type:"button",variant:"outline",children:Q("cancel")}),I(R,{className:"flex-1 sm:flex-none",disabled:qP,size:"sm",type:"submit",children:F?Q("update"):Q("create")})]})]})]}),I(F0,{dialog:b,onCancel:J,onResolve:U})]})};import{jsx as O0,jsxs as eP}from"react/jsx-runtime";var b2=()=>{let{t:P,selectedEvent:p,isEventFormOpen:$,closeEventForm:f,addEvent:z,updateEvent:b,deleteEvent:Y,renderEventForm:Z}=G((X)=>({t:X.t,selectedEvent:X.selectedEvent,isEventFormOpen:X.isEventFormOpen,closeEventForm:X.closeEventForm,addEvent:X.addEvent,updateEvent:X.updateEvent,deleteEvent:X.deleteEvent,renderEventForm:X.renderEventForm})),Q={open:$,onClose:f,selectedEvent:p,onAdd:z,onUpdate:(X)=>{b(X.id,X)},onDelete:(X)=>{Y(X.id)}};if(Z)return Z(Q);return O0(P2,{onOpenChange:f,open:$,children:eP(p2,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[eP($2,{className:"mb-2 sm:mb-4 shrink-0",children:[O0(f2,{className:"text-base sm:text-lg",children:p?.id?P("editEvent"):P("createEvent")}),O0(z2,{className:"text-xs sm:text-sm",children:p?.id?P("editEventDetails"):P("addNewEvent")})]}),O0(sP,{...Q})]})})};import{ChevronLeft as hp,ChevronRight as jp,Download as op,Plus as ip}from"lucide-react";import{ChevronDown as Ip}from"lucide-react";import{useState as Rp}from"react";function Z2(){let{currentLocale:P,timezone:p}=G((f)=>({currentLocale:f.currentLocale,timezone:f.timezone}));return{formatDateRange:(f,z)=>{let b=new Intl.DateTimeFormat(P,{timeZone:p,month:"short",day:"numeric"});if(f.year()===z.year())return b.formatRange(f.toDate(),z.toDate());return`${b.format(f.toDate())} – ${b.format(z.toDate())}`}}}import{useState as Vp}from"react";import{jsx as Ap}from"react/jsx-runtime";function I0({label:P,isSelected:p,isCurrent:$,onSelect:f}){return Ap("button",{"aria-pressed":p,className:q("hover:bg-accent rounded-md py-2 text-sm font-medium cursor-pointer select-none",$&&"ring-1 ring-inset ring-foreground/40",p&&"bg-primary text-primary-foreground"),onClick:f,type:"button",children:P})}import{jsx as n0,jsxs as Wp}from"react/jsx-runtime";function Y2({selected:P,onSelect:p}){let[$,f]=Vp(()=>P.year()),z=_(),b=Array.from({length:12},(Y,Z)=>({index:Z,label:P.month(Z).format("MMM")}));return Wp("div",{className:"w-72 p-3","data-slot":"month-grid",children:[n0(p0,{label:$,nextLabel:"Next year",onNext:()=>f((Y)=>Y+1),onPrev:()=>f((Y)=>Y-1),prevLabel:"Previous year"}),n0("div",{className:"grid grid-cols-3 gap-1",children:b.map((Y)=>{let Z=$===P.year()&&Y.index===P.month(),J=$===z.year()&&Y.index===z.month()&&!Z;return n0(I0,{isCurrent:J,isSelected:Z,label:Y.label,onSelect:()=>p(P.year($).month(Y.index).date(1))},Y.index)})})]})}import{useState as Bp}from"react";import{jsx as l0,jsxs as Op}from"react/jsx-runtime";var L0=12;function Q2({selected:P,onSelect:p}){let[$,f]=Bp(()=>P.year()-P.year()%L0),z=_(),b=Array.from({length:L0},(Y,Z)=>$+Z);return Op("div",{className:"w-72 p-3","data-slot":"year-grid",children:[l0(p0,{label:`${$} – ${$+L0-1}`,nextLabel:"Next years",onNext:()=>f((Y)=>Y+L0),onPrev:()=>f((Y)=>Y-L0),prevLabel:"Previous years"}),l0("div",{className:"grid grid-cols-3 gap-1",children:b.map((Y)=>{let Z=Y===P.year(),J=Y===z.year()&&!Z;return l0(I0,{isCurrent:J,isSelected:Z,label:Y,onSelect:()=>p(P.year(Y))},Y)})})]})}import{jsx as a,jsxs as J2}from"react/jsx-runtime";var Hp={day:"day",week:"week",month:"month",year:"year"};function kp(P){let p=P?.navigationStep??{amount:1,unit:P?.navigationUnit??"day"};if(p.amount!==1)return"range";return Hp[p.unit]??"range"}function X2({className:P}){let{currentDate:p,currentRange:$,view:f,selectDate:z,firstDayOfWeek:b,getViews:Y}=G((B)=>({currentDate:B.currentDate,currentRange:B.currentRange,view:B.view,selectDate:B.selectDate,firstDayOfWeek:B.firstDayOfWeek,getViews:B.getViews})),{formatDateRange:Z}=Z2(),[J,U]=Rp(!1),Q=N0(p,b),X=Q.at(0)??p,N=Q.at(-1)??p,M=(B)=>{z(B),U(!1)},F=kp(Y().find((B)=>B.name===f)),K={year:p.format("YYYY"),month:p.format("MMM YYYY"),week:Z(X,N),day:p.format("ddd, MMM D, YYYY"),range:Z($.start,$.end)}[F],A=a(K0,{defaultMonth:p.toDate(),firstDayOfWeek:b,onSelect:(B)=>B&&M(_(B)),selected:p.toDate()}),m={year:a(Q2,{onSelect:M,selected:p}),month:a(Y2,{onSelect:M,selected:p}),week:a(K0,{defaultMonth:p.toDate(),firstDayOfWeek:b,highlightedWeekOf:p,onSelect:(B)=>B&&M(_(B)),weekHover:!0}),day:A,range:A}[F];return J2(o,{onOpenChange:U,open:J,children:[a(i,{asChild:!0,children:J2(R,{className:q("font-semibold",P),"data-testid":"calendar-title",variant:"outline",children:[K,a(Ip,{className:"size-4 shrink-0 opacity-50"})]})}),a(u,{align:"start",className:"w-auto p-0",children:m})]})}var a0=`\r
2
+ `,mp=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(a0),R0=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
3
+ `,"\\n").replaceAll("\r","")},q2=(P,p=!1)=>{if(p)return P.format("YYYYMMDD");return P.utc().format("YYYYMMDD[T]HHmmss[Z]")},Tp=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},Sp=(P,p)=>{let $=_().utc().format("YYYYMMDD[T]HHmmss[Z]"),f=P.allDay?";VALUE=DATE":"",z=["BEGIN:VEVENT",`UID:${Tp(P)}`,`DTSTART${f}:${q2(P.start,P.allDay)}`,`DTEND${f}:${q2(P.end,P.allDay)}`,`SUMMARY:${R0(P.title)}`,P.description&&`DESCRIPTION:${R0(P.description)}`,P.location&&`LOCATION:${R0(P.location)}`].filter(Boolean),b=p("ical:vevent-properties",P).filter((Z)=>typeof Z==="string"),Y=[`DTSTAMP:${$}`,`CREATED:${$}`,`LAST-MODIFIED:${$}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"];return[...z,...b,...Y].join(a0)},gp=(P,p,$="ilamy Calendar")=>{let f=R0($),z=P.map((b)=>Sp(b,p));return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${f}`,`X-WR-CALDESC:Exported from ${f}`,mp,...z,"END:VCALENDAR"].join(a0)},U2=(P,p,$="calendar.ics",f="ilamy Calendar")=>{let z=new Blob([gp(P,p,f)],{type:"text/calendar;charset=utf-8"}),b=URL.createObjectURL(z),Y=$;if(!$.endsWith(".ics"))Y=`${$}.ics`;let Z=document.createElement("a");Z.href=b,Z.download=Y,document.body.append(Z),Z.click(),Z.remove(),URL.revokeObjectURL(b)};function N2(){let{rawEvents:P,collect:p}=G(($)=>({rawEvents:$.rawEvents,collect:$.collect}));return()=>{let $=`ilamy-calendar-${_().format("YYYY-MM-DD")}.ics`;U2(P,p,$,"ilamy Calendar")}}import*as C from"@radix-ui/react-dropdown-menu";import{jsx as _0}from"react/jsx-runtime";function K2({...P}){return _0(C.Root,{"data-slot":"dropdown-menu",...P})}function L2({...P}){return _0(C.Trigger,{"data-slot":"dropdown-menu-trigger",...P})}function _2({className:P,sideOffset:p=4,align:$="end",...f}){return _0(C.Portal,{children:_0(C.Content,{align:$,className:q("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md",P),"data-slot":"dropdown-menu-content",sideOffset:p,...f})})}function G2({className:P,...p}){return _0(C.Item,{className:q("focus:bg-accent focus:text-accent-foreground relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden transition-colors select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",P),"data-slot":"dropdown-menu-item",...p})}import{Check as Dp,ChevronDown as Ep}from"lucide-react";function H0(){let{getViews:P,resources:p}=G((f)=>({getViews:f.getViews,resources:f.resources})),$=Boolean(p?.length);return P().filter((f)=>!$||f.supportsResources)}import{jsx as r,jsxs as t0}from"react/jsx-runtime";function M2({className:P}){let{view:p,setView:$,t:f}=G((J)=>({view:J.view,setView:J.setView,t:J.t})),z=H0(),b=z.find((J)=>J.name===p),Y=b?f(b.label??b.name):"",Z=b?.icon;return t0(K2,{children:[r(L2,{asChild:!0,className:P,children:t0(R,{size:"default",variant:"outline",children:[Z&&r(Z,{className:"size-4"}),r("span",{children:Y}),r(Ep,{className:"size-4 opacity-50"})]})}),r(_2,{align:"end",className:"min-w-40",children:z.map((J)=>{let U=J.icon;return t0(G2,{onSelect:()=>$(J.name),children:[r(U,{className:"size-4"}),r("span",{className:"flex-1",children:f(J.label??J.name)}),J.name===p&&r(Dp,{className:"size-4"})]},J.name)})})]})}import*as k0 from"@radix-ui/react-toggle-group";import{cva as wp}from"class-variance-authority";import{createContext as Cp,useContext as vp}from"react";import{jsx as s0}from"react/jsx-runtime";var yp=wp("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors outline-none hover:bg-muted hover:text-muted-foreground focus-visible:ring-ring/50 focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer select-none",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"},size:{default:"h-9 px-2 min-w-9",sm:"h-8 px-2.5 min-w-8",lg:"h-10 px-2.5 min-w-10"}},defaultVariants:{variant:"default",size:"default"}}),F2=Cp({size:"default",variant:"default"});function A2({className:P,variant:p,size:$,children:f,...z}){return s0(k0.Root,{className:q("flex items-center justify-center gap-1",P),"data-slot":"toggle-group",...z,children:s0(F2.Provider,{value:{variant:p,size:$},children:f})})}function V2({className:P,children:p,variant:$,size:f,...z}){let b=vp(F2);return s0(k0.Item,{className:q(yp({variant:b.variant||$,size:b.size||f}),P),"data-slot":"toggle-group-item",...z,children:p})}import{jsx as W2}from"react/jsx-runtime";function B2({className:P}){let{view:p,setView:$,t:f}=G((b)=>({view:b.view,setView:b.setView,t:b.t})),z=H0();return W2(A2,{className:q("bg-muted gap-0 rounded-lg p-0.75",P),onValueChange:(b)=>b&&$(b),size:"sm",type:"single",value:p,children:z.map((b)=>W2(V2,{className:"text-muted-foreground data-[state=on]:bg-background data-[state=on]:text-foreground rounded-md px-3 font-medium data-[state=on]:shadow-sm",value:b.name,children:f(b.label??b.name)},b.name))})}import{jsx as T,jsxs as f0}from"react/jsx-runtime";var O2=({className:P=""})=>{let{nextPeriod:p,prevPeriod:$,today:f,openEventForm:z,headerComponent:b,headerClassName:Y,t:Z,hideExportButton:J}=G((Q)=>({nextPeriod:Q.nextPeriod,prevPeriod:Q.prevPeriod,today:Q.today,openEventForm:Q.openEventForm,headerComponent:Q.headerComponent,headerClassName:Q.headerClassName,t:Q.t,hideExportButton:Q.hideExportButton})),U=N2();if(b)return b;return T("div",{className:q("@container/base-header w-full",Y),"data-testid":"calendar-header",children:f0("div",{className:q("flex flex-col items-center gap-2 @lg/base-header:flex-row @lg/base-header:justify-between",P),children:[f0("div",{className:"flex min-w-0 items-center gap-2",children:[f0("div",{className:"bg-background flex h-9 items-center rounded-lg border",children:[T(R,{"aria-label":Z("previous"),className:"h-full",onClick:$,size:"icon",variant:"ghost",children:T(hp,{className:"size-4"})}),T(R,{"aria-label":Z("next"),className:"h-full",onClick:p,size:"icon",variant:"ghost",children:T(jp,{className:"size-4"})})]}),T(R,{onClick:f,size:"default",variant:"outline",children:Z("today")}),T(X2,{})]}),f0("div",{className:"flex items-center gap-2",children:[T(B2,{className:"hidden @3xl/base-header:flex"}),T(M2,{className:"@3xl/base-header:hidden"}),!J&&f0(R,{"aria-label":Z("export"),onClick:U,size:"default",variant:"outline",children:[T(op,{className:"size-4"}),T("span",{className:"hidden @2xl/base-header:inline",children:Z("export")})]}),f0(R,{"aria-label":Z("new"),onClick:()=>z(),size:"default",children:[T(ip,{className:"size-4"}),T("span",{className:"hidden @2xl/base-header:inline",children:Z("new")})]})]})]})})};import{useMemo as u2}from"react";import{useRef as ep}from"react";import{useEffect as up,useRef as xp}from"react";var cp=/^(\d{1,2})(?::\d{1,2})?(?::\d{1,2})?$/,dp="[data-hour]",rp=(P)=>{let $=cp.exec(P)?.at(1);if(!$)return null;let f=Number.parseInt($,10);return f>=0&&f<=23?f:null},e0=(P)=>Number.parseInt(P.getAttribute("data-hour")??"",10),np=(P,p)=>{let $=P.at(0),f=P.at(-1);if(!$||!f)return null;if(p<=e0($))return $;if(p>=e0(f))return f;return P.find((z)=>e0(z)===p)??null},lp=(P,p,$,f)=>{let z=p.getBoundingClientRect(),b=$.getBoundingClientRect();if(f==="horizontal"){P.scrollTo({left:z.left-b.left,behavior:"auto"});return}P.scrollTo({top:z.top-b.top,behavior:"auto"})},m0=({viewportRef:P,scrollTime:p,enabled:$,scrollKey:f,axis:z="vertical"})=>{let b=xp(null);up(()=>{if(!$||!p)return;if(b.current===f)return;let Y=rp(p);if(Y===null)return;let Z=P.current;if(!Z)return;let J=Array.from(Z.querySelectorAll(dp)),U=J.at(0),Q=np(J,Y);if(!U||!Q)return;lp(Z,Q,U,z),b.current=f},[$,p,f,P,z])};import{memo as ap}from"react";import{jsx as sp}from"react/jsx-runtime";var tp=({children:P,className:p})=>{let{stickyViewHeader:$,viewHeaderClassName:f}=G((z)=>({stickyViewHeader:z.stickyViewHeader,viewHeaderClassName:z.viewHeaderClassName}));return sp("div",{className:q("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",p,f),"data-testid":"horizontal-grid-header",children:P})},I2=ap(tp);import{jsx as z0,jsxs as R2}from"react/jsx-runtime";var k2=({rows:P,children:p,classes:$,allDay:f,gridType:z,variant:b="resource",dayNumberHeight:Y})=>{let{currentDate:Z,view:J,scrollTime:U}=G(),Q=ep(null),X=b==="resource",N=!X;m0({viewportRef:Q,scrollTime:U,enabled:z==="hour"&&X,scrollKey:`${J}-${Z.format("YYYY-MM-DD")}`,axis:"horizontal"});let F=p&&z0(I2,{className:$?.header,children:p});return R2("div",{className:"h-full flex flex-col","data-testid":"horizontal-grid-container",children:[N&&F,R2(d,{className:q("h-full",N&&"overflow-auto"),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full",ref:Q},children:[X&&F,z0("div",{className:q("flex flex-1 w-fit",$?.body),"data-testid":"horizontal-grid-body",children:z0("div",{className:"relative w-full flex flex-col flex-1 gap-px bg-border","data-calendar-scroll-content":"true",children:P.map((W)=>z0(H2,{allDay:W.allDay??f,dayNumberHeight:Y,gridType:z,variant:b,...W},W.id))},Z.format("YYYY-MM"))}),z0(b0,{className:"z-30"}),z0(b0,{className:"z-30",orientation:"horizontal"})]})]})};import{useRef as K4}from"react";import{memo as Q4}from"react";import{memo as b4}from"react";import{useMemo as S2}from"react";var P4=(P)=>{let p=[],$=[],f=null;for(let z of P){if(f&&z.start.isSameOrAfter(f)){if($.length>0)p.push($);$=[]}$.push(z),f=f?_.max(f,z.end):z.end}if($.length>0)p.push($);return p},m2=(P,{gridStart:p,totalUnits:$,gridType:f,isDiscrete:z})=>{let b=P.start.diff(p,f,!0),Y=P.end.diff(p,f,!0);if(z){if(b=Math.floor(b),Y=Math.ceil(Y),Y<=b)Y=b+1}if(b<0)b=0;if(Y>$)Y=$;let Z=Math.max(0,Y-b);if(Z===0)return null;return{top:b/$*100,height:Z/$*100}},p4={2:25,3:50,4:60},$4=70,f4=(P)=>p4[P]??$4,z4=(P,p)=>{let $=P.length===1?P.at(0):void 0;if($){let Z=m2($,p);if(!Z)return[];return[{kind:"vertical",event:$,left:0,width:100,...Z}]}let f=[...P].sort((Z,J)=>{let U=J.end.diff(J.start,"minute")-Z.end.diff(Z.start,"minute");return U!==0?U:Z.start.diff(J.start)}),z=f.length,b=z>1?f4(z)/(z-1):0,Y=[];for(let Z=0;Z<z;Z++){let J=f.at(Z);if(!J)continue;let U=m2(J,p);if(!U)continue;let Q=Z===0?0:b*Z;Y.push({kind:"vertical",event:J,...U,left:Q,width:100-Q,zIndex:Z+1})}return Y},T2=({days:P,gridType:p="hour",events:$})=>{let f=$.filter((b)=>!b.allDay).toSorted((b,Y)=>b.start.diff(Y.start));if(f.length===0)return[];let z={gridStart:P.at(0)||_(),totalUnits:P.length,gridType:p,isDiscrete:p==="day"};return P4(f).flatMap((b)=>z4(b,z))};var D2=({days:P,gridType:p,resourceId:$})=>{let{getEventsForDateRange:f}=G(),z=P.at(0),b=P.at(-1),Y=z?.startOf("day"),Z=b?.endOf("day"),J=S2(()=>{if(!Y||!Z)return[];let Q=f(Y,Z);if($)Q=g2(Q,$);return Q.filter((X)=>!X.allDay)},[Y,Z,f,$]);return S2(()=>{return T2({days:P,events:J,gridType:p})},[P,p,J])};import{jsx as PP,jsxs as Y4}from"react/jsx-runtime";var Z4=({days:P,gridType:p="hour",resourceId:$,resource:f,"data-testid":z})=>{let{resources:b}=G((X)=>({resources:X.resources})),Y=D2({days:P,gridType:p,resourceId:$}),Z=P.at(0),J=P.at(-1)?.add(1,p),U=!$||b?.at(0)?.id===$,Q=p==="hour"&&Boolean(Z&&J);return Y4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":z,children:[Q&&Z&&J&&PP(w2,{rangeEnd:J,rangeStart:Z,resource:f,withDot:U}),Y.map((X,N)=>{let{event:M}=X,F=`event-${M.id}-${N}-${P.at(0)?.toISOString()}-${$??"no-resource"}`,W=M.end.diff(M.start,"minute")<=15;return PP("div",{className:"absolute",style:{left:`${X.left}%`,width:`calc(${X.width}% - var(--spacing) * 2)`,top:`${X.top}%`,height:`${X.height}%`},children:PP(E2,{className:q("pointer-events-auto",{"[&_p]:text-[10px] [&_p]:mt-0":W}),elementId:F,event:M})},k.listKey(F,"wrapper"))})]})},C2=b4(Z4);import{jsx as Z0,jsxs as X4}from"react/jsx-runtime";var J4=({id:P,days:p,resource:$,"data-testid":f,gridType:z,className:b,renderCell:Y,noEvents:Z,slotDurationMinutes:J=60})=>{let U=$?.id,Q=Math.floor(60/J),X=Array.from({length:Q},(M,F)=>F*J),N=X.length>1;return Z0("div",{className:q("flex flex-col flex-1 items-center min-w-20 justify-center bg-background relative",b),"data-testid":f||k.container.vertical.col(P),children:X4("div",{className:"w-full h-full relative grid gap-px bg-border",style:{gridTemplateRows:`repeat(${p.length}, minmax(0, 1fr))`},children:[p.map((M,F)=>{let W=M.format("HH");if(Y){let K=P===k.col.time,A=K?k.cell.verticalTime(W):k.cell.vertical(M,W,"00",U);return Z0("div",{className:"min-h-[60px] bg-background","data-hour":K?W:void 0,"data-testid":A,children:Y(M)},k.listKey(P,F,W))}return Z0("div",{className:"flex flex-col min-h-[60px]",children:X.map((K,A)=>{let V=String(K).padStart(2,"0"),m=k.cell.vertical(M,W,V,U),B=N&&A<X.length-1;return Z0(v2,{className:q("hover:bg-accent relative z-10 flex-1 min-h-0 cursor-pointer",B&&"border-b border-dashed"),"data-testid":m,day:N?M.minute(K):M,gridType:z,hour:z==="hour"?M.hour():void 0,minute:N?K:void 0,resourceId:U,shouldRenderEvents:!1},k.listKey(P,F,V))})},k.listKey(P,F,W))}),!Z&&Z0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:Z0(C2,{"data-testid":k.container.eventsLayer("vertical",P),days:p,gridType:z,resource:$,resourceId:U})})]})})},y2=Q4(J4);import{memo as q4}from"react";import{jsx as h2,jsxs as N4}from"react/jsx-runtime";var U4=({children:P,classes:p,allDayRow:$,expandAllDayRow:f=!1})=>{let{stickyViewHeader:z,viewHeaderClassName:b}=G((Z)=>({stickyViewHeader:Z.stickyViewHeader,viewHeaderClassName:Z.viewHeaderClassName})),Y="min-w-full w-fit";return N4("div",{className:q(f&&"flex h-full flex-col",z&&"sticky top-0 z-21 bg-background",b),children:[h2("div",{className:q("min-h-12 border-b","min-w-full w-fit",p?.header),"data-testid":"vertical-grid-header",children:P}),$&&h2("div",{className:q("flex min-h-12 border-b","min-w-full w-fit",f&&"flex-1 overflow-hidden",p?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},j2=q4(U4);import{jsx as Y0,jsxs as o2}from"react/jsx-runtime";var i2=({columns:P,children:p,gridType:$="day",variant:f="resource",classes:z,allDayRow:b,slotDurationMinutes:Y,style:Z})=>{let J=f==="resource",U=!J,Q=P.every((A)=>!A.days?.length),{currentDate:X,view:N,scrollTime:M}=G(),F=K4(null);m0({viewportRef:F,scrollTime:M,enabled:$==="hour"&&!Q,scrollKey:`${N}-${X.format("YYYY-MM-DD")}`});let K=p&&Y0(j2,{allDayRow:b,classes:{header:z?.header,allDay:z?.allDay},expandAllDayRow:Q,children:p});if(Q&&K)return Y0("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:Z,children:K});return o2("div",{className:"h-full flex flex-col","data-testid":"vertical-grid-container",style:Z,children:[U&&K,o2(d,{className:q("h-full",U&&"overflow-auto"),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full *:w-max",ref:F},children:[J&&K,Y0("div",{className:q("relative flex flex-1 min-w-full w-fit gap-px bg-border",z?.body),"data-calendar-scroll-content":"true","data-testid":"vertical-grid-body",children:P.map((A,V)=>Y0(y2,{...A,gridType:$,slotDurationMinutes:Y},k.listKey(A.id,V)))}),Y0(b0,{className:"z-30"})," ",Y0(b0,{className:"z-30",orientation:"horizontal"})," "]})]})};import{jsx as t}from"react/jsx-runtime";var L4=(P,p)=>p==="vertical",_4=({specs:P,header:p,composesResourceAxis:$,variant:f})=>{let{slotDuration:z}=G((N)=>({slotDuration:N.slotDuration})),b=P.some((N)=>N.gridType==="hour")?"hour":"day",Y=P.filter((N)=>!N.noEvents).map((N)=>N.day).filter((N)=>Boolean(N)),Z=P.find((N)=>N.noEvents),U=Boolean(Z?.className?.includes(pP))?{cell:"flex-1 min-w-0",spacer:pP}:void 0,Q;if(b==="hour")Q=$?t(d2,{columns:P}):t(c2,{classes:U,days:Y});return t(i2,{allDayRow:Q,classes:$?void 0:{header:"w-full",body:"w-full",allDay:"w-full"},columns:P,gridType:b,slotDurationMinutes:z,variant:f,children:p})},G4=({specs:P,header:p,composesResourceAxis:$,variant:f})=>{let z=P.some((Z)=>Z.columns?.some((J)=>J.gridType==="hour"))?"hour":"day",b=P.some((Z)=>Z.columns?.some((J)=>J.days)),Y=$?{header:q(b&&x2,"min-w-full"),body:"min-w-full"}:{body:"w-full",header:"w-full"};return t(k2,{classes:Y,dayNumberHeight:$?0:void 0,gridType:z,rows:P,variant:f,children:p})},r2=({view:P})=>{let{currentDate:p,firstDayOfWeek:$,hiddenDays:f,businessHours:z,hideNonBusinessHours:b,resources:Y,orientation:Z,weekViewGranularity:J}=G((K)=>({currentDate:K.currentDate,firstDayOfWeek:K.firstDayOfWeek,hiddenDays:K.hiddenDays,businessHours:K.businessHours,hideNonBusinessHours:K.hideNonBusinessHours,resources:K.resources,orientation:K.orientation,weekViewGranularity:K.weekViewGranularity})),U=u2(()=>({firstDayOfWeek:$,hiddenDays:f,businessHours:z,hideNonBusinessHours:b,resources:Y,orientation:Z,weekViewGranularity:J}),[$,f,z,b,Y,Z,J]),Q=u2(()=>P.columns?.(p,U),[P,p,U]);if(!Q||!P.layout){let K=P.component;if(K)return t(K,{});if(typeof process<"u"&&!1)console.warn(`[@ilamy/calendar] view "${P.name}" declares neither \`columns\` + \`layout\` nor \`component\` — rendering nothing.`);return null}let N=Boolean(Y?.length)&&Boolean(P.supportsResources),M=N?Z??"horizontal":P.layout,F=N?"resource":"regular",W=P.renderHeader?.({date:p,config:U});if(L4(Q,M))return t(_4,{composesResourceAxis:N,header:W,specs:Q,variant:F});return t(G4,{composesResourceAxis:N,header:W,specs:Q,variant:F})};var n2=(P)=>{if(!P||P.length===0)return;return new Set(P.map((p)=>T0[p]))};function l2(P){if(!P||!P.length)return[];return P.map((p)=>{return{...p,start:_.isDayjs(p.start)?p.start:_(p.start),end:_.isDayjs(p.end)?p.end:_(p.end)}})}import{jsx as n,jsxs as V4}from"react/jsx-runtime";var A4=()=>{let{view:P,getViews:p}=G((z)=>({view:z.view,getViews:z.getViews})),$=p().find((z)=>z.name===P);return V4("div",{className:"flex flex-col w-full h-full","data-testid":"ilamy-calendar",children:[n(O2,{className:"p-1 shrink-0 mb-1"}),n(BP,{children:n(a2,{className:"w-full min-h-0 flex-1",direction:"horizontal",transitionKey:P,children:n("div",{className:"border h-full w-full","data-calendar-viewport":"true","data-testid":"calendar-body",children:$?n(r2,{view:$},P):null})})}),n(b2,{})]})},$P=({events:P,firstDayOfWeek:p="sunday",initialView:$="month",initialDate:f,eventSpacing:z=t2,eventHeight:b=s2,stickyViewHeader:Y=!0,viewHeaderClassName:Z="",timeFormat:J="12-hour",hideNonBusinessHours:U=!1,hiddenDays:Q,resources:X,orientation:N,...M})=>{let F=Boolean(X?.length),W=F4(()=>l2(P),[P]);return M4(()=>{if(typeof process<"u"&&!1)console.warn("[@ilamy/calendar] `orientation` was provided without `resources` — it only applies when the calendar has resources, so it is ignored.")},[N,F]),n(e2,{eventHeight:b,eventSpacing:z,events:W,firstDayOfWeek:T0[p],hiddenDays:n2(Q),hideNonBusinessHours:U,initialDate:wP(f),initialView:$,orientation:N,resources:X,stickyViewHeader:Y,timeFormat:J,viewHeaderClassName:Z,...M,children:n(A4,{})})};import{jsx as B4}from"react/jsx-runtime";var W4=(P)=>B4($P,{...P});export{O4 as useIlamyCalendarContext,I4 as defaultTranslations,_ as dayjs,KP as SLOT_EVENT_MUTATION_SCOPE,NP as SLOT_EVENT_FORM,W4 as IlamyResourceCalendar,$P as IlamyCalendar};