@ilamy/calendar 1.1.0 → 1.2.0
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/README.md +7 -0
- package/dist/index.d.ts +85 -49
- package/dist/index.js +6 -6
- package/package.json +116 -112
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{AnimatePresence as C2,motion as D2}from"motion/react";import k2,{useMemo as E2}from"react";import{createContext as j5,useContext as Nf}from"react";var n0=j5(void 0),C=()=>{let P=Nf(n0);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},r5=()=>{let P=Nf(n0);if(P===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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,businessHours:P.businessHours}};import*as s from"@radix-ui/react-dialog";import{XIcon as X2}from"lucide-react";import G0 from"dayjs";import l5 from"dayjs/plugin/weekday.js";import d5 from"dayjs/plugin/weekOfYear.js";import t5 from"dayjs/plugin/isSameOrAfter.js";import n5 from"dayjs/plugin/isSameOrBefore.js";import a5 from"dayjs/plugin/isBetween.js";import s5 from"dayjs/plugin/minMax.js";import e5 from"dayjs/plugin/timezone.js";import P2 from"dayjs/plugin/utc.js";import f2 from"dayjs/plugin/localeData.js";import"dayjs/locale/af.js";import"dayjs/locale/am.js";import"dayjs/locale/ar-dz.js";import"dayjs/locale/ar-iq.js";import"dayjs/locale/ar-kw.js";import"dayjs/locale/ar-ly.js";import"dayjs/locale/ar-ma.js";import"dayjs/locale/ar-sa.js";import"dayjs/locale/ar-tn.js";import"dayjs/locale/ar.js";import"dayjs/locale/az.js";import"dayjs/locale/be.js";import"dayjs/locale/bg.js";import"dayjs/locale/bi.js";import"dayjs/locale/bm.js";import"dayjs/locale/bn-bd.js";import"dayjs/locale/bn.js";import"dayjs/locale/bo.js";import"dayjs/locale/br.js";import"dayjs/locale/bs.js";import"dayjs/locale/ca.js";import"dayjs/locale/cs.js";import"dayjs/locale/cv.js";import"dayjs/locale/cy.js";import"dayjs/locale/da.js";import"dayjs/locale/de-at.js";import"dayjs/locale/de-ch.js";import"dayjs/locale/de.js";import"dayjs/locale/dv.js";import"dayjs/locale/el.js";import"dayjs/locale/en-au.js";import"dayjs/locale/en-ca.js";import"dayjs/locale/en-gb.js";import"dayjs/locale/en-ie.js";import"dayjs/locale/en-il.js";import"dayjs/locale/en-in.js";import"dayjs/locale/en-nz.js";import"dayjs/locale/en-sg.js";import"dayjs/locale/en-tt.js";import"dayjs/locale/en.js";import"dayjs/locale/eo.js";import"dayjs/locale/es-do.js";import"dayjs/locale/es-mx.js";import"dayjs/locale/es-pr.js";import"dayjs/locale/es-us.js";import"dayjs/locale/es.js";import"dayjs/locale/et.js";import"dayjs/locale/eu.js";import"dayjs/locale/fa.js";import"dayjs/locale/fi.js";import"dayjs/locale/fo.js";import"dayjs/locale/fr-ca.js";import"dayjs/locale/fr-ch.js";import"dayjs/locale/fr.js";import"dayjs/locale/fy.js";import"dayjs/locale/ga.js";import"dayjs/locale/gd.js";import"dayjs/locale/gl.js";import"dayjs/locale/gom-latn.js";import"dayjs/locale/gu.js";import"dayjs/locale/he.js";import"dayjs/locale/hi.js";import"dayjs/locale/hr.js";import"dayjs/locale/ht.js";import"dayjs/locale/hu.js";import"dayjs/locale/hy-am.js";import"dayjs/locale/id.js";import"dayjs/locale/is.js";import"dayjs/locale/it-ch.js";import"dayjs/locale/it.js";import"dayjs/locale/ja.js";import"dayjs/locale/jv.js";import"dayjs/locale/ka.js";import"dayjs/locale/kk.js";import"dayjs/locale/km.js";import"dayjs/locale/kn.js";import"dayjs/locale/ko.js";import"dayjs/locale/ku.js";import"dayjs/locale/ky.js";import"dayjs/locale/lb.js";import"dayjs/locale/lo.js";import"dayjs/locale/lt.js";import"dayjs/locale/lv.js";import"dayjs/locale/me.js";import"dayjs/locale/mi.js";import"dayjs/locale/mk.js";import"dayjs/locale/ml.js";import"dayjs/locale/mn.js";import"dayjs/locale/mr.js";import"dayjs/locale/ms-my.js";import"dayjs/locale/ms.js";import"dayjs/locale/mt.js";import"dayjs/locale/my.js";import"dayjs/locale/nb.js";import"dayjs/locale/ne.js";import"dayjs/locale/nl-be.js";import"dayjs/locale/nl.js";import"dayjs/locale/nn.js";import"dayjs/locale/oc-lnc.js";import"dayjs/locale/pa-in.js";import"dayjs/locale/pl.js";import"dayjs/locale/pt-br.js";import"dayjs/locale/pt.js";import"dayjs/locale/rn.js";import"dayjs/locale/ro.js";import"dayjs/locale/ru.js";import"dayjs/locale/rw.js";import"dayjs/locale/sd.js";import"dayjs/locale/se.js";import"dayjs/locale/si.js";import"dayjs/locale/sk.js";import"dayjs/locale/sl.js";import"dayjs/locale/sq.js";import"dayjs/locale/sr-cyrl.js";import"dayjs/locale/sr.js";import"dayjs/locale/ss.js";import"dayjs/locale/sv-fi.js";import"dayjs/locale/sv.js";import"dayjs/locale/sw.js";import"dayjs/locale/ta.js";import"dayjs/locale/te.js";import"dayjs/locale/tet.js";import"dayjs/locale/tg.js";import"dayjs/locale/th.js";import"dayjs/locale/tk.js";import"dayjs/locale/tl-ph.js";import"dayjs/locale/tlh.js";import"dayjs/locale/tr.js";import"dayjs/locale/tzl.js";import"dayjs/locale/tzm-latn.js";import"dayjs/locale/tzm.js";import"dayjs/locale/ug-cn.js";import"dayjs/locale/uk.js";import"dayjs/locale/ur.js";import"dayjs/locale/uz-latn.js";import"dayjs/locale/uz.js";import"dayjs/locale/vi.js";import"dayjs/locale/x-pseudo.js";import"dayjs/locale/yo.js";import"dayjs/locale/zh-cn.js";import"dayjs/locale/zh-hk.js";import"dayjs/locale/zh-tw.js";import"dayjs/locale/zh.js";G0.extend(l5);G0.extend(d5);G0.extend(t5);G0.extend(n5);G0.extend(a5);G0.extend(s5);G0.extend(e5);G0.extend(P2);G0.extend(f2);var W=G0;import{clsx as $2}from"clsx";import{twMerge as Z2}from"tailwind-merge";function t(P,f){let $=P.startOf("week").day(f),X=P.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(J,Z)=>X.add(Z,"day"))}function GP(P,f){let $=t(P.startOf("month"),f);return Array.from({length:6},(X,J)=>{let Z=$[0].add(J,"week");return t(Z,f)})}function z(...P){return Z2($2(P))}function a0(P){if(P===void 0)return;if(W.isDayjs(P))return P;let f=W(P);return f.isValid()?f:void 0}var Bf=(P,f)=>{let $={...P};for(let X of f)delete $[X];return $};function WP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:W.isDayjs(f.start)?f.start:W(f.start),end:W.isDayjs(f.end)?f.end:W(f.end)}})}import{jsx as K0,jsxs as yP}from"react/jsx-runtime";function s0({...P}){return K0(s.Root,{"data-slot":"dialog",...P})}function _2({...P}){return K0(s.Portal,{"data-slot":"dialog-portal",...P})}function J2({className:P,...f}){return K0(s.Overlay,{"data-slot":"dialog-overlay",className:z("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),...f})}function e0({className:P,children:f,...$}){return yP(_2,{"data-slot":"dialog-portal",children:[K0(J2,{}),yP(s.Content,{"data-slot":"dialog-content",className:z("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),...$,children:[f,yP(s.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:[K0(X2,{}),K0("span",{className:"sr-only",children:"Close"})]})]})]})}function PP({className:P,...f}){return K0("div",{"data-slot":"dialog-header",className:z("flex flex-col gap-2 text-center sm:text-left",P),...f})}function OP({className:P,...f}){return K0("div",{"data-slot":"dialog-footer",className:z("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),...f})}function fP({className:P,...f}){return K0(s.Title,{"data-slot":"dialog-title",className:z("text-lg leading-none font-semibold",P),...f})}function FP({className:P,...f}){return K0(s.Description,{"data-slot":"dialog-description",className:z("text-muted-foreground text-sm",P),...f})}import{useDraggable as z2}from"@dnd-kit/core";import{AnimatePresence as G2,motion as K2}from"motion/react";import{memo as L2}from"react";import{useContext as Hf}from"react";import{createContext as Q2,useContext as Af}from"react";var $P=Q2(void 0),Q0=()=>{let P=Af($P);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},p2=()=>{let P=Af($P);if(P===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,resources:P.resources,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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{useCallback as X0,useMemo as Y2,useState as Mf}from"react";import{useCallback as n,useEffect as lP,useMemo as Ff,useState as u0}from"react";import{RRule as q2}from"rrule";var ZP=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},jP=({event:P,currentEvents:f,startDate:$,endDate:X})=>{if(!P.rrule)return[];try{let J={...P.rrule,dtstart:P.rrule.dtstart||P.start.toDate()},Z=new q2(J),_=f.filter((L)=>L.recurrenceId&&L.uid===P.uid),Q=P.end.diff(P.start),p=$.subtract(Q,"millisecond").toDate(),q=X.toDate();return Z.between(p,q,!0).map((L,V)=>{let Y=W(L),U=_.find((M)=>a0(M.recurrenceId)?.isSame(Y));if(U)return{...P,...U};let A=P.end.diff(P.start),G=Y.add(A,"millisecond"),B=`${P.id}_${V}`,O=P.uid||`${P.id}@ilamy.calendar`;return{...P,id:B,start:Y,end:G,uid:O,rrule:void 0}}).filter((L)=>{if(P.exdates&&P.exdates.length>0){let U=L.start.toISOString();if(P.exdates.includes(U))return!1}return L.start.isSameOrBefore(X)&&L.end.isSameOrAfter($)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},Vf=({targetEvent:P,updates:f,currentEvents:$,scope:X})=>{let J=[...$],Z=J.findIndex((Q)=>{return(Q.uid||`${Q.id}@ilamy.calendar`)===P.uid&&Q.rrule&&!Q.recurrenceId});if(Z===-1)throw Error("Base recurring event not found");let _=J[Z];switch(X){case"this":{let Q=P.start.toISOString(),q=[..._.exdates||[],Q],N={..._,exdates:q};J[Z]=N;let K=`${P.id}_modified_${Date.now()}`,L={...Bf(P,["width","height","top","left","right"]),...f,id:K,recurrenceId:Q,uid:_.uid||`${_.id}@ilamy.calendar`,rrule:void 0};J.push(L);break}case"following":{let p=P.start.subtract(1,"day").endOf("day").toDate(),q={..._,rrule:{..._.rrule,until:p}};J[Z]=q;let N=_.end.diff(_.start),K=f.start||P.start,L=f.end||K.add(N),V=`${_.id}_following`,Y=`${V}@ilamy.calendar`,U={..._,...f,rrule:{..._.rrule,...f.rrule,dtstart:K.toDate()},id:V,uid:Y,start:K,end:L,recurrenceId:void 0};J.push(U);break}case"all":{let Q={..._,...f};J[Z]=Q;break}default:throw Error(`Invalid scope: ${X}. Must be 'this', 'following', or 'all'`)}return J},Wf=({targetEvent:P,currentEvents:f,scope:$})=>{let X=[...f],J=X.findIndex((_)=>{return(_.uid||`${_.id}@ilamy.calendar`)===P.uid&&_.rrule&&!_.recurrenceId});if(J===-1)throw Error("Base recurring event not found");let Z=X[J];switch($){case"this":{let _=P.start.toISOString(),p=[...Z.exdates||[],_],q={...Z,exdates:p};X[J]=q;break}case"following":{let Q=P.start.subtract(1,"day").endOf("day").toDate(),p={...Z,rrule:{...Z.rrule,until:Q}};X[J]=p;break}case"all":return X.filter((Q)=>Q.uid!==P.uid);default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return X};var rP={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",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",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};var x0=1,Of=28,U0=24,XP=4,RP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var Rf={day:"day",week:"week",month:"month",year:"year"},MP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:X="month",initialDate:J=W(),businessHours:Z,onEventAdd:_,onEventUpdate:Q,onEventDelete:p,onDateChange:q,onViewChange:N,locale:K,timezone:L,translations:V,translator:Y}=P,[U,A]=u0(J),[G,B]=u0(X),[O,S]=u0(f),[M,F]=u0(!1),[b,g]=u0(null),[D,o]=u0(null),[v,H]=u0(K||"en"),c=Ff(()=>{if(Y)return Y;if(V)return(I)=>V[I]||I;return(I)=>rP[I]||I},[V,Y]),d=n((I,R)=>{let w=[];for(let x of O)if(x.rrule)w.push(...jP({event:x,currentEvents:O,startDate:I,endDate:R}));else{let t0=x.start.isSameOrAfter(I)&&x.start.isSameOrBefore(R),c5=x.end.isSameOrAfter(I)&&x.end.isSameOrBefore(R),y5=x.start.isBefore(I)&&x.end.isAfter(R);if(t0||c5||y5)w.push(x)}return w},[O]),f0=n(()=>{if(G==="day")return{start:U.startOf("day"),end:U.endOf("day")};if(G==="year")return{start:U.startOf("year"),end:U.endOf("year")};if(G==="week"){let R=t(U,$);return{start:R[0].startOf("day"),end:R[6].endOf("day")}}let I=GP(U,$);return{start:I[0][0].startOf("day"),end:I[5][6].endOf("day")}},[U,G,$]),J0=Ff(()=>{let{start:I,end:R}=f0();return d(I,R)},[d,f0]);lP(()=>{if(f)S(f)},[f]),lP(()=>{if(K)H(K),W.locale(K),A((I)=>I.locale(K))},[K]),lP(()=>{if(L)W.tz.setDefault(L)},[L]);let m=n((I)=>{A(I),q?.(I)},[q]),N0=n((I)=>{A((R)=>{let w=I===1?R.add(1,Rf[G]):R.subtract(1,Rf[G]);return q?.(w),w})},[G,q]),y0=n(()=>N0(1),[N0]),j0=n(()=>N0(-1),[N0]),F0=n(()=>{let I=W();A(I),q?.(I)},[q]),r0=n((I)=>{S((R)=>[...R,I]),_?.(I)},[_]),l0=n((I,R)=>{S((w)=>w.map((x)=>{if(x.id!==I)return x;let t0={...x,...R};return Q?.(t0),t0}))},[Q]),d0=n((I,R,w)=>{Q?.({...I,...R}),S(Vf({targetEvent:I,updates:R,currentEvents:O,scope:w.scope}))},[O,Q]),k0=n((I,R)=>{p?.(I),S(Wf({targetEvent:I,currentEvents:O,scope:R.scope}))},[O,p]),E0=n((I)=>{S((R)=>{let w=R.find((x)=>x.id===I);if(w)p?.(w);return R.filter((x)=>x.id!==I)})},[p]),o0=n((I)=>{if(I?.start)o(I.start);let R=I?.start??U;g({title:c("newEvent"),start:R,end:I?.end??R.add(1,"hour"),resourceId:I?.resourceId,description:"",allDay:!1}),F(!0)},[U,c]),T=n(()=>{o(null),g(null),F(!1)},[]),Z0=n((I)=>{B(I),N?.(I)},[N]),B0=n((I)=>{let R=I.uid;return O.find((w)=>(w.uid||`${w.id}@ilamy.calendar`)===R&&w.rrule)||null},[O]);return{currentDate:U,view:G,events:J0,rawEvents:O,isEventFormOpen:M,selectedEvent:b,selectedDate:D,firstDayOfWeek:$,dayMaxEvents:XP,currentLocale:v,businessHours:Z,setCurrentDate:A,selectDate:m,setView:Z0,nextPeriod:y0,prevPeriod:j0,today:F0,addEvent:r0,updateEvent:l0,updateRecurringEvent:d0,deleteEvent:E0,deleteRecurringEvent:k0,openEventForm:o0,closeEventForm:T,setSelectedEvent:g,setIsEventFormOpen:F,setSelectedDate:o,getEventsForDateRange:d,findParentRecurringEvent:B0,t:c}};import{jsx as U2}from"react/jsx-runtime";var Sf=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},If=({children:P,events:f=[],resources:$=[],firstDayOfWeek:X=0,initialView:J="month",initialDate:Z,renderEvent:_,onEventClick:Q,onCellClick:p,onViewChange:q,onEventAdd:N,onEventUpdate:K,onEventDelete:L,onDateChange:V,locale:Y,timezone:U,disableCellClick:A,disableEventClick:G,disableDragAndDrop:B,dayMaxEvents:O,stickyViewHeader:S=!0,viewHeaderClassName:M="",headerComponent:F,headerClassName:b,translations:g,translator:D,renderResource:o,renderEventForm:v,businessHours:H,timeFormat:c="12-hour"})=>{let[d]=Mf($),[f0,J0]=Mf(new Set($.map((R)=>R.id))),m=MP({events:f,firstDayOfWeek:X,initialView:J,initialDate:Z,businessHours:H,onEventAdd:N,onEventUpdate:K,onEventDelete:L,onDateChange:V,onViewChange:q,locale:Y,timezone:U,translations:g,translator:D}),N0=X0((R)=>{J0((w)=>{let x=new Set(w);if(x.has(R))x.delete(R);else x.add(R);return x})},[]),y0=X0((R)=>{J0((w)=>new Set(w).add(R))},[]),j0=X0((R)=>{J0((w)=>{let x=new Set(w);return x.delete(R),x})},[]),F0=X0(()=>{J0(new Set(d.map((R)=>R.id)))},[d]),r0=X0(()=>{J0(new Set)},[]),l0=X0((R)=>{return m.events.filter((w)=>{if(w.resourceIds)return w.resourceIds.includes(R);return w.resourceId===R})},[m.events]),d0=X0((R)=>{return m.events.filter((w)=>{return Sf(w).some((t0)=>R.includes(t0))})},[m.events]),k0=X0((R)=>{return d.find((w)=>w.id===R)},[d]),E0=X0(()=>{return d.filter((R)=>f0.has(R.id))},[d,f0]),o0=X0((R)=>{return Boolean(R.resourceIds&&R.resourceIds.length>1)},[]),T=X0((R)=>{m.setSelectedEvent(R),m.setIsEventFormOpen(!0)},[m]),Z0=X0((R)=>{if(G)return;if(Q)Q(R);else T(R)},[G,Q,T]),B0=X0((R)=>{if(A)return;if(p)p(R);else{let w={title:m.t("newEvent"),start:R.start,end:R.end,description:"",allDay:!1};if(R.resourceId!==void 0)w.resourceId=R.resourceId;m.setSelectedEvent(w),m.setSelectedDate(R.start),m.setIsEventFormOpen(!0)}},[p,A,m]),I=Y2(()=>({...m,view:m.view,setView:m.setView,events:m.events,rawEvents:m.rawEvents,resources:d,visibleResources:f0,toggleResourceVisibility:N0,showResource:y0,hideResource:j0,showAllResources:F0,hideAllResources:r0,getEventsForResource:l0,getEventsForResources:d0,getResourceById:k0,getVisibleResources:E0,isEventCrossResource:o0,getEventResourceIds:Sf,onEventClick:Z0,onCellClick:B0,headerComponent:F,headerClassName:b,renderEvent:_,renderResource:o,renderEventForm:v,locale:Y,timezone:U,disableCellClick:A,disableEventClick:G,disableDragAndDrop:B,dayMaxEvents:O,stickyViewHeader:S,viewHeaderClassName:M,businessHours:H,timeFormat:c}),[m,d,f0,N0,y0,j0,F0,r0,l0,d0,k0,E0,o0,Z0,B0,_,o,v,Y,U,A,G,B,O,S,M,F,b,H,c]);return U2($P.Provider,{value:I,children:P})};function i(P){let f=Hf($P),$=Hf(n0);if(f)return P(f);if($)return P($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as _P,jsxs as A2}from"react/jsx-runtime";var N2=(P,f)=>{if(P&&f)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if(f)return"rounded-l-md rounded-r-none";return"rounded-md"};function B2({elementId:P,event:f,className:$,style:X,disableDrag:J=!1}){let{onEventClick:Z,renderEvent:_,disableEventClick:Q,disableDragAndDrop:p}=i((Y)=>({onEventClick:Y.onEventClick,renderEvent:Y.renderEvent,disableEventClick:Y.disableEventClick,disableDragAndDrop:Y.disableDragAndDrop})),{attributes:q,listeners:N,setNodeRef:K,isDragging:L}=z2({id:P,data:{event:f,type:"calendar-event"},disabled:J||p}),V=()=>{let Y=f,U=Y.isTruncatedStart,A=Y.isTruncatedEnd;return A2("div",{className:z(f.backgroundColor||"bg-blue-500",f.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",N2(U,A)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[U&&_P("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),_P("p",{className:z("text-[10px] font-semibold sm:text-xs mt-0.5",U&&"pl-1",A&&"pr-1"),children:f.title}),A&&_P("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return _P(G2,{mode:"wait",children:_P(K2.div,{ref:K,...q,...N,initial:{opacity:0,y:-50},animate:{opacity:1,y:0},exit:{opacity:0,y:-50},layout:!0,layoutId:P,transition:{duration:0.4,ease:"easeInOut"},className:z("truncate h-full w-full",J||p?Q?"cursor-default":"cursor-pointer":"cursor-grab",L&&!(J||p)&&"cursor-grabbing shadow-lg",$),style:X,onClick:(Y)=>{Y.stopPropagation(),Z(f)},children:_?_(f):_P(V,{})},P)})}var R0=L2(B2,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{useImperativeHandle as V2,useState as Tf}from"react";import{jsx as KP,jsxs as W2}from"react/jsx-runtime";var JP=({ref:P})=>{let[f,$]=Tf(!1),[X,J]=Tf(null),{currentDate:Z,firstDayOfWeek:_}=i((q)=>({currentDate:q.currentDate,firstDayOfWeek:q.firstDayOfWeek}));V2(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(q)=>J(q)}));let p=Z.startOf("month").clone();while(p.day()!==_)p=p.subtract(1,"day");return KP(s0,{open:f,onOpenChange:$,children:W2(e0,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[KP(PP,{children:KP(fP,{children:X&&X.day.format("MMMM D, YYYY")})}),KP("div",{className:"mt-4 space-y-3",children:X&&X.events.map((q)=>{return KP(R0,{elementId:`all-events-dialog-event-$${q.id}`,event:q,className:"relative my-1 h-[30px]"},q.id)})})]})})};import{AnimatePresence as O2,motion as F2}from"motion/react";import{useMemo as R2}from"react";import{jsx as SP}from"react/jsx-runtime";var bf=({className:P})=>{let{firstDayOfWeek:f,currentLocale:$,stickyViewHeader:X,viewHeaderClassName:J}=C(),Z=R2(()=>{let _=W.weekdaysShort().map((Q)=>Q.toLowerCase());for(let Q=0;Q<f;Q++){let p=_.shift();if(p)_.push(p)}return{days:_}},[f,$]);return SP("div",{className:z("grid grid-cols-7 border-b",X&&"sticky top-0 z-20",J,P),"data-testid":"month-header",children:Z.days.map((_,Q)=>SP(O2,{mode:"wait",children:SP(F2.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Q*0.05},className:"py-2 text-center font-medium border-r first:border-l","data-testid":`weekday-header-${_}`,children:SP("span",{className:"text-sm capitalize",children:_})},_)},_))})};var IP=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:X=Of,gridType:J="day"})=>{let Z=P[0].startOf("day"),_=P.at(-1).endOf("day"),Q=P.length,p=f.filter((Y)=>Y.end.diff(Y.start,J)>0),q=f.filter((Y)=>Y.end.diff(Y.start,J)===0),N=[...p].sort((Y,U)=>{let A=Y.start.diff(U.start);if(A!==0)return A;return U.end.diff(U.start)-Y.end.diff(Y.start)}),K=[...q].sort((Y,U)=>Y.start.diff(U.start)),L=[];for(let Y=0;Y<$;Y++){L[Y]=[];for(let U=0;U<Q;U++)L[Y][U]={taken:!1,event:null}}let V=[];for(let Y of N){let U=W.max(Y.start.startOf(J),Z),A=J==="hour"?Y.end.subtract(1,"minute"):Y.end,G=W.min(A.startOf(J),_),B=Math.max(0,U.diff(Z,J)),O=Math.min(Q-1,G.diff(Z,J)),S=Y.start.startOf(J).isBefore(Z),M=Y.end.startOf(J).isAfter(_),F=!1,b=-1;for(let g=0;g<$;g++){let D=!0;for(let o=B;o<=O;o++)if(L[g][o].taken){D=!1;break}if(D){b=g;break}}if(b!==-1){for(let D=B;D<=O;D++)L[b][D]={taken:!0,event:Y};let g=O-B+1;V.push({left:B/Q*100,width:g/Q*100,top:X+x0+b*(U0+x0),height:U0,position:b,...Y,isTruncatedStart:S,isTruncatedEnd:M}),F=!0}if(!F)for(let g=B+1;g<=O;g++){let D=-1;for(let o=0;o<$;o++){let v=!0;for(let H=g;H<=O;H++)if(L[o][H].taken){v=!1;break}if(v){D=o;break}}if(D!==-1){for(let v=g;v<=O;v++)L[D][v]={taken:!0,event:Y};let o=O-g+1;V.push({left:g/Q*100,width:o/Q*100,top:X+x0+D*(U0+x0),height:U0,position:D,...Y,isTruncatedStart:!0,isTruncatedEnd:M}),F=!0;break}}}for(let Y of K){let U=W.max(Y.start.startOf(J),Z),A=Math.max(0,Math.min(Q-1,U.diff(Z,J))),G=!1,B=!1,O=-1;for(let S=0;S<$;S++)if(!L[S][A].taken){O=S;break}if(O!==-1)L[O][A]={taken:!0,event:Y},V.push({left:A/Q*100,width:1/Q*100,top:X+x0+O*(U0+x0),height:U0,position:O,...Y,isTruncatedStart:!1,isTruncatedEnd:!1})}return V};import{useMemo as M2}from"react";var wf=({days:P,allDay:f,dayNumberHeight:$})=>{let{getEventsForDateRange:X,dayMaxEvents:J}=C(),Z=P[0].startOf("day"),_=P.at(-1).endOf("day");return M2(()=>{let p=X(Z,_);if(f)p=p.filter((q)=>q.allDay);return IP({days:P,events:p,dayMaxEvents:J,dayNumberHeight:$})},[X,Z,_,f,P,J,$])};import{memo as S2}from"react";import{jsx as dP}from"react/jsx-runtime";var I2=({days:P,allDay:f,dayNumberHeight:$})=>{let X=P[0],J=wf({days:P,allDay:f,dayNumberHeight:$});return dP("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:J.map((Z)=>{let _=`${Z.id}-${Z.position}-${X.toISOString()}`;return dP("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${Z.left}% + var(--spacing) * 0.25)`,width:`calc(${Z.width}% - var(--spacing) * 1)`,top:`${Z.top}px`,height:`${U0}px`},"data-testid":`week-event-layer-event-${Z.id}`,children:dP(R0,{elementId:_,event:Z,className:"h-full w-full shadow"})},`${_}-wrapper`)})})},QP=S2(I2);import*as L0 from"@radix-ui/react-scroll-area";import{jsx as LP,jsxs as H2}from"react/jsx-runtime";function $0({className:P,children:f,viewPortProps:$,...X}){return H2(L0.Root,{"data-slot":"scroll-area",className:z("relative",P),...X,children:[LP(L0.Viewport,{...$,"data-slot":"scroll-area-viewport",className:z("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),children:f}),LP(tP,{}),LP(L0.Corner,{})]})}function tP({className:P,orientation:f="vertical",...$}){return LP(L0.ScrollAreaScrollbar,{"data-slot":"scroll-area-scrollbar",orientation:f,className:z("flex touch-none p-px transition-colors select-none",f==="vertical"&&"h-full w-2.5 border-l border-l-transparent",f==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),...$,children:LP(L0.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}import h2 from"react";import{useDroppable as T2}from"@dnd-kit/core";import{jsx as b2}from"react/jsx-runtime";function p0({id:P,type:f,date:$,hour:X,minute:J,resourceId:Z,allDay:_,children:Q,className:p,style:q,"data-testid":N,disabled:K=!1}){let{onCellClick:L,disableDragAndDrop:V,disableCellClick:Y}=i((B)=>({onCellClick:B.onCellClick,disableDragAndDrop:B.disableDragAndDrop,disableCellClick:B.disableCellClick})),{isOver:U,setNodeRef:A}=T2({id:P,data:{type:f,date:$,hour:X,minute:J,resourceId:Z,allDay:_},disabled:V||K}),G=(B)=>{if(B.stopPropagation(),Y||K)return;let O=$.hour(X??0).minute(J??0),S=O.clone();if(X!==void 0&&J!==void 0)S=S.hour(X).minute(J+15);else if(X!==void 0)S=S.hour(X+1).minute(0);else S=S.hour(23).minute(59);L({start:O,end:S,resourceId:Z})};return b2("div",{ref:A,"data-testid":N,className:z(p,U&&!V&&!K&&"bg-accent",Y||K?"cursor-default":"cursor-pointer",K&&"bg-secondary text-muted-foreground pointer-events-none"),onClick:G,style:q,children:Q})}var w2={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6},g2=(P,f)=>{if(!f)return!0;if(f.daysOfWeek)return f.daysOfWeek.some(($)=>w2[$]===P.day());return!0},q0=({date:P,hour:f,minute:$=0,businessHours:X})=>{if(!g2(P,X))return!1;if(!X)return!0;if(f===void 0)return!0;let J=X,Z=J.startTime??9,_=J.endTime??17,Q=f*60+$,p=Z*60,q=_*60;if(Q<p||Q>=q)return!1;return!0};import{jsx as HP,jsxs as nP,Fragment as m2}from"react/jsx-runtime";var gf=({index:P,day:f,className:$=""})=>{let X=h2.useRef(null),{currentLocale:J,getEventsForDateRange:Z,currentDate:_,firstDayOfWeek:Q,dayMaxEvents:p=0,t:q,businessHours:N}=C(),K=Z(f.startOf("day"),f.endOf("day")),V=_.startOf("month").clone();while(V.day()!==Q)V=V.subtract(1,"day");let Y=(M,F)=>{X.current?.setSelectedDayEvents({day:M,events:F}),X.current?.open()},U=f.isSame(W(),"day"),A=f.month()===_.month(),G=P===6,B=K.length-p,O=B>0,S=q0({date:f,businessHours:N});return nP(m2,{children:[HP(p0,{id:`day-cell-${f.format("YYYY-MM-DD")}`,type:"day-cell","data-testid":`day-cell-${f.format("YYYY-MM-DD")}`,date:f,className:z("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]",!A&&"bg-secondary text-muted-foreground",G&&"border-r-0",$),disabled:!S,children:nP("div",{className:"flex flex-col gap-1",children:[HP("div",{className:z("flex h-5 w-5 items-center justify-center rounded-full text-xs sm:h-6 sm:w-6",U&&"bg-primary text-primary-foreground font-medium"),children:Intl.DateTimeFormat(J,{day:"numeric"}).format(f.toDate())}),K.slice(0,p).map((M,F)=>HP("div",{className:"h-[20px] w-full","data-testid":M?.title},`empty-${F}`)),O&&nP("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(M)=>{M.stopPropagation(),Y(f,K)},onKeyDown:(M)=>{if(M.key==="Enter"||M.key===" ")M.preventDefault(),M.stopPropagation(),Y(f,K)},tabIndex:0,role:"button",children:["+",B," ",q("more")]})]})}),HP(JP,{ref:X})]})};import{jsx as M0,jsxs as hf}from"react/jsx-runtime";var mf=({dayMaxEvents:P=3})=>{let f=k2.useRef(null),{currentDate:$,firstDayOfWeek:X}=C(),J=E2(()=>GP($,X),[$,X]);return hf("div",{className:"flex h-full flex-col","data-testid":"month-view",children:[M0(bf,{className:"h-[3rem]"}),M0($0,{className:"overflow-auto h-[calc(100%-3rem)]","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col *:min-h-full"},children:M0(C2,{mode:"wait",children:M0(D2.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:0.25,ease:"easeInOut"},className:"relative grid h-full grid-cols-7 grid-rows-6 overflow-auto flex-1","data-testid":"month-calendar-grid",children:J.map((Z,_)=>hf("div",{className:"relative col-span-7 grid grid-cols-7","data-testid":`week-row-${_}`,children:[Z.map((Q,p)=>M0(gf,{index:p,day:Q,dayMaxEvents:P,className:"border-r border-b first:border-l"},Q.format("YYYY-MM-DD"))),M0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:M0(QP,{days:Z})})]},`week-${_}`))},$.format("YYYY-MM-DD"))})}),M0(JP,{ref:f})]})};import r2 from"dayjs/plugin/weekOfYear";import{jsx as NP,jsxs as o2}from"react/jsx-runtime";var Cf=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,businessHours:X}=C(),J=t(P,f);return o2("div",{className:"grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1 relative","data-testid":"week-all-day-row",children:[NP("div",{className:"w-16 flex shrink-0 items-center justify-end border-x border-b px-1 min-h-16",children:NP("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:$("allDay")})}),J.map((Z)=>{let _=q0({date:Z,businessHours:X});return NP(p0,{id:`all-day-cell-${Z.format("YYYY-MM-DD")}`,type:"day-cell",date:Z,allDay:!0,disabled:!_,className:"hover:bg-accent h-full flex-1 cursor-pointer border-r border-b"},`all-day-${Z.format("YYYY-MM-DD")}`)}),NP("div",{className:"absolute inset-0 z-10 col-span-7 col-start-2",children:NP(QP,{days:J,dayNumberHeight:0,allDay:!0})})]})};import{AnimatePresence as x2,motion as u2}from"motion/react";import{jsx as pP,jsxs as aP}from"react/jsx-runtime";var Df=({className:P})=>{let{currentDate:f,currentLocale:$,selectDate:X,openEventForm:J,firstDayOfWeek:Z,stickyViewHeader:_,viewHeaderClassName:Q,t:p}=C(),q=t(f,Z);return aP("div",{className:z("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1",_&&"sticky top-0 z-20",Q,P),"data-testid":"week-header",children:[pP("div",{className:"col-span-1 w-16 shrink-0 items-center justify-center border-x border-b p-2",children:aP("div",{className:"flex flex-col items-center justify-center",children:[pP("span",{className:"text-muted-foreground text-xs",children:p("week")}),pP("span",{className:"font-medium",children:f.week()})]})}),q.map((N,K)=>{let L=N.isSame(W(),"day");return pP(x2,{mode:"wait",children:aP(u2.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:K*0.05},className:z("hover:bg-accent flex-1 cursor-pointer p-1 text-center sm:p-2 border-r border-b",L&&"bg-primary/10 font-bold"),onClick:()=>{X(N),J({start:N})},"data-testid":`week-day-header-${N.format("dddd").toLowerCase()}`,children:[pP("div",{className:"text-xs sm:text-sm",children:N.format("ddd")}),pP("div",{className:z("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs sm:h-7 sm:w-7 sm:text-sm",L&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat($,{day:"numeric"}).format(N.toDate())})]},N.format("YYYY-MM-DD"))},N.format("YYYY-MM-DD"))})]})};import{useMemo as i2}from"react";var kf=({day:P})=>{let{getEventsForDateRange:f}=C();return i2(()=>{let X=f(P.startOf("day"),P.endOf("day"));if(X=X.filter((p)=>!p.allDay).toSorted((p,q)=>p.start.diff(q.start)),X.length===0)return[];let J=[],Z=[],_=null;for(let p of X){if(_&&p.start.isSameOrAfter(_)){if(Z.length>0)J.push(Z);Z=[]}Z.push(p),_=_?W.max(_,p.end):p.end}if(Z.length>0)J.push(Z);let Q=[];for(let p of J){if(p.length===1){let V=p[0],Y=V.start.hour()+V.start.minute()/60,U=V.end.hour()+V.end.minute()/60;if(U<Y)U=24;let A=U-Y,G=Y/24*100,B=A/24*100;Q.push({...V,left:0,width:100,top:G,height:B});continue}let q=[...p].sort((V,Y)=>{let U=V.end.diff(V.start,"minute"),A=Y.end.diff(Y.start,"minute");if(U!==A)return A-U;return V.start.diff(Y.start)}),N=q.length,K;if(N===2)K=25;else if(N===3)K=50;else if(N===4)K=60;else K=70;let L=N>1?K/(N-1):0;for(let V=0;V<q.length;V++){let Y=q[V],U=Y.start.hour()+Y.start.minute()/60,A=Y.end.hour()+Y.end.minute()/60;if(A<U)A=24;let G=A-U,B=U/24*100,O=G/24*100,S,M,F;if(V===0)S=0,M=100,F=1;else S=L*V,M=100-S,F=V+1;Q.push({...Y,left:S,width:M,top:B,height:O,zIndex:F})}}return Q},[P,f])};import{jsx as sP}from"react/jsx-runtime";var TP=({day:P,"data-testid":f})=>{let $=kf({day:P});return sP("div",{"data-testid":f,className:"pointer-events-none absolute inset-0 z-10",children:$.map((X,J)=>{let Z=`event-${X.id}-${J}-${P.toISOString()}`,_=X.end.diff(X.start,"minute")<=15;return sP("div",{className:"absolute",style:{left:`${X.left}%`,width:`calc(${X.width}% - var(--spacing) * 2)`,top:`${X.top}%`,height:`${X.height}%`},children:sP(R0,{elementId:Z,event:X,className:z("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":_})})},`${Z}-wrapper`)})})};import{jsx as Ef,jsxs as c2}from"react/jsx-runtime";var v2=Array.from({length:24},(P,f)=>f).map((P)=>W().hour(P).minute(0)),of=({day:P})=>{let{businessHours:f}=C();return c2("div",{"data-testid":`week-day-col-${P.format("YYYY-MM-DD")}`,className:"col-span-1 relative grid grid-rows-24 border-r",children:[v2.map(($)=>{let X=$.hour(),J=$.format("HH"),Z=P.format("YYYY-MM-DD"),_=q0({date:P,hour:X,minute:0,businessHours:f});return Ef(p0,{id:`week-time-cell-${Z}-${J}`,type:"time-cell",date:P,hour:X,disabled:!_,"data-testid":`week-time-cell-${Z}-${J}`,className:z("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b")},`${Z}-${J}`)}),Ef(TP,{"data-testid":`week-day-events-${P.format("YYYY-MM-DD")}`,day:P})]})};import{jsx as i0,jsxs as j2}from"react/jsx-runtime";var y2=Array.from({length:24},(P,f)=>f).map((P)=>W().hour(P).minute(0)),xf=()=>{let{currentDate:P,firstDayOfWeek:f,currentLocale:$,timeFormat:X}=C(),J=t(P,f),Z=J.findIndex((Q)=>Q.isSame(W(),"day")),_=Z!==-1;return j2("div",{"data-testid":"week-time-grid",className:"relative h-full grid grid-cols-[auto_repeat(7,1fr)] grid-rows-[repeat(24,minmax(60px, 1fr))]",children:[i0("div",{"data-testid":"week-time-labels",className:"z-10 col-span-1 w-16 grid grid-rows-24 border-x",children:y2.map((Q)=>i0("div",{"data-testid":`week-time-hour-${Q.format("HH")}`,className:"h-[60px] border-b text-right",children:i0("span",{className:"text-muted-foreground px-1 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:X==="12-hour"}).format(Q.toDate())})},Q.format("HH:mm")))}),J.map((Q)=>i0(of,{day:Q},Q.format("YYYY-MM-DD"))),_&&i0("div",{"data-testid":"week-current-time-indicator",className:"pointer-events-none absolute z-40",style:{top:`${(W().hour()+W().minute()/60)*60}px`,left:`calc(var(--spacing) * 16 + ${Z} * (100% - var(--spacing) * 16) / 7)`,width:"calc((100% - var(--spacing) * 16) / 7)"},children:i0("div",{className:"w-full border-t border-red-500",children:i0("div",{className:"-mt-1 ml-1 h-2 w-2 rounded-full bg-red-500"})})})]})};import{jsx as eP,jsxs as uf}from"react/jsx-runtime";W.extend(r2);var l2=()=>{return uf("div",{className:"flex flex-col h-full","data-testid":"week-view",children:[eP(Df,{className:"h-[5rem]"}),uf($0,{className:"flex overflow-auto h-[calc(100%-5rem)]","data-testid":"week-scroll-area",children:[eP(Cf,{}),eP(xf,{})]})]})},vf=l2;import{Fragment as e2}from"react";import{jsx as qP,jsxs as d2}from"react/jsx-runtime";var cf=()=>{let{currentDate:P,t:f,businessHours:$}=C(),X=q0({date:P,businessHours:$});return d2("div",{"data-testid":"day-all-day-row",className:"grid grid-cols-8 border-b border-x",children:[qP("div",{className:"col-span-2 flex shrink-0 items-center justify-end border-r pr-2 md:col-span-1",children:qP("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:f("allDay")})}),qP("div",{className:"relative col-span-6 md:col-span-7 ",children:qP(p0,{id:`all-day-${P.format("YYYY-MM-DD")}`,type:"day-cell",date:P,allDay:!0,className:"hover:bg-accent w-full cursor-pointer min-h-10 flex flex-col relative",disabled:!X,children:qP("div",{className:"absolute inset-0 z-10 pr-2",children:qP(QP,{days:[P],dayNumberHeight:0,allDay:!0})})})})]})};import{AnimatePresence as t2,motion as n2}from"motion/react";import{jsx as bP,jsxs as a2}from"react/jsx-runtime";var yf=({className:P})=>{let{currentDate:f,stickyViewHeader:$,viewHeaderClassName:X}=C(),J=f.isSame(W(),"day");return bP("div",{"data-testid":"day-header",className:z("flex items-center justify-center border-b p-2 border-x",$&&"sticky top-0 z-20",X,P),children:bP(t2,{mode:"wait",children:a2(n2.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut"},className:z("flex items-center text-center text-base font-semibold sm:text-xl",J&&"text-primary"),children:[bP("span",{className:"xs:inline hidden",children:f.format("dddd, ")}),f.format("MMMM D, YYYY"),J&&bP("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"})]},f.format("YYYY-MM-DD"))})})};import{jsx as Pf}from"react/jsx-runtime";var s2=Array.from({length:24},(P,f)=>f).map((P)=>{return W().hour(P).minute(0)}),jf=({className:P})=>{let{currentLocale:f,timeFormat:$}=C();return Pf("div",{"data-testid":"day-time-col",className:`col-span-2 h-full md:col-span-1 ${P}`,children:s2.map((X)=>Pf("div",{"data-testid":`day-time-hour-${X.format("HH")}`,className:"h-[60px] border-b text-right",children:Pf("span",{className:"text-muted-foreground pr-2 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat(f,{hour:"numeric",hour12:$==="12-hour"}).format(X.toDate())})},X.format("HH:mm")))})};import{jsx as S0,jsxs as wP}from"react/jsx-runtime";var rf=Array.from({length:24},(P,f)=>f).map((P)=>{return W().hour(P).minute(0)}),P1=()=>{let{currentDate:P,businessHours:f}=C(),$=P.isSame(W(),"day"),X=P.format("YYYY-MM-DD");return wP("div",{"data-testid":"day-view",className:"flex h-full flex-col",children:[S0(yf,{className:"h-[3rem]"}),wP($0,{"data-testid":"day-scroll-area",className:"relative overflow-y-auto h-[calc(100%-3rem)]",children:[S0(cf,{}),wP("div",{"data-testid":"day-time-grid",className:"grid grid-cols-8 divide-x border-x",style:{height:`${rf.length*60}px`},children:[S0(jf,{className:"col-span-2 h-full md:col-span-1"}),wP("div",{"data-testid":"day-events-column",className:"relative col-span-6 h-full md:col-span-7",children:[rf.map((J)=>{let Z=J.hour(),_=J.format("HH"),Q=(p)=>q0({date:P,hour:Z,minute:p,businessHours:f});return S0(e2,{children:[0,15,30,45].map((p)=>{let q=Q(p),N=p===45,K=p.toString().padStart(2,"0"),L=N?"border-border":"border-dashed";return S0(p0,{id:`day-time-cell-${X}-${_}-${K}`,"data-testid":`day-time-cell-${_}-${K}`,type:"time-cell",date:P,hour:Z,minute:p,disabled:!q,className:z("h-[15px] border-b hover:bg-accent",L)},p)})},`${X}-${_}`)}),S0(TP,{day:P}),$&&S0("div",{"data-testid":"day-current-time-indicator",className:"absolute right-0 left-0 z-40 border-t border-red-500",style:{top:`${(W().hour()+W().minute()/60)*60}px`},children:S0("div",{className:"-mt-1 -ml-1 h-2 w-2 rounded-full bg-red-500"})})]})]})]})]})},lf=P1;import{useEffect as g1,useState as h0}from"react";import{jsx as f1}from"react/jsx-runtime";function A0({className:P,type:f,...$}){return f1("input",{type:f,"data-slot":"input",className:z("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),...$})}import{Slot as $1}from"@radix-ui/react-slot";import{cva as Z1}from"class-variance-authority";import{jsx as X1}from"react/jsx-runtime";var gP=Z1("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 h({className:P,variant:f,size:$,asChild:X=!1,...J}){return X1(X?$1:"button",{"data-slot":"button",className:z(gP({variant:f,size:$,className:P})),...J})}import*as hP from"@radix-ui/react-checkbox";import{CheckIcon as _1}from"lucide-react";import{jsx as ff}from"react/jsx-runtime";function I0({className:P,...f}){return ff(hP.Root,{"data-slot":"checkbox",className:z("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),...f,children:ff(hP.Indicator,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:ff(_1,{className:"size-3.5"})})})}import{Calendar as U1}from"lucide-react";import*as mP from"react";import{ChevronDownIcon as J1,ChevronLeftIcon as Q1,ChevronRightIcon as p1}from"lucide-react";import{DayPicker as q1,getDefaultClassNames as df}from"react-day-picker";import{jsx as H0}from"react/jsx-runtime";function tf({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:X="label",buttonVariant:J="ghost",formatters:Z,components:_,...Q}){let p=df();return H0(q1,{showOutsideDays:$,className:z("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),captionLayout:X,formatters:{formatMonthDropdown:(q)=>q.toLocaleString("default",{month:"short"}),...Z},classNames:{root:z("w-fit",p.root),months:z("flex gap-4 flex-col md:flex-row relative",p.months),month:z("flex flex-col w-full gap-4",p.month),nav:z("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",p.nav),button_previous:z(gP({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",p.button_previous),button_next:z(gP({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",p.button_next),month_caption:z("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",p.month_caption),dropdowns:z("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",p.dropdowns),dropdown_root:z("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",p.dropdown_root),dropdown:z("absolute bg-popover inset-0 opacity-0",p.dropdown),caption_label:z("select-none font-medium",X==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",p.caption_label),table:"w-full border-collapse",weekdays:z("flex",p.weekdays),weekday:z("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",p.weekday),week:z("flex w-full mt-2",p.week),week_number_header:z("select-none w-(--cell-size)",p.week_number_header),week_number:z("text-[0.8rem] select-none text-muted-foreground",p.week_number),day:z("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Q.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",p.day),range_start:z("rounded-l-md bg-accent",p.range_start),range_middle:z("rounded-none",p.range_middle),range_end:z("rounded-r-md bg-accent",p.range_end),today:z("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",p.today),outside:z("text-muted-foreground aria-selected:text-muted-foreground",p.outside),disabled:z("text-muted-foreground opacity-50",p.disabled),hidden:z("invisible",p.hidden),...f},components:{Root:({className:q,rootRef:N,...K})=>{return H0("div",{"data-slot":"calendar",ref:N,className:z(q),...K})},Chevron:({className:q,orientation:N,...K})=>{if(N==="left")return H0(Q1,{className:z("size-4",q),...K});if(N==="right")return H0(p1,{className:z("size-4",q),...K});return H0(J1,{className:z("size-4",q),...K})},DayButton:Y1,WeekNumber:({children:q,...N})=>{return H0("td",{...N,children:H0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:q})})},..._},...Q})}function Y1({className:P,day:f,modifiers:$,...X}){let J=df(),Z=mP.useRef(null);return mP.useEffect(()=>{if($.focused)Z.current?.focus()},[$.focused]),H0(h,{ref:Z,variant:"ghost",size:"icon","data-day":f.date.toLocaleDateString(),"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,"data-range-start":$.range_start,"data-range-end":$.range_end,"data-range-middle":$.range_middle,className:z("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",J.day,P),...X})}import*as V0 from"@radix-ui/react-popover";import{jsx as CP}from"react/jsx-runtime";function T0({...P}){return CP(V0.Root,{"data-slot":"popover",...P})}function b0({...P}){return CP(V0.Trigger,{"data-slot":"popover-trigger",...P})}function w0({className:P,align:f="center",sideOffset:$=4,...X}){return CP(V0.Portal,{children:CP(V0.Content,{"data-slot":"popover-content",align:f,sideOffset:$,className:z("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),...X})})}import{useEffect as z1,useRef as G1,useState as K1}from"react";import{PopoverClose as L1}from"@radix-ui/react-popover";import{jsx as YP,jsxs as $f}from"react/jsx-runtime";function BP({date:P,closeOnSelect:f,onChange:$,label:X="Pick a date",className:J,disabled:Z}){let _=G1(null),[Q,p]=K1(P);z1(()=>{p(P)},[P]);let q=(N)=>{if(p(N),f)_.current?.click();$?.(N)};return YP("div",{className:J,children:$f(T0,{children:[YP(b0,{asChild:!0,children:$f(h,{variant:"outline","data-empty":!P,className:z("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),children:[YP(U1,{}),Q?W(Q).format("MMM D, YYYY"):YP("span",{children:X})]})}),$f(w0,{className:"w-auto p-0",align:"start",children:[YP(L1,{ref:_}),YP(tf,{mode:"single",selected:Q,defaultMonth:Q,onSelect:q,captionLayout:"dropdown",disabled:Z})]})]})})}import{useState as Zf,useRef as af,useEffect as B1}from"react";import{Clock as A1}from"lucide-react";import{useMemo as N1}from"react";function nf({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:N1(()=>{let Z=[],[_,Q]=f.split(":").map(Number),[p,q]=$.split(":").map(Number),N=_*60+Q,K=p*60+q;for(let L=N;L<=K;L+=15){let V=Math.floor(L/60),Y=L%60,U=`${V.toString().padStart(2,"0")}:${Y.toString().padStart(2,"0")}`;Z.push(U)}return Z},[f,$]),formatTime:(Z)=>{let[_,Q]=Z.split(":").map(Number),p=_>=12?"PM":"AM",q=_===0?12:_>12?_-12:_;if(P==="24-hour")return`${_.toString().padStart(2,"0")}:${Q.toString().padStart(2,"0")}`;return`${q}:${Q.toString().padStart(2,"0")} ${p}`}}}import{jsx as g0,jsxs as Xf}from"react/jsx-runtime";var V1=(P)=>{P.stopPropagation()};function _f({value:P,onChange:f,minTime:$="00:00",maxTime:X="23:45",timeFormat:J="12-hour",placeholder:Z="Select time...",className:_,disabled:Q=!1,name:p}){let[q,N]=Zf(!1),[K,L]=Zf(""),V=af(null),Y=af(null),[U,A]=Zf(0),{timeOptions:G,formatTime:B}=nf({timeFormat:J,minTime:$,maxTime:X}),O=G.filter((F)=>{return B(F).toLowerCase().includes(K.toLowerCase())}),S=(F)=>{f(F),N(!1),L("")};B1(()=>{if(q){if(Y.current)A(Y.current.offsetWidth);setTimeout(()=>{V.current?.focus()},0)}},[q]);let M=P?B(P):Z;return Xf(T0,{open:q,onOpenChange:N,children:[g0(b0,{asChild:!0,children:Xf(h,{ref:Y,variant:"outline",role:"combobox","aria-controls":"time-picker-listbox","aria-expanded":q,className:z("w-full justify-start",_),disabled:Q,"data-testid":`time-picker-${p}`,children:[g0(A1,{className:"mr-2 h-4 w-4"}),M]})}),Xf(w0,{className:"p-0",align:"start",style:{width:U},children:[g0("div",{className:"p-2 border-b",children:g0(A0,{ref:V,placeholder:"Search time...",value:K,onChange:(F)=>L(F.target.value),className:"h-8"})}),g0($0,{className:"h-[200px]",onWheel:V1,children:g0("div",{className:"p-1",children:O.length===0?g0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):O.map((F)=>{let b=B(F);return g0("button",{type:"button",onClick:()=>S(F),className:z("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",F===P&&"bg-accent text-accent-foreground"),children:b},F)})})})]})]})}import*as sf from"@radix-ui/react-label";import{jsx as W1}from"react/jsx-runtime";function y({className:P,...f}){return W1(sf.Root,{"data-slot":"label",className:z("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),...f})}import{jsx as _0,jsxs as v0}from"react/jsx-runtime";function AP({isOpen:P,onClose:f,onConfirm:$,operationType:X,eventTitle:J}){let{t:Z}=i((p)=>({t:p.t})),_=(p)=>{$(p),f()},Q=X==="edit";return _0(s0,{open:P,onOpenChange:f,children:v0(e0,{className:"max-w-md",children:[v0(PP,{children:[_0(fP,{children:Q?Z("editRecurringEvent"):Z("deleteRecurringEvent")}),v0(FP,{children:['"',J,'"'," ",Q?Z("editRecurringEventQuestion"):Z("deleteRecurringEventQuestion")]})]}),v0("div",{className:"space-y-3",children:[_0(h,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>_("this"),children:v0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:Z("thisEvent")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?Z("onlyChangeThis"):Z("onlyDeleteThis")})]})}),_0(h,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>_("following"),children:v0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:Z("thisAndFollowingEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?Z("changeThisAndFuture"):Z("deleteThisAndFuture")})]})}),_0(h,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>_("all"),children:v0("div",{className:"text-left",children:[_0("div",{className:"font-medium",children:Z("allEvents")}),_0("div",{className:"text-sm text-muted-foreground",children:Q?Z("changeEntireSeries"):Z("deleteEntireSeries")})]})})]}),_0(OP,{children:_0(h,{variant:"outline",onClick:f,children:Z("cancel")})})]})})}import{jsx as DP}from"react/jsx-runtime";function ef({className:P,...f}){return DP("div",{"data-slot":"card",className:z("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),...f})}function P5({className:P,...f}){return DP("div",{"data-slot":"card-header",className:z("@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),...f})}function f5({className:P,...f}){return DP("div",{"data-slot":"card-title",className:z("leading-none font-semibold",P),...f})}function $5({className:P,...f}){return DP("div",{"data-slot":"card-content",className:z("p-4 pt-0",P),...f})}import*as E from"@radix-ui/react-select";import{CheckIcon as O1,ChevronDownIcon as Z5,ChevronUpIcon as F1}from"lucide-react";import{jsx as a,jsxs as Jf}from"react/jsx-runtime";function X5({...P}){return a(E.Root,{"data-slot":"select",...P})}function _5({...P}){return a(E.Value,{"data-slot":"select-value",...P})}function J5({className:P,size:f="default",children:$,...X}){return Jf(E.Trigger,{"data-slot":"select-trigger","data-size":f,className:z("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),...X,children:[$,a(E.Icon,{asChild:!0,children:a(Z5,{className:"size-4 opacity-50"})})]})}function Q5({className:P,children:f,position:$="popper",align:X="center",...J}){return a(E.Portal,{children:Jf(E.Content,{"data-slot":"select-content",className:z("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-[8rem] 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),position:$,align:X,...J,children:[a(R1,{}),a(E.Viewport,{className:z("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),a(M1,{})]})})}function p5({className:P,children:f,...$}){return Jf(E.Item,{"data-slot":"select-item",className:z("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),...$,children:[a("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:a(E.ItemIndicator,{children:a(O1,{className:"size-4"})})}),a(E.ItemText,{children:f})]})}function R1({className:P,...f}){return a(E.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:z("flex cursor-default items-center justify-center py-1",P),...f,children:a(F1,{className:"size-4"})})}function M1({className:P,...f}){return a(E.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:z("flex cursor-default items-center justify-center py-1",P),...f,children:a(Z5,{className:"size-4"})})}import{useState as q5,useEffect as S1,useMemo as I1}from"react";import{RRule as P0}from"rrule";import{jsx as u,jsxs as e}from"react/jsx-runtime";var Qf={DAILY:P0.DAILY,WEEKLY:P0.WEEKLY,MONTHLY:P0.MONTHLY,YEARLY:P0.YEARLY},H1=Object.fromEntries(Object.entries(Qf).map(([P,f])=>[f,P])),Y5=[P0.SU,P0.MO,P0.TU,P0.WE,P0.TH,P0.FR,P0.SA],T1=["sun","mon","tue","wed","thu","fri","sat"],U5=(P)=>Math.max(1,Number.parseInt(P)||1),b1=(P,f)=>{if(!P)return f("customRecurrence");try{let $=new P0(P).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):f("customRecurrence")}catch{return f("customRecurrence")}},z5=({value:P,onChange:f})=>{let{t:$}=i((U)=>({t:U.t})),[X,J]=q5(!!P),[Z,_]=q5(()=>P||null),Q=I1(()=>T1.map((U,A)=>({value:Y5[A],label:$(U)})),[$]);S1(()=>{if(J(!!P),P)_(P)},[P]);let p=(U)=>{if(!Z)return;let A={...Z,...U};_(A),f(X?A:null)},q=(U)=>{if(J(U),!U){f(null);return}if(Z){f(Z);return}let A={freq:P0.DAILY,interval:1};_(A),f(A)},N=(U)=>{let A=Z?.byweekday||[],G=Y5[U],B=A.includes(G)?A.filter((O)=>O!==G):[...A,G];p({byweekday:B.length?B:void 0})},K=(U)=>{let A={count:void 0,until:void 0};if(U==="count")A.count=Z?.count||1;if(U==="until")A.until=Z?.until||W().add(1,"month").endOf("day").toDate();p(A)},L=Z?.until?"until":Z?.count?"count":"never",V=H1[Z?.freq??P0.DAILY]||"DAILY",Y=Array.isArray(Z?.byweekday)?Z.byweekday:Z?.byweekday?[Z.byweekday]:[];return e(ef,{"data-testid":"recurrence-editor",children:[e(P5,{className:"pb-3",children:[e("div",{className:"flex items-center space-x-2",children:[u(I0,{id:"recurring",checked:X,onCheckedChange:q,"data-testid":"toggle-recurrence"}),u(f5,{className:"text-sm",children:$("repeat")})]}),X&&P&&u("p",{className:"text-xs text-muted-foreground",children:b1(P,$)})]}),X&&u($5,{className:"pt-0",children:e("div",{className:"space-y-4",children:[e("div",{className:"grid grid-cols-2 gap-4",children:[e("div",{children:[u(y,{htmlFor:"frequency",className:"text-xs",children:$("repeats")}),e(X5,{value:V,onValueChange:(U)=>p({freq:Qf[U]}),children:[u(J5,{id:"frequency",className:"h-8","data-testid":"frequency-select",children:u(_5,{})}),u(Q5,{children:Object.keys(Qf).map((U)=>u(p5,{value:U,children:$(U.toLowerCase())},U))})]})]}),e("div",{children:[u(y,{htmlFor:"interval",className:"text-xs",children:$("every")}),u(A0,{id:"interval",type:"number",min:"1",value:Z?.interval||1,onChange:(U)=>p({interval:U5(U.target.value)}),className:"h-8"})]})]}),Z?.freq===P0.WEEKLY&&e("div",{children:[u(y,{className:"text-xs",children:$("repeatOn")}),u("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((U,A)=>e("div",{className:"flex items-center space-x-1",children:[u(I0,{id:`day-${A}`,checked:Y.includes(U.value),onCheckedChange:()=>N(A)}),u(y,{htmlFor:`day-${A}`,className:"text-xs cursor-pointer",children:U.label})]},U.label))})]}),e("div",{children:[u(y,{className:"text-xs",children:$("ends")}),e("div",{className:"space-y-2 mt-1",children:[e("div",{className:"flex items-center space-x-2",children:[u(I0,{id:"never",checked:L==="never",onCheckedChange:()=>K("never")}),u(y,{htmlFor:"never",className:"text-xs",children:$("never")})]}),e("div",{className:"flex items-center space-x-2",children:[u(I0,{id:"after",checked:L==="count",onCheckedChange:()=>K("count")}),u(y,{htmlFor:"after",className:"text-xs",children:$("after")}),L==="count"&&u(A0,{type:"number",min:"1",value:Z?.count||1,onChange:(U)=>p({count:U5(U.target.value)}),className:"h-6 w-16 text-xs","data-testid":"count-input"}),u("span",{className:"text-xs",children:$("occurrences")})]}),e("div",{className:"flex items-center space-x-2",children:[u(I0,{id:"on",checked:L==="until",onCheckedChange:()=>K("until")}),u(y,{htmlFor:"on",className:"text-xs",children:$("on")}),L==="until"&&u(BP,{date:Z?.until,onChange:(U)=>p({until:U?W(U).endOf("day").toDate():void 0}),className:"h-6"})]})]})]})]})})]})};import{useState as w1,useCallback as kP}from"react";function G5(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=i((q)=>({updateRecurringEvent:q.updateRecurringEvent,deleteRecurringEvent:q.deleteRecurringEvent})),[X,J]=w1({isOpen:!1,operationType:"edit",event:null}),Z=kP((q,N)=>{J({isOpen:!0,operationType:"edit",event:q,updates:N,onConfirm:(K)=>{f(q,N,{scope:K,eventDate:q.start})}})},[f]),_=kP((q)=>{J({isOpen:!0,operationType:"delete",event:q,onConfirm:(N)=>{$(q,{scope:N,eventDate:q.start})}})},[$]),Q=kP(()=>{J({isOpen:!1,operationType:"edit",event:null})},[]),p=kP((q)=>{if(X.onConfirm)X.onConfirm(q);Q(),P?.()},[X,Q,P]);return{dialogState:X,openEditDialog:Z,openDeleteDialog:_,closeDialog:Q,handleConfirm:p}}import{jsx as k,jsxs as j,Fragment as C1}from"react/jsx-runtime";var h1=["blue","green","purple","red","yellow","pink","indigo","amber","emerald","sky","violet","rose","teal","orange"],K5=h1.map((P)=>({value:`bg-${P}-100 text-${P}-800`,label:P.charAt(0).toUpperCase()+P.slice(1)})),L5=(P,f,$)=>{let[X,J]=f.split(":").map(Number),Z=W(P).hour(X).minute(J);return $?Z.hour(0).minute(0):Z},m1=(P,f,$)=>{let[X,J]=f.split(":").map(Number),Z=W(P).hour(X).minute(J);return $?Z.hour(23).minute(59):Z},EP=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:X,onAdd:J})=>{let{dialogState:Z,openEditDialog:_,openDeleteDialog:Q,closeDialog:p,handleConfirm:q}=G5(f),{findParentRecurringEvent:N,t:K,businessHours:L,timeFormat:V}=i((T)=>({findParentRecurringEvent:T.findParentRecurringEvent,t:T.t,businessHours:T.businessHours,timeFormat:T.timeFormat})),Y=P?.start??W(),U=P?.end??W().add(1,"hour"),A=P?N(P):null,[G,B]=h0(Y.toDate()),[O,S]=h0(U.toDate()),[M,F]=h0(P?.allDay||!1),[b,g]=h0(P?.color||K5[0].value),[D,o]=h0(Y.format("HH:mm")),[v,H]=h0(U.format("HH:mm")),[c,d]=h0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[f0,J0]=h0(()=>{return P?.rrule||A?.rrule||null}),m=(T)=>{if(B(T),T&&W(T).isAfter(W(O)))S(T)},N0=(T)=>{if(S(T),T&&W(T).isBefore(W(G)))B(T)},y0=(T)=>{if(o(T),W(G).isSame(W(O),"day")&&T>v)H(T)},j0=(T)=>{if(H(T),W(G).isSame(W(O),"day")&&T<D)o(T)},F0=(T)=>{let{name:Z0,value:B0}=T.target;d((I)=>({...I,[Z0]:B0}))};g1(()=>{if(M)H("23:59")},[M]);let r0=(T)=>{T.preventDefault();let Z0=L5(G,D,M),B0=m1(O,v,M),I={id:P?.id||W().format("YYYYMMDDHHmmss"),title:c.title,start:Z0,end:B0,resourceId:P?.resourceId,description:c.description,location:c.location,allDay:M,color:b,rrule:f0||void 0};if(P?.id&&ZP(P)){_(P,{title:c.title,start:Z0,end:B0,description:c.description,location:c.location,allDay:M,color:b,rrule:f0||void 0});return}if(P?.id)$?.(I);else J?.(I);f()},l0=()=>{if(P?.id){if(ZP(P)){Q(P);return}X?.(P),f()}},d0=(T)=>{if(!T){J0(null);return}let Z0=L5(G,D,M);J0({...T,dtstart:Z0.toDate()})},k0=L?(T)=>{let Z0=W(T).format("dddd").toLowerCase();return!L.daysOfWeek.includes(Z0)}:void 0,E0=L?`${L.startTime.toString().padStart(2,"0")}:00`:"00:00",o0=L?`${(L.endTime-1).toString().padStart(2,"0")}:45`:"23:59";return j(C1,{children:[k(s0,{open:!0,onOpenChange:f,children:j(e0,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[j(PP,{className:"mb-2 sm:mb-4 shrink-0",children:[k(fP,{className:"text-base sm:text-lg",children:P?.id?K("editEvent"):K("createEvent")}),k(FP,{className:"text-xs sm:text-sm",children:P?.id?K("editEventDetails"):K("addNewEvent")})]}),j("form",{onSubmit:r0,className:"flex flex-col flex-1 min-h-0",children:[k($0,{className:"flex-1 min-h-0",children:j("div",{className:"grid gap-3 sm:gap-4 p-1",children:[j("div",{className:"grid gap-2",children:[k(y,{htmlFor:"title",className:"text-xs sm:text-sm",children:K("title")}),k(A0,{id:"title",name:"title",value:c.title,onChange:F0,placeholder:K("eventTitlePlaceholder"),required:!0,className:"h-8 text-sm sm:h-9"})]}),j("div",{className:"grid gap-1 sm:gap-2",children:[k(y,{htmlFor:"description",className:"text-xs sm:text-sm",children:K("description")}),k(A0,{id:"description",name:"description",value:c.description,onChange:F0,placeholder:K("eventDescriptionPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),j("div",{className:"flex items-center space-x-2",children:[k(I0,{id:"allDay",checked:M,onCheckedChange:(T)=>F(T===!0)}),k(y,{htmlFor:"allDay",className:"text-xs sm:text-sm",children:K("allDay")})]}),j("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[j("div",{children:[k(y,{className:"text-xs sm:text-sm",children:K("startDate")}),k(BP,{date:G,onChange:m,className:"mt-1",closeOnSelect:!0,disabled:k0})]}),j("div",{children:[k(y,{className:"text-xs sm:text-sm",children:K("endDate")}),k(BP,{date:O,onChange:N0,className:"mt-1",closeOnSelect:!0,disabled:k0})]})]}),!M&&j("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[j("div",{children:[k(y,{className:"text-xs sm:text-sm",children:K("startTime")}),k(_f,{value:D,onChange:y0,minTime:E0,maxTime:o0,timeFormat:V,className:"mt-1 h-8 text-sm sm:h-9",name:"start-time"})]}),j("div",{children:[k(y,{className:"text-xs sm:text-sm",children:K("endTime")}),k(_f,{value:v,onChange:j0,minTime:E0,maxTime:o0,timeFormat:V,className:"mt-1 h-8 text-sm sm:h-9",name:"end-time"})]})]}),j("div",{className:"grid gap-1 sm:gap-2",children:[k(y,{className:"text-xs sm:text-sm",children:K("color")}),k("div",{className:"flex flex-wrap gap-2",children:K5.map((T)=>k(h,{variant:"ghost",type:"button",className:z(`${T.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,b===T.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>g(T.value),"aria-label":T.label},T.value))})]}),j("div",{className:"grid gap-1 sm:gap-2",children:[k(y,{htmlFor:"location",className:"text-xs sm:text-sm",children:K("location")}),k(A0,{id:"location",name:"location",value:c.location,onChange:F0,placeholder:K("eventLocationPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),k(z5,{value:f0,onChange:d0})]})}),j(OP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&k(h,{type:"button",variant:"destructive",onClick:l0,className:"w-full sm:mr-auto sm:w-auto",size:"sm",children:K("delete")}),j("div",{className:"flex w-full gap-2 sm:w-auto",children:[k(h,{type:"button",variant:"outline",onClick:f,className:"flex-1 sm:flex-none",size:"sm",children:K("cancel")}),k(h,{type:"submit",className:"flex-1 sm:flex-none",size:"sm",children:P?.id?K("update"):K("create")})]})]})]})]})}),k(AP,{isOpen:Z.isOpen,onClose:p,onConfirm:q,operationType:Z.operationType,eventTitle:Z.event?.title||""})]})};import{RRule as D1}from"rrule";var pf=`\r
|
|
2
|
-
`,
|
|
3
|
-
`,"\\n").replaceAll("\r","")},
|
|
4
|
-
`).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},o1=(P)=>{let f=W().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",X=P.rrule?E1(P.rrule):"",J=P.exdates?.length?P.exdates.map((Q)=>oP(W(Q),P.allDay)).join(","):null,Z=P.recurrenceId?oP(W(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${N5(P)}`,`DTSTART${$}:${oP(P.start,P.allDay)}`,`DTEND${$}:${oP(P.end,P.allDay)}`,`SUMMARY:${xP(P.title)}`,P.description&&`DESCRIPTION:${xP(P.description)}`,P.location&&`LOCATION:${xP(P.location)}`,X,J&&`EXDATE:${J}`,Z&&`RECURRENCE-ID:${Z}`,`DTSTAMP:${f}`,`CREATED:${f}`,`LAST-MODIFIED:${f}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(pf)},x1=(P)=>{let f=new Set;return P.filter(($)=>{let X=N5($),J=$.rrule&&!$.recurrenceId,Z=$.recurrenceId&&!$.rrule;if(J)return f.add(X),!0;if(Z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(X)})},u1=(P,f="ilamy Calendar")=>{let $=xP(f),X=x1(P).map(o1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,k1,...X,"END:VCALENDAR"].join(pf)},B5=(P,f="calendar.ics",$="ilamy Calendar")=>{let X=new Blob([u1(P,$)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(X),Z=f.endsWith(".ics")?f:`${f}.ics`,_=document.createElement("a");_.href=J,_.download=Z,document.body.append(_),_.click(),_.remove(),URL.revokeObjectURL(J)};import{Calendar as e1,Download as P4,Menu as f4,Plus as $4}from"lucide-react";import{useState as Z4}from"react";import{AnimatePresence as i1,motion as v1}from"motion/react";import{ChevronDown as c1}from"lucide-react";import{useMemo as y1,useState as j1}from"react";import{jsx as r,jsxs as iP,Fragment as uP}from"react/jsx-runtime";var r1=["january","february","march","april","may","june","july","august","september","october","november","december"],l1={initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10}},d1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:X,firstDayOfWeek:J}=i((G)=>({currentDate:G.currentDate,view:G.view,setCurrentDate:G.setCurrentDate,t:G.t,firstDayOfWeek:G.firstDayOfWeek})),[Z,_]=j1(null),Q=y1(()=>r1.map((G)=>X(G)),[X]),p=P.year(),q=Array.from({length:11},(G,B)=>p-5+B),N=t(P,J),K=(G)=>{$(G),_(null)},L=()=>r(uP,{children:Q.map((G,B)=>r(h,{variant:"ghost",className:z("justify-start font-normal",P.month()===B&&"bg-primary/10"),onClick:()=>K(P.month(B)),children:G},G))}),V=()=>r(uP,{children:q.map((G)=>r(h,{variant:"ghost",className:z("justify-start font-normal",P.year()===G&&"bg-primary/10"),onClick:()=>K(P.year(G)),children:G},G))}),Y=()=>r(uP,{children:Array.from({length:7},(G,B)=>{let O=P.subtract(3,"week").add(B,"week"),S=t(O,J),M=S[0],F=S[6],b=O.isSame(P,"week"),g=M.month()!==F.month();return r(h,{variant:"ghost",className:z("justify-start font-normal",b&&"bg-primary/10"),onClick:()=>K(M),children:iP("div",{className:"flex w-full items-center justify-between",children:[r("span",{children:`${M.format("MMM D")} - ${F.format("D")}`}),g&&r("span",{className:"ml-0.5 text-xs opacity-70",children:`${M.format("MMM")}-${F.format("MMM")}`})]})},M.format("YYYY-MM-DD"))})}),U=()=>{let G=P.startOf("month"),B=P.daysInMonth();return r(uP,{children:Array.from({length:B},(O,S)=>{let M=G.date(S+1),F=M.isSame(P,"day"),b=M.isSame(W(),"day");return r(h,{variant:"ghost",className:z("justify-start font-normal",F&&"bg-primary/10"),onClick:()=>K(M),children:iP("div",{className:"flex w-full items-center justify-between",children:[r("span",{children:M.format("dddd, MMM D")}),b&&r("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:X("today")})]})},M.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:L},{id:"year",hidden:!1,title:P.format("YYYY"),render:V},{id:"week",hidden:f!=="week",title:`${N[0].format("MMM D")} - ${N[6].format("MMM D")}`,render:Y},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:U}].filter((G)=>!G.hidden).map((G)=>iP(T0,{open:Z===G.id,onOpenChange:(B)=>_(B?G.id:null),children:[r(b0,{asChild:!0,children:iP(h,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",children:[r(i1,{mode:"wait",children:r(v1.span,{initial:"initial",animate:"animate",exit:"exit",variants:l1,transition:{duration:0.25,ease:"easeInOut"},"data-testid":"calendar-month-display",children:G.title},`${G.id}-${P.format("YYYY-MM-DD")}`)}),r(c1,{className:"h-4 w-4"})]})}),r(w0,{className:"w-40 p-0",children:r("div",{className:"flex max-h-60 flex-col overflow-auto",children:G.render()})})]},G.id))},A5=d1;import{ChevronLeft as t1,ChevronRight as n1}from"lucide-react";import{jsx as UP,jsxs as s1}from"react/jsx-runtime";var a1=({currentView:P,onChange:f,variant:$="default",size:X="sm",className:J,onToday:Z,onNext:_,onPrevious:Q})=>{let{t:p}=i((L)=>({t:L.t})),q=$==="grid",N=(L)=>{return z(q?"w-full":"",P===L&&"bg-primary/80")},K=(L)=>{return P===L?"default":"outline"};return s1("div",{className:z(q?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[UP(h,{onClick:Q,variant:"outline",size:X,children:UP(t1,{className:"h-4 w-4"})}),UP(h,{onClick:_,variant:"outline",size:X,children:UP(n1,{className:"h-4 w-4"})}),["day","week","month","year"].map((L)=>{return UP(h,{onClick:()=>f(L),variant:K(L),size:X,className:N(L),children:p(L)},L)}),UP(h,{onClick:Z,variant:"outline",size:X,children:p("today")})]})},qf=a1;import{jsx as l,jsxs as W0}from"react/jsx-runtime";var X4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:X,prevPeriod:J,today:Z,openEventForm:_,headerComponent:Q,headerClassName:p,rawEvents:q,t:N}=i((G)=>({view:G.view,setView:G.setView,nextPeriod:G.nextPeriod,prevPeriod:G.prevPeriod,today:G.today,openEventForm:G.openEventForm,headerComponent:G.headerComponent,headerClassName:G.headerClassName,rawEvents:G.rawEvents,t:G.t})),[K,L]=Z4(!1),V=()=>L(!1),Y=()=>{let G=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;B5(q,G,"ilamy Calendar"),V()},U=()=>W0(h,{onClick:()=>_(),variant:"default",size:"sm",className:"flex items-center gap-1",children:[l($4,{className:"h-4 w-4"}),l("span",{className:"hidden @4xl:inline",children:N("new")})]}),A=({fullWidth:G=!1})=>W0(h,{onClick:Y,variant:"outline",size:"sm",className:z("flex items-center gap-1",G&&"w-full gap-2"),children:[l(P4,{className:"h-4 w-4"}),G?`${N("export")} Calendar (.ics)`:l("span",{className:"hidden @4xl/base-header:inline",children:N("export")})]});if(Q)return Q;return l("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:W0("div",{className:z("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2 border-b",P,p),children:[W0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[l(e1,{className:"h-5 w-5"}),l(A5,{})]}),W0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[W0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[l(qf,{currentView:f,onChange:$,onToday:Z,onNext:X,onPrevious:J,variant:"default",className:"justify-end"}),l(U,{}),l(A,{})]}),W0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[l(U,{}),W0(T0,{open:K,onOpenChange:L,children:[l(b0,{asChild:!0,children:l(h,{variant:"outline",size:"sm",children:l(f4,{className:"h-4 w-4"})})}),l(w0,{align:"end",className:"w-[240px] p-2",children:W0("div",{className:"space-y-2",children:[l(qf,{currentView:f,onChange:(G)=>{$(G),V()},onToday:()=>{Z(),V()},onNext:()=>{X(),V()},onPrevious:()=>{J(),V()},variant:"grid"}),l("div",{className:"pt-2 border-t",children:l(A,{fullWidth:!0})})]})})]})]})]})]})})},VP=X4;import{AnimatePresence as _4,motion as J4}from"motion/react";import{jsx as O0,jsxs as vP}from"react/jsx-runtime";var Q4=["S","M","T","W","T","F","S"],p4=["bg-primary","bg-blue-500","bg-green-500"],q4=42,Y4=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},U4=()=>{let{currentDate:P,selectDate:f,events:$,setView:X,getEventsForDateRange:J,t:Z}=C(),_=P.year(),Q=()=>{return Array.from({length:12},(Y,U)=>{let A=W().year(_).month(U).startOf("month"),G=$.filter((B)=>B.start.year()===_&&B.start.month()===U);return{date:A,name:A.format("MMMM"),eventCount:G.length,monthKey:A.format("MM")}})},p=(Y)=>{let U=Y.startOf("month").startOf("week");return Array.from({length:q4},(A,G)=>{let B=U.add(G,"day"),O=B.startOf("day"),S=B.endOf("day"),M=J(O,S);return{date:B,dayKey:B.format("YYYY-MM-DD"),isInCurrentMonth:B.month()===Y.month(),isToday:B.isSame(W(),"day"),isSelected:B.isSame(P,"day"),eventCount:M.length}})},q=(Y,U,A)=>{A?.stopPropagation(),f(Y),X(U)},N=(Y)=>{let U=Y===1?Z("event"):Z("events");return`${Y} ${U}`},K=(Y)=>{let A=Y.isInCurrentMonth?"":"text-muted-foreground opacity-50",G=Y.isToday?"bg-primary text-primary-foreground rounded-full":"",B=Y.isSelected&&!Y.isToday?"bg-muted rounded-full font-bold":"",O=Y.eventCount>0&&!Y.isToday&&!Y.isSelected?"font-medium":"";return z("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",A,G,B,O)},L=(Y,U)=>{return z("h-[3px] w-[3px] rounded-full",U?"bg-primary-foreground":Y)},V=Q();return O0($0,{"data-testid":"year-view",className:"h-full",children:O0("div",{"data-testid":"year-grid",className:"grid auto-rows-fr grid-cols-1 gap-4 p-4 sm:grid-cols-2 lg:grid-cols-3",children:V.map((Y,U)=>{let A=p(Y.date),G=U*0.05;return vP("div",{"data-testid":`year-month-${Y.monthKey}`,className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md",children:[O0(_4,{mode:"wait",children:vP(J4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:G},className:"mb-2 flex items-center justify-between",children:[O0("button",{type:"button",onClick:()=>q(Y.date,"month"),"data-testid":`year-month-title-${Y.monthKey}`,className:"text-lg font-medium hover:underline cursor-pointer",children:Y.name}),Y.eventCount>0&&O0("span",{"data-testid":`year-month-event-count-${Y.monthKey}`,className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs",children:N(Y.eventCount)})]},`month-${U}`)}),vP("div",{"data-testid":`year-mini-calendar-${Y.monthKey}`,className:"grid grid-cols-7 gap-[1px] text-[0.6rem]",children:[Q4.map((B,O)=>O0("div",{className:"text-muted-foreground h-3 text-center",children:B},`header-${O}`)),A.map((B)=>{let O=`year-day-${Y.date.format("YYYY-MM")}-${B.dayKey}`,S=B.eventCount>0,M=Math.min(B.eventCount,3),F=p4.slice(0,M);return vP("button",{type:"button","data-testid":O,onClick:(b)=>q(B.date,"day",b),title:Y4(B.eventCount),className:K(B),children:[O0("span",{className:"text-center leading-none",children:B.date.date()}),S&&O0("div",{className:z("absolute bottom-0 flex w-full justify-center space-x-[1px]",B.isToday&&"bottom-[1px]"),children:F.map((b)=>O0("span",{className:L(b,B.isToday)},b))})]},B.dayKey)})]})]},Y.monthKey)})})})},V5=U4;import{AnimatePresence as S4,motion as I4}from"motion/react";import{DndContext as N4,MouseSensor as B4,pointerWithin as A4,TouchSensor as V4,useSensor as R5,useSensors as W4}from"@dnd-kit/core";import{useRef as M5,useState as O4}from"react";var W5=(P,f)=>{let{active:$,over:X}=P;if(!$||!X||!f)return null;let J=X.data.current?.type==="time-cell",{resourceId:Z,allDay:_}=X.data.current||{},Q;if(J){let{date:K,hour:L=0,minute:V=0}=X.data.current;Q=W(K).hour(L).minute(V)}else{let{date:K}=X.data.current;Q=W(K)}let p=f.end.diff(f.start,"second"),q=Q.add(p,"second");if(q.isSame(q.startOf("day")))q=q.subtract(1,"day").endOf("day");let N={start:Q,end:q,resourceId:Z,allDay:J?!1:_??f.allDay};return{activeEvent:f,updates:N}};import{DragOverlay as z4}from"@dnd-kit/core";import{useImperativeHandle as G4,useState as K4}from"react";import{snapCenterToCursor as L4}from"@dnd-kit/modifiers";import{jsx as O5}from"react/jsx-runtime";var F5=({ref:P})=>{let[f,$]=K4(null);return G4(P,()=>({setActiveEvent:$})),O5(z4,{modifiers:[L4],children:f&&O5("div",{className:z("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",f.backgroundColor||"bg-blue-500",f.color||"text-white"),children:f?.title})})};import{jsx as S5,jsxs as I5,Fragment as F4}from"react/jsx-runtime";function cP({children:P}){let f=M5(null),$=M5(null),{updateEvent:X,updateRecurringEvent:J,disableDragAndDrop:Z}=i((G)=>({updateEvent:G.updateEvent,updateRecurringEvent:G.updateRecurringEvent,disableDragAndDrop:G.disableDragAndDrop})),[_,Q]=O4({isOpen:!1,event:null,updates:null}),p=R5(B4,{activationConstraint:{distance:2}}),q=R5(V4,{activationConstraint:{delay:100,tolerance:5}}),N=W4(p,q),K=(G,B)=>{if(!G||!G.id)return;if(!B||Object.keys(B).length===0)return;if(ZP(G))Q({isOpen:!0,event:G,updates:B});else X(G.id,B)},L=(G)=>{if(!_.event||!_.updates){Q({isOpen:!1,event:null,updates:null});return}try{J(_.event,_.updates,{scope:G,eventDate:_.event.start})}catch{}finally{Q({isOpen:!1,event:null,updates:null})}},V=()=>{Q({isOpen:!1,event:null,updates:null})},Y=(G)=>{let{active:B}=G;if(B.data.current?.type==="calendar-event")$.current?.setActiveEvent(B.data.current.event),f.current=B.data.current.event},U=(G)=>{let B=W5(G,f.current);if(B){let{activeEvent:O,updates:S}=B;K(O,S)}f.current=null,$.current?.setActiveEvent(null)},A=(G)=>{f.current=null};if(Z)return P;return I5(F4,{children:[I5(N4,{sensors:N,onDragStart:Y,onDragEnd:U,onDragCancel:A,collisionDetection:A4,children:[P,S5(F5,{ref:$})]}),S5(AP,{isOpen:_.isOpen,onClose:V,onConfirm:L,operationType:"edit",eventTitle:_.event?.title||""})]})}import{useCallback as Yf,useMemo as R4}from"react";import{jsx as M4}from"react/jsx-runtime";var H5=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:X="month",initialDate:J,renderEvent:Z,onEventClick:_,onCellClick:Q,onViewChange:p,onEventAdd:q,onEventUpdate:N,onEventDelete:K,onDateChange:L,locale:V,timezone:Y,disableCellClick:U,disableEventClick:A,disableDragAndDrop:G,dayMaxEvents:B,stickyViewHeader:O=!0,viewHeaderClassName:S="",headerComponent:M,headerClassName:F,businessHours:b,renderEventForm:g,translations:D,translator:o,timeFormat:v="12-hour"})=>{let H=MP({events:f,firstDayOfWeek:$,initialView:X,initialDate:J,businessHours:b,onEventAdd:q,onEventUpdate:N,onEventDelete:K,onDateChange:L,onViewChange:p,locale:V,timezone:Y,translations:D,translator:o}),c=Yf((m)=>{H.setSelectedEvent(m),H.setIsEventFormOpen(!0)},[H]),d=Yf((m)=>{if(A)return;if(_)_(m);else c(m)},[A,_,c]),f0=Yf((m)=>{if(U)return;if(Q)Q(m);else H.openEventForm(m)},[Q,U,H]),J0=R4(()=>({currentDate:H.currentDate,view:H.view,events:H.events,rawEvents:H.rawEvents,currentLocale:H.currentLocale,isEventFormOpen:H.isEventFormOpen,selectedEvent:H.selectedEvent,selectedDate:H.selectedDate,firstDayOfWeek:H.firstDayOfWeek,setCurrentDate:H.setCurrentDate,selectDate:H.selectDate,setView:H.setView,nextPeriod:H.nextPeriod,prevPeriod:H.prevPeriod,today:H.today,addEvent:H.addEvent,updateEvent:H.updateEvent,updateRecurringEvent:H.updateRecurringEvent,deleteEvent:H.deleteEvent,deleteRecurringEvent:H.deleteRecurringEvent,openEventForm:H.openEventForm,closeEventForm:H.closeEventForm,getEventsForDateRange:H.getEventsForDateRange,findParentRecurringEvent:H.findParentRecurringEvent,renderEvent:Z,onEventClick:d,onCellClick:f0,locale:V,timezone:Y,disableCellClick:U,disableEventClick:A,disableDragAndDrop:G,dayMaxEvents:B,stickyViewHeader:O,viewHeaderClassName:S,headerComponent:M,headerClassName:F,businessHours:b,renderEventForm:g,t:H.t,timeFormat:v}),[H,Z,d,f0,V,Y,U,A,G,B,O,S,M,F,b,g,v]);return M4(n0.Provider,{value:J0,children:P})};import{jsx as z0,jsxs as b4}from"react/jsx-runtime";var H4=()=>{let{view:P,isEventFormOpen:f,closeEventForm:$,selectedEvent:X,addEvent:J,updateEvent:Z,deleteEvent:_,dayMaxEvents:Q,renderEventForm:p}=C(),q={month:z0(mf,{dayMaxEvents:Q},"month"),week:z0(vf,{},"week"),day:z0(lf,{},"day"),year:z0(V5,{},"year")},L={open:f,onClose:$,selectedEvent:X,onAdd:J,onUpdate:(V)=>{Z(V.id,V)},onDelete:(V)=>{_(V.id)}};return b4("div",{className:"flex flex-col w-full h-full",children:[z0(VP,{className:"p-1"}),z0(cP,{children:z0(S4,{mode:"wait",children:z0(I4.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},transition:{duration:0.1,ease:"easeInOut"},className:"w-full h-[calc(100%-3.5rem)]",children:q[P]},P)})}),p?p(L):f&&z0(EP,{...L})]})},T4=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:X,renderEvent:J,renderEventForm:Z,onEventClick:_,onCellClick:Q,onViewChange:p,onEventAdd:q,onEventUpdate:N,onEventDelete:K,onDateChange:L,locale:V,translations:Y,translator:U,timezone:A,disableCellClick:G,disableEventClick:B,disableDragAndDrop:O,dayMaxEvents:S=XP,stickyViewHeader:M=!0,viewHeaderClassName:F="",headerComponent:b,headerClassName:g,businessHours:D,timeFormat:o="12-hour"})=>{return z0(H5,{events:WP(P),firstDayOfWeek:RP[f],initialView:$,initialDate:a0(X),renderEvent:J,renderEventForm:Z,onEventClick:_,onCellClick:Q,onViewChange:p,onEventAdd:q,onEventUpdate:N,onEventDelete:K,onDateChange:L,locale:V,translations:Y,translator:U,timezone:A,disableCellClick:G,disableEventClick:B,disableDragAndDrop:O,dayMaxEvents:S,stickyViewHeader:M,viewHeaderClassName:F,headerComponent:b,headerClassName:g,businessHours:D,timeFormat:o,children:z0(H4,{})})};import{useMemo as m4}from"react";var T5=({days:P,gridType:f="day",resourceId:$})=>{let{getEventsForResource:X,getEventsForDateRange:J,dayMaxEvents:Z}=Q0(),_=P[0].startOf("day"),Q=P.at(-1).endOf("day"),p=X($),q=J(_,Q);return IP({days:P,events:p.filter((N)=>q.some((K)=>K.id===N.id)),dayMaxEvents:Z,dayNumberHeight:0,gridType:f})};import{jsx as Uf}from"react/jsx-runtime";var b5=({days:P,gridType:f="day",resourceId:$})=>{let X=P[0].startOf("day"),J=T5({days:P,gridType:f,resourceId:$});return Uf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:J.map((Z)=>{let _=`${$}-event-${Z.id}-${Z.position}-${X.toISOString()}`;return Uf("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${Z.left}% + var(--spacing) * 0.25)`,width:`calc(${Z.width}% - var(--spacing) * 1)`,top:`${Z.top}px`,height:`${U0}px`},"data-testid":`week-event-layer-event-${Z.id}`,children:Uf(R0,{elementId:_,event:Z,className:"h-full w-full shadow"})},`${_}-wrapper`)})})};import w4,{useMemo as g4}from"react";import{jsx as zf,jsxs as Gf,Fragment as h4}from"react/jsx-runtime";var w5=({index:P,day:f,className:$="",resourceId:X,gridType:J="day"})=>{let Z=w4.useRef(null),{dayMaxEvents:_=0,getEventsForDateRange:Q,currentDate:p,firstDayOfWeek:q,t:N,getEventsForResource:K,businessHours:L}=i((F)=>({dayMaxEvents:F.dayMaxEvents,getEventsForDateRange:F.getEventsForDateRange,currentDate:F.currentDate,firstDayOfWeek:F.firstDayOfWeek,t:F.t,getEventsForResource:F.getEventsForResource,businessHours:F.businessHours})),V=g4(()=>{let F=X?K(X):[],b=Q(f.startOf(J),f.endOf(J));if(F.length)return b.filter((g)=>F.some((D)=>String(D.id)===String(g.id)));return b},[f,X,Q,K,J]),U=p.startOf("month").clone();while(U.day()!==q)U=U.subtract(1,"day");let A=(F,b)=>{Z.current?.setSelectedDayEvents({day:F,events:b}),Z.current?.open()},G=f.month()===p.month(),B=P===6,O=V.length-_,S=O>0,M=q0({date:f,hour:J==="hour"?f.hour():void 0,businessHours:L});return Gf(h4,{children:[zf(p0,{id:`day-cell-${f.toISOString()}${X?`-resource-${X}`:""}`,type:"day-cell","data-testid":`day-cell-${f.toISOString()}`,date:f,resourceId:X,disabled:!M,className:z("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]",!G&&"bg-secondary text-muted-foreground",B&&"border-r-0",$),children:Gf("div",{className:"flex flex-col gap-1",children:[V.slice(0,_).map((F,b)=>zf("div",{className:"h-[20px] w-full","data-testid":F?.title},`empty-${b}`)),S&&Gf("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(F)=>{F.stopPropagation(),A(f,V)},onKeyDown:(F)=>{if(F.key==="Enter"||F.key===" ")F.preventDefault(),F.stopPropagation(),A(f,V)},tabIndex:0,role:"button",children:["+",O," ",N("more")]})]})}),zf(JP,{ref:Z})]})};import{jsx as m0,jsxs as Kf}from"react/jsx-runtime";var zP=({days:P,gridType:f="day",children:$})=>{let{currentDate:X,getVisibleResources:J,dayMaxEvents:Z,renderResource:_}=Q0(),p=J().map((q)=>({id:q.id,title:q.title,resource:q,cells:P.map((N)=>({label:N.format("D"),value:N,id:N.toISOString()}))}));return Kf($0,{className:"h-full","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[$,m0("div",{className:"flex flex-1 h-[calc(100%-3rem)] w-fit",children:m0("div",{className:"relative w-full flex flex-col",children:p.map((q)=>Kf("div",{className:"flex flex-1 relative min-h-[60px] ",children:[m0("div",{className:z("w-40 border-b border-r p-2 flex flex-shrink-0 sticky left-0 z-20",q.resource.color||"",q.resource.backgroundColor||"bg-background"),style:{color:q.resource.color,backgroundColor:q.resource.backgroundColor},children:_?_(q.resource):m0("div",{className:"break-words text-sm",children:q.title})}),Kf("div",{className:"relative flex-1 flex",children:[q.cells.map((N)=>m0(w5,{index:N.value.day(),day:N.value,resourceId:q.id,dayMaxEvents:Z,gridType:f,className:"border-r border-b w-20"},N.id)),m0("div",{className:"absolute inset-0 z-10 pointer-events-none",children:m0(b5,{days:P,resourceId:q.id,gridType:f})})]})]},q.id))},X.format("YYYY-MM"))}),m0(tP,{orientation:"horizontal"})]})};import{AnimatePresence as C4,motion as D4}from"motion/react";import{jsx as c0,jsxs as g5}from"react/jsx-runtime";var h5=()=>{let{currentDate:P,t:f,stickyViewHeader:$,viewHeaderClassName:X}=Q0(),J=m4(()=>{let Z=P.daysInMonth();return Array.from({length:Z},(_,Q)=>P.startOf("month").add(Q,"day"))},[P]);return c0("div",{className:"flex flex-col h-full border",children:c0(zP,{days:J,children:g5("div",{className:z("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",X),children:[c0("div",{className:"w-40 border-b border-r flex-shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:c0("div",{className:"text-sm",children:f("resources")})}),J.map((Z,_)=>{let Q=`resource-month-header-${Z.toISOString()}`;return c0(C4,{mode:"wait",children:g5(D4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:_*0.05},className:"w-20 border-b border-r flex-shrink-0 flex items-center justify-center flex-col",children:[c0("div",{className:"text-xs font-medium",children:Z.format("D")}),c0("div",{className:"text-xs text-muted-foreground",children:Z.format("ddd")})]},`${Q}-motion`)},`${Q}-presence`)})]})})})};import{jsx as k4}from"react/jsx-runtime";var m5=()=>{return k4(h5,{})};import{useMemo as C5}from"react";import{AnimatePresence as D5,motion as k5}from"motion/react";import{jsx as Y0,jsxs as Lf}from"react/jsx-runtime";var E5=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,stickyViewHeader:X,viewHeaderClassName:J,currentLocale:Z,timeFormat:_}=Q0(),Q=C5(()=>t(P,f),[P,f]),p=C5(()=>{return Q.flatMap((q)=>Array.from({length:24},(N,K)=>q.hour(K).minute(0)))},[Q]);return Y0("div",{className:"flex h-full flex-col border",children:Y0(zP,{days:p,gridType:"hour",children:Lf("div",{className:z("flex h-24 w-fit",X&&"sticky top-0 z-21 bg-background",J),children:[Y0("div",{className:"w-40 border-b border-r flex-shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:Y0("div",{className:"text-sm",children:$("resources")})}),Lf("div",{className:"flex-1 border-b border-r flex flex-col",children:[Y0("div",{className:"flex h-12 border-b",children:Q.map((q,N)=>{let K=q.isSame(W(),"day"),L=`resource-week-header-${q.toISOString()}-day`;return Y0(D5,{mode:"wait",children:Y0(k5.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:N*0.05},className:z("flex-shrink-0 border-r flex items-center text-center font-medium w-[calc(24*var(--spacing)*20)]",K&&"bg-blue-50 text-blue-600"),children:Lf("div",{className:"sticky left-1/2",children:[Y0("div",{className:"text-sm",children:q.format("ddd")}),Y0("div",{className:"text-xs text-muted-foreground",children:q.format("M/D")})]})},`${L}-motion`)},`${L}-presence`)})}),Y0("div",{className:"flex h-12 border-b",children:p.map((q,N)=>{let K=q.isSame(W(),"hour"),L=`resource-week-header-${q.toISOString()}-hour`;return Y0(D5,{mode:"wait",children:Y0(k5.div,{"data-testid":`resource-week-time-label-${q.format("HH")}`,initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:N*0.05},className:z("w-20 border-r flex items-center justify-center text-xs flex-shrink-0",K&&"bg-blue-50 text-blue-600 font-medium"),children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:_==="12-hour"}).format(q.toDate())},`${L}-motion`)},`${L}-presence`)})})]})]})})})};import{jsx as E4}from"react/jsx-runtime";var o5=()=>{return E4(E5,{})};import{useMemo as o4}from"react";import{AnimatePresence as x4,motion as u4}from"motion/react";import{jsx as C0,jsxs as i4}from"react/jsx-runtime";var x5=()=>{let{currentDate:P,t:f,stickyViewHeader:$,viewHeaderClassName:X,currentLocale:J,timeFormat:Z}=Q0(),_=o4(()=>{return Array.from({length:24},(Q,p)=>P.hour(p).minute(0))},[P]);return C0("div",{className:"flex h-full flex-col border",children:C0(zP,{days:_,gridType:"hour",children:i4("div",{className:z("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",X),children:[C0("div",{className:"w-40 border-b border-r flex-shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:C0("div",{className:"text-sm",children:f("resources")})}),C0("div",{className:"flex-1 border-b border-r flex flex-col",children:C0("div",{className:"flex h-12 border-b",children:_.map((Q,p)=>{let q=Q.isSame(W(),"hour"),N=`resource-day-header-${Q.toISOString()}`;return C0(x4,{mode:"wait",children:C0(u4.div,{"data-testid":`resource-day-time-label-${Q.format("HH")}`,initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:p*0.05},className:z("w-20 border-r flex items-center justify-center text-xs flex-shrink-0",q&&"bg-blue-50 text-blue-600 font-medium"),children:Intl.DateTimeFormat(J,{hour:"numeric",hour12:Z==="12-hour"}).format(Q.toDate())},`${N}-motion`)},`${N}-presence`)})})})]})})})};import{jsx as v4}from"react/jsx-runtime";var u5=()=>{return v4(x5,{})};import{AnimatePresence as c4,motion as y4}from"motion/react";import{jsx as D0,jsxs as j4}from"react/jsx-runtime";var i5=()=>{let{view:P,isEventFormOpen:f,closeEventForm:$,selectedEvent:X,addEvent:J,updateEvent:Z,deleteEvent:_,renderEventForm:Q}=Q0(),p={month:D0(m5,{},"month"),week:D0(o5,{},"week"),day:D0(u5,{},"day")},K={open:f,onClose:$,selectedEvent:X,onAdd:J,onUpdate:(L)=>{Z(L.id,L)},onDelete:(L)=>{_(L.id)}};return j4("div",{className:"flex flex-col w-full h-full",children:[D0(VP,{className:"p-1"}),D0(cP,{children:D0(c4,{mode:"wait",children:D0(y4.div,{initial:{opacity:0,x:20},animate:{opacity:1,x:0},exit:{opacity:0,x:-20},transition:{duration:0.1,ease:"easeInOut"},className:"w-full h-[calc(100%-3.5rem)]",children:p[P]},P)})}),Q?Q(K):f&&D0(EP,{...K})]})};import{jsx as v5}from"react/jsx-runtime";var r4=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:X="month",initialDate:J,renderEvent:Z,onEventClick:_,onCellClick:Q,onViewChange:p,onEventAdd:q,onEventUpdate:N,onEventDelete:K,onDateChange:L,locale:V,timezone:Y,disableCellClick:U,disableEventClick:A,disableDragAndDrop:G=!1,dayMaxEvents:B=XP,stickyViewHeader:O,viewHeaderClassName:S,headerComponent:M,headerClassName:F,translations:b,translator:g,renderResource:D,renderEventForm:o,businessHours:v,timeFormat:H="12-hour"})=>{return v5(If,{events:WP(P),resources:f,firstDayOfWeek:RP[$],initialView:X,initialDate:a0(J),renderEvent:Z,renderResource:D,onEventClick:_,onCellClick:Q,onViewChange:p,onEventAdd:q,onEventUpdate:N,onEventDelete:K,onDateChange:L,locale:V,timezone:Y,disableCellClick:U,disableEventClick:A,disableDragAndDrop:G,dayMaxEvents:B,stickyViewHeader:O,viewHeaderClassName:S,headerComponent:M,headerClassName:F,translations:b,translator:g,renderEventForm:o,businessHours:v,timeFormat:H,children:v5(i5,{})})};import{RRule as rQ}from"rrule";export{p2 as useIlamyResourceCalendarContext,r5 as useIlamyCalendarContext,ZP as isRecurringEvent,jP as generateRecurringEvents,rP as defaultTranslations,rQ as RRule,r4 as IlamyResourceCalendar,T4 as IlamyCalendar};
|
|
1
|
+
import{RRule as k_}from"rrule";import{RRule as bf}from"rrule";import p0 from"dayjs";import Wf from"dayjs/plugin/isBetween.js";import Af from"dayjs/plugin/isSameOrAfter.js";import Vf from"dayjs/plugin/isSameOrBefore.js";import Of from"dayjs/plugin/localeData.js";import Ff from"dayjs/plugin/minMax.js";import Mf from"dayjs/plugin/timezone.js";import Rf from"dayjs/plugin/utc.js";import Hf from"dayjs/plugin/weekday.js";import If from"dayjs/plugin/weekOfYear.js";import"dayjs/locale/af.js";import"dayjs/locale/am.js";import"dayjs/locale/ar-dz.js";import"dayjs/locale/ar-iq.js";import"dayjs/locale/ar-kw.js";import"dayjs/locale/ar-ly.js";import"dayjs/locale/ar-ma.js";import"dayjs/locale/ar-sa.js";import"dayjs/locale/ar-tn.js";import"dayjs/locale/ar.js";import"dayjs/locale/az.js";import"dayjs/locale/be.js";import"dayjs/locale/bg.js";import"dayjs/locale/bi.js";import"dayjs/locale/bm.js";import"dayjs/locale/bn-bd.js";import"dayjs/locale/bn.js";import"dayjs/locale/bo.js";import"dayjs/locale/br.js";import"dayjs/locale/bs.js";import"dayjs/locale/ca.js";import"dayjs/locale/cs.js";import"dayjs/locale/cv.js";import"dayjs/locale/cy.js";import"dayjs/locale/da.js";import"dayjs/locale/de-at.js";import"dayjs/locale/de-ch.js";import"dayjs/locale/de.js";import"dayjs/locale/dv.js";import"dayjs/locale/el.js";import"dayjs/locale/en-au.js";import"dayjs/locale/en-ca.js";import"dayjs/locale/en-gb.js";import"dayjs/locale/en-ie.js";import"dayjs/locale/en-il.js";import"dayjs/locale/en-in.js";import"dayjs/locale/en-nz.js";import"dayjs/locale/en-sg.js";import"dayjs/locale/en-tt.js";import"dayjs/locale/en.js";import"dayjs/locale/eo.js";import"dayjs/locale/es-do.js";import"dayjs/locale/es-mx.js";import"dayjs/locale/es-pr.js";import"dayjs/locale/es-us.js";import"dayjs/locale/es.js";import"dayjs/locale/et.js";import"dayjs/locale/eu.js";import"dayjs/locale/fa.js";import"dayjs/locale/fi.js";import"dayjs/locale/fo.js";import"dayjs/locale/fr-ca.js";import"dayjs/locale/fr-ch.js";import"dayjs/locale/fr.js";import"dayjs/locale/fy.js";import"dayjs/locale/ga.js";import"dayjs/locale/gd.js";import"dayjs/locale/gl.js";import"dayjs/locale/gom-latn.js";import"dayjs/locale/gu.js";import"dayjs/locale/he.js";import"dayjs/locale/hi.js";import"dayjs/locale/hr.js";import"dayjs/locale/ht.js";import"dayjs/locale/hu.js";import"dayjs/locale/hy-am.js";import"dayjs/locale/id.js";import"dayjs/locale/is.js";import"dayjs/locale/it-ch.js";import"dayjs/locale/it.js";import"dayjs/locale/ja.js";import"dayjs/locale/jv.js";import"dayjs/locale/ka.js";import"dayjs/locale/kk.js";import"dayjs/locale/km.js";import"dayjs/locale/kn.js";import"dayjs/locale/ko.js";import"dayjs/locale/ku.js";import"dayjs/locale/ky.js";import"dayjs/locale/lb.js";import"dayjs/locale/lo.js";import"dayjs/locale/lt.js";import"dayjs/locale/lv.js";import"dayjs/locale/me.js";import"dayjs/locale/mi.js";import"dayjs/locale/mk.js";import"dayjs/locale/ml.js";import"dayjs/locale/mn.js";import"dayjs/locale/mr.js";import"dayjs/locale/ms-my.js";import"dayjs/locale/ms.js";import"dayjs/locale/mt.js";import"dayjs/locale/my.js";import"dayjs/locale/nb.js";import"dayjs/locale/ne.js";import"dayjs/locale/nl-be.js";import"dayjs/locale/nl.js";import"dayjs/locale/nn.js";import"dayjs/locale/oc-lnc.js";import"dayjs/locale/pa-in.js";import"dayjs/locale/pl.js";import"dayjs/locale/pt-br.js";import"dayjs/locale/pt.js";import"dayjs/locale/rn.js";import"dayjs/locale/ro.js";import"dayjs/locale/ru.js";import"dayjs/locale/rw.js";import"dayjs/locale/sd.js";import"dayjs/locale/se.js";import"dayjs/locale/si.js";import"dayjs/locale/sk.js";import"dayjs/locale/sl.js";import"dayjs/locale/sq.js";import"dayjs/locale/sr-cyrl.js";import"dayjs/locale/sr.js";import"dayjs/locale/ss.js";import"dayjs/locale/sv-fi.js";import"dayjs/locale/sv.js";import"dayjs/locale/sw.js";import"dayjs/locale/ta.js";import"dayjs/locale/te.js";import"dayjs/locale/tet.js";import"dayjs/locale/tg.js";import"dayjs/locale/th.js";import"dayjs/locale/tk.js";import"dayjs/locale/tl-ph.js";import"dayjs/locale/tlh.js";import"dayjs/locale/tr.js";import"dayjs/locale/tzl.js";import"dayjs/locale/tzm-latn.js";import"dayjs/locale/tzm.js";import"dayjs/locale/ug-cn.js";import"dayjs/locale/uk.js";import"dayjs/locale/ur.js";import"dayjs/locale/uz-latn.js";import"dayjs/locale/uz.js";import"dayjs/locale/vi.js";import"dayjs/locale/x-pseudo.js";import"dayjs/locale/yo.js";import"dayjs/locale/zh-cn.js";import"dayjs/locale/zh-hk.js";import"dayjs/locale/zh-tw.js";import"dayjs/locale/zh.js";p0.extend(Hf);p0.extend(If);p0.extend(Af);p0.extend(Vf);p0.extend(Wf);p0.extend(Ff);p0.extend(Mf);p0.extend(Rf);p0.extend(Of);var O=p0;import{clsx as Sf}from"clsx";import{twMerge as wf}from"tailwind-merge";function U(...P){return wf(Sf(P))}function a0(P){if(P===void 0)return;if(O.isDayjs(P))return P;let f=O(P);return f.isValid()?f:void 0}var V5=(P,f)=>{let $={...P};for(let X of f)delete $[X];return $};function wP(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:O.isDayjs(f.start)?f.start:O(f.start),end:O.isDayjs(f.end)?f.end:O(f.end)}})}var s0=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},eP=({event:P,currentEvents:f,startDate:$,endDate:X})=>{if(!P.rrule)return[];try{let J={...P.rrule,dtstart:P.rrule.dtstart||P.start.toDate()},Z=new bf(J),_=f.filter((p)=>p.recurrenceId&&p.uid===P.uid),q=P.end.diff(P.start),Q=$.subtract(q,"millisecond").toDate(),Y=X.toDate();return Z.between(Q,Y,!0).map((p,A)=>{let G=O(p),L=_.find((M)=>a0(M.recurrenceId)?.isSame(G));if(L)return{...P,...L};let B=P.end.diff(P.start),K=G.add(B,"millisecond"),W=`${P.id}_${A}`,V=P.uid||`${P.id}@ilamy.calendar`;return{...P,id:W,start:G,end:K,uid:V,rrule:void 0}}).filter((p)=>{if(P.exdates&&P.exdates.length>0){let L=p.start.toISOString();if(P.exdates.includes(L))return!1}return p.start.isSameOrBefore(X)&&p.end.isSameOrAfter($)})}catch(J){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${J instanceof Error?J.message:"Unknown error"}`)}},O5=({targetEvent:P,updates:f,currentEvents:$,scope:X})=>{let J=[...$],Z=J.findIndex((q)=>{return(q.uid||`${q.id}@ilamy.calendar`)===P.uid&&q.rrule&&!q.recurrenceId});if(Z===-1)throw Error("Base recurring event not found");let _=J[Z];switch(X){case"this":{let q=P.start.toISOString(),Y=[..._.exdates||[],q],N={..._,exdates:Y};J[Z]=N;let z=`${P.id}_modified_${Date.now()}`,p={...V5(P,["width","height","top","left","right"]),...f,id:z,recurrenceId:q,uid:_.uid||`${_.id}@ilamy.calendar`,rrule:void 0};J.push(p);break}case"following":{let Q=P.start.subtract(1,"day").endOf("day").toDate(),Y={..._,rrule:{..._.rrule,until:Q}};J[Z]=Y;let N=_.end.diff(_.start),z=f.start||P.start,p=f.end||z.add(N),A=`${_.id}_following`,G=`${A}@ilamy.calendar`,L={..._,...f,rrule:{..._.rrule,...f.rrule,dtstart:z.toDate()},id:A,uid:G,start:z,end:p,recurrenceId:void 0};J.push(L);break}case"all":{let q={..._,...f};J[Z]=q;break}default:throw Error(`Invalid scope: ${X}. Must be 'this', 'following', or 'all'`)}return J},F5=({targetEvent:P,currentEvents:f,scope:$})=>{let X=[...f],J=X.findIndex((_)=>{return(_.uid||`${_.id}@ilamy.calendar`)===P.uid&&_.rrule&&!_.recurrenceId});if(J===-1)throw Error("Base recurring event not found");let Z=X[J];switch($){case"this":{let _=P.start.toISOString(),Q=[...Z.exdates||[],_],Y={...Z,exdates:Q};X[J]=Y;break}case"following":{let q=P.start.subtract(1,"day").endOf("day").toDate(),Q={...Z,rrule:{...Z.rrule,until:q}};X[J]=Q;break}case"all":return X.filter((q)=>q.uid!==P.uid);default:throw Error(`Invalid scope: ${$}. Must be 'this', 'following', or 'all'`)}return X};import{AnimatePresence as Y3,motion as U3}from"motion/react";import{DndContext as lf,MouseSensor as rf,pointerWithin as nf,TouchSensor as tf,useSensor as E5,useSensors as af}from"@dnd-kit/core";import{useRef as x5,useState as sf}from"react";import{Slot as Tf}from"@radix-ui/react-slot";import{cva as hf}from"class-variance-authority";import{jsx as gf}from"react/jsx-runtime";var bP=hf("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 C({className:P,variant:f,size:$,asChild:X=!1,...J}){return gf(X?Tf:"button",{className:U(bP({variant:f,size:$,className:P})),"data-slot":"button",...J})}import*as f0 from"@radix-ui/react-dialog";import{XIcon as mf}from"lucide-react";import{jsx as B0,jsxs as P5}from"react/jsx-runtime";function e0({...P}){return B0(f0.Root,{"data-slot":"dialog",...P})}function kf({...P}){return B0(f0.Portal,{"data-slot":"dialog-portal",...P})}function Cf({className:P,...f}){return B0(f0.Overlay,{className:U("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",...f})}function PP({className:P,children:f,...$}){return P5(kf,{"data-slot":"dialog-portal",children:[B0(Cf,{}),P5(f0.Content,{className:U("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",...$,children:[f,P5(f0.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:[B0(mf,{}),B0("span",{className:"sr-only",children:"Close"})]})]})]})}function fP({className:P,...f}){return B0("div",{className:U("flex flex-col gap-2 text-center sm:text-left",P),"data-slot":"dialog-header",...f})}function TP({className:P,...f}){return B0("div",{className:U("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),"data-slot":"dialog-footer",...f})}function $P({className:P,...f}){return B0(f0.Title,{className:U("text-lg leading-none font-semibold",P),"data-slot":"dialog-title",...f})}function hP({className:P,...f}){return B0(f0.Description,{className:U("text-muted-foreground text-sm",P),"data-slot":"dialog-description",...f})}import{useContext as m5}from"react";import{createContext as Df,useContext as M5}from"react";var ZP=Df(void 0),K0=()=>{let P=M5(ZP);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},Ef=()=>{let P=M5(ZP);if(P===void 0)throw Error("useIlamyCalendarContext must be used within a CalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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,businessHours:P.businessHours}};import{createContext as xf,useContext as R5}from"react";var XP=xf(void 0),i=()=>{let P=R5(XP);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},vf=()=>{let P=R5(XP);if(P===void 0)throw Error("useIlamyResourceCalendarContext must be used within a ResourceCalendarProvider");return{currentDate:P.currentDate,view:P.view,events:P.events,resources:P.resources,isEventFormOpen:P.isEventFormOpen,selectedEvent:P.selectedEvent,selectedDate:P.selectedDate,firstDayOfWeek:P.firstDayOfWeek,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{useCallback as Y0,useMemo as uf,useState as T5}from"react";import{useCallback as s,useEffect as $5,useMemo as w5,useState as c0}from"react";var f5={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",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",sunday:"Sunday",monday:"Monday",tuesday:"Tuesday",wednesday:"Wednesday",thursday:"Thursday",friday:"Friday",saturday:"Saturday",sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",january:"January",february:"February",march:"March",april:"April",may:"May",june:"June",july:"July",august:"August",september:"September",october:"October",november:"November",december:"December"};function $0(P,f){let $=P.startOf("week").day(f),X=P.isBefore($)?$.subtract(1,"week"):$;return Array.from({length:7},(J,Z)=>X.add(Z,"day"))}function gP(P,f){let $=$0(P.startOf("month"),f);return Array.from({length:6},(X,J)=>{let Z=$[0].add(J,"week");return $0(Z,f)})}function H5(P){let f=P.daysInMonth();return Array.from({length:f},($,X)=>P.startOf("month").add(X,"day"))}function q0({referenceDate:P=O(),length:f=24}={}){return Array.from({length:f},($,X)=>P.hour(X).minute(0).second(0))}var h0=1,I5=24,M0=24,JP=4,S5="bg-secondary text-muted-foreground pointer-events-none",mP={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var b5={day:"day",week:"week",month:"month",year:"year"},kP=(P)=>{let{events:f=[],firstDayOfWeek:$=0,initialView:X="month",initialDate:J=O(),businessHours:Z,onEventAdd:_,onEventUpdate:q,onEventDelete:Q,onDateChange:Y,onViewChange:N,locale:z,timezone:p,translations:A,translator:G}=P,[L,B]=c0(J),[K,W]=c0(X),[V,R]=c0(f),[M,b]=c0(!1),[h,E]=c0(null),[k,v]=c0(null),[y,I]=c0(z||"en"),g=w5(()=>{if(G)return G;if(A)return(F)=>A[F]||F;return(F)=>f5[F]||F},[A,G]),S=s((F,m)=>{let o=[];for(let c of V)if(c.rrule)o.push(...eP({event:c,currentEvents:V,startDate:F,endDate:m}));else{let w=c.start.isSameOrAfter(F)&&c.start.isSameOrBefore(m),l=c.end.isSameOrAfter(F)&&c.end.isSameOrBefore(m),G0=c.start.isBefore(F)&&c.end.isAfter(m);if(w||l||G0)o.push(c)}return o},[V]),Q0=s(()=>{if(K==="day")return{start:L.startOf("day"),end:L.endOf("day")};if(K==="year")return{start:L.startOf("year"),end:L.endOf("year")};if(K==="week"){let m=$0(L,$);return{start:m[0].startOf("day"),end:m[6].endOf("day")}}let F=gP(L,$);return{start:F[0][0].startOf("day"),end:F[5][6].endOf("day")}},[L,K,$]),N0=w5(()=>{let{start:F,end:m}=Q0();return S(F,m)},[S,Q0]);$5(()=>{if(f)R(f)},[f]),$5(()=>{if(z)I(z),O.locale(z),B((F)=>F.locale(z))},[z]),$5(()=>{if(p)O.tz.setDefault(p)},[p]);let P0=s((F)=>{B(F),Y?.(F)},[Y]),_0=s((F)=>{B((m)=>{let o=F===1?m.add(1,b5[K]):m.subtract(1,b5[K]);return Y?.(o),o})},[K,Y]),a=s(()=>_0(1),[_0]),j=s(()=>_0(-1),[_0]),T0=s(()=>{let F=O();B(F),Y?.(F)},[Y]),r0=s((F)=>{R((m)=>[...m,F]),_?.(F)},[_]),n0=s((F,m)=>{R((o)=>o.map((c)=>{if(c.id!==F)return c;let w={...c,...m};return q?.(w),w}))},[q]),t0=s((F,m,o)=>{q?.({...F,...m}),R(O5({targetEvent:F,updates:m,currentEvents:V,scope:o.scope}))},[V,q]),j0=s((F,m)=>{Q?.(F),R(F5({targetEvent:F,currentEvents:V,scope:m.scope}))},[V,Q]),i0=s((F)=>{R((m)=>{let o=m.find((c)=>c.id===F);if(o)Q?.(o);return m.filter((c)=>c.id!==F)})},[Q]),o0=s((F)=>{if(F?.start)v(F.start);let m=F?.start??L;E({title:g("newEvent"),start:m,end:F?.end??m.add(1,"hour"),resourceId:F?.resourceId,description:"",allDay:F?.allDay??!1}),b(!0)},[L,g]),H=s(()=>{v(null),E(null),b(!1)},[]),z0=s((F)=>{W(F),N?.(F)},[N]),F0=s((F)=>{let m=F.uid;return V.find((o)=>(o.uid||`${o.id}@ilamy.calendar`)===m&&o.rrule)||null},[V]);return{currentDate:L,view:K,events:N0,rawEvents:V,isEventFormOpen:M,selectedEvent:h,selectedDate:k,firstDayOfWeek:$,dayMaxEvents:JP,currentLocale:y,businessHours:Z,setCurrentDate:B,selectDate:P0,setView:z0,nextPeriod:a,prevPeriod:j,today:T0,addEvent:r0,updateEvent:n0,updateRecurringEvent:t0,deleteEvent:i0,deleteRecurringEvent:j0,openEventForm:o0,closeEventForm:H,setSelectedEvent:E,setIsEventFormOpen:b,setSelectedDate:v,getEventsForDateRange:S,findParentRecurringEvent:F0,t:g}};import{jsx as yf}from"react/jsx-runtime";var h5=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},g5=({children:P,events:f=[],resources:$=[],firstDayOfWeek:X=0,initialView:J="month",initialDate:Z,renderEvent:_,onEventClick:q,onCellClick:Q,onViewChange:Y,onEventAdd:N,onEventUpdate:z,onEventDelete:p,onDateChange:A,locale:G,timezone:L,disableCellClick:B,disableEventClick:K,disableDragAndDrop:W,dayMaxEvents:V,eventSpacing:R,stickyViewHeader:M=!0,viewHeaderClassName:b="",headerComponent:h,headerClassName:E,translations:k,translator:v,renderResource:y,renderEventForm:I,businessHours:g,timeFormat:S="12-hour",classesOverride:Q0,orientation:N0="horizontal"})=>{let[P0]=T5($),[_0,a]=T5(new Set($.map((w)=>w.id))),j=kP({events:f,firstDayOfWeek:X,initialView:J,initialDate:Z,businessHours:g,onEventAdd:N,onEventUpdate:z,onEventDelete:p,onDateChange:A,onViewChange:Y,locale:G,timezone:L,translations:k,translator:v}),T0=Y0((w)=>{a((l)=>{let G0=new Set(l);if(G0.has(w))G0.delete(w);else G0.add(w);return G0})},[]),r0=Y0((w)=>{a((l)=>new Set(l).add(w))},[]),n0=Y0((w)=>{a((l)=>{let G0=new Set(l);return G0.delete(w),G0})},[]),t0=Y0(()=>{a(new Set(P0.map((w)=>w.id)))},[P0]),j0=Y0(()=>{a(new Set)},[]),i0=Y0((w)=>{return j.events.filter((l)=>{if(l.resourceIds)return l.resourceIds.includes(w);return l.resourceId===w})},[j.events]),o0=Y0((w)=>{return j.events.filter((l)=>{return h5(l).some((Bf)=>w.includes(Bf))})},[j.events]),H=Y0((w)=>{return P0.find((l)=>l.id===w)},[P0]),z0=Y0(()=>{return P0.filter((w)=>_0.has(w.id))},[P0,_0]),F0=Y0((w)=>{return Boolean(w.resourceIds&&w.resourceIds.length>1)},[]),F=Y0((w)=>{j.setSelectedEvent(w),j.setIsEventFormOpen(!0)},[j]),m=Y0((w)=>{if(K)return;if(q)q(w);else F(w)},[K,q,F]),o=Y0((w)=>{if(B)return;if(Q)Q(w);else{let l={title:j.t("newEvent"),start:w.start,end:w.end,description:"",allDay:!1};if(w.resourceId!==void 0)l.resourceId=w.resourceId;j.setSelectedEvent(l),j.setSelectedDate(w.start),j.setIsEventFormOpen(!0)}},[Q,B,j]),c=uf(()=>({...j,view:j.view,setView:j.setView,events:j.events,rawEvents:j.rawEvents,resources:P0,visibleResources:_0,toggleResourceVisibility:T0,showResource:r0,hideResource:n0,showAllResources:t0,hideAllResources:j0,getEventsForResource:i0,getEventsForResources:o0,getResourceById:H,getVisibleResources:z0,isEventCrossResource:F0,getEventResourceIds:h5,onEventClick:m,onCellClick:o,headerComponent:h,headerClassName:E,renderEvent:_,renderResource:y,renderEventForm:I,locale:G,timezone:L,disableCellClick:B,disableEventClick:K,disableDragAndDrop:W,dayMaxEvents:V,eventSpacing:R,stickyViewHeader:M,viewHeaderClassName:b,businessHours:g,timeFormat:S,classesOverride:Q0,orientation:N0}),[j,P0,_0,T0,r0,n0,t0,j0,i0,o0,H,z0,F0,m,o,_,y,I,G,L,B,K,W,V,R,M,b,h,E,g,S,Q0,N0]);return yf(XP.Provider,{value:c,children:P})};function T(P){let f=m5(XP),$=m5(ZP);if(f)return P(f);if($)return P($);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as U0,jsxs as d0}from"react/jsx-runtime";function pP({isOpen:P,onClose:f,onConfirm:$,operationType:X,eventTitle:J}){let{t:Z}=T((Q)=>({t:Q.t})),_=(Q)=>{$(Q),f()},q=X==="edit";return U0(e0,{onOpenChange:f,open:P,children:d0(PP,{className:"max-w-md",children:[d0(fP,{children:[U0($P,{children:q?Z("editRecurringEvent"):Z("deleteRecurringEvent")}),d0(hP,{children:['"',J,'"'," ",q?Z("editRecurringEventQuestion"):Z("deleteRecurringEventQuestion")]})]}),d0("div",{className:"space-y-3",children:[U0(C,{className:"w-full justify-start h-auto p-4",onClick:()=>_("this"),variant:"outline",children:d0("div",{className:"text-left",children:[U0("div",{className:"font-medium",children:Z("thisEvent")}),U0("div",{className:"text-sm text-muted-foreground",children:q?Z("onlyChangeThis"):Z("onlyDeleteThis")})]})}),U0(C,{className:"w-full justify-start h-auto p-4",onClick:()=>_("following"),variant:"outline",children:d0("div",{className:"text-left",children:[U0("div",{className:"font-medium",children:Z("thisAndFollowingEvents")}),U0("div",{className:"text-sm text-muted-foreground",children:q?Z("changeThisAndFuture"):Z("deleteThisAndFuture")})]})}),U0(C,{className:"w-full justify-start h-auto p-4",onClick:()=>_("all"),variant:"outline",children:d0("div",{className:"text-left",children:[U0("div",{className:"font-medium",children:Z("allEvents")}),U0("div",{className:"text-sm text-muted-foreground",children:q?Z("changeEntireSeries"):Z("deleteEntireSeries")})]})})]}),U0(TP,{children:U0(C,{onClick:f,variant:"outline",children:Z("cancel")})})]})})}var k5=(P,f)=>{let{active:$,over:X}=P;if(!$||!X||!f)return null;let J=X.data.current?.type==="time-cell",{resourceId:Z,allDay:_}=X.data.current||{},q;if(J){let{date:z,hour:p=0,minute:A=0}=X.data.current;q=O(z).hour(p).minute(A)}else{let{date:z}=X.data.current;q=O(z)}let Q=f.end.diff(f.start,"second"),Y=q.add(Q,"second");if(Y.isSame(Y.startOf("day")))Y=Y.subtract(1,"day").endOf("day");let N={start:q,end:Y,resourceId:Z,allDay:J?!1:_??f.allDay};return{activeEvent:f,updates:N}};import{DragOverlay as jf}from"@dnd-kit/core";import{snapCenterToCursor as of}from"@dnd-kit/modifiers";import{useImperativeHandle as cf,useState as df}from"react";import{jsx as C5}from"react/jsx-runtime";var D5=({ref:P})=>{let[f,$]=df(null);return cf(P,()=>({setActiveEvent:$})),C5(jf,{modifiers:[of],children:f&&C5("div",{className:U("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",f.backgroundColor||"bg-blue-500",f.color||"text-white"),children:f?.title})})};import{jsx as v5,jsxs as u5,Fragment as ef}from"react/jsx-runtime";function CP({children:P}){let f=x5(null),$=x5(null),{updateEvent:X,updateRecurringEvent:J,disableDragAndDrop:Z}=T((K)=>({updateEvent:K.updateEvent,updateRecurringEvent:K.updateRecurringEvent,disableDragAndDrop:K.disableDragAndDrop})),[_,q]=sf({isOpen:!1,event:null,updates:null}),Q=E5(rf,{activationConstraint:{distance:2}}),Y=E5(tf,{activationConstraint:{delay:100,tolerance:5}}),N=af(Q,Y),z=(K,W)=>{if(!K||!K.id)return;if(!W||Object.keys(W).length===0)return;if(s0(K))q({isOpen:!0,event:K,updates:W});else X(K.id,W)},p=(K)=>{if(!_.event||!_.updates){q({isOpen:!1,event:null,updates:null});return}try{J(_.event,_.updates,{scope:K,eventDate:_.event.start})}catch{}finally{q({isOpen:!1,event:null,updates:null})}},A=()=>{q({isOpen:!1,event:null,updates:null})},G=(K)=>{let{active:W}=K;if(W.data.current?.type==="calendar-event")$.current?.setActiveEvent(W.data.current.event),f.current=W.data.current.event},L=(K)=>{let W=k5(K,f.current);if(W){let{activeEvent:V,updates:R}=W;z(V,R)}f.current=null,$.current?.setActiveEvent(null)},B=(K)=>{f.current=null};if(Z)return P;return u5(ef,{children:[u5(lf,{collisionDetection:nf,onDragCancel:B,onDragEnd:L,onDragStart:G,sensors:N,children:[P,v5(D5,{ref:$})]}),v5(pP,{eventTitle:_.event?.title||"",isOpen:_.isOpen,onClose:A,onConfirm:p,operationType:"edit"})]})}import{useEffect as w1,useState as x0}from"react";import*as DP from"@radix-ui/react-checkbox";import{CheckIcon as P1}from"lucide-react";import{jsx as Z5}from"react/jsx-runtime";function g0({className:P,...f}){return Z5(DP.Root,{className:U("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",...f,children:Z5(DP.Indicator,{className:"flex items-center justify-center text-current transition-none","data-slot":"checkbox-indicator",children:Z5(P1,{className:"size-3.5"})})})}import{PopoverClose as Q1}from"@radix-ui/react-popover";import{Calendar as q1}from"lucide-react";import{useEffect as _1,useRef as Y1,useState as U1}from"react";import{ChevronDownIcon as f1,ChevronLeftIcon as $1,ChevronRightIcon as Z1}from"lucide-react";import*as EP from"react";import{DayPicker as X1,getDefaultClassNames as y5}from"react-day-picker";import{jsx as m0}from"react/jsx-runtime";function j5({className:P,classNames:f,showOutsideDays:$=!0,captionLayout:X="label",buttonVariant:J="ghost",formatters:Z,components:_,...q}){let Q=y5();return m0(X1,{captionLayout:X,className:U("bg-background group/calendar p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,P),classNames:{root:U("w-fit",Q.root),months:U("flex gap-4 flex-col md:flex-row relative",Q.months),month:U("flex flex-col w-full gap-4",Q.month),nav:U("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",Q.nav),button_previous:U(bP({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Q.button_previous),button_next:U(bP({variant:J}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Q.button_next),month_caption:U("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",Q.month_caption),dropdowns:U("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",Q.dropdowns),dropdown_root:U("relative has-focus:border-ring border border-input shadow-xs has-focus:ring-ring/50 has-focus:ring-[3px] rounded-md",Q.dropdown_root),dropdown:U("absolute bg-popover inset-0 opacity-0",Q.dropdown),caption_label:U("select-none font-medium",X==="label"?"text-sm":"rounded-md pl-2 pr-1 flex items-center gap-1 text-sm h-8 [&>svg]:text-muted-foreground [&>svg]:size-3.5",Q.caption_label),table:"w-full border-collapse",weekdays:U("flex",Q.weekdays),weekday:U("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",Q.weekday),week:U("flex w-full mt-2",Q.week),week_number_header:U("select-none w-(--cell-size)",Q.week_number_header),week_number:U("text-[0.8rem] select-none text-muted-foreground",Q.week_number),day:U("relative w-full h-full p-0 text-center [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",q.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md":"[&:first-child[data-selected=true]_button]:rounded-l-md",Q.day),range_start:U("rounded-l-md bg-accent",Q.range_start),range_middle:U("rounded-none",Q.range_middle),range_end:U("rounded-r-md bg-accent",Q.range_end),today:U("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",Q.today),outside:U("text-muted-foreground aria-selected:text-muted-foreground",Q.outside),disabled:U("text-muted-foreground opacity-50",Q.disabled),hidden:U("invisible",Q.hidden),...f},components:{Root:({className:Y,rootRef:N,...z})=>{return m0("div",{className:U(Y),"data-slot":"calendar",ref:N,...z})},Chevron:({className:Y,orientation:N,...z})=>{if(N==="left")return m0($1,{className:U("size-4",Y),...z});if(N==="right")return m0(Z1,{className:U("size-4",Y),...z});return m0(f1,{className:U("size-4",Y),...z})},DayButton:J1,WeekNumber:({children:Y,...N})=>{return m0("td",{...N,children:m0("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:Y})})},..._},formatters:{formatMonthDropdown:(Y)=>Y.toLocaleString("default",{month:"short"}),...Z},showOutsideDays:$,...q})}function J1({className:P,day:f,modifiers:$,...X}){let J=y5(),Z=EP.useRef(null);return EP.useEffect(()=>{if($.focused)Z.current?.focus()},[$.focused]),m0(C,{className:U("data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70",J.day,P),"data-day":f.date.toLocaleDateString(),"data-range-end":$.range_end,"data-range-middle":$.range_middle,"data-range-start":$.range_start,"data-selected-single":$.selected&&!$.range_start&&!$.range_end&&!$.range_middle,ref:Z,size:"icon",variant:"ghost",...X})}import*as R0 from"@radix-ui/react-popover";import{jsx as xP}from"react/jsx-runtime";function k0({...P}){return xP(R0.Root,{"data-slot":"popover",...P})}function C0({...P}){return xP(R0.Trigger,{"data-slot":"popover-trigger",...P})}function D0({className:P,align:f="center",sideOffset:$=4,...X}){return xP(R0.Portal,{children:xP(R0.Content,{align:f,className:U("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:$,...X})})}import{jsx as QP,jsxs as X5}from"react/jsx-runtime";function BP({date:P,closeOnSelect:f,onChange:$,label:X="Pick a date",className:J,disabled:Z}){let _=Y1(null),[q,Q]=U1(P);_1(()=>{Q(P)},[P]);let Y=(N)=>{if(Q(N),f)_.current?.click();$?.(N)};return QP("div",{className:J,children:X5(k0,{children:[QP(C0,{asChild:!0,children:X5(C,{className:U("data-[empty=true]:text-muted-foreground w-full justify-start text-left font-normal"),"data-empty":!P,variant:"outline",children:[QP(q1,{}),q?O(q).format("MMM D, YYYY"):QP("span",{children:X})]})}),X5(D0,{align:"start",className:"w-auto p-0",children:[QP(Q1,{ref:_}),QP(j5,{captionLayout:"dropdown",defaultMonth:q,disabled:Z,mode:"single",onSelect:Y,selected:q})]})]})})}import{jsx as K1}from"react/jsx-runtime";function H0({className:P,type:f,...$}){return K1("input",{className:U("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:f,...$})}import*as i5 from"@radix-ui/react-label";import{jsx as z1}from"react/jsx-runtime";function d({className:P,...f}){return z1(i5.Root,{className:U("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",...f})}import*as W0 from"@radix-ui/react-scroll-area";import{jsx as WP,jsxs as L1}from"react/jsx-runtime";function A0({className:P,children:f,viewPortProps:$,...X}){return L1(W0.Root,{className:U("relative",P),"data-slot":"scroll-area",...X,children:[WP(W0.Viewport,{...$,className:U("focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",$?.className),"data-slot":"scroll-area-viewport",children:f}),WP(I0,{}),WP(W0.Corner,{})]})}function I0({className:P,orientation:f="vertical",...$}){return WP(W0.ScrollAreaScrollbar,{className:U("flex touch-none p-px transition-colors select-none",f==="vertical"&&"h-full w-2.5 border-l border-l-transparent",f==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent",P),"data-slot":"scroll-area-scrollbar",orientation:f,...$,children:WP(W0.ScrollAreaThumb,{className:"bg-border relative flex-1 rounded-full","data-slot":"scroll-area-thumb"})})}import{Clock as G1}from"lucide-react";import{useEffect as p1,useRef as c5,useState as J5}from"react";import{useMemo as N1}from"react";function o5({timeFormat:P="12-hour",minTime:f="00:00",maxTime:$="23:45"}){return{timeOptions:N1(()=>{let Z=[],[_,q]=f.split(":").map(Number),[Q,Y]=$.split(":").map(Number),N=_*60+q,z=Q*60+Y;for(let p=N;p<=z;p+=15){let A=Math.floor(p/60),G=p%60,L=`${A.toString().padStart(2,"0")}:${G.toString().padStart(2,"0")}`;Z.push(L)}return Z},[f,$]),formatTime:(Z)=>{let[_,q]=Z.split(":").map(Number),Q=_>=12?"PM":"AM",Y=_===0?12:_>12?_-12:_;if(P==="24-hour")return`${_.toString().padStart(2,"0")}:${q.toString().padStart(2,"0")}`;return`${Y}:${q.toString().padStart(2,"0")} ${Q}`}}}import{jsx as E0,jsxs as Q5}from"react/jsx-runtime";var B1=(P)=>{P.stopPropagation()};function q5({value:P,onChange:f,minTime:$="00:00",maxTime:X="23:45",timeFormat:J="12-hour",placeholder:Z="Select time...",className:_,disabled:q=!1,name:Q}){let[Y,N]=J5(!1),[z,p]=J5(""),A=c5(null),G=c5(null),[L,B]=J5(0),{timeOptions:K,formatTime:W}=o5({timeFormat:J,minTime:$,maxTime:X}),V=K.filter((b)=>{return W(b).toLowerCase().includes(z.toLowerCase())}),R=(b)=>{f(b),N(!1),p("")};p1(()=>{if(Y){if(G.current)B(G.current.offsetWidth);setTimeout(()=>{A.current?.focus()},0)}},[Y]);let M=P?W(P):Z;return Q5(k0,{onOpenChange:N,open:Y,children:[E0(C0,{asChild:!0,children:Q5(C,{"aria-controls":"time-picker-listbox","aria-expanded":Y,className:U("w-full justify-start",_),"data-testid":`time-picker-${Q}`,disabled:q,ref:G,role:"combobox",variant:"outline",children:[E0(G1,{className:"mr-2 h-4 w-4"}),M]})}),Q5(D0,{align:"start",className:"p-0",style:{width:L},children:[E0("div",{className:"p-2 border-b",children:E0(H0,{className:"h-8",onChange:(b)=>p(b.target.value),placeholder:"Search time...",ref:A,value:z})}),E0(A0,{className:"h-[200px]",onWheel:B1,children:E0("div",{className:"p-1",children:V.length===0?E0("div",{className:"py-6 text-center text-sm text-muted-foreground",children:"N/A"}):V.map((b)=>{let h=W(b);return E0("button",{className:U("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",b===P&&"bg-accent text-accent-foreground"),onClick:()=>R(b),type:"button",children:h},b)})})})]})]})}var d5={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6},vP=(P,f)=>{if(!f)return;if(!Array.isArray(f))return f;let $=P.day();return f.find((X)=>{if(!X.daysOfWeek)return!1;return X.daysOfWeek.some((J)=>d5[J]===$)})},AP=(P,f)=>{if(!f)return!0;let $=vP(P,f);if(!$)return!1;if($.daysOfWeek)return $.daysOfWeek.some((X)=>d5[X]===P.day());return!0},l5=({date:P,hour:f,minute:$=0,businessHours:X})=>{if(!AP(P,X))return!1;if(!X)return!0;if(f===void 0)return!0;let J=vP(P,X);if(!J)return!1;let Z=J.startTime??9,_=J.endTime??17,q=f*60+$,Q=Z*60,Y=_*60;if(q<Q||q>=Y)return!1;return!0};var _5=(P,f,$)=>{let[X,J]=f.split(":").map(Number),Z=O(P).hour(X).minute(J);return $?Z.hour(0).minute(0):Z},r5=(P,f,$)=>{let[X,J]=f.split(":").map(Number),Z=O(P).hour(X).minute(J);return $?Z.hour(23).minute(59):Z},Y5=(P,f)=>{if(!f)return{min:"00:00",max:"23:59"};let $=O(P);if(!AP($,f))return{min:"00:00",max:"23:59"};let X=vP($,f);if(!X)return{min:"00:00",max:"23:59"};return{min:`${(X.startTime??9).toString().padStart(2,"0")}:00`,max:`${((X.endTime??17)-1).toString().padStart(2,"0")}:45`}};import{useEffect as F1,useMemo as M1,useState as J2}from"react";import{RRule as X0}from"rrule";import{jsx as uP}from"react/jsx-runtime";function n5({className:P,...f}){return uP("div",{className:U("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),"data-slot":"card",...f})}function t5({className:P,...f}){return uP("div",{className:U("@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",...f})}function a5({className:P,...f}){return uP("div",{className:U("leading-none font-semibold",P),"data-slot":"card-title",...f})}function s5({className:P,...f}){return uP("div",{className:U("p-4 pt-0",P),"data-slot":"card-content",...f})}import*as x from"@radix-ui/react-select";import{CheckIcon as W1,ChevronDownIcon as e5,ChevronUpIcon as A1}from"lucide-react";import{jsx as e,jsxs as U5}from"react/jsx-runtime";function P2({...P}){return e(x.Root,{"data-slot":"select",...P})}function f2({...P}){return e(x.Value,{"data-slot":"select-value",...P})}function $2({className:P,size:f="default",children:$,...X}){return U5(x.Trigger,{className:U("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":f,"data-slot":"select-trigger",...X,children:[$,e(x.Icon,{asChild:!0,children:e(e5,{className:"size-4 opacity-50"})})]})}function Z2({className:P,children:f,position:$="popper",align:X="center",...J}){return e(x.Portal,{children:U5(x.Content,{align:X,className:U("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-[8rem] 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:$,...J,children:[e(V1,{}),e(x.Viewport,{className:U("p-1",$==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),e(O1,{})]})})}function X2({className:P,children:f,...$}){return U5(x.Item,{className:U("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:[e("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:e(x.ItemIndicator,{children:e(W1,{className:"size-4"})})}),e(x.ItemText,{children:f})]})}function V1({className:P,...f}){return e(x.ScrollUpButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-up-button",...f,children:e(A1,{className:"size-4"})})}function O1({className:P,...f}){return e(x.ScrollDownButton,{className:U("flex cursor-default items-center justify-center py-1",P),"data-slot":"select-scroll-down-button",...f,children:e(e5,{className:"size-4"})})}import{jsx as u,jsxs as Z0}from"react/jsx-runtime";var K5={DAILY:X0.DAILY,WEEKLY:X0.WEEKLY,MONTHLY:X0.MONTHLY,YEARLY:X0.YEARLY},R1=Object.fromEntries(Object.entries(K5).map(([P,f])=>[f,P])),Q2=[X0.SU,X0.MO,X0.TU,X0.WE,X0.TH,X0.FR,X0.SA],H1=["sun","mon","tue","wed","thu","fri","sat"],q2=(P)=>Math.max(1,Number.parseInt(P,10)||1),I1=(P,f)=>{if(!P)return f("customRecurrence");try{let $=new X0(P).toText();return $&&!$.toLowerCase().includes("error")?$.charAt(0).toUpperCase()+$.slice(1):f("customRecurrence")}catch{return f("customRecurrence")}},_2=({value:P,onChange:f})=>{let{t:$}=T((L)=>({t:L.t})),[X,J]=J2(!!P),[Z,_]=J2(()=>P||null),q=M1(()=>H1.map((L,B)=>({value:Q2[B],label:$(L)})),[$]);F1(()=>{if(J(!!P),P)_(P)},[P]);let Q=(L)=>{if(!Z)return;let B={...Z,...L};_(B),f(X?B:null)},Y=(L)=>{if(J(L),!L){f(null);return}if(Z){f(Z);return}let B={freq:X0.DAILY,interval:1};_(B),f(B)},N=(L)=>{let B=Z?.byweekday||[],K=Q2[L],W=B.includes(K)?B.filter((V)=>V!==K):[...B,K];Q({byweekday:W.length?W:void 0})},z=(L)=>{let B={count:void 0,until:void 0};if(L==="count")B.count=Z?.count||1;if(L==="until")B.until=Z?.until||O().add(1,"month").endOf("day").toDate();Q(B)},p=Z?.until?"until":Z?.count?"count":"never",A=R1[Z?.freq??X0.DAILY]||"DAILY",G=Array.isArray(Z?.byweekday)?Z.byweekday:Z?.byweekday?[Z.byweekday]:[];return Z0(n5,{"data-testid":"recurrence-editor",children:[Z0(t5,{className:"pb-3",children:[Z0("div",{className:"flex items-center space-x-2",children:[u(g0,{checked:X,"data-testid":"toggle-recurrence",id:"recurring",onCheckedChange:Y}),u(a5,{className:"text-sm",children:$("repeat")})]}),X&&P&&u("p",{className:"text-xs text-muted-foreground",children:I1(P,$)})]}),X&&u(s5,{className:"pt-0",children:Z0("div",{className:"space-y-4",children:[Z0("div",{className:"grid grid-cols-2 gap-4",children:[Z0("div",{children:[u(d,{className:"text-xs",htmlFor:"frequency",children:$("repeats")}),Z0(P2,{onValueChange:(L)=>Q({freq:K5[L]}),value:A,children:[u($2,{className:"h-8","data-testid":"frequency-select",id:"frequency",children:u(f2,{})}),u(Z2,{children:Object.keys(K5).map((L)=>u(X2,{value:L,children:$(L.toLowerCase())},L))})]})]}),Z0("div",{children:[u(d,{className:"text-xs",htmlFor:"interval",children:$("every")}),u(H0,{className:"h-8",id:"interval",min:"1",onChange:(L)=>Q({interval:q2(L.target.value)}),type:"number",value:Z?.interval||1})]})]}),Z?.freq===X0.WEEKLY&&Z0("div",{children:[u(d,{className:"text-xs",children:$("repeatOn")}),u("div",{className:"flex flex-wrap gap-1 mt-1",children:q.map((L,B)=>Z0("div",{className:"flex items-center space-x-1",children:[u(g0,{checked:G.includes(L.value),id:`day-${B}`,onCheckedChange:()=>N(B)}),u(d,{className:"text-xs cursor-pointer",htmlFor:`day-${B}`,children:L.label})]},L.label))})]}),Z0("div",{children:[u(d,{className:"text-xs",children:$("ends")}),Z0("div",{className:"space-y-2 mt-1",children:[Z0("div",{className:"flex items-center space-x-2",children:[u(g0,{checked:p==="never",id:"never",onCheckedChange:()=>z("never")}),u(d,{className:"text-xs",htmlFor:"never",children:$("never")})]}),Z0("div",{className:"flex items-center space-x-2",children:[u(g0,{checked:p==="count",id:"after",onCheckedChange:()=>z("count")}),u(d,{className:"text-xs",htmlFor:"after",children:$("after")}),p==="count"&&u(H0,{className:"h-6 w-16 text-xs","data-testid":"count-input",min:"1",onChange:(L)=>Q({count:q2(L.target.value)}),type:"number",value:Z?.count||1}),u("span",{className:"text-xs",children:$("occurrences")})]}),Z0("div",{className:"flex items-center space-x-2",children:[u(g0,{checked:p==="until",id:"on",onCheckedChange:()=>z("until")}),u(d,{className:"text-xs",htmlFor:"on",children:$("on")}),p==="until"&&u(BP,{className:"h-6",date:Z?.until,onChange:(L)=>Q({until:L?O(L).endOf("day").toDate():void 0})})]})]})]})]})})]})};import{useCallback as yP,useState as S1}from"react";function Y2(P){let{updateRecurringEvent:f,deleteRecurringEvent:$}=T((Y)=>({updateRecurringEvent:Y.updateRecurringEvent,deleteRecurringEvent:Y.deleteRecurringEvent})),[X,J]=S1({isOpen:!1,operationType:"edit",event:null}),Z=yP((Y,N)=>{J({isOpen:!0,operationType:"edit",event:Y,updates:N,onConfirm:(z)=>{f(Y,N,{scope:z,eventDate:Y.start})}})},[f]),_=yP((Y)=>{J({isOpen:!0,operationType:"delete",event:Y,onConfirm:(N)=>{$(Y,{scope:N,eventDate:Y.start})}})},[$]),q=yP(()=>{J({isOpen:!1,operationType:"edit",event:null})},[]),Q=yP((Y)=>{if(X.onConfirm)X.onConfirm(Y);q(),P?.()},[X,q,P]);return{dialogState:X,openEditDialog:Z,openDeleteDialog:_,closeDialog:q,handleConfirm:Q}}import{jsx as D,jsxs as r,Fragment as T1}from"react/jsx-runtime";var b1=["blue","green","purple","red","yellow","pink","indigo","amber","emerald","sky","violet","rose","teal","orange"],U2=b1.map((P)=>({value:`bg-${P}-100 text-${P}-800`,label:P.charAt(0).toUpperCase()+P.slice(1)})),jP=({selectedEvent:P,onClose:f,onUpdate:$,onDelete:X,onAdd:J})=>{let{dialogState:Z,openEditDialog:_,openDeleteDialog:q,closeDialog:Q,handleConfirm:Y}=Y2(f),{findParentRecurringEvent:N,t:z,businessHours:p,timeFormat:A}=T((H)=>({findParentRecurringEvent:H.findParentRecurringEvent,t:H.t,businessHours:H.businessHours,timeFormat:H.timeFormat})),G=P?.start??O(),L=P?.end??O().add(1,"hour"),B=P?N(P):null,[K,W]=x0(G.toDate()),[V,R]=x0(L.toDate()),[M,b]=x0(P?.allDay||!1),[h,E]=x0(P?.color||U2[0].value),[k,v]=x0(G.format("HH:mm")),[y,I]=x0(L.format("HH:mm")),[g,S]=x0({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[Q0,N0]=x0(()=>{return P?.rrule||B?.rrule||null}),P0=(H)=>{if(W(H),H&&O(H).isAfter(O(V)))R(H)},_0=(H)=>{if(R(H),H&&O(H).isBefore(O(K)))W(H)},a=(H)=>{if(v(H),O(K).isSame(O(V),"day")&&H>y)I(H)},j=(H)=>{if(I(H),O(K).isSame(O(V),"day")&&H<k)v(H)},T0=(H)=>{let{name:z0,value:F0}=H.target;S((F)=>({...F,[z0]:F0}))};w1(()=>{if(M)I("23:59")},[M]);let r0=(H)=>{H.preventDefault();let z0=_5(K,k,M),F0=r5(V,y,M),F={id:P?.id||O().format("YYYYMMDDHHmmss"),title:g.title,start:z0,end:F0,resourceId:P?.resourceId,description:g.description,location:g.location,allDay:M,color:h,rrule:Q0||void 0};if(P?.id&&s0(P)){_(P,{title:g.title,start:z0,end:F0,description:g.description,location:g.location,allDay:M,color:h,rrule:Q0||void 0});return}if(P?.id)$?.(F);else J?.(F);f()},n0=()=>{if(P?.id){if(s0(P)){q(P);return}X?.(P),f()}},t0=(H)=>{if(!H){N0(null);return}let z0=_5(K,k,M);N0({...H,dtstart:z0.toDate()})},j0=p?(H)=>!AP(O(H),p):void 0,i0=Y5(K,p),o0=Y5(V,p);return r(T1,{children:[D(e0,{onOpenChange:f,open:!0,children:r(PP,{className:"flex flex-col h-[90vh] w-[90vw] max-w-[500px] p-4 sm:p-6 overflow-hidden gap-0",children:[r(fP,{className:"mb-2 sm:mb-4 shrink-0",children:[D($P,{className:"text-base sm:text-lg",children:P?.id?z("editEvent"):z("createEvent")}),D(hP,{className:"text-xs sm:text-sm",children:P?.id?z("editEventDetails"):z("addNewEvent")})]}),r("form",{className:"flex flex-col flex-1 min-h-0",onSubmit:r0,children:[D(A0,{className:"flex-1 min-h-0",children:r("div",{className:"grid gap-3 sm:gap-4 p-1",children:[r("div",{className:"grid gap-2",children:[D(d,{className:"text-xs sm:text-sm",htmlFor:"title",children:z("title")}),D(H0,{className:"h-8 text-sm sm:h-9",id:"title",name:"title",onChange:T0,placeholder:z("eventTitlePlaceholder"),required:!0,value:g.title})]}),r("div",{className:"grid gap-1 sm:gap-2",children:[D(d,{className:"text-xs sm:text-sm",htmlFor:"description",children:z("description")}),D(H0,{className:"h-8 text-sm sm:h-9",id:"description",name:"description",onChange:T0,placeholder:z("eventDescriptionPlaceholder"),value:g.description})]}),r("div",{className:"flex items-center space-x-2",children:[D(g0,{checked:M,id:"allDay",onCheckedChange:(H)=>b(H===!0)}),D(d,{className:"text-xs sm:text-sm",htmlFor:"allDay",children:z("allDay")})]}),r("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[r("div",{children:[D(d,{className:"text-xs sm:text-sm",children:z("startDate")}),D(BP,{className:"mt-1",closeOnSelect:!0,date:K,disabled:j0,onChange:P0})]}),r("div",{children:[D(d,{className:"text-xs sm:text-sm",children:z("endDate")}),D(BP,{className:"mt-1",closeOnSelect:!0,date:V,disabled:j0,onChange:_0})]})]}),!M&&r("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[r("div",{children:[D(d,{className:"text-xs sm:text-sm",children:z("startTime")}),D(q5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:i0.max,minTime:i0.min,name:"start-time",onChange:a,timeFormat:A,value:k})]}),r("div",{children:[D(d,{className:"text-xs sm:text-sm",children:z("endTime")}),D(q5,{className:"mt-1 h-8 text-sm sm:h-9",maxTime:o0.max,minTime:o0.min,name:"end-time",onChange:j,timeFormat:A,value:y})]})]}),r("div",{className:"grid gap-1 sm:gap-2",children:[D(d,{className:"text-xs sm:text-sm",children:z("color")}),D("div",{className:"flex flex-wrap gap-2",children:U2.map((H)=>D(C,{"aria-label":H.label,className:U(`${H.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,h===H.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>E(H.value),type:"button",variant:"ghost"},H.value))})]}),r("div",{className:"grid gap-1 sm:gap-2",children:[D(d,{className:"text-xs sm:text-sm",htmlFor:"location",children:z("location")}),D(H0,{className:"h-8 text-sm sm:h-9",id:"location",name:"location",onChange:T0,placeholder:z("eventLocationPlaceholder"),value:g.location})]}),D(_2,{onChange:t0,value:Q0})]})}),r(TP,{className:"mt-4 shrink-0 flex flex-col-reverse gap-2 sm:flex-row sm:gap-0",children:[P?.id&&D(C,{className:"w-full sm:mr-auto sm:w-auto",onClick:n0,size:"sm",type:"button",variant:"destructive",children:z("delete")}),r("div",{className:"flex w-full gap-2 sm:w-auto",children:[D(C,{className:"flex-1 sm:flex-none",onClick:f,size:"sm",type:"button",variant:"outline",children:z("cancel")}),D(C,{className:"flex-1 sm:flex-none",size:"sm",type:"submit",children:P?.id?z("update"):z("create")})]})]})]})]})}),D(pP,{eventTitle:Z.event?.title||"",isOpen:Z.isOpen,onClose:Q,onConfirm:Y,operationType:Z.operationType})]})};import{Calendar as t1,Download as a1,Menu as s1,Plus as e1}from"lucide-react";import{useState as P4}from"react";import{RRule as h1}from"rrule";var z5=`\r
|
|
2
|
+
`,g1=["BEGIN:VTIMEZONE","TZID:UTC","BEGIN:STANDARD","DTSTART:19700101T000000","TZNAME:UTC","TZOFFSETFROM:+0000","TZOFFSETTO:+0000","END:STANDARD","END:VTIMEZONE"].join(z5),oP=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
|
|
3
|
+
`,"\\n").replaceAll("\r","")},iP=(P,f=!1)=>{return f?P.format("YYYYMMDD"):P.utc().format("YYYYMMDD[T]HHmmss[Z]")},K2=(P)=>{return P.uid||`${P.id}@ilamy.calendar`},m1=(P)=>{try{return new h1(P).toString().split(`
|
|
4
|
+
`).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},k1=(P)=>{let f=O().utc().format("YYYYMMDD[T]HHmmss[Z]"),$=P.allDay?";VALUE=DATE":"",X=P.rrule?m1(P.rrule):"",J=P.exdates?.length?P.exdates.map((q)=>iP(O(q),P.allDay)).join(","):null,Z=P.recurrenceId?iP(O(P.recurrenceId),P.allDay):null;return["BEGIN:VEVENT",`UID:${K2(P)}`,`DTSTART${$}:${iP(P.start,P.allDay)}`,`DTEND${$}:${iP(P.end,P.allDay)}`,`SUMMARY:${oP(P.title)}`,P.description&&`DESCRIPTION:${oP(P.description)}`,P.location&&`LOCATION:${oP(P.location)}`,X,J&&`EXDATE:${J}`,Z&&`RECURRENCE-ID:${Z}`,`DTSTAMP:${f}`,`CREATED:${f}`,`LAST-MODIFIED:${f}`,"STATUS:CONFIRMED","SEQUENCE:0","TRANSP:OPAQUE","END:VEVENT"].filter(Boolean).join(z5)},C1=(P)=>{let f=new Set;return P.filter(($)=>{let X=K2($),J=$.rrule&&!$.recurrenceId,Z=$.recurrenceId&&!$.rrule;if(J)return f.add(X),!0;if(Z)return!0;return!$.rrule&&!$.recurrenceId&&!f.has(X)})},D1=(P,f="ilamy Calendar")=>{let $=oP(f),X=C1(P).map(k1);return["BEGIN:VCALENDAR","VERSION:2.0","PRODID:-//ilamy//ilamy Calendar//EN","CALSCALE:GREGORIAN","METHOD:PUBLISH",`X-WR-CALNAME:${$}`,`X-WR-CALDESC:Exported from ${$}`,g1,...X,"END:VCALENDAR"].join(z5)},z2=(P,f="calendar.ics",$="ilamy Calendar")=>{let X=new Blob([D1(P,$)],{type:"text/calendar;charset=utf-8"}),J=URL.createObjectURL(X),Z=f.endsWith(".ics")?f:`${f}.ics`,_=document.createElement("a");_.href=J,_.download=Z,document.body.append(_),_.click(),_.remove(),URL.revokeObjectURL(J)};import{ChevronDown as E1}from"lucide-react";import{AnimatePresence as x1,motion as v1}from"motion/react";import{useMemo as u1,useState as y1}from"react";import{jsx as n,jsxs as dP,Fragment as cP}from"react/jsx-runtime";var j1=["january","february","march","april","may","june","july","august","september","october","november","december"],i1={initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10}},o1=()=>{let{currentDate:P,view:f,setCurrentDate:$,t:X,firstDayOfWeek:J}=T((K)=>({currentDate:K.currentDate,view:K.view,setCurrentDate:K.setCurrentDate,t:K.t,firstDayOfWeek:K.firstDayOfWeek})),[Z,_]=y1(null),q=u1(()=>j1.map((K)=>X(K)),[X]),Q=P.year(),Y=Array.from({length:11},(K,W)=>Q-5+W),N=$0(P,J),z=(K)=>{$(K),_(null)},p=()=>n(cP,{children:q.map((K,W)=>n(C,{className:U("justify-start font-normal",P.month()===W&&"bg-primary/10"),onClick:()=>z(P.month(W)),variant:"ghost",children:K},K))}),A=()=>n(cP,{children:Y.map((K)=>n(C,{className:U("justify-start font-normal",P.year()===K&&"bg-primary/10"),onClick:()=>z(P.year(K)),variant:"ghost",children:K},K))}),G=()=>n(cP,{children:Array.from({length:7},(K,W)=>{let V=P.subtract(3,"week").add(W,"week"),R=$0(V,J),M=R[0],b=R[6],h=V.isSame(P,"week"),E=M.month()!==b.month();return n(C,{className:U("justify-start font-normal",h&&"bg-primary/10"),onClick:()=>z(M),variant:"ghost",children:dP("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:`${M.format("MMM D")} - ${b.format("D")}`}),E&&n("span",{className:"ml-0.5 text-xs opacity-70",children:`${M.format("MMM")}-${b.format("MMM")}`})]})},M.format("YYYY-MM-DD"))})}),L=()=>{let K=P.startOf("month"),W=P.daysInMonth();return n(cP,{children:Array.from({length:W},(V,R)=>{let M=K.date(R+1),b=M.isSame(P,"day"),h=M.isSame(O(),"day");return n(C,{className:U("justify-start font-normal",b&&"bg-primary/10"),onClick:()=>z(M),variant:"ghost",children:dP("div",{className:"flex w-full items-center justify-between",children:[n("span",{children:M.format("dddd, MMM D")}),h&&n("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:X("today")})]})},M.format("YYYY-MM-DD"))})})};return[{id:"month",hidden:f==="year",title:P.format("MMMM"),render:p},{id:"year",hidden:!1,title:P.format("YYYY"),render:A},{id:"week",hidden:f!=="week",title:`${N[0].format("MMM D")} - ${N[6].format("MMM D")}`,render:G},{id:"day",hidden:f!=="day",title:P.format("dddd, D"),render:L}].filter((K)=>!K.hidden).map((K)=>dP(k0,{onOpenChange:(W)=>_(W?K.id:null),open:Z===K.id,children:[n(C0,{asChild:!0,children:dP(C,{className:"flex items-center gap-1 px-1! font-semibold","data-testid":"calendar-month-button",variant:"ghost",children:[n(x1,{mode:"wait",children:n(v1.span,{animate:"animate","data-testid":"calendar-month-display",exit:"exit",initial:"initial",transition:{duration:0.25,ease:"easeInOut"},variants:i1,children:K.title},`${K.id}-${P.format("YYYY-MM-DD")}`)}),n(E1,{className:"h-4 w-4"})]})}),n(D0,{className:"w-40 p-0",children:n("div",{className:"flex max-h-60 flex-col overflow-auto",children:K.render()})})]},K.id))},L2=o1;import{ChevronLeft as c1,ChevronRight as d1}from"lucide-react";import{jsx as qP,jsxs as n1}from"react/jsx-runtime";var l1=["day","week","month","year"],r1=({currentView:P,onChange:f,variant:$="default",size:X="sm",className:J,onToday:Z,onNext:_,onPrevious:q})=>{let{t:Q,resources:Y}=T((G)=>({t:G.t,resources:G.resources})),N=$==="grid",z=Y&&Y.length>0,p=(G)=>{return U(N?"w-full":"",P===G&&"bg-primary/80")},A=(G)=>{return P===G?"default":"outline"};return n1("div",{className:U(N?"grid grid-cols-2 gap-2":"flex gap-1",J),children:[qP(C,{onClick:q,size:X,variant:"outline",children:qP(c1,{className:"h-4 w-4"})}),qP(C,{onClick:_,size:X,variant:"outline",children:qP(d1,{className:"h-4 w-4"})}),l1.map((G)=>{if(z&&G==="year")return null;return qP(C,{className:p(G),onClick:()=>f(G),size:X,variant:A(G),children:Q(G)},G)}),qP(C,{onClick:Z,size:X,variant:"outline",children:Q("today")})]})},L5=r1;import{jsx as t,jsxs as S0}from"react/jsx-runtime";var f4=({className:P=""})=>{let{view:f,setView:$,nextPeriod:X,prevPeriod:J,today:Z,openEventForm:_,headerComponent:q,headerClassName:Q,rawEvents:Y,t:N}=T((K)=>({view:K.view,setView:K.setView,nextPeriod:K.nextPeriod,prevPeriod:K.prevPeriod,today:K.today,openEventForm:K.openEventForm,headerComponent:K.headerComponent,headerClassName:K.headerClassName,rawEvents:K.rawEvents,t:K.t})),[z,p]=P4(!1),A=()=>p(!1),G=()=>{let K=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;z2(Y,K,"ilamy Calendar"),A()},L=()=>S0(C,{className:"flex items-center gap-1",onClick:()=>_(),size:"sm",variant:"default",children:[t(e1,{className:"h-4 w-4"}),t("span",{className:"hidden @4xl:inline",children:N("new")})]}),B=({fullWidth:K=!1})=>S0(C,{className:U("flex items-center gap-1",K&&"w-full gap-2"),onClick:G,size:"sm",variant:"outline",children:[t(a1,{className:"h-4 w-4"}),K?`${N("export")} Calendar (.ics)`:t("span",{className:"hidden @4xl/base-header:inline",children:N("export")})]});if(q)return q;return t("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:S0("div",{className:U("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2",P,Q),children:[S0("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[t(t1,{className:"h-5 w-5"}),t(L2,{})]}),S0("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[S0("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[t(L5,{className:"justify-end",currentView:f,onChange:$,onNext:X,onPrevious:J,onToday:Z,variant:"default"}),t(L,{}),t(B,{})]}),S0("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[t(L,{}),S0(k0,{onOpenChange:p,open:z,children:[t(C0,{asChild:!0,children:t(C,{size:"sm",variant:"outline",children:t(s1,{className:"h-4 w-4"})})}),t(D0,{align:"end",className:"w-[240px] p-2",children:S0("div",{className:"space-y-2",children:[t(L5,{currentView:f,onChange:(K)=>{$(K),A()},onNext:()=>{X(),A()},onPrevious:()=>{J(),A()},onToday:()=>{Z(),A()},variant:"grid"}),t("div",{className:"pt-2 border-t",children:t(B,{fullWidth:!0})})]})})]})]})]})]})})},VP=f4;import{AnimatePresence as y4,motion as j4}from"motion/react";import{memo as H4}from"react";import{memo as V4}from"react";import N4,{memo as G4,useMemo as p4}from"react";import{jsx as $4}from"react/jsx-runtime";var N2=({date:P,locale:f="en",className:$})=>{let X=P.isSame(O(),"day");return $4("div",{className:U("flex h-5 w-5 items-center justify-center rounded-full text-xs shrink-0",X&&"bg-primary text-primary-foreground font-medium",$),"data-testid":X?"day-number-today":`day-number-${P.format("D")}`,children:Intl.DateTimeFormat(f,{day:"numeric"}).format(P.toDate())})};import{useImperativeHandle as U4,useState as G2}from"react";import{useDraggable as Z4}from"@dnd-kit/core";import{AnimatePresence as X4,motion as J4}from"motion/react";import{memo as Q4}from"react";import{jsx as _P,jsxs as Y4}from"react/jsx-runtime";var q4=(P,f)=>{if(P&&f)return"rounded-none";if(P)return"rounded-r-md rounded-l-none";if(f)return"rounded-l-md rounded-r-none";return"rounded-md"};function _4({elementId:P,event:f,className:$,style:X,disableDrag:J=!1}){let{onEventClick:Z,renderEvent:_,disableEventClick:q,disableDragAndDrop:Q}=T((G)=>({onEventClick:G.onEventClick,renderEvent:G.renderEvent,disableEventClick:G.disableEventClick,disableDragAndDrop:G.disableDragAndDrop})),{attributes:Y,listeners:N,setNodeRef:z,isDragging:p}=Z4({id:P,data:{event:f,type:"calendar-event"},disabled:J||Q}),A=()=>{let G=f,L=G.isTruncatedStart,B=G.isTruncatedEnd;return Y4("div",{className:U(f.backgroundColor||"bg-blue-500",f.color||"text-white","h-full w-full px-1 border-[1.5px] border-card text-left overflow-clip relative",q4(L,B)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[L&&_P("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),_P("p",{className:U("text-[10px] font-semibold sm:text-xs mt-0.5",L&&"pl-1",B&&"pr-1"),children:f.title}),B&&_P("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return _P(X4,{mode:"wait",children:_P(J4.div,{ref:z,...Y,...N,animate:{opacity:1,y:0},className:U("truncate h-full w-full",J||Q?q?"cursor-default":"cursor-pointer":"cursor-grab",p&&!(J||Q)&&"cursor-grabbing shadow-lg",$),exit:{opacity:0,y:-50},initial:{opacity:0,y:-50},layout:!0,layoutId:P,onClick:(G)=>{G.stopPropagation(),Z(f)},style:X,transition:{duration:0.4,ease:"easeInOut"},children:_?_(f):_P(A,{})},P)})}var YP=Q4(_4,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{jsx as OP,jsxs as K4}from"react/jsx-runtime";var p2=({ref:P})=>{let[f,$]=G2(!1),[X,J]=G2(null),{currentDate:Z,firstDayOfWeek:_}=T((Y)=>({currentDate:Y.currentDate,firstDayOfWeek:Y.firstDayOfWeek}));U4(P,()=>({open:()=>$(!0),close:()=>$(!1),setSelectedDayEvents:(Y)=>J(Y)}));let Q=Z.startOf("month").clone();while(Q.day()!==_)Q=Q.subtract(1,"day");return OP(e0,{onOpenChange:$,open:f,children:K4(PP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[OP(fP,{children:OP($P,{children:X?.day.format("MMMM D, YYYY")})}),OP("div",{className:"mt-4 space-y-3",children:X?.events.map((Y)=>{return OP(YP,{className:"relative my-1 h-[30px]",elementId:`all-events-dialog-event-$${Y.id}`,event:Y},Y.id)})})]})})};import{useDroppable as z4}from"@dnd-kit/core";import{jsx as L4}from"react/jsx-runtime";function B2({id:P,type:f,date:$,hour:X,minute:J,resourceId:Z,allDay:_,children:q,className:Q,style:Y,"data-testid":N,disabled:z=!1}){let{onCellClick:p,disableDragAndDrop:A,disableCellClick:G,classesOverride:L}=T((V)=>({onCellClick:V.onCellClick,disableDragAndDrop:V.disableDragAndDrop,disableCellClick:V.disableCellClick,classesOverride:V.classesOverride})),{isOver:B,setNodeRef:K}=z4({id:P,data:{type:f,date:$,hour:X,minute:J,resourceId:Z,allDay:_},disabled:A||z}),W=(V)=>{if(V.stopPropagation(),G||z)return;let R=$.hour(X??0).minute(J??0),M=R.clone();if(X!==void 0&&J!==void 0)M=M.hour(X).minute(J+15);else if(X!==void 0)M=M.hour(X+1).minute(0);else M=M.hour(23).minute(59);p({start:R,end:M,resourceId:Z,allDay:_})};return L4("div",{className:U("droppable-cell",Q,B&&!A&&!z&&"bg-accent",G||z?"cursor-default":"cursor-pointer",z&&(L?.disabledCell||S5)),"data-testid":N,onClick:W,ref:K,style:Y,children:q})}import{jsx as lP,jsxs as rP,Fragment as W2}from"react/jsx-runtime";var B4=({day:P,hour:f,minute:$,className:X="",resourceId:J,gridType:Z="day",shouldRenderEvents:_=!0,allDay:q=!1,"data-testid":Q,showDayNumber:Y=!1,children:N})=>{let z=N4.useRef(null),{dayMaxEvents:p=0,getEventsForDateRange:A,currentDate:G,t:L,getEventsForResource:B,businessHours:K,currentLocale:W}=T((I)=>({dayMaxEvents:I.dayMaxEvents,getEventsForDateRange:I.getEventsForDateRange,currentDate:I.currentDate,firstDayOfWeek:I.firstDayOfWeek,t:I.t,getEventsForResource:I.getEventsForResource,businessHours:I.businessHours,currentLocale:I.currentLocale})),V=p4(()=>{if(!_)return[];let I=A(P.startOf(Z),P.endOf(Z));if(q)I=I.filter((g)=>g.allDay);if(J){let g=B(J)??[];return I.filter((S)=>g.some((Q0)=>String(Q0.id)===String(S.id)))}return I},[P,J,A,B,Z,_,q]),R=(I,g)=>{z.current?.setSelectedDayEvents({day:I,events:g}),z.current?.open()},M=P.month()===G.month(),b=V.length-p,h=b>0,E=l5({date:P,hour:Z==="hour"?P.hour():void 0,businessHours:K}),k=P.format("HH"),v=P.format("mm"),y=Z==="hour"?`day-cell-${P.format("YYYY-MM-DD")}-${k}-${v}`:`day-cell-${P.format("YYYY-MM-DD")}`;return rP(W2,{children:[lP(B2,{allDay:q,className:U("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px] relative border-r last:border-r-0 only:border-r border-b",X),"data-testid":Q||y,date:P,disabled:!E||!M,hour:f,id:`day-cell-${P.toISOString()}${J?`-resource-${J}`:""}`,minute:$,resourceId:J,type:"day-cell",children:rP("div",{className:"flex flex-col gap-1 h-full w-full",children:[Y&&lP(N2,{date:P,locale:W}),_&&rP(W2,{children:[V.slice(0,p).map((I,g)=>lP("div",{className:"h-5 w-full","data-testid":I?.title},`empty-${g}-${I.id}`)),h&&rP("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(I)=>{I.stopPropagation(),R(P,V)},onKeyDown:(I)=>{if(I.key==="Enter"||I.key===" ")I.preventDefault(),I.stopPropagation(),R(P,V)},role:"button",tabIndex:0,children:["+",b," ",L("more")]})]}),N]})}),lP(p2,{ref:z})]})},nP=G4(B4);import{jsx as A2}from"react/jsx-runtime";var v0=({resource:P,className:f,children:$,"data-testid":X})=>{return A2("div",{className:U("flex items-center justify-center p-2 flex-1 border-r last:border-r-0",f),"data-testid":X,style:{color:P.color,backgroundColor:P.backgroundColor},children:$??A2("div",{className:"text-sm font-medium truncate",children:P.title})})};import{memo as W4}from"react";import{useMemo as O2}from"react";var V2=({days:P,events:f,dayMaxEvents:$,dayNumberHeight:X=I5,gridType:J="day",eventSpacing:Z=h0})=>{let _=P[0].startOf("day"),q=P.at(-1).endOf("day"),Q=P.length,Y=f.filter((L)=>L.end.diff(L.start,J)>0),N=f.filter((L)=>L.end.diff(L.start,J)===0),z=[...Y].sort((L,B)=>{let K=L.start.diff(B.start);if(K!==0)return K;return B.end.diff(B.start)-L.end.diff(L.start)}),p=[...N].sort((L,B)=>L.start.diff(B.start)),A=[];for(let L=0;L<$;L++){A[L]=[];for(let B=0;B<Q;B++)A[L][B]={taken:!1,event:null}}let G=[];for(let L of z){let B=O.max(L.start.startOf(J),_),K=J==="hour"?L.end.subtract(1,"minute"):L.end,W=O.min(K.startOf(J),q),V=Math.max(0,B.diff(_,J)),R=Math.min(Q-1,W.diff(_,J)),M=L.start.startOf(J).isBefore(_),b=L.end.startOf(J).isAfter(q),h=!1,E=-1;for(let k=0;k<$;k++){let v=!0;for(let y=V;y<=R;y++)if(A[k][y].taken){v=!1;break}if(v){E=k;break}}if(E!==-1){for(let v=V;v<=R;v++)A[E][v]={taken:!0,event:L};let k=R-V+1;G.push({left:V/Q*100,width:k/Q*100,top:X+Z+E*(M0+Z),height:M0,position:E,...L,isTruncatedStart:M,isTruncatedEnd:b}),h=!0}if(!h)for(let k=V+1;k<=R;k++){let v=-1;for(let y=0;y<$;y++){let I=!0;for(let g=k;g<=R;g++)if(A[y][g].taken){I=!1;break}if(I){v=y;break}}if(v!==-1){for(let I=k;I<=R;I++)A[v][I]={taken:!0,event:L};let y=R-k+1;G.push({left:k/Q*100,width:y/Q*100,top:X+Z+v*(M0+Z),height:M0,position:v,...L,isTruncatedStart:!0,isTruncatedEnd:b}),h=!0;break}}}for(let L of p){let B=O.max(L.start.startOf(J),_),K=Math.max(0,Math.min(Q-1,B.diff(_,J))),W=!1,V=!1,R=-1;for(let M=0;M<$;M++)if(!A[M][K].taken){R=M;break}if(R!==-1)A[R][K]={taken:!0,event:L},G.push({left:K/Q*100,width:1/Q*100,top:X+Z+R*(M0+Z),height:M0,position:R,...L,isTruncatedStart:!1,isTruncatedEnd:!1})}return G};var F2=({days:P,allDay:f,dayNumberHeight:$,resourceId:X,gridType:J})=>{let{getEventsForDateRange:Z,dayMaxEvents:_,eventSpacing:q,getEventsForResource:Q}=T((A)=>({getEventsForDateRange:A.getEventsForDateRange,dayMaxEvents:A.dayMaxEvents,eventSpacing:A.eventSpacing,getEventsForResource:A.getEventsForResource})),Y=P.at(0).startOf("day"),N=P.at(-1).endOf("day"),z=O2(()=>{let A=Z(Y,N);if(X){let G=Q(X);A=A.filter((L)=>G.some((B)=>String(B.id)===String(L.id)))}if(f)A=A.filter((G)=>!!G.allDay===f);return A},[Z,Q,Y,N,X,f]);return O2(()=>{return V2({days:P,events:z,dayMaxEvents:_,dayNumberHeight:$,eventSpacing:q,gridType:J})},[P,_,$,q,z,J])};import{jsx as N5}from"react/jsx-runtime";var A4=({days:P,gridType:f="day",resourceId:$,dayNumberHeight:X,"data-testid":J,allDay:Z})=>{let _=P.at(0).startOf("day"),q=F2({days:P,gridType:f,resourceId:$,dayNumberHeight:X,allDay:Z});return N5("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":J,children:q.map((Q)=>{let Y=`${Q.id}-${Q.position}-${_.toISOString()}-${$??"no-resource"}`;return N5("div",{className:"absolute z-10 pointer-events-auto overflow-clip","data-testid":`horizontal-event-${Q.id}`,style:{left:`calc(${Q.left}% + var(--spacing) * 0.25)`,width:`calc(${Q.width}% - var(--spacing) * 1)`,top:`${Q.top}px`,height:`${M0}px`},children:N5(YP,{className:"h-full w-full shadow",elementId:Y,event:Q})},`${Y}-wrapper`)})})},M2=W4(A4);import{jsx as UP,jsxs as R2}from"react/jsx-runtime";var O4=({id:P,resource:f,gridType:$="day",variant:X="resource",dayNumberHeight:J,className:Z,columns:_=[],allDay:q,showDayNumber:Q=!1,isLastRow:Y=!1})=>{let{renderResource:N}=T((p)=>({renderResource:p.renderResource})),z=X==="resource";return R2("div",{className:U("flex flex-1 relative min-h-[60px]",Z),"data-testid":`horizontal-row-${P}`,children:[z&&UP(v0,{className:"w-40 min-w-40 max-w-40 sticky left-0 bg-background z-20 h-full","data-testid":`horizontal-row-label-${f?.id}`,resource:f,children:N?N(f):UP("div",{className:"wrap-break-word text-sm",children:f?.title})}),R2("div",{className:"relative flex-1 flex",children:[UP("div",{className:"flex w-full",children:_.map((p)=>{return UP(nP,{allDay:q,className:U("flex-1 w-20",Y&&"border-b-0",p.className),day:p.day,gridType:$,hour:$==="hour"?p.day.hour():void 0,resourceId:f?.id,showDayNumber:Q},p.day.toISOString())})}),UP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:UP(M2,{allDay:q,"data-testid":`horizontal-events-${P}`,dayNumberHeight:J,days:_.map((p)=>p.day).filter(Boolean),gridType:$,resourceId:f?.id})})]})]})},tP=V4(O4);import{memo as F4}from"react";import{jsx as R4}from"react/jsx-runtime";var M4=({className:P})=>{let{t:f}=T(($)=>({t:$.t}));return R4("div",{className:U("w-16 border-r shrink-0 sticky left-0 bg-background z-20 flex items-center justify-center sm:text-xs text-muted-foreground",P),children:f("allDay")})},KP=F4(M4);import{jsx as H2,jsxs as S4}from"react/jsx-runtime";var I4=({days:P,classes:f,resource:$,showSpacer:X=!0})=>{let J=P.map((Z,_)=>({id:`allday-col-${Z.toISOString()}-${_}`,day:Z,gridType:"day",className:U("h-full min-h-12 border-r last:border-r-0",f?.cell)}));return S4("div",{className:U("flex w-full",f?.row),"data-testid":"all-day-row",children:[X&&H2(KP,{className:f?.spacer}),H2(tP,{allDay:!0,className:"flex-1 min-h-fit",columns:J,dayNumberHeight:0,gridType:"day",id:`all-day-row-${$?.id??"main"}`,isLastRow:!0,resource:$,variant:"regular"})]})},u0=H4(I4);import{memo as C4}from"react";import{memo as g4}from"react";import w4 from"dayjs";import{memo as b4}from"react";import{jsx as h4}from"react/jsx-runtime";var T4=({rangeStart:P,rangeEnd:f,now:$})=>{let X=$??w4();if(!(X.isSameOrAfter(P)&&X.isBefore(f)))return null;let Z=f.diff(P,"minute"),q=X.diff(P,"minute")/Z*100;return h4("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:`${q}%`}})},I2=b4(T4);import{useMemo as w2}from"react";var S2=({days:P,gridType:f="hour",events:$})=>{let X=$.filter((z)=>!z.allDay).toSorted((z,p)=>z.start.diff(p.start));if(X.length===0)return[];let J=P.at(0)?.startOf("day")||O(),Z=P.length,_=f==="day",q=[],Q=[],Y=null;for(let z of X){if(Y&&z.start.isSameOrAfter(Y)){if(Q.length>0)q.push(Q);Q=[]}Q.push(z),Y=Y?O.max(Y,z.end):z.end}if(Q.length>0)q.push(Q);let N=[];for(let z of q){if(z.length===1){let B=z[0],K=B.start.diff(J,f,!0),W=B.end.diff(J,f,!0);if(_){if(K=Math.floor(K),W=Math.ceil(W),W<=K)W=K+1}if(K<0)K=0;if(W>Z)W=Z;let V=Math.max(0,W-K);if(V===0)continue;let R=K/Z*100,M=V/Z*100;N.push({...B,left:0,width:100,top:R,height:M});continue}let p=[...z].sort((B,K)=>{let W=B.end.diff(B.start,"minute"),V=K.end.diff(K.start,"minute");if(W!==V)return V-W;return B.start.diff(K.start)}),A=p.length,G;if(A===2)G=25;else if(A===3)G=50;else if(A===4)G=60;else G=70;let L=A>1?G/(A-1):0;for(let B=0;B<p.length;B++){let K=p[B],W=K.start.diff(J,f,!0),V=K.end.diff(J,f,!0);if(_){if(W=Math.floor(W),V=Math.ceil(V),V<=W)V=W+1}if(W<0)W=0;if(V>Z)V=Z;let R=Math.max(0,V-W);if(R===0)continue;let M=W/Z*100,b=R/Z*100,h,E,k;if(B===0)h=0,E=100,k=1;else h=L*B,E=100-h,k=B+1;N.push({...K,left:h,width:E,top:M,height:b,zIndex:k})}}return N};var b2=({days:P,gridType:f,resourceId:$})=>{let{getEventsForDateRange:X,getEventsForResource:J}=T((Y)=>({getEventsForDateRange:Y.getEventsForDateRange,getEventsForResource:Y.getEventsForResource})),Z=P.at(0).startOf("day"),_=P.at(-1).endOf("day"),q=w2(()=>{let Y=X(Z,_);if($){let N=J($);Y=Y.filter((z)=>N.some((p)=>String(p.id)===String(z.id)))}return Y.filter((N)=>!N.allDay)},[Z,_,X,$,J]);return w2(()=>{return S2({days:P,events:q,gridType:f})},[P,f,q])};import{jsx as G5,jsxs as k4}from"react/jsx-runtime";var m4=({days:P,gridType:f="hour",resourceId:$,"data-testid":X})=>{let J=b2({days:P,gridType:f,resourceId:$}),Z=P.at(0),_=P.at(-1)?.add(1,f);return k4("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip","data-testid":X,children:[Z&&_&&G5(I2,{rangeEnd:_,rangeStart:Z}),J.map((q,Q)=>{let Y=`event-${q.id}-${Q}-${P.at(0).toISOString()}-${$??"no-resource"}`,N=q.end.diff(q.start,"minute")<=15;return G5("div",{className:"absolute",style:{left:`${q.left}%`,width:`calc(${q.width}% - var(--spacing) * 2)`,top:`${q.top}%`,height:`${q.height}%`},children:G5(YP,{className:U("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":N}),elementId:Y,event:q})},`${Y}-wrapper`)})]})},T2=g4(m4);import{jsx as FP,jsxs as E4}from"react/jsx-runtime";var D4=({id:P,days:f,resourceId:$,"data-testid":X,gridType:J,className:Z,renderCell:_,noEvents:q,cellSlots:Q=[60],isLastColumn:Y})=>{return FP("div",{className:U("flex flex-col flex-1 items-center justify-center min-w-50 bg-background relative",Z),"data-testid":X||`vertical-col-${P}`,children:E4("div",{className:"w-full relative grid",style:{gridTemplateRows:`repeat(${f.length}, minmax(0, 1fr))`},children:[f.map((N)=>{let z=N.format("HH"),p=N.format("YYYY-MM-DD");if(_){let A=P==="time-col"?`vertical-time-${z}`:`vertical-cell-${p}-${z}-00${$?`-${$}`:""}`;return FP("div",{className:"h-[60px] border-b border-r","data-testid":A,children:_(N)},`${p}-${z}`)}return Q.map((A)=>{let G=A===60?void 0:A,L=G===void 0?"00":String(G).padStart(2,"0"),B=`vertical-cell-${p}-${z}-${L}${$?`-${$}`:""}`;return FP(nP,{className:U("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b",A===60?"":"border-dashed h-[15px] min-h-[15px]",Y?"border-r-0":"border-r"),"data-testid":B,day:G?N.minute(G):N,gridType:J,hour:N.hour(),minute:G,resourceId:$,shouldRenderEvents:!1},`${p}-${z}-${L}-${$||"no-resource"}`)})}),!q&&FP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:FP(T2,{"data-testid":`vertical-events-${P}`,days:f,gridType:J,resourceId:$})})]})})},h2=C4(D4);import{memo as x4}from"react";import{jsx as g2,jsxs as u4}from"react/jsx-runtime";var v4=({children:P,classes:f,allDayRow:$})=>{let{stickyViewHeader:X,viewHeaderClassName:J}=T((Z)=>({stickyViewHeader:Z.stickyViewHeader,viewHeaderClassName:Z.viewHeaderClassName}));return u4("div",{className:U(X&&"sticky top-0 z-21 bg-background",J),children:[g2("div",{className:U("h-12 border-b w-fit",f?.header),"data-testid":"vertical-grid-header",children:P}),$&&g2("div",{className:U("flex w-full border-b min-h-12 h-full",f?.allDay),"data-testid":"vertical-grid-all-day",children:$})]})},m2=x4(v4);import{jsx as MP,jsxs as C2}from"react/jsx-runtime";var k2="h-[calc(100%-3rem)]",V0=({columns:P,children:f,gridType:$="day",variant:X="resource",classes:J,allDayRow:Z,cellSlots:_})=>{let q=X==="resource",Q=!q,Y=f&&MP(m2,{allDayRow:Z,classes:{header:J?.header,allDay:J?.allDay},children:f});return C2("div",{className:"h-full border",children:[Q&&Y,C2(A0,{className:U("h-full",Q&&"overflow-auto",Q&&k2),"data-testid":"vertical-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[q&&Y,MP("div",{className:U("flex flex-1 w-fit",q&&k2,J?.body),"data-testid":"vertical-grid-body",children:P.map((N,z)=>MP(h2,{...N,cellSlots:_,gridType:$,isLastColumn:z===P.length-1},`${N.id}-${z}`))}),MP(I0,{className:"z-30"})," ",MP(I0,{className:"z-30",orientation:"horizontal"})," "]})]})};import{jsx as l0,jsxs as o4}from"react/jsx-runtime";var i4=()=>{let{currentDate:P,currentLocale:f,timeFormat:$,t:X}=K0(),J=P.isSame(O(),"day"),Z=q0({referenceDate:P}),_={id:"time-col",day:void 0,days:Z,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(Q)=>l0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(f,{hour:"numeric",hour12:$==="12-hour"}).format(Q.toDate())})},q={id:`day-col-${P.format("YYYY-MM-DD")}`,day:P,days:Z,className:"w-[calc(100%-4rem)] flex-1",gridType:"hour"};return l0(V0,{allDayRow:l0(u0,{days:[P]}),cellSlots:[0,15,30,45],classes:{header:"w-full",body:"w-full",allDay:"w-full"},columns:[_,q],gridType:"hour",variant:"regular",children:l0("div",{className:"flex h-full flex-1 justify-center items-center","data-testid":"day-view-header",children:l0(y4,{mode:"wait",children:o4(j4.div,{animate:{opacity:1,y:0},className:U("flex justify-center items-center text-center text-base font-semibold sm:text-xl",J&&"text-primary"),exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut"},children:[l0("span",{className:"xs:inline hidden",children:P.format("dddd, ")}),P.format("MMMM D, YYYY"),J&&l0("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:X("today")})]},P.format("YYYY-MM-DD"))})})})},D2=i4;import{useMemo as t4}from"react";import{memo as c4}from"react";import{jsx as l4}from"react/jsx-runtime";var d4=({children:P,className:f})=>{let{stickyViewHeader:$,viewHeaderClassName:X}=T((J)=>({stickyViewHeader:J.stickyViewHeader,viewHeaderClassName:J.viewHeaderClassName}));return l4("div",{className:U("flex h-12 w-fit",$&&"sticky top-0 z-21 bg-background",f,X),"data-testid":"horizontal-grid-header",children:P})},E2=c4(d4);import{jsx as zP,jsxs as v2}from"react/jsx-runtime";var x2="h-[calc(100%-3rem)]",aP=({rows:P,children:f,classes:$,allDay:X,gridType:J,variant:Z="resource",dayNumberHeight:_})=>{let{currentDate:q}=T((z)=>({currentDate:z.currentDate})),Q=Z==="resource",Y=!Q,N=f&&zP(E2,{className:$?.header,children:f});return v2("div",{className:"h-full border",children:[Y&&N,v2(A0,{className:U("h-full",Y&&"overflow-auto",Y&&x2),"data-testid":"horizontal-grid-scroll",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[Q&&N,zP("div",{className:U("flex flex-1 w-fit",Q&&x2,$?.body),"data-testid":"horizontal-grid-body",children:zP("div",{className:"relative w-full flex flex-col flex-1",children:P.map((z,p)=>zP(tP,{allDay:z.allDay??X,dayNumberHeight:_,gridType:J,isLastRow:p===P.length-1,variant:Z,...z},z.id))},q.format("YYYY-MM"))}),zP(I0,{className:"z-30"}),zP(I0,{className:"z-30",orientation:"horizontal"})]})]})};import{AnimatePresence as r4,motion as n4}from"motion/react";import{jsx as sP}from"react/jsx-runtime";var u2=({className:P})=>{let{firstDayOfWeek:f,stickyViewHeader:$,viewHeaderClassName:X,currentDate:J}=K0(),Z=$0(J,f);return sP("div",{className:U("flex w-full",$&&"sticky top-0 z-20",X,P),"data-testid":"month-header",children:Z.map((_,q)=>sP(r4,{mode:"wait",children:sP(n4.div,{animate:{opacity:1,y:0},className:"py-2 text-center font-medium border-r last:border-r-0 border-b flex-1","data-testid":`weekday-header-${_.format("ddd").toLowerCase()}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:q*0.05},children:sP("span",{className:"text-sm capitalize",children:_.format("ddd")})},_.toISOString())},_.toISOString()))})};import{jsx as y2}from"react/jsx-runtime";var j2=()=>{let{currentDate:P,firstDayOfWeek:f}=K0(),X=t4(()=>gP(P,f),[P,f]).map((J,Z)=>({id:`week-${Z}`,columns:J.map((_)=>({id:`col-${_.toISOString()}`,day:_,gridType:"day"})),className:"flex-1",showDayNumber:!0}));return y2(aP,{classes:{body:"w-full",header:"w-full"},rows:X,variant:"regular",children:y2(u2,{className:"h-12"})})};import{AnimatePresence as a4,motion as s4}from"motion/react";import{useMemo as i2}from"react";import{jsx as w0,jsxs as p5}from"react/jsx-runtime";var o2="w-[calc((100%-4rem)/7)] min-w-[calc((100%-4rem)/7)] flex-1",c2="w-10 sm:w-16 min-w-10 sm:min-w-16 max-w-10 sm:max-w-16",e4=()=>{let{t:P,currentDate:f,firstDayOfWeek:$,selectDate:X,openEventForm:J,currentLocale:Z,timeFormat:_}=K0(),q=i2(()=>$0(f,$),[f,$]),Q={id:"time-col",days:q0({referenceDate:f}),day:void 0,className:`shrink-0 ${c2} sticky left-0 bg-background z-20`,gridType:"hour",noEvents:!0,renderCell:(N)=>w0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(Z,{hour:"numeric",hour12:_==="12-hour"}).format(N.toDate())})},Y=i2(()=>{return q.map((N)=>({id:`day-col-${N.format("YYYY-MM-DD")}`,day:N,label:N.format("D"),className:o2,days:q0({referenceDate:N}),value:N}))},[q]);return w0(V0,{allDayRow:w0(u0,{classes:{cell:o2,spacer:c2},days:q}),classes:{header:"w-full h-18",body:"h-[calc(100%-4.5rem)] w-full"},columns:[Q,...Y],gridType:"hour",variant:"regular",children:p5("div",{className:"flex h-full flex-1","data-testid":"week-view-header",children:[w0("div",{className:"w-10 sm:w-16 h-full shrink-0 items-center justify-center border-r p-2 flex",children:p5("div",{className:"flex flex-col items-center justify-center",children:[w0("span",{className:"text-muted-foreground text-xs",children:P("week")}),w0("span",{className:"font-medium",children:f.week()})]})}),q.map((N,z)=>{let p=N.isSame(O(),"day"),A=`week-day-header-${N.toISOString()}`;return w0(a4,{mode:"wait",children:p5(s4.div,{animate:{opacity:1,y:0},className:U("hover:bg-accent flex-1 flex flex-col justify-center cursor-pointer p-1 text-center sm:p-2 border-r last:border-r-0 w-50 h-full",p&&"bg-primary/10 font-bold"),"data-testid":`week-day-header-${N.format("dddd").toLowerCase()}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},onClick:()=>{X(N),J({start:N})},transition:{duration:0.25,ease:"easeInOut",delay:z*0.05},children:[w0("div",{className:"text-xs sm:text-sm",children:N.format("ddd")}),w0("div",{className:U("mx-auto mt-1 flex h-5 w-5 items-center justify-center rounded-full text-xs",p&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(Z,{day:"numeric"}).format(N.toDate())})]})},A)})]})})},d2=e4;import{AnimatePresence as P3,motion as f3}from"motion/react";import{jsx as b0,jsxs as RP}from"react/jsx-runtime";var $3=["S","M","T","W","T","F","S"],Z3=["bg-primary","bg-blue-500","bg-green-500"],X3=42,J3=(P)=>{if(P===0)return"";let f=P>1?"s":"";return`${P} event${f}`},Q3=()=>{let{currentDate:P,selectDate:f,events:$,setView:X,getEventsForDateRange:J,t:Z}=K0(),_=P.year(),q=()=>{return Array.from({length:12},(G,L)=>{let B=O().year(_).month(L).startOf("month"),K=$.filter((W)=>W.start.year()===_&&W.start.month()===L);return{date:B,name:B.format("MMMM"),eventCount:K.length,monthKey:B.format("MM")}})},Q=(G)=>{let L=G.startOf("month").startOf("week");return Array.from({length:X3},(B,K)=>{let W=L.add(K,"day"),V=W.startOf("day"),R=W.endOf("day"),M=J(V,R);return{date:W,dayKey:W.format("YYYY-MM-DD"),isInCurrentMonth:W.month()===G.month(),isToday:W.isSame(O(),"day"),isSelected:W.isSame(P,"day"),eventCount:M.length}})},Y=(G,L,B)=>{B?.stopPropagation(),f(G),X(L)},N=(G)=>{let L=G===1?Z("event"):Z("events");return`${G} ${L}`},z=(G)=>{let B=G.isInCurrentMonth?"":"text-muted-foreground opacity-50",K=G.isToday?"bg-primary text-primary-foreground rounded-full":"",W=G.isSelected&&!G.isToday?"bg-muted rounded-full font-bold":"",V=G.eventCount>0&&!G.isToday&&!G.isSelected?"font-medium":"";return U("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center hover:bg-accent rounded-sm transition-colors duration-200",B,K,W,V)},p=(G,L)=>{return U("h-[3px] w-[3px] rounded-full",L?"bg-primary-foreground":G)},A=q();return RP(A0,{className:"h-full","data-testid":"year-view",children:[b0("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:A.map((G,L)=>{let B=Q(G.date),K=L*0.05;return RP("div",{className:"hover:border-primary flex flex-col rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md","data-testid":`year-month-${G.monthKey}`,children:[b0(P3,{mode:"wait",children:RP(f3.div,{animate:{opacity:1,y:0},className:"mb-2 flex items-center justify-between",exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:K},children:[b0("button",{className:"text-lg font-medium hover:underline cursor-pointer","data-testid":`year-month-title-${G.monthKey}`,onClick:()=>Y(G.date,"month"),type:"button",children:G.name}),G.eventCount>0&&b0("span",{className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs","data-testid":`year-month-event-count-${G.monthKey}`,children:N(G.eventCount)})]},`month-${L}`)}),RP("div",{className:"grid grid-cols-7 gap-[1px] text-[0.6rem]","data-testid":`year-mini-calendar-${G.monthKey}`,children:[$3.map((W,V)=>b0("div",{className:"text-muted-foreground h-3 text-center",children:W},`header-${V}`)),B.map((W)=>{let V=`year-day-${G.date.format("YYYY-MM")}-${W.dayKey}`,R=W.eventCount>0,M=Math.min(W.eventCount,3),b=Z3.slice(0,M);return RP("button",{className:z(W),"data-testid":V,onClick:(h)=>Y(W.date,"day",h),title:J3(W.eventCount),type:"button",children:[b0("span",{className:"text-center leading-none",children:W.date.date()}),R&&b0("div",{className:U("absolute bottom-0 flex w-full justify-center space-x-[1px]",W.isToday&&"bottom-[1px]"),children:b.map((h)=>b0("span",{className:p(h,W.isToday)},h))})]},W.dayKey)})]})]},G.monthKey)})}),b0(I0,{className:"z-30"})]})},l2=Q3;import{useCallback as B5,useMemo as q3}from"react";import{jsx as _3}from"react/jsx-runtime";var r2=({children:P,events:f=[],firstDayOfWeek:$=0,initialView:X="month",initialDate:J,renderEvent:Z,onEventClick:_,onCellClick:q,onViewChange:Q,onEventAdd:Y,onEventUpdate:N,onEventDelete:z,onDateChange:p,locale:A,timezone:G,disableCellClick:L,disableEventClick:B,disableDragAndDrop:K,dayMaxEvents:W,eventSpacing:V=h0,stickyViewHeader:R=!0,viewHeaderClassName:M="",headerComponent:b,headerClassName:h,businessHours:E,renderEventForm:k,translations:v,translator:y,timeFormat:I="12-hour",classesOverride:g})=>{let S=kP({events:f,firstDayOfWeek:$,initialView:X,initialDate:J,businessHours:E,onEventAdd:Y,onEventUpdate:N,onEventDelete:z,onDateChange:p,onViewChange:Q,locale:A,timezone:G,translations:v,translator:y}),Q0=B5((a)=>{S.setSelectedEvent(a),S.setIsEventFormOpen(!0)},[S]),N0=B5((a)=>{if(B)return;if(_)_(a);else Q0(a)},[B,_,Q0]),P0=B5((a)=>{if(L)return;if(q)q(a);else S.openEventForm(a)},[q,L,S]),_0=q3(()=>({currentDate:S.currentDate,view:S.view,events:S.events,rawEvents:S.rawEvents,currentLocale:S.currentLocale,isEventFormOpen:S.isEventFormOpen,selectedEvent:S.selectedEvent,selectedDate:S.selectedDate,firstDayOfWeek:S.firstDayOfWeek,setCurrentDate:S.setCurrentDate,selectDate:S.selectDate,setView:S.setView,nextPeriod:S.nextPeriod,prevPeriod:S.prevPeriod,today:S.today,addEvent:S.addEvent,updateEvent:S.updateEvent,updateRecurringEvent:S.updateRecurringEvent,deleteEvent:S.deleteEvent,deleteRecurringEvent:S.deleteRecurringEvent,openEventForm:S.openEventForm,closeEventForm:S.closeEventForm,getEventsForDateRange:S.getEventsForDateRange,findParentRecurringEvent:S.findParentRecurringEvent,renderEvent:Z,onEventClick:N0,onCellClick:P0,locale:A,timezone:G,disableCellClick:L,disableEventClick:B,disableDragAndDrop:K,dayMaxEvents:W,eventSpacing:V,stickyViewHeader:R,viewHeaderClassName:M,headerComponent:b,headerClassName:h,businessHours:E,renderEventForm:k,t:S.t,timeFormat:I,classesOverride:g}),[S,Z,N0,P0,A,G,L,B,K,W,V,R,M,b,h,E,k,I,g]);return _3(ZP.Provider,{value:_0,children:P})};import{jsx as L0,jsxs as L3}from"react/jsx-runtime";var K3=()=>{let{view:P,isEventFormOpen:f,closeEventForm:$,selectedEvent:X,addEvent:J,updateEvent:Z,deleteEvent:_,dayMaxEvents:q,renderEventForm:Q}=K0(),Y={month:L0(j2,{dayMaxEvents:q},"month"),week:L0(d2,{},"week"),day:L0(D2,{},"day"),year:L0(l2,{},"year")},p={open:f,onClose:$,selectedEvent:X,onAdd:J,onUpdate:(A)=>{Z(A.id,A)},onDelete:(A)=>{_(A.id)}};return L3("div",{className:"flex flex-col w-full h-full",children:[L0(VP,{className:"p-1"}),L0(CP,{children:L0(Y3,{mode:"wait",children:L0(U3.div,{animate:{opacity:1,x:0},className:"w-full h-[calc(100%-3.5rem)]",exit:{opacity:0,x:-20},initial:{opacity:0,x:20},transition:{duration:0.1,ease:"easeInOut"},children:Y[P]},P)})}),Q?Q(p):f&&L0(jP,{...p})]})},z3=({events:P,firstDayOfWeek:f="sunday",initialView:$="month",initialDate:X,dayMaxEvents:J=JP,eventSpacing:Z=h0,stickyViewHeader:_=!0,viewHeaderClassName:q="",timeFormat:Q="12-hour",...Y})=>{return L0(r2,{dayMaxEvents:J,eventSpacing:Z,events:wP(P),firstDayOfWeek:mP[f],initialDate:a0(X),initialView:$,stickyViewHeader:_,timeFormat:Q,viewHeaderClassName:q,...Y,children:L0(K3,{})})};import{AnimatePresence as O3,motion as F3}from"motion/react";import{AnimatePresence as G3,motion as p3}from"motion/react";import{jsx as N3}from"react/jsx-runtime";var LP=({days:P,gridType:f="day",children:$,classes:X})=>{let{getVisibleResources:J}=i(),Z=J(),_=P.map((Q)=>({id:`col-${Q.toISOString()}`,day:Q,gridType:f})),q=Z.map((Q)=>({id:Q.id,title:Q.title,resource:Q,columns:_}));return N3(aP,{classes:X,dayNumberHeight:0,gridType:f,rows:q,children:$})};import{jsx as NP,jsxs as B3}from"react/jsx-runtime";var n2=()=>{let{currentDate:P,t:f,currentLocale:$,timeFormat:X}=i(),J=q0({referenceDate:P});return B3(LP,{days:J,gridType:"hour",children:[NP("div",{className:"w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:NP("div",{className:"text-sm",children:f("resources")})}),NP("div",{className:"flex-1 flex flex-col",children:NP("div",{className:"flex h-12",children:J.map((Z,_)=>{let q=Z.isSame(O(),"hour"),Q=`resource-day-header-${Z.toISOString()}`;return NP(G3,{mode:"wait",children:NP(p3.div,{animate:{opacity:1,y:0},className:U("w-20 border-b border-r last:border-r-0 flex items-center justify-center text-xs shrink-0",q&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-day-time-label-${Z.format("HH")}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:_*0.05},children:Intl.DateTimeFormat($,{hour:"numeric",hour12:X==="12-hour"}).format(Z.toDate())},`${Q}-motion`)},`${Q}-presence`)})})})]})};import{jsx as GP,jsxs as t2}from"react/jsx-runtime";var a2=()=>{let{currentDate:P,getVisibleResources:f,currentLocale:$,timeFormat:X}=i(),J=f(),Z=q0({referenceDate:P}),_={id:"time-col",day:void 0,days:Z,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(Q)=>GP("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat($,{hour:"numeric",hour12:X==="12-hour"}).format(Q.toDate())})},q=J.map((Q)=>({id:`day-col-${P.format("YYYY-MM-DD")}-resource-${Q.id}`,resourceId:Q.id,days:Z,day:P,gridType:"hour"}));return GP(V0,{allDayRow:t2("div",{className:"flex w-full",children:[GP(KP,{}),J.map((Q)=>GP(u0,{classes:{cell:"min-w-50"},days:[P],resource:Q,showSpacer:!1},`resource-allday-row-${Q.id}`))]}),cellSlots:[0,15,30,45],classes:{body:"w-full",header:"w-full"},columns:[_,...q],"data-testid":"resource-day",gridType:"hour",children:t2("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[GP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),J.map((Q)=>GP(v0,{className:"min-w-50",resource:Q},`resource-cell-${Q.id}`))]})})};import{jsx as s2}from"react/jsx-runtime";var e2=()=>{let{orientation:P}=i();if(P==="vertical")return s2(a2,{});return s2(n2,{})};import{AnimatePresence as W3,motion as A3}from"motion/react";import{useMemo as V3}from"react";import{jsx as HP,jsxs as Pf}from"react/jsx-runtime";var ff=()=>{let{currentDate:P,t:f}=i(),$=V3(()=>{return H5(P)},[P]);return Pf(LP,{days:$,children:[HP("div",{className:"w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:HP("div",{className:"text-sm",children:f("resources")})}),$.map((X,J)=>{let Z=`resource-month-header-${X.toISOString()}`;return HP(W3,{mode:"wait",children:Pf(A3.div,{animate:{opacity:1,y:0},className:"w-20 border-b border-r shrink-0 flex items-center justify-center flex-col",exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:J*0.05},children:[HP("div",{className:"text-xs font-medium",children:X.format("D")}),HP("div",{className:"text-xs text-muted-foreground",children:X.format("ddd")})]},`${Z}-motion`)},`${Z}-presence`)})]})};import{jsx as IP,jsxs as $f}from"react/jsx-runtime";var Zf=()=>{let{currentDate:P,getVisibleResources:f}=i(),$=f(),X=P.startOf("month"),J=Array.from({length:P.daysInMonth()},(q,Q)=>X.add(Q,"day")),Z={id:"date-col",days:J,day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"day",noEvents:!0,renderCell:(q)=>$f("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:[IP("span",{children:q.format("D")}),IP("span",{children:q.format("ddd")})]})},_=$.map((q)=>({id:`month-col-resource-${q.id}`,day:void 0,resourceId:q.id,days:J,gridType:"day"}));return IP(V0,{classes:{header:"w-full",body:"w-full"},columns:[Z,..._],"data-testid":"resource-month-vertical-grid",children:$f("div",{className:"flex border-b h-12 flex-1","data-testid":"resource-month-header",children:[IP("div",{className:"shrink-0 border-r w-16 sticky top-0 left-0 bg-background z-20"}),$.map((q)=>IP(v0,{className:"min-w-50",resource:q},`resource-cell-${q.id}`))]})})};import{jsx as Xf}from"react/jsx-runtime";var Jf=()=>{let{orientation:P}=i();if(P==="vertical")return Xf(Zf,{});return Xf(ff,{})};import{AnimatePresence as Qf,motion as qf}from"motion/react";import{useMemo as _f}from"react";import{jsx as O0,jsxs as W5}from"react/jsx-runtime";var Yf=()=>{let{currentDate:P,firstDayOfWeek:f,t:$,currentLocale:X,timeFormat:J}=i(),Z=_f(()=>$0(P,f),[P,f]),_=_f(()=>{return Z.flatMap((q)=>q0({referenceDate:q}))},[Z]);return W5(LP,{classes:{header:"h-24"},days:_,gridType:"hour",children:[O0("div",{className:"w-40 border-b border-r shrink-0 flex justify-center items-center sticky top-0 left-0 bg-background z-20",children:O0("div",{className:"text-sm",children:$("resources")})}),W5("div",{className:"flex-1 flex flex-col",children:[O0("div",{className:"flex h-12",children:Z.map((q,Q)=>{let Y=q.isSame(O(),"day"),N=`resource-week-header-${q.toISOString()}-day`;return O0(Qf,{mode:"wait",children:O0(qf.div,{animate:{opacity:1,y:0},className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(24*var(--spacing)*20)]",Y&&"bg-blue-50 text-blue-600"),exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Q*0.05},children:W5("div",{className:"sticky left-1/2",children:[O0("div",{className:"text-sm",children:q.format("ddd")}),O0("div",{className:"text-xs text-muted-foreground",children:q.format("M/D")})]})},`${N}-motion`)},`${N}-presence`)})}),O0("div",{className:"flex h-12 border-b",children:_.map((q,Q)=>{let Y=q.isSame(O(),"hour"),N=`resource-week-header-${q.toISOString()}-hour`;return O0(Qf,{mode:"wait",children:O0(qf.div,{animate:{opacity:1,y:0},className:U("w-20 border-r flex items-center justify-center text-xs shrink-0",Y&&"bg-blue-50 text-blue-600 font-medium"),"data-testid":`resource-week-time-label-${q.format("HH")}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Q*0.05},children:Intl.DateTimeFormat(X,{hour:"numeric",hour12:J==="12-hour"}).format(q.toDate())},`${N}-motion`)},`${N}-presence`)})})]})]})};import{AnimatePresence as Uf,motion as Kf}from"motion/react";import{useMemo as A5}from"react";import{jsx as J0,jsxs as SP}from"react/jsx-runtime";var zf=()=>{let{currentDate:P,getVisibleResources:f,firstDayOfWeek:$,currentLocale:X,timeFormat:J,t:Z}=i(),_=f(),q=A5(()=>$0(P,$),[P,$]),Q=A5(()=>({id:"time-col",days:q0({referenceDate:P}),day:void 0,className:"shrink-0 w-16 min-w-16 max-w-16 sticky left-0 bg-background z-20",gridType:"hour",noEvents:!0,renderCell:(N)=>J0("div",{className:"text-muted-foreground p-2 text-right text-[10px] sm:text-xs flex flex-col items-center",children:Intl.DateTimeFormat(X,{hour:"numeric",hour12:J==="12-hour"}).format(N.toDate())})}),[P,X,J]),Y=A5(()=>_.flatMap((N)=>q.map((z)=>({id:`day-col-${z.format("YYYY-MM-DD")}-resource-${N.id}`,resourceId:N.id,day:z,days:q0({referenceDate:z}),gridType:"hour"}))),[_,q]);return J0(V0,{allDayRow:SP("div",{className:"flex",children:[J0(KP,{}),_.map((N)=>J0(u0,{classes:{cell:"min-w-50"},days:q,resource:N,showSpacer:!1},`resource-week-allday-row-${N.id}`))]}),classes:{header:"h-24"},columns:[Q,...Y],"data-testid":"resource-week",gridType:"hour",children:SP("div",{className:"flex-1 flex flex-col",children:[SP("div",{className:"flex h-12",children:[J0("div",{className:"shrink-0 w-16 border-r z-20 bg-background sticky left-0",children:J0("span",{className:"px-2 h-full w-full flex justify-center items-end text-xs text-muted-foreground",children:Z("week")})}),_.map((N,z)=>{let p=`resource-week-header-${N.id}-day`;return J0(Uf,{mode:"wait",children:J0(Kf.div,{animate:{opacity:1,y:0},className:U("shrink-0 border-r last:border-r-0 border-b flex items-center text-center font-medium w-[calc(7*var(--spacing)*50)]"),exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:z*0.05},children:J0(v0,{className:"h-full",resource:N,children:J0("div",{className:"sticky left-1/2 text-sm font-medium truncate",children:N.title})})},`${p}-motion`)},`${p}-presence`)})]}),SP("div",{className:"flex h-12",children:[J0("div",{className:"shrink-0 w-16 border-r border-b z-20 bg-background sticky left-0",children:J0("span",{className:"px-2 h-full w-full flex justify-center items-start font-medium",children:P.week()})}),Y.map((N,z)=>{let p=N.day,A=`resource-week-header-${p.toISOString()}-hour-${N.resourceId}`;return J0(Uf,{mode:"wait",children:SP(Kf.div,{animate:{opacity:1,y:0},className:U("w-50 border-r last:border-r-0 border-b flex flex-col items-center justify-center text-xs shrink-0 bg-background"),"data-testid":`resource-week-time-label-${p.format("HH")}`,exit:{opacity:0,y:-10},initial:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:z*0.05},children:[J0("div",{className:"text-sm",children:p.format("ddd")}),J0("div",{className:"text-xs text-muted-foreground",children:p.format("M/D")})]},`${A}-motion`)},`${A}-presence`)})]})]})})};import{jsx as Lf}from"react/jsx-runtime";var Nf=()=>{let{orientation:P}=i();if(P==="vertical")return Lf(zf,{});return Lf(Yf,{})};import{jsx as y0,jsxs as M3}from"react/jsx-runtime";var Gf=()=>{let{view:P,isEventFormOpen:f,closeEventForm:$,selectedEvent:X,addEvent:J,updateEvent:Z,deleteEvent:_,renderEventForm:q}=i(),Q={month:y0(Jf,{},"month"),week:y0(Nf,{},"week"),day:y0(e2,{},"day")},z={open:f,onClose:$,selectedEvent:X,onAdd:J,onUpdate:(p)=>{Z(p.id,p)},onDelete:(p)=>{_(p.id)}};return M3("div",{className:"flex flex-col w-full h-full",children:[y0(VP,{className:"p-1"}),y0(CP,{children:y0(O3,{mode:"wait",children:y0(F3.div,{animate:{opacity:1,x:0},className:"w-full h-[calc(100%-3.5rem)] @container/calendar-body",exit:{opacity:0,x:-20},initial:{opacity:0,x:20},transition:{duration:0.1,ease:"easeInOut"},children:Q[P]},P)})}),q?q(z):f&&y0(jP,{...z})]})};import{jsx as pf}from"react/jsx-runtime";var R3=({events:P=[],resources:f=[],firstDayOfWeek:$="sunday",initialView:X="month",initialDate:J,disableDragAndDrop:Z=!1,dayMaxEvents:_=JP,timeFormat:q="12-hour",eventSpacing:Q=h0,...Y})=>{return pf(g5,{dayMaxEvents:_,disableDragAndDrop:Z,eventSpacing:Q,events:wP(P),firstDayOfWeek:mP[$],initialDate:a0(J),initialView:X,resources:f,timeFormat:q,...Y,children:pf(Gf,{})})};export{vf as useIlamyResourceCalendarContext,Ef as useIlamyCalendarContext,s0 as isRecurringEvent,eP as generateRecurringEvents,f5 as defaultTranslations,k_ as RRule,R3 as IlamyResourceCalendar,z3 as IlamyCalendar};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCAic3JjL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZy50cyIsICJzcmMvbGliL3V0aWxzL2luZGV4LnRzIiwgInNyYy9saWIvdXRpbHMvZGF0ZS11dGlscy50cyIsICJzcmMvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50LnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2hvb2tzL3VzZS1jYWxlbmRhci1lbmdpbmUudHMiLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyLnRzIiwgInNyYy9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQudHMiLCAic3JjL2xpYi9jb25zdGFudHMudHMiLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtaGVhZGVyLnRzeCIsICJzcmMvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvd2Vlay1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2RheS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLWFsbC1kYXktcm93LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstZGF5LWNvbC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdGltZS1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LWFsbC1kYXktcm93LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktaGVhZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdGltZS1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2NvbXBvbmVudHMvdWkvbGFiZWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYXJkLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zZWxlY3QudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2hvb2tzL3VzZVJlY3VycmluZ0V2ZW50QWN0aW9ucy50cyIsICJzcmMvbGliL3V0aWxzL2V4cG9ydC1pY2FsLnRzIiwgInNyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3RpdGxlLWNvbnRlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2hlYWRlci92aWV3LWNvbnRyb2xzLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9ncmlkLWNlbGwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvcmVzb3VyY2UtZGF5LWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9yZXNvdXJjZS1jYWxlbmRhci1ib2R5LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci9pbGFteS1yZXNvdXJjZS1jYWxlbmRhci50c3giLCAic3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzLCBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBNb250aEhlYWRlciB9IGZyb20gJy4vbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi93ZWVrLWV2ZW50cy1sYXllcidcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBEYXlDZWxsIH0gZnJvbSAnLi9kYXktY2VsbCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoeyBkYXlNYXhFdmVudHMgPSAzIH0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcblxuICBjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB3ZWVrcyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0TW9udGhXZWVrcyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspLFxuICAgIFtjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWtdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIiBkYXRhLXRlc3RpZD1cIm1vbnRoLXZpZXdcIj5cbiAgICAgIDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cIm92ZXJmbG93LWF1dG8gaC1bY2FsYygxMDAlLTNyZW0pXVwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtc2Nyb2xsLWFyZWFcIlxuICAgICAgICB2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCAqOm1pbi1oLWZ1bGwnIH19XG4gICAgICA+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBncmlkIGgtZnVsbCBncmlkLWNvbHMtNyBncmlkLXJvd3MtNiBvdmVyZmxvdy1hdXRvIGZsZXgtMVwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLWNhbGVuZGFyLWdyaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAga2V5PXtgd2Vlay0ke3dlZWtJbmRleH1gfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTcgZ3JpZCBncmlkLWNvbHMtN1wiXG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXJvdy0ke3dlZWtJbmRleH1gfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8RGF5Q2VsbFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2RheUluZGV4fVxuICAgICAgICAgICAgICAgICAgICBkYXk9e2RheX1cbiAgICAgICAgICAgICAgICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1yIGJvcmRlci1iIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwb2ludGVyLWV2ZW50cy1ub25lXCI+XG4gICAgICAgICAgICAgICAgICA8V2Vla0V2ZW50c0xheWVyIGRheXM9e2RheXN9IC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cblxuICAgICAgPEFsbEV2ZW50RGlhbG9nIHJlZj17YWxsRXZlbnRzRGlhbG9nUmVmfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCwgQnVzaW5lc3NIb3VycyB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgRXZlbnRGb3JtUHJvcHMgfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHR5cGUgeyBDZWxsQ2xpY2tJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogQ2FsZW5kYXJWaWV3XG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuICBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuICBnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChcbiAgICBzdGFydERhdGU6IGRheWpzLkRheWpzLFxuICAgIGVuZERhdGU6IGRheWpzLkRheWpzXG4gICkgPT4gQ2FsZW5kYXJFdmVudFtdXG4gIGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICByZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3QuUmVhY3ROb2RlXG4gIG9uRXZlbnRDbGljazogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2VsbENsaWNrOiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3Vyc1xuICByZW5kZXJFdmVudEZvcm0/OiAocHJvcHM6IEV2ZW50Rm9ybVByb3BzKSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgLy8gVHJhbnNsYXRpb24gZnVuY3Rpb25cbiAgdDogKGtleTogVHJhbnNsYXRpb25LZXkpID0+IHN0cmluZ1xuICB0aW1lRm9ybWF0OiBUaW1lRm9ybWF0XG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuICBjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICByZWFkb25seSB2aWV3OiBDYWxlbmRhclZpZXdcbiAgcmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgcmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuICByZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSB1cGRhdGVFdmVudDogKFxuICAgIGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHZvaWRcbiAgcmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcbiAgcmVhZG9ubHkgY2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUlsYW15Q2FsZW5kYXJDb250ZXh0ID0gKCk6IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3VzZUlsYW15Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJ1xuICAgIClcbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuICAgIHZpZXc6IGNvbnRleHQudmlldyxcbiAgICBldmVudHM6IGNvbnRleHQuZXZlbnRzLFxuICAgIGlzRXZlbnRGb3JtT3BlbjogY29udGV4dC5pc0V2ZW50Rm9ybU9wZW4sXG4gICAgc2VsZWN0ZWRFdmVudDogY29udGV4dC5zZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG4gICAgZmlyc3REYXlPZldlZWs6IGNvbnRleHQuZmlyc3REYXlPZldlZWssXG4gICAgc2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG4gICAgc2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuICAgIHNldFZpZXc6IGNvbnRleHQuc2V0VmlldyxcbiAgICBuZXh0UGVyaW9kOiBjb250ZXh0Lm5leHRQZXJpb2QsXG4gICAgcHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuICAgIHRvZGF5OiBjb250ZXh0LnRvZGF5LFxuICAgIGFkZEV2ZW50OiBjb250ZXh0LmFkZEV2ZW50LFxuICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgIGRlbGV0ZUV2ZW50OiBjb250ZXh0LmRlbGV0ZUV2ZW50LFxuICAgIG9wZW5FdmVudEZvcm06IGNvbnRleHQub3BlbkV2ZW50Rm9ybSxcbiAgICBjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcbiAgICBidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG4gIH0gYXMgY29uc3Rcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBEaWFsb2dQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWRpYWxvZydcbmltcG9ydCB7IFhJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBEaWFsb2coe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cImRpYWxvZ1wiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwiZGlhbG9nLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ1BvcnRhbCh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlBvcnRhbD4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Nsb3NlKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ2xvc2U+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nT3ZlcmxheSh7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuT3ZlcmxheT4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLk92ZXJsYXlcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1vdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBmaXhlZCBpbnNldC0wIHotNTAgYmctYmxhY2svNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUG9ydGFsIGRhdGEtc2xvdD1cImRpYWxvZy1wb3J0YWxcIj5cbiAgICAgIDxEaWFsb2dPdmVybGF5IC8+XG4gICAgICA8RGlhbG9nUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1iYWNrZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBmaXhlZCB0b3AtWzUwJV0gbGVmdC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LVtjYWxjKDEwMCUtMnJlbSldIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgcm91bmRlZC1sZyBib3JkZXIgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgc206bWF4LXctbGcgbWF4LWgtWzkwJV0nLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPERpYWxvZ1ByaW1pdGl2ZS5DbG9zZSBjbGFzc05hbWU9XCJyaW5nLW9mZnNldC1iYWNrZ3JvdW5kIGZvY3VzOnJpbmctcmluZyBkYXRhLVtzdGF0ZT1vcGVuXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9b3Blbl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFic29sdXRlIHRvcC00IHJpZ2h0LTQgcm91bmRlZC14cyBvcGFjaXR5LTcwIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTEwMCBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1vZmZzZXQtMiBmb2N1czpvdXRsaW5lLWhpZGRlbiBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiPlxuICAgICAgICAgIDxYSWNvbiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cbiAgICAgICAgPC9EaWFsb2dQcmltaXRpdmUuQ2xvc2U+XG4gICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5Db250ZW50PlxuICAgIDwvRGlhbG9nUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0hlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtY2VudGVyIHNtOnRleHQtbGVmdCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dGb290ZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1mb290ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ1RpdGxlKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5UaXRsZT4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLlRpdGxlXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctdGl0bGVcIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1sZyBsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuRGVzY3JpcHRpb24+KSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ2xvc2UsXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxuICBEaWFsb2dGb290ZXIsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nT3ZlcmxheSxcbiAgRGlhbG9nUG9ydGFsLFxuICBEaWFsb2dUaXRsZSxcbiAgRGlhbG9nVHJpZ2dlcixcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHdlZWtkYXkgZnJvbSAnZGF5anMvcGx1Z2luL3dlZWtkYXkuanMnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhci5qcydcbmltcG9ydCBpc1NhbWVPckFmdGVyIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckFmdGVyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZS5qcydcbmltcG9ydCBpc0JldHdlZW4gZnJvbSAnZGF5anMvcGx1Z2luL2lzQmV0d2Vlbi5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcblxuLy8gRXh0ZW5kIGRheWpzIHdpdGggcGx1Z2luc1xuZGF5anMuZXh0ZW5kKHdlZWtkYXkpXG5kYXlqcy5leHRlbmQod2Vla09mWWVhcilcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKVxuZGF5anMuZXh0ZW5kKGlzQmV0d2VlbilcbmRheWpzLmV4dGVuZChtaW5NYXgpXG5kYXlqcy5leHRlbmQodGltZXpvbmUpXG5kYXlqcy5leHRlbmQodXRjKVxuZGF5anMuZXh0ZW5kKGxvY2FsZURhdGEpXG5cbi8vIEltcG9ydCBhbGwgZGF5anMgbG9jYWxlcyBhbHBoYWJldGljYWxseVxuLy8gbG9jYWxlLmpzb24gZmlsZTogW3tcImtleVwiOlwiYWZcIixcIm5hbWVcIjpcIkFmcmlrYWFuc1wifSx7XCJrZXlcIjpcImFtXCIsXCJuYW1lXCI6XCJBbWhhcmljXCJ9LHtcImtleVwiOlwiYXItZHpcIixcIm5hbWVcIjpcIkFyYWJpYyAoQWxnZXJpYSlcIn0se1wia2V5XCI6XCJhci1pcVwiLFwibmFtZVwiOlwiIEFyYWJpYyAoSXJhcSlcIn0se1wia2V5XCI6XCJhci1rd1wiLFwibmFtZVwiOlwiQXJhYmljIChLdXdhaXQpXCJ9LHtcImtleVwiOlwiYXItbHlcIixcIm5hbWVcIjpcIkFyYWJpYyAoTHliaWEpXCJ9LHtcImtleVwiOlwiYXItbWFcIixcIm5hbWVcIjpcIkFyYWJpYyAoTW9yb2NjbylcIn0se1wia2V5XCI6XCJhci1zYVwiLFwibmFtZVwiOlwiQXJhYmljIChTYXVkaSBBcmFiaWEpXCJ9LHtcImtleVwiOlwiYXItdG5cIixcIm5hbWVcIjpcIiBBcmFiaWMgKFR1bmlzaWEpXCJ9LHtcImtleVwiOlwiYXJcIixcIm5hbWVcIjpcIkFyYWJpY1wifSx7XCJrZXlcIjpcImF6XCIsXCJuYW1lXCI6XCJBemVyYmFpamFuaVwifSx7XCJrZXlcIjpcImJlXCIsXCJuYW1lXCI6XCJCZWxhcnVzaWFuXCJ9LHtcImtleVwiOlwiYmdcIixcIm5hbWVcIjpcIkJ1bGdhcmlhblwifSx7XCJrZXlcIjpcImJpXCIsXCJuYW1lXCI6XCJCaXNsYW1hXCJ9LHtcImtleVwiOlwiYm1cIixcIm5hbWVcIjpcIkJhbWJhcmFcIn0se1wia2V5XCI6XCJibi1iZFwiLFwibmFtZVwiOlwiQmVuZ2FsaSAoQmFuZ2xhZGVzaClcIn0se1wia2V5XCI6XCJiblwiLFwibmFtZVwiOlwiQmVuZ2FsaVwifSx7XCJrZXlcIjpcImJvXCIsXCJuYW1lXCI6XCJUaWJldGFuXCJ9LHtcImtleVwiOlwiYnJcIixcIm5hbWVcIjpcIkJyZXRvblwifSx7XCJrZXlcIjpcImJzXCIsXCJuYW1lXCI6XCJCb3NuaWFuXCJ9LHtcImtleVwiOlwiY2FcIixcIm5hbWVcIjpcIkNhdGFsYW5cIn0se1wia2V5XCI6XCJjc1wiLFwibmFtZVwiOlwiQ3plY2hcIn0se1wia2V5XCI6XCJjdlwiLFwibmFtZVwiOlwiQ2h1dmFzaFwifSx7XCJrZXlcIjpcImN5XCIsXCJuYW1lXCI6XCJXZWxzaFwifSx7XCJrZXlcIjpcImRlLWF0XCIsXCJuYW1lXCI6XCJHZXJtYW4gKEF1c3RyaWEpXCJ9LHtcImtleVwiOlwiZGFcIixcIm5hbWVcIjpcIkRhbmlzaFwifSx7XCJrZXlcIjpcImRlLWNoXCIsXCJuYW1lXCI6XCJHZXJtYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcImRlXCIsXCJuYW1lXCI6XCJHZXJtYW5cIn0se1wia2V5XCI6XCJkdlwiLFwibmFtZVwiOlwiTWFsZGl2aWFuXCJ9LHtcImtleVwiOlwiZWxcIixcIm5hbWVcIjpcIkdyZWVrXCJ9LHtcImtleVwiOlwiZW4tYXVcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEF1c3RyYWxpYSlcIn0se1wia2V5XCI6XCJlbi1jYVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQ2FuYWRhKVwifSx7XCJrZXlcIjpcImVuLWdiXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSlcIn0se1wia2V5XCI6XCJlbi1pZVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXJlbGFuZClcIn0se1wia2V5XCI6XCJlbi1pbFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoSXNyYWVsKVwifSx7XCJrZXlcIjpcImVuLWluXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJbmRpYSlcIn0se1wia2V5XCI6XCJlbi1uelwiLFwibmFtZVwiOlwiRW5nbGlzaCAoTmV3IFplYWxhbmQpXCJ9LHtcImtleVwiOlwiZW4tc2dcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFNpbmdhcG9yZSlcIn0se1wia2V5XCI6XCJlbi10dFwiLFwibmFtZVwiOlwiRW5nbGlzaCAoVHJpbmlkYWQgJiBUb2JhZ28pXCJ9LHtcImtleVwiOlwiZW9cIixcIm5hbWVcIjpcIkVzcGVyYW50b1wifSx7XCJrZXlcIjpcImVuXCIsXCJuYW1lXCI6XCJFbmdsaXNoXCJ9LHtcImtleVwiOlwiZXMtZG9cIixcIm5hbWVcIjpcIlNwYW5pc2ggKERvbWluaWNhbiBSZXB1YmxpYylcIn0se1wia2V5XCI6XCJlcy1teFwiLFwibmFtZVwiOlwiU3BhbmlzaCAoTWV4aWNvKVwifSx7XCJrZXlcIjpcImVzLXByXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChQdWVydG8gUmljbylcIn0se1wia2V5XCI6XCJlcy11c1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoVW5pdGVkIFN0YXRlcylcIn0se1wia2V5XCI6XCJldFwiLFwibmFtZVwiOlwiRXN0b25pYW5cIn0se1wia2V5XCI6XCJlc1wiLFwibmFtZVwiOlwiU3BhbmlzaFwifSx7XCJrZXlcIjpcImV1XCIsXCJuYW1lXCI6XCJCYXNxdWVcIn0se1wia2V5XCI6XCJmYVwiLFwibmFtZVwiOlwiUGVyc2lhblwifSx7XCJrZXlcIjpcImZvXCIsXCJuYW1lXCI6XCJGYXJvZXNlXCJ9LHtcImtleVwiOlwiZmlcIixcIm5hbWVcIjpcIkZpbm5pc2hcIn0se1wia2V5XCI6XCJmci1jYVwiLFwibmFtZVwiOlwiRnJlbmNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZnItY2hcIixcIm5hbWVcIjpcIkZyZW5jaCAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZnJcIixcIm5hbWVcIjpcIkZyZW5jaFwifSx7XCJrZXlcIjpcImZ5XCIsXCJuYW1lXCI6XCJGcmlzaWFuXCJ9LHtcImtleVwiOlwiZ2FcIixcIm5hbWVcIjpcIklyaXNoIG9yIElyaXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdkXCIsXCJuYW1lXCI6XCJTY290dGlzaCBHYWVsaWNcIn0se1wia2V5XCI6XCJnb20tbGF0blwiLFwibmFtZVwiOlwiS29ua2FuaSBMYXRpbiBzY3JpcHRcIn0se1wia2V5XCI6XCJnbFwiLFwibmFtZVwiOlwiR2FsaWNpYW5cIn0se1wia2V5XCI6XCJndVwiLFwibmFtZVwiOlwiR3VqYXJhdGlcIn0se1wia2V5XCI6XCJoZVwiLFwibmFtZVwiOlwiSGVicmV3XCJ9LHtcImtleVwiOlwiaGlcIixcIm5hbWVcIjpcIkhpbmRpXCJ9LHtcImtleVwiOlwiaHJcIixcIm5hbWVcIjpcIkNyb2F0aWFuXCJ9LHtcImtleVwiOlwiaHVcIixcIm5hbWVcIjpcIkh1bmdhcmlhblwifSx7XCJrZXlcIjpcImh0XCIsXCJuYW1lXCI6XCJIYWl0aWFuIENyZW9sZSAoSGFpdGkpXCJ9LHtcImtleVwiOlwiaHktYW1cIixcIm5hbWVcIjpcIkFybWVuaWFuXCJ9LHtcImtleVwiOlwiaWRcIixcIm5hbWVcIjpcIkluZG9uZXNpYW5cIn0se1wia2V5XCI6XCJpc1wiLFwibmFtZVwiOlwiSWNlbGFuZGljXCJ9LHtcImtleVwiOlwiaXQtY2hcIixcIm5hbWVcIjpcIkl0YWxpYW4gKFN3aXR6ZXJsYW5kKVwifSx7XCJrZXlcIjpcIml0XCIsXCJuYW1lXCI6XCJJdGFsaWFuXCJ9LHtcImtleVwiOlwiamFcIixcIm5hbWVcIjpcIkphcGFuZXNlXCJ9LHtcImtleVwiOlwianZcIixcIm5hbWVcIjpcIkphdmFuZXNlXCJ9LHtcImtleVwiOlwia2FcIixcIm5hbWVcIjpcIkdlb3JnaWFuXCJ9LHtcImtleVwiOlwia2tcIixcIm5hbWVcIjpcIkthemFraFwifSx7XCJrZXlcIjpcImttXCIsXCJuYW1lXCI6XCJDYW1ib2RpYW5cIn0se1wia2V5XCI6XCJrblwiLFwibmFtZVwiOlwiS2FubmFkYVwifSx7XCJrZXlcIjpcImtvXCIsXCJuYW1lXCI6XCJLb3JlYW5cIn0se1wia2V5XCI6XCJrdVwiLFwibmFtZVwiOlwiS3VyZGlzaFwifSx7XCJrZXlcIjpcImt5XCIsXCJuYW1lXCI6XCJLeXJneXpcIn0se1wia2V5XCI6XCJsYlwiLFwibmFtZVwiOlwiTHV4ZW1ib3VyZ2lzaFwifSx7XCJrZXlcIjpcImxvXCIsXCJuYW1lXCI6XCJMYW9cIn0se1wia2V5XCI6XCJsdFwiLFwibmFtZVwiOlwiTGl0aHVhbmlhblwifSx7XCJrZXlcIjpcImx2XCIsXCJuYW1lXCI6XCJMYXR2aWFuXCJ9LHtcImtleVwiOlwibWVcIixcIm5hbWVcIjpcIk1vbnRlbmVncmluXCJ9LHtcImtleVwiOlwibWlcIixcIm5hbWVcIjpcIk1hb3JpXCJ9LHtcImtleVwiOlwibWtcIixcIm5hbWVcIjpcIk1hY2Vkb25pYW5cIn0se1wia2V5XCI6XCJtbFwiLFwibmFtZVwiOlwiTWFsYXlhbGFtXCJ9LHtcImtleVwiOlwibW5cIixcIm5hbWVcIjpcIk1vbmdvbGlhblwifSx7XCJrZXlcIjpcIm1yXCIsXCJuYW1lXCI6XCJNYXJhdGhpXCJ9LHtcImtleVwiOlwibXMtbXlcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXNcIixcIm5hbWVcIjpcIk1hbGF5XCJ9LHtcImtleVwiOlwibXRcIixcIm5hbWVcIjpcIk1hbHRlc2UgKE1hbHRhKVwifSx7XCJrZXlcIjpcIm15XCIsXCJuYW1lXCI6XCJCdXJtZXNlXCJ9LHtcImtleVwiOlwibmJcIixcIm5hbWVcIjpcIk5vcndlZ2lhbiBCb2ttw6VsXCJ9LHtcImtleVwiOlwibmVcIixcIm5hbWVcIjpcIk5lcGFsZXNlXCJ9LHtcImtleVwiOlwibmwtYmVcIixcIm5hbWVcIjpcIkR1dGNoIChCZWxnaXVtKVwifSx7XCJrZXlcIjpcIm5sXCIsXCJuYW1lXCI6XCJEdXRjaFwifSx7XCJrZXlcIjpcInBsXCIsXCJuYW1lXCI6XCJQb2xpc2hcIn0se1wia2V5XCI6XCJwdC1iclwiLFwibmFtZVwiOlwiUG9ydHVndWVzZSAoQnJhemlsKVwifSx7XCJrZXlcIjpcInB0XCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlXCJ9LHtcImtleVwiOlwicm5cIixcIm5hbWVcIjpcIktpcnVuZGlcIn0se1wia2V5XCI6XCJyb1wiLFwibmFtZVwiOlwiUm9tYW5pYW5cIn0se1wia2V5XCI6XCJydVwiLFwibmFtZVwiOlwiUnVzc2lhblwifSx7XCJrZXlcIjpcInJ3XCIsXCJuYW1lXCI6XCJLaW55YXJ3YW5kYSAoUndhbmRhKVwifSx7XCJrZXlcIjpcInNkXCIsXCJuYW1lXCI6XCJTaW5kaGlcIn0se1wia2V5XCI6XCJzZVwiLFwibmFtZVwiOlwiTm9ydGhlcm4gU2FtaVwifSx7XCJrZXlcIjpcInNpXCIsXCJuYW1lXCI6XCJTaW5oYWxlc2VcIn0se1wia2V5XCI6XCJza1wiLFwibmFtZVwiOlwiU2xvdmFrXCJ9LHtcImtleVwiOlwic2xcIixcIm5hbWVcIjpcIlNsb3ZlbmlhblwifSx7XCJrZXlcIjpcInNxXCIsXCJuYW1lXCI6XCJBbGJhbmlhblwifSx7XCJrZXlcIjpcInNyLWN5cmxcIixcIm5hbWVcIjpcIlNlcmJpYW4gQ3lyaWxsaWNcIn0se1wia2V5XCI6XCJzc1wiLFwibmFtZVwiOlwic2lTd2F0aVwifSx7XCJrZXlcIjpcInN2LWZpXCIsXCJuYW1lXCI6XCJGaW5sYW5kIFN3ZWRpc2hcIn0se1wia2V5XCI6XCJzclwiLFwibmFtZVwiOlwiU2VyYmlhblwifSx7XCJrZXlcIjpcInN2XCIsXCJuYW1lXCI6XCJTd2VkaXNoXCJ9LHtcImtleVwiOlwic3dcIixcIm5hbWVcIjpcIlN3YWhpbGlcIn0se1wia2V5XCI6XCJ0YVwiLFwibmFtZVwiOlwiVGFtaWxcIn0se1wia2V5XCI6XCJ0ZVwiLFwibmFtZVwiOlwiVGVsdWd1XCJ9LHtcImtleVwiOlwidGV0XCIsXCJuYW1lXCI6XCJUZXR1biBEaWxpIChFYXN0IFRpbW9yKVwifSx7XCJrZXlcIjpcInRnXCIsXCJuYW1lXCI6XCJUYWppa1wifSx7XCJrZXlcIjpcInRoXCIsXCJuYW1lXCI6XCJUaGFpXCJ9LHtcImtleVwiOlwidGtcIixcIm5hbWVcIjpcIlR1cmttZW5cIn0se1wia2V5XCI6XCJ0bC1waFwiLFwibmFtZVwiOlwiVGFnYWxvZyAoUGhpbGlwcGluZXMpXCJ9LHtcImtleVwiOlwidGxoXCIsXCJuYW1lXCI6XCJLbGluZ29uXCJ9LHtcImtleVwiOlwidHJcIixcIm5hbWVcIjpcIlR1cmtpc2hcIn0se1wia2V5XCI6XCJ0emxcIixcIm5hbWVcIjpcIlRhbG9zc2FuXCJ9LHtcImtleVwiOlwidHptLWxhdG5cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluXCJ9LHtcImtleVwiOlwidHptXCIsXCJuYW1lXCI6XCJDZW50cmFsIEF0bGFzIFRhbWF6aWdodFwifSx7XCJrZXlcIjpcInVnLWNuXCIsXCJuYW1lXCI6XCJVeWdodXIgKENoaW5hKVwifSx7XCJrZXlcIjpcInVrXCIsXCJuYW1lXCI6XCJVa3JhaW5pYW5cIn0se1wia2V5XCI6XCJ1clwiLFwibmFtZVwiOlwiVXJkdVwifSx7XCJrZXlcIjpcInV6LWxhdG5cIixcIm5hbWVcIjpcIlV6YmVrIExhdGluXCJ9LHtcImtleVwiOlwidXpcIixcIm5hbWVcIjpcIlV6YmVrXCJ9LHtcImtleVwiOlwidmlcIixcIm5hbWVcIjpcIlZpZXRuYW1lc2VcIn0se1wia2V5XCI6XCJ4LXBzZXVkb1wiLFwibmFtZVwiOlwiUHNldWRvXCJ9LHtcImtleVwiOlwieW9cIixcIm5hbWVcIjpcIllvcnViYSBOaWdlcmlhXCJ9LHtcImtleVwiOlwiemgtY25cIixcIm5hbWVcIjpcIkNoaW5lc2UgKENoaW5hKVwifSx7XCJrZXlcIjpcInpoLWhrXCIsXCJuYW1lXCI6XCJDaGluZXNlIChIb25nIEtvbmcpXCJ9LHtcImtleVwiOlwiemgtdHdcIixcIm5hbWVcIjpcIkNoaW5lc2UgKFRhaXdhbilcIn0se1wia2V5XCI6XCJ6aFwiLFwibmFtZVwiOlwiQ2hpbmVzZVwifSx7XCJrZXlcIjpcIm9jLWxuY1wiLFwibmFtZVwiOlwiT2NjaXRhbiwgbGVuZ2Fkb2NpYW4gZGlhbGVjdGVcIn0se1wia2V5XCI6XCJublwiLFwibmFtZVwiOlwiTnlub3Jza1wifSx7XCJrZXlcIjpcInBhLWluXCIsXCJuYW1lXCI6XCJQdW5qYWJpIChJbmRpYSlcIn1dXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hZi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FtLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItZHouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1pcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWt3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItbHkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1tYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLXNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2F6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibi1iZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ici5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3kuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLWF0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2R2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1hdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tZ2IuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWlsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1uei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLXNnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tdHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1teC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLXByLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtdXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2V0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci1jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9meS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dvbS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9odC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHktYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXQtY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2phLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvanYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2trLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva20uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva3UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9reS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2xiLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9taS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21rLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21yLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXMtbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL210LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9uYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25lLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmwtYmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvb2MtbG5jLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcGEtaW4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3B0LWJyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ybi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcnUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2UuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zaS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2wuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zcS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLWN5cmwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3YtZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RldC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RsLXBoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGxoLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90emwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90em0tbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VnLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3ZpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUveC1wc2V1ZG8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS95by5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLWNuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtaGsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC10dy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBkYXlqc1xuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENsYXNzVmFsdWUgfSBmcm9tICdjbHN4J1xuaW1wb3J0IHsgY2xzeCB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuICByZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCB7IGdldFdlZWtEYXlzLCBnZXRNb250aFdlZWtzIH0gZnJvbSAnLi9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gc2FmZURhdGUoXG4gIGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogZGF5anMuRGF5anMgfCB1bmRlZmluZWQge1xuICBpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9XG4gIGlmIChkYXlqcy5pc0RheWpzKGRhdGUpKSB7XG4gICAgcmV0dXJuIGRhdGVcbiAgfVxuICBjb25zdCBwYXJzZWREYXRlID0gZGF5anMoZGF0ZSlcbiAgcmV0dXJuIHBhcnNlZERhdGUuaXNWYWxpZCgpID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3Qgb21pdEtleXMgPSA8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIGtleW9mIFQ+KFxuICBvYmo6IFQsXG4gIGtleXM6IEtbXVxuKTogT21pdDxULCBLPiA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4ub2JqIH1cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGRlbGV0ZSByZXN1bHRba2V5XVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGNhbGVuZGFyIGV2ZW50cyBmcm9tIHB1YmxpYy1mYWNpbmcgZm9ybWF0IHRvIGludGVybmFsIGZvcm1hdC5cbiAqIENvbnZlcnRzIGZsZXhpYmxlIGRhdGUgdHlwZXMgKGRheWpzLCBEYXRlLCBzdHJpbmcpIHRvIHN0cmljdCBkYXlqcyBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBldmVudHMgLSBBcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBmbGV4aWJsZSBkYXRlIHR5cGVzXG4gKiBAcmV0dXJucyBOb3JtYWxpemVkIGFycmF5IG9mIGNhbGVuZGFyIGV2ZW50cyB3aXRoIGRheWpzIGRhdGVzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlZ3VsYXIgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCBldmVudHMgPSBub3JtYWxpemVFdmVudHM8SWxhbXlDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqXG4gKiAvLyBSZXNvdXJjZSBjYWxlbmRhciBldmVudHNcbiAqIGNvbnN0IHJlc291cmNlRXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4ocHJvcEV2ZW50cylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50czxcbiAgVElucHV0IGV4dGVuZHMge1xuICAgIHN0YXJ0OiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcbiAgICBlbmQ6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZ1xuICB9LFxuICBUT3V0cHV0LFxuPihldmVudHM6IFRJbnB1dFtdIHwgdW5kZWZpbmVkKTogVE91dHB1dFtdIHtcbiAgaWYgKCFldmVudHMgfHwgIWV2ZW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuICAgICAgZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuICAgIH0gYXMgVE91dHB1dFxuICB9KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB3ZWVrIGRheXMgZm9yIGEgZ2l2ZW4gZGF0ZSBhbmQgZmlyc3QgZGF5IG9mIHdlZWsgc2V0dGluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgY3VycmVudCBkYXRlIGlzIGFsd2F5cyBpbmNsdWRlZCBpbiB0aGUgcmV0dXJuZWQgd2VlayxcbiAqIGV2ZW4gd2hlbiB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgaXMgc2V0IHRvIGEgZGF5IGFmdGVyIHRoZSBjdXJyZW50IGRhdGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnREYXRlIC0gVGhlIHJlZmVyZW5jZSBkYXRlIGZvciBjYWxjdWxhdGluZyB0aGUgd2Vla1xuICogQHBhcmFtIGZpcnN0RGF5T2ZXZWVrIC0gVGhlIGRheSBudW1iZXIgKDAtNikgcmVwcmVzZW50aW5nIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy4pXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiA3IGRheWpzIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB3ZWVrIGRheXMsIHN0YXJ0aW5nIGZyb20gZmlyc3REYXlPZldlZWtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBNb25kYXkgZm9yIGN1cnJlbnQgZGF0ZVxuICogY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhkYXlqcygnMjAyNS0xMC0xMycpLCAxKVxuICogLy8gUmV0dXJuczogW01vbiBPY3QgMTMsIFR1ZSBPY3QgMTQsIC4uLiwgU3VuIE9jdCAxOV1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gR2V0IHdlZWsgc3RhcnRpbmcgZnJvbSBXZWRuZXNkYXkgd2hlbiBjdXJyZW50IGRhdGUgaXMgTW9uZGF5XG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDMpXG4gKiAvLyBSZXR1cm5zOiBbV2VkIE9jdCA4LCBUaHUgT2N0IDksIC4uLiwgVHVlIE9jdCAxNF0gKGluY2x1ZGVzIE1vbmRheSBPY3QgMTMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWVrRGF5cyhcbiAgY3VycmVudERhdGU6IGRheWpzLkRheWpzLFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyXG4pOiBkYXlqcy5EYXlqc1tdIHtcbiAgY29uc3Qgc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUgPSBjdXJyZW50RGF0ZVxuICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAuZGF5KGZpcnN0RGF5T2ZXZWVrKVxuXG4gIGNvbnN0IGFkanVzdGVkU3RhcnRPZldlZWsgPSBjdXJyZW50RGF0ZS5pc0JlZm9yZShzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSlcbiAgICA/IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICA6IHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlXG5cbiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGRheUluZGV4KSA9PlxuICAgIGFkanVzdGVkU3RhcnRPZldlZWsuYWRkKGRheUluZGV4LCAnZGF5JylcbiAgKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyA2IHdlZWtzIG9mIGRheXMgZm9yIGEgbW9udGggY2FsZW5kYXIgdmlldy5cbiAqIEFsd2F5cyByZXR1cm5zIDQyIGRheXMgKDYgd2Vla3Mgw5cgNyBkYXlzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vbnRoV2Vla3MoXG4gIG1vbnRoRGF0ZTogZGF5anMuRGF5anMsXG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW11bXSB7XG4gIGNvbnN0IGZpcnN0V2VlayA9IGdldFdlZWtEYXlzKG1vbnRoRGF0ZS5zdGFydE9mKCdtb250aCcpLCBmaXJzdERheU9mV2VlaylcblxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNiB9LCAoXywgd2Vla0luZGV4KSA9PiB7XG4gICAgY29uc3Qgd2Vla1N0YXJ0ID0gZmlyc3RXZWVrWzBdLmFkZCh3ZWVrSW5kZXgsICd3ZWVrJylcbiAgICByZXR1cm4gZ2V0V2Vla0RheXMod2Vla1N0YXJ0LCBmaXJzdERheU9mV2VlaylcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZURyYWdnYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5jb25zdCBnZXRCb3JkZXJSYWRpdXNDbGFzcyA9IChcbiAgaXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbixcbiAgaXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW5cbikgPT4ge1xuICBpZiAoaXNUcnVuY2F0ZWRTdGFydCAmJiBpc1RydW5jYXRlZEVuZCkge1xuICAgIHJldHVybiAncm91bmRlZC1ub25lJ1xuICB9XG4gIGlmIChpc1RydW5jYXRlZFN0YXJ0KSB7XG4gICAgcmV0dXJuICdyb3VuZGVkLXItbWQgcm91bmRlZC1sLW5vbmUnXG4gIH1cbiAgaWYgKGlzVHJ1bmNhdGVkRW5kKSB7XG4gICAgcmV0dXJuICdyb3VuZGVkLWwtbWQgcm91bmRlZC1yLW5vbmUnXG4gIH1cbiAgcmV0dXJuICdyb3VuZGVkLW1kJ1xufVxuXG5mdW5jdGlvbiBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQoe1xuICBlbGVtZW50SWQsXG4gIGV2ZW50LFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICBkaXNhYmxlRHJhZyA9IGZhbHNlLFxufToge1xuICBlbGVtZW50SWQ6IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgc3R5bGU/OiBDU1NQcm9wZXJ0aWVzXG4gIGV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGRpc2FibGVEcmFnPzogYm9vbGVhblxufSkge1xuICBjb25zdCB7IG9uRXZlbnRDbGljaywgcmVuZGVyRXZlbnQsIGRpc2FibGVFdmVudENsaWNrLCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG4gICAgdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuICAgICAgb25FdmVudENsaWNrOiBzdGF0ZS5vbkV2ZW50Q2xpY2ssXG4gICAgICByZW5kZXJFdmVudDogc3RhdGUucmVuZGVyRXZlbnQsXG4gICAgICBkaXNhYmxlRXZlbnRDbGljazogc3RhdGUuZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICB9KSlcblxuICBjb25zdCB7IGF0dHJpYnV0ZXMsIGxpc3RlbmVycywgc2V0Tm9kZVJlZiwgaXNEcmFnZ2luZyB9ID0gdXNlRHJhZ2dhYmxlKHtcbiAgICBpZDogZWxlbWVudElkLFxuICAgIGRhdGE6IHtcbiAgICAgIGV2ZW50LFxuICAgICAgdHlwZTogJ2NhbGVuZGFyLWV2ZW50JyxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgLy8gRGVmYXVsdCBldmVudCBjb250ZW50IHRvIHJlbmRlciBpZiBjdXN0b20gcmVuZGVyRXZlbnQgaXMgbm90IHByb3ZpZGVkXG4gIGNvbnN0IERlZmF1bHRFdmVudENvbnRlbnQgPSAoKSA9PiB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBldmVudCBoYXMgdHJ1bmNhdGlvbiBpbmZvcm1hdGlvblxuICAgIGNvbnN0IGVuaGFuY2VkRXZlbnQgPSBldmVudCBhcyB1bmtub3duIGFzIHtcbiAgICAgIGlzVHJ1bmNhdGVkU3RhcnQ/OiBib29sZWFuXG4gICAgICBpc1RydW5jYXRlZEVuZD86IGJvb2xlYW5cbiAgICB9XG4gICAgY29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRTdGFydFxuICAgIGNvbnN0IGlzVHJ1bmNhdGVkRW5kID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZEVuZFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBldmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICBldmVudC5jb2xvciB8fCAndGV4dC13aGl0ZScsXG4gICAgICAgICAgJ2gtZnVsbCB3LWZ1bGwgcHgtMSBib3JkZXItWzEuNXB4XSBib3JkZXItY2FyZCB0ZXh0LWxlZnQgb3ZlcmZsb3ctY2xpcCByZWxhdGl2ZScsXG4gICAgICAgICAgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MoaXNUcnVuY2F0ZWRTdGFydCwgaXNUcnVuY2F0ZWRFbmQpXG4gICAgICAgICl9XG4gICAgICAgIHN0eWxlPXt7IGJhY2tncm91bmRDb2xvcjogZXZlbnQuYmFja2dyb3VuZENvbG9yLCBjb2xvcjogZXZlbnQuY29sb3IgfX1cbiAgICAgID5cbiAgICAgICAgey8qIExlZnQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cbiAgICAgICAge2lzVHJ1bmNhdGVkU3RhcnQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRXZlbnQgdGl0bGUgKi99XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICd0ZXh0LVsxMHB4XSBmb250LXNlbWlib2xkIHNtOnRleHQteHMgbXQtMC41JyxcbiAgICAgICAgICAgIC8vIEFkZCBzbGlnaHQgcGFkZGluZyB0byBhdm9pZCBvdmVybGFwIHdpdGggaW5kaWNhdG9yc1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCAmJiAncGwtMScsXG4gICAgICAgICAgICBpc1RydW5jYXRlZEVuZCAmJiAncHItMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2V2ZW50LnRpdGxlfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgey8qIFJpZ2h0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgIHtpc1RydW5jYXRlZEVuZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGJvdHRvbS0wIHctMC41IGJnLWZvcmVncm91bmQvMjVcIj48L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAga2V5PXtlbGVtZW50SWR9XG4gICAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgICAgey4uLmF0dHJpYnV0ZXN9XG4gICAgICAgIHsuLi5saXN0ZW5lcnN9XG4gICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTUwIH19XG4gICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBsYXlvdXRcbiAgICAgICAgbGF5b3V0SWQ9e2VsZW1lbnRJZH1cbiAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC40LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICd0cnVuY2F0ZSBoLWZ1bGwgdy1mdWxsJyxcbiAgICAgICAgICBkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3BcbiAgICAgICAgICAgID8gZGlzYWJsZUV2ZW50Q2xpY2tcbiAgICAgICAgICAgICAgPyAnY3Vyc29yLWRlZmF1bHQnXG4gICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgOiAnY3Vyc29yLWdyYWInLFxuICAgICAgICAgIGlzRHJhZ2dpbmcgJiZcbiAgICAgICAgICAgICEoZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wKSAmJlxuICAgICAgICAgICAgJ2N1cnNvci1ncmFiYmluZyBzaGFkb3ctbGcnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgey8qIFVzZSBjdXN0b20gcmVuZGVyRXZlbnQgZnJvbSBjb250ZXh0IGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBkZWZhdWx0ICovfVxuICAgICAgICB7cmVuZGVyRXZlbnQgPyByZW5kZXJFdmVudChldmVudCkgOiA8RGVmYXVsdEV2ZW50Q29udGVudCAvPn1cbiAgICAgIDwvbW90aW9uLmRpdj5cbiAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgRHJhZ2dhYmxlRXZlbnQgPSBtZW1vKFxuICBEcmFnZ2FibGVFdmVudFVubWVtb2l6ZWQsXG4gIChwcmV2UHJvcHMsIG5leHRQcm9wcykgPT4ge1xuICAgIC8vIENvbXBhcmUgdGhlIGVzc2VudGlhbCBwcm9wcyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgICByZXR1cm4gKFxuICAgICAgcHJldlByb3BzLmVsZW1lbnRJZCA9PT0gbmV4dFByb3BzLmVsZW1lbnRJZCAmJlxuICAgICAgcHJldlByb3BzLmRpc2FibGVEcmFnID09PSBuZXh0UHJvcHMuZGlzYWJsZURyYWcgJiZcbiAgICAgIHByZXZQcm9wcy5jbGFzc05hbWUgPT09IG5leHRQcm9wcy5jbGFzc05hbWUgJiZcbiAgICAgIHByZXZQcm9wcy5ldmVudCA9PT0gbmV4dFByb3BzLmV2ZW50XG4gICAgKVxuICB9XG4pXG4iLAogICAgImltcG9ydCB7IHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5cbi8qKlxuICogR2VuZXJpYyBob29rIHRoYXQgZGV0ZWN0cyB3aGljaCBjYWxlbmRhciBjb250ZXh0IGlzIGF2YWlsYWJsZSBhbmQgcmV0dXJucyBzZWxlY3RlZCBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTbWFydENhbGVuZGFyQ29udGV4dDxUPihzZWxlY3RvcjogKGNvbnRleHQpID0+IFQpOiBUIHtcbiAgLy8gQ2hlY2sgYm90aCBjb250ZXh0cyB1c2luZyB1c2VDb250ZXh0IGRpcmVjdGx5IChubyBob29rcylcbiAgY29uc3QgcmVzb3VyY2VDb250ZXh0ID0gdXNlQ29udGV4dChSZXNvdXJjZUNhbGVuZGFyQ29udGV4dClcbiAgY29uc3QgcmVndWxhckNvbnRleHQgPSB1c2VDb250ZXh0KENhbGVuZGFyQ29udGV4dClcblxuICBpZiAocmVzb3VyY2VDb250ZXh0KSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yKHJlc291cmNlQ29udGV4dClcbiAgfVxuXG4gIGlmIChyZWd1bGFyQ29udGV4dCkge1xuICAgIHJldHVybiBzZWxlY3RvcihyZWd1bGFyQ29udGV4dClcbiAgfVxuXG4gIC8vIElmIG5laXRoZXIgY29udGV4dCBpcyBhdmFpbGFibGUsIHRocm93IGFuIGVycm9yXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICAndXNlU21hcnRDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXIgb3IgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyJ1xuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDZWxsQ2xpY2tJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHtcbiAgQ2FsZW5kYXJDb250ZXh0VHlwZSxcbiAgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSBleHRlbmRzIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICAvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuICByZXNvdXJjZXM6IFJlc291cmNlW11cbiAgdmlzaWJsZVJlc291cmNlczogU2V0PHN0cmluZyB8IG51bWJlcj5cblxuICAvLyBSZXNvdXJjZSB1dGlsaXRpZXNcbiAgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IENhbGVuZGFyRXZlbnRbXVxuICBnZXRFdmVudHNGb3JSZXNvdXJjZXM6IChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSkgPT4gQ2FsZW5kYXJFdmVudFtdXG4gIGdldFJlc291cmNlQnlJZDogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gUmVzb3VyY2UgfCB1bmRlZmluZWRcbiAgZ2V0VmlzaWJsZVJlc291cmNlczogKCkgPT4gUmVzb3VyY2VbXVxuXG4gIC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuICBpc0V2ZW50Q3Jvc3NSZXNvdXJjZTogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBib29sZWFuXG4gIGdldEV2ZW50UmVzb3VyY2VJZHM6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gKHN0cmluZyB8IG51bWJlcilbXVxuXG4gIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyIGNvbnRleHRcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG4gIHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxcbiAgUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkXG4+ID0gY3JlYXRlQ29udGV4dDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0ID0gKCk6IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ3VzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG4gICAgKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCByZXNvdXJjZSBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm5cbiAgZXh0ZW5kcyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VbXVxuICByZWFkb25seSBnZXRFdmVudHNGb3JSZXNvdXJjZTogKFxuICAgIHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuICApID0+IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCA9XG4gICgpOiBVc2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChSZXNvdXJjZUNhbGVuZGFyQ29udGV4dClcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcbiAgICAgIHZpZXc6IGNvbnRleHQudmlldyxcbiAgICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgICByZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzLFxuICAgICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcbiAgICAgIHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICAgIHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuICAgICAgc2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuICAgICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgICAgbmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuICAgICAgcHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuICAgICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgICBhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgICBvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG4gICAgICBjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcbiAgICAgIGdldEV2ZW50c0ZvclJlc291cmNlOiBjb250ZXh0LmdldEV2ZW50c0ZvclJlc291cmNlLFxuICAgICAgYnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuICAgIH0gYXMgY29uc3RcbiAgfVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDZWxsQ2xpY2tJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclByb3ZpZGVyUHJvcHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmNvbnN0IGdldEV2ZW50UmVzb3VyY2VJZHMgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0+IHtcbiAgaWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG4gICAgcmV0dXJuIGV2ZW50LnJlc291cmNlSWRzXG4gIH1cbiAgaWYgKGV2ZW50LnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbZXZlbnQucmVzb3VyY2VJZF1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzIGV4dGVuZHMgQ2FsZW5kYXJQcm92aWRlclByb3BzIHtcbiAgZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG4gIHJlc291cmNlcz86IFJlc291cmNlW11cbiAgcmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8XG4gIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclByb3BzXG4+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGV2ZW50cyA9IFtdLFxuICByZXNvdXJjZXMgPSBbXSxcbiAgZmlyc3REYXlPZldlZWsgPSAwLFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIGluaXRpYWxEYXRlLFxuICByZW5kZXJFdmVudCxcbiAgb25FdmVudENsaWNrLFxuICBvbkNlbGxDbGljayxcbiAgb25WaWV3Q2hhbmdlLFxuICBvbkV2ZW50QWRkLFxuICBvbkV2ZW50VXBkYXRlLFxuICBvbkV2ZW50RGVsZXRlLFxuICBvbkRhdGVDaGFuZ2UsXG4gIGxvY2FsZSxcbiAgdGltZXpvbmUsXG4gIGRpc2FibGVDZWxsQ2xpY2ssXG4gIGRpc2FibGVFdmVudENsaWNrLFxuICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIGRheU1heEV2ZW50cyxcbiAgc3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG4gIHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcbiAgaGVhZGVyQ29tcG9uZW50LFxuICBoZWFkZXJDbGFzc05hbWUsXG4gIHRyYW5zbGF0aW9ucyxcbiAgdHJhbnNsYXRvcixcbiAgcmVuZGVyUmVzb3VyY2UsXG4gIHJlbmRlckV2ZW50Rm9ybSxcbiAgYnVzaW5lc3NIb3VycyxcbiAgdGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcbn0pID0+IHtcbiAgLy8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcbiAgY29uc3QgW2N1cnJlbnRSZXNvdXJjZXNdID0gdXNlU3RhdGU8UmVzb3VyY2VbXT4ocmVzb3VyY2VzKVxuICBjb25zdCBbdmlzaWJsZVJlc291cmNlcywgc2V0VmlzaWJsZVJlc291cmNlc10gPSB1c2VTdGF0ZTxcbiAgICBTZXQ8c3RyaW5nIHwgbnVtYmVyPlxuICA+KG5ldyBTZXQocmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKVxuXG4gIC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG4gIGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuICAgIGV2ZW50cyxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBpbml0aWFsVmlldyxcbiAgICBpbml0aWFsRGF0ZSxcbiAgICBidXNpbmVzc0hvdXJzLFxuICAgIG9uRXZlbnRBZGQsXG4gICAgb25FdmVudFVwZGF0ZSxcbiAgICBvbkV2ZW50RGVsZXRlLFxuICAgIG9uRGF0ZUNoYW5nZSxcbiAgICBvblZpZXdDaGFuZ2U6IG9uVmlld0NoYW5nZSxcbiAgICBsb2NhbGUsXG4gICAgdGltZXpvbmUsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIHRyYW5zbGF0b3IsXG4gIH0pXG5cbiAgLy8gUmVzb3VyY2UgdmlzaWJpbGl0eVxuICBjb25zdCB0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICBzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQocHJldilcbiAgICAgICAgaWYgKG5ld1NldC5oYXMocmVzb3VyY2VJZCkpIHtcbiAgICAgICAgICBuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3U2V0LmFkZChyZXNvdXJjZUlkKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdTZXRcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3Qgc2hvd1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKVxuICB9LCBbXSlcblxuICBjb25zdCBoaWRlUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgc2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuICAgICAgbmV3U2V0LmRlbGV0ZShyZXNvdXJjZUlkKVxuICAgICAgcmV0dXJuIG5ld1NldFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNob3dBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KGN1cnJlbnRSZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG4gIH0sIFtjdXJyZW50UmVzb3VyY2VzXSlcblxuICBjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldCgpKVxuICB9LCBbXSlcblxuICAvLyBFdmVudCB1dGlsaXRpZXNcbiAgY29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgICAgIHJldHVybiBjYWxlbmRhckVuZ2luZS5ldmVudHMuZmlsdGVyKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQucmVzb3VyY2VJZHMpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQucmVzb3VyY2VJZHMuaW5jbHVkZXMocmVzb3VyY2VJZClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQucmVzb3VyY2VJZCA9PT0gcmVzb3VyY2VJZFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG4gIClcblxuICBjb25zdCBnZXRFdmVudHNGb3JSZXNvdXJjZXMgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZHM6IChzdHJpbmcgfCBudW1iZXIpW10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgcmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50UmVzb3VyY2VJZHMgPSBnZXRFdmVudFJlc291cmNlSWRzKGV2ZW50KVxuICAgICAgICByZXR1cm4gZXZlbnRSZXNvdXJjZUlkcy5zb21lKChpZCkgPT4gcmVzb3VyY2VJZHMuaW5jbHVkZXMoaWQpKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtjYWxlbmRhckVuZ2luZS5ldmVudHNdXG4gIClcblxuICBjb25zdCBnZXRSZXNvdXJjZUJ5SWQgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUmVzb3VyY2UgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgcmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmluZCgocmVzb3VyY2UpID0+IHJlc291cmNlLmlkID09PSByZXNvdXJjZUlkKVxuICAgIH0sXG4gICAgW2N1cnJlbnRSZXNvdXJjZXNdXG4gIClcblxuICBjb25zdCBnZXRWaXNpYmxlUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCk6IFJlc291cmNlW10gPT4ge1xuICAgIHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbHRlcigocmVzb3VyY2UpID0+XG4gICAgICB2aXNpYmxlUmVzb3VyY2VzLmhhcyhyZXNvdXJjZS5pZClcbiAgICApXG4gIH0sIFtjdXJyZW50UmVzb3VyY2VzLCB2aXNpYmxlUmVzb3VyY2VzXSlcblxuICAvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcbiAgY29uc3QgaXNFdmVudENyb3NzUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gQm9vbGVhbihldmVudC5yZXNvdXJjZUlkcyAmJiBldmVudC5yZXNvdXJjZUlkcy5sZW5ndGggPiAxKVxuICB9LCBbXSlcblxuICAvLyBDdXN0b20gaGFuZGxlcnNcbiAgY29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgfSxcbiAgICBbY2FsZW5kYXJFbmdpbmVdXG4gIClcblxuICBjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25FdmVudENsaWNrKSB7XG4gICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRFdmVudChldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuICAgICAgaWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkNlbGxDbGljaykge1xuICAgICAgICBvbkNlbGxDbGljayhpbmZvKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3RXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgICAgdGl0bGU6IGNhbGVuZGFyRW5naW5lLnQoJ25ld0V2ZW50JyksXG4gICAgICAgICAgc3RhcnQ6IGluZm8uc3RhcnQsXG4gICAgICAgICAgZW5kOiBpbmZvLmVuZCxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgYWxsRGF5OiBmYWxzZSxcbiAgICAgICAgfSBhcyBDYWxlbmRhckV2ZW50XG5cbiAgICAgICAgaWYgKGluZm8ucmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmV3RXZlbnQucmVzb3VyY2VJZCA9IGluZm8ucmVzb3VyY2VJZFxuICAgICAgICB9XG5cbiAgICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChuZXdFdmVudClcbiAgICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWREYXRlKGluZm8uc3RhcnQpXG4gICAgICAgIGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cbiAgKVxuXG4gIC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICAuLi5jYWxlbmRhckVuZ2luZSxcbiAgICAgIHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG4gICAgICBzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuICAgICAgZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG4gICAgICByYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcblxuICAgICAgLy8gUmVzb3VyY2Utc3BlY2lmaWMgc3RhdGVcbiAgICAgIHJlc291cmNlczogY3VycmVudFJlc291cmNlcyxcbiAgICAgIHZpc2libGVSZXNvdXJjZXMsXG4gICAgICB0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHksXG4gICAgICBzaG93UmVzb3VyY2UsXG4gICAgICBoaWRlUmVzb3VyY2UsXG4gICAgICBzaG93QWxsUmVzb3VyY2VzLFxuICAgICAgaGlkZUFsbFJlc291cmNlcyxcblxuICAgICAgLy8gUmVzb3VyY2UgdXRpbGl0aWVzXG4gICAgICBnZXRFdmVudHNGb3JSZXNvdXJjZSxcbiAgICAgIGdldEV2ZW50c0ZvclJlc291cmNlcyxcbiAgICAgIGdldFJlc291cmNlQnlJZCxcbiAgICAgIGdldFZpc2libGVSZXNvdXJjZXMsXG5cbiAgICAgIC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuICAgICAgaXNFdmVudENyb3NzUmVzb3VyY2UsXG4gICAgICBnZXRFdmVudFJlc291cmNlSWRzLFxuXG4gICAgICAvLyBPdmVycmlkZSBoYW5kbGVyc1xuICAgICAgb25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuICAgICAgb25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcblxuICAgICAgLy8gUGFzcyB0aHJvdWdoIGhlYWRlciBwcm9wc1xuICAgICAgaGVhZGVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2xhc3NOYW1lLFxuXG4gICAgICAvLyBQYXNzIHRocm91Z2ggb3RoZXIgcHJvcHNcbiAgICAgIHJlbmRlckV2ZW50LFxuICAgICAgcmVuZGVyUmVzb3VyY2UsXG4gICAgICByZW5kZXJFdmVudEZvcm0sXG4gICAgICBsb2NhbGUsXG4gICAgICB0aW1lem9uZSxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRXZlbnRDbGljayxcbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRheU1heEV2ZW50cyxcbiAgICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgYnVzaW5lc3NIb3VycyxcbiAgICAgIHRpbWVGb3JtYXQsXG4gICAgfSksXG4gICAgW1xuICAgICAgY2FsZW5kYXJFbmdpbmUsXG4gICAgICBjdXJyZW50UmVzb3VyY2VzLFxuICAgICAgdmlzaWJsZVJlc291cmNlcyxcbiAgICAgIHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcbiAgICAgIHNob3dSZXNvdXJjZSxcbiAgICAgIGhpZGVSZXNvdXJjZSxcbiAgICAgIHNob3dBbGxSZXNvdXJjZXMsXG4gICAgICBoaWRlQWxsUmVzb3VyY2VzLFxuICAgICAgZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG4gICAgICBnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG4gICAgICBnZXRSZXNvdXJjZUJ5SWQsXG4gICAgICBnZXRWaXNpYmxlUmVzb3VyY2VzLFxuICAgICAgaXNFdmVudENyb3NzUmVzb3VyY2UsXG4gICAgICBoYW5kbGVFdmVudENsaWNrLFxuICAgICAgaGFuZGxlRGF0ZUNsaWNrLFxuICAgICAgcmVuZGVyRXZlbnQsXG4gICAgICByZW5kZXJSZXNvdXJjZSxcbiAgICAgIHJlbmRlckV2ZW50Rm9ybSxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHRpbWV6b25lLFxuICAgICAgZGlzYWJsZUNlbGxDbGljayxcbiAgICAgIGRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wLFxuICAgICAgZGF5TWF4RXZlbnRzLFxuICAgICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgICBidXNpbmVzc0hvdXJzLFxuICAgICAgdGltZUZvcm1hdCxcbiAgICBdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQsIEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgdXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IGdldFdlZWtEYXlzLCBnZXRNb250aFdlZWtzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZUNvbmZpZyB7XG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgaW5pdGlhbFZpZXc/OiBDYWxlbmRhclZpZXdcbiAgaW5pdGlhbERhdGU/OiBkYXlqcy5EYXlqc1xuICBidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3Vyc1xuICBvbkV2ZW50QWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRXZlbnRVcGRhdGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25FdmVudERlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkRhdGVDaGFuZ2U/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgb25WaWV3Q2hhbmdlPzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuICBsb2NhbGU/OiBzdHJpbmdcbiAgdGltZXpvbmU/OiBzdHJpbmdcbiAgdHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG4gIHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZVJldHVybiB7XG4gIGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICB2aWV3OiBDYWxlbmRhclZpZXdcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmF3RXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgZGF5TWF4RXZlbnRzOiBudW1iZXJcbiAgY3VycmVudExvY2FsZTogc3RyaW5nXG4gIGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuICBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuICBzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG4gIHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG4gIHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248ZGF5anMuRGF5anMgfCBudWxsPj5cbiAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoXG4gICAgc3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcbiAgICBlbmREYXRlOiBkYXlqcy5EYXlqc1xuICApID0+IENhbGVuZGFyRXZlbnRbXVxuICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgdDogKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBzdHJpbmdcbn1cblxuY29uc3QgVklFV19VTklUUzogUmVjb3JkPENhbGVuZGFyVmlldywgZGF5anMuTWFuaXB1bGF0ZVR5cGU+ID0ge1xuICBkYXk6ICdkYXknLFxuICB3ZWVrOiAnd2VlaycsXG4gIG1vbnRoOiAnbW9udGgnLFxuICB5ZWFyOiAneWVhcicsXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcbiAgY29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuICBjb25zdCB7XG4gICAgZXZlbnRzID0gW10sXG4gICAgZmlyc3REYXlPZldlZWsgPSAwLFxuICAgIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgICBpbml0aWFsRGF0ZSA9IGRheWpzKCksXG4gICAgYnVzaW5lc3NIb3VycyxcbiAgICBvbkV2ZW50QWRkLFxuICAgIG9uRXZlbnRVcGRhdGUsXG4gICAgb25FdmVudERlbGV0ZSxcbiAgICBvbkRhdGVDaGFuZ2UsXG4gICAgb25WaWV3Q2hhbmdlLFxuICAgIGxvY2FsZSxcbiAgICB0aW1lem9uZSxcbiAgICB0cmFuc2xhdGlvbnMsXG4gICAgdHJhbnNsYXRvcixcbiAgfSA9IGNvbmZpZ1xuXG4gIGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anM+KGluaXRpYWxEYXRlKVxuICBjb25zdCBbdmlldywgc2V0Vmlld10gPSB1c2VTdGF0ZTxDYWxlbmRhclZpZXc+KGluaXRpYWxWaWV3KVxuICBjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcbiAgY29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGUobG9jYWxlIHx8ICdlbicpXG5cbiAgY29uc3QgdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh0cmFuc2xhdG9yKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRvclxuICAgIH1cbiAgICBpZiAodHJhbnNsYXRpb25zKSB7XG4gICAgICByZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcbiAgICB9XG4gICAgcmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gZGVmYXVsdFRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuICB9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuICBjb25zdCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgY29uc3QgYWxsRXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGN1cnJlbnRFdmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LnJydWxlKSB7XG4gICAgICAgICAgYWxsRXZlbnRzLnB1c2goXG4gICAgICAgICAgICAuLi5nZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG4gICAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgICBjdXJyZW50RXZlbnRzLFxuICAgICAgICAgICAgICBzdGFydERhdGUsXG4gICAgICAgICAgICAgIGVuZERhdGUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzdGFydHNJblJhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKSAmJlxuICAgICAgICAgICAgZXZlbnQuc3RhcnQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcbiAgICAgICAgICBjb25zdCBlbmRzSW5SYW5nZSA9XG4gICAgICAgICAgICBldmVudC5lbmQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG4gICAgICAgICAgICBldmVudC5lbmQuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSlcbiAgICAgICAgICBjb25zdCBzcGFuc1JhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcbiAgICAgICAgICBpZiAoc3RhcnRzSW5SYW5nZSB8fCBlbmRzSW5SYW5nZSB8fCBzcGFuc1JhbmdlKSB7XG4gICAgICAgICAgICBhbGxFdmVudHMucHVzaChldmVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbGxFdmVudHNcbiAgICB9LFxuICAgIFtjdXJyZW50RXZlbnRzXVxuICApXG5cbiAgY29uc3QgZ2V0Q3VycmVudFZpZXdSYW5nZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodmlldyA9PT0gJ2RheScpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignZGF5JyksXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2aWV3ID09PSAneWVhcicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZS5zdGFydE9mKCd5ZWFyJyksXG4gICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ3llYXInKSxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHZpZXcgPT09ICd3ZWVrJykge1xuICAgICAgY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogd2Vla0RheXNbMF0uc3RhcnRPZignZGF5JyksXG4gICAgICAgIGVuZDogd2Vla0RheXNbNl0uZW5kT2YoJ2RheScpLFxuICAgICAgfVxuICAgIH1cbiAgICAvLyBtb250aCB2aWV3XG4gICAgY29uc3Qgd2Vla3MgPSBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcbiAgICByZXR1cm4geyBzdGFydDogd2Vla3NbMF1bMF0uc3RhcnRPZignZGF5JyksIGVuZDogd2Vla3NbNV1bNl0uZW5kT2YoJ2RheScpIH1cbiAgfSwgW2N1cnJlbnREYXRlLCB2aWV3LCBmaXJzdERheU9mV2Vla10pXG5cbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDdXJyZW50Vmlld1JhbmdlKClcbiAgICByZXR1cm4gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKHN0YXJ0LCBlbmQpXG4gIH0sIFtnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEN1cnJlbnRWaWV3UmFuZ2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cyhldmVudHMpXG4gICAgfVxuICB9LCBbZXZlbnRzXSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9jYWxlKSB7XG4gICAgICBzZXRDdXJyZW50TG9jYWxlKGxvY2FsZSlcbiAgICAgIGRheWpzLmxvY2FsZShsb2NhbGUpXG4gICAgICBzZXRDdXJyZW50RGF0ZSgocHJldkRhdGUpID0+IHByZXZEYXRlLmxvY2FsZShsb2NhbGUpKVxuICAgIH1cbiAgfSwgW2xvY2FsZV0pXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRpbWV6b25lKSB7XG4gICAgICBkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuICAgIH1cbiAgfSwgW3RpbWV6b25lXSlcblxuICBjb25zdCBzZWxlY3REYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgICBzZXRDdXJyZW50RGF0ZShkYXRlKVxuICAgICAgb25EYXRlQ2hhbmdlPy4oZGF0ZSlcbiAgICB9LFxuICAgIFtvbkRhdGVDaGFuZ2VdXG4gIClcblxuICBjb25zdCBuYXZpZ2F0ZVBlcmlvZCA9IHVzZUNhbGxiYWNrKFxuICAgIChkaXJlY3Rpb246IDEgfCAtMSkgPT4ge1xuICAgICAgc2V0Q3VycmVudERhdGUoKHByZXYpID0+IHtcbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9XG4gICAgICAgICAgZGlyZWN0aW9uID09PSAxXG4gICAgICAgICAgICA/IHByZXYuYWRkKDEsIFZJRVdfVU5JVFNbdmlld10pXG4gICAgICAgICAgICA6IHByZXYuc3VidHJhY3QoMSwgVklFV19VTklUU1t2aWV3XSlcbiAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbdmlldywgb25EYXRlQ2hhbmdlXVxuICApXG5cbiAgY29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IG5hdmlnYXRlUGVyaW9kKDEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuICBjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoLTEpLCBbbmF2aWdhdGVQZXJpb2RdKVxuXG4gIGNvbnN0IHRvZGF5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG5ld0RhdGUgPSBkYXlqcygpXG4gICAgc2V0Q3VycmVudERhdGUobmV3RGF0ZSlcbiAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICB9LCBbb25EYXRlQ2hhbmdlXSlcblxuICBjb25zdCBhZGRFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldikgPT4gWy4uLnByZXYsIGV2ZW50XSlcbiAgICAgIG9uRXZlbnRBZGQ/LihldmVudClcbiAgICB9LFxuICAgIFtvbkV2ZW50QWRkXVxuICApXG5cbiAgY29uc3QgdXBkYXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PlxuICAgICAgICBwcmV2Lm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuaWQgIT09IGV2ZW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudFxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfVxuICAgICAgICAgIG9uRXZlbnRVcGRhdGU/LihuZXdFdmVudClcbiAgICAgICAgICByZXR1cm4gbmV3RXZlbnRcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuICAgIFtvbkV2ZW50VXBkYXRlXVxuICApXG5cbiAgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBldmVudDogQ2FsZW5kYXJFdmVudCxcbiAgICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG4gICAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgICApID0+IHtcbiAgICAgIG9uRXZlbnRVcGRhdGU/Lih7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH0pXG4gICAgICBzZXRDdXJyZW50RXZlbnRzKFxuICAgICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICAgIHRhcmdldEV2ZW50OiBldmVudCxcbiAgICAgICAgICB1cGRhdGVzLFxuICAgICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgICAgc2NvcGU6IG9wdGlvbnMuc2NvcGUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50cywgb25FdmVudFVwZGF0ZV1cbiAgKVxuXG4gIGNvbnN0IGRlbGV0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50LCBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnMpID0+IHtcbiAgICAgIG9uRXZlbnREZWxldGU/LihldmVudClcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoXG4gICAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG4gICAgICAgICAgdGFyZ2V0RXZlbnQ6IGV2ZW50LFxuICAgICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgICAgc2NvcGU6IG9wdGlvbnMuc2NvcGUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50cywgb25FdmVudERlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGRlbGV0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgc2V0Q3VycmVudEV2ZW50cygocHJldikgPT4ge1xuICAgICAgICBjb25zdCBldmVudFRvRGVsZXRlID0gcHJldi5maW5kKChlKSA9PiBlLmlkID09PSBldmVudElkKVxuICAgICAgICBpZiAoZXZlbnRUb0RlbGV0ZSkge1xuICAgICAgICAgIG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2LmZpbHRlcigoZSkgPT4gZS5pZCAhPT0gZXZlbnRJZClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbb25FdmVudERlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IG9wZW5FdmVudEZvcm0gPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnREYXRhPzogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4ge1xuICAgICAgaWYgKGV2ZW50RGF0YT8uc3RhcnQpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKGV2ZW50RGF0YS5zdGFydClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0ID0gZXZlbnREYXRhPy5zdGFydCA/PyBjdXJyZW50RGF0ZVxuICAgICAgc2V0U2VsZWN0ZWRFdmVudCh7XG4gICAgICAgIHRpdGxlOiB0KCduZXdFdmVudCcpLFxuICAgICAgICBzdGFydCxcbiAgICAgICAgZW5kOiBldmVudERhdGE/LmVuZCA/PyBzdGFydC5hZGQoMSwgJ2hvdXInKSxcbiAgICAgICAgcmVzb3VyY2VJZDogZXZlbnREYXRhPy5yZXNvdXJjZUlkLFxuICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICB9IGFzIENhbGVuZGFyRXZlbnQpXG4gICAgICBzZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcbiAgICB9LFxuICAgIFtjdXJyZW50RGF0ZSwgdF1cbiAgKVxuXG4gIGNvbnN0IGNsb3NlRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlbGVjdGVkRGF0ZShudWxsKVxuICAgIHNldFNlbGVjdGVkRXZlbnQobnVsbClcbiAgICBzZXRJc0V2ZW50Rm9ybU9wZW4oZmFsc2UpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmlldzogQ2FsZW5kYXJWaWV3KSA9PiB7XG4gICAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgICBvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuICAgIH0sXG4gICAgW29uVmlld0NoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCk6IENhbGVuZGFyRXZlbnQgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldFVJRCA9IGV2ZW50LnVpZFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgY3VycmVudEV2ZW50cy5maW5kKFxuICAgICAgICAgIChlKSA9PiAoZS51aWQgfHwgYCR7ZS5pZH1AaWxhbXkuY2FsZW5kYXJgKSA9PT0gdGFyZ2V0VUlEICYmIGUucnJ1bGVcbiAgICAgICAgKSB8fCBudWxsXG4gICAgICApXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50c11cbiAgKVxuXG4gIHJldHVybiB7XG4gICAgY3VycmVudERhdGUsXG4gICAgdmlldyxcbiAgICBldmVudHM6IHByb2Nlc3NlZEV2ZW50cyxcbiAgICByYXdFdmVudHM6IGN1cnJlbnRFdmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuLFxuICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50czogREFZX01BWF9FVkVOVFNfREVGQVVMVCxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIGJ1c2luZXNzSG91cnMsXG4gICAgc2V0Q3VycmVudERhdGUsXG4gICAgc2VsZWN0RGF0ZSxcbiAgICBzZXRWaWV3OiBoYW5kbGVWaWV3Q2hhbmdlLFxuICAgIG5leHRQZXJpb2QsXG4gICAgcHJldlBlcmlvZCxcbiAgICB0b2RheSxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICB1cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgICBkZWxldGVSZWN1cnJpbmdFdmVudCxcbiAgICBvcGVuRXZlbnRGb3JtLFxuICAgIGNsb3NlRXZlbnRGb3JtLFxuICAgIHNldFNlbGVjdGVkRXZlbnQsXG4gICAgc2V0SXNFdmVudEZvcm1PcGVuLFxuICAgIHNldFNlbGVjdGVkRGF0ZSxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgIHQsXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IG9taXRLZXlzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcbiAgZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcbiAgZXZlbnQsXG4gIGN1cnJlbnRFdmVudHMsXG4gIHN0YXJ0RGF0ZSxcbiAgZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuICBpZiAoIWV2ZW50LnJydWxlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG4gICAgLy8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuICAgIGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAuLi5ldmVudC5ycnVsZSxcbiAgICAgIGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG4gICAgKVxuXG4gICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuICAgIGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuICAgIC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuICAgIC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG4gICAgY29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG4gICAgICAuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgIC50b0RhdGUoKVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG4gICAgLy8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2VcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG4gICAgLy8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcbiAgICAgIC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuICAgICAgICAgIHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuICAgICAgICApXG5cbiAgICAgICAgLy8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG4gICAgICAgIGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuICAgICAgICBjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG4gICAgICAgIGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgICAgY29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcbiAgICAgICAgY29uc3QgcGFyZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBpZDogcmVjdXJyaW5nRXZlbnRJZCxcbiAgICAgICAgICBzdGFydDogb2NjdXJyZW5jZURhdGUsXG4gICAgICAgICAgZW5kOiBuZXdFbmRUaW1lLFxuICAgICAgICAgIHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuICAgICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuICAgICAgICAvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG4gICAgICAgIGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuICAgICAgICBpZiAoaGFzRXhkYXRlcykge1xuICAgICAgICAgIGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICAgICAgY29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcbiAgICAgICAgICBpZiAoaXNFeGNsdWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG4gICAgICAgIC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG4gICAgICAgIC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcbiAgICAgICAgY29uc3QgZXZlbnRTcGFuc1JhbmdlID1cbiAgICAgICAgICByZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuICAgICAgICAgIHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuICAgICAgICByZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICApXG4gIH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuICB0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuICB0YXJnZXRFdmVudCxcbiAgdXBkYXRlcyxcbiAgY3VycmVudEV2ZW50cyxcbiAgc2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG4gIC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG4gIGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcbiAgICBjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICByZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcbiAgfSlcblxuICBpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuICB9XG5cbiAgY29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuICBzd2l0Y2ggKHNjb3BlKSB7XG4gICAgY2FzZSAndGhpcyc6IHtcbiAgICAgIC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG4gICAgICBjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuICAgICAgY29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cbiAgICAgIGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG4gICAgICAvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuICAgICAgY29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcbiAgICAgICAgLi4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICBpZDogbW9kaWZpZWRFdmVudElkLFxuICAgICAgICByZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuICAgICAgICB1aWQ6IGJhc2VFdmVudC51aWQgfHwgYCR7YmFzZUV2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmAsIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuICAgICAgICBycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG4gICAgICB9IGFzIENhbGVuZGFyRXZlbnRcbiAgICAgIHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcbiAgICAgIGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgY29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4gICAgICAvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuICAgICAgY29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG4gICAgICAvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcbiAgICAgIGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuICAgICAgICB1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG4gICAgICBjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuICAgICAgY29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICBjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICAuLi51cGRhdGVzLnJydWxlLFxuICAgICAgICAgIGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWQ6IG5ld1Nlcmllc0lkLFxuICAgICAgICB1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuICAgICAgICBzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuICAgICAgICBlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdhbGwnOiB7XG4gICAgICAvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgICAgIGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgLi4udXBkYXRlcyxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG4gICAgICApXG4gIH1cblxuICByZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuICB0YXJnZXRFdmVudCxcbiAgY3VycmVudEV2ZW50cyxcbiAgc2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcbiAgY29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG4gIC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG4gIGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcbiAgICBjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcbiAgICByZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcbiAgfSlcblxuICBpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuICB9XG5cbiAgY29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuICBzd2l0Y2ggKHNjb3BlKSB7XG4gICAgY2FzZSAndGhpcyc6IHtcbiAgICAgIC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG4gICAgICBjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuICAgICAgY29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cbiAgICAgIGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG4gICAgICB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnZm9sbG93aW5nJzoge1xuICAgICAgLy8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcbiAgICAgIGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuICAgICAgY29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuICAgICAgY29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuICAgICAgICAoZSkgPT4gZS51aWQgIT09IHRhcmdldEV2ZW50LnVpZFxuICAgICAgKVxuICAgICAgcmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcbiAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG4gICAgICApXG4gIH1cblxuICByZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG4gIC8vIENvbW1vbiBhY3Rpb25zXG4gIHRvZGF5OiAnVG9kYXknLFxuICBjcmVhdGU6ICdDcmVhdGUnLFxuICBuZXc6ICdOZXcnLFxuICB1cGRhdGU6ICdVcGRhdGUnLFxuICBkZWxldGU6ICdEZWxldGUnLFxuICBjYW5jZWw6ICdDYW5jZWwnLFxuICBleHBvcnQ6ICdFeHBvcnQnLFxuXG4gIC8vIEV2ZW50IHJlbGF0ZWRcbiAgZXZlbnQ6ICdFdmVudCcsXG4gIGV2ZW50czogJ0V2ZW50cycsXG4gIG5ld0V2ZW50OiAnTmV3IEV2ZW50JyxcbiAgdGl0bGU6ICdUaXRsZScsXG4gIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuICBsb2NhdGlvbjogJ0xvY2F0aW9uJyxcbiAgYWxsRGF5OiAnQWxsIGRheScsXG4gIHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuICBlbmREYXRlOiAnRW5kIERhdGUnLFxuICBzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcbiAgZW5kVGltZTogJ0VuZCBUaW1lJyxcbiAgY29sb3I6ICdDb2xvcicsXG5cbiAgLy8gRXZlbnQgZm9ybVxuICBjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG4gIGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuICBhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcbiAgZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcbiAgZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuICBldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcbiAgZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cbiAgLy8gUmVjdXJyZW5jZVxuICByZXBlYXQ6ICdSZXBlYXQnLFxuICByZXBlYXRzOiAnUmVwZWF0cycsXG4gIGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG4gIGRhaWx5OiAnRGFpbHknLFxuICB3ZWVrbHk6ICdXZWVrbHknLFxuICBtb250aGx5OiAnTW9udGhseScsXG4gIHllYXJseTogJ1llYXJseScsXG4gIGludGVydmFsOiAnSW50ZXJ2YWwnLFxuICByZXBlYXRPbjogJ1JlcGVhdCBvbicsXG4gIG5ldmVyOiAnTmV2ZXInLFxuICBjb3VudDogJ0NvdW50JyxcbiAgZXZlcnk6ICdFdmVyeScsXG4gIGVuZHM6ICdFbmRzJyxcbiAgYWZ0ZXI6ICdBZnRlcicsXG4gIG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuICBvbjogJ09uJyxcblxuICAvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG4gIGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50JyxcbiAgZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50JyxcbiAgZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG4gICAgJ2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuICAgICdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuICB0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50JyxcbiAgdGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuICB0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG4gIHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuICBhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcbiAgb25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuICBjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuICBjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcbiAgb25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuICBkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuICBkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuICAvLyBWaWV3IHR5cGVzXG4gIG1vbnRoOiAnTW9udGgnLFxuICB3ZWVrOiAnV2VlaycsXG4gIGRheTogJ0RheScsXG4gIHllYXI6ICdZZWFyJyxcbiAgbW9yZTogJ21vcmUnLFxuXG4gIC8vIFJlc291cmNlIGNhbGVuZGFyXG4gIHJlc291cmNlczogJ1Jlc291cmNlcycsXG4gIHJlc291cmNlOiAnUmVzb3VyY2UnLFxuICB0aW1lOiAnVGltZScsXG4gIGRhdGU6ICdEYXRlJyxcbiAgbm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuICBhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuICAvLyBEYXlzIG9mIHdlZWtcbiAgc3VuZGF5OiAnU3VuZGF5JyxcbiAgbW9uZGF5OiAnTW9uZGF5JyxcbiAgdHVlc2RheTogJ1R1ZXNkYXknLFxuICB3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuICB0aHVyc2RheTogJ1RodXJzZGF5JyxcbiAgZnJpZGF5OiAnRnJpZGF5JyxcbiAgc2F0dXJkYXk6ICdTYXR1cmRheScsXG5cbiAgLy8gRGF5cyBzaG9ydFxuICBzdW46ICdTdW4nLFxuICBtb246ICdNb24nLFxuICB0dWU6ICdUdWUnLFxuICB3ZWQ6ICdXZWQnLFxuICB0aHU6ICdUaHUnLFxuICBmcmk6ICdGcmknLFxuICBzYXQ6ICdTYXQnLFxuXG4gIC8vIE1vbnRoc1xuICBqYW51YXJ5OiAnSmFudWFyeScsXG4gIGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuICBtYXJjaDogJ01hcmNoJyxcbiAgYXByaWw6ICdBcHJpbCcsXG4gIG1heTogJ01heScsXG4gIGp1bmU6ICdKdW5lJyxcbiAganVseTogJ0p1bHknLFxuICBhdWd1c3Q6ICdBdWd1c3QnLFxuICBzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuICBvY3RvYmVyOiAnT2N0b2JlcicsXG4gIG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuICBkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBXZWVrRGF5cyB9IGZyb20gJ0AvY29tcG9uZW50cydcblxuZXhwb3J0IGNvbnN0IEdBUF9CRVRXRUVOX0VMRU1FTlRTID0gMSAvLyBweCAoZ2FwLTEpXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9IRUlHSFQgPSAyOCAvLyBweCAoaC03KVxuZXhwb3J0IGNvbnN0IEVWRU5UX0JBUl9IRUlHSFQgPSAyNCAvLyBweCAoaC1bMjRweF0pXG5leHBvcnQgY29uc3QgREFZX01BWF9FVkVOVFNfREVGQVVMVCA9IDQgLy8gRGVmYXVsdCBtYXggZXZlbnRzIHBlciBkYXlcblxuZXhwb3J0IGNvbnN0IFdFRUtfREFZU19OVU1CRVJfTUFQOiBSZWNvcmQ8V2Vla0RheXMsIG51bWJlcj4gPSB7XG4gIHN1bmRheTogMCxcbiAgbW9uZGF5OiAxLFxuICB0dWVzZGF5OiAyLFxuICB3ZWRuZXNkYXk6IDMsXG4gIHRodXJzZGF5OiA0LFxuICBmcmlkYXk6IDUsXG4gIHNhdHVyZGF5OiA2LFxufVxuXG5leHBvcnQgY29uc3QgREFZX05VTUJFUl9UT19XRUVLX0RBWVM6IFJlY29yZDxudW1iZXIsIFdlZWtEYXlzPiA9IHtcbiAgMDogJ3N1bmRheScsXG4gIDE6ICdtb25kYXknLFxuICAyOiAndHVlc2RheScsXG4gIDM6ICd3ZWRuZXNkYXknLFxuICA0OiAndGh1cnNkYXknLFxuICA1OiAnZnJpZGF5JyxcbiAgNjogJ3NhdHVyZGF5Jyxcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGVkRGF5RXZlbnRzIHtcbiAgZGF5OiBkYXlqcy5EYXlqc1xuICBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxufVxuXG5pbnRlcmZhY2UgQWxsRXZlbnREaWFsb2dQcm9wcyB7XG4gIHJlZjogUmVhY3QuUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEFsbEV2ZW50RGlhbG9nOiBSZWFjdC5GQzxBbGxFdmVudERpYWxvZ1Byb3BzPiA9ICh7IHJlZiB9KSA9PiB7XG4gIGNvbnN0IFtkaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWREYXlFdmVudHMsIHNldFNlbGVjdGVkRGF5RXZlbnRzXSA9XG4gICAgdXNlU3RhdGU8U2VsZWN0ZWREYXlFdmVudHMgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuICAgIGN1cnJlbnREYXRlOiBzdGF0ZS5jdXJyZW50RGF0ZSxcbiAgICBmaXJzdERheU9mV2Vlazogc3RhdGUuZmlyc3REYXlPZldlZWssXG4gIH0pKVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIG9wZW46ICgpID0+IHNldERpYWxvZ09wZW4odHJ1ZSksXG4gICAgY2xvc2U6ICgpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpLFxuICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT5cbiAgICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzKGRheUV2ZW50cyksXG4gIH0pKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxEaWFsb2cgb3Blbj17ZGlhbG9nT3Blbn0gb25PcGVuQ2hhbmdlPXtzZXREaWFsb2dPcGVufT5cbiAgICAgIDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC1oLVs4MHZoXSBtYXgtdy1tZCBvdmVyZmxvdy15LWF1dG9cIj5cbiAgICAgICAgPERpYWxvZ0hlYWRlcj5cbiAgICAgICAgICA8RGlhbG9nVGl0bGU+XG4gICAgICAgICAgICB7c2VsZWN0ZWREYXlFdmVudHMgJiYgc2VsZWN0ZWREYXlFdmVudHMuZGF5LmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG4gICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTNcIj5cbiAgICAgICAgICB7c2VsZWN0ZWREYXlFdmVudHMgJiZcbiAgICAgICAgICAgIHNlbGVjdGVkRGF5RXZlbnRzLmV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BhbGwtZXZlbnRzLWRpYWxvZy1ldmVudC0kJHtldmVudC5pZH1gfSAvLyBVc2UgZXZlbnQgSUQgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvblxuICAgICAgICAgICAgICAgICAga2V5PXtldmVudC5pZH1cbiAgICAgICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG15LTEgaC1bMzBweF1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRGlhbG9nQ29udGVudD5cbiAgICA8L0RpYWxvZz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBNb250aEhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBNb250aEhlYWRlcjogUmVhY3QuRkM8TW9udGhIZWFkZXJQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgY3VycmVudExvY2FsZSxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIFJlb3JkZXIgd2VlayBkYXlzIGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZGF5cyA9IGRheWpzLndlZWtkYXlzU2hvcnQoKS5tYXAoKGRheSkgPT4gZGF5LnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyBSb3RhdGUgdGhlIGFycmF5IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdERheU9mV2VlazsgaSsrKSB7XG4gICAgICBjb25zdCBkYXlUb01vdmUgPSBkYXlzLnNoaWZ0KClcbiAgICAgIGlmIChkYXlUb01vdmUpIHtcbiAgICAgICAgZGF5cy5wdXNoKGRheVRvTW92ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBkYXlzIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtmaXJzdERheU9mV2VlaywgY3VycmVudExvY2FsZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZ3JpZCBncmlkLWNvbHMtNyBib3JkZXItYicsXG4gICAgICAgIHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcbiAgICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuICAgID5cbiAgICAgIHt3ZWVrRGF5cy5kYXlzLm1hcCgod2Vla0RheSwgaW5kZXgpID0+IChcbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e3dlZWtEYXl9IG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17d2Vla0RheX1cbiAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJweS0yIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIGJvcmRlci1yIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5fWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbSBjYXBpdGFsaXplXCI+e3dlZWtEYXl9PC9zcGFuPlxuICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQge1xuICBEQVlfTlVNQkVSX0hFSUdIVCxcbiAgRVZFTlRfQkFSX0hFSUdIVCxcbiAgR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG59IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIFBvc2l0aW9uZWRFdmVudCBleHRlbmRzIENhbGVuZGFyRXZlbnQge1xuICBsZWZ0OiBudW1iZXIgLy8gTGVmdCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIHdpZHRoOiBudW1iZXIgLy8gV2lkdGggaW4gcGVyY2VudGFnZVxuICB0b3A6IG51bWJlciAvLyBUb3AgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICBoZWlnaHQ6IG51bWJlciAvLyBIZWlnaHQgaW4gcGVyY2VudGFnZVxuICBwb3NpdGlvbjogbnVtYmVyIC8vIFBvc2l0aW9uIGluIHRoZSByb3cgKDAgZm9yIGZpcnN0LCAxIGZvciBzZWNvbmQsIGV0Yy4pXG4gIGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBzdGFydFxuICBpc1RydW5jYXRlZEVuZDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGVuZFxufVxuXG5pbnRlcmZhY2UgR2V0UG9zaXRpb25lZEV2ZW50c1Byb3BzIHtcbiAgZGF5czogZGF5anMuRGF5anNbXVxuICBldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuICBkYXlNYXhFdmVudHM6IG51bWJlclxuICBkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbiAgZ3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xufVxuXG5leHBvcnQgY29uc3QgZ2V0UG9zaXRpb25lZEV2ZW50cyA9ICh7XG4gIGRheXMsXG4gIGV2ZW50cyxcbiAgZGF5TWF4RXZlbnRzLFxuICBkYXlOdW1iZXJIZWlnaHQgPSBEQVlfTlVNQkVSX0hFSUdIVCxcbiAgZ3JpZFR5cGUgPSAnZGF5Jyxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuICBjb25zdCBmaXJzdERheSA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3QgbGFzdERheSA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuICBjb25zdCBkYXlDb3VudCA9IGRheXMubGVuZ3RoXG5cbiAgLy8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuICBjb25zdCBtdWx0aURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID4gMClcbiAgY29uc3Qgc2luZ2xlRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcihcbiAgICAoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPT09IDBcbiAgKVxuXG4gIC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG4gIGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgaWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuICAgICAgcmV0dXJuIHN0YXJ0RGlmZlxuICAgIH1cbiAgICByZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuICB9KVxuXG4gIC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuICBjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuICAgIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuICApXG5cbiAgLy8gQ3JlYXRlIGRheUNvdW50IHggZGF5TWF4RXZlbnRzIGdyaWQgd2l0aCBmbGFnc1xuICBjb25zdCBncmlkOiB7IHRha2VuOiBib29sZWFuOyBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwgfVtdW10gPSBbXVxuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgZ3JpZFtyb3ddID0gW11cbiAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBkYXlDb3VudDsgY29sKyspIHtcbiAgICAgIGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuICAvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG4gICAgY29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG4gICAgY29uc3QgYWRqdXN0ZWRFbmQgPVxuICAgICAgZ3JpZFR5cGUgPT09ICdob3VyJyA/IGV2ZW50LmVuZC5zdWJ0cmFjdCgxLCAnbWludXRlJykgOiBldmVudC5lbmRcbiAgICBjb25zdCBldmVudEVuZCA9IGRheWpzLm1pbihhZGp1c3RlZEVuZC5zdGFydE9mKGdyaWRUeXBlKSwgbGFzdERheSlcbiAgICBjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuICAgIGNvbnN0IGVuZENvbCA9IE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRFbmQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXG4gICAgLy8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuICAgIGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cbiAgICAvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuICAgIGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG4gICAgLy8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBsZXQgY2FuUGxhY2UgPSB0cnVlXG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgY2FuUGxhY2UgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYW5QbGFjZSkge1xuICAgICAgICBhc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuICAgIGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcbiAgICAgIGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICBsZWZ0OiAoc3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG4gICAgICAgIHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBkYXlOdW1iZXJIZWlnaHQgK1xuICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICBhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGlzVHJ1bmNhdGVkU3RhcnQsXG4gICAgICAgIGlzVHJ1bmNhdGVkRW5kLFxuICAgICAgfSBhcyBQb3NpdGlvbmVkRXZlbnQpXG4gICAgICBwbGFjZWRTdWNjZXNzZnVsbHkgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgY291bGRuJ3QgcGxhY2UgYXQgb3JpZ2luYWwgcG9zaXRpb24sIHRyeSB0cnVuY2F0ZWQgdmVyc2lvbnMgc3RhcnRpbmcgZnJvbSBsYXRlciBkYXlzXG4gICAgaWYgKCFwbGFjZWRTdWNjZXNzZnVsbHkpIHtcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCB0cnlTdGFydENvbCA9IHN0YXJ0Q29sICsgMTtcbiAgICAgICAgdHJ5U3RhcnRDb2wgPD0gZW5kQ29sO1xuICAgICAgICB0cnlTdGFydENvbCsrXG4gICAgICApIHtcbiAgICAgICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSB0cnVuY2F0ZWQgZXZlbnQgc3RhcnRpbmcgZnJvbSB0aGlzIGNvbHVtblxuICAgICAgICBsZXQgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSAtMVxuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgaWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNhblBsYWNlKSB7XG4gICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdyBmb3IgdGhlIHRydW5jYXRlZCB2ZXJzaW9uLCBwbGFjZSBpdFxuICAgICAgICBpZiAodHJ1bmNhdGVkQXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICAgICAgZm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgICAgICBncmlkW3RydW5jYXRlZEFzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENyZWF0ZSBwb3NpdGlvbiBkYXRhIGZvciB0aGUgdHJ1bmNhdGVkIHJlbmRlcmluZ1xuICAgICAgICAgIGNvbnN0IHRydW5jYXRlZFNwYW5EYXlzID0gZW5kQ29sIC0gdHJ5U3RhcnRDb2wgKyAxXG4gICAgICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAgICAgbGVmdDogKHRyeVN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuICAgICAgICAgICAgd2lkdGg6ICh0cnVuY2F0ZWRTcGFuRGF5cyAvIGRheUNvdW50KSAqIDEwMCxcbiAgICAgICAgICAgIHRvcDpcbiAgICAgICAgICAgICAgZGF5TnVtYmVySGVpZ2h0ICtcbiAgICAgICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgICAgICB0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICAgICAgcG9zaXRpb246IHRydW5jYXRlZEFzc2lnbmVkUm93LFxuICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICBpc1RydW5jYXRlZFN0YXJ0OiB0cnVlLCAvLyBBbHdheXMgdHJ1bmNhdGVkIGF0IHN0YXJ0IHdoZW4gdXNpbmcgdGhpcyBmYWxsYmFjayBsb2dpY1xuICAgICAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICAgICAgfSBhcyBQb3NpdGlvbmVkRXZlbnQpXG4gICAgICAgICAgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrIC8vIFN1Y2Nlc3NmdWxseSBwbGFjZWQsIHN0b3AgdHJ5aW5nIG90aGVyIHN0YXJ0IHBvc2l0aW9uc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gU3RlcCAyOiBGaWxsIGdhcHMgd2l0aCBzaW5nbGUtZGF5IGV2ZW50c1xuICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZFNpbmdsZURheSkge1xuICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuICAgIC8vIENsYW1wIGNvbCB0byB2YWxpZCBncmlkIGJvdW5kcyB0byBwcmV2ZW50IGFjY2Vzc2luZyB1bmRlZmluZWQgZ3JpZCBwb3NpdGlvbnNcbiAgICBjb25zdCBjb2wgPSBNYXRoLm1heChcbiAgICAgIDAsXG4gICAgICBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuICAgIClcblxuICAgIC8vIFNpbmdsZS1kYXkgZXZlbnRzIGFyZSBub3QgdHJ1bmNhdGVkIGJ5IGRlZmluaXRpb25cbiAgICBjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZmFsc2VcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGZhbHNlXG5cbiAgICAvLyBGaW5kIHRoZSBmaXJzdCBhdmFpbGFibGUgcm93IGluIHRoaXMgY29sdW1uXG4gICAgbGV0IGFzc2lnbmVkUm93ID0gLTFcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG4gICAgICBpZiAoIWdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG4gICAgICAgIGFzc2lnbmVkUm93ID0gcm93XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgZm91bmQgYSByb3csIGFzc2lnbiB0aGUgZXZlbnRcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXG4gICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIGxlZnQ6IChjb2wgLyBkYXlDb3VudCkgKiAxMDAsXG4gICAgICAgIHdpZHRoOiAoMSAvIGRheUNvdW50KSAqIDEwMCxcbiAgICAgICAgdG9wOlxuICAgICAgICAgIGRheU51bWJlckhlaWdodCArXG4gICAgICAgICAgR0FQX0JFVFdFRU5fRUxFTUVOVFMgK1xuICAgICAgICAgIGFzc2lnbmVkUm93ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgcG9zaXRpb246IGFzc2lnbmVkUm93LFxuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgaXNUcnVuY2F0ZWRTdGFydCxcbiAgICAgICAgaXNUcnVuY2F0ZWRFbmQsXG4gICAgICB9IGFzIFBvc2l0aW9uZWRFdmVudClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRQb3NpdGlvbmVkRXZlbnRzIH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG4gIGFsbERheT86IGJvb2xlYW5cbiAgZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzID0gKHtcbiAgZGF5cyxcbiAgYWxsRGF5LFxuICBkYXlOdW1iZXJIZWlnaHQsXG59OiBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGRheU1heEV2ZW50cyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpXG4gIGNvbnN0IHdlZWtFbmQgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcblxuICAvLyBHZXQgYWxsIGV2ZW50cyB0aGF0IGludGVyc2VjdCB3aXRoIHRoaXMgd2Vla1xuICBjb25zdCBwb3NpdGlvbmVkRXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IGV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG4gICAgaWYgKGFsbERheSkge1xuICAgICAgZXZlbnRzID0gZXZlbnRzLmZpbHRlcigoZSkgPT4gZS5hbGxEYXkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuICAgICAgZGF5cyxcbiAgICAgIGV2ZW50cyxcbiAgICAgIGRheU1heEV2ZW50cyxcbiAgICAgIGRheU51bWJlckhlaWdodCxcbiAgICB9KVxuICB9LCBbXG4gICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgIHdlZWtTdGFydCxcbiAgICB3ZWVrRW5kLFxuICAgIGFsbERheSxcbiAgICBkYXlzLFxuICAgIGRheU1heEV2ZW50cyxcbiAgICBkYXlOdW1iZXJIZWlnaHQsXG4gIF0pXG5cbiAgcmV0dXJuIHBvc2l0aW9uZWRFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5cbmludGVyZmFjZSBXZWVrRXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbiAgYWxsRGF5PzogYm9vbGVhblxuICBkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbn1cblxuY29uc3QgV2Vla0V2ZW50c0xheWVyOiBSZWFjdC5GQzxXZWVrRXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuICBkYXlzLFxuICBhbGxEYXksXG4gIGRheU51bWJlckhlaWdodCxcbn0pID0+IHtcbiAgY29uc3Qgd2Vla1N0YXJ0ID0gZGF5c1swXVxuICBjb25zdCBwcm9jZXNzZWRXZWVrRXZlbnRzID0gdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyh7XG4gICAgZGF5cyxcbiAgICBhbGxEYXksXG4gICAgZGF5TnVtYmVySGVpZ2h0LFxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCI+XG4gICAgICB7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9YFxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG4gICAgICAgICAgICAgIHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZXZlbnQtbGF5ZXItZXZlbnQtJHtldmVudC5pZH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2V2ZW50S2V5fVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmNvbnN0IG1lbW9pemVkV2Vla0V2ZW50c0xheWVyID0gbWVtbyhXZWVrRXZlbnRzTGF5ZXIpXG5leHBvcnQgeyBtZW1vaXplZFdlZWtFdmVudHNMYXllciBhcyBXZWVrRXZlbnRzTGF5ZXIgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFNjcm9sbEFyZWFQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNjcm9sbC1hcmVhJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgU2Nyb2xsQXJlYVByb3BzXG4gIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdD4ge1xuICB2aWV3UG9ydFByb3BzPzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG59XG5cbmZ1bmN0aW9uIFNjcm9sbEFyZWEoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICB2aWV3UG9ydFByb3BzLFxuICAuLi5wcm9wc1xufTogU2Nyb2xsQXJlYVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWFcIlxuICAgICAgY2xhc3NOYW1lPXtjbigncmVsYXRpdmUnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0XG4gICAgICAgIHsuLi52aWV3UG9ydFByb3BzfVxuICAgICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS12aWV3cG9ydFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2ZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIHNpemUtZnVsbCByb3VuZGVkLVtpbmhlcml0XSB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGZvY3VzLXZpc2libGU6b3V0bGluZS0xJyxcbiAgICAgICAgICB2aWV3UG9ydFByb3BzPy5jbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9TY3JvbGxBcmVhUHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgICAgPFNjcm9sbEJhciAvPlxuICAgICAgPFNjcm9sbEFyZWFQcmltaXRpdmUuQ29ybmVyIC8+XG4gICAgPC9TY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3Q+XG4gIClcbn1cblxuZnVuY3Rpb24gU2Nyb2xsQmFyKHtcbiAgY2xhc3NOYW1lLFxuICBvcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCcsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPikge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXJcbiAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXNjcm9sbGJhclwiXG4gICAgICBvcmllbnRhdGlvbj17b3JpZW50YXRpb259XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCB0b3VjaC1ub25lIHAtcHggdHJhbnNpdGlvbi1jb2xvcnMgc2VsZWN0LW5vbmUnLFxuICAgICAgICBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJlxuICAgICAgICAgICdoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQnLFxuICAgICAgICBvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmXG4gICAgICAgICAgJ2gtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50JyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFUaHVtYlxuICAgICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS10aHVtYlwiXG4gICAgICAgIGNsYXNzTmFtZT1cImJnLWJvcmRlciByZWxhdGl2ZSBmbGV4LTEgcm91bmRlZC1mdWxsXCJcbiAgICAgIC8+XG4gICAgPC9TY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+XG4gIClcbn1cblxuZXhwb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBEYXlDZWxsUHJvcHMge1xuICBpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcbiAgZGF5OiBkYXlqcy5EYXlqc1xuICBkYXlNYXhFdmVudHM/OiBudW1iZXJcbiAgY2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUNlbGw6IFJlYWN0LkZDPERheUNlbGxQcm9wcz4gPSAoe1xuICBpbmRleCxcbiAgZGF5LFxuICBjbGFzc05hbWUgPSAnJyxcbn0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgIGN1cnJlbnREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50cyA9IDAsXG4gICAgdCxcbiAgICBidXNpbmVzc0hvdXJzLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgdG9kYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgIGRheS5lbmRPZignZGF5JylcbiAgKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBIYW5kbGVyIGZvciBzaG93aW5nIGFsbCBldmVudHMgaW4gYSBkaWFsb2dcbiAgY29uc3Qgc2hvd0FsbEV2ZW50cyA9IChkYXk6IGRheWpzLkRheWpzLCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSkgPT4ge1xuICAgIGFsbEV2ZW50c0RpYWxvZ1JlZi5jdXJyZW50Py5zZXRTZWxlY3RlZERheUV2ZW50cyh7XG4gICAgICBkYXksXG4gICAgICBldmVudHMsXG4gICAgfSlcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8ub3BlbigpXG4gIH1cblxuICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgY29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcbiAgICBkYXRlOiBkYXksXG4gICAgYnVzaW5lc3NIb3VycyxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICBpZD17YGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdJyxcbiAgICAgICAgICAhaXNDdXJyZW50TW9udGggJiYgJ2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGlzTGFzdENvbHVtbiAmJiAnYm9yZGVyLXItMCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIGRpc2FibGVkPXshaXNCdXNpbmVzc31cbiAgICAgID5cbiAgICAgICAgey8qIEFic29sdXRlbHkgcG9zaXRpb25lZCBtdWx0aS1kYXkgYmFycyAoR29vZ2xlIENhbGVuZGFyIHN0eWxlKSAqL31cblxuICAgICAgICB7LyogU2luZ2xlLWRheSBldmVudHMgY29udGFpbmVyIHBvc2l0aW9uZWQgYmVsb3cgbXVsdGktZGF5IGV2ZW50cyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgey8qIERheSBudW1iZXIgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2ZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc206aC02IHNtOnctNicsXG4gICAgICAgICAgICAgIGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHsgZGF5OiAnbnVtZXJpYycgfSkuZm9ybWF0KFxuICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogUmVuZGVyIHBsYWNlaG9sZGVycyBmb3IgZXZlbnRzIHRoYXQgb2NjdXIgdG9kYXkgc28gdGhhdCB0aGUgY2VsbCBoZWlnaHQgaXMgYWNjb3JkaW5nIHRvIGRheU1heEV2ZW50cy4gKi99XG4gICAgICAgICAge3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtgZW1wdHktJHtyb3dJbmRleH1gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVsyMHB4XSB3LWZ1bGxcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cblxuICAgICAgICAgIHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuICAgICAgICAgIHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgbXQtMVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGFnLW92ZXItcm9sZVxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgK3toaWRkZW5FdmVudHNDb3VudH0ge3QoJ21vcmUnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZURyb3BwYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuICBpZDogc3RyaW5nXG4gIHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuICBkYXRlOiBkYXlqcy5EYXlqc1xuICBob3VyPzogbnVtYmVyXG4gIG1pbnV0ZT86IG51bWJlclxuICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFsbERheT86IGJvb2xlYW5cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG4gIGlkLFxuICB0eXBlLFxuICBkYXRlLFxuICBob3VyLFxuICBtaW51dGUsXG4gIHJlc291cmNlSWQsXG4gIGFsbERheSxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3R5bGUsXG4gICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG4gIGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcbiAgY29uc3QgeyBvbkNlbGxDbGljaywgZGlzYWJsZURyYWdBbmREcm9wLCBkaXNhYmxlQ2VsbENsaWNrIH0gPVxuICAgIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcbiAgICAgIG9uQ2VsbENsaWNrOiBzdGF0ZS5vbkNlbGxDbGljayxcbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcDogc3RhdGUuZGlzYWJsZURyYWdBbmREcm9wLFxuICAgICAgZGlzYWJsZUNlbGxDbGljazogc3RhdGUuZGlzYWJsZUNlbGxDbGljayxcbiAgICB9KSlcblxuICBjb25zdCB7IGlzT3Zlciwgc2V0Tm9kZVJlZiB9ID0gdXNlRHJvcHBhYmxlKHtcbiAgICBpZCxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlLFxuICAgICAgZGF0ZSxcbiAgICAgIGhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgICByZXNvdXJjZUlkLFxuICAgICAgYWxsRGF5LFxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVEcmFnQW5kRHJvcCB8fCBkaXNhYmxlZCxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVDZWxsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydCA9IGRhdGUuaG91cihob3VyID8/IDApLm1pbnV0ZShtaW51dGUgPz8gMClcbiAgICBsZXQgZW5kID0gc3RhcnQuY2xvbmUoKVxuICAgIGlmIChob3VyICE9PSB1bmRlZmluZWQgJiYgbWludXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuZCA9IGVuZC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuICAgIH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBlbmQuaG91cihob3VyICsgMSkubWludXRlKDApIC8vIHdlZWsgdmlldyB0aW1lIHNsb3RzIGFyZSAxIGhvdXJcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gZW5kLmhvdXIoMjMpLm1pbnV0ZSg1OSkgLy8gbW9udGggdmlldyBmdWxsIGRheVxuICAgIH1cblxuICAgIG9uQ2VsbENsaWNrKHsgc3RhcnQsIGVuZCwgcmVzb3VyY2VJZCB9KVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50c1xuICAgIDxkaXZcbiAgICAgIHJlZj17c2V0Tm9kZVJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBpc092ZXIgJiYgIWRpc2FibGVEcmFnQW5kRHJvcCAmJiAhZGlzYWJsZWQgJiYgJ2JnLWFjY2VudCcsXG4gICAgICAgIGRpc2FibGVDZWxsQ2xpY2sgfHwgZGlzYWJsZWQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJyxcbiAgICAgICAgZGlzYWJsZWQgJiYgJ2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQgcG9pbnRlci1ldmVudHMtbm9uZSdcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgREFZX1RPX05VTUJFUjogUmVjb3JkPFdlZWtEYXlzLCBudW1iZXI+ID0ge1xuICBzdW5kYXk6IDAsXG4gIG1vbmRheTogMSxcbiAgdHVlc2RheTogMixcbiAgd2VkbmVzZGF5OiAzLFxuICB0aHVyc2RheTogNCxcbiAgZnJpZGF5OiA1LFxuICBzYXR1cmRheTogNixcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LlxuICpcbiAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGNoZWNrXG4gKiBAcGFyYW0gYnVzaW5lc3NIb3VycyBUaGUgYnVzaW5lc3MgaG91cnMgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0ZSBpcyBhIGJ1c2luZXNzIGRheSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzRGF5ID0gKFxuICBkYXRlOiBkYXlqcy5EYXlqcyxcbiAgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnNcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWJ1c2luZXNzSG91cnMpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gQ2hlY2sgZGF5IG9mIHdlZWtcbiAgaWYgKGJ1c2luZXNzSG91cnMuZGF5c09mV2Vlaykge1xuICAgIHJldHVybiBidXNpbmVzc0hvdXJzLmRheXNPZldlZWsuc29tZSgoZCkgPT4gREFZX1RPX05VTUJFUltkXSA9PT0gZGF0ZS5kYXkoKSlcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXNCdXNpbmVzc0hvdXJPcHRpb25zIHtcbiAgZGF0ZTogZGF5anMuRGF5anNcbiAgaG91cj86IG51bWJlclxuICBtaW51dGU/OiBudW1iZXJcbiAgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnNcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBzcGVjaWZpYyBob3VyIG9uIGEgc3BlY2lmaWMgZGF0ZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIGNoZWNraW5nIGJ1c2luZXNzIGhvdXJzXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0aW1lIGlzIHdpdGhpbiBidXNpbmVzcyBob3VycywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0J1c2luZXNzSG91ciA9ICh7XG4gIGRhdGUsXG4gIGhvdXIsXG4gIG1pbnV0ZSA9IDAsXG4gIGJ1c2luZXNzSG91cnMsXG59OiBJc0J1c2luZXNzSG91ck9wdGlvbnMpOiBib29sZWFuID0+IHtcbiAgLy8gRmlyc3QgY2hlY2sgaWYgaXQncyBhIGJ1c2luZXNzIGRheVxuICBpZiAoIWlzQnVzaW5lc3NEYXkoZGF0ZSwgYnVzaW5lc3NIb3VycykpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIElmIGJ1c2luZXNzIGhvdXJzIGFyZSBub3QgY29uZmlndXJlZCwgY29uc2lkZXIgZXZlcnl0aGluZyBhcyBcImJ1c2luZXNzIGhvdXJzXCJcbiAgaWYgKCFidXNpbmVzc0hvdXJzKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIElmIGhvdXIgaXMgbm90IHByb3ZpZGVkLCB3ZSBhc3N1bWUgdGhlIHVzZXIgb25seSBjYXJlcyBhYm91dCB0aGUgZGF5XG4gIC8vIFNpbmNlIHdlIGFscmVhZHkgcGFzc2VkIGlzQnVzaW5lc3NEYXkgY2hlY2ssIHdlIHJldHVybiB0cnVlXG4gIGlmIChob3VyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgY29uZmlnID0gYnVzaW5lc3NIb3Vyc1xuXG4gIC8vIENoZWNrIHRpbWVcbiAgLy8gc3RhcnRUaW1lIGFuZCBlbmRUaW1lIGFyZSBudW1iZXJzICgwLTI0KVxuICAvLyBXZSB0cmVhdCB0aGVtIGFzIGV4YWN0IGhvdXJzLiBlLmcuIDkgbWVhbnMgMDk6MDAuXG4gIGNvbnN0IHN0YXJ0SCA9IGNvbmZpZy5zdGFydFRpbWUgPz8gOVxuICBjb25zdCBlbmRIID0gY29uZmlnLmVuZFRpbWUgPz8gMTdcblxuICBjb25zdCBjdXJyZW50TWludXRlcyA9IGhvdXIgKiA2MCArIG1pbnV0ZVxuICBjb25zdCBzdGFydE1pbnV0ZXMgPSBzdGFydEggKiA2MFxuICBjb25zdCBlbmRNaW51dGVzID0gZW5kSCAqIDYwXG5cbiAgaWYgKGN1cnJlbnRNaW51dGVzIDwgc3RhcnRNaW51dGVzIHx8IGN1cnJlbnRNaW51dGVzID49IGVuZE1pbnV0ZXMpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG4iLAogICAgImltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhcidcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFdlZWtBbGxEYXlSb3cgfSBmcm9tICcuL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi93ZWVrLWhlYWRlcidcbmltcG9ydCB7IFdlZWtUaW1lR3JpZCB9IGZyb20gJy4vd2Vlay10aW1lLWdyaWQnXG4vLyBBZGQgd2Vla09mWWVhciBwbHVnaW4gdG8gZGF5anNcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuXG5jb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwid2Vlay12aWV3XCI+XG4gICAgICB7LyogV2VlayBoZWFkZXIgcm93IC0gZml4ZWQgKi99XG4gICAgICA8V2Vla0hlYWRlciBjbGFzc05hbWU9XCJoLVs1cmVtXVwiIC8+XG5cbiAgICAgIHsvKiBTY3JvbGxhYmxlIHRpbWUgZ3JpZCAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggb3ZlcmZsb3ctYXV0byBoLVtjYWxjKDEwMCUtNXJlbSldXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXNjcm9sbC1hcmVhXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAtIGR5bmFtaWMgaGVpZ2h0IGJhc2VkIG9uIGNvbnRlbnQgKi99XG4gICAgICAgIDxXZWVrQWxsRGF5Um93IC8+XG4gICAgICAgIDxXZWVrVGltZUdyaWQgLz5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWVrVmlld1xuIiwKICAgICJpbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRXZlbnRzTGF5ZXIgfSBmcm9tICcuLi9tb250aC12aWV3L3dlZWstZXZlbnRzLWxheWVyJ1xuXG5leHBvcnQgY29uc3QgV2Vla0FsbERheVJvdzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrLCB0LCBidXNpbmVzc0hvdXJzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMSByZWxhdGl2ZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstYWxsLWRheS1yb3dcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xNiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXIteCBib3JkZXItYiBweC0xIG1pbi1oLTE2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAge3QoJ2FsbERheScpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERyb3BwYWJsZSBjZWxscyBmb3IgZWFjaCBkYXkgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IHtcbiAgICAgICAgY29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHsgZGF0ZTogZGF5LCBidXNpbmVzc0hvdXJzIH0pXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAga2V5PXtgYWxsLWRheS0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgaWQ9e2BhbGwtZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBhbGxEYXk9e3RydWV9XG4gICAgICAgICAgICBkaXNhYmxlZD17IWlzQnVzaW5lc3N9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1mdWxsIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItciBib3JkZXItYlwiXG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSl9XG5cbiAgICAgIHsvKiBBbGwtZGF5IGV2ZW50IGJsb2NrcyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIGNvbC1zcGFuLTcgY29sLXN0YXJ0LTJcIj5cbiAgICAgICAgPFdlZWtFdmVudHNMYXllciBkYXlzPXt3ZWVrRGF5c30gZGF5TnVtYmVySGVpZ2h0PXswfSBhbGxEYXkgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbnRlcmZhY2UgV2Vla0hlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBXZWVrSGVhZGVyOiBSZWFjdC5GQzxXZWVrSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnREYXRlLFxuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgc2VsZWN0RGF0ZSxcbiAgICBvcGVuRXZlbnRGb3JtLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICB0LFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuICByZXR1cm4gKFxuICAgIC8vIGNzcyBncmlkIGhlYWRlciB3aXRoIGxlZiBjb3JuZXIgY2VsbCBzaG9ydGVyIHRoYW4gdGhlIHJlc3RcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMScsXG4gICAgICAgIHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcbiAgICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWhlYWRlclwiXG4gICAgPlxuICAgICAgey8qIENvcm5lciBjZWxsIHdpdGggd2VlayBudW1iZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1zcGFuLTEgdy0xNiBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLXggYm9yZGVyLWIgcC0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC14c1wiPnt0KCd3ZWVrJyl9PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuICAgICAge3dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICBrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIHRyYW5zaXRpb249e3tcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICBkZWxheTogaW5kZXggKiAwLjA1LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgZmxleC0xIGN1cnNvci1wb2ludGVyIHAtMSB0ZXh0LWNlbnRlciBzbTpwLTIgYm9yZGVyLXIgYm9yZGVyLWInLFxuICAgICAgICAgICAgICAgIGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZWN0RGF0ZShkYXkpXG4gICAgICAgICAgICAgICAgb3BlbkV2ZW50Rm9ybSh7IHN0YXJ0OiBkYXkgfSlcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1oZWFkZXItJHtkYXkuZm9ybWF0KCdkZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAnbXgtYXV0byBtdC0xIGZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc206aC03IHNtOnctNyBzbTp0ZXh0LXNtJyxcbiAgICAgICAgICAgICAgICAgIGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHsgZGF5OiAnbnVtZXJpYycgfSkuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgZGF5LnRvRGF0ZSgpXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5pbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG4gIGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgd2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG4gIHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG4gIGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG4gIHpJbmRleD86IG51bWJlciAvLyBaLWluZGV4IGZvciBsYXllcmluZyBvdmVybGFwcGluZyBldmVudHNcbn1cblxuaW50ZXJmYWNlIFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzIHtcbiAgZGF5OiBkYXlqcy5EYXlqcyAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7IGRheSB9OiBVc2VQcm9jZXNzZWREYXlFdmVudHNQcm9wcykgPT4ge1xuICBjb25zdCB7IGdldEV2ZW50c0ZvckRhdGVSYW5nZSB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW88UG9zaXRpb25lZEV2ZW50W10+KCgpID0+IHtcbiAgICBsZXQgZXZlbnRzRm9yRGF5ID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgICAgZGF5LnN0YXJ0T2YoJ2RheScpLFxuICAgICAgZGF5LmVuZE9mKCdkYXknKVxuICAgIClcblxuICAgIC8vIEZpbHRlciBvdXQgYWxsLWRheSBldmVudHMgYW5kIHNvcnQgYnkgc3RhcnQgdGltZVxuICAgIGV2ZW50c0ZvckRheSA9IGV2ZW50c0ZvckRheVxuICAgICAgLmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuICAgICAgLnRvU29ydGVkKChhLCBiKSA9PiBhLnN0YXJ0LmRpZmYoYi5zdGFydCkpXG5cbiAgICBpZiAoZXZlbnRzRm9yRGF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgLy8gU3RlcCAxOiBHcm91cCBldmVudHMgaW50byBjbHVzdGVycyBvZiBvdmVybGFwcGluZyBldmVudHNcbiAgICBjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuICAgIGxldCBjdXJyZW50Q2x1c3RlcjogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgICBsZXQgbGFzdEV2ZW50RW5kOiBkYXlqcy5EYXlqcyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHNGb3JEYXkpIHtcbiAgICAgIGlmIChsYXN0RXZlbnRFbmQgJiYgZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihsYXN0RXZlbnRFbmQpKSB7XG4gICAgICAgIGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3RlcilcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50Q2x1c3RlciA9IFtdXG4gICAgICB9XG4gICAgICBjdXJyZW50Q2x1c3Rlci5wdXNoKGV2ZW50KVxuICAgICAgbGFzdEV2ZW50RW5kID0gbGFzdEV2ZW50RW5kXG4gICAgICAgID8gZGF5anMubWF4KGxhc3RFdmVudEVuZCwgZXZlbnQuZW5kKVxuICAgICAgICA6IGV2ZW50LmVuZFxuICAgIH1cbiAgICBpZiAoY3VycmVudENsdXN0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgY2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3RlcilcbiAgICB9XG5cbiAgICAvLyBTdGVwIDI6IEZvciBlYWNoIGNsdXN0ZXIsIHVzZSBhIG1vcmUgaW50ZWxsaWdlbnQgY29sdW1uIGFzc2lnbm1lbnRcbiAgICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cbiAgICBmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcbiAgICAgIGlmIChjbHVzdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBTaW5nbGUgZXZlbnQgdGFrZXMgZnVsbCB3aWR0aFxuICAgICAgICBjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG90YWxEdXJhdGlvbiA9IGVuZFRpbWUgLSBzdGFydFRpbWVcbiAgICAgICAgY29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIDI0KSAqIDEwMFxuICAgICAgICBjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIDI0KSAqIDEwMFxuICAgICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7IC4uLmV2ZW50LCBsZWZ0OiAwLCB3aWR0aDogMTAwLCB0b3AsIGhlaWdodCB9KVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBldmVudHMgLSB1c2UgbGF5ZXJlZCBwb3NpdGlvbmluZyBhcHByb2FjaFxuICAgICAgLy8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gWy4uLmNsdXN0ZXJdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcbiAgICAgICAgY29uc3QgYkR1cmF0aW9uID0gYi5lbmQuZGlmZihiLnN0YXJ0LCAnbWludXRlJylcblxuICAgICAgICAvLyBMb25nZXIgZXZlbnRzIGZpcnN0XG4gICAgICAgIGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuICAgICAgICByZXR1cm4gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICB9KVxuXG4gICAgICAvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcbiAgICAgIGNvbnN0IHRvdGFsRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aFxuXG4gICAgICAvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgICAgLy8gRmV3ZXIgZXZlbnRzID0gbGFyZ2VyIGluZGl2aWR1YWwgb2Zmc2V0cywgbW9yZSBldmVudHMgPSBzbWFsbGVyIG9mZnNldHNcbiAgICAgIGxldCBtYXhPZmZzZXQ6IG51bWJlclxuICAgICAgaWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDI1IC8vIDI1JSBvZmZzZXQgZm9yIDIgZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSAzKSB7XG4gICAgICAgIG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuICAgICAgfSBlbHNlIGlmICh0b3RhbEV2ZW50cyA9PT0gNCkge1xuICAgICAgICBtYXhPZmZzZXQgPSA2MCAvLyA2MCUgdG90YWwgZm9yIDQgZXZlbnRzICgyMCUgZWFjaClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heE9mZnNldCA9IDcwIC8vIDcwJSB0b3RhbCBmb3IgNSsgZXZlbnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc29ydGVkRXZlbnRzW2ldXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmhvdXIoKSArIGV2ZW50LnN0YXJ0Lm1pbnV0ZSgpIC8gNjBcbiAgICAgICAgbGV0IGVuZFRpbWUgPSBldmVudC5lbmQuaG91cigpICsgZXZlbnQuZW5kLm1pbnV0ZSgpIC8gNjBcblxuICAgICAgICBpZiAoZW5kVGltZSA8IHN0YXJ0VGltZSkge1xuICAgICAgICAgIC8vIElmIHRoZSBldmVudCBlbmRzIG9uIHRoZSBuZXh0IGRheSwgc2V0IGVuZCB0aW1lIHRvIDI0IGhvdXJzXG4gICAgICAgICAgZW5kVGltZSA9IDI0XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcbiAgICAgICAgbGV0IGxlZnQ6IG51bWJlclxuICAgICAgICBsZXQgd2lkdGg6IG51bWJlclxuICAgICAgICBsZXQgekluZGV4OiBudW1iZXJcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIC8vIEZpcnN0IGV2ZW50IChsb25nZXN0KSB0YWtlcyBmdWxsIHdpZHRoIGF0IGJvdHRvbVxuICAgICAgICAgIGxlZnQgPSAwXG4gICAgICAgICAgd2lkdGggPSAxMDBcbiAgICAgICAgICB6SW5kZXggPSAxXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3Vic2VxdWVudCBldmVudHMgYXJlIG9mZnNldCBkeW5hbWljYWxseSBiYXNlZCBvbiB0b3RhbCBldmVudCBjb3VudFxuICAgICAgICAgIGxlZnQgPSBvZmZzZXRQZXJFdmVudCAqIGlcbiAgICAgICAgICB3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG4gICAgICAgICAgekluZGV4ID0gaSArIDEgLy8gSGlnaGVyIHotaW5kZXggZm9yIGV2ZW50cyBvbiB0b3BcbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICBsZWZ0LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHRvcCxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgekluZGV4LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudHNcbiAgfSwgW2RheSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlXSlcblxuICByZXR1cm4gdG9kYXlFdmVudHNcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgRGF5RXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheTogZGF5anMuRGF5anMgLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGxheWVyIHJlcHJlc2VudHNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5RXZlbnRzTGF5ZXI6IFJlYWN0LkZDPERheUV2ZW50c0xheWVyUHJvcHM+ID0gKHtcbiAgZGF5LFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufSkgPT4ge1xuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZVByb2Nlc3NlZERheUV2ZW50cyh7IGRheSB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgPlxuICAgICAge3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICBjb25zdCBpc1Nob3J0RXZlbnQgPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydCwgJ21pbnV0ZScpIDw9IDE1XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9JWAsXG4gICAgICAgICAgICAgIGhlaWdodDogYCR7ZXZlbnQuaGVpZ2h0fSVgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RHJhZ2dhYmxlRXZlbnRcbiAgICAgICAgICAgICAgZWxlbWVudElkPXtldmVudEtleX1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlJywge1xuICAgICAgICAgICAgICAgICdbJl9wXTp0ZXh0LVsxMHB4XSBbJl9wXTptdC0wJzogaXNTaG9ydEV2ZW50LFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4uL2RheS12aWV3L2RheS1ldmVudHMtbGF5ZXInXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5pbnRlcmZhY2UgV2Vla0RheUNvbFByb3BzIHtcbiAgZGF5OiBkYXlqcy5EYXlqcyAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtEYXlDb2w6IFJlYWN0LkZDPFdlZWtEYXlDb2xQcm9wcz4gPSAoeyBkYXkgfSkgPT4ge1xuICBjb25zdCB7IGJ1c2luZXNzSG91cnMgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWNvbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgY2xhc3NOYW1lPVwiY29sLXNwYW4tMSByZWxhdGl2ZSBncmlkIGdyaWQtcm93cy0yNCBib3JkZXItclwiXG4gICAgPlxuICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4ge1xuICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcbiAgICAgICAgY29uc3QgaG91clN0ciA9IHRpbWUuZm9ybWF0KCdISCcpXG4gICAgICAgIGNvbnN0IGRhdGVTdHIgPSBkYXkuZm9ybWF0KCdZWVlZLU1NLUREJylcbiAgICAgICAgY29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcbiAgICAgICAgICBkYXRlOiBkYXksXG4gICAgICAgICAgaG91cixcbiAgICAgICAgICBtaW51dGU6IDAsXG4gICAgICAgICAgYnVzaW5lc3NIb3VycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICBrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn1gfVxuICAgICAgICAgICAgaWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn1gfVxuICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgZGlzYWJsZWQ9eyFpc0J1c2luZXNzfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXRpbWUtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9KX1cblxuICAgICAgey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cbiAgICAgIDxEYXlFdmVudHNMYXllclxuICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWV2ZW50cy0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICBkYXk9e2RheX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUsIHRpbWVGb3JtYXQgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTYgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTEgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG4gICAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERheSBjb2x1bW5zIHdpdGggdGltZSBzbG90cyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKFxuICAgICAgICA8V2Vla0RheUNvbCBrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX0gZGF5PXtkYXl9IC8+XG4gICAgICApKX1cblxuICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgKi99XG4gICAgICB7aXNDdXJyZW50V2VlayAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIndlZWstY3VycmVudC10aW1lLWluZGljYXRvclwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSB6LTQwXCJcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgbGVmdDogYGNhbGModmFyKC0tc3BhY2luZykgKiAxNiArICR7dG9kYXlJbmRleH0gKiAoMTAwJSAtIHZhcigtLXNwYWNpbmcpICogMTYpIC8gNylgLFxuICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCgxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAxNikgLyA3KWAsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIG1sLTEgaC0yIHctMiByb3VuZGVkLWZ1bGwgYmctcmVkLTUwMFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHsgRGF5QWxsRGF5Um93IH0gZnJvbSAnLi9kYXktYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBEYXlFdmVudHNMYXllciB9IGZyb20gJy4vZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERheUhlYWRlciB9IGZyb20gJy4vZGF5LWhlYWRlcidcbmltcG9ydCB7IERheVRpbWVDb2wgfSBmcm9tICcuL2RheS10aW1lLWNvbCdcbmltcG9ydCB7IGlzQnVzaW5lc3NIb3VyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGJ1c2luZXNzSG91cnMgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgZGF0ZVN0ciA9IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGRhdGEtdGVzdGlkPVwiZGF5LXZpZXdcIiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiPlxuICAgICAgey8qIERheSBoZWFkZXIgKi99XG4gICAgICA8RGF5SGVhZGVyIGNsYXNzTmFtZT1cImgtWzNyZW1dXCIgLz5cblxuICAgICAgey8qIFRpbWUgZ3JpZCB3aXRob3V0IHNjcm9sbGJhciAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LXNjcm9sbC1hcmVhXCJcbiAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgb3ZlcmZsb3cteS1hdXRvIGgtW2NhbGMoMTAwJS0zcmVtKV1cIlxuICAgICAgPlxuICAgICAgICB7LyogQWxsLWRheSBldmVudHMgcm93ICovfVxuICAgICAgICA8RGF5QWxsRGF5Um93IC8+XG5cbiAgICAgICAgey8qIFNldCBhIGZpeGVkIGhlaWdodCBjb250YWluZXIgdGhhdCBtYXRjaGVzIGV4YWN0bHkgdGhlIHRvdGFsIGhlaWdodCBvZiBhbGwgaG91ciBibG9ja3MgKi99XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS10aW1lLWdyaWRcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTggZGl2aWRlLXggYm9yZGVyLXhcIlxuICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogYCR7aG91cnMubGVuZ3RoICogNjB9cHhgIH19XG4gICAgICAgID5cbiAgICAgICAgICB7LyogVGltZSBsYWJlbHMgY29sdW1uICovfVxuICAgICAgICAgIDxEYXlUaW1lQ29sIGNsYXNzTmFtZT1cImNvbC1zcGFuLTIgaC1mdWxsIG1kOmNvbC1zcGFuLTFcIiAvPlxuXG4gICAgICAgICAgey8qIERheSBjb2x1bW4gd2l0aCBldmVudHMgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktZXZlbnRzLWNvbHVtblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjb2wtc3Bhbi02IGgtZnVsbCBtZDpjb2wtc3Bhbi03XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSB0aW1lLmhvdXIoKVxuICAgICAgICAgICAgICBjb25zdCBob3VyU3RyID0gdGltZS5mb3JtYXQoJ0hIJylcblxuICAgICAgICAgICAgICBjb25zdCBjaGVja0J1c2luZXNzID0gKG1pbnV0ZTogbnVtYmVyKSA9PlxuICAgICAgICAgICAgICAgIGlzQnVzaW5lc3NIb3VyKHtcbiAgICAgICAgICAgICAgICAgIGRhdGU6IGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgICAgICAgaG91cixcbiAgICAgICAgICAgICAgICAgIG1pbnV0ZSxcbiAgICAgICAgICAgICAgICAgIGJ1c2luZXNzSG91cnMsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn1gfT5cbiAgICAgICAgICAgICAgICAgIHtbMCwgMTUsIDMwLCA0NV0ubWFwKChtaW51dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNCdXNpbmVzcyA9IGNoZWNrQnVzaW5lc3MobWludXRlKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RTbG90ID0gbWludXRlID09PSA0NVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW51dGVTdHIgPSBtaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9yZGVyQ2xhc3MgPSBpc0xhc3RTbG90XG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLWJvcmRlcidcbiAgICAgICAgICAgICAgICAgICAgICA6ICdib3JkZXItZGFzaGVkJ1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17bWludXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2BkYXktdGltZS1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfS0ke21pbnV0ZVN0cn1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2BkYXktdGltZS1jZWxsLSR7aG91clN0cn0tJHttaW51dGVTdHJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlPXttaW51dGV9XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlzQnVzaW5lc3N9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnaC1bMTVweF0gYm9yZGVyLWIgaG92ZXI6YmctYWNjZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgIHsvKiBFdmVudHMgbGF5ZXIgLSBtaWRkbGUtdG9wIGxheWVyICovfVxuICAgICAgICAgICAgPERheUV2ZW50c0xheWVyIGRheT17Y3VycmVudERhdGV9IC8+XG5cbiAgICAgICAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yIC0gdG9wIGxheWVyICovfVxuICAgICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktY3VycmVudC10aW1lLWluZGljYXRvclwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCBsZWZ0LTAgei00MCBib3JkZXItdCBib3JkZXItcmVkLTUwMFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCItbXQtMSAtbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1Njcm9sbEFyZWE+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgRGF5Vmlld1xuIiwKICAgICJpbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyBXZWVrRXZlbnRzTGF5ZXIgfSBmcm9tICcuLi9tb250aC12aWV3L3dlZWstZXZlbnRzLWxheWVyJ1xuXG5leHBvcnQgY29uc3QgRGF5QWxsRGF5Um93ID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCB0LCBidXNpbmVzc0hvdXJzIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc0J1c2luZXNzID0gaXNCdXNpbmVzc0hvdXIoeyBkYXRlOiBjdXJyZW50RGF0ZSwgYnVzaW5lc3NIb3VycyB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYWxsLWRheS1yb3dcIlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtOCBib3JkZXItYiBib3JkZXIteFwiXG4gICAgPlxuICAgICAgey8qIExlZnQgbGFiZWwgZm9yIGFsbC1kYXkgZXZlbnRzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJvcmRlci1yIHByLTIgbWQ6Y29sLXNwYW4tMVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14c1wiPlxuICAgICAgICAgIHt0KCdhbGxEYXknKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBBbGwtZGF5IGV2ZW50cyBjb250YWluZXIgd2l0aCBkeW5hbWljIGhlaWdodCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBtZDpjb2wtc3Bhbi03IFwiPlxuICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgIGlkPXtgYWxsLWRheS0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgdHlwZT1cImRheS1jZWxsXCJcbiAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICBhbGxEYXk9e3RydWV9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IHctZnVsbCBjdXJzb3ItcG9pbnRlciBtaW4taC0xMCBmbGV4IGZsZXgtY29sIHJlbGF0aXZlXCJcbiAgICAgICAgICBkaXNhYmxlZD17IWlzQnVzaW5lc3N9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0xMCBwci0yXCI+XG4gICAgICAgICAgICA8V2Vla0V2ZW50c0xheWVyIGRheXM9e1tjdXJyZW50RGF0ZV19IGRheU51bWJlckhlaWdodD17MH0gYWxsRGF5IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvRHJvcHBhYmxlQ2VsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgRGF5SGVhZGVyUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUhlYWRlcjogUmVhY3QuRkM8RGF5SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItYiBwLTIgYm9yZGVyLXgnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIHRleHQtYmFzZSBmb250LXNlbWlib2xkIHNtOnRleHQteGwnLFxuICAgICAgICAgICAgaXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ4czppbmxpbmUgaGlkZGVuXCI+XG4gICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG4gICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBtbC0yIHJvdW5kZWQtZnVsbCBweC0xIHB5LTAuNSB0ZXh0LXhzIHNtOnB4LTIgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICBUb2RheVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vLyBIb3VycyB0byBkaXNwbGF5IChhbGwgMjQgaG91cnMgb2YgdGhlIGRheSlcbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT4ge1xuICByZXR1cm4gZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxufSlcblxuaW50ZXJmYWNlIERheVRpbWVDb2xQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgRGF5VGltZUNvbDogUmVhY3QuRkM8RGF5VGltZUNvbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudExvY2FsZSwgdGltZUZvcm1hdCB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LXRpbWUtY29sXCJcbiAgICAgIGNsYXNzTmFtZT17YGNvbC1zcGFuLTIgaC1mdWxsIG1kOmNvbC1zcGFuLTEgJHtjbGFzc05hbWV9YH1cbiAgICA+XG4gICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBrZXk9e3RpbWUuZm9ybWF0KCdISDptbScpfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPXtgZGF5LXRpbWUtaG91ci0ke3RpbWUuZm9ybWF0KCdISCcpfWB9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcHItMiB0ZXh0LXJpZ2h0IHRleHQtWzEwcHhdIHNtOnRleHQteHNcIj5cbiAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICBob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RpYWxvZydcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9kYXRlLXBpY2tlcidcbmltcG9ydCB7IFRpbWVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXInXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdG9yIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3InXG5pbXBvcnQgeyB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IENPTE9SX05BTUVTID0gW1xuICAnYmx1ZScsXG4gICdncmVlbicsXG4gICdwdXJwbGUnLFxuICAncmVkJyxcbiAgJ3llbGxvdycsXG4gICdwaW5rJyxcbiAgJ2luZGlnbycsXG4gICdhbWJlcicsXG4gICdlbWVyYWxkJyxcbiAgJ3NreScsXG4gICd2aW9sZXQnLFxuICAncm9zZScsXG4gICd0ZWFsJyxcbiAgJ29yYW5nZScsXG5dIGFzIGNvbnN0XG5cbmNvbnN0IENPTE9SX09QVElPTlMgPSBDT0xPUl9OQU1FUy5tYXAoKGNvbG9yKSA9PiAoe1xuICB2YWx1ZTogYGJnLSR7Y29sb3J9LTEwMCB0ZXh0LSR7Y29sb3J9LTgwMGAsXG4gIGxhYmVsOiBjb2xvci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNvbG9yLnNsaWNlKDEpLFxufSkpXG5cbmNvbnN0IGJ1aWxkRGF0ZVRpbWUgPSAoXG4gIGRhdGU6IERhdGUsXG4gIHRpbWU6IHN0cmluZyxcbiAgaXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcbiAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICBjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG4gIHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigwKS5taW51dGUoMCkgOiBiYXNlXG59XG5cbmNvbnN0IGJ1aWxkRW5kRGF0ZVRpbWUgPSAoXG4gIGRhdGU6IERhdGUsXG4gIHRpbWU6IHN0cmluZyxcbiAgaXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcbiAgY29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICBjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG4gIHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigyMykubWludXRlKDU5KSA6IGJhc2Vcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEZvcm1Qcm9wcyB7XG4gIG9wZW4/OiBib29sZWFuXG4gIHNlbGVjdGVkRXZlbnQ/OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBvbkFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvblVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkRlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm06IFJlYWN0LkZDPEV2ZW50Rm9ybVByb3BzPiA9ICh7XG4gIHNlbGVjdGVkRXZlbnQsXG4gIG9uQ2xvc2UsXG4gIG9uVXBkYXRlLFxuICBvbkRlbGV0ZSxcbiAgb25BZGQsXG59KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaWFsb2dTdGF0ZSxcbiAgICBvcGVuRWRpdERpYWxvZyxcbiAgICBvcGVuRGVsZXRlRGlhbG9nLFxuICAgIGNsb3NlRGlhbG9nLFxuICAgIGhhbmRsZUNvbmZpcm0sXG4gIH0gPSB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25DbG9zZSlcblxuICBjb25zdCB7IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCwgdCwgYnVzaW5lc3NIb3VycywgdGltZUZvcm1hdCB9ID1cbiAgICB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcbiAgICAgIGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY29udGV4dC5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG4gICAgICB0OiBjb250ZXh0LnQsXG4gICAgICBidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG4gICAgICB0aW1lRm9ybWF0OiBjb250ZXh0LnRpbWVGb3JtYXQsXG4gICAgfSkpXG5cbiAgY29uc3Qgc3RhcnQgPSBzZWxlY3RlZEV2ZW50Py5zdGFydCA/PyBkYXlqcygpXG4gIGNvbnN0IGVuZCA9IHNlbGVjdGVkRXZlbnQ/LmVuZCA/PyBkYXlqcygpLmFkZCgxLCAnaG91cicpXG5cbiAgLy8gRmluZCBwYXJlbnQgZXZlbnQgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuICBjb25zdCBwYXJlbnRFdmVudCA9IHNlbGVjdGVkRXZlbnRcbiAgICA/IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KVxuICAgIDogbnVsbFxuXG4gIC8vIEZvcm0gc3RhdGVcbiAgY29uc3QgW3N0YXJ0RGF0ZSwgc2V0U3RhcnREYXRlXSA9IHVzZVN0YXRlKHN0YXJ0LnRvRGF0ZSgpKVxuICBjb25zdCBbZW5kRGF0ZSwgc2V0RW5kRGF0ZV0gPSB1c2VTdGF0ZShlbmQudG9EYXRlKCkpXG4gIGNvbnN0IFtpc0FsbERheSwgc2V0SXNBbGxEYXldID0gdXNlU3RhdGUoc2VsZWN0ZWRFdmVudD8uYWxsRGF5IHx8IGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRDb2xvciwgc2V0U2VsZWN0ZWRDb2xvcl0gPSB1c2VTdGF0ZShcbiAgICBzZWxlY3RlZEV2ZW50Py5jb2xvciB8fCBDT0xPUl9PUFRJT05TWzBdLnZhbHVlXG4gIClcblxuICAvLyBUaW1lIHN0YXRlXG4gIGNvbnN0IFtzdGFydFRpbWUsIHNldFN0YXJ0VGltZV0gPSB1c2VTdGF0ZShzdGFydC5mb3JtYXQoJ0hIOm1tJykpXG4gIGNvbnN0IFtlbmRUaW1lLCBzZXRFbmRUaW1lXSA9IHVzZVN0YXRlKGVuZC5mb3JtYXQoJ0hIOm1tJykpXG5cbiAgLy8gSW5pdGlhbGl6ZSBmb3JtIHZhbHVlcyBmcm9tIHNlbGVjdGVkIGV2ZW50IG9yIGRlZmF1bHRzXG4gIGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHtcbiAgICB0aXRsZTogc2VsZWN0ZWRFdmVudD8udGl0bGUgfHwgJycsXG4gICAgZGVzY3JpcHRpb246IHNlbGVjdGVkRXZlbnQ/LmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgIGxvY2F0aW9uOiBzZWxlY3RlZEV2ZW50Py5sb2NhdGlvbiB8fCAnJyxcbiAgfSlcblxuICAvLyBSZWN1cnJlbmNlIHN0YXRlIC0gcHVsbCBSUlVMRSBmcm9tIHBhcmVudCBpZiB0aGlzIGlzIGFuIGluc3RhbmNlXG4gIGNvbnN0IFtycnVsZSwgc2V0UnJ1bGVdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IGV2ZW50UnJ1bGUgPSBzZWxlY3RlZEV2ZW50Py5ycnVsZSB8fCBwYXJlbnRFdmVudD8ucnJ1bGVcbiAgICByZXR1cm4gZXZlbnRScnVsZSB8fCBudWxsXG4gIH0pXG5cbiAgLy8gQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGZpeCBUeXBlU2NyaXB0IGVycm9ycyB3aXRoIERhdGVQaWNrZXJcbiAgY29uc3QgaGFuZGxlU3RhcnREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXRTdGFydERhdGUoZGF0ZSlcbiAgICBpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0FmdGVyKGRheWpzKGVuZERhdGUpKSkge1xuICAgICAgc2V0RW5kRGF0ZShkYXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIHNldEVuZERhdGUoZGF0ZSlcbiAgICBpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuICAgICAgc2V0U3RhcnREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgLy8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuICBjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0U3RhcnRUaW1lKHRpbWUpXG4gICAgLy8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuICAgIGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG4gICAgICBzZXRFbmRUaW1lKHRpbWUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcbiAgICBzZXRFbmRUaW1lKHRpbWUpXG4gICAgLy8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuICAgIGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcbiAgICAgIHNldFN0YXJ0VGltZSh0aW1lKVxuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcbiAgY29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG4gICAgZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4gICkgPT4ge1xuICAgIGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG4gICAgc2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cbiAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgIHNldEVuZFRpbWUoJzIzOjU5JylcbiAgICB9XG4gIH0sIFtpc0FsbERheV0pXG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuICAgIGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcbiAgICAgIGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcbiAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG4gICAgICBlbmQ6IGVuZERhdGVUaW1lLFxuICAgICAgcmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgY29sb3I6IHNlbGVjdGVkQ29sb3IsXG4gICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG4gICAgICBvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG4gICAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgICBzdGFydDogc3RhcnREYXRlVGltZSxcbiAgICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgIGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuICAgICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgICAgcnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcbiAgICAgIG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkFkZD8uKGV2ZW50RGF0YSlcbiAgICB9XG4gICAgb25DbG9zZSgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG4gICAgICBpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuICAgICAgICAvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG4gICAgICAgIG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcbiAgICAgICAgcmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG4gICAgICB9XG4gICAgICBvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuICAgIGlmICghbmV3UlJ1bGUpIHtcbiAgICAgIHNldFJydWxlKG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuICAgIHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcbiAgfVxuXG4gIGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBidXNpbmVzc0hvdXJzXG4gICAgPyAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXlqcyhkYXRlKS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIHJldHVybiAhYnVzaW5lc3NIb3Vycy5kYXlzT2ZXZWVrLmluY2x1ZGVzKFxuICAgICAgICAgIGRheU9mV2VlayBhcyAodHlwZW9mIGJ1c2luZXNzSG91cnMuZGF5c09mV2VlaylbbnVtYmVyXVxuICAgICAgICApXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWRcblxuICBjb25zdCBtaW5UaW1lID0gYnVzaW5lc3NIb3Vyc1xuICAgID8gYCR7YnVzaW5lc3NIb3Vycy5zdGFydFRpbWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfTowMGBcbiAgICA6ICcwMDowMCdcbiAgY29uc3QgbWF4VGltZSA9IGJ1c2luZXNzSG91cnNcbiAgICA/IGAkeyhidXNpbmVzc0hvdXJzLmVuZFRpbWUgLSAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjQ1YFxuICAgIDogJzIzOjU5J1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEaWFsb2cgb3Blbj17dHJ1ZX0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLVs5MHZoXSB3LVs5MHZ3XSBtYXgtdy1bNTAwcHhdIHAtNCBzbTpwLTYgb3ZlcmZsb3ctaGlkZGVuIGdhcC0wXCI+XG4gICAgICAgICAgPERpYWxvZ0hlYWRlciBjbGFzc05hbWU9XCJtYi0yIHNtOm1iLTQgc2hyaW5rLTBcIj5cbiAgICAgICAgICAgIDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LWJhc2Ugc206dGV4dC1sZ1wiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnQnKSA6IHQoJ2NyZWF0ZUV2ZW50Jyl9XG4gICAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnREZXRhaWxzJykgOiB0KCdhZGROZXdFdmVudCcpfVxuICAgICAgICAgICAgPC9EaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICBvblN1Ym1pdD17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLWgtMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLTBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0zIHNtOmdhcC00IHAtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJ0aXRsZVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICB7dCgndGl0bGUnKX1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdldmVudFRpdGxlUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZGVzY3JpcHRpb25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2Rlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Zm9ybVZhbHVlcy5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cImFsbERheVwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQWxsRGF5fVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImFsbERheVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICB7dCgnYWxsRGF5Jyl9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ3N0YXJ0RGF0ZScpfVxuICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e3N0YXJ0RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsb3NlT25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWREYXRlTWF0Y2hlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmREYXRlJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtlbmREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVFbmREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsb3NlT25TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWREYXRlTWF0Y2hlcn1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgeyFpc0FsbERheSAmJiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnc3RhcnRUaW1lJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8VGltZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N0YXJ0VGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTdGFydFRpbWVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5UaW1lPXttaW5UaW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VGltZT17bWF4VGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic3RhcnQtdGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ2VuZFRpbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxUaW1lUGlja2VyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZW5kVGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVFbmRUaW1lQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgbWluVGltZT17bWluVGltZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFRpbWU9e21heFRpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImVuZC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnY29sb3InKX08L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICB7Q09MT1JfT1BUSU9OUy5tYXAoKGNvbG9yKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjb2xvci52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke2NvbG9yLnZhbHVlfSBoLTYgdy02IHJvdW5kZWQtZnVsbCBzbTpoLTggc206dy04YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmluZy0yIHJpbmctYmxhY2sgcmluZy1vZmZzZXQtMSBzbTpyaW5nLW9mZnNldC0yJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Y29sb3IubGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMSBzbTpnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJsb2NhdGlvblwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICB7dCgnbG9jYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLmxvY2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB7LyogUmVjdXJyZW5jZSBTZWN0aW9uICovfVxuICAgICAgICAgICAgICAgIDxSZWN1cnJlbmNlRWRpdG9yIHZhbHVlPXtycnVsZX0gb25DaGFuZ2U9e2hhbmRsZVJSdWxlQ2hhbmdlfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvU2Nyb2xsQXJlYT5cblxuICAgICAgICAgICAgPERpYWxvZ0Zvb3RlciBjbGFzc05hbWU9XCJtdC00IHNocmluay0wIGZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpnYXAtMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImRlc3RydWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBzbTptci1hdXRvIHNtOnctYXV0b1wiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KCdkZWxldGUnKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBnYXAtMiBzbTp3LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ3VwZGF0ZScpIDogdCgnY3JlYXRlJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0RpYWxvZz5cblxuICAgICAgey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cbiAgICAgIDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuICAgICAgICBpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17Y2xvc2VEaWFsb2d9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cbiAgICAgICAgZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGF0YS1zbG90PVwiaW5wdXRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG4gICAgICAgICdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6XG4gICAgICAgICAgJ2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6Zm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzQwIGRhcms6YmctZGVzdHJ1Y3RpdmUvNjAnLFxuICAgICAgICBvdXRsaW5lOlxuICAgICAgICAgICdib3JkZXIgYmctYmFja2dyb3VuZCBzaGFkb3cteHMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmJvcmRlci1pbnB1dCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwJyxcbiAgICAgICAgc2Vjb25kYXJ5OlxuICAgICAgICAgICdiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAnLFxuICAgICAgICBnaG9zdDpcbiAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1hY2NlbnQvNTAnLFxuICAgICAgICBsaW5rOiAndGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUnLFxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgZGVmYXVsdDogJ2gtOSBweC00IHB5LTIgaGFzLVs+c3ZnXTpweC0zJyxcbiAgICAgICAgc206ICdoLTggcm91bmRlZC1tZCBnYXAtMS41IHB4LTMgaGFzLVs+c3ZnXTpweC0yLjUnLFxuICAgICAgICBsZzogJ2gtMTAgcm91bmRlZC1tZCBweC02IGhhcy1bPnN2Z106cHgtNCcsXG4gICAgICAgIGljb246ICdzaXplLTknLFxuICAgICAgICAnaWNvbi1zbSc6ICdzaXplLTgnLFxuICAgICAgICAnaWNvbi1sZyc6ICdzaXplLTEwJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0VmFyaWFudHM6IHtcbiAgICAgIHZhcmlhbnQ6ICdkZWZhdWx0JyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICB9LFxuICB9XG4pXG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgdmFyaWFudCxcbiAgc2l6ZSxcbiAgYXNDaGlsZCA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2J1dHRvbic+ICZcbiAgVmFyaWFudFByb3BzPHR5cGVvZiBidXR0b25WYXJpYW50cz4gJiB7XG4gICAgYXNDaGlsZD86IGJvb2xlYW5cbiAgfSkge1xuICBjb25zdCBDb21wID0gYXNDaGlsZCA/IFNsb3QgOiAnYnV0dG9uJ1xuXG4gIHJldHVybiAoXG4gICAgPENvbXBcbiAgICAgIGRhdGEtc2xvdD1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudCwgc2l6ZSwgY2xhc3NOYW1lIH0pKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3JcbiAgICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG4gICAgICA+XG4gICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgPC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG4gICAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgYXMgQ2FsZW5kYXJJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyBDYWxlbmRhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jYWxlbmRhcidcbmltcG9ydCB7XG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBvcG92ZXJDbG9zZSB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuaW1wb3J0IHR5cGUgeyBNYXRjaGVyIH0gZnJvbSAncmVhY3QtZGF5LXBpY2tlcidcblxuaW50ZXJmYWNlIERhdGVQaWNrZXJQcm9wcyB7XG4gIGRhdGU6IERhdGUgfCB1bmRlZmluZWRcbiAgb25DaGFuZ2U/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuICBsYWJlbD86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW5cbiAgZGlzYWJsZWQ/OiBNYXRjaGVyIHwgTWF0Y2hlcltdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRlUGlja2VyKHtcbiAgZGF0ZSxcbiAgY2xvc2VPblNlbGVjdCxcbiAgb25DaGFuZ2UsXG4gIGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcbiAgY2xhc3NOYW1lLFxuICBkaXNhYmxlZCxcbn06IERhdGVQaWNrZXJQcm9wcykge1xuICBjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cbiAgLy8gU3luYyBkYXRlIHN0YXRlIHdpdGggZGF0ZSBwcm9wXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWREYXRlKGRhdGUpXG4gIH0sIFtkYXRlXSlcblxuICBjb25zdCBoYW5kbGVEYXRlU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXRTZWxlY3RlZERhdGUoZGF0ZSlcbiAgICBpZiAoY2xvc2VPblNlbGVjdCkge1xuICAgICAgcG9wT3ZlclJlZi5jdXJyZW50Py5jbGljaygpXG4gICAgfVxuICAgIG9uQ2hhbmdlPy4oZGF0ZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8UG9wb3Zlcj5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgZGF0YS1lbXB0eT17IWRhdGV9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnZGF0YS1bZW1wdHk9dHJ1ZV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENhbGVuZGFySWNvbiAvPlxuICAgICAgICAgICAge3NlbGVjdGVkRGF0ZSA/IChcbiAgICAgICAgICAgICAgZGF5anMoc2VsZWN0ZWREYXRlKS5mb3JtYXQoJ01NTSBELCBZWVlZJylcbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy1hdXRvIHAtMFwiIGFsaWduPVwic3RhcnRcIj5cbiAgICAgICAgICA8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gLz5cbiAgICAgICAgICA8Q2FsZW5kYXJcbiAgICAgICAgICAgIG1vZGU9XCJzaW5nbGVcIlxuICAgICAgICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkRGF0ZX1cbiAgICAgICAgICAgIGRlZmF1bHRNb250aD17c2VsZWN0ZWREYXRlfVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG4gICAgICAgICAgICBjYXB0aW9uTGF5b3V0PVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICA8L1BvcG92ZXI+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBDaGV2cm9uRG93bkljb24sXG4gIENoZXZyb25MZWZ0SWNvbixcbiAgQ2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuICBjbGFzc05hbWUsXG4gIGNsYXNzTmFtZXMsXG4gIHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG4gIGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuICBidXR0b25WYXJpYW50ID0gJ2dob3N0JyxcbiAgZm9ybWF0dGVycyxcbiAgY29tcG9uZW50cyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuICBidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuICBjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuICByZXR1cm4gKFxuICAgIDxEYXlQaWNrZXJcbiAgICAgIHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG4gICAgICAgIFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgY2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cbiAgICAgIGZvcm1hdHRlcnM9e3tcbiAgICAgICAgZm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG4gICAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG4gICAgICAgIC4uLmZvcm1hdHRlcnMsXG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lcz17e1xuICAgICAgICByb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcbiAgICAgICAgbW9udGhzOiBjbihcbiAgICAgICAgICAnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG4gICAgICAgIG5hdjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX3ByZXZpb3VzOiBjbihcbiAgICAgICAgICBidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG4gICAgICAgICAgJ3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX25leHQ6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG4gICAgICAgICksXG4gICAgICAgIG1vbnRoX2NhcHRpb246IGNuKFxuICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cbiAgICAgICAgKSxcbiAgICAgICAgZHJvcGRvd25zOiBjbihcbiAgICAgICAgICAndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bl9yb290OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bjogY24oXG4gICAgICAgICAgJ2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG4gICAgICAgICksXG4gICAgICAgIGNhcHRpb25fbGFiZWw6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG4gICAgICAgICAgY2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuICAgICAgICAgICAgPyAndGV4dC1zbSdcbiAgICAgICAgICAgIDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcbiAgICAgICAgKSxcbiAgICAgICAgdGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcbiAgICAgICAgd2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuICAgICAgICB3ZWVrZGF5OiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcbiAgICAgICAgKSxcbiAgICAgICAgd2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcbiAgICAgICAgd2Vla19udW1iZXJfaGVhZGVyOiBjbihcbiAgICAgICAgICAnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla19udW1iZXI6IGNuKFxuICAgICAgICAgICd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcbiAgICAgICAgKSxcbiAgICAgICAgZGF5OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6bGFzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1yLW1kIGdyb3VwL2RheSBhc3BlY3Qtc3F1YXJlIHNlbGVjdC1ub25lJyxcbiAgICAgICAgICBwcm9wcy5zaG93V2Vla051bWJlclxuICAgICAgICAgICAgPyAnWyY6bnRoLWNoaWxkKDIpW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnXG4gICAgICAgICAgICA6ICdbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kYXlcbiAgICAgICAgKSxcbiAgICAgICAgcmFuZ2Vfc3RhcnQ6IGNuKFxuICAgICAgICAgICdyb3VuZGVkLWwtbWQgYmctYWNjZW50JyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9zdGFydFxuICAgICAgICApLFxuICAgICAgICByYW5nZV9taWRkbGU6IGNuKCdyb3VuZGVkLW5vbmUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9taWRkbGUpLFxuICAgICAgICByYW5nZV9lbmQ6IGNuKCdyb3VuZGVkLXItbWQgYmctYWNjZW50JywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfZW5kKSxcbiAgICAgICAgdG9kYXk6IGNuKFxuICAgICAgICAgICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGRhdGEtW3NlbGVjdGVkPXRydWVdOnJvdW5kZWQtbm9uZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMudG9kYXlcbiAgICAgICAgKSxcbiAgICAgICAgb3V0c2lkZTogY24oXG4gICAgICAgICAgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBhcmlhLXNlbGVjdGVkOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMub3V0c2lkZVxuICAgICAgICApLFxuICAgICAgICBkaXNhYmxlZDogY24oXG4gICAgICAgICAgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5kaXNhYmxlZFxuICAgICAgICApLFxuICAgICAgICBoaWRkZW46IGNuKCdpbnZpc2libGUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5oaWRkZW4pLFxuICAgICAgICAuLi5jbGFzc05hbWVzLFxuICAgICAgfX1cbiAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgUm9vdDogKHsgY2xhc3NOYW1lLCByb290UmVmLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS1zbG90PVwiY2FsZW5kYXJcIlxuICAgICAgICAgICAgICByZWY9e3Jvb3RSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oY2xhc3NOYW1lKX1cbiAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIENoZXZyb246ICh7IGNsYXNzTmFtZSwgb3JpZW50YXRpb24sIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hldnJvblJpZ2h0SWNvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9XG4gICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cbiAgICAgICAgICApXG4gICAgICAgIH0sXG4gICAgICAgIERheUJ1dHRvbjogQ2FsZW5kYXJEYXlCdXR0b24sXG4gICAgICAgIFdlZWtOdW1iZXI6ICh7IGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCB7Li4ucHJvcHN9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggc2l6ZS0oLS1jZWxsLXNpemUpIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgIH19XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYWxlbmRhckRheUJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgZGF5LFxuICBtb2RpZmllcnMsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5QnV0dG9uPikge1xuICBjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGlmaWVycy5mb2N1c2VkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKVxuICAgIH1cbiAgfSwgW21vZGlmaWVycy5mb2N1c2VkXSlcblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHJlZj17cmVmfVxuICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgIGRhdGEtZGF5PXtkYXkuZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKX1cbiAgICAgIGRhdGEtc2VsZWN0ZWQtc2luZ2xlPXtcbiAgICAgICAgbW9kaWZpZXJzLnNlbGVjdGVkICYmXG4gICAgICAgICFtb2RpZmllcnMucmFuZ2Vfc3RhcnQgJiZcbiAgICAgICAgIW1vZGlmaWVycy5yYW5nZV9lbmQgJiZcbiAgICAgICAgIW1vZGlmaWVycy5yYW5nZV9taWRkbGVcbiAgICAgIH1cbiAgICAgIGRhdGEtcmFuZ2Utc3RhcnQ9e21vZGlmaWVycy5yYW5nZV9zdGFydH1cbiAgICAgIGRhdGEtcmFuZ2UtZW5kPXttb2RpZmllcnMucmFuZ2VfZW5kfVxuICAgICAgZGF0YS1yYW5nZS1taWRkbGU9e21vZGlmaWVycy5yYW5nZV9taWRkbGV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpiZy1hY2NlbnQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6Ym9yZGVyLXJpbmcgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1yaW5nLzUwIGRhcms6aG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBmbGV4IGFzcGVjdC1zcXVhcmUgc2l6ZS1hdXRvIHctZnVsbCBtaW4tdy0oLS1jZWxsLXNpemUpIGZsZXgtY29sIGdhcC0xIGxlYWRpbmctbm9uZSBmb250LW5vcm1hbCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyZWxhdGl2ZSBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTp6LTEwIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctWzNweF0gZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtci1tZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06cm91bmRlZC1ub25lIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1sLW1kIFsmPnNwYW5dOnRleHQteHMgWyY+c3Bhbl06b3BhY2l0eS03MCcsXG4gICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRheSxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgQ2FsZW5kYXIsIENhbGVuZGFyRGF5QnV0dG9uIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBQb3BvdmVyUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1wb3BvdmVyJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBQb3BvdmVyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInBvcG92ZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG4gIHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cInBvcG92ZXItdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlckNvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGFsaWduID0gJ2NlbnRlcicsXG4gIHNpZGVPZmZzZXQgPSA0LFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8UG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8UG9wb3ZlclByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIGRhdGEtc2xvdD1cInBvcG92ZXItY29udGVudFwiXG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LTcyIG9yaWdpbi0oLS1yYWRpeC1wb3BvdmVyLWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgcm91bmRlZC1tZCBib3JkZXIgcC00IHNoYWRvdy1tZCBvdXRsaW5lLWhpZGRlbicsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgIC8+XG4gICAgPC9Qb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQW5jaG9yKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkFuY2hvcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLkFuY2hvciBkYXRhLXNsb3Q9XCJwb3BvdmVyLWFuY2hvclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZXhwb3J0IHsgUG9wb3ZlciwgUG9wb3ZlclRyaWdnZXIsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyQW5jaG9yIH1cbiIsCiAgICAiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDbG9jayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIgfSBmcm9tICdAL2hvb2tzL3VzZS1hdXRvY29tcGxldGUtdGltZXBpY2tlcidcbmltcG9ydCB0eXBlIHsgVGltZUZvcm1hdCB9IGZyb20gJ0AvdHlwZXMnXG5cbmNvbnN0IGhhbmRsZVdoZWVsID0gKGU6IFJlYWN0LldoZWVsRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gIC8vIFByZXZlbnQgZXZlbnQgZnJvbSBidWJibGluZyB0byBwcmV2ZW50IFBvcG92ZXIgZnJvbSBjbG9zaW5nXG4gIGUuc3RvcFByb3BhZ2F0aW9uKClcbn1cblxuaW50ZXJmYWNlIFRpbWVQaWNrZXJQcm9wcyB7XG4gIHZhbHVlOiBzdHJpbmdcbiAgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkXG4gIG1pblRpbWU/OiBzdHJpbmdcbiAgbWF4VGltZT86IHN0cmluZ1xuICB0aW1lRm9ybWF0PzogVGltZUZvcm1hdFxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIG5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVQaWNrZXIoe1xuICB2YWx1ZSxcbiAgb25DaGFuZ2UsXG4gIG1pblRpbWUgPSAnMDA6MDAnLFxuICBtYXhUaW1lID0gJzIzOjQ1JyxcbiAgdGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcbiAgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IHRpbWUuLi4nLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG5hbWUsXG59OiBUaW1lUGlja2VyUHJvcHMpIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWFyY2gsIHNldFNlYXJjaF0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgY29uc3QgW3RyaWdnZXJXaWR0aCwgc2V0VHJpZ2dlcldpZHRoXSA9IHVzZVN0YXRlPG51bWJlcj4oMClcblxuICBjb25zdCB7IHRpbWVPcHRpb25zLCBmb3JtYXRUaW1lIH0gPSB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcbiAgICB0aW1lRm9ybWF0LFxuICAgIG1pblRpbWUsXG4gICAgbWF4VGltZSxcbiAgfSlcblxuICAvLyBGaWx0ZXIgdGltZSBvcHRpb25zIGJhc2VkIG9uIHNlYXJjaFxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB0aW1lT3B0aW9ucy5maWx0ZXIoKHRpbWUpID0+IHtcbiAgICBjb25zdCBmb3JtYXR0ZWRUaW1lID0gZm9ybWF0VGltZSh0aW1lKVxuICAgIHJldHVybiBmb3JtYXR0ZWRUaW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKHRpbWU6IHN0cmluZykgPT4ge1xuICAgIG9uQ2hhbmdlKHRpbWUpXG4gICAgc2V0T3BlbihmYWxzZSlcbiAgICBzZXRTZWFyY2goJycpXG4gIH1cblxuICAvLyBNZWFzdXJlIHRyaWdnZXIgd2lkdGggYW5kIGZvY3VzIGlucHV0IHdoZW4gcG9wb3ZlciBvcGVuc1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBpZiAodHJpZ2dlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIHNldFRyaWdnZXJXaWR0aCh0cmlnZ2VyUmVmLmN1cnJlbnQub2Zmc2V0V2lkdGgpXG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgMClcbiAgICB9XG4gIH0sIFtvcGVuXSlcblxuICBjb25zdCBjdXJyZW50VGltZVN0cmluZyA9IHZhbHVlID8gZm9ybWF0VGltZSh2YWx1ZSkgOiBwbGFjZWhvbGRlclxuXG4gIHJldHVybiAoXG4gICAgPFBvcG92ZXIgb3Blbj17b3Blbn0gb25PcGVuQ2hhbmdlPXtzZXRPcGVufT5cbiAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgcmVmPXt0cmlnZ2VyUmVmfVxuICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJ0aW1lLXBpY2tlci1saXN0Ym94XCJcbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtvcGVufVxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0JywgY2xhc3NOYW1lKX1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9e2B0aW1lLXBpY2tlci0ke25hbWV9YH1cbiAgICAgICAgPlxuICAgICAgICAgIDxDbG9jayBjbGFzc05hbWU9XCJtci0yIGgtNCB3LTRcIiAvPlxuICAgICAgICAgIHtjdXJyZW50VGltZVN0cmluZ31cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgPFBvcG92ZXJDb250ZW50XG4gICAgICAgIGNsYXNzTmFtZT1cInAtMFwiXG4gICAgICAgIGFsaWduPVwic3RhcnRcIlxuICAgICAgICBzdHlsZT17eyB3aWR0aDogdHJpZ2dlcldpZHRoIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0yIGJvcmRlci1iXCI+XG4gICAgICAgICAgPElucHV0XG4gICAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggdGltZS4uLlwiXG4gICAgICAgICAgICB2YWx1ZT17c2VhcmNofVxuICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRTZWFyY2goZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPFNjcm9sbEFyZWEgY2xhc3NOYW1lPVwiaC1bMjAwcHhdXCIgb25XaGVlbD17aGFuZGxlV2hlZWx9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicC0xXCI+XG4gICAgICAgICAgICB7ZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJweS02IHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgTi9BXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgZmlsdGVyZWRPcHRpb25zLm1hcCgodGltZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBmb3JtYXRUaW1lKHRpbWUpXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRpbWUgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAga2V5PXt0aW1lfVxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KHRpbWUpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweC0yIHB5LTEuNSB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZCAmJiAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0aW1lU3RyaW5nfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9TY3JvbGxBcmVhPlxuICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICA8L1BvcG92ZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuaW50ZXJmYWNlIFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcyB7XG4gIHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG4gIG1pblRpbWU/OiBzdHJpbmdcbiAgbWF4VGltZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlcih7XG4gIHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG4gIG1pblRpbWUgPSAnMDA6MDAnLFxuICBtYXhUaW1lID0gJzIzOjQ1Jyxcbn06IFVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXJQcm9wcykge1xuICAvLyBHZW5lcmF0ZSB0aW1lIG9wdGlvbnMgKDE1LW1pbnV0ZSBpbnRlcnZhbHMpIHdpdGhpbiBtaW4vbWF4IHJhbmdlXG4gIGNvbnN0IHRpbWVPcHRpb25zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgdGltZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBbbWluSG91ciwgbWluTWludXRlXSA9IG1pblRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICAgIGNvbnN0IFttYXhIb3VyLCBtYXhNaW51dGVdID0gbWF4VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cbiAgICBjb25zdCBtaW5Ub3RhbE1pbnV0ZXMgPSBtaW5Ib3VyICogNjAgKyBtaW5NaW51dGVcbiAgICBjb25zdCBtYXhUb3RhbE1pbnV0ZXMgPSBtYXhIb3VyICogNjAgKyBtYXhNaW51dGVcblxuICAgIGZvciAoXG4gICAgICBsZXQgdG90YWxNaW51dGVzID0gbWluVG90YWxNaW51dGVzO1xuICAgICAgdG90YWxNaW51dGVzIDw9IG1heFRvdGFsTWludXRlcztcbiAgICAgIHRvdGFsTWludXRlcyArPSAxNVxuICAgICkge1xuICAgICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsTWludXRlcyAvIDYwKVxuICAgICAgY29uc3QgbWludXRlcyA9IHRvdGFsTWludXRlcyAlIDYwXG5cbiAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuICAgICAgdGltZXMucHVzaCh0aW1lU3RyaW5nKVxuICAgIH1cblxuICAgIHJldHVybiB0aW1lc1xuICB9LCBbbWluVGltZSwgbWF4VGltZV0pXG5cbiAgY29uc3QgZm9ybWF0VGltZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gdGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgY29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJ1xuICAgIGNvbnN0IGRpc3BsYXlIb3VycyA9IGhvdXJzID09PSAwID8gMTIgOiBob3VycyA+IDEyID8gaG91cnMgLSAxMiA6IGhvdXJzXG5cbiAgICBpZiAodGltZUZvcm1hdCA9PT0gJzI0LWhvdXInKSB7XG4gICAgICByZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWBcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7ZGlzcGxheUhvdXJzfToke21pbnV0ZXMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRpbWVPcHRpb25zLFxuICAgIGZvcm1hdFRpbWUsXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtbGFiZWwnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPExhYmVsUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cImxhYmVsXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHsgTGFiZWwgfVxuIiwKICAgICJpbXBvcnQge1xuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxuICBEaWFsb2dGb290ZXIsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG4gIGlzT3BlbjogYm9vbGVhblxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG4gIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gIGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuICBpc09wZW4sXG4gIG9uQ2xvc2UsXG4gIG9uQ29uZmlybSxcbiAgb3BlcmF0aW9uVHlwZSxcbiAgZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG4gIGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG4gICAgb25Db25maXJtKHNjb3BlKVxuICAgIG9uQ2xvc2UoKVxuICB9XG5cbiAgY29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2lzT3Blbn0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgIDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cbiAgICAgICAgICA8L0RpYWxvZ1RpdGxlPlxuICAgICAgICAgIDxEaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuICAgICAgICAgICAge2lzRWRpdFxuICAgICAgICAgICAgICA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcbiAgICAgICAgICAgICAgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG4gICAgICAgICAgPC9EaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICB7dCgnY2FuY2VsJyl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvRGlhbG9nRm9vdGVyPlxuICAgICAgPC9EaWFsb2dDb250ZW50PlxuICAgIDwvRGlhbG9nPlxuICApXG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICd0ZXh0LWNhcmQtZm9yZWdyb3VuZCBmbGV4IGZsZXgtY29sIGdhcC02IHJvdW5kZWQteGwgYm9yZGVyIHNoYWRvdy1zbScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuICAgICAgY2xhc3NOYW1lPXtjbignbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LXNtJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuICAgICAgY2xhc3NOYW1lPXtjbigncC00IHB0LTAnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1mb290ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIENhcmQsXG4gIENhcmRIZWFkZXIsXG4gIENhcmRGb290ZXIsXG4gIENhcmRUaXRsZSxcbiAgQ2FyZEFjdGlvbixcbiAgQ2FyZERlc2NyaXB0aW9uLFxuICBDYXJkQ29udGVudCxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBTZWxlY3RQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXNlbGVjdCdcbmltcG9ydCB7IENoZWNrSWNvbiwgQ2hldnJvbkRvd25JY29uLCBDaGV2cm9uVXBJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBTZWxlY3Qoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Sb290Pikge1xuICByZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInNlbGVjdFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0R3JvdXAoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Hcm91cD4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuR3JvdXAgZGF0YS1zbG90PVwic2VsZWN0LWdyb3VwXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RWYWx1ZSh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlZhbHVlPikge1xuICByZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5WYWx1ZSBkYXRhLXNsb3Q9XCJzZWxlY3QtdmFsdWVcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIoe1xuICBjbGFzc05hbWUsXG4gIHNpemUgPSAnZGVmYXVsdCcsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPiAmIHtcbiAgc2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlRyaWdnZXJcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC10cmlnZ2VyXCJcbiAgICAgIGRhdGEtc2l6ZT17c2l6ZX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiYm9yZGVyLWlucHV0IGRhdGEtW3BsYWNlaG9sZGVyXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlIGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MCBmbGV4IHctZml0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0yIHRleHQtc20gd2hpdGVzcGFjZS1ub3dyYXAgc2hhZG93LXhzIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIG91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc2l6ZT1kZWZhdWx0XTpoLTkgZGF0YS1bc2l6ZT1zbV06aC04ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmxpbmUtY2xhbXAtMSAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpmbGV4ICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOml0ZW1zLWNlbnRlciAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpnYXAtMiBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuSWNvbiBhc0NoaWxkPlxuICAgICAgICA8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNCBvcGFjaXR5LTUwXCIgLz5cbiAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLkljb24+XG4gICAgPC9TZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgcG9zaXRpb24gPSAncG9wcGVyJyxcbiAgYWxpZ24gPSAnY2VudGVyJyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLXBvcG92ZXIgdGV4dC1wb3BvdmVyLWZvcmVncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIHJlbGF0aXZlIHotNTAgbWF4LWgtKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLWhlaWdodCkgbWluLXctWzhyZW1dIG9yaWdpbi0oLS1yYWRpeC1zZWxlY3QtY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSBvdmVyZmxvdy14LWhpZGRlbiBvdmVyZmxvdy15LWF1dG8gcm91bmRlZC1tZCBib3JkZXIgc2hhZG93LW1kJyxcbiAgICAgICAgICBwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcbiAgICAgICAgICAgICdkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgcG9zaXRpb249e3Bvc2l0aW9ufVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAgPFNlbGVjdFNjcm9sbFVwQnV0dG9uIC8+XG4gICAgICAgIDxTZWxlY3RQcmltaXRpdmUuVmlld3BvcnRcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ3AtMScsXG4gICAgICAgICAgICBwb3NpdGlvbiA9PT0gJ3BvcHBlcicgJiZcbiAgICAgICAgICAgICAgJ2gtW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCldIHctZnVsbCBtaW4tdy1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpXSBzY3JvbGwtbXktMSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1NlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgICAgPFNlbGVjdFNjcm9sbERvd25CdXR0b24gLz5cbiAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9TZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5MYWJlbD4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkxhYmVsXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtbGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTIgcHktMS41IHRleHQteHMnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0SXRlbSh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkl0ZW0+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImZvY3VzOmJnLWFjY2VudCBmb2N1czp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCByZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1zbSBweS0xLjUgcHItOCBwbC0yIHRleHQtc20gb3V0bGluZS1oaWRkZW4gc2VsZWN0LW5vbmUgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00ICo6W3NwYW5dOmxhc3Q6ZmxleCAqOltzcGFuXTpsYXN0Oml0ZW1zLWNlbnRlciAqOltzcGFuXTpsYXN0OmdhcC0yXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0yIGZsZXggc2l6ZS0zLjUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgICAgICA8Q2hlY2tJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1JbmRpY2F0b3I+XG4gICAgICA8L3NwYW4+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PntjaGlsZHJlbn08L1NlbGVjdFByaW1pdGl2ZS5JdGVtVGV4dD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5JdGVtPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNlcGFyYXRvcih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuU2VwYXJhdG9yXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2VwYXJhdG9yXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2JnLWJvcmRlciBwb2ludGVyLWV2ZW50cy1ub25lIC1teC0xIG15LTEgaC1weCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxVcEJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuU2Nyb2xsVXBCdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvblxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC11cC1idXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggY3Vyc29yLWRlZmF1bHQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHB5LTEnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPENoZXZyb25VcEljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RTY3JvbGxEb3duQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvblxuICAgICAgZGF0YS1zbG90PVwic2VsZWN0LXNjcm9sbC1kb3duLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgPC9TZWxlY3RQcmltaXRpdmUuU2Nyb2xsRG93bkJ1dHRvbj5cbiAgKVxufVxuXG5leHBvcnQge1xuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEdyb3VwLFxuICBTZWxlY3RJdGVtLFxuICBTZWxlY3RMYWJlbCxcbiAgU2VsZWN0U2Nyb2xsRG93bkJ1dHRvbixcbiAgU2VsZWN0U2Nyb2xsVXBCdXR0b24sXG4gIFNlbGVjdFNlcGFyYXRvcixcbiAgU2VsZWN0VHJpZ2dlcixcbiAgU2VsZWN0VmFsdWUsXG59XG4iLAogICAgImltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyLCBDYXJkVGl0bGUgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FyZCdcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NoZWNrYm94J1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvbGFiZWwnXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQge1xuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdFRyaWdnZXIsXG4gIFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2VsZWN0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuaW1wb3J0IHR5cGUgeyBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmNvbnN0IEZSRVFfTUFQID0ge1xuICBEQUlMWTogUlJ1bGUuREFJTFksXG4gIFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuICBNT05USExZOiBSUnVsZS5NT05USExZLFxuICBZRUFSTFk6IFJSdWxlLllFQVJMWSxcbn0gYXMgY29uc3RcbmNvbnN0IEZSRVFfVE9fU1RSID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICBPYmplY3QuZW50cmllcyhGUkVRX01BUCkubWFwKChbaywgdl0pID0+IFt2LCBrXSlcbikgYXMgUmVjb3JkPG51bWJlciwgc3RyaW5nPlxuY29uc3QgV0VFS0RBWVMgPSBbXG4gIFJSdWxlLlNVLFxuICBSUnVsZS5NTyxcbiAgUlJ1bGUuVFUsXG4gIFJSdWxlLldFLFxuICBSUnVsZS5USCxcbiAgUlJ1bGUuRlIsXG4gIFJSdWxlLlNBLFxuXVxuY29uc3QgREFZX0tFWVMgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddXG5jb25zdCBwYXJzZU51bSA9ICh2OiBzdHJpbmcpID0+IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludCh2KSB8fCAxKVxuXG5jb25zdCBnZXREZXNjcmlwdGlvbiA9IChcbiAgb3B0czogUlJ1bGVPcHRpb25zIHwgbnVsbCxcbiAgdDogKGs6IHN0cmluZykgPT4gc3RyaW5nXG4pID0+IHtcbiAgaWYgKCFvcHRzKSB7XG4gICAgcmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgdGV4dCA9IG5ldyBSUnVsZShvcHRzKS50b1RleHQoKVxuICAgIHJldHVybiB0ZXh0ICYmICF0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Vycm9yJylcbiAgICAgID8gdGV4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRleHQuc2xpY2UoMSlcbiAgICAgIDogdCgnY3VzdG9tUmVjdXJyZW5jZScpXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcbiAgfVxufVxuXG5pbnRlcmZhY2UgUHJvcHMge1xuICB2YWx1ZT86IFJSdWxlT3B0aW9ucyB8IG51bGxcbiAgb25DaGFuZ2U6ICh2OiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBSZWN1cnJlbmNlRWRpdG9yOiBSZWFjdC5GQzxQcm9wcz4gPSAoeyB2YWx1ZSwgb25DaGFuZ2UgfSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7IHQ6IGN0eC50IH0pKVxuICBjb25zdCBbc2hvdywgc2V0U2hvd10gPSB1c2VTdGF0ZSghIXZhbHVlKVxuICBjb25zdCBbb3B0cywgc2V0T3B0c10gPSB1c2VTdGF0ZTxSUnVsZU9wdGlvbnMgfCBudWxsPigoKSA9PiB2YWx1ZSB8fCBudWxsKVxuXG4gIGNvbnN0IHdlZWtEYXlzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBEQVlfS0VZUy5tYXAoKGssIGkpID0+ICh7IHZhbHVlOiBXRUVLREFZU1tpXSwgbGFiZWw6IHQoaykgfSkpLFxuICAgIFt0XVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTaG93KCEhdmFsdWUpXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBzZXRPcHRzKHZhbHVlKVxuICAgIH1cbiAgfSwgW3ZhbHVlXSlcblxuICBjb25zdCB1cGRhdGUgPSAodTogUGFydGlhbDxSUnVsZU9wdGlvbnM+KSA9PiB7XG4gICAgaWYgKCFvcHRzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IHsgLi4ub3B0cywgLi4udSB9XG4gICAgc2V0T3B0cyhuZXh0KVxuICAgIG9uQ2hhbmdlKHNob3cgPyBuZXh0IDogbnVsbClcbiAgfVxuXG4gIGNvbnN0IHRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U2hvdyhjaGVja2VkKVxuICAgIGlmICghY2hlY2tlZCkge1xuICAgICAgb25DaGFuZ2UobnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAob3B0cykge1xuICAgICAgb25DaGFuZ2Uob3B0cylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBkZWYgPSB7IGZyZXE6IFJSdWxlLkRBSUxZLCBpbnRlcnZhbDogMSB9IGFzIFJSdWxlT3B0aW9uc1xuICAgIHNldE9wdHMoZGVmKVxuICAgIG9uQ2hhbmdlKGRlZilcbiAgfVxuXG4gIGNvbnN0IHRvZ2dsZURheSA9IChpOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBjdXJyID0gKG9wdHM/LmJ5d2Vla2RheSBhcyBXZWVrZGF5W10pIHx8IFtdXG4gICAgY29uc3QgZGF5ID0gV0VFS0RBWVNbaV1cbiAgICBjb25zdCBuZXh0ID0gY3Vyci5pbmNsdWRlcyhkYXkpXG4gICAgICA/IGN1cnIuZmlsdGVyKChkKSA9PiBkICE9PSBkYXkpXG4gICAgICA6IFsuLi5jdXJyLCBkYXldXG4gICAgdXBkYXRlKHsgYnl3ZWVrZGF5OiBuZXh0Lmxlbmd0aCA/IG5leHQgOiB1bmRlZmluZWQgfSlcbiAgfVxuXG4gIGNvbnN0IHNldEVuZFR5cGUgPSAodHlwZTogJ25ldmVyJyB8ICdjb3VudCcgfCAndW50aWwnKSA9PiB7XG4gICAgY29uc3QgdTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0geyBjb3VudDogdW5kZWZpbmVkLCB1bnRpbDogdW5kZWZpbmVkIH1cbiAgICBpZiAodHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgdS5jb3VudCA9IG9wdHM/LmNvdW50IHx8IDFcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09ICd1bnRpbCcpIHtcbiAgICAgIHUudW50aWwgPSBvcHRzPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcbiAgICB9XG4gICAgdXBkYXRlKHUpXG4gIH1cblxuICBjb25zdCBlbmRUeXBlID0gb3B0cz8udW50aWwgPyAndW50aWwnIDogb3B0cz8uY291bnQgPyAnY291bnQnIDogJ25ldmVyJ1xuICBjb25zdCBmcmVxID0gRlJFUV9UT19TVFJbb3B0cz8uZnJlcSA/PyBSUnVsZS5EQUlMWV0gfHwgJ0RBSUxZJ1xuICBjb25zdCBieXdlZWtkYXkgPSBBcnJheS5pc0FycmF5KG9wdHM/LmJ5d2Vla2RheSlcbiAgICA/IG9wdHMuYnl3ZWVrZGF5XG4gICAgOiBvcHRzPy5ieXdlZWtkYXlcbiAgICAgID8gW29wdHMuYnl3ZWVrZGF5XVxuICAgICAgOiBbXVxuXG4gIHJldHVybiAoXG4gICAgPENhcmQgZGF0YS10ZXN0aWQ9XCJyZWN1cnJlbmNlLWVkaXRvclwiPlxuICAgICAgPENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgaWQ9XCJyZWN1cnJpbmdcIlxuICAgICAgICAgICAgY2hlY2tlZD17c2hvd31cbiAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17dG9nZ2xlfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVwZWF0Jyl9PC9DYXJkVGl0bGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvdyAmJiB2YWx1ZSAmJiAoXG4gICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgIHtnZXREZXNjcmlwdGlvbih2YWx1ZSwgdCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICApfVxuICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICB7c2hvdyAmJiAoXG4gICAgICAgIDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwdC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtNFwiPlxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiZnJlcXVlbmN5XCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAge3QoJ3JlcGVhdHMnKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmcmVxfVxuICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KGYpID0+XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSh7IGZyZXE6IEZSRVFfTUFQW2YgYXMga2V5b2YgdHlwZW9mIEZSRVFfTUFQXSB9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RUcmlnZ2VyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiZnJlcXVlbmN5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFZhbHVlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NlbGVjdFRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICA8U2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICAgICAge09iamVjdC5rZXlzKEZSRVFfTUFQKS5tYXAoKGYpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSBrZXk9e2Z9IHZhbHVlPXtmfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KGYudG9Mb3dlckNhc2UoKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0Q29udGVudD5cbiAgICAgICAgICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJpbnRlcnZhbFwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdldmVyeScpfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17b3B0cz8uaW50ZXJ2YWwgfHwgMX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlKHsgaW50ZXJ2YWw6IHBhcnNlTnVtKGUudGFyZ2V0LnZhbHVlKSB9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7b3B0cz8uZnJlcSA9PT0gUlJ1bGUuV0VFS0xZICYmIChcbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdyZXBlYXRPbicpfTwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMSBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICB7d2Vla0RheXMubWFwKChkLCBpKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYga2V5PXtkLmxhYmVsfSBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgZGF5LSR7aX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17Ynl3ZWVrZGF5LmluY2x1ZGVzKGQudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiB0b2dnbGVEYXkoaSl9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9e2BkYXktJHtpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ2VuZHMnKX08L0xhYmVsPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMiBtdC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17ZW5kVHlwZSA9PT0gJ25ldmVyJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwibmV2ZXJcIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCduZXZlcicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtlbmRUeXBlID09PSAnY291bnQnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ2NvdW50Jyl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJhZnRlclwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2FmdGVyJyl9XG4gICAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgICAge2VuZFR5cGUgPT09ICdjb3VudCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17b3B0cz8uY291bnQgfHwgMX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUoeyBjb3VudDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNiB3LTE2IHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnb2NjdXJyZW5jZXMnKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBpZD1cIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tlZD17ZW5kVHlwZSA9PT0gJ3VudGlsJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBzZXRFbmRUeXBlKCd1bnRpbCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwib25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdvbicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtlbmRUeXBlID09PSAndW50aWwnICYmIChcbiAgICAgICAgICAgICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtvcHRzPy51bnRpbH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICB1bnRpbDogZCA/IGRheWpzKGQpLmVuZE9mKCdkYXknKS50b0RhdGUoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtNlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgKX1cbiAgICA8L0NhcmQ+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgY29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG4gICAgdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgIH0pKVxuXG4gIGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gICAgdXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgICBvbkNvbmZpcm0/OiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcbiAgfT4oe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgIGV2ZW50OiBudWxsLFxuICB9KVxuXG4gIGNvbnN0IG9wZW5FZGl0RGlhbG9nID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50LCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG4gICAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudChldmVudCwgdXBkYXRlcywge1xuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW3VwZGF0ZVJlY3VycmluZ0V2ZW50XVxuICApXG5cbiAgY29uc3Qgb3BlbkRlbGV0ZURpYWxvZyA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6ICdkZWxldGUnLFxuICAgICAgICBldmVudCxcbiAgICAgICAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgICAgICBkZWxldGVSZWN1cnJpbmdFdmVudChldmVudCwge1xuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2RlbGV0ZVJlY3VycmluZ0V2ZW50XVxuICApXG5cbiAgY29uc3QgY2xvc2VEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyxcbiAgICAgIGV2ZW50OiBudWxsLFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcbiAgICAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgIGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcbiAgICAgICAgZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuICAgICAgfVxuICAgICAgY2xvc2VEaWFsb2coKVxuICAgICAgLy8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuICAgICAgb25Db21wbGV0ZT8uKClcbiAgICB9LFxuICAgIFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG4gIClcblxuICByZXR1cm4ge1xuICAgIGRpYWxvZ1N0YXRlLFxuICAgIG9wZW5FZGl0RGlhbG9nLFxuICAgIG9wZW5EZWxldGVEaWFsb2csXG4gICAgY2xvc2VEaWFsb2csXG4gICAgaGFuZGxlQ29uZmlybSxcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG5jb25zdCBDUkxGID0gJ1xcclxcbidcblxuY29uc3QgVVRDX1ZUSU1FWk9ORSA9IFtcbiAgJ0JFR0lOOlZUSU1FWk9ORScsXG4gICdUWklEOlVUQycsXG4gICdCRUdJTjpTVEFOREFSRCcsXG4gICdEVFNUQVJUOjE5NzAwMTAxVDAwMDAwMCcsXG4gICdUWk5BTUU6VVRDJyxcbiAgJ1RaT0ZGU0VURlJPTTorMDAwMCcsXG4gICdUWk9GRlNFVFRPOiswMDAwJyxcbiAgJ0VORDpTVEFOREFSRCcsXG4gICdFTkQ6VlRJTUVaT05FJyxcbl0uam9pbihDUkxGKVxuXG5jb25zdCBlc2NhcGVUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKVxuICAgIC5yZXBsYWNlQWxsKCc7JywgJ1xcXFw7JylcbiAgICAucmVwbGFjZUFsbCgnLCcsICdcXFxcLCcpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpXG4gICAgLnJlcGxhY2VBbGwoJ1xccicsICcnKVxufVxuXG5jb25zdCBmb3JtYXREYXRlID0gKGRhdGU6IGRheWpzLkRheWpzLCBpc0FsbERheSA9IGZhbHNlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGlzQWxsRGF5XG4gICAgPyBkYXRlLmZvcm1hdCgnWVlZWU1NREQnKVxuICAgIDogZGF0ZS51dGMoKS5mb3JtYXQoJ1lZWVlNTUREW1RdSEhtbXNzW1pdJylcbn1cblxuY29uc3QgZ2V0VUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG59XG5cbmNvbnN0IGZvcm1hdFJSdWxlID0gKHJydWxlT3B0aW9uczogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcnJ1bGVTdHJpbmcgPSBuZXcgUlJ1bGUoXG4gICAgICBycnVsZU9wdGlvbnMgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBSUnVsZT5bMF1cbiAgICApLnRvU3RyaW5nKClcbiAgICByZXR1cm4gKFxuICAgICAgcnJ1bGVTdHJpbmcuc3BsaXQoJ1xcbicpLmZpbmQoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aCgnUlJVTEU6JykpIHx8ICcnXG4gICAgKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG5jb25zdCBjb252ZXJ0RXZlbnRUb1ZFdmVudCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG4gIGNvbnN0IGRhdGVQYXJhbSA9IGV2ZW50LmFsbERheSA/ICc7VkFMVUU9REFURScgOiAnJ1xuICBjb25zdCBycnVsZSA9IGV2ZW50LnJydWxlID8gZm9ybWF0UlJ1bGUoZXZlbnQucnJ1bGUpIDogJydcblxuICBjb25zdCBleGRhdGVzID0gZXZlbnQuZXhkYXRlcz8ubGVuZ3RoXG4gICAgPyBldmVudC5leGRhdGVzLm1hcCgoZCkgPT4gZm9ybWF0RGF0ZShkYXlqcyhkKSwgZXZlbnQuYWxsRGF5KSkuam9pbignLCcpXG4gICAgOiBudWxsXG5cbiAgY29uc3QgcmVjdXJyZW5jZUlkID0gZXZlbnQucmVjdXJyZW5jZUlkXG4gICAgPyBmb3JtYXREYXRlKGRheWpzKGV2ZW50LnJlY3VycmVuY2VJZCksIGV2ZW50LmFsbERheSlcbiAgICA6IG51bGxcblxuICBjb25zdCBsaW5lcyA9IFtcbiAgICAnQkVHSU46VkVWRU5UJyxcbiAgICBgVUlEOiR7Z2V0VUlEKGV2ZW50KX1gLFxuICAgIGBEVFNUQVJUJHtkYXRlUGFyYW19OiR7Zm9ybWF0RGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KX1gLFxuICAgIGBEVEVORCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuZW5kLCBldmVudC5hbGxEYXkpfWAsXG4gICAgYFNVTU1BUlk6JHtlc2NhcGVUZXh0KGV2ZW50LnRpdGxlKX1gLFxuICAgIGV2ZW50LmRlc2NyaXB0aW9uICYmIGBERVNDUklQVElPTjoke2VzY2FwZVRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWAsXG4gICAgZXZlbnQubG9jYXRpb24gJiYgYExPQ0FUSU9OOiR7ZXNjYXBlVGV4dChldmVudC5sb2NhdGlvbil9YCxcbiAgICBycnVsZSxcbiAgICBleGRhdGVzICYmIGBFWERBVEU6JHtleGRhdGVzfWAsXG4gICAgcmVjdXJyZW5jZUlkICYmIGBSRUNVUlJFTkNFLUlEOiR7cmVjdXJyZW5jZUlkfWAsXG4gICAgYERUU1RBTVA6JHt0aW1lc3RhbXB9YCxcbiAgICBgQ1JFQVRFRDoke3RpbWVzdGFtcH1gLFxuICAgIGBMQVNULU1PRElGSUVEOiR7dGltZXN0YW1wfWAsXG4gICAgJ1NUQVRVUzpDT05GSVJNRUQnLFxuICAgICdTRVFVRU5DRTowJyxcbiAgICAnVFJBTlNQOk9QQVFVRScsXG4gICAgJ0VORDpWRVZFTlQnLFxuICBdXG5cbiAgcmV0dXJuIGxpbmVzLmZpbHRlcihCb29sZWFuKS5qb2luKENSTEYpXG59XG5cbmNvbnN0IGZpbHRlckV2ZW50cyA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gIGNvbnN0IHNlZW5VSURzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICByZXR1cm4gZXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IHtcbiAgICBjb25zdCB1aWQgPSBnZXRVSUQoZXZlbnQpXG4gICAgY29uc3QgaXNCYXNlUmVjdXJyaW5nID0gZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZFxuICAgIGNvbnN0IGlzTW9kaWZpZWRJbnN0YW5jZSA9IGV2ZW50LnJlY3VycmVuY2VJZCAmJiAhZXZlbnQucnJ1bGVcblxuICAgIGlmIChpc0Jhc2VSZWN1cnJpbmcpIHtcbiAgICAgIHNlZW5VSURzLmFkZCh1aWQpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaXNNb2RpZmllZEluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQgJiYgIXNlZW5VSURzLmhhcyh1aWQpXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG5hbWUgPSBlc2NhcGVUZXh0KGNhbGVuZGFyTmFtZSlcbiAgY29uc3QgdmV2ZW50U3RyaW5ncyA9IGZpbHRlckV2ZW50cyhldmVudHMpLm1hcChjb252ZXJ0RXZlbnRUb1ZFdmVudClcblxuICByZXR1cm4gW1xuICAgICdCRUdJTjpWQ0FMRU5EQVInLFxuICAgICdWRVJTSU9OOjIuMCcsXG4gICAgJ1BST0RJRDotLy9pbGFteS8vaWxhbXkgQ2FsZW5kYXIvL0VOJyxcbiAgICAnQ0FMU0NBTEU6R1JFR09SSUFOJyxcbiAgICAnTUVUSE9EOlBVQkxJU0gnLFxuICAgIGBYLVdSLUNBTE5BTUU6JHtuYW1lfWAsXG4gICAgYFgtV1ItQ0FMREVTQzpFeHBvcnRlZCBmcm9tICR7bmFtZX1gLFxuICAgIFVUQ19WVElNRVpPTkUsXG4gICAgLi4udmV2ZW50U3RyaW5ncyxcbiAgICAnRU5EOlZDQUxFTkRBUicsXG4gIF0uam9pbihDUkxGKVxufVxuXG5leHBvcnQgY29uc3QgZG93bmxvYWRJQ2FsZW5kYXIgPSAoXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuICBmaWxlbmFtZSA9ICdjYWxlbmRhci5pY3MnLFxuICBjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiB2b2lkID0+IHtcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtleHBvcnRUb0lDYWxlbmRhcihldmVudHMsIGNhbGVuZGFyTmFtZSldLCB7XG4gICAgdHlwZTogJ3RleHQvY2FsZW5kYXI7Y2hhcnNldD11dGYtOCcsXG4gIH0pXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gZmlsZW5hbWUuZW5kc1dpdGgoJy5pY3MnKVxuICAgID8gZmlsZW5hbWVcbiAgICA6IGAke2ZpbGVuYW1lfS5pY3NgXG5cbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICBsaW5rLmhyZWYgPSB1cmxcbiAgbGluay5kb3dubG9hZCA9IG5vcm1hbGl6ZWRGaWxlbmFtZVxuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kKGxpbmspXG4gIGxpbmsuY2xpY2soKVxuICBsaW5rLnJlbW92ZSgpXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBQb3BvdmVyLFxuICBQb3BvdmVyQ29udGVudCxcbiAgUG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IGRvd25sb2FkSUNhbGVuZGFyIH0gZnJvbSAnQC9saWIvdXRpbHMvZXhwb3J0LWljYWwnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYidcblxuaW50ZXJmYWNlIEhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lID0gJycgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgdmlldyxcbiAgICBzZXRWaWV3LFxuICAgIG5leHRQZXJpb2QsXG4gICAgcHJldlBlcmlvZCxcbiAgICB0b2RheSxcbiAgICBvcGVuRXZlbnRGb3JtLFxuICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgcmF3RXZlbnRzLFxuICAgIHQsXG4gIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuICAgIHZpZXc6IGN0eC52aWV3LFxuICAgIHNldFZpZXc6IGN0eC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGN0eC5uZXh0UGVyaW9kLFxuICAgIHByZXZQZXJpb2Q6IGN0eC5wcmV2UGVyaW9kLFxuICAgIHRvZGF5OiBjdHgudG9kYXksXG4gICAgb3BlbkV2ZW50Rm9ybTogY3R4Lm9wZW5FdmVudEZvcm0sXG4gICAgaGVhZGVyQ29tcG9uZW50OiBjdHguaGVhZGVyQ29tcG9uZW50LFxuICAgIGhlYWRlckNsYXNzTmFtZTogY3R4LmhlYWRlckNsYXNzTmFtZSxcbiAgICByYXdFdmVudHM6IGN0eC5yYXdFdmVudHMsXG4gICAgdDogY3R4LnQsXG4gIH0pKVxuXG4gIGNvbnN0IFttb2JpbGVNZW51T3Blbiwgc2V0TW9iaWxlTWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgY2xvc2VNb2JpbGVNZW51ID0gKCkgPT4gc2V0TW9iaWxlTWVudU9wZW4oZmFsc2UpXG5cbiAgY29uc3QgaGFuZGxlRXhwb3J0ID0gKCkgPT4ge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gYGlsYW15LWNhbGVuZGFyLSR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF19Lmljc2BcbiAgICBkb3dubG9hZElDYWxlbmRhcihyYXdFdmVudHMsIGZpbGVuYW1lLCAnaWxhbXkgQ2FsZW5kYXInKVxuICAgIGNsb3NlTW9iaWxlTWVudSgpXG4gIH1cblxuICBjb25zdCBOZXdFdmVudEJ1dHRvbiA9ICgpID0+IChcbiAgICA8QnV0dG9uXG4gICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuRXZlbnRGb3JtKCl9XG4gICAgICB2YXJpYW50PVwiZGVmYXVsdFwiXG4gICAgICBzaXplPVwic21cIlxuICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgID5cbiAgICAgIDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGw6aW5saW5lXCI+e3QoJ25ldycpfTwvc3Bhbj5cbiAgICA8L0J1dHRvbj5cbiAgKVxuXG4gIGNvbnN0IEV4cG9ydEJ1dHRvbiA9ICh7IGZ1bGxXaWR0aCA9IGZhbHNlIH06IHsgZnVsbFdpZHRoPzogYm9vbGVhbiB9KSA9PiAoXG4gICAgPEJ1dHRvblxuICAgICAgb25DbGljaz17aGFuZGxlRXhwb3J0fVxuICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgc2l6ZT1cInNtXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cbiAgICA+XG4gICAgICA8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICB7ZnVsbFdpZHRoID8gKFxuICAgICAgICBgJHt0KCdleHBvcnQnKX0gQ2FsZW5kYXIgKC5pY3MpYFxuICAgICAgKSA6IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuIEA0eGwvYmFzZS1oZWFkZXI6aW5saW5lXCI+e3QoJ2V4cG9ydCcpfTwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9CdXR0b24+XG4gIClcblxuICBpZiAoaGVhZGVyQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGhlYWRlckNvbXBvbmVudFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJAY29udGFpbmVyL2Jhc2UtaGVhZGVyIHctZnVsbFwiXG4gICAgICBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLWhlYWRlclwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWInLFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBoZWFkZXJDbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgQDJ4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LXN0YXJ0XCI+XG4gICAgICAgICAgPENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICA8VGl0bGVDb250ZW50IC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1zdGFydCBAeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1jZW50ZXIgZ2FwLTEgQDR4bC9iYXNlLWhlYWRlcjpqdXN0aWZ5LWVuZCBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImhpZGRlbiBAbWQvYmFzZS1oZWFkZXI6ZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMVwiPlxuICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICBjdXJyZW50Vmlldz17dmlld31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3NldFZpZXd9XG4gICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICBvbk5leHQ9e25leHRQZXJpb2R9XG4gICAgICAgICAgICAgIG9uUHJldmlvdXM9e3ByZXZQZXJpb2R9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxOZXdFdmVudEJ1dHRvbiAvPlxuICAgICAgICAgICAgPEV4cG9ydEJ1dHRvbiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBnYXAtMSBAbWQvYmFzZS1oZWFkZXI6aGlkZGVuXCI+XG4gICAgICAgICAgICA8TmV3RXZlbnRCdXR0b24gLz5cbiAgICAgICAgICAgIDxQb3BvdmVyIG9wZW49e21vYmlsZU1lbnVPcGVufSBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufT5cbiAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZVwiIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgICAgPE1lbnUgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBhbGlnbj1cImVuZFwiIGNsYXNzTmFtZT1cInctWzI0MHB4XSBwLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Vmlldz17dmlld31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Vmlldyh2KVxuICAgICAgICAgICAgICAgICAgICAgIGNsb3NlTW9iaWxlTWVudSgpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIG9uVG9kYXk9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0b2RheSgpXG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2VNb2JpbGVNZW51KClcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25OZXh0PXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV4dFBlcmlvZCgpXG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2VNb2JpbGVNZW51KClcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgb25QcmV2aW91cz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHByZXZQZXJpb2QoKVxuICAgICAgICAgICAgICAgICAgICAgIGNsb3NlTW9iaWxlTWVudSgpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJncmlkXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPEV4cG9ydEJ1dHRvbiBmdWxsV2lkdGggLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQge1xuICBQb3BvdmVyLFxuICBQb3BvdmVyQ29udGVudCxcbiAgUG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IENoZXZyb25Eb3duIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcblxuY29uc3QgTU9OVEhfS0VZUyA9IFtcbiAgJ2phbnVhcnknLFxuICAnZmVicnVhcnknLFxuICAnbWFyY2gnLFxuICAnYXByaWwnLFxuICAnbWF5JyxcbiAgJ2p1bmUnLFxuICAnanVseScsXG4gICdhdWd1c3QnLFxuICAnc2VwdGVtYmVyJyxcbiAgJ29jdG9iZXInLFxuICAnbm92ZW1iZXInLFxuICAnZGVjZW1iZXInLFxuXSBhcyBjb25zdFxuXG5jb25zdCBhbmltYXRpb24gPSB7XG4gIGluaXRpYWw6IHsgb3BhY2l0eTogMCwgeTogMTAgfSxcbiAgYW5pbWF0ZTogeyBvcGFjaXR5OiAxLCB5OiAwIH0sXG4gIGV4aXQ6IHsgb3BhY2l0eTogMCwgeTogLTEwIH0sXG59XG5cbmNvbnN0IFRpdGxlQ29udGVudCA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdmlldywgc2V0Q3VycmVudERhdGUsIHQsIGZpcnN0RGF5T2ZXZWVrIH0gPVxuICAgIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjdHgpID0+ICh7XG4gICAgICBjdXJyZW50RGF0ZTogY3R4LmN1cnJlbnREYXRlLFxuICAgICAgdmlldzogY3R4LnZpZXcsXG4gICAgICBzZXRDdXJyZW50RGF0ZTogY3R4LnNldEN1cnJlbnREYXRlLFxuICAgICAgdDogY3R4LnQsXG4gICAgICBmaXJzdERheU9mV2VlazogY3R4LmZpcnN0RGF5T2ZXZWVrLFxuICAgIH0pKVxuXG4gIGNvbnN0IFtvcGVuUG9wb3Zlciwgc2V0T3BlblBvcG92ZXJdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBtb250aHMgPSB1c2VNZW1vKCgpID0+IE1PTlRIX0tFWVMubWFwKChrZXkpID0+IHQoa2V5KSksIFt0XSlcbiAgY29uc3QgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS55ZWFyKClcbiAgY29uc3QgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMSB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA1ICsgaSlcbiAgY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cbiAgY29uc3Qgc2VsZWN0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuICAgIHNldEN1cnJlbnREYXRlKGRhdGUpXG4gICAgc2V0T3BlblBvcG92ZXIobnVsbClcbiAgfVxuXG4gIGNvbnN0IHJlbmRlck1vbnRoQ29udGVudCA9ICgpID0+IChcbiAgICA8PlxuICAgICAge21vbnRocy5tYXAoKG1vbnRoLCBpbmRleCkgPT4gKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAga2V5PXttb250aH1cbiAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICBjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICApfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoY3VycmVudERhdGUubW9udGgoaW5kZXgpKX1cbiAgICAgICAgPlxuICAgICAgICAgIHttb250aH1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICApKX1cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IHJlbmRlclllYXJDb250ZW50ID0gKCkgPT4gKFxuICAgIDw+XG4gICAgICB7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBrZXk9e3llYXJ9XG4gICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgY3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICl9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS55ZWFyKHllYXIpKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt5ZWFyfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICkpfVxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgcmVuZGVyV2Vla0NvbnRlbnQgPSAoKSA9PiAoXG4gICAgPD5cbiAgICAgIHtBcnJheS5mcm9tKHsgbGVuZ3RoOiA3IH0sIChfLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHdlZWtEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMywgJ3dlZWsnKS5hZGQoaSwgJ3dlZWsnKVxuICAgICAgICBjb25zdCBkYXlzID0gZ2V0V2Vla0RheXMod2Vla0RhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuICAgICAgICBjb25zdCBzdGFydCA9IGRheXNbMF1cbiAgICAgICAgY29uc3QgZW5kID0gZGF5c1s2XVxuICAgICAgICBjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG4gICAgICAgIGNvbnN0IGNyb3NzZXNNb250aCA9IHN0YXJ0Lm1vbnRoKCkgIT09IGVuZC5tb250aCgpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e3N0YXJ0LmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgaXNDdXJyZW50V2VlayAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKHN0YXJ0KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPHNwYW4+e2Ake3N0YXJ0LmZvcm1hdCgnTU1NIEQnKX0gLSAke2VuZC5mb3JtYXQoJ0QnKX1gfTwvc3Bhbj5cbiAgICAgICAgICAgICAge2Nyb3NzZXNNb250aCAmJiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWwtMC41IHRleHQteHMgb3BhY2l0eS03MFwiPntgJHtzdGFydC5mb3JtYXQoJ01NTScpfS0ke2VuZC5mb3JtYXQoJ01NTScpfWB9PC9zcGFuPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvPlxuICApXG5cbiAgY29uc3QgcmVuZGVyRGF5Q29udGVudCA9ICgpID0+IHtcbiAgICBjb25zdCBmaXJzdERheSA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKClcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7QXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBmaXJzdERheS5kYXRlKGkgKyAxKVxuICAgICAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9IGRheS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKVxuICAgICAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgIGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShkYXkpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57ZGF5LmZvcm1hdCgnZGRkZCwgTU1NIEQnKX08L3NwYW4+XG4gICAgICAgICAgICAgICAge2lzVG9kYXkgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ3RvZGF5Jyl9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgcG9wb3ZlcnMgPSBbXG4gICAge1xuICAgICAgaWQ6ICdtb250aCcsXG4gICAgICBoaWRkZW46IHZpZXcgPT09ICd5ZWFyJyxcbiAgICAgIHRpdGxlOiBjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKSxcbiAgICAgIHJlbmRlcjogcmVuZGVyTW9udGhDb250ZW50LFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd5ZWFyJyxcbiAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICB0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdZWVlZJyksXG4gICAgICByZW5kZXI6IHJlbmRlclllYXJDb250ZW50LFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICd3ZWVrJyxcbiAgICAgIGhpZGRlbjogdmlldyAhPT0gJ3dlZWsnLFxuICAgICAgdGl0bGU6IGAke3dlZWtEYXlzWzBdLmZvcm1hdCgnTU1NIEQnKX0gLSAke3dlZWtEYXlzWzZdLmZvcm1hdCgnTU1NIEQnKX1gLFxuICAgICAgcmVuZGVyOiByZW5kZXJXZWVrQ29udGVudCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnZGF5JyxcbiAgICAgIGhpZGRlbjogdmlldyAhPT0gJ2RheScsXG4gICAgICB0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyksXG4gICAgICByZW5kZXI6IHJlbmRlckRheUNvbnRlbnQsXG4gICAgfSxcbiAgXVxuXG4gIHJldHVybiBwb3BvdmVyc1xuICAgIC5maWx0ZXIoKHApID0+ICFwLmhpZGRlbilcbiAgICAubWFwKChwb3BvdmVyKSA9PiAoXG4gICAgICA8UG9wb3ZlclxuICAgICAgICBrZXk9e3BvcG92ZXIuaWR9XG4gICAgICAgIG9wZW49e29wZW5Qb3BvdmVyID09PSBwb3BvdmVyLmlkfVxuICAgICAgICBvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuICAgICAgPlxuICAgICAgICA8UG9wb3ZlclRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICBrZXk9e2Ake3BvcG92ZXIuaWR9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9ufVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1tb250aC1kaXNwbGF5XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwb3BvdmVyLnRpdGxlfVxuICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTQwIHAtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICB7cG9wb3Zlci5yZW5kZXIoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICApKVxufVxuXG5leHBvcnQgZGVmYXVsdCBUaXRsZUNvbnRlbnRcbiIsCiAgICAiaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5cbmludGVyZmFjZSBWaWV3Q29udHJvbHNQcm9wcyB7XG4gIGN1cnJlbnRWaWV3OiBWaWV3VHlwZVxuICBvbkNoYW5nZTogKHZpZXc6IFZpZXdUeXBlKSA9PiB2b2lkXG4gIG9uVG9kYXk/OiAoKSA9PiB2b2lkXG4gIG9uTmV4dD86ICgpID0+IHZvaWRcbiAgb25QcmV2aW91cz86ICgpID0+IHZvaWRcbiAgdmFyaWFudD86ICdkZWZhdWx0JyB8ICdncmlkJ1xuICBzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgVmlld0NvbnRyb2xzOiBSZWFjdC5GQzxWaWV3Q29udHJvbHNQcm9wcz4gPSAoe1xuICBjdXJyZW50VmlldyxcbiAgb25DaGFuZ2UsXG4gIHZhcmlhbnQgPSAnZGVmYXVsdCcsXG4gIHNpemUgPSAnc20nLFxuICBjbGFzc05hbWUsXG4gIG9uVG9kYXksXG4gIG9uTmV4dCxcbiAgb25QcmV2aW91cyxcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuICBjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblxuICAvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cbiAgY29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuICAgIHJldHVybiBjbihcbiAgICAgIC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG4gICAgICBpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuICAgICAgLy8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuICAgICAgY3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG4gICAgcmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cblxuICAgICAge1snZGF5JywgJ3dlZWsnLCAnbW9udGgnLCAneWVhciddLm1hcCgodHlwZTogVmlld1R5cGUpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e3R5cGV9XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cbiAgICAgICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQodHlwZSl9XG4gICAgICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3QodHlwZSl9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uVG9kYXl9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIHt0KCd0b2RheScpfVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld0NvbnRyb2xzXG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcblxuY29uc3QgREFZX0hFQURFUl9OQU1FUyA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddXG5jb25zdCBFVkVOVF9ET1RfQ09MT1JTID0gWydiZy1wcmltYXJ5JywgJ2JnLWJsdWUtNTAwJywgJ2JnLWdyZWVuLTUwMCddXG5jb25zdCBEQVlTX0lOX01JTklfQ0FMRU5EQVIgPSA0MlxuXG5jb25zdCBnZXREYXlUb29sdGlwID0gKGV2ZW50Q291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gIGlmIChldmVudENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbiAgY29uc3QgcGx1cmFsID0gZXZlbnRDb3VudCA+IDEgPyAncycgOiAnJ1xuICByZXR1cm4gYCR7ZXZlbnRDb3VudH0gZXZlbnQke3BsdXJhbH1gXG59XG5cbmludGVyZmFjZSBNb250aERhdGEge1xuICBkYXRlOiBkYXlqcy5EYXlqc1xuICBuYW1lOiBzdHJpbmdcbiAgZXZlbnRDb3VudDogbnVtYmVyXG4gIG1vbnRoS2V5OiBzdHJpbmdcbn1cblxuaW50ZXJmYWNlIERheURhdGEge1xuICBkYXRlOiBkYXlqcy5EYXlqc1xuICBkYXlLZXk6IHN0cmluZ1xuICBpc0luQ3VycmVudE1vbnRoOiBib29sZWFuXG4gIGlzVG9kYXk6IGJvb2xlYW5cbiAgaXNTZWxlY3RlZDogYm9vbGVhblxuICBldmVudENvdW50OiBudW1iZXJcbn1cblxuY29uc3QgWWVhclZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHNlbGVjdERhdGUsIGV2ZW50cywgc2V0VmlldywgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCB0IH0gPVxuICAgIHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cbiAgY29uc3QgZ2VuZXJhdGVNb250aHNEYXRhID0gKCk6IE1vbnRoRGF0YVtdID0+IHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTIgfSwgKF8sIG1vbnRoSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1vbnRoRGF0ZSA9IGRheWpzKClcbiAgICAgICAgLnllYXIoY3VycmVudFllYXIpXG4gICAgICAgIC5tb250aChtb250aEluZGV4KVxuICAgICAgICAuc3RhcnRPZignbW9udGgnKVxuICAgICAgY29uc3QgZXZlbnRzSW5Nb250aCA9IGV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChldmVudCkgPT5cbiAgICAgICAgICBldmVudC5zdGFydC55ZWFyKCkgPT09IGN1cnJlbnRZZWFyICYmXG4gICAgICAgICAgZXZlbnQuc3RhcnQubW9udGgoKSA9PT0gbW9udGhJbmRleFxuICAgICAgKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiBtb250aERhdGUsXG4gICAgICAgIG5hbWU6IG1vbnRoRGF0ZS5mb3JtYXQoJ01NTU0nKSxcbiAgICAgICAgZXZlbnRDb3VudDogZXZlbnRzSW5Nb250aC5sZW5ndGgsXG4gICAgICAgIG1vbnRoS2V5OiBtb250aERhdGUuZm9ybWF0KCdNTScpLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBnZW5lcmF0ZURheXNGb3JNb250aCA9IChtb250aERhdGU6IGRheWpzLkRheWpzKTogRGF5RGF0YVtdID0+IHtcbiAgICBjb25zdCBmaXJzdERheU9mQ2FsZW5kYXIgPSBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX0lOX01JTklfQ0FMRU5EQVIgfSwgKF8sIGRheUluZGV4KSA9PiB7XG4gICAgICBjb25zdCBkYXlEYXRlID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChkYXlJbmRleCwgJ2RheScpXG4gICAgICBjb25zdCBkYXlTdGFydCA9IGRheURhdGUuc3RhcnRPZignZGF5JylcbiAgICAgIGNvbnN0IGRheUVuZCA9IGRheURhdGUuZW5kT2YoJ2RheScpXG4gICAgICBjb25zdCBldmVudHNPbkRheSA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiBkYXlEYXRlLFxuICAgICAgICBkYXlLZXk6IGRheURhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyksXG4gICAgICAgIGlzSW5DdXJyZW50TW9udGg6IGRheURhdGUubW9udGgoKSA9PT0gbW9udGhEYXRlLm1vbnRoKCksXG4gICAgICAgIGlzVG9kYXk6IGRheURhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKSxcbiAgICAgICAgaXNTZWxlY3RlZDogZGF5RGF0ZS5pc1NhbWUoY3VycmVudERhdGUsICdkYXknKSxcbiAgICAgICAgZXZlbnRDb3VudDogZXZlbnRzT25EYXkubGVuZ3RoLFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuYXZpZ2F0ZVRvRGF0ZSA9IChcbiAgICBkYXRlOiBkYXlqcy5EYXlqcyxcbiAgICB2aWV3OiAnbW9udGgnIHwgJ2RheScsXG4gICAgZXZlbnQ/OiBSZWFjdC5Nb3VzZUV2ZW50XG4gICkgPT4ge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNlbGVjdERhdGUoZGF0ZSlcbiAgICBzZXRWaWV3KHZpZXcpXG4gIH1cblxuICBjb25zdCBnZXRFdmVudENvdW50TGFiZWwgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgZXZlbnRXb3JkID0gY291bnQgPT09IDEgPyB0KCdldmVudCcpIDogdCgnZXZlbnRzJylcbiAgICByZXR1cm4gYCR7Y291bnR9ICR7ZXZlbnRXb3JkfWBcbiAgfVxuXG4gIGNvbnN0IGdldERheUNsYXNzTmFtZSA9IChkYXk6IERheURhdGEpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGJhc2VDbGFzcyA9XG4gICAgICAncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJ1xuICAgIGNvbnN0IG91dHNpZGVNb250aENsYXNzID0gZGF5LmlzSW5DdXJyZW50TW9udGhcbiAgICAgID8gJydcbiAgICAgIDogJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJ1xuICAgIGNvbnN0IHRvZGF5Q2xhc3MgPSBkYXkuaXNUb2RheVxuICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwnXG4gICAgICA6ICcnXG4gICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9XG4gICAgICBkYXkuaXNTZWxlY3RlZCAmJiAhZGF5LmlzVG9kYXkgPyAnYmctbXV0ZWQgcm91bmRlZC1mdWxsIGZvbnQtYm9sZCcgOiAnJ1xuICAgIGNvbnN0IGhhc0V2ZW50c0NsYXNzID1cbiAgICAgIGRheS5ldmVudENvdW50ID4gMCAmJiAhZGF5LmlzVG9kYXkgJiYgIWRheS5pc1NlbGVjdGVkID8gJ2ZvbnQtbWVkaXVtJyA6ICcnXG5cbiAgICByZXR1cm4gY24oXG4gICAgICBiYXNlQ2xhc3MsXG4gICAgICBvdXRzaWRlTW9udGhDbGFzcyxcbiAgICAgIHRvZGF5Q2xhc3MsXG4gICAgICBzZWxlY3RlZENsYXNzLFxuICAgICAgaGFzRXZlbnRzQ2xhc3NcbiAgICApXG4gIH1cblxuICBjb25zdCBnZXRFdmVudERvdENsYXNzTmFtZSA9IChjb2xvcjogc3RyaW5nLCBpc1RvZGF5OiBib29sZWFuKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBkb3RDb2xvciA9IGlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6IGNvbG9yXG4gICAgcmV0dXJuIGNuKCdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJywgZG90Q29sb3IpXG4gIH1cblxuICBjb25zdCBtb250aHNEYXRhID0gZ2VuZXJhdGVNb250aHNEYXRhKClcblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCIgY2xhc3NOYW1lPVwiaC1mdWxsXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcbiAgICAgID5cbiAgICAgICAge21vbnRoc0RhdGEubWFwKChtb250aCwgbW9udGhJbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gZ2VuZXJhdGVEYXlzRm9yTW9udGgobW9udGguZGF0ZSlcbiAgICAgICAgICBjb25zdCBhbmltYXRpb25EZWxheSA9IG1vbnRoSW5kZXggKiAwLjA1XG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e21vbnRoLm1vbnRoS2V5fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtJHttb250aC5tb250aEtleX1gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0ZXh0LWxlZnQgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgbW9udGgtJHttb250aEluZGV4fWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5OiBhbmltYXRpb25EZWxheSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGVUb0RhdGUobW9udGguZGF0ZSwgJ21vbnRoJyl9XG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC10aXRsZS0ke21vbnRoLm1vbnRoS2V5fWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1tZWRpdW0gaG92ZXI6dW5kZXJsaW5lIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge21vbnRoLm5hbWV9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAge21vbnRoLmV2ZW50Q291bnQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5tb250aEtleX1gfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsIHB4LTIgcHktMSB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtnZXRFdmVudENvdW50TGFiZWwobW9udGguZXZlbnRDb3VudCl9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1pbmktY2FsZW5kYXItJHttb250aC5tb250aEtleX1gfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLVsxcHhdIHRleHQtWzAuNnJlbV1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0RBWV9IRUFERVJfTkFNRVMubWFwKChkYXlOYW1lLCBoZWFkZXJJbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBrZXk9e2BoZWFkZXItJHtoZWFkZXJJbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2RheU5hbWV9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cblxuICAgICAgICAgICAgICAgIHtkYXlzSW5Nb250aC5tYXAoKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGF5VGVzdElkID0gYHllYXItZGF5LSR7bW9udGguZGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX0tJHtkYXkuZGF5S2V5fWBcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheS5ldmVudENvdW50ID4gMFxuICAgICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZURvdENvdW50ID0gTWF0aC5taW4oZGF5LmV2ZW50Q291bnQsIDMpXG4gICAgICAgICAgICAgICAgICBjb25zdCB2aXNpYmxlRG90Q29sb3JzID0gRVZFTlRfRE9UX0NPTE9SUy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZURvdENvdW50XG4gICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2RheS5kYXlLZXl9XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2RheVRlc3RJZH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtY2VudGVyIGxlYWRpbmctbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2RheS5kYXRlLmRhdGUoKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICB7aGFzRXZlbnRzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGUgYm90dG9tLTAgZmxleCB3LWZ1bGwganVzdGlmeS1jZW50ZXIgc3BhY2UteC1bMXB4XScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5LmlzVG9kYXkgJiYgJ2JvdHRvbS1bMXB4XSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3Zpc2libGVEb3RDb2xvcnMubWFwKChkb3RDb2xvcikgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2RvdENvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheS5pc1RvZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvZGl2PlxuICAgIDwvU2Nyb2xsQXJlYT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBZZWFyVmlld1xuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IFdlZWtWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IERheVZpZXcgZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3J1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgWWVhclZpZXcgZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxULCBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IG5vcm1hbGl6ZUV2ZW50cywgc2FmZURhdGUgfSBmcm9tICdAL2xpYidcbmltcG9ydCB0eXBlIHtcbiAgSWxhbXlDYWxlbmRhclByb3BzLFxuICBJbGFteUNhbGVuZGFyUHJvcEV2ZW50LFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgdmlldyxcbiAgICBpc0V2ZW50Rm9ybU9wZW4sXG4gICAgY2xvc2VFdmVudEZvcm0sXG4gICAgc2VsZWN0ZWRFdmVudCxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgICBkYXlNYXhFdmVudHMsXG4gICAgcmVuZGVyRXZlbnRGb3JtLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB2aWV3TWFwID0ge1xuICAgIG1vbnRoOiA8TW9udGhWaWV3IGtleT1cIm1vbnRoXCIgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9IC8+LFxuICAgIHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG4gICAgZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcbiAgICB5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICB1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuICB9XG5cbiAgY29uc3QgZXZlbnRGb3JtUHJvcHMgPSB7XG4gICAgb3BlbjogaXNFdmVudEZvcm1PcGVuLFxuICAgIG9uQ2xvc2U6IGNsb3NlRXZlbnRGb3JtLFxuICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgb25BZGQ6IGFkZEV2ZW50LFxuICAgIG9uVXBkYXRlOiBoYW5kbGVPblVwZGF0ZSxcbiAgICBvbkRlbGV0ZTogaGFuZGxlT25EZWxldGUsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICA8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cbiAgICAgIHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuICAgICAgPENhbGVuZGFyRG5kQ29udGV4dD5cbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3ZpZXd9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHg6IDIwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeDogLTIwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjEsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmlld01hcFt2aWV3XX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9DYWxlbmRhckRuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cbiAgICAgIHtyZW5kZXJFdmVudEZvcm1cbiAgICAgICAgPyByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG4gICAgICAgIDogaXNFdmVudEZvcm1PcGVuICYmIDxFdmVudEZvcm0gey4uLmV2ZW50Rm9ybVByb3BzfSAvPn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG4gIGV2ZW50cyxcbiAgZmlyc3REYXlPZldlZWsgPSAnc3VuZGF5JyxcbiAgaW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuICBpbml0aWFsRGF0ZSxcbiAgcmVuZGVyRXZlbnQsXG4gIHJlbmRlckV2ZW50Rm9ybSxcbiAgb25FdmVudENsaWNrLFxuICBvbkNlbGxDbGljayxcbiAgb25WaWV3Q2hhbmdlLFxuICBvbkV2ZW50QWRkLFxuICBvbkV2ZW50VXBkYXRlLFxuICBvbkV2ZW50RGVsZXRlLFxuICBvbkRhdGVDaGFuZ2UsXG4gIGxvY2FsZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcbiAgc3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG4gIHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcbiAgaGVhZGVyQ29tcG9uZW50LFxuICBoZWFkZXJDbGFzc05hbWUsXG4gIGJ1c2luZXNzSG91cnMsXG4gIHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG59KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPENhbGVuZGFyUHJvdmlkZXJcbiAgICAgIGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KGV2ZW50cyl9XG4gICAgICBmaXJzdERheU9mV2Vlaz17V0VFS19EQVlTX05VTUJFUl9NQVBbZmlyc3REYXlPZldlZWtdfVxuICAgICAgaW5pdGlhbFZpZXc9e2luaXRpYWxWaWV3fVxuICAgICAgaW5pdGlhbERhdGU9e3NhZmVEYXRlKGluaXRpYWxEYXRlKX1cbiAgICAgIHJlbmRlckV2ZW50PXtyZW5kZXJFdmVudH1cbiAgICAgIHJlbmRlckV2ZW50Rm9ybT17cmVuZGVyRXZlbnRGb3JtfVxuICAgICAgb25FdmVudENsaWNrPXtvbkV2ZW50Q2xpY2t9XG4gICAgICBvbkNlbGxDbGljaz17b25DZWxsQ2xpY2t9XG4gICAgICBvblZpZXdDaGFuZ2U9e29uVmlld0NoYW5nZX1cbiAgICAgIG9uRXZlbnRBZGQ9e29uRXZlbnRBZGR9XG4gICAgICBvbkV2ZW50VXBkYXRlPXtvbkV2ZW50VXBkYXRlfVxuICAgICAgb25FdmVudERlbGV0ZT17b25FdmVudERlbGV0ZX1cbiAgICAgIG9uRGF0ZUNoYW5nZT17b25EYXRlQ2hhbmdlfVxuICAgICAgbG9jYWxlPXtsb2NhbGV9XG4gICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgIHRyYW5zbGF0b3I9e3RyYW5zbGF0b3J9XG4gICAgICB0aW1lem9uZT17dGltZXpvbmV9XG4gICAgICBkaXNhYmxlQ2VsbENsaWNrPXtkaXNhYmxlQ2VsbENsaWNrfVxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2s9e2Rpc2FibGVFdmVudENsaWNrfVxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wPXtkaXNhYmxlRHJhZ0FuZERyb3B9XG4gICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgIHN0aWNreVZpZXdIZWFkZXI9e3N0aWNreVZpZXdIZWFkZXJ9XG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lPXt2aWV3SGVhZGVyQ2xhc3NOYW1lfVxuICAgICAgaGVhZGVyQ29tcG9uZW50PXtoZWFkZXJDb21wb25lbnR9XG4gICAgICBoZWFkZXJDbGFzc05hbWU9e2hlYWRlckNsYXNzTmFtZX1cbiAgICAgIGJ1c2luZXNzSG91cnM9e2J1c2luZXNzSG91cnN9XG4gICAgICB0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuICAgID5cbiAgICAgIDxDYWxlbmRhckNvbnRlbnQgLz5cbiAgICA8L0NhbGVuZGFyUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVjdXJyZW5jZUVkaXREaWFsb2cgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXQtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgaXNSZWN1cnJpbmdFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7XG4gIERyYWdDYW5jZWxFdmVudCxcbiAgRHJhZ0VuZEV2ZW50LFxuICBEcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG4gIERuZENvbnRleHQsXG4gIE1vdXNlU2Vuc29yLFxuICBwb2ludGVyV2l0aGluLFxuICBUb3VjaFNlbnNvcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuICBjb25zdCBhY3RpdmVFdmVudFJlZiA9IHVzZVJlZjxDYWxlbmRhckV2ZW50PihudWxsKVxuICBjb25zdCBkcmFnT3ZlcmxheVJlZiA9IHVzZVJlZjx7XG4gICAgc2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICB9PihudWxsKVxuXG4gIGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG4gICAgdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG4gICAgICB1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICB9KSlcblxuICAvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuICBjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG4gIH0+KHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIHVwZGF0ZXM6IG51bGwsXG4gIH0pXG5cbiAgLy8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuICBjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuICAgIC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuICAgIGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG4gICAgICBkaXN0YW5jZTogMixcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG4gICAgLy8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgIGRlbGF5OiAxMDAsXG4gICAgICB0b2xlcmFuY2U6IDUsXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcbiAgY29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgKSA9PiB7XG4gICAgLy8gVmFsaWRhdGUgaW5wdXRzXG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuICAgICAgLy8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcbiAgICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICBpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuICAgICAgICBzY29wZSxcbiAgICAgICAgZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG4gICAgICB9KVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cbiAgICAvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuICAgIGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG4gICAgICBkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuICAgICAgYWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnRcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gKGV2ZW50OiBEcmFnRW5kRXZlbnQpID0+IHtcbiAgICBjb25zdCB1cGRhdGVkRXZlbnQgPSBnZXRVcGRhdGVkRXZlbnQoZXZlbnQsIGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQpXG4gICAgaWYgKHVwZGF0ZWRFdmVudCkge1xuICAgICAgY29uc3QgeyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9ID0gdXBkYXRlZEV2ZW50XG4gICAgICBwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHVwZGF0ZXMpXG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGFjdGl2ZSBldmVudCByZWZlcmVuY2VcbiAgICBhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnQ2FuY2VsID0gKF9ldmVudDogRHJhZ0NhbmNlbEV2ZW50KSA9PiB7XG4gICAgYWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIC8vIElmIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWQsIGp1c3QgcmV0dXJuIGNoaWxkcmVuIHdpdGhvdXQgRG5kQ29udGV4dFxuICBpZiAoZGlzYWJsZURyYWdBbmREcm9wKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERuZENvbnRleHRcbiAgICAgICAgc2Vuc29ycz17c2Vuc29yc31cbiAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICBvbkRyYWdDYW5jZWw9e2hhbmRsZURyYWdDYW5jZWx9XG4gICAgICAgIGNvbGxpc2lvbkRldGVjdGlvbj17cG9pbnRlcldpdGhpbn1cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RXZlbnREcmFnT3ZlcmxheSByZWY9e2RyYWdPdmVybGF5UmVmfSAvPlxuICAgICAgPC9EbmRDb250ZXh0PlxuXG4gICAgICB7LyogUmVjdXJyaW5nIGV2ZW50IGVkaXQgZGlhbG9nICovfVxuICAgICAgPFJlY3VycmVuY2VFZGl0RGlhbG9nXG4gICAgICAgIGlzT3Blbj17cmVjdXJyaW5nRGlhbG9nLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZX1cbiAgICAgICAgb25Db25maXJtPXtoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm19XG4gICAgICAgIG9wZXJhdGlvblR5cGU9XCJlZGl0XCJcbiAgICAgICAgZXZlbnRUaXRsZT17cmVjdXJyaW5nRGlhbG9nLmV2ZW50Py50aXRsZSB8fCAnJ31cbiAgICAgIC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBEcmFnRW5kRXZlbnQgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmV4cG9ydCBjb25zdCBnZXRVcGRhdGVkRXZlbnQgPSAoXG4gIGV2ZW50OiBEcmFnRW5kRXZlbnQsXG4gIGFjdGl2ZUV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuKSA9PiB7XG4gIGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG4gIGlmICghYWN0aXZlIHx8ICFvdmVyIHx8ICFhY3RpdmVFdmVudCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBpc1RpbWVDZWxsID0gb3Zlci5kYXRhLmN1cnJlbnQ/LnR5cGUgPT09ICd0aW1lLWNlbGwnXG4gIGNvbnN0IHsgcmVzb3VyY2VJZCwgYWxsRGF5IH0gPSBvdmVyLmRhdGEuY3VycmVudCB8fCB7fVxuICBsZXQgbmV3U3RhcnRcblxuICBpZiAoaXNUaW1lQ2VsbCkge1xuICAgIGNvbnN0IHsgZGF0ZSwgaG91ciA9IDAsIG1pbnV0ZSA9IDAgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG5cbiAgICAvLyBDcmVhdGUgbmV3IHN0YXJ0IHRpbWUgYmFzZWQgb24gdGhlIGRyb3AgdGFyZ2V0XG4gICAgbmV3U3RhcnQgPSBkYXlqcyhkYXRlKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyBkYXRlIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG4gICAgbmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuICB9XG5cbiAgY29uc3QgZXZlbnREdXJhdGlvbiA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKGFjdGl2ZUV2ZW50LnN0YXJ0LCAnc2Vjb25kJylcblxuICAvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cbiAgbGV0IG5ld0VuZCA9IG5ld1N0YXJ0LmFkZChldmVudER1cmF0aW9uLCAnc2Vjb25kJylcblxuICBpZiAobmV3RW5kLmlzU2FtZShuZXdFbmQuc3RhcnRPZignZGF5JykpKSB7XG4gICAgLy8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG4gICAgbmV3RW5kID0gbmV3RW5kLnN1YnRyYWN0KDEsICdkYXknKS5lbmRPZignZGF5JylcbiAgfVxuXG4gIC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXMgYW5kIHJlc291cmNlIGlmIGNoYW5nZWRcbiAgY29uc3QgdXBkYXRlcyA9IHtcbiAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgZW5kOiBuZXdFbmQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBhbGxEYXk6IGlzVGltZUNlbGwgPyBmYWxzZSA6IChhbGxEYXkgPz8gYWN0aXZlRXZlbnQuYWxsRGF5KSxcbiAgfVxuICByZXR1cm4geyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9XG59XG4iLAogICAgImltcG9ydCB7IERyYWdPdmVybGF5IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBSZWFjdCwgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgc25hcENlbnRlclRvQ3Vyc29yIH0gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5pbnRlcmZhY2UgRXZlbnREcmFnT3ZlcmxheVByb3BzIHtcbiAgcmVmOiBSZWFjdC5SZWY8eyBzZXRBY3RpdmVFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkIH0+XG59XG5cbmV4cG9ydCBjb25zdCBFdmVudERyYWdPdmVybGF5OiBSZWFjdC5GQzxFdmVudERyYWdPdmVybGF5UHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcbiAgY29uc3QgW2FjdGl2ZUV2ZW50LCBzZXRBY3RpdmVFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50PihudWxsKVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHNldEFjdGl2ZUV2ZW50LFxuICB9KSlcblxuICByZXR1cm4gKFxuICAgIDxEcmFnT3ZlcmxheSBtb2RpZmllcnM9e1tzbmFwQ2VudGVyVG9DdXJzb3JdfT5cbiAgICAgIHthY3RpdmVFdmVudCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcbiAgICAgICAgICAgIGFjdGl2ZUV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuICAgICAgICAgICAgYWN0aXZlRXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHthY3RpdmVFdmVudD8udGl0bGV9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L0RyYWdPdmVybGF5PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBCdXNpbmVzc0hvdXJzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IENlbGxDbGlja0luZm8gfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG4gIGluaXRpYWxEYXRlPzogZGF5anMuRGF5anNcbiAgcmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuICBvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuICBvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG4gIG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBsb2NhbGU/OiBzdHJpbmdcbiAgdGltZXpvbmU/OiBzdHJpbmdcbiAgZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cbiAgZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cbiAgZGF5TWF4RXZlbnRzOiBudW1iZXJcbiAgc3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuICBoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcbiAgaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3NcbiAgYnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnNcbiAgcmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3ROb2RlXG4gIC8vIFRyYW5zbGF0aW9uIG9wdGlvbnMgLSBwcm92aWRlIGVpdGhlciB0cmFuc2xhdGlvbnMgb2JqZWN0IE9SIHRyYW5zbGF0b3IgZnVuY3Rpb25cbiAgdHJhbnNsYXRpb25zPzogVHJhbnNsYXRpb25zXG4gIHRyYW5zbGF0b3I/OiBUcmFuc2xhdG9yRnVuY3Rpb25cbiAgdGltZUZvcm1hdD86IFRpbWVGb3JtYXRcbn1cblxuZXhwb3J0IGNvbnN0IENhbGVuZGFyUHJvdmlkZXI6IFJlYWN0LkZDPENhbGVuZGFyUHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgZXZlbnRzID0gW10sXG4gIGZpcnN0RGF5T2ZXZWVrID0gMCxcbiAgaW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuICBpbml0aWFsRGF0ZSxcbiAgcmVuZGVyRXZlbnQsXG4gIG9uRXZlbnRDbGljayxcbiAgb25DZWxsQ2xpY2ssXG4gIG9uVmlld0NoYW5nZSxcbiAgb25FdmVudEFkZCxcbiAgb25FdmVudFVwZGF0ZSxcbiAgb25FdmVudERlbGV0ZSxcbiAgb25EYXRlQ2hhbmdlLFxuICBsb2NhbGUsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbiAgaGVhZGVyQ2xhc3NOYW1lLFxuICBidXNpbmVzc0hvdXJzLFxuICByZW5kZXJFdmVudEZvcm0sXG4gIHRyYW5zbGF0aW9ucyxcbiAgdHJhbnNsYXRvcixcbiAgdGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcbn0pID0+IHtcbiAgLy8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcbiAgY29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG4gICAgZXZlbnRzLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGluaXRpYWxWaWV3LFxuICAgIGluaXRpYWxEYXRlLFxuICAgIGJ1c2luZXNzSG91cnMsXG4gICAgb25FdmVudEFkZCxcbiAgICBvbkV2ZW50VXBkYXRlLFxuICAgIG9uRXZlbnREZWxldGUsXG4gICAgb25EYXRlQ2hhbmdlLFxuICAgIG9uVmlld0NoYW5nZSxcbiAgICBsb2NhbGUsXG4gICAgdGltZXpvbmUsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIHRyYW5zbGF0b3IsXG4gIH0pXG5cbiAgY29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgfSxcbiAgICBbY2FsZW5kYXJFbmdpbmVdXG4gIClcblxuICAvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuICBjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25FdmVudENsaWNrKSB7XG4gICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRFdmVudChldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4ge1xuICAgICAgaWYgKGRpc2FibGVDZWxsQ2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkNlbGxDbGljaykge1xuICAgICAgICBvbkNlbGxDbGljayhpbmZvKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybShpbmZvKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2VsbENsaWNrLCBkaXNhYmxlQ2VsbENsaWNrLCBjYWxlbmRhckVuZ2luZV1cbiAgKVxuXG4gIC8vIENyZWF0ZSB0aGUgY29udGV4dCB2YWx1ZVxuICBjb25zdCBjb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBjdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudERhdGUsXG4gICAgICB2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuICAgICAgZXZlbnRzOiBjYWxlbmRhckVuZ2luZS5ldmVudHMsXG4gICAgICByYXdFdmVudHM6IGNhbGVuZGFyRW5naW5lLnJhd0V2ZW50cyxcbiAgICAgIGN1cnJlbnRMb2NhbGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnRMb2NhbGUsXG4gICAgICBpc0V2ZW50Rm9ybU9wZW46IGNhbGVuZGFyRW5naW5lLmlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRXZlbnQsXG4gICAgICBzZWxlY3RlZERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdGVkRGF0ZSxcbiAgICAgIGZpcnN0RGF5T2ZXZWVrOiBjYWxlbmRhckVuZ2luZS5maXJzdERheU9mV2VlayxcbiAgICAgIHNldEN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5zZXRDdXJyZW50RGF0ZSxcbiAgICAgIHNlbGVjdERhdGU6IGNhbGVuZGFyRW5naW5lLnNlbGVjdERhdGUsXG4gICAgICBzZXRWaWV3OiBjYWxlbmRhckVuZ2luZS5zZXRWaWV3LFxuICAgICAgbmV4dFBlcmlvZDogY2FsZW5kYXJFbmdpbmUubmV4dFBlcmlvZCxcbiAgICAgIHByZXZQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLnByZXZQZXJpb2QsXG4gICAgICB0b2RheTogY2FsZW5kYXJFbmdpbmUudG9kYXksXG4gICAgICBhZGRFdmVudDogY2FsZW5kYXJFbmdpbmUuYWRkRXZlbnQsXG4gICAgICB1cGRhdGVFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlRXZlbnQsXG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBkZWxldGVFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlRXZlbnQsXG4gICAgICBkZWxldGVSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICBvcGVuRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5vcGVuRXZlbnRGb3JtLFxuICAgICAgY2xvc2VFdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLmNsb3NlRXZlbnRGb3JtLFxuICAgICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBjYWxlbmRhckVuZ2luZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcbiAgICAgIHJlbmRlckV2ZW50LFxuICAgICAgb25FdmVudENsaWNrOiBoYW5kbGVFdmVudENsaWNrLFxuICAgICAgb25DZWxsQ2xpY2s6IGhhbmRsZURhdGVDbGljayxcbiAgICAgIGxvY2FsZSxcbiAgICAgIHRpbWV6b25lLFxuICAgICAgZGlzYWJsZUNlbGxDbGljayxcbiAgICAgIGRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wLFxuICAgICAgZGF5TWF4RXZlbnRzLFxuICAgICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICBoZWFkZXJDb21wb25lbnQsXG4gICAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgICBidXNpbmVzc0hvdXJzLFxuICAgICAgcmVuZGVyRXZlbnRGb3JtLFxuICAgICAgdDogY2FsZW5kYXJFbmdpbmUudCxcbiAgICAgIHRpbWVGb3JtYXQsXG4gICAgfSksXG4gICAgW1xuICAgICAgY2FsZW5kYXJFbmdpbmUsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICB0aW1lem9uZSxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRXZlbnRDbGljayxcbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRheU1heEV2ZW50cyxcbiAgICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgaGVhZGVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgYnVzaW5lc3NIb3VycyxcbiAgICAgIHJlbmRlckV2ZW50Rm9ybSxcbiAgICAgIHRpbWVGb3JtYXQsXG4gICAgXVxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8Q2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2VuZXJhdGUgY2FsZW5kYXIgZ3JpZCAtIGRheXMgb2YgdGhlIG1vbnRoXG4gIGNvbnN0IG1vbnRoRGF5cyA9IHVzZU1lbW88ZGF5anMuRGF5anNbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiBkYXlzSW5Nb250aCB9LCAoXywgaSkgPT5cbiAgICAgIGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJykuYWRkKGksICdkYXknKVxuICAgIClcbiAgfSwgW2N1cnJlbnREYXRlXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGwgYm9yZGVyXCI+XG4gICAgICA8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17bW9udGhEYXlzfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZmxleCBoLTEyIHctZml0JyxcbiAgICAgICAgICAgIHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cbiAgICAgICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWVcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTQwIGJvcmRlci1iIGJvcmRlci1yIGZsZXgtc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHttb250aERheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7a2V5fS1tb3Rpb25gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3tcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICAgIGVhc2U6ICdlYXNlSW5PdXQnLFxuICAgICAgICAgICAgICAgICAgICBkZWxheTogaW5kZXggKiAwLjA1LFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctMjAgYm9yZGVyLWIgYm9yZGVyLXIgZmxleC1zaHJpbmstMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBmbGV4LWNvbFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIGZvbnQtbWVkaXVtXCI+e2RheS5mb3JtYXQoJ0QnKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAge2RheS5mb3JtYXQoJ2RkZCcpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1Jlc291cmNlRXZlbnRHcmlkPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRQb3NpdGlvbmVkRXZlbnRzIH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHNQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbiAgZ3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuICByZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZFJlc291cmNlV2Vla0V2ZW50cyA9ICh7XG4gIGRheXMsXG4gIGdyaWRUeXBlID0gJ2RheScsXG4gIHJlc291cmNlSWQsXG59OiBVc2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHNQcm9wcykgPT4ge1xuICBjb25zdCB7IGdldEV2ZW50c0ZvclJlc291cmNlLCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGRheU1heEV2ZW50cyB9ID1cbiAgICB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgc3RhcnREYXRlID0gZGF5c1swXS5zdGFydE9mKCdkYXknKVxuICBjb25zdCBlbmREYXRlID0gZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG4gIGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcbiAgY29uc3QgdmlzaWJsZUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShzdGFydERhdGUsIGVuZERhdGUpXG5cbiAgcmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuICAgIGRheXMsXG4gICAgZXZlbnRzOiByZXNvdXJjZUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PlxuICAgICAgdmlzaWJsZUV2ZW50cy5zb21lKChlKSA9PiBlLmlkID09PSBldmVudC5pZClcbiAgICApLFxuICAgIGRheU1heEV2ZW50cyxcbiAgICBkYXlOdW1iZXJIZWlnaHQ6IDAsXG4gICAgZ3JpZFR5cGUsXG4gIH0pXG59XG4iLAogICAgImltcG9ydCB7IEVWRU5UX0JBUl9IRUlHSFQgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFJlc291cmNlV2Vla0V2ZW50cyB9IGZyb20gJy4uL2hvb2tzL3VzZVByb2Nlc3NlZFJlc291cmNlV2Vla0V2ZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5cbmludGVyZmFjZSBXZWVrRXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbiAgZ3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuICByZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFdlZWtFdmVudHNMYXllclByb3BzPiA9ICh7XG4gIGRheXMsXG4gIGdyaWRUeXBlID0gJ2RheScsXG4gIHJlc291cmNlSWQsXG59KSA9PiB7XG4gIGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFJlc291cmNlV2Vla0V2ZW50cyh7XG4gICAgZGF5cyxcbiAgICBncmlkVHlwZSxcbiAgICByZXNvdXJjZUlkLFxuICB9KVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHBvaW50ZXItZXZlbnRzLW5vbmUgei0xMCBvdmVyZmxvdy1jbGlwXCI+XG4gICAgICB7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGV2ZW50S2V5ID0gYCR7cmVzb3VyY2VJZH0tZXZlbnQtJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQudG9JU09TdHJpbmcoKX1gXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1ldmVudC1sYXllci1ldmVudC0ke2V2ZW50LmlkfWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgIGVsZW1lbnRJZD17ZXZlbnRLZXl9XG4gICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB0eXBlIHsgU2VsZWN0ZWREYXlFdmVudHMgfSBmcm9tICcuL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJy4vZHJvcHBhYmxlLWNlbGwnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5cbmludGVyZmFjZSBHcmlkUHJvcHMge1xuICBpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcbiAgZGF5OiBkYXlqcy5EYXlqc1xuICBkYXlNYXhFdmVudHM/OiBudW1iZXJcbiAgY2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcbiAgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlciAvLyBPcHRpb25hbCByZXNvdXJjZSBJRCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgZGF5IGNlbGxzXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcbn1cblxuZXhwb3J0IGNvbnN0IEdyaWRDZWxsOiBSZWFjdC5GQzxHcmlkUHJvcHM+ID0gKHtcbiAgaW5kZXgsXG4gIGRheSxcbiAgY2xhc3NOYW1lID0gJycsXG4gIHJlc291cmNlSWQsXG4gIGdyaWRUeXBlID0gJ2RheScsXG59KSA9PiB7XG4gIGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+KG51bGwpXG4gIGNvbnN0IHtcbiAgICBkYXlNYXhFdmVudHMgPSAwLFxuICAgIGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcbiAgICBjdXJyZW50RGF0ZSxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICB0LFxuICAgIGdldEV2ZW50c0ZvclJlc291cmNlLFxuICAgIGJ1c2luZXNzSG91cnMsXG4gIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG4gICAgZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG4gICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgY3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrOiBzdGF0ZS5maXJzdERheU9mV2VlayxcbiAgICB0OiBzdGF0ZS50LFxuICAgIGdldEV2ZW50c0ZvclJlc291cmNlOiBzdGF0ZS5nZXRFdmVudHNGb3JSZXNvdXJjZSxcbiAgICBidXNpbmVzc0hvdXJzOiBzdGF0ZS5idXNpbmVzc0hvdXJzLFxuICB9KSlcblxuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlRXZlbnRzID0gcmVzb3VyY2VJZCA/IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpIDogW11cbiAgICBjb25zdCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKGdyaWRUeXBlKSxcbiAgICAgIGRheS5lbmRPZihncmlkVHlwZSlcbiAgICApXG5cbiAgICBpZiAocmVzb3VyY2VFdmVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cbiAgICAgICAgcmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRvZGF5RXZlbnRzXG4gIH0sIFtkYXksIHJlc291cmNlSWQsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UsIGdyaWRUeXBlXSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgLy8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG4gIGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuICAgICAgZGF5LFxuICAgICAgZXZlbnRzLFxuICAgIH0pXG4gICAgYWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuICB9XG5cbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgY29uc3QgaXNCdXNpbmVzcyA9IGlzQnVzaW5lc3NIb3VyKHtcbiAgICBkYXRlOiBkYXksXG4gICAgaG91cjogZ3JpZFR5cGUgPT09ICdob3VyJyA/IGRheS5ob3VyKCkgOiB1bmRlZmluZWQsXG4gICAgYnVzaW5lc3NIb3VycyxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICBpZD17YGRheS1jZWxsLSR7ZGF5LnRvSVNPU3RyaW5nKCl9JHtyZXNvdXJjZUlkID8gYC1yZXNvdXJjZS0ke3Jlc291cmNlSWR9YCA6ICcnfWB9XG4gICAgICAgIHR5cGU9XCJkYXktY2VsbFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX1gfVxuICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgIHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG4gICAgICAgIGRpc2FibGVkPXshaXNCdXNpbmVzc31cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XScsXG4gICAgICAgICAgIWlzQ3VycmVudE1vbnRoICYmICdiZy1zZWNvbmRhcnkgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBpc0xhc3RDb2x1bW4gJiYgJ2JvcmRlci1yLTAnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICB7LyogQWJzb2x1dGVseSBwb3NpdGlvbmVkIG11bHRpLWRheSBiYXJzIChHb29nbGUgQ2FsZW5kYXIgc3R5bGUpICovfVxuXG4gICAgICAgIHsvKiBTaW5nbGUtZGF5IGV2ZW50cyBjb250YWluZXIgcG9zaXRpb25lZCBiZWxvdyBtdWx0aS1kYXkgZXZlbnRzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICB7LyogUmVuZGVyIHBsYWNlaG9sZGVycyBmb3IgZXZlbnRzIHRoYXQgb2NjdXIgdG9kYXkgc28gdGhhdCB0aGUgY2VsbCBoZWlnaHQgaXMgYWNjb3JkaW5nIHRvIGRheU1heEV2ZW50cy4gKi99XG4gICAgICAgICAge3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtgZW1wdHktJHtyb3dJbmRleH1gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVsyMHB4XSB3LWZ1bGxcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cblxuICAgICAgICAgIHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuICAgICAgICAgIHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgbXQtMVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGFnLW92ZXItcm9sZVxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgK3toaWRkZW5FdmVudHNDb3VudH0ge3QoJ21vcmUnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IFJlc291cmNlRXZlbnRzTGF5ZXIgfSBmcm9tICcuL3Jlc291cmNlLWV2ZW50cy1sYXllcidcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2dyaWQtY2VsbCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWInXG5cbmludGVyZmFjZSBSZXNvdXJjZUV2ZW50R3JpZFByb3BzIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGRheXMgdG8gZGlzcGxheSBpbiB0aGUgZ3JpZFxuICAgKi9cbiAgZGF5czogZGF5anMuRGF5anNbXVxuICAvKiogVGhlIHR5cGUgb2YgZ3JpZCB0byBkaXNwbGF5IC0gJ2RheScgZm9yIGRheSB2aWV3LCAnaG91cicgZm9yIHdlZWsgdmlld1xuICAgKiAoYWZmZWN0cyBldmVudCBwb3NpdGlvbmluZyBsb2dpYylcbiAgICovXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbiAgLyoqXG4gICAqIENoaWxkcmVuIHdpbGwgYmUgcmVuZGVyZWQgYXMgaGVhZGVycyBhYm92ZSB0aGUgZ3JpZFxuICAgKiAoZS5nLiwgZm9yIGRheSBuYW1lcyBpbiBtb250aCB2aWV3KVxuICAgKi9cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG4gIGRheXMsXG4gIGdyaWRUeXBlID0gJ2RheScsXG4gIGNoaWxkcmVuLFxufSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRWaXNpYmxlUmVzb3VyY2VzLCBkYXlNYXhFdmVudHMsIHJlbmRlclJlc291cmNlIH0gPVxuICAgIHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cbiAgY29uc3Qgcm93cyA9IHZpc2libGVSZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcbiAgICBpZDogcmVzb3VyY2UuaWQsXG4gICAgdGl0bGU6IHJlc291cmNlLnRpdGxlLFxuICAgIHJlc291cmNlOiByZXNvdXJjZSxcbiAgICBjZWxsczogZGF5cy5tYXAoKGRheSkgPT4gKHtcbiAgICAgIGxhYmVsOiBkYXkuZm9ybWF0KCdEJyksXG4gICAgICB2YWx1ZTogZGF5LFxuICAgICAgaWQ6IGRheS50b0lTT1N0cmluZygpLFxuICAgIH0pKSxcbiAgfSkpXG5cbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVxuICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtc2Nyb2xsLWFyZWFcIlxuICAgICAgdmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cbiAgICA+XG4gICAgICB7LyogaGVhZGVyIHJvdyAqL31cbiAgICAgIHtjaGlsZHJlbn1cblxuICAgICAgey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIGgtW2NhbGMoMTAwJS0zcmVtKV0gdy1maXRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NJyl9XG4gICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGZsZXggZmxleC1jb2xcIlxuICAgICAgICA+XG4gICAgICAgICAge3Jvd3MubWFwKChyb3cpID0+IChcbiAgICAgICAgICAgIDxkaXYga2V5PXtyb3cuaWR9IGNsYXNzTmFtZT1cImZsZXggZmxleC0xIHJlbGF0aXZlIG1pbi1oLVs2MHB4XSBcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAndy00MCBib3JkZXItYiBib3JkZXItciBwLTIgZmxleCBmbGV4LXNocmluay0wIHN0aWNreSBsZWZ0LTAgei0yMCcsXG4gICAgICAgICAgICAgICAgICByb3cucmVzb3VyY2UuY29sb3IgfHwgJycsXG4gICAgICAgICAgICAgICAgICByb3cucmVzb3VyY2UuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1iYWNrZ3JvdW5kJ1xuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiByb3cucmVzb3VyY2UuY29sb3IsXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJvdy5yZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtyZW5kZXJSZXNvdXJjZSA/IChcbiAgICAgICAgICAgICAgICAgIHJlbmRlclJlc291cmNlKHJvdy5yZXNvdXJjZSlcbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJicmVhay13b3JkcyB0ZXh0LXNtXCI+e3Jvdy50aXRsZX08L2Rpdj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtMSBmbGV4XCI+XG4gICAgICAgICAgICAgICAge3Jvdy5jZWxscy5tYXAoKGNlbGwpID0+IChcbiAgICAgICAgICAgICAgICAgIDxHcmlkQ2VsbFxuICAgICAgICAgICAgICAgICAgICBrZXk9e2NlbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgIGluZGV4PXtjZWxsLnZhbHVlLmRheSgpfVxuICAgICAgICAgICAgICAgICAgICBkYXk9e2NlbGwudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlSWQ9e3Jvdy5pZH1cbiAgICAgICAgICAgICAgICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICAgICAgICAgICAgICAgIGdyaWRUeXBlPXtncmlkVHlwZX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYm9yZGVyLXIgYm9yZGVyLWIgdy0yMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkpfVxuXG4gICAgICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciBwb3NpdGlvbmVkIGFic29sdXRlbHkgb3ZlciB0aGUgcmVzb3VyY2Ugcm93ICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTEwIHBvaW50ZXItZXZlbnRzLW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxSZXNvdXJjZUV2ZW50c0xheWVyXG4gICAgICAgICAgICAgICAgICAgIGRheXM9e2RheXN9XG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlSWQ9e3Jvdy5pZH1cbiAgICAgICAgICAgICAgICAgICAgZ3JpZFR5cGU9e2dyaWRUeXBlfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxTY3JvbGxCYXIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz5cbiAgICA8L1Njcm9sbEFyZWE+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudEdyaWQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvcmVzb3VyY2UtZXZlbnQtZ3JpZCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla0hvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgdCxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgY3VycmVudExvY2FsZSxcbiAgICB0aW1lRm9ybWF0LFxuICB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdlbmVyYXRlIHdlZWsgZGF5c1xuICBjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKSxcbiAgICBbY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrXVxuICApXG5cbiAgLy8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG4gIGNvbnN0IHdlZWtIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB3ZWVrRGF5cy5mbGF0TWFwKChkYXkpID0+XG4gICAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaG91cikgPT4gZGF5LmhvdXIoaG91cikubWludXRlKDApKVxuICAgIClcbiAgfSwgW3dlZWtEYXlzXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2wgYm9yZGVyXCI+XG4gICAgICA8UmVzb3VyY2VFdmVudEdyaWQgZGF5cz17d2Vla0hvdXJzfSBncmlkVHlwZT1cImhvdXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZmxleCBoLTI0IHctZml0JyxcbiAgICAgICAgICAgIHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cbiAgICAgICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWVcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTQwIGJvcmRlci1iIGJvcmRlci1yIGZsZXgtc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJvcmRlci1iIGJvcmRlci1yIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIHsvKiBEYXkgaGVhZGVyIHJvdyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG4gICAgICAgICAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtkYXkudG9JU09TdHJpbmcoKX0tZGF5YFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2tleX0tbW90aW9uYH1cbiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZsZXgtc2hyaW5rLTAgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gdy1bY2FsYygyNCp2YXIoLS1zcGFjaW5nKSoyMCldJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVG9kYXkgJiYgJ2JnLWJsdWUtNTAgdGV4dC1ibHVlLTYwMCdcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPntkYXkuZm9ybWF0KCdkZGQnKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2RheS5mb3JtYXQoJ00vRCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIFRpbWUgaGVhZGVyIHJvdyAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG4gICAgICAgICAgICAgIHt3ZWVrSG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNOb3dIb3VyID0gY29sLmlzU2FtZShkYXlqcygpLCAnaG91cicpXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXJgXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7a2V5fS1tb3Rpb25gfVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgcmVzb3VyY2Utd2Vlay10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6ICdlYXNlSW5PdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAndy0yMCBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIGZsZXgtc2hyaW5rLTAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZXNvdXJjZUV2ZW50R3JpZD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheUhvcml6b250YWw6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7XG4gICAgY3VycmVudERhdGUsXG4gICAgdCxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgY3VycmVudExvY2FsZSxcbiAgICB0aW1lRm9ybWF0LFxuICB9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuICBjb25zdCBkYXlIb3VycyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaG91cikgPT5cbiAgICAgIGN1cnJlbnREYXRlLmhvdXIoaG91cikubWludXRlKDApXG4gICAgKVxuICB9LCBbY3VycmVudERhdGVdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbCBib3JkZXJcIj5cbiAgICAgIDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXtkYXlIb3Vyc30gZ3JpZFR5cGU9XCJob3VyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaC0xMiB3LWZpdCcsXG4gICAgICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG4gICAgICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBmbGV4LXNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBib3JkZXItYiBib3JkZXItciBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICB7LyogVGltZSBoZWFkZXIgcm93ICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTIgYm9yZGVyLWJcIj5cbiAgICAgICAgICAgICAge2RheUhvdXJzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGByZXNvdXJjZS1kYXktaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9YFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2tleX0tbW90aW9uYH1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHJlc291cmNlLWRheS10aW1lLWxhYmVsLSR7Y29sLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6ICdlYXNlSW5PdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAndy0yMCBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIGZsZXgtc2hyaW5rLTAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZXNvdXJjZUV2ZW50R3JpZD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZWxlY3RlZEV2ZW50LFxuICAgIGFkZEV2ZW50LFxuICAgIHVwZGF0ZUV2ZW50LFxuICAgIGRlbGV0ZUV2ZW50LFxuICAgIHJlbmRlckV2ZW50Rm9ybSxcbiAgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB2aWV3TWFwID0ge1xuICAgIG1vbnRoOiA8UmVzb3VyY2VNb250aFZpZXcga2V5PVwibW9udGhcIiAvPixcbiAgICB3ZWVrOiA8UmVzb3VyY2VXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG4gICAgZGF5OiA8UmVzb3VyY2VEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICB1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuICB9XG5cbiAgY29uc3QgZXZlbnRGb3JtUHJvcHMgPSB7XG4gICAgb3BlbjogaXNFdmVudEZvcm1PcGVuLFxuICAgIG9uQ2xvc2U6IGNsb3NlRXZlbnRGb3JtLFxuICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgb25BZGQ6IGFkZEV2ZW50LFxuICAgIG9uVXBkYXRlOiBoYW5kbGVPblVwZGF0ZSxcbiAgICBvbkRlbGV0ZTogaGFuZGxlT25EZWxldGUsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICA8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cbiAgICAgIHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuICAgICAgPENhbGVuZGFyRG5kQ29udGV4dD5cbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3ZpZXd9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHg6IDIwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeDogLTIwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjEsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmlld01hcFt2aWV3XX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9DYWxlbmRhckRuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cbiAgICAgIHtyZW5kZXJFdmVudEZvcm1cbiAgICAgICAgPyByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG4gICAgICAgIDogaXNFdmVudEZvcm1PcGVuICYmIDxFdmVudEZvcm0gey4uLmV2ZW50Rm9ybVByb3BzfSAvPn1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQm9keSB9IGZyb20gJy4vcmVzb3VyY2UtY2FsZW5kYXItYm9keSdcbmltcG9ydCB0eXBlIHtcbiAgSWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHMsXG4gIElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsIFdFRUtfREFZU19OVU1CRVJfTUFQIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgc2FmZURhdGUsIG5vcm1hbGl6ZUV2ZW50cyB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgSWxhbXlSZXNvdXJjZUNhbGVuZGFyOiBSZWFjdC5GQzxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcz4gPSAoe1xuICBldmVudHMgPSBbXSxcbiAgcmVzb3VyY2VzID0gW10sXG4gIGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG4gIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgaW5pdGlhbERhdGUsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuICBkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuICBzdGlja3lWaWV3SGVhZGVyLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxuICByZW5kZXJSZXNvdXJjZSxcbiAgcmVuZGVyRXZlbnRGb3JtLFxuICBidXNpbmVzc0hvdXJzLFxuICB0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJcbiAgICAgIGV2ZW50cz17bm9ybWFsaXplRXZlbnRzPElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BFdmVudCwgQ2FsZW5kYXJFdmVudD4oXG4gICAgICAgIGV2ZW50c1xuICAgICAgKX1cbiAgICAgIHJlc291cmNlcz17cmVzb3VyY2VzfVxuICAgICAgZmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cbiAgICAgIGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cbiAgICAgIGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG4gICAgICByZW5kZXJFdmVudD17cmVuZGVyRXZlbnR9XG4gICAgICByZW5kZXJSZXNvdXJjZT17cmVuZGVyUmVzb3VyY2V9XG4gICAgICBvbkV2ZW50Q2xpY2s9e29uRXZlbnRDbGlja31cbiAgICAgIG9uQ2VsbENsaWNrPXtvbkNlbGxDbGlja31cbiAgICAgIG9uVmlld0NoYW5nZT17b25WaWV3Q2hhbmdlfVxuICAgICAgb25FdmVudEFkZD17b25FdmVudEFkZH1cbiAgICAgIG9uRXZlbnRVcGRhdGU9e29uRXZlbnRVcGRhdGV9XG4gICAgICBvbkV2ZW50RGVsZXRlPXtvbkV2ZW50RGVsZXRlfVxuICAgICAgb25EYXRlQ2hhbmdlPXtvbkRhdGVDaGFuZ2V9XG4gICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgIHRpbWV6b25lPXt0aW1lem9uZX1cbiAgICAgIGRpc2FibGVDZWxsQ2xpY2s9e2Rpc2FibGVDZWxsQ2xpY2t9XG4gICAgICBkaXNhYmxlRXZlbnRDbGljaz17ZGlzYWJsZUV2ZW50Q2xpY2t9XG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cbiAgICAgIGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuICAgICAgc3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG4gICAgICBoZWFkZXJDb21wb25lbnQ9e2hlYWRlckNvbXBvbmVudH1cbiAgICAgIGhlYWRlckNsYXNzTmFtZT17aGVhZGVyQ2xhc3NOYW1lfVxuICAgICAgdHJhbnNsYXRpb25zPXt0cmFuc2xhdGlvbnN9XG4gICAgICB0cmFuc2xhdG9yPXt0cmFuc2xhdG9yfVxuICAgICAgcmVuZGVyRXZlbnRGb3JtPXtyZW5kZXJFdmVudEZvcm19XG4gICAgICBidXNpbmVzc0hvdXJzPXtidXNpbmVzc0hvdXJzfVxuICAgICAgdGltZUZvcm1hdD17dGltZUZvcm1hdH1cbiAgICA+XG4gICAgICA8UmVzb3VyY2VDYWxlbmRhckJvZHkgLz5cbiAgICA8L1Jlc291cmNlQ2FsZW5kYXJQcm92aWRlcj5cbiAgKVxufVxuIiwKICAgICIvLyBNYWluIGNhbGVuZGFyIGNvbXBvbmVudHNcbmV4cG9ydCB7IElsYW15Q2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXInXG5leHBvcnQgeyBJbGFteVJlc291cmNlQ2FsZW5kYXIgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXInXG5cbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tzXG5leHBvcnQgeyB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuZXhwb3J0IHsgdXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG4vLyBSUlVMRS1iYXNlZCByZWN1cnJlbmNlIHN5c3RlbVxuZXhwb3J0IHtcbiAgZ2VuZXJhdGVSZWN1cnJpbmdFdmVudHMsXG4gIGlzUmVjdXJyaW5nRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5cbi8vIEV4cG9ydCB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5leHBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnLi9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmV4cG9ydCB0eXBlIHtcbiAgSWxhbXlDYWxlbmRhclByb3BzLFxuICBDZWxsQ2xpY2tJbmZvLFxufSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcblxuLy8gUmVzb3VyY2UgY2FsZW5kYXIgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5cbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuICBUcmFuc2xhdGlvbnMsXG4gIFRyYW5zbGF0aW9uS2V5LFxuICBUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB7IGRlZmF1bHRUcmFuc2xhdGlvbnMgfSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvZGVmYXVsdCdcbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUFBLDBCQUFTLGFBQWlCLHNCQUMxQixzQkFBZ0IsZUNNaEIsd0JBQVMsaUJBQWUsZUF1RGpCLElBQU0sR0FDWCxHQUErQyxNQUFTLEVBRTdDLEVBQXFCLElBQTJCLENBQzNELElBQU0sRUFBVSxHQUFXLEVBQWUsRUFDMUMsR0FBSSxJQUFZLE9BQ2QsTUFBVSxNQUFNLDJEQUEyRCxFQUU3RSxPQUFPLEdBZ0NJLEdBQTBCLElBQXFDLENBQzFFLElBQU0sRUFBVSxHQUFXLEVBQWUsRUFDMUMsR0FBSSxJQUFZLE9BQ2QsTUFBVSxNQUNSLGdFQUNGLEVBRUYsTUFBTyxDQUNMLFlBQWEsRUFBUSxZQUNyQixLQUFNLEVBQVEsS0FDZCxPQUFRLEVBQVEsT0FDaEIsZ0JBQWlCLEVBQVEsZ0JBQ3pCLGNBQWUsRUFBUSxjQUN2QixhQUFjLEVBQVEsYUFDdEIsZUFBZ0IsRUFBUSxlQUN4QixlQUFnQixFQUFRLGVBQ3hCLFdBQVksRUFBUSxXQUNwQixRQUFTLEVBQVEsUUFDakIsV0FBWSxFQUFRLFdBQ3BCLFdBQVksRUFBUSxXQUNwQixNQUFPLEVBQVEsTUFDZixTQUFVLEVBQVEsU0FDbEIsWUFBYSxFQUFRLFlBQ3JCLFlBQWEsRUFBUSxZQUNyQixjQUFlLEVBQVEsY0FDdkIsZUFBZ0IsRUFBUSxlQUN4QixjQUFlLEVBQVEsYUFDekIsR0NoSUYseUNBQ0EsZ0JBQVMsc0JDRlQsc0JBQ0Esd0NBQ0EsMkNBQ0EsOENBQ0EsK0NBQ0EsMENBQ0EsdUNBQ0EseUNBQ0Esb0NBQ0EsMkNBZUEsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsaUNBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsK0JBQ0EsOEJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsZ0NBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsNEJBQ0EsMkJBQ0EsMkJBQ0EsMkJBQ0EsOEJBQ0EsNEJBQ0EsMkJBQ0EsNEJBQ0EsaUNBQ0EsNEJBQ0EsOEJBQ0EsMkJBQ0EsMkJBQ0EsZ0NBQ0EsMkJBQ0EsMkJBQ0EsaUNBQ0EsMkJBQ0EsOEJBQ0EsOEJBQ0EsOEJBQ0EsMkJBMUpBLEdBQU0sT0FBTyxFQUFPLEVBQ3BCLEdBQU0sT0FBTyxFQUFVLEVBQ3ZCLEdBQU0sT0FBTyxFQUFhLEVBQzFCLEdBQU0sT0FBTyxFQUFjLEVBQzNCLEdBQU0sT0FBTyxFQUFTLEVBQ3RCLEdBQU0sT0FBTyxFQUFNLEVBQ25CLEdBQU0sT0FBTyxFQUFRLEVBQ3JCLEdBQU0sT0FBTyxFQUFHLEVBQ2hCLEdBQU0sT0FBTyxFQUFVLEVBb0p2QixJQUFlLEtDdEtmLGVBQVMsY0FDVCxrQkFBUyx3QkNtQkYsU0FBUyxDQUFXLENBQ3pCLEVBQ0EsRUFDZSxDQUNmLElBQU0sRUFBNkIsRUFDaEMsUUFBUSxNQUFNLEVBQ2QsSUFBSSxDQUFjLEVBRWYsRUFBc0IsRUFBWSxTQUFTLENBQTBCLEVBQ3ZFLEVBQTJCLFNBQVMsRUFBRyxNQUFNLEVBQzdDLEVBRUosT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQUUsRUFBRyxDQUFDLEVBQUcsSUFDbkMsRUFBb0IsSUFBSSxFQUFVLEtBQUssQ0FDekMsRUFPSyxTQUFTLEVBQWEsQ0FDM0IsRUFDQSxFQUNpQixDQUNqQixJQUFNLEVBQVksRUFBWSxFQUFVLFFBQVEsT0FBTyxFQUFHLENBQWMsRUFFeEUsT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQUUsRUFBRyxDQUFDLEVBQUcsSUFBYyxDQUNqRCxJQUFNLEVBQVksRUFBVSxHQUFHLElBQUksRUFBVyxNQUFNLEVBQ3BELE9BQU8sRUFBWSxFQUFXLENBQWMsRUFDN0MsRUQvQ0ksU0FBUyxDQUFFLElBQUksRUFBc0IsQ0FDMUMsT0FBTyxHQUFRLEdBQUssQ0FBTSxDQUFDLEVBS3RCLFNBQVMsRUFBUSxDQUN0QixFQUN5QixDQUN6QixHQUFJLElBQVMsT0FDWCxPQUVGLEdBQUksRUFBTSxRQUFRLENBQUksRUFDcEIsT0FBTyxFQUVULElBQU0sRUFBYSxFQUFNLENBQUksRUFDN0IsT0FBTyxFQUFXLFFBQVEsRUFBSSxFQUFhLE9BR3RDLElBQU0sR0FBVyxDQUN0QixFQUNBLElBQ2UsQ0FDZixJQUFNLEVBQVMsSUFBSyxDQUFJLEVBQ3hCLFFBQVcsS0FBTyxFQUNoQixPQUFPLEVBQU8sR0FFaEIsT0FBTyxHQWlCRixTQUFTLEVBTWYsQ0FBQyxFQUF5QyxDQUN6QyxHQUFJLENBQUMsR0FBVSxDQUFDLEVBQU8sT0FDckIsTUFBTyxDQUFDLEVBR1YsT0FBTyxFQUFPLElBQUksQ0FBQyxJQUFVLENBQzNCLE1BQU8sSUFDRixFQUNILE1BQU8sRUFBTSxRQUFRLEVBQU0sS0FBSyxFQUFJLEVBQU0sTUFBUSxFQUFNLEVBQU0sS0FBSyxFQUNuRSxJQUFLLEVBQU0sUUFBUSxFQUFNLEdBQUcsRUFBSSxFQUFNLElBQU0sRUFBTSxFQUFNLEdBQUcsQ0FDN0QsRUFDRCxzREY1REgsU0FBUyxFQUFNLEtBQ1YsR0FDaUQsQ0FDcEQsT0FBTyxHQUFpQixPQUFqQixDQUFzQixZQUFVLFlBQWEsRUFBTyxFQVM3RCxTQUFTLEVBQVksS0FDaEIsR0FDbUQsQ0FDdEQsT0FBTyxHQUFpQixTQUFqQixDQUF3QixZQUFVLG1CQUFvQixFQUFPLEVBU3RFLFNBQVMsRUFBYSxFQUNwQixlQUNHLEdBQ29ELENBQ3ZELE9BQ0UsR0FBaUIsVUFBakIsQ0FDRSxZQUFVLGlCQUNWLFVBQVcsRUFDVCx5SkFDQSxDQUNGLEtBQ0ksRUFDTixFQUlKLFNBQVMsRUFBYSxFQUNwQixZQUNBLGNBQ0csR0FDb0QsQ0FDdkQsT0FDRSxHQWdCRSxHQWhCRixDQUFjLFlBQVUsZ0JBQXhCLFNBZ0JFLENBZkEsR0FBQyxHQUFELEVBQWUsRUFDZixHQWFrQixVQWJsQixDQUNFLFlBQVUsaUJBQ1YsVUFBVyxFQUNULDBYQUNBLENBQ0YsS0FDSSxFQU5OLFNBYUUsQ0FMQyxFQUNELEdBR2tCLFFBSGxCLENBQXVCLFVBQVUsb1dBQWpDLFNBR0UsQ0FGQSxHQUFDLEdBQUQsRUFBTyxFQUNQLEdBQWlDLE9BQWpDLENBQU0sVUFBVSxVQUFoQixpQkFBaUMsR0FDakMsR0FDRixHQUNGLEVBSU4sU0FBUyxFQUFZLEVBQUcsZUFBYyxHQUFzQyxDQUMxRSxPQUNFLEdBQUMsTUFBRCxDQUNFLFlBQVUsZ0JBQ1YsVUFBVyxFQUFHLCtDQUFnRCxDQUFTLEtBQ25FLEVBQ04sRUFJSixTQUFTLEVBQVksRUFBRyxlQUFjLEdBQXNDLENBQzFFLE9BQ0UsR0FBQyxNQUFELENBQ0UsWUFBVSxnQkFDVixVQUFXLEVBQ1QseURBQ0EsQ0FDRixLQUNJLEVBQ04sRUFJSixTQUFTLEVBQVcsRUFDbEIsZUFDRyxHQUNrRCxDQUNyRCxPQUNFLEdBQWlCLFFBQWpCLENBQ0UsWUFBVSxlQUNWLFVBQVcsRUFBRyxxQ0FBc0MsQ0FBUyxLQUN6RCxFQUNOLEVBSUosU0FBUyxFQUFpQixFQUN4QixlQUNHLEdBQ3dELENBQzNELE9BQ0UsR0FBaUIsY0FBakIsQ0FDRSxZQUFVLHFCQUNWLFVBQVcsRUFBRyxnQ0FBaUMsQ0FBUyxLQUNwRCxFQUNOLEVJbkhKLHVCQUFTLHVCQUNULDBCQUFTLGFBQWlCLHNCQUUxQixlQUFTLGVDTFQscUJBQVMsZUNFVCx3QkFBUyxpQkFBZSxlQTRCakIsSUFBTSxHQUVULEdBQXVELE1BQVMsRUFFdkQsR0FBNkIsSUFBbUMsQ0FDM0UsSUFBTSxFQUFVLEdBQVcsRUFBdUIsRUFDbEQsR0FBSSxJQUFZLE9BQ2QsTUFBVSxNQUNSLDJFQUNGLEVBRUYsT0FBTyxHQWVJLEdBQ1gsSUFBNkMsQ0FDM0MsSUFBTSxFQUFVLEdBQVcsRUFBdUIsRUFDbEQsR0FBSSxJQUFZLE9BQ2QsTUFBVSxNQUNSLGdGQUNGLEVBRUYsTUFBTyxDQUNMLFlBQWEsRUFBUSxZQUNyQixLQUFNLEVBQVEsS0FDZCxPQUFRLEVBQVEsT0FDaEIsVUFBVyxFQUFRLFVBQ25CLGdCQUFpQixFQUFRLGdCQUN6QixjQUFlLEVBQVEsY0FDdkIsYUFBYyxFQUFRLGFBQ3RCLGVBQWdCLEVBQVEsZUFDeEIsZUFBZ0IsRUFBUSxlQUN4QixXQUFZLEVBQVEsV0FDcEIsUUFBUyxFQUFRLFFBQ2pCLFdBQVksRUFBUSxXQUNwQixXQUFZLEVBQVEsV0FDcEIsTUFBTyxFQUFRLE1BQ2YsU0FBVSxFQUFRLFNBQ2xCLFlBQWEsRUFBUSxZQUNyQixZQUFhLEVBQVEsWUFDckIsY0FBZSxFQUFRLGNBQ3ZCLGVBQWdCLEVBQVEsZUFDeEIscUJBQXNCLEVBQVEscUJBQzlCLGNBQWUsRUFBUSxhQUN6QixHQ3RGSixzQkFBZ0IsY0FBYSxlQUFTLGVDQ3RDLHNCQUFTLGVBQWEsY0FBVyxlQUFTLGVDQzFDLGdCQUFTLGVBSUYsSUFBTSxHQUFtQixDQUFDLElBQWtDLENBQ2pFLE9BQU8sUUFBUSxFQUFNLE9BQVMsRUFBTSxjQUFnQixFQUFNLEdBQUcsR0FVbEQsR0FBMEIsRUFDckMsUUFDQSxnQkFDQSxZQUNBLGFBQ21ELENBRW5ELEdBQUksQ0FBQyxFQUFNLE1BQ1QsTUFBTyxDQUFDLEVBR1YsR0FBSSxDQUdGLElBQU0sRUFBNEIsSUFDN0IsRUFBTSxNQUNULFFBQVMsRUFBTSxNQUFNLFNBQVcsRUFBTSxNQUFNLE9BQU8sQ0FDckQsRUFDTSxFQUFPLElBQUksR0FBTSxDQUFXLEVBRTVCLEVBQVksRUFBYyxPQUM5QixDQUFDLElBQU0sRUFBRSxjQUFnQixFQUFFLE1BQVEsRUFBTSxHQUMzQyxFQUdNLEVBQWdCLEVBQU0sSUFBSSxLQUFLLEVBQU0sS0FBSyxFQUkxQyxFQUF3QixFQUMzQixTQUFTLEVBQWUsYUFBYSxFQUNyQyxPQUFPLEVBQ0osRUFBYyxFQUFRLE9BQU8sRUF5RG5DLE9BdERvQixFQUFLLFFBQVEsRUFBdUIsRUFBYSxFQUFJLEVBSXRFLElBQUksQ0FBQyxFQUFZLElBQVUsQ0FDMUIsSUFBTSxFQUFpQixFQUFNLENBQVUsRUFDakMsRUFBbUIsRUFBVSxLQUFLLENBQUMsSUFDdkMsR0FBUyxFQUFFLFlBQVksR0FBRyxPQUFPLENBQWMsQ0FDakQsRUFHQSxHQUFJLEVBQ0YsTUFBTyxJQUFLLEtBQVUsQ0FBaUIsRUFJekMsSUFBTSxFQUFtQixFQUFNLElBQUksS0FBSyxFQUFNLEtBQUssRUFDN0MsRUFBYSxFQUFlLElBQUksRUFBa0IsYUFBYSxFQUMvRCxFQUFtQixHQUFHLEVBQU0sTUFBTSxJQUNsQyxFQUFZLEVBQU0sS0FBTyxHQUFHLEVBQU0sb0JBWXhDLE1BVHNDLElBQ2pDLEVBQ0gsR0FBSSxFQUNKLE1BQU8sRUFDUCxJQUFLLEVBQ0wsSUFBSyxFQUNMLE1BQU8sTUFDVCxFQUdELEVBQ0EsT0FBTyxDQUFDLElBQW1CLENBRzFCLEdBRG1CLEVBQU0sU0FBVyxFQUFNLFFBQVEsT0FBUyxFQUMzQyxDQUNkLElBQU0sRUFBZ0IsRUFBZSxNQUFNLFlBQVksRUFFdkQsR0FEbUIsRUFBTSxRQUFRLFNBQVMsQ0FBYSxFQUVyRCxNQUFPLEdBV1gsT0FIRSxFQUFlLE1BQU0sZUFBZSxDQUFPLEdBQzNDLEVBQWUsSUFBSSxjQUFjLENBQVMsRUFHN0MsRUFHSCxNQUFPLEVBQU8sQ0FFZCxNQUFVLE1BQ1IsMEJBQTBCLEtBQUssVUFBVSxFQUFNLEtBQUssYUFBYSxhQUFpQixNQUFRLEVBQU0sUUFBVSxpQkFDNUcsSUFXUyxHQUF1QixFQUNsQyxjQUNBLFVBQ0EsZ0JBQ0EsV0FDZ0QsQ0FDaEQsSUFBTSxFQUFnQixDQUFDLEdBQUcsQ0FBYSxFQUdqQyxFQUFpQixFQUFjLFVBQVUsQ0FBQyxJQUFNLENBRXBELE9BRGtCLEVBQUUsS0FBTyxHQUFHLEVBQUUsdUJBQ1gsRUFBWSxLQUFPLEVBQUUsT0FBUyxDQUFDLEVBQUUsYUFDdkQsRUFFRCxHQUFJLElBQW1CLEdBQ3JCLE1BQVUsTUFBTSxnQ0FBZ0MsRUFHbEQsSUFBTSxFQUFZLEVBQWMsR0FFaEMsT0FBUSxPQUNELE9BQVEsQ0FFWCxJQUFNLEVBQXNCLEVBQVksTUFBTSxZQUFZLEVBRXBELEVBQWlCLENBQUMsR0FEQSxFQUFVLFNBQVcsQ0FBQyxFQUNGLENBQW1CLEVBRXpELEVBQW1CLElBQ3BCLEVBQ0gsUUFBUyxDQUNYLEVBQ0EsRUFBYyxHQUFrQixFQUdoQyxJQUFNLEVBQWtCLEdBQUcsRUFBWSxlQUFlLEtBQUssSUFBSSxJQUN6RCxFQUErQixJQUVoQyxHQUFTLEVBQWEsQ0FBQyxRQUFTLFNBQVUsTUFBTyxPQUFRLE9BQU8sQ0FBQyxLQUNqRSxFQUNILEdBQUksRUFDSixhQUFjLEVBQ2QsSUFBSyxFQUFVLEtBQU8sR0FBRyxFQUFVLG9CQUNuQyxNQUFPLE1BQ1QsRUFDQSxFQUFjLEtBQUssQ0FBYSxFQUNoQyxLQUNGLEtBRUssWUFBYSxDQU1oQixJQUFNLEVBRGtCLEVBQVksTUFBTSxTQUFTLEVBQUcsS0FBSyxFQUNuQixNQUFNLEtBQUssRUFBRSxPQUFPLEVBR3RELEVBQWtCLElBQ25CLEVBQ0gsTUFBTyxJQUNGLEVBQVUsTUFDYixNQUFPLENBQ1QsQ0FDRixFQUNBLEVBQWMsR0FBa0IsRUFHaEMsSUFBTSxFQUFtQixFQUFVLElBQUksS0FBSyxFQUFVLEtBQUssRUFDckQsRUFBcUIsRUFBUSxPQUFTLEVBQVksTUFDbEQsRUFDSixFQUFRLEtBQU8sRUFBbUIsSUFBSSxDQUFnQixFQUNsRCxFQUFjLEdBQUcsRUFBVSxlQUMzQixFQUFlLEdBQUcsbUJBRWxCLEVBQWdDLElBQ2pDLEtBQ0EsRUFDSCxNQUFPLElBQ0YsRUFBVSxTQUNWLEVBQVEsTUFDWCxRQUFTLEVBQW1CLE9BQU8sQ0FDckMsRUFDQSxHQUFJLEVBQ0osSUFBSyxFQUNMLE1BQU8sRUFDUCxJQUFLLEVBQ0wsYUFBYyxNQUNoQixFQUNBLEVBQWMsS0FBSyxDQUFjLEVBQ2pDLEtBQ0YsS0FFSyxNQUFPLENBRVYsSUFBTSxFQUFtQixJQUNwQixLQUNBLENBQ0wsRUFDQSxFQUFjLEdBQWtCLEVBQ2hDLEtBQ0YsU0FHRSxNQUFVLE1BQ1Isa0JBQWtCLDBDQUNwQixFQUdKLE9BQU8sR0FTSSxHQUF1QixFQUNsQyxjQUNBLGdCQUNBLFdBQ2dELENBQ2hELElBQU0sRUFBZ0IsQ0FBQyxHQUFHLENBQWEsRUFHakMsRUFBaUIsRUFBYyxVQUFVLENBQUMsSUFBTSxDQUVwRCxPQURrQixFQUFFLEtBQU8sR0FBRyxFQUFFLHVCQUNYLEVBQVksS0FBTyxFQUFFLE9BQVMsQ0FBQyxFQUFFLGFBQ3ZELEVBRUQsR0FBSSxJQUFtQixHQUNyQixNQUFVLE1BQU0sZ0NBQWdDLEVBR2xELElBQU0sRUFBWSxFQUFjLEdBRWhDLE9BQVEsT0FDRCxPQUFRLENBRVgsSUFBTSxFQUFzQixFQUFZLE1BQU0sWUFBWSxFQUVwRCxFQUFpQixDQUFDLEdBREEsRUFBVSxTQUFXLENBQUMsRUFDRixDQUFtQixFQUV6RCxFQUFtQixJQUFLLEVBQVcsUUFBUyxDQUFlLEVBQ2pFLEVBQWMsR0FBa0IsRUFDaEMsS0FDRixLQUVLLFlBQWEsQ0FNaEIsSUFBTSxFQURrQixFQUFZLE1BQU0sU0FBUyxFQUFHLEtBQUssRUFDbkIsTUFBTSxLQUFLLEVBQUUsT0FBTyxFQUV0RCxFQUFrQixJQUNuQixFQUNILE1BQU8sSUFDRixFQUFVLE1BQ2IsTUFBTyxDQUNULENBQ0YsRUFDQSxFQUFjLEdBQWtCLEVBQ2hDLEtBQ0YsS0FFSyxNQUtILE9BSGtDLEVBQWMsT0FDOUMsQ0FBQyxJQUFNLEVBQUUsTUFBUSxFQUFZLEdBQy9CLFVBS0EsTUFBVSxNQUNSLGtCQUFrQiwwQ0FDcEIsRUFHSixPQUFPLEdDN1NGLElBQU0sR0FBb0MsQ0FFL0MsTUFBTyxRQUNQLE9BQVEsU0FDUixJQUFLLE1BQ0wsT0FBUSxTQUNSLE9BQVEsU0FDUixPQUFRLFNBQ1IsT0FBUSxTQUdSLE1BQU8sUUFDUCxPQUFRLFNBQ1IsU0FBVSxZQUNWLE1BQU8sUUFDUCxZQUFhLGNBQ2IsU0FBVSxXQUNWLE9BQVEsVUFDUixVQUFXLGFBQ1gsUUFBUyxXQUNULFVBQVcsYUFDWCxRQUFTLFdBQ1QsTUFBTyxRQUdQLFlBQWEsZUFDYixVQUFXLGFBQ1gsWUFBYSxtQ0FDYixpQkFBa0IsMEJBQ2xCLHNCQUF1QixjQUN2Qiw0QkFBNkIsK0JBQzdCLHlCQUEwQiw0QkFHMUIsT0FBUSxTQUNSLFFBQVMsVUFDVCxpQkFBa0Isb0JBQ2xCLE1BQU8sUUFDUCxPQUFRLFNBQ1IsUUFBUyxVQUNULE9BQVEsU0FDUixTQUFVLFdBQ1YsU0FBVSxZQUNWLE1BQU8sUUFDUCxNQUFPLFFBQ1AsTUFBTyxRQUNQLEtBQU0sT0FDTixNQUFPLFFBQ1AsWUFBYSxjQUNiLEdBQUksS0FHSixtQkFBb0IsdUJBQ3BCLHFCQUFzQix5QkFDdEIsMkJBQ0UsdURBQ0YsNkJBQ0UseURBQ0YsVUFBVyxhQUNYLHFCQUFzQix1Q0FDdEIsdUJBQXdCLDRCQUN4QixrQ0FBbUMsdUNBQ25DLFVBQVcsYUFDWCxxQkFBc0IsbUNBQ3RCLGVBQWdCLHVDQUNoQixvQkFBcUIseUNBQ3JCLG1CQUFvQixxQ0FDcEIsZUFBZ0IsdUNBQ2hCLG9CQUFxQix5Q0FDckIsbUJBQW9CLHFDQUdwQixNQUFPLFFBQ1AsS0FBTSxPQUNOLElBQUssTUFDTCxLQUFNLE9BQ04sS0FBTSxPQUdOLFVBQVcsWUFDWCxTQUFVLFdBQ1YsS0FBTSxPQUNOLEtBQU0sT0FDTixtQkFBb0IsdUJBQ3BCLDJCQUE0QixzQ0FHNUIsT0FBUSxTQUNSLE9BQVEsU0FDUixRQUFTLFVBQ1QsVUFBVyxZQUNYLFNBQVUsV0FDVixPQUFRLFNBQ1IsU0FBVSxXQUdWLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFHTCxRQUFTLFVBQ1QsU0FBVSxXQUNWLE1BQU8sUUFDUCxNQUFPLFFBQ1AsSUFBSyxNQUNMLEtBQU0sT0FDTixLQUFNLE9BQ04sT0FBUSxTQUNSLFVBQVcsWUFDWCxRQUFTLFVBQ1QsU0FBVSxXQUNWLFNBQVUsVUFDWixFQ3JITyxJQUFNLEdBQXVCLEVBQ3ZCLEdBQW9CLEdBQ3BCLEdBQW1CLEdBQ25CLEdBQXlCLEVBRXpCLEdBQWlELENBQzVELE9BQVEsRUFDUixPQUFRLEVBQ1IsUUFBUyxFQUNULFVBQVcsRUFDWCxTQUFVLEVBQ1YsT0FBUSxFQUNSLFNBQVUsQ0FDWixFSDREQSxJQUFNLEdBQXlELENBQzdELElBQUssTUFDTCxLQUFNLE9BQ04sTUFBTyxRQUNQLEtBQU0sTUFDUixFQUVhLEdBQW9CLENBQy9CLElBQ3lCLENBQ3pCLElBQ0UsU0FBUyxDQUFDLEVBQ1YsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUFjLEVBQU0sRUFDcEIsZ0JBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLGVBQ0EsU0FDQSxXQUNBLGVBQ0EsY0FDRSxHQUVHLEVBQWEsR0FBa0IsR0FBc0IsQ0FBVyxHQUNoRSxFQUFNLEdBQVcsR0FBdUIsQ0FBVyxHQUNuRCxFQUFlLEdBQW9CLEdBQTBCLENBQU0sR0FDbkUsRUFBaUIsR0FBc0IsR0FBUyxFQUFLLEdBQ3JELEVBQWUsR0FBb0IsR0FBK0IsSUFBSSxHQUN0RSxFQUFjLEdBQW1CLEdBQTZCLElBQUksR0FDbEUsRUFBZSxHQUFvQixHQUFTLEdBQVUsSUFBSSxFQUUzRCxFQUFJLEdBQVEsSUFBTSxDQUN0QixHQUFJLEVBQ0YsT0FBTyxFQUVULEdBQUksRUFDRixNQUFPLENBQUMsSUFBNEIsRUFBYSxJQUFRLEVBRTNELE1BQU8sQ0FBQyxJQUE0QixHQUFvQixJQUFRLEdBQy9ELENBQUMsRUFBYyxDQUFVLENBQUMsRUFFdkIsRUFBd0IsRUFDNUIsQ0FBQyxFQUF3QixJQUEwQyxDQUNqRSxJQUFNLEVBQTZCLENBQUMsRUFFcEMsUUFBVyxLQUFTLEVBQ2xCLEdBQUksRUFBTSxNQUNSLEVBQVUsS0FDUixHQUFHLEdBQXdCLENBQ3pCLFFBQ0EsZ0JBQ0EsWUFDQSxTQUNGLENBQUMsQ0FDSCxFQUNLLEtBQ0wsSUFBTSxHQUNKLEVBQU0sTUFBTSxjQUFjLENBQVMsR0FDbkMsRUFBTSxNQUFNLGVBQWUsQ0FBTyxFQUM5QixHQUNKLEVBQU0sSUFBSSxjQUFjLENBQVMsR0FDakMsRUFBTSxJQUFJLGVBQWUsQ0FBTyxFQUM1QixHQUNKLEVBQU0sTUFBTSxTQUFTLENBQVMsR0FBSyxFQUFNLElBQUksUUFBUSxDQUFPLEVBQzlELEdBQUksSUFBaUIsSUFBZSxHQUNsQyxFQUFVLEtBQUssQ0FBSyxFQUkxQixPQUFPLEdBRVQsQ0FBQyxDQUFhLENBQ2hCLEVBRU0sR0FBc0IsRUFBWSxJQUFNLENBQzVDLEdBQUksSUFBUyxNQUNYLE1BQU8sQ0FDTCxNQUFPLEVBQVksUUFBUSxLQUFLLEVBQ2hDLElBQUssRUFBWSxNQUFNLEtBQUssQ0FDOUIsRUFFRixHQUFJLElBQVMsT0FDWCxNQUFPLENBQ0wsTUFBTyxFQUFZLFFBQVEsTUFBTSxFQUNqQyxJQUFLLEVBQVksTUFBTSxNQUFNLENBQy9CLEVBRUYsR0FBSSxJQUFTLE9BQVEsQ0FDbkIsSUFBTSxFQUFXLEVBQVksRUFBYSxDQUFjLEVBQ3hELE1BQU8sQ0FDTCxNQUFPLEVBQVMsR0FBRyxRQUFRLEtBQUssRUFDaEMsSUFBSyxFQUFTLEdBQUcsTUFBTSxLQUFLLENBQzlCLEVBR0YsSUFBTSxFQUFRLEdBQWMsRUFBYSxDQUFjLEVBQ3ZELE1BQU8sQ0FBRSxNQUFPLEVBQU0sR0FBRyxHQUFHLFFBQVEsS0FBSyxFQUFHLElBQUssRUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUUsR0FDekUsQ0FBQyxFQUFhLEVBQU0sQ0FBYyxDQUFDLEVBRWhDLEdBQWtCLEdBQVEsSUFBTSxDQUNwQyxJQUFRLFFBQU8sT0FBUSxHQUFvQixFQUMzQyxPQUFPLEVBQXNCLEVBQU8sQ0FBRyxHQUN0QyxDQUFDLEVBQXVCLEVBQW1CLENBQUMsRUFFL0MsR0FBVSxJQUFNLENBQ2QsR0FBSSxFQUNGLEVBQWlCLENBQU0sR0FFeEIsQ0FBQyxDQUFNLENBQUMsRUFDWCxHQUFVLElBQU0sQ0FDZCxHQUFJLEVBQ0YsRUFBaUIsQ0FBTSxFQUN2QixFQUFNLE9BQU8sQ0FBTSxFQUNuQixFQUFlLENBQUMsSUFBYSxFQUFTLE9BQU8sQ0FBTSxDQUFDLEdBRXJELENBQUMsQ0FBTSxDQUFDLEVBQ1gsR0FBVSxJQUFNLENBQ2QsR0FBSSxFQUNGLEVBQU0sR0FBRyxXQUFXLENBQVEsR0FFN0IsQ0FBQyxDQUFRLENBQUMsRUFFYixJQUFNLEVBQWEsRUFDakIsQ0FBQyxJQUFzQixDQUNyQixFQUFlLENBQUksRUFDbkIsSUFBZSxDQUFJLEdBRXJCLENBQUMsQ0FBWSxDQUNmLEVBRU0sR0FBaUIsRUFDckIsQ0FBQyxJQUFzQixDQUNyQixFQUFlLENBQUMsSUFBUyxDQUN2QixJQUFNLEVBQ0osSUFBYyxFQUNWLEVBQUssSUFBSSxFQUFHLEdBQVcsRUFBSyxFQUM1QixFQUFLLFNBQVMsRUFBRyxHQUFXLEVBQUssRUFFdkMsT0FEQSxJQUFlLENBQU8sRUFDZixFQUNSLEdBRUgsQ0FBQyxFQUFNLENBQVksQ0FDckIsRUFFTSxHQUFhLEVBQVksSUFBTSxHQUFlLENBQUMsRUFBRyxDQUFDLEVBQWMsQ0FBQyxFQUNsRSxHQUFhLEVBQVksSUFBTSxHQUFlLEVBQUUsRUFBRyxDQUFDLEVBQWMsQ0FBQyxFQUVuRSxHQUFRLEVBQVksSUFBTSxDQUM5QixJQUFNLEVBQVUsRUFBTSxFQUN0QixFQUFlLENBQU8sRUFDdEIsSUFBZSxDQUFPLEdBQ3JCLENBQUMsQ0FBWSxDQUFDLEVBRVgsR0FBVyxFQUNmLENBQUMsSUFBeUIsQ0FDeEIsRUFBaUIsQ0FBQyxJQUFTLENBQUMsR0FBRyxFQUFNLENBQUssQ0FBQyxFQUMzQyxJQUFhLENBQUssR0FFcEIsQ0FBQyxDQUFVLENBQ2IsRUFFTSxHQUFjLEVBQ2xCLENBQUMsRUFBMEIsSUFBb0MsQ0FDN0QsRUFBaUIsQ0FBQyxJQUNoQixFQUFLLElBQUksQ0FBQyxJQUFVLENBQ2xCLEdBQUksRUFBTSxLQUFPLEVBQ2YsT0FBTyxFQUVULElBQU0sR0FBVyxJQUFLLEtBQVUsQ0FBUSxFQUV4QyxPQURBLElBQWdCLEVBQVEsRUFDakIsR0FDUixDQUNILEdBRUYsQ0FBQyxDQUFhLENBQ2hCLEVBRU0sR0FBdUIsRUFDM0IsQ0FDRSxFQUNBLEVBQ0EsSUFDRyxDQUNILElBQWdCLElBQUssS0FBVSxDQUFRLENBQUMsRUFDeEMsRUFDRSxHQUF5QixDQUN2QixZQUFhLEVBQ2IsVUFDQSxnQkFDQSxNQUFPLEVBQVEsS0FDakIsQ0FBQyxDQUNILEdBRUYsQ0FBQyxFQUFlLENBQWEsQ0FDL0IsRUFFTSxHQUF1QixFQUMzQixDQUFDLEVBQXNCLElBQW1DLENBQ3hELElBQWdCLENBQUssRUFDckIsRUFDRSxHQUF5QixDQUN2QixZQUFhLEVBQ2IsZ0JBQ0EsTUFBTyxFQUFRLEtBQ2pCLENBQUMsQ0FDSCxHQUVGLENBQUMsRUFBZSxDQUFhLENBQy9CLEVBRU0sR0FBYyxFQUNsQixDQUFDLElBQTZCLENBQzVCLEVBQWlCLENBQUMsSUFBUyxDQUN6QixJQUFNLEVBQWdCLEVBQUssS0FBSyxDQUFDLElBQU0sRUFBRSxLQUFPLENBQU8sRUFDdkQsR0FBSSxFQUNGLElBQWdCLENBQWEsRUFFL0IsT0FBTyxFQUFLLE9BQU8sQ0FBQyxJQUFNLEVBQUUsS0FBTyxDQUFPLEVBQzNDLEdBRUgsQ0FBQyxDQUFhLENBQ2hCLEVBRU0sR0FBZ0IsRUFDcEIsQ0FBQyxJQUF1QyxDQUN0QyxHQUFJLEdBQVcsTUFDYixFQUFnQixFQUFVLEtBQUssRUFFakMsSUFBTSxFQUFRLEdBQVcsT0FBUyxFQUNsQyxFQUFpQixDQUNmLE1BQU8sRUFBRSxVQUFVLEVBQ25CLFFBQ0EsSUFBSyxHQUFXLEtBQU8sRUFBTSxJQUFJLEVBQUcsTUFBTSxFQUMxQyxXQUFZLEdBQVcsV0FDdkIsWUFBYSxHQUNiLE9BQVEsRUFDVixDQUFrQixFQUNsQixFQUFtQixFQUFJLEdBRXpCLENBQUMsRUFBYSxDQUFDLENBQ2pCLEVBRU0sRUFBaUIsRUFBWSxJQUFNLENBQ3ZDLEVBQWdCLElBQUksRUFDcEIsRUFBaUIsSUFBSSxFQUNyQixFQUFtQixFQUFLLEdBQ3ZCLENBQUMsQ0FBQyxFQUVDLEdBQW1CLEVBQ3ZCLENBQUMsSUFBMEIsQ0FDekIsRUFBUSxDQUFPLEVBQ2YsSUFBZSxDQUFPLEdBRXhCLENBQUMsQ0FBWSxDQUNmLEVBRU0sR0FBMkIsRUFDL0IsQ0FBQyxJQUErQyxDQUM5QyxJQUFNLEVBQVksRUFBTSxJQUN4QixPQUNFLEVBQWMsS0FDWixDQUFDLEtBQU8sRUFBRSxLQUFPLEdBQUcsRUFBRSx1QkFBeUIsR0FBYSxFQUFFLEtBQ2hFLEdBQUssTUFHVCxDQUFDLENBQWEsQ0FDaEIsRUFFQSxNQUFPLENBQ0wsY0FDQSxPQUNBLE9BQVEsR0FDUixVQUFXLEVBQ1gsa0JBQ0EsZ0JBQ0EsZUFDQSxpQkFDQSxhQUFjLEdBQ2QsZ0JBQ0EsZ0JBQ0EsaUJBQ0EsYUFDQSxRQUFTLEdBQ1QsY0FDQSxjQUNBLFNBQ0EsWUFDQSxlQUNBLHdCQUNBLGVBQ0Esd0JBQ0EsaUJBQ0EsaUJBQ0EsbUJBQ0EscUJBQ0Esa0JBQ0Esd0JBQ0EsNEJBQ0EsR0FDRiw0Q0RsWEYsSUFBTSxHQUFzQixDQUFDLElBQThDLENBQ3pFLEdBQUksRUFBTSxZQUNSLE9BQU8sRUFBTSxZQUVmLEdBQUksRUFBTSxhQUFlLE9BQ3ZCLE1BQU8sQ0FBQyxFQUFNLFVBQVUsRUFFMUIsTUFBTyxDQUFDLEdBU0csR0FFVCxFQUNGLFdBQ0EsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUNBLGNBQ0EsZUFDQSxjQUNBLGVBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLG1CQUFtQixHQUNuQixzQkFBc0IsR0FDdEIsa0JBQ0Esa0JBQ0EsZUFDQSxhQUNBLGlCQUNBLGtCQUNBLGdCQUNBLGFBQWEsYUFDVCxDQUVKLElBQU8sR0FBb0IsR0FBcUIsQ0FBUyxHQUNsRCxHQUFrQixJQUF1QixHQUU5QyxJQUFJLElBQUksRUFBVSxJQUFJLENBQUMsSUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBRy9CLEVBQWlCLEdBQWtCLENBQ3ZDLFNBQ0EsaUJBQ0EsY0FDQSxjQUNBLGdCQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxhQUFjLEVBQ2QsU0FDQSxXQUNBLGVBQ0EsWUFDRixDQUFDLEVBR0ssR0FBMkIsR0FDL0IsQ0FBQyxJQUFnQyxDQUMvQixHQUFvQixDQUFDLElBQVMsQ0FDNUIsSUFBTSxFQUFTLElBQUksSUFBSSxDQUFJLEVBQzNCLEdBQUksRUFBTyxJQUFJLENBQVUsRUFDdkIsRUFBTyxPQUFPLENBQVUsRUFFeEIsT0FBTyxJQUFJLENBQVUsRUFFdkIsT0FBTyxFQUNSLEdBRUgsQ0FBQyxDQUNILEVBRU0sR0FBZSxHQUFZLENBQUMsSUFBZ0MsQ0FDaEUsR0FBb0IsQ0FBQyxJQUFTLElBQUksSUFBSSxDQUFJLEVBQUUsSUFBSSxDQUFVLENBQUMsR0FDMUQsQ0FBQyxDQUFDLEVBRUMsR0FBZSxHQUFZLENBQUMsSUFBZ0MsQ0FDaEUsR0FBb0IsQ0FBQyxJQUFTLENBQzVCLElBQU0sRUFBUyxJQUFJLElBQUksQ0FBSSxFQUUzQixPQURBLEVBQU8sT0FBTyxDQUFVLEVBQ2pCLEVBQ1IsR0FDQSxDQUFDLENBQUMsRUFFQyxHQUFtQixHQUFZLElBQU0sQ0FDekMsR0FBb0IsSUFBSSxJQUFJLEVBQWlCLElBQUksQ0FBQyxJQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FDN0QsQ0FBQyxDQUFnQixDQUFDLEVBRWYsR0FBbUIsR0FBWSxJQUFNLENBQ3pDLEdBQW9CLElBQUksR0FBSyxHQUM1QixDQUFDLENBQUMsRUFHQyxHQUF1QixHQUMzQixDQUFDLElBQWlELENBQ2hELE9BQU8sRUFBZSxPQUFPLE9BQU8sQ0FBQyxJQUF5QixDQUM1RCxHQUFJLEVBQU0sWUFDUixPQUFPLEVBQU0sWUFBWSxTQUFTLENBQVUsRUFFOUMsT0FBTyxFQUFNLGFBQWUsRUFDN0IsR0FFSCxDQUFDLEVBQWUsTUFBTSxDQUN4QixFQUVNLEdBQXdCLEdBQzVCLENBQUMsSUFBc0QsQ0FDckQsT0FBTyxFQUFlLE9BQU8sT0FBTyxDQUFDLElBQXlCLENBRTVELE9BRHlCLEdBQW9CLENBQUssRUFDMUIsS0FBSyxDQUFDLEtBQU8sRUFBWSxTQUFTLEVBQUUsQ0FBQyxFQUM5RCxHQUVILENBQUMsRUFBZSxNQUFNLENBQ3hCLEVBRU0sR0FBa0IsR0FDdEIsQ0FBQyxJQUFzRCxDQUNyRCxPQUFPLEVBQWlCLEtBQUssQ0FBQyxJQUFhLEVBQVMsS0FBTyxDQUFVLEdBRXZFLENBQUMsQ0FBZ0IsQ0FDbkIsRUFFTSxHQUFzQixHQUFZLElBQWtCLENBQ3hELE9BQU8sRUFBaUIsT0FBTyxDQUFDLElBQzlCLEdBQWlCLElBQUksRUFBUyxFQUFFLENBQ2xDLEdBQ0MsQ0FBQyxFQUFrQixFQUFnQixDQUFDLEVBR2pDLEdBQXVCLEdBQVksQ0FBQyxJQUFrQyxDQUMxRSxPQUFPLFFBQVEsRUFBTSxhQUFlLEVBQU0sWUFBWSxPQUFTLENBQUMsR0FDL0QsQ0FBQyxDQUFDLEVBR0MsRUFBWSxHQUNoQixDQUFDLElBQXlCLENBQ3hCLEVBQWUsaUJBQWlCLENBQUssRUFDckMsRUFBZSxtQkFBbUIsRUFBSSxHQUV4QyxDQUFDLENBQWMsQ0FDakIsRUFFTSxHQUFtQixHQUN2QixDQUFDLElBQXlCLENBQ3hCLEdBQUksRUFDRixPQUVGLEdBQUksRUFDRixFQUFhLENBQUssRUFFbEIsT0FBVSxDQUFLLEdBR25CLENBQUMsRUFBbUIsRUFBYyxDQUFTLENBQzdDLEVBRU0sR0FBa0IsR0FDdEIsQ0FBQyxJQUF3QixDQUN2QixHQUFJLEVBQ0YsT0FHRixHQUFJLEVBQ0YsRUFBWSxDQUFJLEVBQ1gsS0FDTCxJQUFNLEVBQTBCLENBQzlCLE1BQU8sRUFBZSxFQUFFLFVBQVUsRUFDbEMsTUFBTyxFQUFLLE1BQ1osSUFBSyxFQUFLLElBQ1YsWUFBYSxHQUNiLE9BQVEsRUFDVixFQUVBLEdBQUksRUFBSyxhQUFlLE9BQ3RCLEVBQVMsV0FBYSxFQUFLLFdBRzdCLEVBQWUsaUJBQWlCLENBQVEsRUFDeEMsRUFBZSxnQkFBZ0IsRUFBSyxLQUFLLEVBQ3pDLEVBQWUsbUJBQW1CLEVBQUksSUFHMUMsQ0FBQyxFQUFhLEVBQWtCLENBQWMsQ0FDaEQsRUFHTSxFQUFlLEdBQ25CLEtBQU8sSUFDRixFQUNILEtBQU0sRUFBZSxLQUNyQixRQUFTLEVBQWUsUUFDeEIsT0FBUSxFQUFlLE9BQ3ZCLFVBQVcsRUFBZSxVQUcxQixVQUFXLEVBQ1gsb0JBQ0EsNEJBQ0EsZ0JBQ0EsZ0JBQ0Esb0JBQ0Esb0JBR0Esd0JBQ0EseUJBQ0EsbUJBQ0EsdUJBR0Esd0JBQ0EsdUJBR0EsYUFBYyxHQUNkLFlBQWEsR0FHYixrQkFDQSxrQkFHQSxjQUNBLGlCQUNBLGtCQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLG1CQUNBLHNCQUNBLGdCQUNBLFlBQ0YsR0FDQSxDQUNFLEVBQ0EsRUFDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxDQUNGLENBQ0YsRUFFQSxPQUNFLEdBRUUsR0FBd0IsU0FGMUIsQ0FBa0MsTUFBTyxFQUF6QyxTQUNHLEVBQ0QsR0ZwU0MsU0FBUyxDQUEwQixDQUFDLEVBQTZCLENBRXRFLElBQU0sRUFBa0IsR0FBVyxFQUF1QixFQUNwRCxFQUFpQixHQUFXLEVBQWUsRUFFakQsR0FBSSxFQUNGLE9BQU8sRUFBUyxDQUFlLEVBR2pDLEdBQUksRUFDRixPQUFPLEVBQVMsQ0FBYyxFQUloQyxNQUFVLE1BQ1IsNEZBQ0Ysc0REZkYsSUFBTSxHQUF1QixDQUMzQixFQUNBLElBQ0csQ0FDSCxHQUFJLEdBQW9CLEVBQ3RCLE1BQU8sZUFFVCxHQUFJLEVBQ0YsTUFBTyw4QkFFVCxHQUFJLEVBQ0YsTUFBTyw4QkFFVCxNQUFPLGNBR1QsU0FBUyxFQUF3QixFQUMvQixZQUNBLFFBQ0EsWUFDQSxRQUNBLGNBQWMsSUFPYixDQUNELElBQVEsZUFBYyxjQUFhLG9CQUFtQixzQkFDcEQsRUFBd0IsQ0FBQyxLQUFXLENBQ2xDLGFBQWMsRUFBTSxhQUNwQixZQUFhLEVBQU0sWUFDbkIsa0JBQW1CLEVBQU0sa0JBQ3pCLG1CQUFvQixFQUFNLGtCQUM1QixFQUFFLEdBRUksYUFBWSxZQUFXLGFBQVksY0FBZSxHQUFhLENBQ3JFLEdBQUksRUFDSixLQUFNLENBQ0osUUFDQSxLQUFNLGdCQUNSLEVBQ0EsU0FBVSxHQUFlLENBQzNCLENBQUMsRUFHSyxFQUFzQixJQUFNLENBRWhDLElBQU0sRUFBZ0IsRUFJaEIsRUFBbUIsRUFBYyxpQkFDakMsRUFBaUIsRUFBYyxlQUVyQyxPQUNFLEdBOEJFLE1BOUJGLENBQ0UsVUFBVyxFQUNULEVBQU0saUJBQW1CLGNBQ3pCLEVBQU0sT0FBUyxhQUNmLGlGQUNBLEdBQXFCLEVBQWtCLENBQWMsQ0FDdkQsRUFDQSxNQUFPLENBQUUsZ0JBQWlCLEVBQU0sZ0JBQWlCLE1BQU8sRUFBTSxLQUFNLEVBUHRFLFNBOEJFLENBcEJDLEdBQ0MsR0FBeUUsTUFBekUsQ0FBSyxVQUFVLHdEQUEwRCxFQUkzRSxHQVNFLElBVEYsQ0FDRSxVQUFXLEVBQ1QsOENBRUEsR0FBb0IsT0FDcEIsR0FBa0IsTUFDcEIsRUFORixTQVFHLEVBQU0sTUFDUCxFQUdELEdBQ0MsR0FBMEUsTUFBMUUsQ0FBSyxVQUFVLHlEQUEyRCxHQUU1RSxHQUlOLE9BQ0UsR0FpQ0UsR0FqQ0YsQ0FBaUIsS0FBSyxPQUF0QixTQUNFLEdBK0JFLEdBQU8sSUEvQlQsQ0FFRSxJQUFLLEtBQ0QsS0FDQSxFQUNKLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzlCLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxDQUFFLEVBQzVCLEtBQU0sQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzNCLE9BQU0sR0FDTixTQUFVLEVBQ1YsV0FBWSxDQUFFLFNBQVUsSUFBSyxLQUFNLFdBQVksRUFDL0MsVUFBVyxFQUNULHlCQUNBLEdBQWUsRUFDWCxFQUNFLGlCQUNBLGlCQUNGLGNBQ0osR0FDRSxFQUFFLEdBQWUsSUFDakIsNEJBQ0YsQ0FDRixFQUNBLE1BQU8sRUFDUCxRQUFTLENBQUMsSUFBTSxDQUNkLEVBQUUsZ0JBQWdCLEVBQ2xCLEVBQWEsQ0FBSyxHQTFCdEIsU0E4QkcsRUFBYyxFQUFZLENBQUssRUFBSSxHQUFDLEVBQUQsRUFBcUIsR0E3QnBELENBOEJMLEVBQ0YsRUFJQyxJQUFNLEdBQWlCLEdBQzVCLEdBQ0EsQ0FBQyxFQUFXLElBQWMsQ0FFeEIsT0FDRSxFQUFVLFlBQWMsRUFBVSxXQUNsQyxFQUFVLGNBQWdCLEVBQVUsYUFDcEMsRUFBVSxZQUFjLEVBQVUsV0FDbEMsRUFBVSxRQUFVLEVBQVUsTUFHcEMsRVEzSUEsOEJBQWdCLGVBQXFCLG1FQWU5QixJQUFNLEdBQWdELEVBQUcsU0FBVSxDQUN4RSxJQUFPLEVBQVksR0FBaUIsR0FBUyxFQUFLLEdBQzNDLEVBQW1CLEdBQ3hCLEdBQW1DLElBQUksR0FDakMsY0FBYSxrQkFBbUIsRUFBd0IsQ0FBQyxLQUFXLENBQzFFLFlBQWEsRUFBTSxZQUNuQixlQUFnQixFQUFNLGNBQ3hCLEVBQUUsRUFFRixHQUFvQixFQUFLLEtBQU8sQ0FDOUIsS0FBTSxJQUFNLEVBQWMsRUFBSSxFQUM5QixNQUFPLElBQU0sRUFBYyxFQUFLLEVBQ2hDLHFCQUFzQixDQUFDLElBQ3JCLEVBQXFCLENBQVMsQ0FDbEMsRUFBRSxFQU9GLElBQUksRUFKb0IsRUFBWSxRQUFRLE9BQU8sRUFJRixNQUFNLEVBQ3ZELE1BQU8sRUFBMkIsSUFBSSxJQUFNLEVBQzFDLEVBQTZCLEVBQTJCLFNBQVMsRUFBRyxLQUFLLEVBRzNFLE9BQ0UsR0FxQkUsR0FyQkYsQ0FBUSxLQUFNLEVBQVksYUFBYyxFQUF4QyxTQUNFLEdBbUJFLEdBbkJGLENBQWUsVUFBVSx3Q0FBekIsU0FtQkUsQ0FsQkEsR0FJRSxHQUpGLFVBQ0UsR0FFRSxHQUZGLFVBQ0csR0FBcUIsRUFBa0IsSUFBSSxPQUFPLGNBQWMsRUFDakUsRUFDRixFQUNGLEdBWUUsTUFaRixDQUFLLFVBQVUsaUJBQWYsU0FDRyxHQUNDLEVBQWtCLE9BQU8sSUFBSSxDQUFDLElBQVUsQ0FDdEMsT0FDRSxHQUFDLEdBQUQsQ0FDRSxVQUFXLDRCQUE0QixFQUFNLEtBRTdDLE1BQU8sRUFDUCxVQUFVLDBCQUZMLEVBQU0sRUFHYixFQUVILEVBQ0gsR0FDRixFQUNGLEdDeEVOLDBCQUFTLGFBQWlCLHNCQUMxQixrQkFBZ0Isd0RBU1QsSUFBTSxHQUEwQyxFQUFHLGVBQWdCLENBQ3hFLElBQ0UsaUJBQ0EsZ0JBQ0EsbUJBQ0EsdUJBQ0UsRUFBbUIsRUFHakIsRUFBVyxHQUFRLElBQU0sQ0FDN0IsSUFBTSxFQUFPLEVBQU0sY0FBYyxFQUFFLElBQUksQ0FBQyxJQUFRLEVBQUksWUFBWSxDQUFDLEVBR2pFLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBZ0IsSUFBSyxDQUN2QyxJQUFNLEVBQVksRUFBSyxNQUFNLEVBQzdCLEdBQUksRUFDRixFQUFLLEtBQUssQ0FBUyxFQUl2QixNQUFPLENBQUUsTUFBSyxHQUViLENBQUMsRUFBZ0IsQ0FBYSxDQUFDLEVBRWxDLE9BQ0UsR0E0QkUsTUE1QkYsQ0FDRSxVQUFXLEVBQ1QsNEJBQ0EsR0FBb0Isb0JBQ3BCLEVBQ0EsQ0FDRixFQUNBLGNBQVksZUFQZCxTQVNHLEVBQVMsS0FBSyxJQUFJLENBQUMsRUFBUyxJQUMzQixHQWdCRSxHQWhCRixDQUErQixLQUFLLE9BQXBDLFNBQ0UsR0FjRSxHQUFPLElBZFQsQ0FFRSxRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxFQUM5QixRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsQ0FBRSxFQUM1QixLQUFNLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxFQUMzQixXQUFZLENBQ1YsU0FBVSxLQUNWLEtBQU0sWUFDTixNQUFPLEVBQVEsSUFDakIsRUFDQSxVQUFVLHVEQUNWLGNBQWEsa0JBQWtCLElBWGpDLFNBYUUsR0FBZ0QsT0FBaEQsQ0FBTSxVQUFVLHFCQUFoQixTQUFzQyxFQUFVLEdBWjNDLENBYUwsR0Fma0IsQ0FnQnBCLENBQ0gsRUFDRCxHQ3JDQyxJQUFNLEdBQXNCLEVBQ2pDLE9BQ0EsU0FDQSxlQUNBLGtCQUFrQixHQUNsQixXQUFXLFNBQ21CLENBQzlCLElBQU0sRUFBVyxFQUFLLEdBQUcsUUFBUSxLQUFLLEVBQ2hDLEVBQVUsRUFBSyxHQUFHLEVBQUUsRUFBRSxNQUFNLEtBQUssRUFDakMsRUFBVyxFQUFLLE9BR2hCLEVBQWlCLEVBQU8sT0FBTyxDQUFDLElBQU0sRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFPLENBQVEsRUFBSSxDQUFDLEVBQ3ZFLEVBQWtCLEVBQU8sT0FDN0IsQ0FBQyxJQUFNLEVBQUUsSUFBSSxLQUFLLEVBQUUsTUFBTyxDQUFRLElBQU0sQ0FDM0MsRUFHTSxFQUFpQixDQUFDLEdBQUcsQ0FBYyxFQUFFLEtBQUssQ0FBQyxFQUFHLElBQU0sQ0FDeEQsSUFBTSxFQUFZLEVBQUUsTUFBTSxLQUFLLEVBQUUsS0FBSyxFQUN0QyxHQUFJLElBQWMsRUFDaEIsT0FBTyxFQUVULE9BQU8sRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUksRUFBRSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQ2hELEVBR0ssRUFBa0IsQ0FBQyxHQUFHLENBQWUsRUFBRSxLQUFLLENBQUMsRUFBRyxJQUNwRCxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FDdEIsRUFHTSxFQUE0RCxDQUFDLEVBQ25FLFFBQVMsRUFBTSxFQUFHLEVBQU0sRUFBYyxJQUFPLENBQzNDLEVBQUssR0FBTyxDQUFDLEVBQ2IsUUFBUyxFQUFNLEVBQUcsRUFBTSxFQUFVLElBQ2hDLEVBQUssR0FBSyxHQUFPLENBQUUsTUFBTyxHQUFPLE1BQU8sSUFBSyxFQUlqRCxJQUFNLEVBQXFDLENBQUMsRUFHNUMsUUFBVyxLQUFTLEVBQWdCLENBQ2xDLElBQU0sRUFBYSxFQUFNLElBQUksRUFBTSxNQUFNLFFBQVEsQ0FBUSxFQUFHLENBQVEsRUFDOUQsRUFDSixJQUFhLE9BQVMsRUFBTSxJQUFJLFNBQVMsRUFBRyxRQUFRLEVBQUksRUFBTSxJQUMxRCxFQUFXLEVBQU0sSUFBSSxFQUFZLFFBQVEsQ0FBUSxFQUFHLENBQU8sRUFDM0QsRUFBVyxLQUFLLElBQUksRUFBRyxFQUFXLEtBQUssRUFBVSxDQUFRLENBQUMsRUFDMUQsRUFBUyxLQUFLLElBQUksRUFBVyxFQUFHLEVBQVMsS0FBSyxFQUFVLENBQVEsQ0FBQyxFQUdqRSxFQUFtQixFQUFNLE1BQU0sUUFBUSxDQUFRLEVBQUUsU0FBUyxDQUFRLEVBQ2xFLEVBQWlCLEVBQU0sSUFBSSxRQUFRLENBQVEsRUFBRSxRQUFRLENBQU8sRUFHOUQsRUFBcUIsR0FHckIsRUFBYyxHQUNsQixRQUFTLEVBQU0sRUFBRyxFQUFNLEVBQWMsSUFBTyxDQUMzQyxJQUFJLEVBQVcsR0FDZixRQUFTLEVBQU0sRUFBVSxHQUFPLEVBQVEsSUFDdEMsR0FBSSxFQUFLLEdBQUssR0FBSyxNQUFPLENBQ3hCLEVBQVcsR0FDWCxNQUdKLEdBQUksRUFBVSxDQUNaLEVBQWMsRUFDZCxPQUtKLEdBQUksSUFBZ0IsR0FBSSxDQUN0QixRQUFTLEVBQU0sRUFBVSxHQUFPLEVBQVEsSUFDdEMsRUFBSyxHQUFhLEdBQU8sQ0FBRSxNQUFPLEdBQU0sT0FBTSxFQUloRCxJQUFNLEVBQVcsRUFBUyxFQUFXLEVBQ3JDLEVBQWdCLEtBQUssQ0FDbkIsS0FBTyxFQUFXLEVBQVksSUFDOUIsTUFBUSxFQUFXLEVBQVksSUFDL0IsSUFDRSxFQUNBLEdBQ0EsR0FBZSxHQUFtQixJQUNwQyxPQUFRLEdBQ1IsU0FBVSxLQUNQLEVBQ0gsbUJBQ0EsZ0JBQ0YsQ0FBb0IsRUFDcEIsRUFBcUIsR0FJdkIsR0FBSSxDQUFDLEVBQ0gsUUFDTSxFQUFjLEVBQVcsRUFDN0IsR0FBZSxFQUNmLElBQ0EsQ0FFQSxJQUFJLEVBQXVCLEdBQzNCLFFBQVMsRUFBTSxFQUFHLEVBQU0sRUFBYyxJQUFPLENBQzNDLElBQUksRUFBVyxHQUNmLFFBQVMsRUFBTSxFQUFhLEdBQU8sRUFBUSxJQUN6QyxHQUFJLEVBQUssR0FBSyxHQUFLLE1BQU8sQ0FDeEIsRUFBVyxHQUNYLE1BR0osR0FBSSxFQUFVLENBQ1osRUFBdUIsRUFDdkIsT0FLSixHQUFJLElBQXlCLEdBQUksQ0FDL0IsUUFBUyxFQUFNLEVBQWEsR0FBTyxFQUFRLElBQ3pDLEVBQUssR0FBc0IsR0FBTyxDQUFFLE1BQU8sR0FBTSxPQUFNLEVBSXpELElBQU0sRUFBb0IsRUFBUyxFQUFjLEVBQ2pELEVBQWdCLEtBQUssQ0FDbkIsS0FBTyxFQUFjLEVBQVksSUFDakMsTUFBUSxFQUFvQixFQUFZLElBQ3hDLElBQ0UsRUFDQSxHQUNBLEdBQXdCLEdBQW1CLElBQzdDLE9BQVEsR0FDUixTQUFVLEtBQ1AsRUFDSCxpQkFBa0IsR0FDbEIsZ0JBQ0YsQ0FBb0IsRUFDcEIsRUFBcUIsR0FDckIsUUFPUixRQUFXLEtBQVMsRUFBaUIsQ0FDbkMsSUFBTSxFQUFhLEVBQU0sSUFBSSxFQUFNLE1BQU0sUUFBUSxDQUFRLEVBQUcsQ0FBUSxFQUU5RCxFQUFNLEtBQUssSUFDZixFQUNBLEtBQUssSUFBSSxFQUFXLEVBQUcsRUFBVyxLQUFLLEVBQVUsQ0FBUSxDQUFDLENBQzVELEVBR00sRUFBbUIsR0FDbkIsRUFBaUIsR0FHbkIsRUFBYyxHQUNsQixRQUFTLEVBQU0sRUFBRyxFQUFNLEVBQWMsSUFDcEMsR0FBSSxDQUFDLEVBQUssR0FBSyxHQUFLLE1BQU8sQ0FDekIsRUFBYyxFQUNkLE1BS0osR0FBSSxJQUFnQixHQUNsQixFQUFLLEdBQWEsR0FBTyxDQUFFLE1BQU8sR0FBTSxPQUFNLEVBRzlDLEVBQWdCLEtBQUssQ0FDbkIsS0FBTyxFQUFNLEVBQVksSUFDekIsTUFBUSxFQUFJLEVBQVksSUFDeEIsSUFDRSxFQUNBLEdBQ0EsR0FBZSxHQUFtQixJQUNwQyxPQUFRLEdBQ1IsU0FBVSxLQUNQLEVBQ0gsaUJBM0JxQixHQTRCckIsZUEzQm1CLEVBNEJyQixDQUFvQixFQUl4QixPQUFPLEdDdk5ULGtCQUFTLGVBUUYsSUFBTSxHQUF5QixFQUNwQyxPQUNBLFNBQ0EscUJBQ2lDLENBQ2pDLElBQVEsd0JBQXVCLGdCQUFpQixFQUFtQixFQUU3RCxFQUFZLEVBQUssR0FBRyxRQUFRLEtBQUssRUFDakMsRUFBVSxFQUFLLEdBQUcsRUFBRSxFQUFFLE1BQU0sS0FBSyxFQXlCdkMsT0F0QnlCLEdBQVEsSUFBTSxDQUNyQyxJQUFJLEVBQVMsRUFBc0IsRUFBVyxDQUFPLEVBQ3JELEdBQUksRUFDRixFQUFTLEVBQU8sT0FBTyxDQUFDLElBQU0sRUFBRSxNQUFNLEVBR3hDLE9BQU8sR0FBb0IsQ0FDekIsT0FDQSxTQUNBLGVBQ0EsaUJBQ0YsQ0FBQyxHQUNBLENBQ0QsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDRixDQUFDLEdDdENILGVBQVMsd0RBUVQsSUFBTSxHQUFrRCxFQUN0RCxPQUNBLFNBQ0EscUJBQ0ksQ0FDSixJQUFNLEVBQVksRUFBSyxHQUNqQixFQUFzQixHQUF1QixDQUNqRCxPQUNBLFNBQ0EsaUJBQ0YsQ0FBQyxFQUVELE9BQ0UsR0F3QkUsTUF4QkYsQ0FBSyxVQUFVLGdFQUFmLFNBQ0csRUFBb0IsSUFBSSxDQUFDLElBQVUsQ0FDbEMsSUFBTSxFQUFXLEdBQUcsRUFBTSxNQUFNLEVBQU0sWUFBWSxFQUFVLFlBQVksSUFFeEUsT0FDRSxHQWdCRSxNQWhCRixDQUVFLFVBQVUsa0RBQ1YsTUFBTyxDQUNMLEtBQU0sUUFBUSxFQUFNLGlDQUNwQixNQUFPLFFBQVEsRUFBTSwrQkFDckIsSUFBSyxHQUFHLEVBQU0sUUFDZCxPQUFRLEdBQUcsTUFDYixFQUNBLGNBQWEsMEJBQTBCLEVBQU0sS0FUL0MsU0FXRSxHQUFDLEdBQUQsQ0FDRSxVQUFXLEVBQ1gsTUFBTyxFQUNQLFVBQVUsdUJBQ1osR0FkSyxHQUFHLFdBZVIsRUFFTCxFQUNELEdBSUEsR0FBMEIsR0FBSyxFQUFlLEVDcERwRCxtR0FTQSxTQUFTLEVBQVUsRUFDakIsWUFDQSxXQUNBLG1CQUNHLEdBQ2UsQ0FDbEIsT0FDRSxHQWlCc0IsUUFqQnRCLENBQ0UsWUFBVSxjQUNWLFVBQVcsRUFBRyxXQUFZLENBQVMsS0FDL0IsRUFITixTQWlCRSxDQVpBLEdBU3NCLFlBVHRCLElBQ00sRUFDSixZQUFVLHVCQUNWLFVBQVcsRUFDVCxxSkFDQSxHQUFlLFNBQ2pCLEVBTkYsU0FRRyxFQUNELEVBQ0YsR0FBQyxHQUFELEVBQVcsRUFDWCxHQUFxQixVQUFyQixFQUE0QixHQUM1QixFQUlOLFNBQVMsRUFBUyxFQUNoQixZQUNBLGNBQWMsY0FDWCxHQUNvRSxDQUN2RSxPQUNFLEdBaUJzQix1QkFqQnRCLENBQ0UsWUFBVSx3QkFDVixZQUFhLEVBQ2IsVUFBVyxFQUNULHFEQUNBLElBQWdCLFlBQ2QsNkNBQ0YsSUFBZ0IsY0FDZCwrQ0FDRixDQUNGLEtBQ0ksRUFYTixTQWFFLEdBQXFCLG1CQUFyQixDQUNFLFlBQVUsb0JBQ1YsVUFBVSx5Q0FDWixFQUNBLEVDM0ROLHNCQ0NBLHVCQUFTLGdFQW1CRixTQUFTLEVBQWEsRUFDM0IsS0FDQSxPQUNBLE9BQ0EsT0FDQSxTQUNBLGFBQ0EsU0FDQSxXQUNBLFlBQ0EsUUFDQSxjQUFlLEVBQ2YsV0FBVyxJQUNVLENBQ3JCLElBQVEsY0FBYSxxQkFBb0Isb0JBQ3ZDLEVBQXdCLENBQUMsS0FBVyxDQUNsQyxZQUFhLEVBQU0sWUFDbkIsbUJBQW9CLEVBQU0sbUJBQzFCLGlCQUFrQixFQUFNLGdCQUMxQixFQUFFLEdBRUksU0FBUSxjQUFlLEdBQWEsQ0FDMUMsS0FDQSxLQUFNLENBQ0osT0FDQSxPQUNBLE9BQ0EsU0FDQSxhQUNBLFFBQ0YsRUFDQSxTQUFVLEdBQXNCLENBQ2xDLENBQUMsRUFFSyxFQUFrQixDQUFDLElBQXdCLENBRy9DLEdBRkEsRUFBRSxnQkFBZ0IsRUFFZCxHQUFvQixFQUN0QixPQUdGLElBQU0sRUFBUSxFQUFLLEtBQUssR0FBUSxDQUFDLEVBQUUsT0FBTyxHQUFVLENBQUMsRUFDakQsRUFBTSxFQUFNLE1BQU0sRUFDdEIsR0FBSSxJQUFTLFFBQWEsSUFBVyxPQUNuQyxFQUFNLEVBQUksS0FBSyxDQUFJLEVBQUUsT0FBTyxFQUFTLEVBQUUsRUFDbEMsUUFBSSxJQUFTLE9BQ2xCLEVBQU0sRUFBSSxLQUFLLEVBQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUVqQyxPQUFNLEVBQUksS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBRzlCLEVBQVksQ0FBRSxRQUFPLE1BQUssWUFBVyxDQUFDLEdBR3hDLE9BRUUsR0FhRSxNQWJGLENBQ0UsSUFBSyxFQUNMLGNBQWEsRUFDYixVQUFXLEVBQ1QsRUFDQSxHQUFVLENBQUMsR0FBc0IsQ0FBQyxHQUFZLFlBQzlDLEdBQW9CLEVBQVcsaUJBQW1CLGlCQUNsRCxHQUFZLHdEQUNkLEVBQ0EsUUFBUyxFQUNULE1BQU8sRUFWVCxTQVlHLEVBQ0QsRUN4Rk4sSUFBTSxHQUEwQyxDQUM5QyxPQUFRLEVBQ1IsT0FBUSxFQUNSLFFBQVMsRUFDVCxVQUFXLEVBQ1gsU0FBVSxFQUNWLE9BQVEsRUFDUixTQUFVLENBQ1osRUFTYSxHQUFnQixDQUMzQixFQUNBLElBQ1ksQ0FDWixHQUFJLENBQUMsRUFDSCxNQUFPLEdBSVQsR0FBSSxFQUFjLFdBQ2hCLE9BQU8sRUFBYyxXQUFXLEtBQUssQ0FBQyxJQUFNLEdBQWMsS0FBTyxFQUFLLElBQUksQ0FBQyxFQUc3RSxNQUFPLElBZ0JJLEdBQWlCLEVBQzVCLE9BQ0EsT0FDQSxTQUFTLEVBQ1QsbUJBQ29DLENBRXBDLEdBQUksQ0FBQyxHQUFjLEVBQU0sQ0FBYSxFQUNwQyxNQUFPLEdBSVQsR0FBSSxDQUFDLEVBQ0gsTUFBTyxHQUtULEdBQUksSUFBUyxPQUNYLE1BQU8sR0FHVCxJQUFNLEVBQVMsRUFLVCxFQUFTLEVBQU8sV0FBYSxFQUM3QixFQUFPLEVBQU8sU0FBVyxHQUV6QixFQUFpQixFQUFPLEdBQUssRUFDN0IsRUFBZSxFQUFTLEdBQ3hCLEVBQWEsRUFBTyxHQUUxQixHQUFJLEVBQWlCLEdBQWdCLEdBQWtCLEVBQ3JELE1BQU8sR0FHVCxNQUFPLHVFRnRFRixJQUFNLEdBQWtDLEVBQzdDLFFBQ0EsTUFDQSxZQUFZLE1BQ1IsQ0FDSixJQUFNLEVBQXFCLEdBQU0sT0FJOUIsSUFBSSxHQUVMLGdCQUNBLHdCQUNBLGNBQ0EsaUJBQ0EsZUFBZSxFQUNmLElBQ0EsaUJBQ0UsRUFBbUIsRUFDakIsRUFBYyxFQUNsQixFQUFJLFFBQVEsS0FBSyxFQUNqQixFQUFJLE1BQU0sS0FBSyxDQUNqQixFQU9JLEVBSm9CLEVBQVksUUFBUSxPQUFPLEVBSUYsTUFBTSxFQUN2RCxNQUFPLEVBQTJCLElBQUksSUFBTSxFQUMxQyxFQUE2QixFQUEyQixTQUFTLEVBQUcsS0FBSyxFQUkzRSxJQUFNLEVBQWdCLENBQUMsRUFBa0IsSUFBNEIsQ0FDbkUsRUFBbUIsU0FBUyxxQkFBcUIsQ0FDL0MsTUFDQSxRQUNGLENBQUMsRUFDRCxFQUFtQixTQUFTLEtBQUssR0FHN0IsRUFBVSxFQUFJLE9BQU8sRUFBTSxFQUFHLEtBQUssRUFDbkMsRUFBaUIsRUFBSSxNQUFNLElBQU0sRUFBWSxNQUFNLEVBQ25ELEVBQWUsSUFBVSxFQUV6QixFQUFvQixFQUFZLE9BQVMsRUFDekMsRUFBa0IsRUFBb0IsRUFFdEMsRUFBYSxHQUFlLENBQ2hDLEtBQU0sRUFDTixlQUNGLENBQUMsRUFFRCxPQUNFLGdCQW1FRSxDQWxFQSxHQThERSxHQTlERixDQUNFLEdBQUksWUFBWSxFQUFJLE9BQU8sWUFBWSxJQUN2QyxLQUFLLFdBQ0wsY0FBYSxZQUFZLEVBQUksT0FBTyxZQUFZLElBQ2hELEtBQU0sRUFDTixVQUFXLEVBQ1QsZ0VBQ0EsQ0FBQyxHQUFrQixxQ0FDbkIsR0FBZ0IsYUFDaEIsQ0FDRixFQUNBLFNBQVUsQ0FBQyxFQVhiLFNBZ0JFLEdBNkNFLE1BN0NGLENBQUssVUFBVSxzQkFBZixTQTZDRSxDQTNDQSxHQVNFLE1BVEYsQ0FDRSxVQUFXLEVBQ1QsOEVBQ0EsR0FBVyxnREFDYixFQUpGLFNBTUcsS0FBSyxlQUFlLEVBQWUsQ0FBRSxJQUFLLFNBQVUsQ0FBQyxFQUFFLE9BQ3RELEVBQUksT0FBTyxDQUNiLEVBQ0EsRUFHRCxFQUFZLE1BQU0sRUFBRyxDQUFZLEVBQUUsSUFBSSxDQUFDLEVBQU8sSUFDOUMsR0FBQyxNQUFELENBRUUsVUFBVSxrQkFDVixjQUFhLEdBQU8sT0FGZixTQUFTLEdBR2hCLENBQ0QsRUFHQSxHQUNDLEdBbUJFLE1BbkJGLENBQ0UsVUFBVSwyR0FDVixRQUFTLENBQUMsSUFBTSxDQUNkLEVBQUUsZ0JBQWdCLEVBRWxCLEVBQWMsRUFBSyxDQUFXLEdBRWhDLFVBQVcsQ0FBQyxJQUFNLENBQ2hCLEdBQUksRUFBRSxNQUFRLFNBQVcsRUFBRSxNQUFRLElBQ2pDLEVBQUUsZUFBZSxFQUNqQixFQUFFLGdCQUFnQixFQUNsQixFQUFjLEVBQUssQ0FBVyxHQUdsQyxTQUFVLEVBRVYsS0FBSyxTQWhCUCxTQW1CRSxDQW5CRixJQWtCSSxFQWxCSixJQWtCd0IsRUFBRSxNQUFNLEdBQzlCLEdBRUosRUFDRixFQUdGLEdBQUMsR0FBRCxDQUFnQixJQUFLLEVBQW9CLEdBQ3pDLHVEcEJqSUMsSUFBTSxHQUFzQyxFQUFHLGVBQWUsS0FBUSxDQUMzRSxJQUFNLEVBQXFCLEdBQU0sT0FJOUIsSUFBSSxHQUVDLGNBQWEsa0JBQW1CLEVBQW1CLEVBRXJELEVBQVEsR0FDWixJQUFNLEdBQWMsRUFBYSxDQUFjLEVBQy9DLENBQUMsRUFBYSxDQUFjLENBQzlCLEVBRUEsT0FDRSxHQTRDRSxNQTVDRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksYUFBbEQsU0E0Q0UsQ0EzQ0EsR0FBQyxHQUFELENBQWEsVUFBVSxXQUFXLEVBRWxDLEdBc0NFLEdBdENGLENBQ0UsVUFBVSxvQ0FDVixjQUFZLG9CQUNaLGNBQWUsQ0FBRSxVQUFXLGlDQUFrQyxFQUhoRSxTQUtFLEdBZ0NFLEdBaENGLENBQWlCLEtBQUssT0FBdEIsU0FDRSxHQThCRSxHQUFPLElBOUJULENBRUUsUUFBUyxDQUFFLFFBQVMsQ0FBRSxFQUN0QixRQUFTLENBQUUsUUFBUyxDQUFFLEVBQ3RCLEtBQU0sQ0FBRSxRQUFTLENBQUUsRUFDbkIsV0FBWSxDQUFFLFNBQVUsS0FBTSxLQUFNLFdBQVksRUFDaEQsVUFBVSxvRUFDVixjQUFZLHNCQVBkLFNBU0csRUFBTSxJQUFJLENBQUMsRUFBTSxJQUNoQixHQWtCRSxNQWxCRixDQUVFLFVBQVUsdUNBQ1YsY0FBYSxZQUFZLElBSDNCLFNBa0JFLENBYkMsRUFBSyxJQUFJLENBQUMsRUFBSyxJQUNkLEdBQUMsR0FBRCxDQUVFLE1BQU8sRUFDUCxJQUFLLEVBQ0wsYUFBYyxFQUNkLFVBQVUsb0NBSkwsRUFBSSxPQUFPLFlBQVksQ0FLOUIsQ0FDRCxFQUVELEdBRUUsTUFGRixDQUFLLFVBQVUsNENBQWYsU0FDRSxHQUFDLEdBQUQsQ0FBaUIsS0FBTSxFQUFNLEVBQzdCLElBaEJHLFFBQVEsR0FpQmIsQ0FDSCxHQTVCSSxFQUFZLE9BQU8sWUFBWSxDQTZCcEMsRUFDRixFQUNGLEVBRUYsR0FBQyxHQUFELENBQWdCLElBQUssRUFBb0IsR0FDekMsR3VCcEVOLDRGQ0tPLElBQU0sR0FBMEIsSUFBTSxDQUMzQyxJQUFRLGNBQWEsaUJBQWdCLElBQUcsaUJBQWtCLEVBQW1CLEVBRXZFLEVBQVcsRUFBWSxFQUFhLENBQWMsRUFFeEQsT0FDRSxHQWdDRSxNQWhDRixDQUNFLFVBQVUseUVBQ1YsY0FBWSxtQkFGZCxTQWdDRSxDQTNCQSxHQUlFLE1BSkYsQ0FBSyxVQUFVLDhFQUFmLFNBQ0UsR0FFRSxPQUZGLENBQU0sVUFBVSxpRUFBaEIsU0FDRyxFQUFFLFFBQVEsRUFDWCxFQUNGLEVBR0QsRUFBUyxJQUFJLENBQUMsSUFBUSxDQUNyQixJQUFNLEVBQWEsR0FBZSxDQUFFLEtBQU0sRUFBSyxlQUFjLENBQUMsRUFFOUQsT0FDRSxHQUFDLEdBQUQsQ0FFRSxHQUFJLGdCQUFnQixFQUFJLE9BQU8sWUFBWSxJQUMzQyxLQUFLLFdBQ0wsS0FBTSxFQUNOLE9BQVEsR0FDUixTQUFVLENBQUMsRUFDWCxVQUFVLGtFQU5MLFdBQVcsRUFBSSxPQUFPLFlBQVksR0FPekMsRUFFSCxFQUdELEdBRUUsTUFGRixDQUFLLFVBQVUsK0NBQWYsU0FDRSxHQUFDLEdBQUQsQ0FBaUIsS0FBTSxFQUFVLGdCQUFpQixFQUFHLE9BQU0sR0FBQyxFQUM1RCxHQUNGLEdDekNOLDBCQUFTLGFBQWlCLDBFQU9uQixJQUFNLEdBQXdDLEVBQUcsZUFBZ0IsQ0FDdEUsSUFDRSxjQUNBLGdCQUNBLGFBQ0EsZ0JBQ0EsaUJBQ0EsbUJBQ0Esc0JBQ0EsS0FDRSxFQUFtQixFQUVqQixFQUFXLEVBQVksRUFBYSxDQUFjLEVBRXhELE9BRUUsR0EwREUsTUExREYsQ0FDRSxVQUFXLEVBQ1QsZ0VBQ0EsR0FBb0Isb0JBQ3BCLEVBQ0EsQ0FDRixFQUNBLGNBQVksY0FQZCxTQTBERSxDQWhEQSxHQUtFLE1BTEYsQ0FBSyxVQUFVLDZFQUFmLFNBQ0UsR0FHRSxNQUhGLENBQUssVUFBVSw0Q0FBZixTQUdFLENBRkEsR0FBNkQsT0FBN0QsQ0FBTSxVQUFVLGdDQUFoQixTQUFpRCxFQUFFLE1BQU0sRUFBSSxFQUM3RCxHQUFvRCxPQUFwRCxDQUFNLFVBQVUsY0FBaEIsU0FBK0IsRUFBWSxLQUFLLEVBQUksR0FDcEQsRUFDRixFQUdELEVBQVMsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM1QixJQUFNLEVBQVUsRUFBSSxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBRXpDLE9BQ0UsR0FpQ0UsR0FqQ0YsQ0FBZ0QsS0FBSyxPQUFyRCxTQUNFLEdBK0JFLEdBQU8sSUEvQlQsQ0FFRSxRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxFQUM5QixRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsQ0FBRSxFQUM1QixLQUFNLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxFQUMzQixXQUFZLENBQ1YsU0FBVSxLQUNWLEtBQU0sWUFDTixNQUFPLEVBQVEsSUFDakIsRUFDQSxVQUFXLEVBQ1QsaUZBQ0EsR0FBVyx5QkFDYixFQUNBLFFBQVMsSUFBTSxDQUNiLEVBQVcsQ0FBRyxFQUNkLEVBQWMsQ0FBRSxNQUFPLENBQUksQ0FBQyxHQUU5QixjQUFhLG1CQUFtQixFQUFJLE9BQU8sTUFBTSxFQUFFLFlBQVksSUFsQmpFLFNBK0JFLENBWEEsR0FBeUQsTUFBekQsQ0FBSyxVQUFVLHFCQUFmLFNBQXFDLEVBQUksT0FBTyxLQUFLLEVBQUksRUFDekQsR0FTRSxNQVRGLENBQ0UsVUFBVyxFQUNULHNHQUNBLEdBQVcsb0NBQ2IsRUFKRixTQU1HLEtBQUssZUFBZSxFQUFlLENBQUUsSUFBSyxTQUFVLENBQUMsRUFBRSxPQUN0RCxFQUFJLE9BQU8sQ0FDYixFQUNBLElBN0JHLEVBQUksT0FBTyxZQUFZLENBOEI1QixHQWhDa0IsRUFBSSxPQUFPLFlBQVksQ0FpQzNDLEVBRUwsR0FDRCxHQ25GTixrQkFBUyxlQWVGLElBQU0sR0FBd0IsRUFBRyxTQUFzQyxDQUM1RSxJQUFRLHlCQUEwQixFQUFtQixFQXNJckQsT0FwSW9CLEdBQTJCLElBQU0sQ0FDbkQsSUFBSSxFQUFlLEVBQ2pCLEVBQUksUUFBUSxLQUFLLEVBQ2pCLEVBQUksTUFBTSxLQUFLLENBQ2pCLEVBT0EsR0FKQSxFQUFlLEVBQ1osT0FBTyxDQUFDLElBQU0sQ0FBQyxFQUFFLE1BQU0sRUFDdkIsU0FBUyxDQUFDLEVBQUcsSUFBTSxFQUFFLE1BQU0sS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUV2QyxFQUFhLFNBQVcsRUFDMUIsTUFBTyxDQUFDLEVBSVYsSUFBTSxFQUE4QixDQUFDLEVBQ2pDLEVBQWtDLENBQUMsRUFDbkMsRUFBbUMsS0FDdkMsUUFBVyxLQUFTLEVBQWMsQ0FDaEMsR0FBSSxHQUFnQixFQUFNLE1BQU0sY0FBYyxDQUFZLEVBQUcsQ0FDM0QsR0FBSSxFQUFlLE9BQVMsRUFDMUIsRUFBUyxLQUFLLENBQWMsRUFFOUIsRUFBaUIsQ0FBQyxFQUVwQixFQUFlLEtBQUssQ0FBSyxFQUN6QixFQUFlLEVBQ1gsRUFBTSxJQUFJLEVBQWMsRUFBTSxHQUFHLEVBQ2pDLEVBQU0sSUFFWixHQUFJLEVBQWUsT0FBUyxFQUMxQixFQUFTLEtBQUssQ0FBYyxFQUk5QixJQUFNLEVBQXFDLENBQUMsRUFDNUMsUUFBVyxLQUFXLEVBQVUsQ0FDOUIsR0FBSSxFQUFRLFNBQVcsRUFBRyxDQUV4QixJQUFNLEVBQVEsRUFBUSxHQUNoQixFQUFZLEVBQU0sTUFBTSxLQUFLLEVBQUksRUFBTSxNQUFNLE9BQU8sRUFBSSxHQUMxRCxFQUFVLEVBQU0sSUFBSSxLQUFLLEVBQUksRUFBTSxJQUFJLE9BQU8sRUFBSSxHQUN0RCxHQUFJLEVBQVUsRUFFWixFQUFVLEdBRVosSUFBTSxFQUFnQixFQUFVLEVBQzFCLEVBQU8sRUFBWSxHQUFNLElBQ3pCLEVBQVUsRUFBZ0IsR0FBTSxJQUN0QyxFQUFnQixLQUFLLElBQUssRUFBTyxLQUFNLEVBQUcsTUFBTyxJQUFLLE1BQUssUUFBTyxDQUFDLEVBQ25FLFNBS0YsSUFBTSxFQUFlLENBQUMsR0FBRyxDQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUcsSUFBTSxDQUMvQyxJQUFNLEVBQVksRUFBRSxJQUFJLEtBQUssRUFBRSxNQUFPLFFBQVEsRUFDeEMsRUFBWSxFQUFFLElBQUksS0FBSyxFQUFFLE1BQU8sUUFBUSxFQUc5QyxHQUFJLElBQWMsRUFDaEIsT0FBTyxFQUFZLEVBSXJCLE9BQU8sRUFBRSxNQUFNLEtBQUssRUFBRSxLQUFLLEVBQzVCLEVBR0ssRUFBYyxFQUFhLE9BSTdCLEVBQ0osR0FBSSxJQUFnQixFQUNsQixFQUFZLEdBQ1AsUUFBSSxJQUFnQixFQUN6QixFQUFZLEdBQ1AsUUFBSSxJQUFnQixFQUN6QixFQUFZLEdBRVosT0FBWSxHQUdkLElBQU0sRUFBaUIsRUFBYyxFQUFJLEdBQWEsRUFBYyxHQUFLLEVBRXpFLFFBQVMsRUFBSSxFQUFHLEVBQUksRUFBYSxPQUFRLElBQUssQ0FDNUMsSUFBTSxFQUFRLEVBQWEsR0FDckIsRUFBWSxFQUFNLE1BQU0sS0FBSyxFQUFJLEVBQU0sTUFBTSxPQUFPLEVBQUksR0FDMUQsRUFBVSxFQUFNLElBQUksS0FBSyxFQUFJLEVBQU0sSUFBSSxPQUFPLEVBQUksR0FFdEQsR0FBSSxFQUFVLEVBRVosRUFBVSxHQUdaLElBQU0sRUFBZ0IsRUFBVSxFQUMxQixFQUFPLEVBQVksR0FBTSxJQUN6QixFQUFVLEVBQWdCLEdBQU0sSUFHbEMsRUFDQSxFQUNBLEVBRUosR0FBSSxJQUFNLEVBRVIsRUFBTyxFQUNQLEVBQVEsSUFDUixFQUFTLEVBR1QsT0FBTyxFQUFpQixFQUN4QixFQUFRLElBQU0sRUFDZCxFQUFTLEVBQUksRUFHZixFQUFnQixLQUFLLElBQ2hCLEVBQ0gsT0FDQSxRQUNBLE1BQ0EsU0FDQSxRQUNGLENBQUMsR0FJTCxPQUFPLEdBQ04sQ0FBQyxFQUFLLENBQXFCLENBQUMsNENDNUkxQixJQUFNLEdBQWdELEVBQzNELE1BQ0EsY0FBZSxLQUNYLENBQ0osSUFBTSxFQUFjLEdBQXNCLENBQUUsS0FBSSxDQUFDLEVBRWpELE9BQ0UsR0E2QkUsTUE3QkYsQ0FDRSxjQUFhLEVBQ2IsVUFBVSw0Q0FGWixTQUlHLEVBQVksSUFBSSxDQUFDLEVBQU8sSUFBVSxDQUNqQyxJQUFNLEVBQVcsU0FBUyxFQUFNLE1BQU0sS0FBUyxFQUFJLFlBQVksSUFDekQsRUFBZSxFQUFNLElBQUksS0FBSyxFQUFNLE1BQU8sUUFBUSxHQUFLLEdBRTlELE9BQ0UsR0FpQkUsTUFqQkYsQ0FFRSxVQUFVLFdBQ1YsTUFBTyxDQUNMLEtBQU0sR0FBRyxFQUFNLFFBQ2YsTUFBTyxRQUFRLEVBQU0sK0JBQ3JCLElBQUssR0FBRyxFQUFNLE9BQ2QsT0FBUSxHQUFHLEVBQU0sU0FDbkIsRUFSRixTQVVFLEdBQUMsR0FBRCxDQUNFLFVBQVcsRUFDWCxNQUFPLEVBQ1AsVUFBVyxFQUFHLCtCQUFnQyxDQUM1QywrQkFBZ0MsQ0FDbEMsQ0FBQyxFQUNILEdBZkssR0FBRyxXQWdCUixFQUVMLEVBQ0QsdURDdENOLElBQU0sR0FBUSxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQ3pELEVBQU0sRUFBRSxLQUFLLENBQUksRUFBRSxPQUFPLENBQUMsQ0FDN0IsRUFNYSxHQUF3QyxFQUFHLFNBQVUsQ0FDaEUsSUFBUSxpQkFBa0IsRUFBbUIsRUFFN0MsT0FDRSxHQW9DRSxNQXBDRixDQUNFLGNBQWEsZ0JBQWdCLEVBQUksT0FBTyxZQUFZLElBQ3BELFVBQVUsaURBRlosU0FvQ0UsQ0FoQ0MsR0FBTSxJQUFJLENBQUMsSUFBUyxDQUNuQixJQUFNLEVBQU8sRUFBSyxLQUFLLEVBQ2pCLEVBQVUsRUFBSyxPQUFPLElBQUksRUFDMUIsRUFBVSxFQUFJLE9BQU8sWUFBWSxFQUNqQyxFQUFhLEdBQWUsQ0FDaEMsS0FBTSxFQUNOLE9BQ0EsT0FBUSxFQUNSLGVBQ0YsQ0FBQyxFQUVELE9BQ0UsR0FBQyxHQUFELENBRUUsR0FBSSxrQkFBa0IsS0FBVyxJQUNqQyxLQUFLLFlBQ0wsS0FBTSxFQUNOLEtBQU0sRUFDTixTQUFVLENBQUMsRUFDWCxjQUFhLGtCQUFrQixLQUFXLElBQzFDLFVBQVcsRUFDVCxnRUFDRixHQVRLLEdBQUcsS0FBVyxHQVVyQixFQUVILEVBR0QsR0FBQyxHQUFELENBQ0UsY0FBYSxtQkFBbUIsRUFBSSxPQUFPLFlBQVksSUFDdkQsSUFBSyxFQUNQLEdBQ0EsdURDbEROLElBQU0sR0FBUSxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQ3pELEVBQU0sRUFBRSxLQUFLLENBQUksRUFBRSxPQUFPLENBQUMsQ0FDN0IsRUFFYSxHQUF5QixJQUFNLENBQzFDLElBQVEsY0FBYSxpQkFBZ0IsZ0JBQWUsY0FDbEQsRUFBbUIsRUFFZixFQUFXLEVBQVksRUFBYSxDQUFjLEVBS2xELEVBQWEsRUFBUyxVQUFVLENBQUMsSUFBUSxFQUFJLE9BQU8sRUFBTSxFQUFHLEtBQUssQ0FBQyxFQUNuRSxFQUFnQixJQUFlLEdBRXJDLE9BQ0UsR0E4Q0UsTUE5Q0YsQ0FDRSxjQUFZLGlCQUNaLFVBQVUsK0ZBRlosU0E4Q0UsQ0F6Q0EsR0FrQkUsTUFsQkYsQ0FDRSxjQUFZLG1CQUNaLFVBQVUsa0RBRlosU0FJRyxHQUFNLElBQUksQ0FBQyxJQUNWLEdBV0UsTUFYRixDQUVFLGNBQWEsa0JBQWtCLEVBQUssT0FBTyxJQUFJLElBQy9DLFVBQVUsK0JBSFosU0FLRSxHQUtFLE9BTEYsQ0FBTSxVQUFVLCtEQUFoQixTQUNHLEtBQUssZUFBZSxFQUFlLENBQ2xDLEtBQU0sVUFDTixPQUFRLElBQWUsU0FDekIsQ0FBQyxFQUFFLE9BQU8sRUFBSyxPQUFPLENBQUMsRUFDdkIsR0FURyxFQUFLLE9BQU8sT0FBTyxDQVV4QixDQUNILEVBQ0QsRUFHRCxFQUFTLElBQUksQ0FBQyxJQUNiLEdBQUMsR0FBRCxDQUEyQyxJQUFLLEdBQS9CLEVBQUksT0FBTyxZQUFZLENBQWEsQ0FDdEQsRUFHQSxHQUNDLEdBWUUsTUFaRixDQUNFLGNBQVksOEJBQ1osVUFBVSxvQ0FDVixNQUFPLENBQ0wsSUFBSyxJQUFJLEVBQU0sRUFBRSxLQUFLLEVBQUksRUFBTSxFQUFFLE9BQU8sRUFBSSxJQUFNLE9BQ25ELEtBQU0sOEJBQThCLHdDQUNwQyxNQUFPLHdDQUNULEVBUEYsU0FTRSxHQUVFLE1BRkYsQ0FBSyxVQUFVLGlDQUFmLFNBQ0UsR0FBOEQsTUFBOUQsQ0FBSyxVQUFVLDZDQUErQyxFQUM5RCxFQUNGLEdBRUosdURON0ROLEVBQU0sT0FBTyxFQUFVLEVBRXZCLElBQU0sR0FBcUIsSUFBTSxDQUMvQixPQUNFLEdBYUUsTUFiRixDQUFLLFVBQVUsdUJBQXVCLGNBQVksWUFBbEQsU0FhRSxDQVhBLEdBQUMsR0FBRCxDQUFZLFVBQVUsV0FBVyxFQUdqQyxHQU9FLEdBUEYsQ0FDRSxVQUFVLHlDQUNWLGNBQVksbUJBRmQsU0FPRSxDQUZBLEdBQUMsR0FBRCxFQUFlLEVBQ2YsR0FBQyxHQUFELEVBQWMsR0FDZCxHQUNGLEdBSVMsTU96QmYsbUJBQVMsbUVDQ0YsSUFBTSxHQUFlLElBQU0sQ0FDaEMsSUFBUSxjQUFhLElBQUcsaUJBQWtCLEVBQW1CLEVBQ3ZELEVBQWEsR0FBZSxDQUFFLEtBQU0sRUFBYSxlQUFjLENBQUMsRUFFdEUsT0FDRSxHQTBCRSxNQTFCRixDQUNFLGNBQVksa0JBQ1osVUFBVSxxQ0FGWixTQTBCRSxDQXJCQSxHQUlFLE1BSkYsQ0FBSyxVQUFVLGdGQUFmLFNBQ0UsR0FFRSxPQUZGLENBQU0sVUFBVSxpRUFBaEIsU0FDRyxFQUFFLFFBQVEsRUFDWCxFQUNGLEVBR0YsR0FhRSxNQWJGLENBQUssVUFBVSxxQ0FBZixTQUNFLEdBV0UsR0FYRixDQUNFLEdBQUksV0FBVyxFQUFZLE9BQU8sWUFBWSxJQUM5QyxLQUFLLFdBQ0wsS0FBTSxFQUNOLE9BQVEsR0FDUixVQUFVLHdFQUNWLFNBQVUsQ0FBQyxFQU5iLFNBUUUsR0FFRSxNQUZGLENBQUssVUFBVSw2QkFBZixTQUNFLEdBQUMsR0FBRCxDQUFpQixLQUFNLENBQUMsQ0FBVyxFQUFHLGdCQUFpQixFQUFHLE9BQU0sR0FBQyxFQUNqRSxFQUNGLEVBQ0YsR0FDRixHQ2xDTiwwQkFBUyxhQUFpQiwwRUFPbkIsSUFBTSxHQUFzQyxFQUFHLGVBQWdCLENBQ3BFLElBQVEsY0FBYSxtQkFBa0IsdUJBQ3JDLEVBQW1CLEVBQ2YsRUFBVSxFQUFZLE9BQU8sRUFBTSxFQUFHLEtBQUssRUFFakQsT0FDRSxHQWdDRSxNQWhDRixDQUNFLGNBQVksYUFDWixVQUFXLEVBQ1QseURBQ0EsR0FBb0Isb0JBQ3BCLEVBQ0EsQ0FDRixFQVBGLFNBU0UsR0FzQkUsR0F0QkYsQ0FBaUIsS0FBSyxPQUF0QixTQUNFLEdBb0JFLEdBQU8sSUFwQlQsQ0FFRSxRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxFQUM5QixRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsQ0FBRSxFQUM1QixLQUFNLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxFQUMzQixXQUFZLENBQUUsU0FBVSxLQUFNLEtBQU0sV0FBWSxFQUNoRCxVQUFXLEVBQ1QsbUVBQ0EsR0FBVyxjQUNiLEVBVEYsU0FvQkUsQ0FUQSxHQUVFLE9BRkYsQ0FBTSxVQUFVLG1CQUFoQixTQUNHLEVBQVksT0FBTyxRQUFRLEVBQzVCLEVBQ0QsRUFBWSxPQUFPLGNBQWMsRUFDakMsR0FDQyxHQUVFLE9BRkYsQ0FBTSxVQUFVLDhGQUFoQixpQkFFRSxJQWpCQyxFQUFZLE9BQU8sWUFBWSxDQW1CcEMsRUFDRixFQUNGLDRDQzNDTixJQUFNLEdBQVEsTUFBTSxLQUFLLENBQUUsT0FBUSxFQUFHLEVBQUcsQ0FBQyxFQUFHLElBQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFTLENBQ2xFLE9BQU8sRUFBTSxFQUFFLEtBQUssQ0FBSSxFQUFFLE9BQU8sQ0FBQyxFQUNuQyxFQU1ZLEdBQXdDLEVBQUcsZUFBZ0IsQ0FDdEUsSUFBUSxnQkFBZSxjQUFlLEVBQW1CLEVBRXpELE9BQ0UsR0FrQkUsTUFsQkYsQ0FDRSxjQUFZLGVBQ1osVUFBVyxtQ0FBbUMsSUFGaEQsU0FJRyxHQUFNLElBQUksQ0FBQyxJQUNWLEdBV0UsTUFYRixDQUVFLGNBQWEsaUJBQWlCLEVBQUssT0FBTyxJQUFJLElBQzlDLFVBQVUsK0JBSFosU0FLRSxHQUtFLE9BTEYsQ0FBTSxVQUFVLCtEQUFoQixTQUNHLEtBQUssZUFBZSxFQUFlLENBQ2xDLEtBQU0sVUFDTixPQUFRLElBQWUsU0FDekIsQ0FBQyxFQUFFLE9BQU8sRUFBSyxPQUFPLENBQUMsRUFDdkIsR0FURyxFQUFLLE9BQU8sT0FBTyxDQVV4QixDQUNILEVBQ0QsdURIckJOLElBQU0sR0FBUSxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQVMsQ0FDbEUsT0FBTyxFQUFNLEVBQUUsS0FBSyxDQUFJLEVBQUUsT0FBTyxDQUFDLEVBQ25DLEVBRUssR0FBVSxJQUFNLENBQ3BCLElBQVEsY0FBYSxpQkFBa0IsRUFBbUIsRUFFcEQsRUFBVSxFQUFZLE9BQU8sRUFBTSxFQUFHLEtBQUssRUFDM0MsRUFBVSxFQUFZLE9BQU8sWUFBWSxFQUUvQyxPQUNFLEdBd0ZFLE1BeEZGLENBQUssY0FBWSxXQUFXLFVBQVUsdUJBQXRDLFNBd0ZFLENBdEZBLEdBQUMsR0FBRCxDQUFXLFVBQVUsV0FBVyxFQUdoQyxHQWtGRSxHQWxGRixDQUNFLGNBQVksa0JBQ1osVUFBVSwrQ0FGWixTQWtGRSxDQTdFQSxHQUFDLEdBQUQsRUFBYyxFQUdkLEdBeUVFLE1BekVGLENBQ0UsY0FBWSxnQkFDWixVQUFVLHFDQUNWLE1BQU8sQ0FBRSxPQUFRLEdBQUcsR0FBTSxPQUFTLE1BQU8sRUFINUMsU0F5RUUsQ0FuRUEsR0FBQyxHQUFELENBQVksVUFBVSxrQ0FBa0MsRUFHeEQsR0ErREUsTUEvREYsQ0FDRSxjQUFZLG9CQUNaLFVBQVUsMkNBRlosU0ErREUsQ0EzREMsR0FBTSxJQUFJLENBQUMsSUFBUyxDQUNuQixJQUFNLEVBQU8sRUFBSyxLQUFLLEVBQ2pCLEVBQVUsRUFBSyxPQUFPLElBQUksRUFFMUIsRUFBZ0IsQ0FBQyxJQUNyQixHQUFlLENBQ2IsS0FBTSxFQUNOLE9BQ0EsU0FDQSxlQUNGLENBQUMsRUFFSCxPQUNFLEdBMkJFLEdBM0JGLFVBQ0csQ0FBQyxFQUFHLEdBQUksR0FBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQVcsQ0FDL0IsSUFBTSxFQUFhLEVBQWMsQ0FBTSxFQUNqQyxFQUFhLElBQVcsR0FDeEIsRUFBWSxFQUFPLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxFQUU3QyxFQUFjLEVBQ2hCLGdCQUNBLGdCQUVKLE9BQ0UsR0FBQyxHQUFELENBRUUsR0FBSSxpQkFBaUIsS0FBVyxLQUFXLElBQzNDLGNBQWEsaUJBQWlCLEtBQVcsSUFDekMsS0FBSyxZQUNMLEtBQU0sRUFDTixLQUFNLEVBQ04sT0FBUSxFQUNSLFNBQVUsQ0FBQyxFQUNYLFVBQVcsRUFDVCxvQ0FDQSxDQUNGLEdBWEssQ0FZUCxFQUVILEdBMUJZLEdBQUcsS0FBVyxHQTJCM0IsRUFFTCxFQUdELEdBQUMsR0FBRCxDQUFnQixJQUFLLEVBQWEsRUFHakMsR0FDQyxHQVFFLE1BUkYsQ0FDRSxjQUFZLDZCQUNaLFVBQVUsdURBQ1YsTUFBTyxDQUNMLElBQUssSUFBSSxFQUFNLEVBQUUsS0FBSyxFQUFJLEVBQU0sRUFBRSxPQUFPLEVBQUksSUFBTSxNQUNyRCxFQUxGLFNBT0UsR0FBK0QsTUFBL0QsQ0FBSyxVQUFVLDhDQUFnRCxFQUMvRCxHQUVKLEdBQ0YsR0FDRixHQUNGLEdBSVMsTUluSGYsb0JBQWdCLGVBQVcsd0RDRzNCLFNBQVMsRUFBSyxFQUFHLFlBQVcsVUFBUyxHQUF3QyxDQUMzRSxPQUNFLEdBQUMsUUFBRCxDQUNFLEtBQU0sRUFDTixZQUFVLFFBQ1YsVUFBVyxFQUNULGtjQUNBLGdGQUNBLHlHQUNBLENBQ0YsS0FDSSxFQUNOLEVDZkosZUFBUyw4QkFFVCxjQUFTLDJFQUlULElBQU0sR0FBaUIsR0FDckIsOGJBQ0EsQ0FDRSxTQUFVLENBQ1IsUUFBUyxDQUNQLFFBQVMseURBQ1QsWUFDRSxvSkFDRixRQUNFLHdJQUNGLFVBQ0UsK0RBQ0YsTUFDRSx1RUFDRixLQUFNLGlEQUNSLEVBQ0EsS0FBTSxDQUNKLFFBQVMsZ0NBQ1QsR0FBSSxnREFDSixHQUFJLHVDQUNKLEtBQU0sU0FDTixVQUFXLFNBQ1gsVUFBVyxTQUNiLENBQ0YsRUFDQSxnQkFBaUIsQ0FDZixRQUFTLFVBQ1QsS0FBTSxTQUNSLENBQ0YsQ0FDRixFQUVBLFNBQVMsQ0FBTSxFQUNiLFlBQ0EsVUFDQSxPQUNBLFVBQVUsTUFDUCxHQUlBLENBR0gsT0FDRSxHQUhXLEVBQVUsR0FBTyxTQUc1QixDQUNFLFlBQVUsU0FDVixVQUFXLEVBQUcsR0FBZSxDQUFFLFVBQVMsT0FBTSxXQUFVLENBQUMsQ0FBQyxLQUN0RCxFQUNOLEVDdkRKLDRDQUNBLG9CQUFTLCtEQUlULFNBQVMsRUFBUSxFQUNmLGVBQ0csR0FDbUQsQ0FDdEQsT0FDRSxHQWNvQixRQWRwQixDQUNFLFlBQVUsV0FDVixVQUFXLEVBQ1QsOGVBQ0EsQ0FDRixLQUNJLEVBTk4sU0FRRSxHQUtvQixhQUxwQixDQUNFLFlBQVUscUJBQ1YsVUFBVSxnRUFGWixTQUlFLEdBQUMsR0FBRCxDQUFXLFVBQVUsV0FBVyxFQUNoQyxFQUNGLEVDeEJOLG1CQUFTLHNCQ0RULHlCQUNBLDBCQUNFLHNCQUNBLHVCQUNBLHNCQUdGLG9CQUFTLDJCQUFXLG1FQUtwQixTQUFTLEVBQVEsRUFDZixZQUNBLGFBQ0Esa0JBQWtCLEdBQ2xCLGdCQUFnQixRQUNoQixnQkFBZ0IsUUFDaEIsYUFDQSxnQkFDRyxHQUdGLENBQ0QsSUFBTSxFQUFvQixHQUFxQixFQUUvQyxPQUNFLEdBQUMsR0FBRCxDQUNFLGdCQUFpQixFQUNqQixVQUFXLEVBQ1QseUpBQ0EsT0FBTywrQ0FDUCxPQUFPLG1EQUNQLENBQ0YsRUFDQSxjQUFlLEVBQ2YsV0FBWSxDQUNWLG9CQUFxQixDQUFDLElBQ3BCLEVBQUssZUFBZSxVQUFXLENBQUUsTUFBTyxPQUFRLENBQUMsS0FDaEQsQ0FDTCxFQUNBLFdBQVksQ0FDVixLQUFNLEVBQUcsUUFBUyxFQUFrQixJQUFJLEVBQ3hDLE9BQVEsRUFDTiwyQ0FDQSxFQUFrQixNQUNwQixFQUNBLE1BQU8sRUFBRyw2QkFBOEIsRUFBa0IsS0FBSyxFQUMvRCxJQUFLLEVBQ0gsMEVBQ0EsRUFBa0IsR0FDcEIsRUFDQSxnQkFBaUIsRUFDZixHQUFlLENBQUUsUUFBUyxDQUFjLENBQUMsRUFDekMsOERBQ0EsRUFBa0IsZUFDcEIsRUFDQSxZQUFhLEVBQ1gsR0FBZSxDQUFFLFFBQVMsQ0FBYyxDQUFDLEVBQ3pDLDhEQUNBLEVBQWtCLFdBQ3BCLEVBQ0EsY0FBZSxFQUNiLDJFQUNBLEVBQWtCLGFBQ3BCLEVBQ0EsVUFBVyxFQUNULHNGQUNBLEVBQWtCLFNBQ3BCLEVBQ0EsY0FBZSxFQUNiLHNIQUNBLEVBQWtCLGFBQ3BCLEVBQ0EsU0FBVSxFQUNSLHdDQUNBLEVBQWtCLFFBQ3BCLEVBQ0EsY0FBZSxFQUNiLDBCQUNBLElBQWtCLFFBQ2QsVUFDQSwwR0FDSixFQUFrQixhQUNwQixFQUNBLE1BQU8seUJBQ1AsU0FBVSxFQUFHLE9BQVEsRUFBa0IsUUFBUSxFQUMvQyxRQUFTLEVBQ1AsZ0ZBQ0EsRUFBa0IsT0FDcEIsRUFDQSxLQUFNLEVBQUcsbUJBQW9CLEVBQWtCLElBQUksRUFDbkQsbUJBQW9CLEVBQ2xCLDhCQUNBLEVBQWtCLGtCQUNwQixFQUNBLFlBQWEsRUFDWCxrREFDQSxFQUFrQixXQUNwQixFQUNBLElBQUssRUFDSCxvSUFDQSxFQUFNLGVBQ0YsMkRBQ0EsMERBQ0osRUFBa0IsR0FDcEIsRUFDQSxZQUFhLEVBQ1gseUJBQ0EsRUFBa0IsV0FDcEIsRUFDQSxhQUFjLEVBQUcsZUFBZ0IsRUFBa0IsWUFBWSxFQUMvRCxVQUFXLEVBQUcseUJBQTBCLEVBQWtCLFNBQVMsRUFDbkUsTUFBTyxFQUNMLGdGQUNBLEVBQWtCLEtBQ3BCLEVBQ0EsUUFBUyxFQUNQLDREQUNBLEVBQWtCLE9BQ3BCLEVBQ0EsU0FBVSxFQUNSLG1DQUNBLEVBQWtCLFFBQ3BCLEVBQ0EsT0FBUSxFQUFHLFlBQWEsRUFBa0IsTUFBTSxLQUM3QyxDQUNMLEVBQ0EsV0FBWSxDQUNWLEtBQU0sRUFBRyxZQUFXLGFBQVksS0FBWSxDQUMxQyxPQUNFLEdBQUMsTUFBRCxDQUNFLFlBQVUsV0FDVixJQUFLLEVBQ0wsVUFBVyxFQUFHLENBQVMsS0FDbkIsRUFDTixHQUdKLFFBQVMsRUFBRyxZQUFXLGlCQUFnQixLQUFZLENBQ2pELEdBQUksSUFBZ0IsT0FDbEIsT0FDRSxHQUFDLEdBQUQsQ0FBaUIsVUFBVyxFQUFHLFNBQVUsQ0FBUyxLQUFPLEVBQU8sRUFJcEUsR0FBSSxJQUFnQixRQUNsQixPQUNFLEdBQUMsR0FBRCxDQUNFLFVBQVcsRUFBRyxTQUFVLENBQVMsS0FDN0IsRUFDTixFQUlKLE9BQ0UsR0FBQyxHQUFELENBQWlCLFVBQVcsRUFBRyxTQUFVLENBQVMsS0FBTyxFQUFPLEdBR3BFLFVBQVcsR0FDWCxXQUFZLEVBQUcsY0FBYSxLQUFZLENBQ3RDLE9BQ0UsR0FJRSxLQUpGLElBQVEsRUFBUixTQUNFLEdBRUUsTUFGRixDQUFLLFVBQVUsa0VBQWYsU0FDRyxFQUNELEVBQ0YsTUFHSCxDQUNMLEtBQ0ksRUFDTixFQUlKLFNBQVMsRUFBaUIsRUFDeEIsWUFDQSxNQUNBLGVBQ0csR0FDc0MsQ0FDekMsSUFBTSxFQUFvQixHQUFxQixFQUV6QyxFQUFZLFVBQTBCLElBQUksRUFPaEQsT0FOTSxhQUFVLElBQU0sQ0FDcEIsR0FBSSxFQUFVLFFBQ1osRUFBSSxTQUFTLE1BQU0sR0FFcEIsQ0FBQyxFQUFVLE9BQU8sQ0FBQyxFQUdwQixHQUFDLEVBQUQsQ0FDRSxJQUFLLEVBQ0wsUUFBUSxRQUNSLEtBQUssT0FDTCxXQUFVLEVBQUksS0FBSyxtQkFBbUIsRUFDdEMsdUJBQ0UsRUFBVSxVQUNWLENBQUMsRUFBVSxhQUNYLENBQUMsRUFBVSxXQUNYLENBQUMsRUFBVSxhQUViLG1CQUFrQixFQUFVLFlBQzVCLGlCQUFnQixFQUFVLFVBQzFCLG9CQUFtQixFQUFVLGFBQzdCLFVBQVcsRUFDVCxtM0JBQ0EsRUFBa0IsSUFDbEIsQ0FDRixLQUNJLEVBQ04sRUNuTkosb0ZBSUEsU0FBUyxFQUFPLEtBQ1gsR0FDa0QsQ0FDckQsT0FBTyxHQUFrQixRQUFsQixDQUF1QixZQUFVLGFBQWMsRUFBTyxFQUcvRCxTQUFTLEVBQWMsS0FDbEIsR0FDcUQsQ0FDeEQsT0FBTyxHQUFrQixXQUFsQixDQUEwQixZQUFVLHFCQUFzQixFQUFPLEVBRzFFLFNBQVMsRUFBYyxFQUNyQixZQUNBLFFBQVEsU0FDUixhQUFhLEtBQ1YsR0FDcUQsQ0FDeEQsT0FDRSxHQVdtQixVQVhuQixVQUNFLEdBQWtCLFdBQWxCLENBQ0UsWUFBVSxrQkFDVixNQUFPLEVBQ1AsV0FBWSxFQUNaLFVBQVcsRUFDVCxpZUFDQSxDQUNGLEtBQ0ksRUFDTixFQUNBLEVGekJOLG9CQUFTLGFBQVcsZUFBUSxlQUM1Qix1QkFBUyxxRkFZRixTQUFTLEVBQVUsRUFDeEIsT0FDQSxnQkFDQSxXQUNBLFFBQVEsY0FDUixZQUNBLFlBQ2tCLENBQ2xCLElBQU0sRUFBYSxHQUFpQyxJQUFJLEdBQ2pELEVBQWMsR0FBbUIsR0FBMkIsQ0FBSSxFQUd2RSxHQUFVLElBQU0sQ0FDZCxFQUFnQixDQUFJLEdBQ25CLENBQUMsQ0FBSSxDQUFDLEVBRVQsSUFBTSxFQUFtQixDQUFDLElBQTJCLENBRW5ELEdBREEsRUFBZ0IsQ0FBSSxFQUNoQixFQUNGLEVBQVcsU0FBUyxNQUFNLEVBRTVCLElBQVcsQ0FBSSxHQUdqQixPQUNFLEdBOEJFLE1BOUJGLENBQUssVUFBVyxFQUFoQixTQUNFLEdBNEJFLEdBNUJGLFVBNEJFLENBM0JBLEdBZUUsR0FmRixDQUFnQixRQUFPLEdBQXZCLFNBQ0UsR0FhRSxFQWJGLENBQ0UsUUFBUSxVQUNSLGFBQVksQ0FBQyxFQUNiLFVBQVcsRUFDVCxvRkFDRixFQUxGLFNBYUUsQ0FOQSxHQUFDLEdBQUQsRUFBYyxFQUNiLEVBQ0MsRUFBTSxDQUFZLEVBQUUsT0FBTyxhQUFhLEVBRXhDLEdBQWUsT0FBZixVQUFPLEVBQVEsR0FFakIsRUFDRixFQUNGLEdBVUUsR0FWRixDQUFnQixVQUFVLGFBQWEsTUFBTSxRQUE3QyxTQVVFLENBVEEsR0FBQyxHQUFELENBQWMsSUFBSyxFQUFZLEVBQy9CLEdBQUMsR0FBRCxDQUNFLEtBQUssU0FDTCxTQUFVLEVBQ1YsYUFBYyxFQUNkLFNBQVUsRUFDVixjQUFjLFdBQ2QsU0FBVSxFQUNaLEdBQ0EsR0FDRixFQUNGLEVHOUVOLG1CQUFTLGFBQVUsZ0JBQVEsZUFDM0IsZ0JBQVMsc0JDRFQsa0JBQVMsZUFTRixTQUFTLEVBQXlCLEVBQ3ZDLGFBQWEsVUFDYixVQUFVLFFBQ1YsVUFBVSxTQUN1QixDQXFDakMsTUFBTyxDQUNMLFlBcENrQixHQUFRLElBQU0sQ0FDaEMsSUFBTSxFQUFrQixDQUFDLEdBQ2xCLEVBQVMsR0FBYSxFQUFRLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxHQUNuRCxFQUFTLEdBQWEsRUFBUSxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFFcEQsRUFBa0IsRUFBVSxHQUFLLEVBQ2pDLEVBQWtCLEVBQVUsR0FBSyxFQUV2QyxRQUNNLEVBQWUsRUFDbkIsR0FBZ0IsRUFDaEIsR0FBZ0IsR0FDaEIsQ0FDQSxJQUFNLEVBQVEsS0FBSyxNQUFNLEVBQWUsRUFBRSxFQUNwQyxFQUFVLEVBQWUsR0FFekIsRUFBYSxHQUFHLEVBQU0sU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLEtBQUssRUFBUSxTQUFTLEVBQUUsU0FBUyxFQUFHLEdBQUcsSUFDN0YsRUFBTSxLQUFLLENBQVUsRUFHdkIsT0FBTyxHQUNOLENBQUMsRUFBUyxDQUFPLENBQUMsRUFnQm5CLFdBZGlCLENBQUMsSUFBaUIsQ0FDbkMsSUFBTyxFQUFPLEdBQVcsRUFBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFDN0MsRUFBUyxHQUFTLEdBQUssS0FBTyxLQUM5QixFQUFlLElBQVUsRUFBSSxHQUFLLEVBQVEsR0FBSyxFQUFRLEdBQUssRUFFbEUsR0FBSSxJQUFlLFVBQ2pCLE1BQU8sR0FBRyxFQUFNLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxLQUFLLEVBQVEsU0FBUyxFQUFFLFNBQVMsRUFBRyxHQUFHLElBR25GLE1BQU8sR0FBRyxLQUFnQixFQUFRLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxLQUFLLElBTW5FLHNERHZDRixJQUFNLEdBQWMsQ0FBQyxJQUF3QyxDQUUzRCxFQUFFLGdCQUFnQixHQWViLFNBQVMsRUFBVSxFQUN4QixRQUNBLFdBQ0EsVUFBVSxRQUNWLFVBQVUsUUFDVixhQUFhLFVBQ2IsY0FBYyxpQkFDZCxZQUNBLFdBQVcsR0FDWCxRQUNrQixDQUNsQixJQUFPLEVBQU0sR0FBVyxHQUFTLEVBQUssR0FDL0IsRUFBUSxHQUFhLEdBQVMsRUFBRSxFQUNqQyxFQUFXLEdBQXlCLElBQUksRUFDeEMsRUFBYSxHQUEwQixJQUFJLEdBQzFDLEVBQWMsR0FBbUIsR0FBaUIsQ0FBQyxHQUVsRCxjQUFhLGNBQWUsR0FBMEIsQ0FDNUQsYUFDQSxVQUNBLFNBQ0YsQ0FBQyxFQUdLLEVBQWtCLEVBQVksT0FBTyxDQUFDLElBQVMsQ0FFbkQsT0FEc0IsRUFBVyxDQUFJLEVBQ2hCLFlBQVksRUFBRSxTQUFTLEVBQU8sWUFBWSxDQUFDLEVBQ2pFLEVBRUssRUFBZSxDQUFDLElBQWlCLENBQ3JDLEVBQVMsQ0FBSSxFQUNiLEVBQVEsRUFBSyxFQUNiLEVBQVUsRUFBRSxHQUlkLEdBQVUsSUFBTSxDQUNkLEdBQUksRUFBTSxDQUNSLEdBQUksRUFBVyxRQUNiLEVBQWdCLEVBQVcsUUFBUSxXQUFXLEVBRWhELFdBQVcsSUFBTSxDQUNmLEVBQVMsU0FBUyxNQUFNLEdBQ3ZCLENBQUMsSUFFTCxDQUFDLENBQUksQ0FBQyxFQUVULElBQU0sRUFBb0IsRUFBUSxFQUFXLENBQUssRUFBSSxFQUV0RCxPQUNFLEdBMERFLEdBMURGLENBQVMsS0FBTSxFQUFNLGFBQWMsRUFBbkMsU0EwREUsQ0F6REEsR0FjRSxHQWRGLENBQWdCLFFBQU8sR0FBdkIsU0FDRSxHQVlFLEVBWkYsQ0FDRSxJQUFLLEVBQ0wsUUFBUSxVQUNSLEtBQUssV0FDTCxnQkFBYyxzQkFDZCxnQkFBZSxFQUNmLFVBQVcsRUFBRyx1QkFBd0IsQ0FBUyxFQUMvQyxTQUFVLEVBQ1YsY0FBYSxlQUFlLElBUjlCLFNBWUUsQ0FGQSxHQUFDLEdBQUQsQ0FBTyxVQUFVLGVBQWUsRUFDL0IsR0FDRCxFQUNGLEVBQ0YsR0F5Q0UsR0F6Q0YsQ0FDRSxVQUFVLE1BQ1YsTUFBTSxRQUNOLE1BQU8sQ0FBRSxNQUFPLENBQWEsRUFIL0IsU0F5Q0UsQ0FwQ0EsR0FRRSxNQVJGLENBQUssVUFBVSxlQUFmLFNBQ0UsR0FBQyxHQUFELENBQ0UsSUFBSyxFQUNMLFlBQVksaUJBQ1osTUFBTyxFQUNQLFNBQVUsQ0FBQyxJQUFNLEVBQVUsRUFBRSxPQUFPLEtBQUssRUFDekMsVUFBVSxNQUNaLEVBQ0EsRUFDRixHQTBCRSxHQTFCRixDQUFZLFVBQVUsWUFBWSxRQUFTLEdBQTNDLFNBQ0UsR0F3QkUsTUF4QkYsQ0FBSyxVQUFVLE1BQWYsU0FDRyxFQUFnQixTQUFXLEVBQzFCLEdBRUUsTUFGRixDQUFLLFVBQVUsaURBQWYsZUFFRSxFQUVGLEVBQWdCLElBQUksQ0FBQyxJQUFTLENBQzVCLElBQU0sRUFBYSxFQUFXLENBQUksRUFFbEMsT0FDRSxHQVVFLFNBVkYsQ0FFRSxLQUFLLFNBQ0wsUUFBUyxJQUFNLEVBQWEsQ0FBSSxFQUNoQyxVQUFXLEVBQ1QsMEtBUGEsSUFBUyxHQVFSLGtDQUNoQixFQVBGLFNBU0csR0FSSSxDQVNMLEVBRUwsRUFFSCxFQUNGLEdBQ0YsR0FDRixFRTFJTixrRkFJQSxTQUFTLENBQUssRUFDWixlQUNHLEdBQ2dELENBQ25ELE9BQ0UsR0FBZ0IsUUFBaEIsQ0FDRSxZQUFVLFFBQ1YsVUFBVyxFQUNULHNOQUNBLENBQ0YsS0FDSSxFQUNOLHNEQ0dHLFNBQVMsRUFBb0IsRUFDbEMsU0FDQSxVQUNBLFlBQ0EsZ0JBQ0EsY0FDNEIsQ0FDNUIsSUFBUSxLQUFNLEVBQXdCLENBQUMsS0FBYSxDQUFFLEVBQUcsRUFBUSxDQUFFLEVBQUUsRUFFL0QsRUFBb0IsQ0FBQyxJQUErQixDQUN4RCxFQUFVLENBQUssRUFDZixFQUFRLEdBR0osRUFBUyxJQUFrQixPQUVqQyxPQUNFLEdBNkRFLEdBN0RGLENBQVEsS0FBTSxFQUFRLGFBQWMsRUFBcEMsU0FDRSxHQTJERSxHQTNERixDQUFlLFVBQVUsV0FBekIsU0EyREUsQ0ExREEsR0FVRSxHQVZGLFVBVUUsQ0FUQSxHQUVFLEdBRkYsVUFDRyxFQUFTLEVBQUUsb0JBQW9CLEVBQUksRUFBRSxzQkFBc0IsRUFDNUQsRUFDRixHQUtFLEdBTEYsVUFLRSxDQUxGLElBQ0ksRUFESixJQUNpQixJQUNkLEVBQ0csRUFBRSw0QkFBNEIsRUFDOUIsRUFBRSw4QkFBOEIsR0FDcEMsR0FDRixFQUVGLEdBdUNFLE1BdkNGLENBQUssVUFBVSxZQUFmLFNBdUNFLENBdENBLEdBV0UsRUFYRixDQUNFLFFBQVEsVUFDUixVQUFVLGtDQUNWLFFBQVMsSUFBTSxFQUFrQixNQUFNLEVBSHpDLFNBS0UsR0FLRSxNQUxGLENBQUssVUFBVSxZQUFmLFNBS0UsQ0FKQSxHQUErQyxNQUEvQyxDQUFLLFVBQVUsY0FBZixTQUE4QixFQUFFLFdBQVcsRUFBSSxFQUMvQyxHQUVFLE1BRkYsQ0FBSyxVQUFVLGdDQUFmLFNBQ0csRUFBUyxFQUFFLGdCQUFnQixFQUFJLEVBQUUsZ0JBQWdCLEVBQ2xELEdBQ0YsRUFDRixFQUVGLEdBV0UsRUFYRixDQUNFLFFBQVEsVUFDUixVQUFVLGtDQUNWLFFBQVMsSUFBTSxFQUFrQixXQUFXLEVBSDlDLFNBS0UsR0FLRSxNQUxGLENBQUssVUFBVSxZQUFmLFNBS0UsQ0FKQSxHQUE0RCxNQUE1RCxDQUFLLFVBQVUsY0FBZixTQUE4QixFQUFFLHdCQUF3QixFQUFJLEVBQzVELEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRyxFQUFTLEVBQUUscUJBQXFCLEVBQUksRUFBRSxxQkFBcUIsRUFDNUQsR0FDRixFQUNGLEVBRUYsR0FXRSxFQVhGLENBQ0UsUUFBUSxVQUNSLFVBQVUsa0NBQ1YsUUFBUyxJQUFNLEVBQWtCLEtBQUssRUFIeEMsU0FLRSxHQUtFLE1BTEYsQ0FBSyxVQUFVLFlBQWYsU0FLRSxDQUpBLEdBQStDLE1BQS9DLENBQUssVUFBVSxjQUFmLFNBQThCLEVBQUUsV0FBVyxFQUFJLEVBQy9DLEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRyxFQUFTLEVBQUUsb0JBQW9CLEVBQUksRUFBRSxvQkFBb0IsRUFDMUQsR0FDRixFQUNGLEdBQ0YsRUFFRixHQUlFLEdBSkYsVUFDRSxHQUVFLEVBRkYsQ0FBUSxRQUFRLFVBQVUsUUFBUyxFQUFuQyxTQUNHLEVBQUUsUUFBUSxFQUNYLEVBQ0YsR0FDRixFQUNGLDJDQzlGTixTQUFTLEVBQUksRUFBRyxlQUFjLEdBQXNDLENBQ2xFLE9BQ0UsR0FBQyxNQUFELENBQ0UsWUFBVSxPQUNWLFVBQVcsRUFDVCx1RUFDQSxDQUNGLEtBQ0ksRUFDTixFQUlKLFNBQVMsRUFBVSxFQUFHLGVBQWMsR0FBc0MsQ0FDeEUsT0FDRSxHQUFDLE1BQUQsQ0FDRSxZQUFVLGNBQ1YsVUFBVyxFQUNULGdKQUNBLENBQ0YsS0FDSSxFQUNOLEVBSUosU0FBUyxFQUFTLEVBQUcsZUFBYyxHQUFzQyxDQUN2RSxPQUNFLEdBQUMsTUFBRCxDQUNFLFlBQVUsYUFDVixVQUFXLEVBQUcsNkJBQThCLENBQVMsS0FDakQsRUFDTixFQTJCSixTQUFTLEVBQVcsRUFBRyxlQUFjLEdBQXNDLENBQ3pFLE9BQ0UsR0FBQyxNQUFELENBQ0UsWUFBVSxlQUNWLFVBQVcsRUFBRyxXQUFZLENBQVMsS0FDL0IsRUFDTixFQ3BFSix5Q0FDQSxvQkFBUyxzQkFBVyxvQkFBaUIseUVBSXJDLFNBQVMsRUFBTSxLQUNWLEdBQ2lELENBQ3BELE9BQU8sRUFBaUIsT0FBakIsQ0FBc0IsWUFBVSxZQUFhLEVBQU8sRUFTN0QsU0FBUyxFQUFXLEtBQ2YsR0FDa0QsQ0FDckQsT0FBTyxFQUFpQixRQUFqQixDQUF1QixZQUFVLGtCQUFtQixFQUFPLEVBR3BFLFNBQVMsRUFBYSxFQUNwQixZQUNBLE9BQU8sVUFDUCxjQUNHLEdBR0YsQ0FDRCxPQUNFLEdBYWtCLFVBYmxCLENBQ0UsWUFBVSxpQkFDVixZQUFXLEVBQ1gsVUFBVyxFQUNULCt5QkFDQSxDQUNGLEtBQ0ksRUFQTixTQWFFLENBSkMsRUFDRCxFQUVrQixPQUZsQixDQUFzQixRQUFPLEdBQTdCLFNBQ0UsRUFBQyxHQUFELENBQWlCLFVBQVUsb0JBQW9CLEVBQy9DLEdBQ0YsRUFJTixTQUFTLEVBQWEsRUFDcEIsWUFDQSxXQUNBLFdBQVcsU0FDWCxRQUFRLFlBQ0wsR0FDb0QsQ0FDdkQsT0FDRSxFQXlCa0IsU0F6QmxCLFVBQ0UsR0F1QmtCLFVBdkJsQixDQUNFLFlBQVUsaUJBQ1YsVUFBVyxFQUNULGdqQkFDQSxJQUFhLFVBQ1gsa0lBQ0YsQ0FDRixFQUNBLFNBQVUsRUFDVixNQUFPLEtBQ0gsRUFWTixTQXVCRSxDQVhBLEVBQUMsR0FBRCxFQUFzQixFQUN0QixFQVFrQixXQVJsQixDQUNFLFVBQVcsRUFDVCxNQUNBLElBQWEsVUFDWCxxR0FDSixFQUxGLFNBT0csRUFDRCxFQUNGLEVBQUMsR0FBRCxFQUF3QixHQUN4QixFQUNGLEVBaUJOLFNBQVMsRUFBVSxFQUNqQixZQUNBLGNBQ0csR0FDaUQsQ0FDcEQsT0FDRSxHQWNrQixPQWRsQixDQUNFLFlBQVUsY0FDVixVQUFXLEVBQ1QsNGFBQ0EsQ0FDRixLQUNJLEVBTk4sU0FjRSxDQU5BLEVBSUUsT0FKRixDQUFNLFVBQVUsNkRBQWhCLFNBQ0UsRUFFa0IsZ0JBRmxCLFVBQ0UsRUFBQyxHQUFELENBQVcsVUFBVSxTQUFTLEVBQzlCLEVBQ0YsRUFDRixFQUFzRCxXQUF0RCxVQUEyQixFQUFXLEdBQ3RDLEVBaUJOLFNBQVMsRUFBb0IsRUFDM0IsZUFDRyxHQUMyRCxDQUM5RCxPQUNFLEVBU2tCLGlCQVRsQixDQUNFLFlBQVUsMEJBQ1YsVUFBVyxFQUNULHVEQUNBLENBQ0YsS0FDSSxFQU5OLFNBUUUsRUFBQyxHQUFELENBQWUsVUFBVSxTQUFTLEVBQ2xDLEVBSU4sU0FBUyxFQUFzQixFQUM3QixlQUNHLEdBQzZELENBQ2hFLE9BQ0UsRUFTa0IsbUJBVGxCLENBQ0UsWUFBVSw0QkFDVixVQUFXLEVBQ1QsdURBQ0EsQ0FDRixLQUNJLEVBTk4sU0FRRSxFQUFDLEdBQUQsQ0FBaUIsVUFBVSxTQUFTLEVBQ3BDLEVDM0pOLG1CQUFTLGdCQUFVLGNBQVcsZUFDOUIsZ0JBQVMsaUVBSVQsSUFBTSxHQUFXLENBQ2YsTUFBTyxHQUFNLE1BQ2IsT0FBUSxHQUFNLE9BQ2QsUUFBUyxHQUFNLFFBQ2YsT0FBUSxHQUFNLE1BQ2hCLEVBQ00sR0FBYyxPQUFPLFlBQ3pCLE9BQU8sUUFBUSxFQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUcsS0FBTyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQ2pELEVBQ00sR0FBVyxDQUNmLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sR0FDTixHQUFNLEdBQ04sR0FBTSxHQUNOLEdBQU0sRUFDUixFQUNNLEdBQVcsQ0FBQyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxLQUFLLEVBQzNELEdBQVcsQ0FBQyxJQUFjLEtBQUssSUFBSSxFQUFHLE9BQU8sU0FBUyxDQUFDLEdBQUssQ0FBQyxFQUU3RCxHQUFpQixDQUNyQixFQUNBLElBQ0csQ0FDSCxHQUFJLENBQUMsRUFDSCxPQUFPLEVBQUUsa0JBQWtCLEVBRTdCLEdBQUksQ0FDRixJQUFNLEVBQU8sSUFBSSxHQUFNLENBQUksRUFBRSxPQUFPLEVBQ3BDLE9BQU8sR0FBUSxDQUFDLEVBQUssWUFBWSxFQUFFLFNBQVMsT0FBTyxFQUMvQyxFQUFLLE9BQU8sQ0FBQyxFQUFFLFlBQVksRUFBSSxFQUFLLE1BQU0sQ0FBQyxFQUMzQyxFQUFFLGtCQUFrQixFQUN4QixLQUFNLENBQ04sT0FBTyxFQUFFLGtCQUFrQixJQVNsQixHQUFvQyxFQUFHLFFBQU8sY0FBZSxDQUN4RSxJQUFRLEtBQU0sRUFBd0IsQ0FBQyxLQUFTLENBQUUsRUFBRyxFQUFJLENBQUUsRUFBRSxHQUN0RCxFQUFNLEdBQVcsR0FBUyxDQUFDLENBQUMsQ0FBSyxHQUNqQyxFQUFNLEdBQVcsR0FBOEIsSUFBTSxHQUFTLElBQUksRUFFbkUsRUFBVyxHQUNmLElBQU0sR0FBUyxJQUFJLENBQUMsRUFBRyxLQUFPLENBQUUsTUFBTyxHQUFTLEdBQUksTUFBTyxFQUFFLENBQUMsQ0FBRSxFQUFFLEVBQ2xFLENBQUMsQ0FBQyxDQUNKLEVBRUEsR0FBVSxJQUFNLENBRWQsR0FEQSxFQUFRLENBQUMsQ0FBQyxDQUFLLEVBQ1gsRUFDRixFQUFRLENBQUssR0FFZCxDQUFDLENBQUssQ0FBQyxFQUVWLElBQU0sRUFBUyxDQUFDLElBQTZCLENBQzNDLEdBQUksQ0FBQyxFQUNILE9BRUYsSUFBTSxFQUFPLElBQUssS0FBUyxDQUFFLEVBQzdCLEVBQVEsQ0FBSSxFQUNaLEVBQVMsRUFBTyxFQUFPLElBQUksR0FHdkIsRUFBUyxDQUFDLElBQXFCLENBRW5DLEdBREEsRUFBUSxDQUFPLEVBQ1gsQ0FBQyxFQUFTLENBQ1osRUFBUyxJQUFJLEVBQ2IsT0FFRixHQUFJLEVBQU0sQ0FDUixFQUFTLENBQUksRUFDYixPQUVGLElBQU0sRUFBTSxDQUFFLEtBQU0sR0FBTSxNQUFPLFNBQVUsQ0FBRSxFQUM3QyxFQUFRLENBQUcsRUFDWCxFQUFTLENBQUcsR0FHUixFQUFZLENBQUMsSUFBYyxDQUMvQixJQUFNLEVBQVEsR0FBTSxXQUEyQixDQUFDLEVBQzFDLEVBQU0sR0FBUyxHQUNmLEVBQU8sRUFBSyxTQUFTLENBQUcsRUFDMUIsRUFBSyxPQUFPLENBQUMsSUFBTSxJQUFNLENBQUcsRUFDNUIsQ0FBQyxHQUFHLEVBQU0sQ0FBRyxFQUNqQixFQUFPLENBQUUsVUFBVyxFQUFLLE9BQVMsRUFBTyxNQUFVLENBQUMsR0FHaEQsRUFBYSxDQUFDLElBQXNDLENBQ3hELElBQU0sRUFBMkIsQ0FBRSxNQUFPLE9BQVcsTUFBTyxNQUFVLEVBQ3RFLEdBQUksSUFBUyxRQUNYLEVBQUUsTUFBUSxHQUFNLE9BQVMsRUFFM0IsR0FBSSxJQUFTLFFBQ1gsRUFBRSxNQUFRLEdBQU0sT0FBUyxFQUFNLEVBQUUsSUFBSSxFQUFHLE9BQU8sRUFBRSxNQUFNLEtBQUssRUFBRSxPQUFPLEVBRXZFLEVBQU8sQ0FBQyxHQUdKLEVBQVUsR0FBTSxNQUFRLFFBQVUsR0FBTSxNQUFRLFFBQVUsUUFDMUQsRUFBTyxHQUFZLEdBQU0sTUFBUSxHQUFNLFFBQVUsUUFDakQsRUFBWSxNQUFNLFFBQVEsR0FBTSxTQUFTLEVBQzNDLEVBQUssVUFDTCxHQUFNLFVBQ0osQ0FBQyxFQUFLLFNBQVMsRUFDZixDQUFDLEVBRVAsT0FDRSxFQXNKRSxHQXRKRixDQUFNLGNBQVksb0JBQWxCLFNBc0pFLENBckpBLEVBZUUsR0FmRixDQUFZLFVBQVUsT0FBdEIsU0FlRSxDQWRBLEVBUUUsTUFSRixDQUFLLFVBQVUsOEJBQWYsU0FRRSxDQVBBLEVBQUMsR0FBRCxDQUNFLEdBQUcsWUFDSCxRQUFTLEVBQ1QsZ0JBQWlCLEVBQ2pCLGNBQVksb0JBQ2QsRUFDQSxFQUE4QyxHQUE5QyxDQUFXLFVBQVUsVUFBckIsU0FBZ0MsRUFBRSxRQUFRLEVBQUksR0FDOUMsRUFDRCxHQUFRLEdBQ1AsRUFFRSxJQUZGLENBQUcsVUFBVSxnQ0FBYixTQUNHLEdBQWUsRUFBTyxDQUFDLEVBQ3hCLEdBRUosRUFFRCxHQUNDLEVBaUlFLEdBaklGLENBQWEsVUFBVSxPQUF2QixTQUNFLEVBK0hFLE1BL0hGLENBQUssVUFBVSxZQUFmLFNBK0hFLENBOUhBLEVBMENFLE1BMUNGLENBQUssVUFBVSx5QkFBZixTQTBDRSxDQXpDQSxFQXlCRSxNQXpCRixVQXlCRSxDQXhCQSxFQUVFLEVBRkYsQ0FBTyxRQUFRLFlBQVksVUFBVSxVQUFyQyxTQUNHLEVBQUUsU0FBUyxFQUNaLEVBQ0YsRUFvQkUsR0FwQkYsQ0FDRSxNQUFPLEVBQ1AsY0FBZSxDQUFDLElBQ2QsRUFBTyxDQUFFLEtBQU0sR0FBUyxFQUE0QixDQUFDLEVBSHpELFNBb0JFLENBZEEsRUFNRSxHQU5GLENBQ0UsR0FBRyxZQUNILFVBQVUsTUFDVixjQUFZLG1CQUhkLFNBS0UsRUFBQyxHQUFELEVBQWEsRUFDYixFQUNGLEVBTUUsR0FORixVQUNHLE9BQU8sS0FBSyxFQUFRLEVBQUUsSUFBSSxDQUFDLElBQzFCLEVBRUUsR0FGRixDQUFvQixNQUFPLEVBQTNCLFNBQ0csRUFBRSxFQUFFLFlBQVksQ0FBQyxHQURILENBRWYsQ0FDSCxFQUNELEdBQ0YsR0FDRixFQUNGLEVBY0UsTUFkRixVQWNFLENBYkEsRUFFRSxFQUZGLENBQU8sUUFBUSxXQUFXLFVBQVUsVUFBcEMsU0FDRyxFQUFFLE9BQU8sRUFDVixFQUNGLEVBQUMsR0FBRCxDQUNFLEdBQUcsV0FDSCxLQUFLLFNBQ0wsSUFBSSxJQUNKLE1BQU8sR0FBTSxVQUFZLEVBQ3pCLFNBQVUsQ0FBQyxJQUNULEVBQU8sQ0FBRSxTQUFVLEdBQVMsRUFBRSxPQUFPLEtBQUssQ0FBRSxDQUFDLEVBRS9DLFVBQVUsTUFDWixHQUNBLEdBQ0YsRUFFRCxHQUFNLE9BQVMsR0FBTSxRQUNwQixFQW1CRSxNQW5CRixVQW1CRSxDQWxCQSxFQUE0QyxFQUE1QyxDQUFPLFVBQVUsVUFBakIsU0FBNEIsRUFBRSxVQUFVLEVBQUksRUFDNUMsRUFnQkUsTUFoQkYsQ0FBSyxVQUFVLDRCQUFmLFNBQ0csRUFBUyxJQUFJLENBQUMsRUFBRyxJQUNoQixFQVlFLE1BWkYsQ0FBbUIsVUFBVSw4QkFBN0IsU0FZRSxDQVhBLEVBQUMsR0FBRCxDQUNFLEdBQUksT0FBTyxJQUNYLFFBQVMsRUFBVSxTQUFTLEVBQUUsS0FBSyxFQUNuQyxnQkFBaUIsSUFBTSxFQUFVLENBQUMsRUFDcEMsRUFDQSxFQUtFLEVBTEYsQ0FDRSxRQUFTLE9BQU8sSUFDaEIsVUFBVSx5QkFGWixTQUlHLEVBQUUsTUFDSCxJQVhNLEVBQUUsS0FZVixDQUNILEVBQ0QsR0FDRixFQUdKLEVBMERFLE1BMURGLFVBMERFLENBekRBLEVBQXdDLEVBQXhDLENBQU8sVUFBVSxVQUFqQixTQUE0QixFQUFFLE1BQU0sRUFBSSxFQUN4QyxFQXVERSxNQXZERixDQUFLLFVBQVUsaUJBQWYsU0F1REUsQ0F0REEsRUFTRSxNQVRGLENBQUssVUFBVSw4QkFBZixTQVNFLENBUkEsRUFBQyxHQUFELENBQ0UsR0FBRyxRQUNILFFBQVMsSUFBWSxRQUNyQixnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDM0MsRUFDQSxFQUVFLEVBRkYsQ0FBTyxRQUFRLFFBQVEsVUFBVSxVQUFqQyxTQUNHLEVBQUUsT0FBTyxFQUNWLEdBQ0YsRUFDRixFQXNCRSxNQXRCRixDQUFLLFVBQVUsOEJBQWYsU0FzQkUsQ0FyQkEsRUFBQyxHQUFELENBQ0UsR0FBRyxRQUNILFFBQVMsSUFBWSxRQUNyQixnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDM0MsRUFDQSxFQUVFLEVBRkYsQ0FBTyxRQUFRLFFBQVEsVUFBVSxVQUFqQyxTQUNHLEVBQUUsT0FBTyxFQUNWLEVBQ0QsSUFBWSxTQUNYLEVBQUMsR0FBRCxDQUNFLEtBQUssU0FDTCxJQUFJLElBQ0osTUFBTyxHQUFNLE9BQVMsRUFDdEIsU0FBVSxDQUFDLElBQ1QsRUFBTyxDQUFFLE1BQU8sR0FBUyxFQUFFLE9BQU8sS0FBSyxDQUFFLENBQUMsRUFFNUMsVUFBVSxtQkFDVixjQUFZLGNBQ2QsRUFFRixFQUE4QyxPQUE5QyxDQUFNLFVBQVUsVUFBaEIsU0FBMkIsRUFBRSxhQUFhLEVBQUksR0FDOUMsRUFDRixFQW9CRSxNQXBCRixDQUFLLFVBQVUsOEJBQWYsU0FvQkUsQ0FuQkEsRUFBQyxHQUFELENBQ0UsR0FBRyxLQUNILFFBQVMsSUFBWSxRQUNyQixnQkFBaUIsSUFBTSxFQUFXLE9BQU8sRUFDM0MsRUFDQSxFQUVFLEVBRkYsQ0FBTyxRQUFRLEtBQUssVUFBVSxVQUE5QixTQUNHLEVBQUUsSUFBSSxFQUNQLEVBQ0QsSUFBWSxTQUNYLEVBQUMsR0FBRCxDQUNFLEtBQU0sR0FBTSxNQUNaLFNBQVUsQ0FBQyxJQUNULEVBQU8sQ0FDTCxNQUFPLEVBQUksRUFBTSxDQUFDLEVBQUUsTUFBTSxLQUFLLEVBQUUsT0FBTyxFQUFJLE1BQzlDLENBQUMsRUFFSCxVQUFVLE1BQ1osR0FFRixHQUNGLEdBQ0YsR0FDRixFQUNGLEdBRUosR0MxUk4sbUJBQVMsa0JBQVUsZUFLWixTQUFTLEVBQXdCLENBQUMsRUFBeUIsQ0FDaEUsSUFBUSx1QkFBc0Isd0JBQzVCLEVBQXdCLENBQUMsS0FBYSxDQUNwQyxxQkFBc0IsRUFBUSxxQkFDOUIscUJBQXNCLEVBQVEsb0JBQ2hDLEVBQUUsR0FFRyxFQUFhLEdBQWtCLEdBTW5DLENBQ0QsT0FBUSxHQUNSLGNBQWUsT0FDZixNQUFPLElBQ1QsQ0FBQyxFQUVLLEVBQWlCLEdBQ3JCLENBQUMsRUFBc0IsSUFBb0MsQ0FDekQsRUFBZSxDQUNiLE9BQVEsR0FDUixjQUFlLE9BQ2YsUUFDQSxVQUNBLFVBQVcsQ0FBQyxJQUErQixDQUN6QyxFQUFxQixFQUFPLEVBQVMsQ0FDbkMsUUFDQSxVQUFXLEVBQU0sS0FDbkIsQ0FBQyxFQUVMLENBQUMsR0FFSCxDQUFDLENBQW9CLENBQ3ZCLEVBRU0sRUFBbUIsR0FDdkIsQ0FBQyxJQUF5QixDQUN4QixFQUFlLENBQ2IsT0FBUSxHQUNSLGNBQWUsU0FDZixRQUNBLFVBQVcsQ0FBQyxJQUErQixDQUN6QyxFQUFxQixFQUFPLENBQzFCLFFBQ0EsVUFBVyxFQUFNLEtBQ25CLENBQUMsRUFFTCxDQUFDLEdBRUgsQ0FBQyxDQUFvQixDQUN2QixFQUVNLEVBQWMsR0FBWSxJQUFNLENBQ3BDLEVBQWUsQ0FDYixPQUFRLEdBQ1IsY0FBZSxPQUNmLE1BQU8sSUFDVCxDQUFDLEdBQ0EsQ0FBQyxDQUFDLEVBRUMsRUFBZ0IsR0FDcEIsQ0FBQyxJQUErQixDQUM5QixHQUFJLEVBQVksVUFDZCxFQUFZLFVBQVUsQ0FBSyxFQUU3QixFQUFZLEVBRVosSUFBYSxHQUVmLENBQUMsRUFBYSxFQUFhLENBQVUsQ0FDdkMsRUFFQSxNQUFPLENBQ0wsY0FDQSxpQkFDQSxtQkFDQSxjQUNBLGVBQ0YsbUVkM0RGLElBQU0sR0FBYyxDQUNsQixPQUNBLFFBQ0EsU0FDQSxNQUNBLFNBQ0EsT0FDQSxTQUNBLFFBQ0EsVUFDQSxNQUNBLFNBQ0EsT0FDQSxPQUNBLFFBQ0YsRUFFTSxHQUFnQixHQUFZLElBQUksQ0FBQyxLQUFXLENBQ2hELE1BQU8sTUFBTSxjQUFrQixRQUMvQixNQUFPLEVBQU0sT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUFJLEVBQU0sTUFBTSxDQUFDLENBQ3RELEVBQUUsRUFFSSxHQUFnQixDQUNwQixFQUNBLEVBQ0EsSUFDZ0IsQ0FDaEIsSUFBTyxFQUFPLEdBQVcsRUFBSyxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sRUFDN0MsRUFBTyxFQUFNLENBQUksRUFBRSxLQUFLLENBQUssRUFBRSxPQUFPLENBQU8sRUFDbkQsT0FBTyxFQUFXLEVBQUssS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUksR0FHdkMsR0FBbUIsQ0FDdkIsRUFDQSxFQUNBLElBQ2dCLENBQ2hCLElBQU8sRUFBTyxHQUFXLEVBQUssTUFBTSxHQUFHLEVBQUUsSUFBSSxNQUFNLEVBQzdDLEVBQU8sRUFBTSxDQUFJLEVBQUUsS0FBSyxDQUFLLEVBQUUsT0FBTyxDQUFPLEVBQ25ELE9BQU8sRUFBVyxFQUFLLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFJLEdBWWxDLEdBQXNDLEVBQ2pELGdCQUNBLFVBQ0EsV0FDQSxXQUNBLFdBQ0ksQ0FDSixJQUNFLGNBQ0EsaUJBQ0EsbUJBQ0EsY0FDQSxpQkFDRSxHQUF5QixDQUFPLEdBRTVCLDJCQUEwQixJQUFHLGdCQUFlLGNBQ2xELEVBQXdCLENBQUMsS0FBYSxDQUNwQyx5QkFBMEIsRUFBUSx5QkFDbEMsRUFBRyxFQUFRLEVBQ1gsY0FBZSxFQUFRLGNBQ3ZCLFdBQVksRUFBUSxVQUN0QixFQUFFLEVBRUUsRUFBUSxHQUFlLE9BQVMsRUFBTSxFQUN0QyxFQUFNLEdBQWUsS0FBTyxFQUFNLEVBQUUsSUFBSSxFQUFHLE1BQU0sRUFHakQsRUFBYyxFQUNoQixFQUF5QixDQUFhLEVBQ3RDLE1BR0csRUFBVyxHQUFnQixHQUFTLEVBQU0sT0FBTyxDQUFDLEdBQ2xELEVBQVMsR0FBYyxHQUFTLEVBQUksT0FBTyxDQUFDLEdBQzVDLEVBQVUsR0FBZSxHQUFTLEdBQWUsUUFBVSxFQUFLLEdBQ2hFLEVBQWUsR0FBb0IsR0FDeEMsR0FBZSxPQUFTLEdBQWMsR0FBRyxLQUMzQyxHQUdPLEVBQVcsR0FBZ0IsR0FBUyxFQUFNLE9BQU8sT0FBTyxDQUFDLEdBQ3pELEVBQVMsR0FBYyxHQUFTLEVBQUksT0FBTyxPQUFPLENBQUMsR0FHbkQsRUFBWSxHQUFpQixHQUFTLENBQzNDLE1BQU8sR0FBZSxPQUFTLEdBQy9CLFlBQWEsR0FBZSxhQUFlLEdBQzNDLFNBQVUsR0FBZSxVQUFZLEVBQ3ZDLENBQUMsR0FHTSxHQUFPLElBQVksR0FBOEIsSUFBTSxDQUU1RCxPQURtQixHQUFlLE9BQVMsR0FBYSxPQUNuQyxLQUN0QixFQUdLLEVBQXdCLENBQUMsSUFBMkIsQ0FFeEQsR0FEQSxFQUFhLENBQUksRUFDYixHQUFRLEVBQU0sQ0FBSSxFQUFFLFFBQVEsRUFBTSxDQUFPLENBQUMsRUFDNUMsRUFBVyxDQUFJLEdBSWIsR0FBc0IsQ0FBQyxJQUEyQixDQUV0RCxHQURBLEVBQVcsQ0FBSSxFQUNYLEdBQVEsRUFBTSxDQUFJLEVBQUUsU0FBUyxFQUFNLENBQVMsQ0FBQyxFQUMvQyxFQUFhLENBQUksR0FLZixHQUF3QixDQUFDLElBQWlCLENBRzlDLEdBRkEsRUFBYSxDQUFJLEVBRWIsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUMzRCxFQUFXLENBQUksR0FJYixHQUFzQixDQUFDLElBQWlCLENBRzVDLEdBRkEsRUFBVyxDQUFJLEVBRVgsRUFBTSxDQUFTLEVBQUUsT0FBTyxFQUFNLENBQU8sRUFBRyxLQUFLLEdBQUssRUFBTyxFQUMzRCxFQUFhLENBQUksR0FLZixHQUFvQixDQUN4QixJQUNHLENBQ0gsSUFBUSxRQUFNLFVBQVUsRUFBRSxPQUMxQixFQUFjLENBQUMsS0FBVSxJQUFLLEdBQU8sSUFBTyxFQUFNLEVBQUUsR0FHdEQsR0FBVSxJQUFNLENBRWQsR0FBSSxFQUNGLEVBQVcsT0FBTyxHQUVuQixDQUFDLENBQVEsQ0FBQyxFQUViLElBQU0sR0FBZSxDQUFDLElBQXVCLENBQzNDLEVBQUUsZUFBZSxFQUVqQixJQUFNLEdBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDNUQsR0FBYyxHQUFpQixFQUFTLEVBQVMsQ0FBUSxFQUV6RCxFQUEyQixDQUMvQixHQUFJLEdBQWUsSUFBTSxFQUFNLEVBQUUsT0FBTyxnQkFBZ0IsRUFDeEQsTUFBTyxFQUFXLE1BQ2xCLE1BQU8sR0FDUCxJQUFLLEdBQ0wsV0FBWSxHQUFlLFdBQzNCLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLElBQVMsTUFDbEIsRUFFQSxHQUFJLEdBQWUsSUFBTSxHQUFpQixDQUFhLEVBQUcsQ0FDeEQsRUFBZSxFQUFlLENBQzVCLE1BQU8sRUFBVyxNQUNsQixNQUFPLEdBQ1AsSUFBSyxHQUNMLFlBQWEsRUFBVyxZQUN4QixTQUFVLEVBQVcsU0FDckIsT0FBUSxFQUNSLE1BQU8sRUFDUCxNQUFPLElBQVMsTUFDbEIsQ0FBQyxFQUNELE9BR0YsR0FBSSxHQUFlLEdBQ2pCLElBQVcsQ0FBUyxFQUVwQixTQUFRLENBQVMsRUFFbkIsRUFBUSxHQUdKLEdBQWUsSUFBTSxDQUN6QixHQUFJLEdBQWUsR0FBSSxDQUVyQixHQUFJLEdBQWlCLENBQWEsRUFBRyxDQUVuQyxFQUFpQixDQUFhLEVBQzlCLE9BRUYsSUFBVyxDQUFhLEVBQ3hCLEVBQVEsSUFJTixHQUFvQixDQUFDLElBQWtDLENBQzNELEdBQUksQ0FBQyxFQUFVLENBQ2IsR0FBUyxJQUFJLEVBQ2IsT0FFRixJQUFNLEdBQWdCLEdBQWMsRUFBVyxFQUFXLENBQVEsRUFDbEUsR0FBUyxJQUFLLEVBQVUsUUFBUyxHQUFjLE9BQU8sQ0FBRSxDQUFDLEdBR3JELEdBQXNCLEVBQ3hCLENBQUMsSUFBZSxDQUNkLElBQU0sR0FBWSxFQUFNLENBQUksRUFBRSxPQUFPLE1BQU0sRUFBRSxZQUFZLEVBQ3pELE1BQU8sQ0FBQyxFQUFjLFdBQVcsU0FDL0IsRUFDRixHQUVGLE9BRUUsR0FBVSxFQUNaLEdBQUcsRUFBYyxVQUFVLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxPQUNyRCxRQUNFLEdBQVUsRUFDWixJQUFJLEVBQWMsUUFBVSxHQUFHLFNBQVMsRUFBRSxTQUFTLEVBQUcsR0FBRyxPQUN6RCxRQUVKLE9BQ0UsZUFrTUUsQ0FqTUEsRUF1TEUsR0F2TEYsQ0FBUSxLQUFNLEdBQU0sYUFBYyxFQUFsQyxTQUNFLEVBcUxFLEdBckxGLENBQWUsVUFBVSxpRkFBekIsU0FxTEUsQ0FwTEEsRUFPRSxHQVBGLENBQWMsVUFBVSx3QkFBeEIsU0FPRSxDQU5BLEVBRUUsR0FGRixDQUFhLFVBQVUsdUJBQXZCLFNBQ0csR0FBZSxHQUFLLEVBQUUsV0FBVyxFQUFJLEVBQUUsYUFBYSxFQUNyRCxFQUNGLEVBRUUsR0FGRixDQUFtQixVQUFVLHFCQUE3QixTQUNHLEdBQWUsR0FBSyxFQUFFLGtCQUFrQixFQUFJLEVBQUUsYUFBYSxFQUM1RCxHQUNGLEVBRUYsRUEwS0UsT0ExS0YsQ0FDRSxTQUFVLEdBQ1YsVUFBVSwrQkFGWixTQTBLRSxDQXRLQSxFQXlJRSxHQXpJRixDQUFZLFVBQVUsaUJBQXRCLFNBQ0UsRUF1SUUsTUF2SUYsQ0FBSyxVQUFVLDBCQUFmLFNBdUlFLENBdElBLEVBYUUsTUFiRixDQUFLLFVBQVUsYUFBZixTQWFFLENBWkEsRUFFRSxFQUZGLENBQU8sUUFBUSxRQUFRLFVBQVUscUJBQWpDLFNBQ0csRUFBRSxPQUFPLEVBQ1YsRUFDRixFQUFDLEdBQUQsQ0FDRSxHQUFHLFFBQ0gsS0FBSyxRQUNMLE1BQU8sRUFBVyxNQUNsQixTQUFVLEdBQ1YsWUFBYSxFQUFFLHVCQUF1QixFQUN0QyxTQUFRLEdBQ1IsVUFBVSxxQkFDWixHQUNBLEVBRUYsRUFZRSxNQVpGLENBQUssVUFBVSxzQkFBZixTQVlFLENBWEEsRUFFRSxFQUZGLENBQU8sUUFBUSxjQUFjLFVBQVUscUJBQXZDLFNBQ0csRUFBRSxhQUFhLEVBQ2hCLEVBQ0YsRUFBQyxHQUFELENBQ0UsR0FBRyxjQUNILEtBQUssY0FDTCxNQUFPLEVBQVcsWUFDbEIsU0FBVSxHQUNWLFlBQWEsRUFBRSw2QkFBNkIsRUFDNUMsVUFBVSxxQkFDWixHQUNBLEVBRUYsRUFTRSxNQVRGLENBQUssVUFBVSw4QkFBZixTQVNFLENBUkEsRUFBQyxHQUFELENBQ0UsR0FBRyxTQUNILFFBQVMsRUFDVCxnQkFBaUIsQ0FBQyxJQUFZLEVBQVksSUFBWSxFQUFJLEVBQzVELEVBQ0EsRUFFRSxFQUZGLENBQU8sUUFBUSxTQUFTLFVBQVUscUJBQWxDLFNBQ0csRUFBRSxRQUFRLEVBQ1gsR0FDRixFQUVGLEVBdUJFLE1BdkJGLENBQUssVUFBVSxrQ0FBZixTQXVCRSxDQXRCQSxFQVdFLE1BWEYsVUFXRSxDQVZBLEVBRUUsRUFGRixDQUFPLFVBQVUscUJBQWpCLFNBQ0csRUFBRSxXQUFXLEVBQ2QsRUFDRixFQUFDLEdBQUQsQ0FDRSxLQUFNLEVBQ04sU0FBVSxFQUNWLFVBQVUsT0FDVixjQUFhLEdBQ2IsU0FBVSxHQUNaLEdBQ0EsRUFDRixFQVNFLE1BVEYsVUFTRSxDQVJBLEVBQXNELEVBQXRELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxTQUFTLEVBQUksRUFDdEQsRUFBQyxHQUFELENBQ0UsS0FBTSxFQUNOLFNBQVUsR0FDVixVQUFVLE9BQ1YsY0FBYSxHQUNiLFNBQVUsR0FDWixHQUNBLEdBQ0YsRUFFRCxDQUFDLEdBQ0EsRUE2QkUsTUE3QkYsQ0FBSyxVQUFVLGtDQUFmLFNBNkJFLENBNUJBLEVBYUUsTUFiRixVQWFFLENBWkEsRUFFRSxFQUZGLENBQU8sVUFBVSxxQkFBakIsU0FDRyxFQUFFLFdBQVcsRUFDZCxFQUNGLEVBQUMsR0FBRCxDQUNFLE1BQU8sRUFDUCxTQUFVLEdBQ1YsUUFBUyxHQUNULFFBQVMsR0FDVCxXQUFZLEVBQ1osVUFBVSwwQkFDVixLQUFLLGFBQ1AsR0FDQSxFQUNGLEVBYUUsTUFiRixVQWFFLENBWkEsRUFFRSxFQUZGLENBQU8sVUFBVSxxQkFBakIsU0FDRyxFQUFFLFNBQVMsRUFDWixFQUNGLEVBQUMsR0FBRCxDQUNFLE1BQU8sRUFDUCxTQUFVLEdBQ1YsUUFBUyxHQUNULFFBQVMsR0FDVCxXQUFZLEVBQ1osVUFBVSwwQkFDVixLQUFLLFdBQ1AsR0FDQSxHQUNGLEVBR0osRUFrQkUsTUFsQkYsQ0FBSyxVQUFVLHNCQUFmLFNBa0JFLENBakJBLEVBQW9ELEVBQXBELENBQU8sVUFBVSxxQkFBakIsU0FBdUMsRUFBRSxPQUFPLEVBQUksRUFDcEQsRUFlRSxNQWZGLENBQUssVUFBVSx1QkFBZixTQUNHLEdBQWMsSUFBSSxDQUFDLElBQ2xCLEVBQUMsRUFBRCxDQUVFLFFBQVEsUUFDUixLQUFLLFNBQ0wsVUFBVyxFQUNULEdBQUcsRUFBTSwyQ0FDVCxJQUFrQixFQUFNLE9BQ3RCLGtEQUNKLEVBQ0EsUUFBUyxJQUFNLEVBQWlCLEVBQU0sS0FBSyxFQUMzQyxhQUFZLEVBQU0sT0FUYixFQUFNLEtBVWIsQ0FDRCxFQUNELEdBQ0YsRUFFRixFQVlFLE1BWkYsQ0FBSyxVQUFVLHNCQUFmLFNBWUUsQ0FYQSxFQUVFLEVBRkYsQ0FBTyxRQUFRLFdBQVcsVUFBVSxxQkFBcEMsU0FDRyxFQUFFLFVBQVUsRUFDYixFQUNGLEVBQUMsR0FBRCxDQUNFLEdBQUcsV0FDSCxLQUFLLFdBQ0wsTUFBTyxFQUFXLFNBQ2xCLFNBQVUsR0FDVixZQUFhLEVBQUUsMEJBQTBCLEVBQ3pDLFVBQVUscUJBQ1osR0FDQSxFQUdGLEVBQUMsR0FBRCxDQUFrQixNQUFPLEdBQU8sU0FBVSxHQUFtQixHQUM3RCxFQUNGLEVBRUYsRUEwQkUsR0ExQkYsQ0FBYyxVQUFVLGlFQUF4QixTQTBCRSxDQXpCQyxHQUFlLElBQ2QsRUFRRSxFQVJGLENBQ0UsS0FBSyxTQUNMLFFBQVEsY0FDUixRQUFTLEdBQ1QsVUFBVSw4QkFDVixLQUFLLEtBTFAsU0FPRyxFQUFFLFFBQVEsRUFDWCxFQUVKLEVBYUUsTUFiRixDQUFLLFVBQVUsOEJBQWYsU0FhRSxDQVpBLEVBUUUsRUFSRixDQUNFLEtBQUssU0FDTCxRQUFRLFVBQ1IsUUFBUyxFQUNULFVBQVUsc0JBQ1YsS0FBSyxLQUxQLFNBT0csRUFBRSxRQUFRLEVBQ1gsRUFDRixFQUVFLEVBRkYsQ0FBUSxLQUFLLFNBQVMsVUFBVSxzQkFBc0IsS0FBSyxLQUEzRCxTQUNHLEdBQWUsR0FBSyxFQUFFLFFBQVEsRUFBSSxFQUFFLFFBQVEsRUFDN0MsR0FDRixHQUNGLEdBQ0YsR0FDRixFQUNGLEVBR0YsRUFBQyxHQUFELENBQ0UsT0FBUSxFQUFZLE9BQ3BCLFFBQVMsRUFDVCxVQUFXLEVBQ1gsY0FBZSxFQUFZLGNBQzNCLFdBQVksRUFBWSxPQUFPLE9BQVMsR0FDMUMsR0FDQSxHZXBjTixnQkFBUyxlQUVULElBQU0sR0FBTztBQUFBLEVBRVAsR0FBZ0IsQ0FDcEIsa0JBQ0EsV0FDQSxpQkFDQSwwQkFDQSxhQUNBLHFCQUNBLG1CQUNBLGVBQ0EsZUFDRixFQUFFLEtBQUssRUFBSSxFQUVMLEdBQWEsQ0FBQyxJQUF5QixDQUMzQyxPQUFPLEVBQ0osV0FBVyxLQUFNLE1BQU0sRUFDdkIsV0FBVyxJQUFLLEtBQUssRUFDckIsV0FBVyxJQUFLLEtBQUssRUFDckIsV0FBVztBQUFBLEVBQU0sS0FBSyxFQUN0QixXQUFXLEtBQU0sRUFBRSxHQUdsQixHQUFhLENBQUMsRUFBbUIsRUFBVyxLQUFrQixDQUNsRSxPQUFPLEVBQ0gsRUFBSyxPQUFPLFVBQVUsRUFDdEIsRUFBSyxJQUFJLEVBQUUsT0FBTyxzQkFBc0IsR0FHeEMsR0FBUyxDQUFDLElBQWlDLENBQy9DLE9BQU8sRUFBTSxLQUFPLEdBQUcsRUFBTSxxQkFHekIsR0FBYyxDQUFDLElBQWtDLENBQ3JELEdBQUksQ0FJRixPQUhvQixJQUFJLEdBQ3RCLENBQ0YsRUFBRSxTQUFTLEVBRUcsTUFBTTtBQUFBLENBQUksRUFBRSxLQUFLLENBQUMsSUFBUyxFQUFLLFdBQVcsUUFBUSxDQUFDLEdBQUssR0FFdkUsS0FBTSxDQUNOLE1BQU8sS0FJTCxHQUF1QixDQUFDLElBQWlDLENBQzdELElBQU0sRUFBWSxFQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sc0JBQXNCLEVBQ3ZELEVBQVksRUFBTSxPQUFTLGNBQWdCLEdBQzNDLEVBQVEsRUFBTSxNQUFRLEdBQVksRUFBTSxLQUFLLEVBQUksR0FFakQsRUFBVSxFQUFNLFNBQVMsT0FDM0IsRUFBTSxRQUFRLElBQUksQ0FBQyxJQUFNLEdBQVcsRUFBTSxDQUFDLEVBQUcsRUFBTSxNQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFDckUsS0FFRSxFQUFlLEVBQU0sYUFDdkIsR0FBVyxFQUFNLEVBQU0sWUFBWSxFQUFHLEVBQU0sTUFBTSxFQUNsRCxLQXNCSixNQXBCYyxDQUNaLGVBQ0EsT0FBTyxHQUFPLENBQUssSUFDbkIsVUFBVSxLQUFhLEdBQVcsRUFBTSxNQUFPLEVBQU0sTUFBTSxJQUMzRCxRQUFRLEtBQWEsR0FBVyxFQUFNLElBQUssRUFBTSxNQUFNLElBQ3ZELFdBQVcsR0FBVyxFQUFNLEtBQUssSUFDakMsRUFBTSxhQUFlLGVBQWUsR0FBVyxFQUFNLFdBQVcsSUFDaEUsRUFBTSxVQUFZLFlBQVksR0FBVyxFQUFNLFFBQVEsSUFDdkQsRUFDQSxHQUFXLFVBQVUsSUFDckIsR0FBZ0IsaUJBQWlCLElBQ2pDLFdBQVcsSUFDWCxXQUFXLElBQ1gsaUJBQWlCLElBQ2pCLG1CQUNBLGFBQ0EsZ0JBQ0EsWUFDRixFQUVhLE9BQU8sT0FBTyxFQUFFLEtBQUssRUFBSSxHQUdsQyxHQUFlLENBQUMsSUFBNkMsQ0FDakUsSUFBTSxFQUFXLElBQUksSUFFckIsT0FBTyxFQUFPLE9BQU8sQ0FBQyxJQUFVLENBQzlCLElBQU0sRUFBTSxHQUFPLENBQUssRUFDbEIsRUFBa0IsRUFBTSxPQUFTLENBQUMsRUFBTSxhQUN4QyxFQUFxQixFQUFNLGNBQWdCLENBQUMsRUFBTSxNQUV4RCxHQUFJLEVBRUYsT0FEQSxFQUFTLElBQUksQ0FBRyxFQUNULEdBRVQsR0FBSSxFQUNGLE1BQU8sR0FFVCxNQUFPLENBQUMsRUFBTSxPQUFTLENBQUMsRUFBTSxjQUFnQixDQUFDLEVBQVMsSUFBSSxDQUFHLEVBQ2hFLEdBR1UsR0FBb0IsQ0FDL0IsRUFDQSxFQUFlLG1CQUNKLENBQ1gsSUFBTSxFQUFPLEdBQVcsQ0FBWSxFQUM5QixFQUFnQixHQUFhLENBQU0sRUFBRSxJQUFJLEVBQW9CLEVBRW5FLE1BQU8sQ0FDTCxrQkFDQSxjQUNBLHNDQUNBLHFCQUNBLGlCQUNBLGdCQUFnQixJQUNoQiw4QkFBOEIsSUFDOUIsR0FDQSxHQUFHLEVBQ0gsZUFDRixFQUFFLEtBQUssRUFBSSxHQUdBLEdBQW9CLENBQy9CLEVBQ0EsRUFBVyxlQUNYLEVBQWUsbUJBQ04sQ0FDVCxJQUFNLEVBQU8sSUFBSSxLQUFLLENBQUMsR0FBa0IsRUFBUSxDQUFZLENBQUMsRUFBRyxDQUMvRCxLQUFNLDZCQUNSLENBQUMsRUFDSyxFQUFNLElBQUksZ0JBQWdCLENBQUksRUFDOUIsRUFBcUIsRUFBUyxTQUFTLE1BQU0sRUFDL0MsRUFDQSxHQUFHLFFBRUQsRUFBTyxTQUFTLGNBQWMsR0FBRyxFQUN2QyxFQUFLLEtBQU8sRUFDWixFQUFLLFNBQVcsRUFFaEIsU0FBUyxLQUFLLE9BQU8sQ0FBSSxFQUN6QixFQUFLLE1BQU0sRUFDWCxFQUFLLE9BQU8sRUFDWixJQUFJLGdCQUFnQixDQUFHLEdDM0l6QixtQkFBUyxlQUEwQixXQUFVLFdBQU0sc0JBQ25ELG1CQUFnQixlQ0NoQiwwQkFBUyxhQUFpQixzQkFDMUIsc0JBQVMsc0JBQ1Qsa0JBQVMsZUFBUyxpRkFHbEIsSUFBTSxHQUFhLENBQ2pCLFVBQ0EsV0FDQSxRQUNBLFFBQ0EsTUFDQSxPQUNBLE9BQ0EsU0FDQSxZQUNBLFVBQ0EsV0FDQSxVQUNGLEVBRU0sR0FBWSxDQUNoQixRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsRUFBRyxFQUM3QixRQUFTLENBQUUsUUFBUyxFQUFHLEVBQUcsQ0FBRSxFQUM1QixLQUFNLENBQUUsUUFBUyxFQUFHLEVBQUcsR0FBSSxDQUM3QixFQUVNLEdBQWUsSUFBTSxDQUN6QixJQUFRLGNBQWEsT0FBTSxpQkFBZ0IsSUFBRyxrQkFDNUMsRUFBd0IsQ0FBQyxLQUFTLENBQ2hDLFlBQWEsRUFBSSxZQUNqQixLQUFNLEVBQUksS0FDVixlQUFnQixFQUFJLGVBQ3BCLEVBQUcsRUFBSSxFQUNQLGVBQWdCLEVBQUksY0FDdEIsRUFBRSxHQUVHLEVBQWEsR0FBa0IsR0FBd0IsSUFBSSxFQUU1RCxFQUFTLEdBQVEsSUFBTSxHQUFXLElBQUksQ0FBQyxJQUFRLEVBQUUsQ0FBRyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUMsRUFDM0QsRUFBYyxFQUFZLEtBQUssRUFDL0IsRUFBUSxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBTSxFQUFjLEVBQUksQ0FBQyxFQUNoRSxFQUFXLEVBQVksRUFBYSxDQUFjLEVBRWxELEVBQWEsQ0FBQyxJQUFzQixDQUN4QyxFQUFlLENBQUksRUFDbkIsRUFBZSxJQUFJLEdBR2YsRUFBcUIsSUFDekIsZUFDRyxFQUFPLElBQUksQ0FBQyxFQUFPLElBQ2xCLEVBVUUsRUFWRixDQUVFLFFBQVEsUUFDUixVQUFXLEVBQ1QsNEJBQ0EsRUFBWSxNQUFNLElBQU0sR0FBUyxlQUNuQyxFQUNBLFFBQVMsSUFBTSxFQUFXLEVBQVksTUFBTSxDQUFLLENBQUMsRUFQcEQsU0FTRyxHQVJJLENBU0wsQ0FDSCxFQUNELEVBR0UsRUFBb0IsSUFDeEIsZUFDRyxFQUFNLElBQUksQ0FBQyxJQUNWLEVBVUUsRUFWRixDQUVFLFFBQVEsUUFDUixVQUFXLEVBQ1QsNEJBQ0EsRUFBWSxLQUFLLElBQU0sR0FBUSxlQUNqQyxFQUNBLFFBQVMsSUFBTSxFQUFXLEVBQVksS0FBSyxDQUFJLENBQUMsRUFQbEQsU0FTRyxHQVJJLENBU0wsQ0FDSCxFQUNELEVBR0UsRUFBb0IsSUFDeEIsZUFDRyxNQUFNLEtBQUssQ0FBRSxPQUFRLENBQUUsRUFBRyxDQUFDLEVBQUcsSUFBTSxDQUNuQyxJQUFNLEVBQVcsRUFBWSxTQUFTLEVBQUcsTUFBTSxFQUFFLElBQUksRUFBRyxNQUFNLEVBQ3hELEVBQU8sRUFBWSxFQUFVLENBQWMsRUFDM0MsRUFBUSxFQUFLLEdBQ2IsRUFBTSxFQUFLLEdBQ1gsRUFBZ0IsRUFBUyxPQUFPLEVBQWEsTUFBTSxFQUNuRCxFQUFlLEVBQU0sTUFBTSxJQUFNLEVBQUksTUFBTSxFQUVqRCxPQUNFLEVBZUUsRUFmRixDQUVFLFFBQVEsUUFDUixVQUFXLEVBQ1QsNEJBQ0EsR0FBaUIsZUFDbkIsRUFDQSxRQUFTLElBQU0sRUFBVyxDQUFLLEVBUGpDLFNBU0UsR0FLRSxNQUxGLENBQUssVUFBVSwyQ0FBZixTQUtFLENBSkEsRUFBeUQsT0FBekQsVUFBTyxHQUFHLEVBQU0sT0FBTyxPQUFPLE9BQU8sRUFBSSxPQUFPLEdBQUcsSUFBTSxFQUN4RCxHQUNDLEVBQTZGLE9BQTdGLENBQU0sVUFBVSw0QkFBaEIsU0FBNkMsR0FBRyxFQUFNLE9BQU8sS0FBSyxLQUFLLEVBQUksT0FBTyxLQUFLLElBQU0sR0FFL0YsR0FiRyxFQUFNLE9BQU8sWUFBWSxDQWM5QixFQUVMLEVBQ0QsRUFHRSxFQUFtQixJQUFNLENBQzdCLElBQU0sRUFBVyxFQUFZLFFBQVEsT0FBTyxFQUN0QyxFQUFjLEVBQVksWUFBWSxFQUU1QyxPQUNFLGVBQ0csTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFZLEVBQUcsQ0FBQyxFQUFHLElBQU0sQ0FDN0MsSUFBTSxFQUFNLEVBQVMsS0FBSyxFQUFJLENBQUMsRUFDekIsRUFBZSxFQUFJLE9BQU8sRUFBYSxLQUFLLEVBQzVDLEVBQVUsRUFBSSxPQUFPLEVBQU0sRUFBRyxLQUFLLEVBRXpDLE9BQ0UsRUFpQkUsRUFqQkYsQ0FFRSxRQUFRLFFBQ1IsVUFBVyxFQUNULDRCQUNBLEdBQWdCLGVBQ2xCLEVBQ0EsUUFBUyxJQUFNLEVBQVcsQ0FBRyxFQVAvQixTQVNFLEdBT0UsTUFQRixDQUFLLFVBQVUsMkNBQWYsU0FPRSxDQU5BLEVBQW1DLE9BQW5DLFVBQU8sRUFBSSxPQUFPLGFBQWEsRUFBSSxFQUNsQyxHQUNDLEVBRUUsT0FGRixDQUFNLFVBQVUsOERBQWhCLFNBQ0csRUFBRSxPQUFPLEVBQ1YsR0FFSixHQWZHLEVBQUksT0FBTyxZQUFZLENBZ0I1QixFQUVMLEVBQ0QsR0ErQk4sTUEzQmlCLENBQ2YsQ0FDRSxHQUFJLFFBQ0osT0FBUSxJQUFTLE9BQ2pCLE1BQU8sRUFBWSxPQUFPLE1BQU0sRUFDaEMsT0FBUSxDQUNWLEVBQ0EsQ0FDRSxHQUFJLE9BQ0osT0FBUSxHQUNSLE1BQU8sRUFBWSxPQUFPLE1BQU0sRUFDaEMsT0FBUSxDQUNWLEVBQ0EsQ0FDRSxHQUFJLE9BQ0osT0FBUSxJQUFTLE9BQ2pCLE1BQU8sR0FBRyxFQUFTLEdBQUcsT0FBTyxPQUFPLE9BQU8sRUFBUyxHQUFHLE9BQU8sT0FBTyxJQUNyRSxPQUFRLENBQ1YsRUFDQSxDQUNFLEdBQUksTUFDSixPQUFRLElBQVMsTUFDakIsTUFBTyxFQUFZLE9BQU8sU0FBUyxFQUNuQyxPQUFRLENBQ1YsQ0FDRixFQUdHLE9BQU8sQ0FBQyxJQUFNLENBQUMsRUFBRSxNQUFNLEVBQ3ZCLElBQUksQ0FBQyxJQUNKLEdBZ0NFLEdBaENGLENBRUUsS0FBTSxJQUFnQixFQUFRLEdBQzlCLGFBQWMsQ0FBQyxJQUFTLEVBQWUsRUFBTyxFQUFRLEdBQUssSUFBSSxFQUhqRSxTQWdDRSxDQTNCQSxFQXFCRSxHQXJCRixDQUFnQixRQUFPLEdBQXZCLFNBQ0UsR0FtQkUsRUFuQkYsQ0FDRSxRQUFRLFFBQ1IsVUFBVSw4Q0FDVixjQUFZLHdCQUhkLFNBbUJFLENBZEEsRUFZRSxHQVpGLENBQWlCLEtBQUssT0FBdEIsU0FDRSxFQVVFLEdBQU8sS0FWVCxDQUVFLFFBQVEsVUFDUixRQUFRLFVBQ1IsS0FBSyxPQUNMLFNBQVUsR0FDVixXQUFZLENBQUUsU0FBVSxLQUFNLEtBQU0sV0FBWSxFQUNoRCxjQUFZLHlCQVBkLFNBU0csRUFBUSxPQVJKLEdBQUcsRUFBUSxNQUFNLEVBQVksT0FBTyxZQUFZLEdBU3JELEVBQ0YsRUFDRixFQUFDLEdBQUQsQ0FBYSxVQUFVLFVBQVUsR0FDakMsRUFDRixFQUNGLEVBSUUsR0FKRixDQUFnQixVQUFVLFdBQTFCLFNBQ0UsRUFFRSxNQUZGLENBQUssVUFBVSx1Q0FBZixTQUNHLEVBQVEsT0FBTyxFQUNoQixFQUNGLElBOUJHLEVBQVEsRUErQmIsQ0FDSCxHQUdVLE1Dak9mLHNCQUFTLG1CQUFhLDBFQWlCdEIsSUFBTSxHQUE0QyxFQUNoRCxjQUNBLFdBQ0EsVUFBVSxVQUNWLE9BQU8sS0FDUCxZQUNBLFVBQ0EsU0FDQSxnQkFDSSxDQUNKLElBQVEsS0FBTSxFQUF3QixDQUFDLEtBQWEsQ0FBRSxFQUFHLEVBQVEsQ0FBRSxFQUFFLEVBQy9ELEVBQVMsSUFBWSxPQUdyQixFQUFxQixDQUFDLElBQXVCLENBQ2pELE9BQU8sRUFFTCxFQUFTLFNBQVcsR0FFcEIsSUFBZ0IsR0FBWSxlQUM5QixHQUdJLEVBQWdCLENBQUMsSUFBdUIsQ0FDNUMsT0FBTyxJQUFnQixFQUFXLFVBQVksV0FHaEQsT0FDRSxHQThCRSxNQTlCRixDQUNFLFVBQVcsRUFDVCxFQUFTLHlCQUEyQixhQUNwQyxDQUNGLEVBSkYsU0E4QkUsQ0F4QkEsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFZLFFBQVEsVUFBVSxLQUFNLEVBQXJELFNBQ0UsR0FBQyxHQUFELENBQWEsVUFBVSxVQUFVLEVBQ2pDLEVBQ0YsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFRLFFBQVEsVUFBVSxLQUFNLEVBQWpELFNBQ0UsR0FBQyxHQUFELENBQWMsVUFBVSxVQUFVLEVBQ2xDLEVBRUQsQ0FBQyxNQUFPLE9BQVEsUUFBUyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQW1CLENBQ3hELE9BQ0UsR0FRRSxFQVJGLENBRUUsUUFBUyxJQUFNLEVBQVMsQ0FBSSxFQUM1QixRQUFTLEVBQWMsQ0FBSSxFQUMzQixLQUFNLEVBQ04sVUFBVyxFQUFtQixDQUFJLEVBTHBDLFNBT0csRUFBRSxDQUFJLEdBTkYsQ0FPTCxFQUVMLEVBRUQsR0FFRSxFQUZGLENBQVEsUUFBUyxFQUFTLFFBQVEsVUFBVSxLQUFNLEVBQWxELFNBQ0csRUFBRSxPQUFPLEVBQ1YsR0FDRixHQUlTLHlERi9EZixJQUFNLEdBQWdDLEVBQUcsWUFBWSxNQUFTLENBQzVELElBQ0UsT0FDQSxVQUNBLGFBQ0EsYUFDQSxRQUNBLGdCQUNBLGtCQUNBLGtCQUNBLFlBQ0EsS0FDRSxFQUF3QixDQUFDLEtBQVMsQ0FDcEMsS0FBTSxFQUFJLEtBQ1YsUUFBUyxFQUFJLFFBQ2IsV0FBWSxFQUFJLFdBQ2hCLFdBQVksRUFBSSxXQUNoQixNQUFPLEVBQUksTUFDWCxjQUFlLEVBQUksY0FDbkIsZ0JBQWlCLEVBQUksZ0JBQ3JCLGdCQUFpQixFQUFJLGdCQUNyQixVQUFXLEVBQUksVUFDZixFQUFHLEVBQUksQ0FDVCxFQUFFLEdBRUssRUFBZ0IsR0FBcUIsR0FBUyxFQUFLLEVBRXBELEVBQWtCLElBQU0sRUFBa0IsRUFBSyxFQUUvQyxFQUFlLElBQU0sQ0FDekIsSUFBTSxFQUFXLGtCQUFrQixJQUFJLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxHQUFHLEVBQUUsU0FDdkUsR0FBa0IsRUFBVyxFQUFVLGdCQUFnQixFQUN2RCxFQUFnQixHQUdaLEVBQWlCLElBQ3JCLEdBUUUsRUFSRixDQUNFLFFBQVMsSUFBTSxFQUFjLEVBQzdCLFFBQVEsVUFDUixLQUFLLEtBQ0wsVUFBVSwwQkFKWixTQVFFLENBRkEsRUFBQyxHQUFELENBQU0sVUFBVSxVQUFVLEVBQzFCLEVBQWlELE9BQWpELENBQU0sVUFBVSxxQkFBaEIsU0FBc0MsRUFBRSxLQUFLLEVBQUksR0FDakQsRUFHRSxFQUFlLEVBQUcsWUFBWSxNQUNsQyxHQVlFLEVBWkYsQ0FDRSxRQUFTLEVBQ1QsUUFBUSxVQUNSLEtBQUssS0FDTCxVQUFXLEVBQUcsMEJBQTJCLEdBQWEsY0FBYyxFQUp0RSxTQVlFLENBTkEsRUFBQyxHQUFELENBQVUsVUFBVSxVQUFVLEVBQzdCLEVBQ0MsR0FBRyxFQUFFLFFBQVEsb0JBRWIsRUFBZ0UsT0FBaEUsQ0FBTSxVQUFVLGlDQUFoQixTQUFrRCxFQUFFLFFBQVEsRUFBSSxHQUVsRSxFQUdKLEdBQUksRUFDRixPQUFPLEVBR1QsT0FDRSxFQXNFRSxNQXRFRixDQUNFLFVBQVUsZ0NBQ1YsY0FBWSxrQkFGZCxTQUlFLEdBaUVFLE1BakVGLENBQ0UsVUFBVyxFQUNULDZGQUNBLEVBQ0EsQ0FDRixFQUxGLFNBaUVFLENBMURBLEdBR0UsTUFIRixDQUFLLFVBQVUsa0ZBQWYsU0FHRSxDQUZBLEVBQUMsR0FBRCxDQUFjLFVBQVUsVUFBVSxFQUNsQyxFQUFDLEdBQUQsRUFBYyxHQUNkLEVBRUYsR0FvREUsTUFwREYsQ0FBSyxVQUFVLGlIQUFmLFNBb0RFLENBbkRBLEdBWUUsTUFaRixDQUFLLFVBQVUsK0RBQWYsU0FZRSxDQVhBLEVBQUMsR0FBRCxDQUNFLFlBQWEsRUFDYixTQUFVLEVBQ1YsUUFBUyxFQUNULE9BQVEsRUFDUixXQUFZLEVBQ1osUUFBUSxVQUNSLFVBQVUsY0FDWixFQUNBLEVBQUMsRUFBRCxFQUFnQixFQUNoQixFQUFDLEVBQUQsRUFBYyxHQUNkLEVBRUYsR0FvQ0UsTUFwQ0YsQ0FBSyxVQUFVLDZEQUFmLFNBb0NFLENBbkNBLEVBQUMsRUFBRCxFQUFnQixFQUNoQixHQWlDRSxHQWpDRixDQUFTLEtBQU0sRUFBZ0IsYUFBYyxFQUE3QyxTQWlDRSxDQWhDQSxFQUlFLEdBSkYsQ0FBZ0IsUUFBTyxHQUF2QixTQUNFLEVBRUUsRUFGRixDQUFRLFFBQVEsVUFBVSxLQUFLLEtBQS9CLFNBQ0UsRUFBQyxHQUFELENBQU0sVUFBVSxVQUFVLEVBQzFCLEVBQ0YsRUFDRixFQTBCRSxHQTFCRixDQUFnQixNQUFNLE1BQU0sVUFBVSxnQkFBdEMsU0FDRSxHQXdCRSxNQXhCRixDQUFLLFVBQVUsWUFBZixTQXdCRSxDQXZCQSxFQUFDLEdBQUQsQ0FDRSxZQUFhLEVBQ2IsU0FBVSxDQUFDLElBQU0sQ0FDZixFQUFRLENBQUMsRUFDVCxFQUFnQixHQUVsQixRQUFTLElBQU0sQ0FDYixFQUFNLEVBQ04sRUFBZ0IsR0FFbEIsT0FBUSxJQUFNLENBQ1osRUFBVyxFQUNYLEVBQWdCLEdBRWxCLFdBQVksSUFBTSxDQUNoQixFQUFXLEVBQ1gsRUFBZ0IsR0FFbEIsUUFBUSxPQUNWLEVBQ0EsRUFFRSxNQUZGLENBQUssVUFBVSxnQkFBZixTQUNFLEVBQUMsRUFBRCxDQUFjLFVBQVMsR0FBQyxFQUN4QixHQUNGLEVBQ0YsR0FDRixHQUNGLEdBQ0YsR0FDRixFQUNGLEdBSVMsTUc1SmYsMEJBQVMsYUFBaUIsMEVBRTFCLElBQU0sR0FBbUIsQ0FBQyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssSUFBSyxHQUFHLEVBQ3JELEdBQW1CLENBQUMsYUFBYyxjQUFlLGNBQWMsRUFDL0QsR0FBd0IsR0FFeEIsR0FBZ0IsQ0FBQyxJQUErQixDQUNwRCxHQUFJLElBQWUsRUFDakIsTUFBTyxHQUVULElBQU0sRUFBUyxFQUFhLEVBQUksSUFBTSxHQUN0QyxNQUFPLEdBQUcsVUFBbUIsS0FtQnpCLEdBQVcsSUFBTSxDQUNyQixJQUFRLGNBQWEsYUFBWSxTQUFRLFVBQVMsd0JBQXVCLEtBQ3ZFLEVBQW1CLEVBQ2YsRUFBYyxFQUFZLEtBQUssRUFFL0IsRUFBcUIsSUFBbUIsQ0FDNUMsT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFBZSxDQUNuRCxJQUFNLEVBQVksRUFBTSxFQUNyQixLQUFLLENBQVcsRUFDaEIsTUFBTSxDQUFVLEVBQ2hCLFFBQVEsT0FBTyxFQUNaLEVBQWdCLEVBQU8sT0FDM0IsQ0FBQyxJQUNDLEVBQU0sTUFBTSxLQUFLLElBQU0sR0FDdkIsRUFBTSxNQUFNLE1BQU0sSUFBTSxDQUM1QixFQUVBLE1BQU8sQ0FDTCxLQUFNLEVBQ04sS0FBTSxFQUFVLE9BQU8sTUFBTSxFQUM3QixXQUFZLEVBQWMsT0FDMUIsU0FBVSxFQUFVLE9BQU8sSUFBSSxDQUNqQyxFQUNELEdBR0csRUFBdUIsQ0FBQyxJQUFzQyxDQUNsRSxJQUFNLEVBQXFCLEVBQVUsUUFBUSxPQUFPLEVBQUUsUUFBUSxNQUFNLEVBRXBFLE9BQU8sTUFBTSxLQUFLLENBQUUsT0FBUSxFQUFzQixFQUFHLENBQUMsRUFBRyxJQUFhLENBQ3BFLElBQU0sRUFBVSxFQUFtQixJQUFJLEVBQVUsS0FBSyxFQUNoRCxFQUFXLEVBQVEsUUFBUSxLQUFLLEVBQ2hDLEVBQVMsRUFBUSxNQUFNLEtBQUssRUFDNUIsRUFBYyxFQUFzQixFQUFVLENBQU0sRUFFMUQsTUFBTyxDQUNMLEtBQU0sRUFDTixPQUFRLEVBQVEsT0FBTyxZQUFZLEVBQ25DLGlCQUFrQixFQUFRLE1BQU0sSUFBTSxFQUFVLE1BQU0sRUFDdEQsUUFBUyxFQUFRLE9BQU8sRUFBTSxFQUFHLEtBQUssRUFDdEMsV0FBWSxFQUFRLE9BQU8sRUFBYSxLQUFLLEVBQzdDLFdBQVksRUFBWSxNQUMxQixFQUNELEdBR0csRUFBaUIsQ0FDckIsRUFDQSxFQUNBLElBQ0csQ0FDSCxHQUFPLGdCQUFnQixFQUN2QixFQUFXLENBQUksRUFDZixFQUFRLENBQUksR0FHUixFQUFxQixDQUFDLElBQTBCLENBQ3BELElBQU0sRUFBWSxJQUFVLEVBQUksRUFBRSxPQUFPLEVBQUksRUFBRSxRQUFRLEVBQ3ZELE1BQU8sR0FBRyxLQUFTLEtBR2YsRUFBa0IsQ0FBQyxJQUF5QixDQUdoRCxJQUFNLEVBQW9CLEVBQUksaUJBQzFCLEdBQ0EsbUNBQ0UsRUFBYSxFQUFJLFFBQ25CLGtEQUNBLEdBQ0UsRUFDSixFQUFJLFlBQWMsQ0FBQyxFQUFJLFFBQVUsa0NBQW9DLEdBQ2pFLEVBQ0osRUFBSSxXQUFhLEdBQUssQ0FBQyxFQUFJLFNBQVcsQ0FBQyxFQUFJLFdBQWEsY0FBZ0IsR0FFMUUsT0FBTyxFQVpMLG1KQWNBLEVBQ0EsRUFDQSxFQUNBLENBQ0YsR0FHSSxFQUF1QixDQUFDLEVBQWUsSUFBNkIsQ0FFeEUsT0FBTyxFQUFHLCtCQURPLEVBQVUsd0JBQTBCLENBQ0gsR0FHOUMsRUFBYSxFQUFtQixFQUV0QyxPQUNFLEdBNkdFLEdBN0dGLENBQVksY0FBWSxZQUFZLFVBQVUsU0FBOUMsU0FDRSxHQTJHRSxNQTNHRixDQUNFLGNBQVksWUFDWixVQUFVLHdFQUZaLFNBSUcsRUFBVyxJQUFJLENBQUMsRUFBTyxJQUFlLENBQ3JDLElBQU0sRUFBYyxFQUFxQixFQUFNLElBQUksRUFDN0MsRUFBaUIsRUFBYSxLQUVwQyxPQUNFLEdBK0ZFLE1BL0ZGLENBRUUsY0FBYSxjQUFjLEVBQU0sV0FDakMsVUFBVSxpSEFIWixTQStGRSxDQTFGQSxHQStCRSxHQS9CRixDQUFpQixLQUFLLE9BQXRCLFNBQ0UsR0E2QkUsR0FBTyxJQTdCVCxDQUVFLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzlCLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxDQUFFLEVBQzVCLEtBQU0sQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzNCLFdBQVksQ0FDVixTQUFVLEtBQ1YsS0FBTSxZQUNOLE1BQU8sQ0FDVCxFQUNBLFVBQVUseUNBVlosU0E2QkUsQ0FqQkEsR0FPRSxTQVBGLENBQ0UsS0FBSyxTQUNMLFFBQVMsSUFBTSxFQUFlLEVBQU0sS0FBTSxPQUFPLEVBQ2pELGNBQWEsb0JBQW9CLEVBQU0sV0FDdkMsVUFBVSxxREFKWixTQU1HLEVBQU0sS0FDUCxFQUVELEVBQU0sV0FBYSxHQUNsQixHQUtFLE9BTEYsQ0FDRSxjQUFhLDBCQUEwQixFQUFNLFdBQzdDLFVBQVUsb0VBRlosU0FJRyxFQUFtQixFQUFNLFVBQVUsRUFDcEMsSUExQkMsU0FBUyxHQTRCZCxFQUNGLEVBRUYsR0F3REUsTUF4REYsQ0FDRSxjQUFhLHNCQUFzQixFQUFNLFdBQ3pDLFVBQVUsMkNBRlosU0F3REUsQ0FwREMsR0FBaUIsSUFBSSxDQUFDLEVBQVMsSUFDOUIsR0FLRSxNQUxGLENBRUUsVUFBVSx3Q0FGWixTQUlHLEdBSEksVUFBVSxHQUlmLENBQ0gsRUFFQSxFQUFZLElBQUksQ0FBQyxJQUFRLENBQ3hCLElBQU0sRUFBWSxZQUFZLEVBQU0sS0FBSyxPQUFPLFNBQVMsS0FBSyxFQUFJLFNBQzVELEVBQVksRUFBSSxXQUFhLEVBQzdCLEVBQWtCLEtBQUssSUFBSSxFQUFJLFdBQVksQ0FBQyxFQUM1QyxFQUFtQixHQUFpQixNQUN4QyxFQUNBLENBQ0YsRUFFQSxPQUNFLEdBOEJFLFNBOUJGLENBQ0UsS0FBSyxTQUVMLGNBQWEsRUFDYixRQUFTLENBQUMsSUFBTSxFQUFlLEVBQUksS0FBTSxNQUFPLENBQUMsRUFDakQsTUFBTyxHQUFjLEVBQUksVUFBVSxFQUNuQyxVQUFXLEVBQWdCLENBQUcsRUFOaEMsU0E4QkUsQ0F0QkEsR0FFRSxPQUZGLENBQU0sVUFBVSwyQkFBaEIsU0FDRyxFQUFJLEtBQUssS0FBSyxFQUNmLEVBRUQsR0FDQyxHQWVFLE1BZkYsQ0FDRSxVQUFXLEVBQ1QsNkRBQ0EsRUFBSSxTQUFXLGNBQ2pCLEVBSkYsU0FNRyxFQUFpQixJQUFJLENBQUMsSUFDckIsR0FBQyxPQUFELENBRUUsVUFBVyxFQUNULEVBQ0EsRUFBSSxPQUNOLEdBSkssQ0FLUCxDQUNELEVBQ0QsSUExQkMsRUFBSSxNQTRCVCxFQUVMLEdBQ0QsSUE3RkcsRUFBTSxRQThGWCxFQUVMLEVBQ0QsRUFDRixHQUlTLE1DeE9mLDBCQUFTLGFBQWlCLHNCQ0cxQixxQkFDRSxrQkFDQSxvQkFDQSxrQkFDQSxnQkFDQSxpQkFDQSx1QkFFRixpQkFBZ0IsZUFBUSxlQ2RqQixJQUFNLEdBQWtCLENBQzdCLEVBQ0EsSUFDRyxDQUNILElBQVEsU0FBUSxRQUFTLEVBRXpCLEdBQUksQ0FBQyxHQUFVLENBQUMsR0FBUSxDQUFDLEVBQ3ZCLE9BQU8sS0FHVCxJQUFNLEVBQWEsRUFBSyxLQUFLLFNBQVMsT0FBUyxhQUN2QyxhQUFZLFVBQVcsRUFBSyxLQUFLLFNBQVcsQ0FBQyxFQUNqRCxFQUVKLEdBQUksRUFBWSxDQUNkLElBQVEsT0FBTSxPQUFPLEVBQUcsU0FBUyxHQUFNLEVBQUssS0FBSyxRQUdqRCxFQUFXLEVBQU0sQ0FBSSxFQUFFLEtBQUssQ0FBSSxFQUFFLE9BQU8sQ0FBTSxFQUMxQyxLQUNMLElBQVEsUUFBUyxFQUFLLEtBQUssUUFFM0IsRUFBVyxFQUFNLENBQUksRUFHdkIsSUFBTSxFQUFnQixFQUFZLElBQUksS0FBSyxFQUFZLE1BQU8sUUFBUSxFQUdsRSxFQUFTLEVBQVMsSUFBSSxFQUFlLFFBQVEsRUFFakQsR0FBSSxFQUFPLE9BQU8sRUFBTyxRQUFRLEtBQUssQ0FBQyxFQUVyQyxFQUFTLEVBQU8sU0FBUyxFQUFHLEtBQUssRUFBRSxNQUFNLEtBQUssRUFJaEQsSUFBTSxFQUFVLENBQ2QsTUFBTyxFQUNQLElBQUssRUFDTCxhQUNBLE9BQVEsRUFBYSxHQUFTLEdBQVUsRUFBWSxNQUN0RCxFQUNBLE1BQU8sQ0FBRSxjQUFhLFNBQVEsR0M5Q2hDLHNCQUFTLHVCQUNULDhCQUFnQixlQUFxQixlQUNyQyw2QkFBUyxxRUFRRixJQUFNLEdBQW9ELEVBQUcsU0FBVSxDQUM1RSxJQUFPLEVBQWEsR0FBa0IsR0FBd0IsSUFBSSxFQU1sRSxPQUpBLEdBQW9CLEVBQUssS0FBTyxDQUM5QixnQkFDRixFQUFFLEVBR0EsR0FZRSxHQVpGLENBQWEsVUFBVyxDQUFDLEVBQWtCLEVBQTNDLFNBQ0csR0FDQyxHQVFFLE1BUkYsQ0FDRSxVQUFXLEVBQ1Qsc0ZBQ0EsRUFBWSxpQkFBbUIsY0FDL0IsRUFBWSxPQUFTLFlBQ3ZCLEVBTEYsU0FPRyxHQUFhLE1BQ2QsRUFFSixzRUZKQyxTQUFTLEVBQWtCLEVBQUcsWUFBcUMsQ0FDeEUsSUFBTSxFQUFpQixHQUFzQixJQUFJLEVBQzNDLEVBQWlCLEdBRXBCLElBQUksR0FFQyxjQUFhLHVCQUFzQixzQkFDekMsRUFBd0IsQ0FBQyxLQUFhLENBQ3BDLFlBQWEsRUFBUSxZQUNyQixxQkFBc0IsRUFBUSxxQkFDOUIsbUJBQW9CLEVBQVEsa0JBQzlCLEVBQUUsR0FHRyxFQUFpQixHQUFzQixHQUkzQyxDQUNELE9BQVEsR0FDUixNQUFPLEtBQ1AsUUFBUyxJQUNYLENBQUMsRUFHSyxFQUFjLEdBQVUsR0FBYSxDQUV6QyxxQkFBc0IsQ0FDcEIsU0FBVSxDQUNaLENBQ0YsQ0FBQyxFQUVLLEVBQWMsR0FBVSxHQUFhLENBRXpDLHFCQUFzQixDQUNwQixNQUFPLElBQ1AsVUFBVyxDQUNiLENBQ0YsQ0FBQyxFQUVLLEVBQVUsR0FBVyxFQUFhLENBQVcsRUFHN0MsRUFBcUIsQ0FDekIsRUFDQSxJQUNHLENBRUgsR0FBSSxDQUFDLEdBQVMsQ0FBQyxFQUFNLEdBQ25CLE9BR0YsR0FBSSxDQUFDLEdBQVcsT0FBTyxLQUFLLENBQU8sRUFBRSxTQUFXLEVBQzlDLE9BR0YsR0FBSSxHQUFpQixDQUFLLEVBRXhCLEVBQW1CLENBQ2pCLE9BQVEsR0FDUixRQUNBLFNBQ0YsQ0FBQyxFQUdELE9BQVksRUFBTSxHQUFJLENBQU8sR0FLM0IsRUFBOEIsQ0FBQyxJQUErQixDQUNsRSxHQUFJLENBQUMsRUFBZ0IsT0FBUyxDQUFDLEVBQWdCLFFBQVMsQ0FDdEQsRUFBbUIsQ0FBRSxPQUFRLEdBQU8sTUFBTyxLQUFNLFFBQVMsSUFBSyxDQUFDLEVBQ2hFLE9BR0YsR0FBSSxDQUNGLEVBQXFCLEVBQWdCLE1BQU8sRUFBZ0IsUUFBUyxDQUNuRSxRQUNBLFVBQVcsRUFBZ0IsTUFBTSxLQUNuQyxDQUFDLEVBQ0QsS0FBTSxTQUVOLENBQ0EsRUFBbUIsQ0FBRSxPQUFRLEdBQU8sTUFBTyxLQUFNLFFBQVMsSUFBSyxDQUFDLElBSzlELEVBQTRCLElBQU0sQ0FDdEMsRUFBbUIsQ0FBRSxPQUFRLEdBQU8sTUFBTyxLQUFNLFFBQVMsSUFBSyxDQUFDLEdBRzVELEVBQWtCLENBQUMsSUFBMEIsQ0FDakQsSUFBUSxVQUFXLEVBR25CLEdBQUksRUFBTyxLQUFLLFNBQVMsT0FBUyxpQkFDaEMsRUFBZSxTQUFTLGVBQWUsRUFBTyxLQUFLLFFBQVEsS0FBSyxFQUNoRSxFQUFlLFFBQVUsRUFBTyxLQUFLLFFBQVEsT0FJM0MsRUFBZ0IsQ0FBQyxJQUF3QixDQUM3QyxJQUFNLEVBQWUsR0FBZ0IsRUFBTyxFQUFlLE9BQU8sRUFDbEUsR0FBSSxFQUFjLENBQ2hCLElBQVEsY0FBYSxXQUFZLEVBQ2pDLEVBQW1CLEVBQWEsQ0FBTyxFQUl6QyxFQUFlLFFBQVUsS0FDekIsRUFBZSxTQUFTLGVBQWUsSUFBSSxHQUd2QyxFQUFtQixDQUFDLElBQTRCLENBQ3BELEVBQWUsUUFBVSxNQUkzQixHQUFJLEVBQ0YsT0FBTyxFQUdULE9BQ0UsZ0JBb0JFLENBbkJBLEdBU0UsR0FURixDQUNFLFFBQVMsRUFDVCxZQUFhLEVBQ2IsVUFBVyxFQUNYLGFBQWMsRUFDZCxtQkFBb0IsR0FMdEIsU0FTRSxDQUZDLEVBQ0QsR0FBQyxHQUFELENBQWtCLElBQUssRUFBZ0IsR0FDdkMsRUFHRixHQUFDLEdBQUQsQ0FDRSxPQUFRLEVBQWdCLE9BQ3hCLFFBQVMsRUFDVCxVQUFXLEVBQ1gsY0FBYyxPQUNkLFdBQVksRUFBZ0IsT0FBTyxPQUFTLEdBQzlDLEdBQ0EsRUcxS04sc0JBQWdCLGNBQWEsd0RBMEN0QixJQUFNLEdBQW9ELEVBQy9ELFdBQ0EsU0FBUyxDQUFDLEVBQ1YsaUJBQWlCLEVBQ2pCLGNBQWMsUUFDZCxjQUNBLGNBQ0EsZUFDQSxjQUNBLGVBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLG1CQUFtQixHQUNuQixzQkFBc0IsR0FDdEIsa0JBQ0Esa0JBQ0EsZ0JBQ0Esa0JBQ0EsZUFDQSxhQUNBLGFBQWEsYUFDVCxDQUVKLElBQU0sRUFBaUIsR0FBa0IsQ0FDdkMsU0FDQSxpQkFDQSxjQUNBLGNBQ0EsZ0JBQ0EsYUFDQSxnQkFDQSxnQkFDQSxlQUNBLGVBQ0EsU0FDQSxXQUNBLGVBQ0EsWUFDRixDQUFDLEVBRUssRUFBWSxHQUNoQixDQUFDLElBQXlCLENBQ3hCLEVBQWUsaUJBQWlCLENBQUssRUFDckMsRUFBZSxtQkFBbUIsRUFBSSxHQUV4QyxDQUFDLENBQWMsQ0FDakIsRUFHTSxFQUFtQixHQUN2QixDQUFDLElBQXlCLENBQ3hCLEdBQUksRUFDRixPQUVGLEdBQUksRUFDRixFQUFhLENBQUssRUFFbEIsT0FBVSxDQUFLLEdBR25CLENBQUMsRUFBbUIsRUFBYyxDQUFTLENBQzdDLEVBRU0sR0FBa0IsR0FDdEIsQ0FBQyxJQUF3QixDQUN2QixHQUFJLEVBQ0YsT0FHRixHQUFJLEVBQ0YsRUFBWSxDQUFJLEVBRWhCLE9BQWUsY0FBYyxDQUFJLEdBR3JDLENBQUMsRUFBYSxFQUFrQixDQUFjLENBQ2hELEVBR00sR0FBZSxHQUNuQixLQUFPLENBQ0wsWUFBYSxFQUFlLFlBQzVCLEtBQU0sRUFBZSxLQUNyQixPQUFRLEVBQWUsT0FDdkIsVUFBVyxFQUFlLFVBQzFCLGNBQWUsRUFBZSxjQUM5QixnQkFBaUIsRUFBZSxnQkFDaEMsY0FBZSxFQUFlLGNBQzlCLGFBQWMsRUFBZSxhQUM3QixlQUFnQixFQUFlLGVBQy9CLGVBQWdCLEVBQWUsZUFDL0IsV0FBWSxFQUFlLFdBQzNCLFFBQVMsRUFBZSxRQUN4QixXQUFZLEVBQWUsV0FDM0IsV0FBWSxFQUFlLFdBQzNCLE1BQU8sRUFBZSxNQUN0QixTQUFVLEVBQWUsU0FDekIsWUFBYSxFQUFlLFlBQzVCLHFCQUFzQixFQUFlLHFCQUNyQyxZQUFhLEVBQWUsWUFDNUIscUJBQXNCLEVBQWUscUJBQ3JDLGNBQWUsRUFBZSxjQUM5QixlQUFnQixFQUFlLGVBQy9CLHNCQUF1QixFQUFlLHNCQUN0Qyx5QkFBMEIsRUFBZSx5QkFDekMsY0FDQSxhQUFjLEVBQ2QsWUFBYSxHQUNiLFNBQ0EsV0FDQSxtQkFDQSxvQkFDQSxxQkFDQSxlQUNBLG1CQUNBLHNCQUNBLGtCQUNBLGtCQUNBLGdCQUNBLGtCQUNBLEVBQUcsRUFBZSxFQUNsQixZQUNGLEdBQ0EsQ0FDRSxFQUNBLEVBQ0EsRUFDQSxHQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0YsQ0FDRixFQUVBLE9BQ0UsR0FFRSxHQUFnQixTQUZsQixDQUEwQixNQUFPLEdBQWpDLFNBQ0csRUFDRCx1REpqTE4sSUFBTSxHQUE0QixJQUFNLENBQ3RDLElBQ0UsT0FDQSxrQkFDQSxpQkFDQSxnQkFDQSxXQUNBLGNBQ0EsY0FDQSxlQUNBLG1CQUNFLEVBQW1CLEVBRWpCLEVBQVUsQ0FDZCxNQUFPLEdBQUMsR0FBRCxDQUF1QixhQUFjLEdBQXRCLE9BQW9DLEVBQzFELEtBQU0sR0FBQyxHQUFELEdBQWMsTUFBTyxFQUMzQixJQUFLLEdBQUMsR0FBRCxHQUFhLEtBQU0sRUFDeEIsS0FBTSxHQUFDLEdBQUQsR0FBYyxNQUFPLENBQzdCLEVBVU0sRUFBaUIsQ0FDckIsS0FBTSxFQUNOLFFBQVMsRUFDVCxnQkFDQSxNQUFPLEVBQ1AsU0FicUIsQ0FBQyxJQUF5QixDQUMvQyxFQUFZLEVBQU0sR0FBSSxDQUFLLEdBYTNCLFNBVnFCLENBQUMsSUFBeUIsQ0FDL0MsRUFBWSxFQUFNLEVBQUUsRUFVdEIsRUFFQSxPQUNFLEdBdUJFLE1BdkJGLENBQUssVUFBVSw4QkFBZixTQXVCRSxDQXRCQSxHQUFDLEdBQUQsQ0FBUSxVQUFVLE1BQU0sRUFHeEIsR0FhRSxHQWJGLFVBQ0UsR0FXRSxHQVhGLENBQWlCLEtBQUssT0FBdEIsU0FDRSxHQVNFLEdBQU8sSUFUVCxDQUVFLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxFQUFHLEVBQzdCLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxDQUFFLEVBQzVCLEtBQU0sQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzNCLFdBQVksQ0FBRSxTQUFVLElBQUssS0FBTSxXQUFZLEVBQy9DLFVBQVUsK0JBTlosU0FRRyxFQUFRLElBUEosQ0FRTCxFQUNGLEVBQ0YsRUFHRCxFQUNHLEVBQWdCLENBQWMsRUFDOUIsR0FBbUIsR0FBQyxHQUFELElBQWUsRUFBZ0IsR0FDdEQsR0FJTyxHQUE4QyxFQUN6RCxTQUNBLGlCQUFpQixTQUNqQixjQUFjLFFBQ2QsY0FDQSxjQUNBLGtCQUNBLGVBQ0EsY0FDQSxlQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxTQUNBLGVBQ0EsYUFDQSxXQUNBLG1CQUNBLG9CQUNBLHFCQUNBLGVBQWUsR0FDZixtQkFBbUIsR0FDbkIsc0JBQXNCLEdBQ3RCLGtCQUNBLGtCQUNBLGdCQUNBLGFBQWEsYUFDVCxDQUNKLE9BQ0UsR0E4QkUsR0E5QkYsQ0FDRSxPQUFRLEdBQXVELENBQU0sRUFDckUsZUFBZ0IsR0FBcUIsR0FDckMsWUFBYSxFQUNiLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixnQkFBaUIsRUFDakIsYUFBYyxFQUNkLFlBQWEsRUFDYixhQUFjLEVBQ2QsV0FBWSxFQUNaLGNBQWUsRUFDZixjQUFlLEVBQ2YsYUFBYyxFQUNkLE9BQVEsRUFDUixhQUFjLEVBQ2QsV0FBWSxFQUNaLFNBQVUsRUFDVixpQkFBa0IsRUFDbEIsa0JBQW1CLEVBQ25CLG1CQUFvQixFQUNwQixhQUFjLEVBQ2QsaUJBQWtCLEVBQ2xCLG9CQUFxQixFQUNyQixnQkFBaUIsRUFDakIsZ0JBQWlCLEVBQ2pCLGNBQWUsRUFDZixXQUFZLEVBM0JkLFNBNkJFLEdBQUMsR0FBRCxFQUFpQixFQUNqQixHS2hKTixrQkFBZ0IsZUNRVCxJQUFNLEdBQWlDLEVBQzVDLE9BQ0EsV0FBVyxNQUNYLGdCQUN5QyxDQUN6QyxJQUFRLHVCQUFzQix3QkFBdUIsZ0JBQ25ELEdBQTJCLEVBRXZCLEVBQVksRUFBSyxHQUFHLFFBQVEsS0FBSyxFQUNqQyxFQUFVLEVBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxLQUFLLEVBQ2pDLEVBQWlCLEVBQXFCLENBQVUsRUFDaEQsRUFBZ0IsRUFBc0IsRUFBVyxDQUFPLEVBRTlELE9BQU8sR0FBb0IsQ0FDekIsT0FDQSxPQUFRLEVBQWUsT0FBTyxDQUFDLElBQzdCLEVBQWMsS0FBSyxDQUFDLElBQU0sRUFBRSxLQUFPLEVBQU0sRUFBRSxDQUM3QyxFQUNBLGVBQ0EsZ0JBQWlCLEVBQ2pCLFVBQ0YsQ0FBQyw0Q0NwQkksSUFBTSxHQUFzRCxFQUNqRSxPQUNBLFdBQVcsTUFDWCxnQkFDSSxDQUNKLElBQU0sRUFBWSxFQUFLLEdBQUcsUUFBUSxLQUFLLEVBQ2pDLEVBQXNCLEdBQStCLENBQ3pELE9BQ0EsV0FDQSxZQUNGLENBQUMsRUFFRCxPQUNFLEdBd0JFLE1BeEJGLENBQUssVUFBVSxnRUFBZixTQUNHLEVBQW9CLElBQUksQ0FBQyxJQUFVLENBQ2xDLElBQU0sRUFBVyxHQUFHLFdBQW9CLEVBQU0sTUFBTSxFQUFNLFlBQVksRUFBVSxZQUFZLElBRTVGLE9BQ0UsR0FnQkUsTUFoQkYsQ0FFRSxVQUFVLGtEQUNWLE1BQU8sQ0FDTCxLQUFNLFFBQVEsRUFBTSxpQ0FDcEIsTUFBTyxRQUFRLEVBQU0sK0JBQ3JCLElBQUssR0FBRyxFQUFNLFFBQ2QsT0FBUSxHQUFHLE1BQ2IsRUFDQSxjQUFhLDBCQUEwQixFQUFNLEtBVC9DLFNBV0UsR0FBQyxHQUFELENBQ0UsVUFBVyxFQUNYLE1BQU8sRUFDUCxVQUFVLHVCQUNaLEdBZEssR0FBRyxXQWVSLEVBRUwsRUFDRCxHQzdDTixzQkFBZ0Isa0ZBZ0JULElBQU0sR0FBZ0MsRUFDM0MsUUFDQSxNQUNBLFlBQVksR0FDWixhQUNBLFdBQVcsU0FDUCxDQUNKLElBQU0sRUFBcUIsR0FBTSxPQUk5QixJQUFJLEdBRUwsZUFBZSxFQUNmLHdCQUNBLGNBQ0EsaUJBQ0EsSUFDQSx1QkFDQSxpQkFDRSxFQUF3QixDQUFDLEtBQVcsQ0FDdEMsYUFBYyxFQUFNLGFBQ3BCLHNCQUF1QixFQUFNLHNCQUM3QixZQUFhLEVBQU0sWUFDbkIsZUFBZ0IsRUFBTSxlQUN0QixFQUFHLEVBQU0sRUFDVCxxQkFBc0IsRUFBTSxxQkFDNUIsY0FBZSxFQUFNLGFBQ3ZCLEVBQUUsRUFFSSxFQUFjLEdBQVEsSUFBTSxDQUNoQyxJQUFNLEVBQWlCLEVBQWEsRUFBcUIsQ0FBVSxFQUFJLENBQUMsRUFDbEUsRUFBYyxFQUNsQixFQUFJLFFBQVEsQ0FBUSxFQUNwQixFQUFJLE1BQU0sQ0FBUSxDQUNwQixFQUVBLEdBQUksRUFBZSxPQUNqQixPQUFPLEVBQVksT0FBTyxDQUFDLElBQ3pCLEVBQWUsS0FBSyxDQUFDLElBQU8sT0FBTyxFQUFHLEVBQUUsSUFBTSxPQUFPLEVBQU0sRUFBRSxDQUFDLENBQ2hFLEVBR0YsT0FBTyxHQUNOLENBQUMsRUFBSyxFQUFZLEVBQXVCLEVBQXNCLENBQVEsQ0FBQyxFQU92RSxFQUpvQixFQUFZLFFBQVEsT0FBTyxFQUlGLE1BQU0sRUFDdkQsTUFBTyxFQUEyQixJQUFJLElBQU0sRUFDMUMsRUFBNkIsRUFBMkIsU0FBUyxFQUFHLEtBQUssRUFJM0UsSUFBTSxFQUFnQixDQUFDLEVBQWtCLElBQTRCLENBQ25FLEVBQW1CLFNBQVMscUJBQXFCLENBQy9DLE1BQ0EsUUFDRixDQUFDLEVBQ0QsRUFBbUIsU0FBUyxLQUFLLEdBRzdCLEVBQWlCLEVBQUksTUFBTSxJQUFNLEVBQVksTUFBTSxFQUNuRCxFQUFlLElBQVUsRUFFekIsRUFBb0IsRUFBWSxPQUFTLEVBQ3pDLEVBQWtCLEVBQW9CLEVBRXRDLEVBQWEsR0FBZSxDQUNoQyxLQUFNLEVBQ04sS0FBTSxJQUFhLE9BQVMsRUFBSSxLQUFLLEVBQUksT0FDekMsZUFDRixDQUFDLEVBRUQsT0FDRSxnQkF3REUsQ0F2REEsR0FtREUsR0FuREYsQ0FDRSxHQUFJLFlBQVksRUFBSSxZQUFZLElBQUksRUFBYSxhQUFhLElBQWUsS0FDN0UsS0FBSyxXQUNMLGNBQWEsWUFBWSxFQUFJLFlBQVksSUFDekMsS0FBTSxFQUNOLFdBQVksRUFDWixTQUFVLENBQUMsRUFDWCxVQUFXLEVBQ1QsZ0VBQ0EsQ0FBQyxHQUFrQixxQ0FDbkIsR0FBZ0IsYUFDaEIsQ0FDRixFQVpGLFNBaUJFLEdBaUNFLE1BakNGLENBQUssVUFBVSxzQkFBZixTQWlDRSxDQS9CQyxFQUFZLE1BQU0sRUFBRyxDQUFZLEVBQUUsSUFBSSxDQUFDLEVBQU8sSUFDOUMsR0FBQyxNQUFELENBRUUsVUFBVSxrQkFDVixjQUFhLEdBQU8sT0FGZixTQUFTLEdBR2hCLENBQ0QsRUFHQSxHQUNDLEdBbUJFLE1BbkJGLENBQ0UsVUFBVSwyR0FDVixRQUFTLENBQUMsSUFBTSxDQUNkLEVBQUUsZ0JBQWdCLEVBRWxCLEVBQWMsRUFBSyxDQUFXLEdBRWhDLFVBQVcsQ0FBQyxJQUFNLENBQ2hCLEdBQUksRUFBRSxNQUFRLFNBQVcsRUFBRSxNQUFRLElBQ2pDLEVBQUUsZUFBZSxFQUNqQixFQUFFLGdCQUFnQixFQUNsQixFQUFjLEVBQUssQ0FBVyxHQUdsQyxTQUFVLEVBRVYsS0FBSyxTQWhCUCxTQW1CRSxDQW5CRixJQWtCSSxFQWxCSixJQWtCd0IsRUFBRSxNQUFNLEdBQzlCLEdBRUosRUFDRixFQUdGLEdBQUMsR0FBRCxDQUFnQixJQUFLLEVBQW9CLEdBQ3pDLHVEQ2xJQyxJQUFNLEdBQXNELEVBQ2pFLE9BQ0EsV0FBVyxNQUNYLGNBQ0ksQ0FDSixJQUFRLGNBQWEsc0JBQXFCLGVBQWMsa0JBQ3RELEdBQTJCLEVBSXZCLEVBRm1CLEVBQW9CLEVBRWYsSUFBSSxDQUFDLEtBQWMsQ0FDL0MsR0FBSSxFQUFTLEdBQ2IsTUFBTyxFQUFTLE1BQ2hCLFNBQVUsRUFDVixNQUFPLEVBQUssSUFBSSxDQUFDLEtBQVMsQ0FDeEIsTUFBTyxFQUFJLE9BQU8sR0FBRyxFQUNyQixNQUFPLEVBQ1AsR0FBSSxFQUFJLFlBQVksQ0FDdEIsRUFBRSxDQUNKLEVBQUUsRUFFRixPQUNFLEdBNkRFLEdBN0RGLENBQ0UsVUFBVSxTQUNWLGNBQVksb0JBQ1osY0FBZSxDQUFFLFVBQVcsa0NBQW1DLEVBSGpFLFNBNkRFLENBdkRDLEVBR0QsR0FrREUsTUFsREYsQ0FBSyxVQUFVLHdDQUFmLFNBQ0UsR0FnREUsTUFoREYsQ0FFRSxVQUFVLGdDQUZaLFNBSUcsRUFBSyxJQUFJLENBQUMsSUFDVCxHQXlDRSxNQXpDRixDQUFrQixVQUFVLHFDQUE1QixTQXlDRSxDQXhDQSxHQWdCRSxNQWhCRixDQUNFLFVBQVcsRUFDVCxtRUFDQSxFQUFJLFNBQVMsT0FBUyxHQUN0QixFQUFJLFNBQVMsaUJBQW1CLGVBQ2xDLEVBQ0EsTUFBTyxDQUNMLE1BQU8sRUFBSSxTQUFTLE1BQ3BCLGdCQUFpQixFQUFJLFNBQVMsZUFDaEMsRUFURixTQVdHLEVBQ0MsRUFBZSxFQUFJLFFBQVEsRUFFM0IsR0FBa0QsTUFBbEQsQ0FBSyxVQUFVLHNCQUFmLFNBQXNDLEVBQUksTUFBUSxFQUVwRCxFQUVGLEdBcUJFLE1BckJGLENBQUssVUFBVSx1QkFBZixTQXFCRSxDQXBCQyxFQUFJLE1BQU0sSUFBSSxDQUFDLElBQ2QsR0FBQyxHQUFELENBRUUsTUFBTyxFQUFLLE1BQU0sSUFBSSxFQUN0QixJQUFLLEVBQUssTUFDVixXQUFZLEVBQUksR0FDaEIsYUFBYyxFQUNkLFNBQVUsRUFDVixVQUFVLDBCQU5MLEVBQUssRUFPWixDQUNELEVBR0QsR0FNRSxNQU5GLENBQUssVUFBVSw0Q0FBZixTQUNFLEdBQUMsR0FBRCxDQUNFLEtBQU0sRUFDTixXQUFZLEVBQUksR0FDaEIsU0FBVSxFQUNaLEVBQ0EsR0FDRixJQXhDTSxFQUFJLEVBeUNaLENBQ0gsR0E5Q0ksRUFBWSxPQUFPLFNBQVMsQ0ErQ2pDLEVBQ0YsRUFDRixHQUFDLEdBQUQsQ0FBVyxZQUFZLGFBQWEsR0FDcEMsR0pyR04sMEJBQVMsYUFBaUIsMEVBRW5CLElBQU0sR0FBb0MsSUFBTSxDQUNyRCxJQUFRLGNBQWEsSUFBRyxtQkFBa0IsdUJBQ3hDLEdBQTJCLEVBR3ZCLEVBQVksR0FBdUIsSUFBTSxDQUM3QyxJQUFNLEVBQWMsRUFBWSxZQUFZLEVBQzVDLE9BQU8sTUFBTSxLQUFLLENBQUUsT0FBUSxDQUFZLEVBQUcsQ0FBQyxFQUFHLElBQzdDLEVBQVksUUFBUSxPQUFPLEVBQUUsSUFBSSxFQUFHLEtBQUssQ0FDM0MsR0FDQyxDQUFDLENBQVcsQ0FBQyxFQUVoQixPQUNFLEdBd0NFLE1BeENGLENBQUssVUFBVSw4QkFBZixTQUNFLEdBc0NFLEdBdENGLENBQW1CLEtBQU0sRUFBekIsU0FDRSxHQW9DRSxNQXBDRixDQUNFLFVBQVcsRUFDVCxrQkFDQSxHQUFvQixrQ0FDcEIsQ0FDRixFQUxGLFNBb0NFLENBN0JBLEdBRUUsTUFGRixDQUFLLFVBQVUsK0dBQWYsU0FDRSxHQUEyQyxNQUEzQyxDQUFLLFVBQVUsVUFBZixTQUEwQixFQUFFLFdBQVcsRUFBSSxFQUMzQyxFQUVELEVBQVUsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM3QixJQUFNLEVBQU0seUJBQXlCLEVBQUksWUFBWSxJQUVyRCxPQUNFLEdBa0JFLEdBbEJGLENBQXlDLEtBQUssT0FBOUMsU0FDRSxHQWdCRSxHQUFPLElBaEJULENBRUUsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLEdBQUksRUFDOUIsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLENBQUUsRUFDNUIsS0FBTSxDQUFFLFFBQVMsRUFBRyxFQUFHLEdBQUksRUFDM0IsV0FBWSxDQUNWLFNBQVUsS0FDVixLQUFNLFlBQ04sTUFBTyxFQUFRLElBQ2pCLEVBQ0EsVUFBVSxpRkFWWixTQWdCRSxDQUpBLEdBQXdELE1BQXhELENBQUssVUFBVSxzQkFBZixTQUFzQyxFQUFJLE9BQU8sR0FBRyxFQUFJLEVBQ3hELEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRyxFQUFJLE9BQU8sS0FBSyxFQUNqQixJQWRHLEdBQUcsVUFlUixHQWpCa0IsR0FBRyxZQWtCdkIsRUFFTCxHQUNELEVBQ0YsRUFDRiw0Q0t6REMsSUFBTSxHQUE4QixJQUFNLENBQy9DLE9BQU8sR0FBQyxHQUFELEVBQXlCLEdDSGxDLGtCQUFnQixlQUtoQiwwQkFBUyxhQUFpQiwwRUFFbkIsSUFBTSxHQUFtQyxJQUFNLENBQ3BELElBQ0UsY0FDQSxpQkFDQSxJQUNBLG1CQUNBLHNCQUNBLGdCQUNBLGNBQ0UsR0FBMkIsRUFHekIsRUFBVyxHQUNmLElBQU0sRUFBWSxFQUFhLENBQWMsRUFDN0MsQ0FBQyxFQUFhLENBQWMsQ0FDOUIsRUFHTSxFQUFZLEdBQVEsSUFBTSxDQUM5QixPQUFPLEVBQVMsUUFBUSxDQUFDLElBQ3ZCLE1BQU0sS0FBSyxDQUFFLE9BQVEsRUFBRyxFQUFHLENBQUMsRUFBRyxJQUFTLEVBQUksS0FBSyxDQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FDbEUsR0FDQyxDQUFDLENBQVEsQ0FBQyxFQUViLE9BQ0UsR0FxRkUsTUFyRkYsQ0FBSyxVQUFVLDhCQUFmLFNBQ0UsR0FtRkUsR0FuRkYsQ0FBbUIsS0FBTSxFQUFXLFNBQVMsT0FBN0MsU0FDRSxHQWlGRSxNQWpGRixDQUNFLFVBQVcsRUFDVCxrQkFDQSxHQUFvQixrQ0FDcEIsQ0FDRixFQUxGLFNBaUZFLENBMUVBLEdBRUUsTUFGRixDQUFLLFVBQVUsK0dBQWYsU0FDRSxHQUEyQyxNQUEzQyxDQUFLLFVBQVUsVUFBZixTQUEwQixFQUFFLFdBQVcsRUFBSSxFQUMzQyxFQUVGLEdBcUVFLE1BckVGLENBQUssVUFBVSx5Q0FBZixTQXFFRSxDQW5FQSxHQWdDRSxNQWhDRixDQUFLLFVBQVUscUJBQWYsU0FDRyxFQUFTLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDNUIsSUFBTSxFQUFVLEVBQUksT0FBTyxFQUFNLEVBQUcsS0FBSyxFQUNuQyxFQUFNLHdCQUF3QixFQUFJLFlBQVksUUFFcEQsT0FDRSxHQXVCRSxHQXZCRixDQUF5QyxLQUFLLE9BQTlDLFNBQ0UsR0FxQkUsR0FBTyxJQXJCVCxDQUVFLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzlCLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxDQUFFLEVBQzVCLEtBQU0sQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzNCLFdBQVksQ0FDVixTQUFVLEtBQ1YsS0FBTSxZQUNOLE1BQU8sRUFBUSxJQUNqQixFQUNBLFVBQVcsRUFDVCxrR0FDQSxHQUFXLDBCQUNiLEVBYkYsU0FlRSxHQUtFLE1BTEYsQ0FBSyxVQUFVLGtCQUFmLFNBS0UsQ0FKQSxHQUE4QyxNQUE5QyxDQUFLLFVBQVUsVUFBZixTQUEwQixFQUFJLE9BQU8sS0FBSyxFQUFJLEVBQzlDLEdBRUUsTUFGRixDQUFLLFVBQVUsZ0NBQWYsU0FDRyxFQUFJLE9BQU8sS0FBSyxFQUNqQixHQUNGLEdBbkJHLEdBQUcsVUFvQlIsR0F0QmtCLEdBQUcsWUF1QnZCLEVBRUwsRUFDRCxFQUdGLEdBK0JFLE1BL0JGLENBQUssVUFBVSxxQkFBZixTQUNHLEVBQVUsSUFBSSxDQUFDLEVBQUssSUFBVSxDQUM3QixJQUFNLEVBQVksRUFBSSxPQUFPLEVBQU0sRUFBRyxNQUFNLEVBQ3RDLEVBQU0sd0JBQXdCLEVBQUksWUFBWSxTQUVwRCxPQUNFLEdBc0JFLEdBdEJGLENBQXlDLEtBQUssT0FBOUMsU0FDRSxHQW9CRSxHQUFPLElBcEJULENBRUUsY0FBYSw0QkFBNEIsRUFBSSxPQUFPLElBQUksSUFDeEQsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLEdBQUksRUFDOUIsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLENBQUUsRUFDNUIsS0FBTSxDQUFFLFFBQVMsRUFBRyxFQUFHLEdBQUksRUFDM0IsV0FBWSxDQUNWLFNBQVUsS0FDVixLQUFNLFlBQ04sTUFBTyxFQUFRLElBQ2pCLEVBQ0EsVUFBVyxFQUNULHVFQUNBLEdBQWEsc0NBQ2YsRUFkRixTQWdCRyxLQUFLLGVBQWUsRUFBZSxDQUNsQyxLQUFNLFVBQ04sT0FBUSxJQUFlLFNBQ3pCLENBQUMsRUFBRSxPQUFPLEVBQUksT0FBTyxDQUFDLEdBbEJqQixHQUFHLFVBbUJSLEdBckJrQixHQUFHLFlBc0J2QixFQUVMLEVBQ0QsR0FDRixHQUNGLEVBQ0YsRUFDRiw0Q0NuSEMsSUFBTSxHQUE2QixJQUFNLENBQzlDLE9BQU8sR0FBQyxHQUFELEVBQXdCLEdDSGpDLGtCQUFnQixlQUloQiwwQkFBUyxhQUFpQiwwRUFFbkIsSUFBTSxHQUFrQyxJQUFNLENBQ25ELElBQ0UsY0FDQSxJQUNBLG1CQUNBLHNCQUNBLGdCQUNBLGNBQ0UsR0FBMkIsRUFHekIsRUFBVyxHQUFRLElBQU0sQ0FDN0IsT0FBTyxNQUFNLEtBQUssQ0FBRSxPQUFRLEVBQUcsRUFBRyxDQUFDLEVBQUcsSUFDcEMsRUFBWSxLQUFLLENBQUksRUFBRSxPQUFPLENBQUMsQ0FDakMsR0FDQyxDQUFDLENBQVcsQ0FBQyxFQUVoQixPQUNFLEdBa0RFLE1BbERGLENBQUssVUFBVSw4QkFBZixTQUNFLEdBZ0RFLEdBaERGLENBQW1CLEtBQU0sRUFBVSxTQUFTLE9BQTVDLFNBQ0UsR0E4Q0UsTUE5Q0YsQ0FDRSxVQUFXLEVBQ1Qsa0JBQ0EsR0FBb0Isa0NBQ3BCLENBQ0YsRUFMRixTQThDRSxDQXZDQSxHQUVFLE1BRkYsQ0FBSyxVQUFVLCtHQUFmLFNBQ0UsR0FBMkMsTUFBM0MsQ0FBSyxVQUFVLFVBQWYsU0FBMEIsRUFBRSxXQUFXLEVBQUksRUFDM0MsRUFFRixHQWtDRSxNQWxDRixDQUFLLFVBQVUseUNBQWYsU0FFRSxHQStCRSxNQS9CRixDQUFLLFVBQVUscUJBQWYsU0FDRyxFQUFTLElBQUksQ0FBQyxFQUFLLElBQVUsQ0FDNUIsSUFBTSxFQUFZLEVBQUksT0FBTyxFQUFNLEVBQUcsTUFBTSxFQUN0QyxFQUFNLHVCQUF1QixFQUFJLFlBQVksSUFFbkQsT0FDRSxHQXNCRSxHQXRCRixDQUF5QyxLQUFLLE9BQTlDLFNBQ0UsR0FvQkUsR0FBTyxJQXBCVCxDQUVFLGNBQWEsMkJBQTJCLEVBQUksT0FBTyxJQUFJLElBQ3ZELFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzlCLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxDQUFFLEVBQzVCLEtBQU0sQ0FBRSxRQUFTLEVBQUcsRUFBRyxHQUFJLEVBQzNCLFdBQVksQ0FDVixTQUFVLEtBQ1YsS0FBTSxZQUNOLE1BQU8sRUFBUSxJQUNqQixFQUNBLFVBQVcsRUFDVCx1RUFDQSxHQUFhLHNDQUNmLEVBZEYsU0FnQkcsS0FBSyxlQUFlLEVBQWUsQ0FDbEMsS0FBTSxVQUNOLE9BQVEsSUFBZSxTQUN6QixDQUFDLEVBQUUsT0FBTyxFQUFJLE9BQU8sQ0FBQyxHQWxCakIsR0FBRyxVQW1CUixHQXJCa0IsR0FBRyxZQXNCdkIsRUFFTCxFQUNELEVBQ0YsR0FDRixFQUNGLEVBQ0YsNENDeEVDLElBQU0sR0FBNEIsSUFBTSxDQUM3QyxPQUFPLEdBQUMsR0FBRCxFQUF1QixHQ0doQywwQkFBUyxhQUFpQiwwRUFJbkIsSUFBTSxHQUFpQyxJQUFNLENBQ2xELElBQ0UsT0FDQSxrQkFDQSxpQkFDQSxnQkFDQSxXQUNBLGNBQ0EsY0FDQSxtQkFDRSxHQUEyQixFQUV6QixFQUFVLENBQ2QsTUFBTyxHQUFDLEdBQUQsR0FBdUIsT0FBUSxFQUN0QyxLQUFNLEdBQUMsR0FBRCxHQUFzQixNQUFPLEVBQ25DLElBQUssR0FBQyxHQUFELEdBQXFCLEtBQU0sQ0FDbEMsRUFVTSxFQUFpQixDQUNyQixLQUFNLEVBQ04sUUFBUyxFQUNULGdCQUNBLE1BQU8sRUFDUCxTQWJxQixDQUFDLElBQXlCLENBQy9DLEVBQVksRUFBTSxHQUFJLENBQUssR0FhM0IsU0FWcUIsQ0FBQyxJQUF5QixDQUMvQyxFQUFZLEVBQU0sRUFBRSxFQVV0QixFQUVBLE9BQ0UsR0F1QkUsTUF2QkYsQ0FBSyxVQUFVLDhCQUFmLFNBdUJFLENBdEJBLEdBQUMsR0FBRCxDQUFRLFVBQVUsTUFBTSxFQUd4QixHQWFFLEdBYkYsVUFDRSxHQVdFLEdBWEYsQ0FBaUIsS0FBSyxPQUF0QixTQUNFLEdBU0UsR0FBTyxJQVRULENBRUUsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLEVBQUcsRUFDN0IsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLENBQUUsRUFDNUIsS0FBTSxDQUFFLFFBQVMsRUFBRyxFQUFHLEdBQUksRUFDM0IsV0FBWSxDQUFFLFNBQVUsSUFBSyxLQUFNLFdBQVksRUFDL0MsVUFBVSwrQkFOWixTQVFHLEVBQVEsSUFQSixDQVFMLEVBQ0YsRUFDRixFQUdELEVBQ0csRUFBZ0IsQ0FBYyxFQUM5QixHQUFtQixHQUFDLEdBQUQsSUFBZSxFQUFnQixHQUN0RCw0Q0MzREMsSUFBTSxHQUE4RCxFQUN6RSxTQUFTLENBQUMsRUFDVixZQUFZLENBQUMsRUFDYixpQkFBaUIsU0FDakIsY0FBYyxRQUNkLGNBQ0EsY0FDQSxlQUNBLGNBQ0EsZUFDQSxhQUNBLGdCQUNBLGdCQUNBLGVBQ0EsU0FDQSxXQUNBLG1CQUNBLG9CQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsbUJBQ0Esc0JBQ0Esa0JBQ0Esa0JBQ0EsZUFDQSxhQUNBLGlCQUNBLGtCQUNBLGdCQUNBLGFBQWEsYUFDVCxDQUNKLE9BQ0UsR0FrQ0UsR0FsQ0YsQ0FDRSxPQUFRLEdBQ04sQ0FDRixFQUNBLFVBQVcsRUFDWCxlQUFnQixHQUFxQixHQUNyQyxZQUFhLEVBQ2IsWUFBYSxHQUFTLENBQVcsRUFDakMsWUFBYSxFQUNiLGVBQWdCLEVBQ2hCLGFBQWMsRUFDZCxZQUFhLEVBQ2IsYUFBYyxFQUNkLFdBQVksRUFDWixjQUFlLEVBQ2YsY0FBZSxFQUNmLGFBQWMsRUFDZCxPQUFRLEVBQ1IsU0FBVSxFQUNWLGlCQUFrQixFQUNsQixrQkFBbUIsRUFDbkIsbUJBQW9CLEVBQ3BCLGFBQWMsRUFDZCxpQkFBa0IsRUFDbEIsb0JBQXFCLEVBQ3JCLGdCQUFpQixFQUNqQixnQkFBaUIsRUFDakIsYUFBYyxFQUNkLFdBQVksRUFDWixnQkFBaUIsRUFDakIsY0FBZSxFQUNmLFdBQVksRUEvQmQsU0FpQ0UsR0FBQyxHQUFELEVBQXNCLEVBQ3RCLEdDN0NOLGdCQUFTIiwKICAiZGVidWdJZCI6ICIyN0MxNEE4QTVFOTYzRDQ3NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
6
|
+
//# debugId=6DDC3E563ED2B39064756E2164756E21
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnLnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktY2FsZW5kYXIudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvZGlhbG9nLnRzeCIsICJzcmMvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dC50cyIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyLnRzeCIsICJzcmMvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZS50cyIsICJzcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgInNyYy9saWIvdXRpbHMvZGF0ZS11dGlscy50cyIsICJzcmMvbGliL2NvbnN0YW50cy50cyIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9kbmQtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9ldmVudC1kcmFnLW92ZXJsYXkudHN4IiwgInNyYy9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvcG9wb3Zlci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYS50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGltZS1waWNrZXIudHN4IiwgInNyYy9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXIudHMiLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL3V0aWxzL2J1c2luZXNzLWhvdXJzLnRzIiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9ldmVudC1mb3JtLXV0aWxzLnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0b3IvcmVjdXJyZW5jZS1lZGl0b3IudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NhcmQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3NlbGVjdC50c3giLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zLnRzIiwgInNyYy9jb21wb25lbnRzL2hlYWRlci9iYXNlLWhlYWRlci50c3giLCAic3JjL2xpYi91dGlscy9leHBvcnQtaWNhbC50cyIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvdGl0bGUtY29udGVudC50c3giLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1yb3cudHN4IiwgInNyYy9jb21wb25lbnRzL2dyaWQtY2VsbC50c3giLCAic3JjL2NvbXBvbmVudHMvZGF5LW51bWJlci50c3giLCAic3JjL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQudHN4IiwgInNyYy9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLWV2ZW50cy1sYXllci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1jb2wudHN4IiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1ldmVudHMtbGF5ZXIudHN4IiwgInNyYy9jb21wb25lbnRzL2N1cnJlbnQtdGltZS1pbmRpY2F0b3IudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWREYXlFdmVudHMudHMiLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldy50c3giLCAic3JjL2NvbXBvbmVudHMvaG9yaXpvbnRhbC1ncmlkL2hvcml6b250YWwtZ3JpZC1oZWFkZXItY29udGFpbmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMveWVhci12aWV3L3llYXItdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL3Jlc291cmNlLWNhbGVuZGFyLWJvZHkudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9yZXNvdXJjZS1kYXktdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvcmVzb3VyY2UtbW9udGgtdmVydGljYWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy9yZXNvdXJjZS13ZWVrLXZlcnRpY2FsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBNYWluIGNhbGVuZGFyIGNvbXBvbmVudHNcblxuLy8gUmUtZXhwb3J0IHJydWxlLmpzIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBGcmVxdWVuY3ksIFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmV4cG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG5cdGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuXHRpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuZXhwb3J0IHR5cGUgeyBFdmVudEZvcm1Qcm9wcyB9IGZyb20gJy4vY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5leHBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQsIFdlZWtEYXlzIH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHsgSWxhbXlDYWxlbmRhciB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHsgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIFB1YmxpYyBjYWxlbmRhciBjb250ZXh0IGhvb2tzXG5leHBvcnQgeyB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuZXhwb3J0IHR5cGUge1xuXHRDZWxsQ2xpY2tJbmZvLFxuXHRJbGFteUNhbGVuZGFyUHJvcHMsXG59IGZyb20gJy4vZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgdHlwZSB7IElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuZXhwb3J0IHR5cGUgeyBVc2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0UmV0dXJuIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgeyB1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG4vLyBSZXNvdXJjZSBjYWxlbmRhciB0eXBlc1xuZXhwb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5cbi8vIFRyYW5zbGF0aW9uIHN5c3RlbVxuZXhwb3J0IHR5cGUge1xuXHRUcmFuc2xhdGlvbktleSxcblx0VHJhbnNsYXRpb25zLFxuXHRUcmFuc2xhdG9yRnVuY3Rpb24sXG59IGZyb20gJy4vbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmV4cG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnLi90eXBlcydcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgb21pdEtleXMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0Y3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcblx0ZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcblx0ZXZlbnQsXG5cdGN1cnJlbnRFdmVudHMsXG5cdHN0YXJ0RGF0ZSxcblx0ZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHQvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuXHRpZiAoIWV2ZW50LnJydWxlKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHR0cnkge1xuXHRcdC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG5cdFx0Ly8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuXHRcdGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG5cdFx0XHQuLi5ldmVudC5ycnVsZSxcblx0XHRcdGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG5cdFx0fVxuXHRcdGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cblx0XHRjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcblx0XHRcdChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG5cdFx0KVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuXHRcdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuXHRcdC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuXHRcdC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG5cdFx0Y29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG5cdFx0XHQuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdC50b0RhdGUoKVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG5cdFx0Ly8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2Vcblx0XHRjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG5cdFx0Ly8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuXHRcdGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcblx0XHRcdC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuXHRcdFx0XHRcdHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKT8uaXNTYW1lKG9jY3VycmVuY2VEYXRlKVxuXHRcdFx0XHQpXG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdXNlIGl0XG5cdFx0XHRcdGlmIChleGlzdGluZ092ZXJyaWRlKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgLi4uZXZlbnQsIC4uLmV4aXN0aW5nT3ZlcnJpZGUgfVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBldmVudFxuXHRcdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gZXZlbnQuZW5kLmRpZmYoZXZlbnQuc3RhcnQpXG5cdFx0XHRcdGNvbnN0IG5ld0VuZFRpbWUgPSBvY2N1cnJlbmNlRGF0ZS5hZGQob3JpZ2luYWxEdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcblx0XHRcdFx0Y29uc3QgcmVjdXJyaW5nRXZlbnRJZCA9IGAke2V2ZW50LmlkfV8ke2luZGV4fWBcblx0XHRcdFx0Y29uc3QgcGFyZW50VUlEID0gZXZlbnQudWlkIHx8IGAke2V2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmBcblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRcdFx0XHRjb25zdCByZWN1cnJpbmdFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0XHRpZDogcmVjdXJyaW5nRXZlbnRJZCxcblx0XHRcdFx0XHRzdGFydDogb2NjdXJyZW5jZURhdGUsXG5cdFx0XHRcdFx0ZW5kOiBuZXdFbmRUaW1lLFxuXHRcdFx0XHRcdHVpZDogcGFyZW50VUlELCAvLyBTYW1lIFVJRCBhcyBwYXJlbnQgZm9yIHByb3BlciBncm91cGluZ1xuXHRcdFx0XHRcdHJydWxlOiB1bmRlZmluZWQsIC8vIEluc3RhbmNlIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVjdXJyaW5nRXZlbnRcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChyZWN1cnJpbmdFdmVudCkgPT4ge1xuXHRcdFx0XHQvLyBGaWx0ZXIgb3V0IEVYREFURSBleGNsdXNpb25zXG5cdFx0XHRcdGNvbnN0IGhhc0V4ZGF0ZXMgPSBldmVudC5leGRhdGVzICYmIGV2ZW50LmV4ZGF0ZXMubGVuZ3RoID4gMFxuXHRcdFx0XHRpZiAoaGFzRXhkYXRlcykge1xuXHRcdFx0XHRcdGNvbnN0IGV2ZW50U3RhcnRJU08gPSByZWN1cnJpbmdFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG5cdFx0XHRcdFx0Y29uc3QgaXNFeGNsdWRlZCA9IGV2ZW50LmV4ZGF0ZXMuaW5jbHVkZXMoZXZlbnRTdGFydElTTylcblx0XHRcdFx0XHRpZiAoaXNFeGNsdWRlZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRmlsdGVyIHRvIG9ubHkgaW5jbHVkZSBldmVudHMgdGhhdCBzcGFuIHRocm91Z2ggdGhlIG9yaWdpbmFsIHJlcXVlc3RlZCBkYXRlIHJhbmdlXG5cdFx0XHRcdC8vIEFuIGV2ZW50IHNwYW5zIHRoZSByYW5nZSBpZjogZXZlbnRfc3RhcnQgPCByYW5nZV9lbmQgQU5EIGV2ZW50X2VuZCA+IHJhbmdlX3N0YXJ0XG5cdFx0XHRcdC8vIFVzZSBpc1NhbWVPckJlZm9yZS9pc1NhbWVPckFmdGVyIHRvIGluY2x1ZGUgYm91bmRhcnkgY2FzZXNcblx0XHRcdFx0Y29uc3QgZXZlbnRTcGFuc1JhbmdlID1cblx0XHRcdFx0XHRyZWN1cnJpbmdFdmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKSAmJlxuXHRcdFx0XHRcdHJlY3VycmluZ0V2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSlcblxuXHRcdFx0XHRyZXR1cm4gZXZlbnRTcGFuc1JhbmdlXG5cdFx0XHR9KVxuXG5cdFx0cmV0dXJuIHJlY3VycmluZ0V2ZW50c1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEhhbmRsZSBpbnZhbGlkIFJSVUxFIG9wdGlvbnNcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgSW52YWxpZCBSUlVMRSBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KGV2ZW50LnJydWxlKX0uIEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcblx0XHQpXG5cdH1cbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMge1xuXHR0YXJnZXRFdmVudDogQ2FsZW5kYXJFdmVudFxuXHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0dXBkYXRlcyxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBVcGRhdGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGJhc2UgZXZlbnQgYW5kIGNyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50XG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHRleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgc3RhbmRhbG9uZSBtb2RpZmllZCBldmVudCB3aXRoIHJlY3VycmVuY2VJZFxuXHRcdFx0Y29uc3QgbW9kaWZpZWRFdmVudElkID0gYCR7dGFyZ2V0RXZlbnQuaWR9X21vZGlmaWVkXyR7RGF0ZS5ub3coKX1gXG5cdFx0XHRjb25zdCBtb2RpZmllZEV2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE86IGZpeCB0aGUgdHlwZXNcblx0XHRcdFx0Li4ub21pdEtleXModGFyZ2V0RXZlbnQsIFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdsZWZ0JywgJ3JpZ2h0J10pLFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRpZDogbW9kaWZpZWRFdmVudElkLFxuXHRcdFx0XHRyZWN1cnJlbmNlSWQ6IHRhcmdldEV2ZW50U3RhcnRJU08sIC8vIFRoaXMgbWFya3MgaXQgYXMgYSBtb2RpZmllZCBpbnN0YW5jZVxuXHRcdFx0XHR1aWQ6IGJhc2VFdmVudC51aWQgfHwgYCR7YmFzZUV2ZW50LmlkfUBpbGFteS5jYWxlbmRhcmAsIC8vIEtlZXAgc2FtZSBVSUQgYXMgYmFzZSBldmVudCAoaUNhbGVuZGFyIHN0YW5kYXJkKVxuXHRcdFx0XHRycnVsZTogdW5kZWZpbmVkLCAvLyBTdGFuZGFsb25lIGV2ZW50cyBkb24ndCBoYXZlIFJSVUxFXG5cdFx0XHR9IGFzIENhbGVuZGFyRXZlbnRcblx0XHRcdHVwZGF0ZWRFdmVudHMucHVzaChtb2RpZmllZEV2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdmb2xsb3dpbmcnOiB7XG5cdFx0XHQvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIG9yaWdpbmFsIHNlcmllcyBhbmQgY3JlYXRlIG5ldyBzZXJpZXNcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHQvLyBVcGRhdGUgb3JpZ2luYWwgc2VyaWVzIHdpdGggVU5USUwgdG8gZW5kIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXHRcdFx0Y29uc3QgdGVybWluYXRlZEV2ZW50ID0ge1xuXHRcdFx0XHQuLi5iYXNlRXZlbnQsXG5cdFx0XHRcdHJydWxlOiB7XG5cdFx0XHRcdFx0Li4uYmFzZUV2ZW50LnJydWxlLFxuXHRcdFx0XHRcdHVudGlsOiB0ZXJtaW5hdGlvbkRhdGUsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHRlcm1pbmF0ZWRFdmVudFxuXG5cdFx0XHQvLyBDcmVhdGUgbmV3IHNlcmllcyBzdGFydGluZyBmcm9tIHRhcmdldCBkYXRlXG5cdFx0XHRjb25zdCBvcmlnaW5hbER1cmF0aW9uID0gYmFzZUV2ZW50LmVuZC5kaWZmKGJhc2VFdmVudC5zdGFydClcblx0XHRcdGNvbnN0IG5ld1Nlcmllc1N0YXJ0VGltZSA9IHVwZGF0ZXMuc3RhcnQgfHwgdGFyZ2V0RXZlbnQuc3RhcnRcblx0XHRcdGNvbnN0IG5ld1Nlcmllc0VuZFRpbWUgPVxuXHRcdFx0XHR1cGRhdGVzLmVuZCB8fCBuZXdTZXJpZXNTdGFydFRpbWUuYWRkKG9yaWdpbmFsRHVyYXRpb24pXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNJZCA9IGAke2Jhc2VFdmVudC5pZH1fZm9sbG93aW5nYFxuXHRcdFx0Y29uc3QgbmV3U2VyaWVzVUlEID0gYCR7bmV3U2VyaWVzSWR9QGlsYW15LmNhbGVuZGFyYFxuXG5cdFx0XHRjb25zdCBuZXdTZXJpZXNFdmVudDogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdFx0Li4uYmFzZUV2ZW50LFxuXHRcdFx0XHQuLi51cGRhdGVzLFxuXHRcdFx0XHRycnVsZToge1xuXHRcdFx0XHRcdC4uLmJhc2VFdmVudC5ycnVsZSxcblx0XHRcdFx0XHQuLi51cGRhdGVzLnJydWxlLFxuXHRcdFx0XHRcdGR0c3RhcnQ6IG5ld1Nlcmllc1N0YXJ0VGltZS50b0RhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0aWQ6IG5ld1Nlcmllc0lkLFxuXHRcdFx0XHR1aWQ6IG5ld1Nlcmllc1VJRCwgLy8gTmV3IFVJRCBmb3IgbmV3IHNlcmllc1xuXHRcdFx0XHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLFxuXHRcdFx0XHRlbmQ6IG5ld1Nlcmllc0VuZFRpbWUsXG5cdFx0XHRcdHJlY3VycmVuY2VJZDogdW5kZWZpbmVkLCAvLyBUaGlzIGlzIGEgbmV3IGJhc2UgZXZlbnQsIG5vdCBhbiBpbnN0YW5jZVxuXHRcdFx0fVxuXHRcdFx0dXBkYXRlZEV2ZW50cy5wdXNoKG5ld1Nlcmllc0V2ZW50KVxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRjYXNlICdhbGwnOiB7XG5cdFx0XHQvLyBcIkFsbCBldmVudHNcIiAtIFVwZGF0ZSB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcblx0XHRcdGNvbnN0IHVwZGF0ZWRCYXNlRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0Li4udXBkYXRlcyxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuXG5pbnRlcmZhY2UgRGVsZXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG5cdHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG5cdGN1cnJlbnRFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRzY29wZTogJ3RoaXMnIHwgJ2ZvbGxvd2luZycgfCAnYWxsJ1xufVxuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSAoe1xuXHR0YXJnZXRFdmVudCxcblx0Y3VycmVudEV2ZW50cyxcblx0c2NvcGUsXG59OiBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0Y29uc3QgdXBkYXRlZEV2ZW50cyA9IFsuLi5jdXJyZW50RXZlbnRzXVxuXG5cdC8vIEZpbmQgdGhlIGJhc2UgcmVjdXJyaW5nIGV2ZW50XG5cdGNvbnN0IGJhc2VFdmVudEluZGV4ID0gdXBkYXRlZEV2ZW50cy5maW5kSW5kZXgoKGUpID0+IHtcblx0XHRjb25zdCBwYXJlbnRVaWQgPSBlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmBcblx0XHRyZXR1cm4gcGFyZW50VWlkID09PSB0YXJnZXRFdmVudC51aWQgJiYgZS5ycnVsZSAmJiAhZS5yZWN1cnJlbmNlSWRcblx0fSlcblxuXHRpZiAoYmFzZUV2ZW50SW5kZXggPT09IC0xKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdCYXNlIHJlY3VycmluZyBldmVudCBub3QgZm91bmQnKVxuXHR9XG5cblx0Y29uc3QgYmFzZUV2ZW50ID0gdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF1cblxuXHRzd2l0Y2ggKHNjb3BlKSB7XG5cdFx0Y2FzZSAndGhpcyc6IHtcblx0XHRcdC8vIFwiVGhpcyBldmVudCBvbmx5XCIgLSBBZGQgRVhEQVRFIHRvIGV4Y2x1ZGUgdGhpcyBvY2N1cnJlbmNlXG5cdFx0XHRjb25zdCB0YXJnZXRFdmVudFN0YXJ0SVNPID0gdGFyZ2V0RXZlbnQuc3RhcnQudG9JU09TdHJpbmcoKVxuXHRcdFx0Y29uc3QgZXhpc3RpbmdFeGRhdGVzID0gYmFzZUV2ZW50LmV4ZGF0ZXMgfHwgW11cblx0XHRcdGNvbnN0IHVwZGF0ZWRFeGRhdGVzID0gWy4uLmV4aXN0aW5nRXhkYXRlcywgdGFyZ2V0RXZlbnRTdGFydElTT11cblxuXHRcdFx0Y29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHsgLi4uYmFzZUV2ZW50LCBleGRhdGVzOiB1cGRhdGVkRXhkYXRlcyB9XG5cdFx0XHR1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XSA9IHVwZGF0ZWRCYXNlRXZlbnRcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y2FzZSAnZm9sbG93aW5nJzoge1xuXHRcdFx0Ly8gXCJUaGlzIGFuZCBmb2xsb3dpbmdcIiAtIFRlcm1pbmF0ZSBzZXJpZXMgd2l0aCBVTlRJTCBiZWZvcmUgdGFyZ2V0IGRhdGVcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHRoZSB0ZXJtaW5hdGlvbiBkYXRlOiBkYXkgYmVmb3JlIHRhcmdldCB3aXRoIGVuZCBvZiBkYXkgdGltZVxuXHRcdFx0Ly8gVGhpcyBlbnN1cmVzIHRoZSBsYXN0IG9jY3VycmVuY2UgYmVmb3JlIHRhcmdldCBpcyBpbmNsdWRlZCBpbiB0aGUgdGVybWluYXRlZCBzZXJpZXNcblx0XHRcdGNvbnN0IGRheUJlZm9yZVRhcmdldCA9IHRhcmdldEV2ZW50LnN0YXJ0LnN1YnRyYWN0KDEsICdkYXknKVxuXHRcdFx0Y29uc3QgdGVybWluYXRpb25EYXRlID0gZGF5QmVmb3JlVGFyZ2V0LmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXG5cdFx0XHRjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG5cdFx0XHRcdC4uLmJhc2VFdmVudCxcblx0XHRcdFx0cnJ1bGU6IHtcblx0XHRcdFx0XHQuLi5iYXNlRXZlbnQucnJ1bGUsXG5cdFx0XHRcdFx0dW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNhc2UgJ2FsbCc6IHtcblx0XHRcdC8vIFwiQWxsIGV2ZW50c1wiIC0gUmVtb3ZlIHRoZSBlbnRpcmUgcmVjdXJyaW5nIHNlcmllc1xuXHRcdFx0Y29uc3QgZXZlbnRzV2l0aG91dFRhcmdldFNlcmllcyA9IHVwZGF0ZWRFdmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZSkgPT4gZS51aWQgIT09IHRhcmdldEV2ZW50LnVpZFxuXHRcdFx0KVxuXHRcdFx0cmV0dXJuIGV2ZW50c1dpdGhvdXRUYXJnZXRTZXJpZXNcblx0XHR9XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRgSW52YWxpZCBzY29wZTogJHtzY29wZX0uIE11c3QgYmUgJ3RoaXMnLCAnZm9sbG93aW5nJywgb3IgJ2FsbCdgXG5cdFx0XHQpXG5cdH1cblxuXHRyZXR1cm4gdXBkYXRlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4uanMnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlci5qcydcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUuanMnXG5pbXBvcnQgbG9jYWxlRGF0YSBmcm9tICdkYXlqcy9wbHVnaW4vbG9jYWxlRGF0YS5qcydcbmltcG9ydCBtaW5NYXggZnJvbSAnZGF5anMvcGx1Z2luL21pbk1heC5qcydcbmltcG9ydCB0aW1lem9uZSBmcm9tICdkYXlqcy9wbHVnaW4vdGltZXpvbmUuanMnXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMuanMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuLy8gSW1wb3J0IGFsbCBkYXlqcyBsb2NhbGVzIGFscGhhYmV0aWNhbGx5XG4vLyBsb2NhbGUuanNvbiBmaWxlOiBbe1wia2V5XCI6XCJhZlwiLFwibmFtZVwiOlwiQWZyaWthYW5zXCJ9LHtcImtleVwiOlwiYW1cIixcIm5hbWVcIjpcIkFtaGFyaWNcIn0se1wia2V5XCI6XCJhci1kelwiLFwibmFtZVwiOlwiQXJhYmljIChBbGdlcmlhKVwifSx7XCJrZXlcIjpcImFyLWlxXCIsXCJuYW1lXCI6XCIgQXJhYmljIChJcmFxKVwifSx7XCJrZXlcIjpcImFyLWt3XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEt1d2FpdClcIn0se1wia2V5XCI6XCJhci1seVwiLFwibmFtZVwiOlwiQXJhYmljIChMeWJpYSlcIn0se1wia2V5XCI6XCJhci1tYVwiLFwibmFtZVwiOlwiQXJhYmljIChNb3JvY2NvKVwifSx7XCJrZXlcIjpcImFyLXNhXCIsXCJuYW1lXCI6XCJBcmFiaWMgKFNhdWRpIEFyYWJpYSlcIn0se1wia2V5XCI6XCJhci10blwiLFwibmFtZVwiOlwiIEFyYWJpYyAoVHVuaXNpYSlcIn0se1wia2V5XCI6XCJhclwiLFwibmFtZVwiOlwiQXJhYmljXCJ9LHtcImtleVwiOlwiYXpcIixcIm5hbWVcIjpcIkF6ZXJiYWlqYW5pXCJ9LHtcImtleVwiOlwiYmVcIixcIm5hbWVcIjpcIkJlbGFydXNpYW5cIn0se1wia2V5XCI6XCJiZ1wiLFwibmFtZVwiOlwiQnVsZ2FyaWFuXCJ9LHtcImtleVwiOlwiYmlcIixcIm5hbWVcIjpcIkJpc2xhbWFcIn0se1wia2V5XCI6XCJibVwiLFwibmFtZVwiOlwiQmFtYmFyYVwifSx7XCJrZXlcIjpcImJuLWJkXCIsXCJuYW1lXCI6XCJCZW5nYWxpIChCYW5nbGFkZXNoKVwifSx7XCJrZXlcIjpcImJuXCIsXCJuYW1lXCI6XCJCZW5nYWxpXCJ9LHtcImtleVwiOlwiYm9cIixcIm5hbWVcIjpcIlRpYmV0YW5cIn0se1wia2V5XCI6XCJiclwiLFwibmFtZVwiOlwiQnJldG9uXCJ9LHtcImtleVwiOlwiYnNcIixcIm5hbWVcIjpcIkJvc25pYW5cIn0se1wia2V5XCI6XCJjYVwiLFwibmFtZVwiOlwiQ2F0YWxhblwifSx7XCJrZXlcIjpcImNzXCIsXCJuYW1lXCI6XCJDemVjaFwifSx7XCJrZXlcIjpcImN2XCIsXCJuYW1lXCI6XCJDaHV2YXNoXCJ9LHtcImtleVwiOlwiY3lcIixcIm5hbWVcIjpcIldlbHNoXCJ9LHtcImtleVwiOlwiZGUtYXRcIixcIm5hbWVcIjpcIkdlcm1hbiAoQXVzdHJpYSlcIn0se1wia2V5XCI6XCJkYVwiLFwibmFtZVwiOlwiRGFuaXNoXCJ9LHtcImtleVwiOlwiZGUtY2hcIixcIm5hbWVcIjpcIkdlcm1hbiAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZGVcIixcIm5hbWVcIjpcIkdlcm1hblwifSx7XCJrZXlcIjpcImR2XCIsXCJuYW1lXCI6XCJNYWxkaXZpYW5cIn0se1wia2V5XCI6XCJlbFwiLFwibmFtZVwiOlwiR3JlZWtcIn0se1wia2V5XCI6XCJlbi1hdVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQXVzdHJhbGlhKVwifSx7XCJrZXlcIjpcImVuLWNhXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZW4tZ2JcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKVwifSx7XCJrZXlcIjpcImVuLWllXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJcmVsYW5kKVwifSx7XCJrZXlcIjpcImVuLWlsXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJc3JhZWwpXCJ9LHtcImtleVwiOlwiZW4taW5cIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEluZGlhKVwifSx7XCJrZXlcIjpcImVuLW56XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChOZXcgWmVhbGFuZClcIn0se1wia2V5XCI6XCJlbi1zZ1wiLFwibmFtZVwiOlwiRW5nbGlzaCAoU2luZ2Fwb3JlKVwifSx7XCJrZXlcIjpcImVuLXR0XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChUcmluaWRhZCAmIFRvYmFnbylcIn0se1wia2V5XCI6XCJlb1wiLFwibmFtZVwiOlwiRXNwZXJhbnRvXCJ9LHtcImtleVwiOlwiZW5cIixcIm5hbWVcIjpcIkVuZ2xpc2hcIn0se1wia2V5XCI6XCJlcy1kb1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoRG9taW5pY2FuIFJlcHVibGljKVwifSx7XCJrZXlcIjpcImVzLW14XCIsXCJuYW1lXCI6XCJTcGFuaXNoIChNZXhpY28pXCJ9LHtcImtleVwiOlwiZXMtcHJcIixcIm5hbWVcIjpcIlNwYW5pc2ggKFB1ZXJ0byBSaWNvKVwifSx7XCJrZXlcIjpcImVzLXVzXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChVbml0ZWQgU3RhdGVzKVwifSx7XCJrZXlcIjpcImV0XCIsXCJuYW1lXCI6XCJFc3RvbmlhblwifSx7XCJrZXlcIjpcImVzXCIsXCJuYW1lXCI6XCJTcGFuaXNoXCJ9LHtcImtleVwiOlwiZXVcIixcIm5hbWVcIjpcIkJhc3F1ZVwifSx7XCJrZXlcIjpcImZhXCIsXCJuYW1lXCI6XCJQZXJzaWFuXCJ9LHtcImtleVwiOlwiZm9cIixcIm5hbWVcIjpcIkZhcm9lc2VcIn0se1wia2V5XCI6XCJmaVwiLFwibmFtZVwiOlwiRmlubmlzaFwifSx7XCJrZXlcIjpcImZyLWNhXCIsXCJuYW1lXCI6XCJGcmVuY2ggKENhbmFkYSlcIn0se1wia2V5XCI6XCJmci1jaFwiLFwibmFtZVwiOlwiRnJlbmNoIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJmclwiLFwibmFtZVwiOlwiRnJlbmNoXCJ9LHtcImtleVwiOlwiZnlcIixcIm5hbWVcIjpcIkZyaXNpYW5cIn0se1wia2V5XCI6XCJnYVwiLFwibmFtZVwiOlwiSXJpc2ggb3IgSXJpc2ggR2FlbGljXCJ9LHtcImtleVwiOlwiZ2RcIixcIm5hbWVcIjpcIlNjb3R0aXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdvbS1sYXRuXCIsXCJuYW1lXCI6XCJLb25rYW5pIExhdGluIHNjcmlwdFwifSx7XCJrZXlcIjpcImdsXCIsXCJuYW1lXCI6XCJHYWxpY2lhblwifSx7XCJrZXlcIjpcImd1XCIsXCJuYW1lXCI6XCJHdWphcmF0aVwifSx7XCJrZXlcIjpcImhlXCIsXCJuYW1lXCI6XCJIZWJyZXdcIn0se1wia2V5XCI6XCJoaVwiLFwibmFtZVwiOlwiSGluZGlcIn0se1wia2V5XCI6XCJoclwiLFwibmFtZVwiOlwiQ3JvYXRpYW5cIn0se1wia2V5XCI6XCJodVwiLFwibmFtZVwiOlwiSHVuZ2FyaWFuXCJ9LHtcImtleVwiOlwiaHRcIixcIm5hbWVcIjpcIkhhaXRpYW4gQ3Jlb2xlIChIYWl0aSlcIn0se1wia2V5XCI6XCJoeS1hbVwiLFwibmFtZVwiOlwiQXJtZW5pYW5cIn0se1wia2V5XCI6XCJpZFwiLFwibmFtZVwiOlwiSW5kb25lc2lhblwifSx7XCJrZXlcIjpcImlzXCIsXCJuYW1lXCI6XCJJY2VsYW5kaWNcIn0se1wia2V5XCI6XCJpdC1jaFwiLFwibmFtZVwiOlwiSXRhbGlhbiAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiaXRcIixcIm5hbWVcIjpcIkl0YWxpYW5cIn0se1wia2V5XCI6XCJqYVwiLFwibmFtZVwiOlwiSmFwYW5lc2VcIn0se1wia2V5XCI6XCJqdlwiLFwibmFtZVwiOlwiSmF2YW5lc2VcIn0se1wia2V5XCI6XCJrYVwiLFwibmFtZVwiOlwiR2VvcmdpYW5cIn0se1wia2V5XCI6XCJra1wiLFwibmFtZVwiOlwiS2F6YWtoXCJ9LHtcImtleVwiOlwia21cIixcIm5hbWVcIjpcIkNhbWJvZGlhblwifSx7XCJrZXlcIjpcImtuXCIsXCJuYW1lXCI6XCJLYW5uYWRhXCJ9LHtcImtleVwiOlwia29cIixcIm5hbWVcIjpcIktvcmVhblwifSx7XCJrZXlcIjpcImt1XCIsXCJuYW1lXCI6XCJLdXJkaXNoXCJ9LHtcImtleVwiOlwia3lcIixcIm5hbWVcIjpcIkt5cmd5elwifSx7XCJrZXlcIjpcImxiXCIsXCJuYW1lXCI6XCJMdXhlbWJvdXJnaXNoXCJ9LHtcImtleVwiOlwibG9cIixcIm5hbWVcIjpcIkxhb1wifSx7XCJrZXlcIjpcImx0XCIsXCJuYW1lXCI6XCJMaXRodWFuaWFuXCJ9LHtcImtleVwiOlwibHZcIixcIm5hbWVcIjpcIkxhdHZpYW5cIn0se1wia2V5XCI6XCJtZVwiLFwibmFtZVwiOlwiTW9udGVuZWdyaW5cIn0se1wia2V5XCI6XCJtaVwiLFwibmFtZVwiOlwiTWFvcmlcIn0se1wia2V5XCI6XCJta1wiLFwibmFtZVwiOlwiTWFjZWRvbmlhblwifSx7XCJrZXlcIjpcIm1sXCIsXCJuYW1lXCI6XCJNYWxheWFsYW1cIn0se1wia2V5XCI6XCJtblwiLFwibmFtZVwiOlwiTW9uZ29saWFuXCJ9LHtcImtleVwiOlwibXJcIixcIm5hbWVcIjpcIk1hcmF0aGlcIn0se1wia2V5XCI6XCJtcy1teVwiLFwibmFtZVwiOlwiTWFsYXlcIn0se1wia2V5XCI6XCJtc1wiLFwibmFtZVwiOlwiTWFsYXlcIn0se1wia2V5XCI6XCJtdFwiLFwibmFtZVwiOlwiTWFsdGVzZSAoTWFsdGEpXCJ9LHtcImtleVwiOlwibXlcIixcIm5hbWVcIjpcIkJ1cm1lc2VcIn0se1wia2V5XCI6XCJuYlwiLFwibmFtZVwiOlwiTm9yd2VnaWFuIEJva23DpWxcIn0se1wia2V5XCI6XCJuZVwiLFwibmFtZVwiOlwiTmVwYWxlc2VcIn0se1wia2V5XCI6XCJubC1iZVwiLFwibmFtZVwiOlwiRHV0Y2ggKEJlbGdpdW0pXCJ9LHtcImtleVwiOlwibmxcIixcIm5hbWVcIjpcIkR1dGNoXCJ9LHtcImtleVwiOlwicGxcIixcIm5hbWVcIjpcIlBvbGlzaFwifSx7XCJrZXlcIjpcInB0LWJyXCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlIChCcmF6aWwpXCJ9LHtcImtleVwiOlwicHRcIixcIm5hbWVcIjpcIlBvcnR1Z3Vlc2VcIn0se1wia2V5XCI6XCJyblwiLFwibmFtZVwiOlwiS2lydW5kaVwifSx7XCJrZXlcIjpcInJvXCIsXCJuYW1lXCI6XCJSb21hbmlhblwifSx7XCJrZXlcIjpcInJ1XCIsXCJuYW1lXCI6XCJSdXNzaWFuXCJ9LHtcImtleVwiOlwicndcIixcIm5hbWVcIjpcIktpbnlhcndhbmRhIChSd2FuZGEpXCJ9LHtcImtleVwiOlwic2RcIixcIm5hbWVcIjpcIlNpbmRoaVwifSx7XCJrZXlcIjpcInNlXCIsXCJuYW1lXCI6XCJOb3J0aGVybiBTYW1pXCJ9LHtcImtleVwiOlwic2lcIixcIm5hbWVcIjpcIlNpbmhhbGVzZVwifSx7XCJrZXlcIjpcInNrXCIsXCJuYW1lXCI6XCJTbG92YWtcIn0se1wia2V5XCI6XCJzbFwiLFwibmFtZVwiOlwiU2xvdmVuaWFuXCJ9LHtcImtleVwiOlwic3FcIixcIm5hbWVcIjpcIkFsYmFuaWFuXCJ9LHtcImtleVwiOlwic3ItY3lybFwiLFwibmFtZVwiOlwiU2VyYmlhbiBDeXJpbGxpY1wifSx7XCJrZXlcIjpcInNzXCIsXCJuYW1lXCI6XCJzaVN3YXRpXCJ9LHtcImtleVwiOlwic3YtZmlcIixcIm5hbWVcIjpcIkZpbmxhbmQgU3dlZGlzaFwifSx7XCJrZXlcIjpcInNyXCIsXCJuYW1lXCI6XCJTZXJiaWFuXCJ9LHtcImtleVwiOlwic3ZcIixcIm5hbWVcIjpcIlN3ZWRpc2hcIn0se1wia2V5XCI6XCJzd1wiLFwibmFtZVwiOlwiU3dhaGlsaVwifSx7XCJrZXlcIjpcInRhXCIsXCJuYW1lXCI6XCJUYW1pbFwifSx7XCJrZXlcIjpcInRlXCIsXCJuYW1lXCI6XCJUZWx1Z3VcIn0se1wia2V5XCI6XCJ0ZXRcIixcIm5hbWVcIjpcIlRldHVuIERpbGkgKEVhc3QgVGltb3IpXCJ9LHtcImtleVwiOlwidGdcIixcIm5hbWVcIjpcIlRhamlrXCJ9LHtcImtleVwiOlwidGhcIixcIm5hbWVcIjpcIlRoYWlcIn0se1wia2V5XCI6XCJ0a1wiLFwibmFtZVwiOlwiVHVya21lblwifSx7XCJrZXlcIjpcInRsLXBoXCIsXCJuYW1lXCI6XCJUYWdhbG9nIChQaGlsaXBwaW5lcylcIn0se1wia2V5XCI6XCJ0bGhcIixcIm5hbWVcIjpcIktsaW5nb25cIn0se1wia2V5XCI6XCJ0clwiLFwibmFtZVwiOlwiVHVya2lzaFwifSx7XCJrZXlcIjpcInR6bFwiLFwibmFtZVwiOlwiVGFsb3NzYW5cIn0se1wia2V5XCI6XCJ0em0tbGF0blwiLFwibmFtZVwiOlwiQ2VudHJhbCBBdGxhcyBUYW1hemlnaHQgTGF0aW5cIn0se1wia2V5XCI6XCJ0em1cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0XCJ9LHtcImtleVwiOlwidWctY25cIixcIm5hbWVcIjpcIlV5Z2h1ciAoQ2hpbmEpXCJ9LHtcImtleVwiOlwidWtcIixcIm5hbWVcIjpcIlVrcmFpbmlhblwifSx7XCJrZXlcIjpcInVyXCIsXCJuYW1lXCI6XCJVcmR1XCJ9LHtcImtleVwiOlwidXotbGF0blwiLFwibmFtZVwiOlwiVXpiZWsgTGF0aW5cIn0se1wia2V5XCI6XCJ1elwiLFwibmFtZVwiOlwiVXpiZWtcIn0se1wia2V5XCI6XCJ2aVwiLFwibmFtZVwiOlwiVmlldG5hbWVzZVwifSx7XCJrZXlcIjpcIngtcHNldWRvXCIsXCJuYW1lXCI6XCJQc2V1ZG9cIn0se1wia2V5XCI6XCJ5b1wiLFwibmFtZVwiOlwiWW9ydWJhIE5pZ2VyaWFcIn0se1wia2V5XCI6XCJ6aC1jblwiLFwibmFtZVwiOlwiQ2hpbmVzZSAoQ2hpbmEpXCJ9LHtcImtleVwiOlwiemgtaGtcIixcIm5hbWVcIjpcIkNoaW5lc2UgKEhvbmcgS29uZylcIn0se1wia2V5XCI6XCJ6aC10d1wiLFwibmFtZVwiOlwiQ2hpbmVzZSAoVGFpd2FuKVwifSx7XCJrZXlcIjpcInpoXCIsXCJuYW1lXCI6XCJDaGluZXNlXCJ9LHtcImtleVwiOlwib2MtbG5jXCIsXCJuYW1lXCI6XCJPY2NpdGFuLCBsZW5nYWRvY2lhbiBkaWFsZWN0ZVwifSx7XCJrZXlcIjpcIm5uXCIsXCJuYW1lXCI6XCJOeW5vcnNrXCJ9LHtcImtleVwiOlwicGEtaW5cIixcIm5hbWVcIjpcIlB1bmphYmkgKEluZGlhKVwifV1cbmltcG9ydCAnZGF5anMvbG9jYWxlL2FmLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1kei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWlxLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXIta3cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1seS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLW1hLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItc2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci10bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLWJkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYnMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3YuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jeS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtYXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZHYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWF1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1nYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWllLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLW56LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tc2cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi10dC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1kby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLW14LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtcHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy11cy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ldS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnItY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2Z5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ29tLWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ndS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaGkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oeS1hbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2l0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvamEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9qdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2thLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva2suanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva28uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2t5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbGIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbHYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21pLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy1teS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21zLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9teS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25iLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC1iZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25sLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9vYy1sbmMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wYS1pbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3BsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQtYnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3J3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2suanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NxLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3ItY3lybC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3MuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi1maS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90YS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGV0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90aC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGwtcGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90bGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHptLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWctY24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXotbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS94LXBzZXVkby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3lvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtY24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC1oay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLXR3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemguanMnXG5cbmV4cG9ydCBkZWZhdWx0IGRheWpzXG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XG5cdHJldHVybiB0d01lcmdlKGNsc3goaW5wdXRzKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEYXRlKFxuXHRkYXRlOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWRcbik6IGRheWpzLkRheWpzIHwgdW5kZWZpbmVkIHtcblx0aWYgKGRhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWRcblx0fVxuXHRpZiAoZGF5anMuaXNEYXlqcyhkYXRlKSkge1xuXHRcdHJldHVybiBkYXRlXG5cdH1cblx0Y29uc3QgcGFyc2VkRGF0ZSA9IGRheWpzKGRhdGUpXG5cdHJldHVybiBwYXJzZWREYXRlLmlzVmFsaWQoKSA/IHBhcnNlZERhdGUgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGNvbnN0IG9taXRLZXlzID0gPFQgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBUPihcblx0b2JqOiBULFxuXHRrZXlzOiBLW11cbik6IE9taXQ8VCwgSz4gPT4ge1xuXHRjb25zdCByZXN1bHQgPSB7IC4uLm9iaiB9XG5cdGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcblx0XHRkZWxldGUgcmVzdWx0W2tleV1cblx0fVxuXHRyZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBjYWxlbmRhciBldmVudHMgZnJvbSBwdWJsaWMtZmFjaW5nIGZvcm1hdCB0byBpbnRlcm5hbCBmb3JtYXQuXG4gKiBDb252ZXJ0cyBmbGV4aWJsZSBkYXRlIHR5cGVzIChkYXlqcywgRGF0ZSwgc3RyaW5nKSB0byBzdHJpY3QgZGF5anMgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gZXZlbnRzIC0gQXJyYXkgb2YgY2FsZW5kYXIgZXZlbnRzIHdpdGggZmxleGlibGUgZGF0ZSB0eXBlc1xuICogQHJldHVybnMgTm9ybWFsaXplZCBhcnJheSBvZiBjYWxlbmRhciBldmVudHMgd2l0aCBkYXlqcyBkYXRlc1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSZWd1bGFyIGNhbGVuZGFyIGV2ZW50c1xuICogY29uc3QgZXZlbnRzID0gbm9ybWFsaXplRXZlbnRzPElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKlxuICogLy8gUmVzb3VyY2UgY2FsZW5kYXIgZXZlbnRzXG4gKiBjb25zdCByZXNvdXJjZUV2ZW50cyA9IG5vcm1hbGl6ZUV2ZW50czxJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsIENhbGVuZGFyRXZlbnQ+KHByb3BFdmVudHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVFdmVudHM8XG5cdFRJbnB1dCBleHRlbmRzIHtcblx0XHRzdGFydDogZGF5anMuRGF5anMgfCBEYXRlIHwgc3RyaW5nXG5cdFx0ZW5kOiBkYXlqcy5EYXlqcyB8IERhdGUgfCBzdHJpbmdcblx0fSxcblx0VE91dHB1dCxcbj4oZXZlbnRzOiBUSW5wdXRbXSB8IHVuZGVmaW5lZCk6IFRPdXRwdXRbXSB7XG5cdGlmICghZXZlbnRzIHx8ICFldmVudHMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIFtdXG5cdH1cblxuXHRyZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRzdGFydDogZGF5anMuaXNEYXlqcyhldmVudC5zdGFydCkgPyBldmVudC5zdGFydCA6IGRheWpzKGV2ZW50LnN0YXJ0KSxcblx0XHRcdGVuZDogZGF5anMuaXNEYXlqcyhldmVudC5lbmQpID8gZXZlbnQuZW5kIDogZGF5anMoZXZlbnQuZW5kKSxcblx0XHR9IGFzIFRPdXRwdXRcblx0fSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyRG5kQ29udGV4dCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0J1xuaW1wb3J0IHsgRXZlbnRGb3JtIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB7IEhlYWRlciB9IGZyb20gJ0AvY29tcG9uZW50cy9oZWFkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgRGF5VmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvZGF5LXZpZXcvZGF5LXZpZXcnXG5pbXBvcnQgeyBNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3J1xuaW1wb3J0IFdlZWtWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay12aWV3J1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L3Byb3ZpZGVyJ1xuLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWR1cGxpY2F0ZXNcbmltcG9ydCAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7XG5cdElsYW15Q2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15Q2FsZW5kYXJQcm9wcyxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB7XG5cdERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG5cdEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxuXHRXRUVLX0RBWVNfTlVNQkVSX01BUCxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHsgbm9ybWFsaXplRXZlbnRzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBDYWxlbmRhckNvbnRlbnQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dmlldyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRhZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudCxcblx0XHRkYXlNYXhFdmVudHMsXG5cdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHR9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aWV3TWFwID0ge1xuXHRcdG1vbnRoOiA8TW9udGhWaWV3IGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfSBrZXk9XCJtb250aFwiIC8+LFxuXHRcdHdlZWs6IDxXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG5cdFx0ZGF5OiA8RGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0XHR5ZWFyOiA8WWVhclZpZXcga2V5PVwieWVhclwiIC8+LFxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHR1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuXHR9XG5cblx0Y29uc3QgZXZlbnRGb3JtUHJvcHMgPSB7XG5cdFx0b3BlbjogaXNFdmVudEZvcm1PcGVuLFxuXHRcdG9uQ2xvc2U6IGNsb3NlRXZlbnRGb3JtLFxuXHRcdHNlbGVjdGVkRXZlbnQsXG5cdFx0b25BZGQ6IGFkZEV2ZW50LFxuXHRcdG9uVXBkYXRlOiBoYW5kbGVPblVwZGF0ZSxcblx0XHRvbkRlbGV0ZTogaGFuZGxlT25EZWxldGUsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG5cdFx0XHQ8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cblx0XHRcdHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuXHRcdFx0PENhbGVuZGFyRG5kQ29udGV4dD5cblx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBoLVtjYWxjKDEwMCUtMy41cmVtKV1cIlxuXHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB4OiAtMjAgfX1cblx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeDogMjAgfX1cblx0XHRcdFx0XHRcdGtleT17dmlld31cblx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7dmlld01hcFt2aWV3XX1cblx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0PC9DYWxlbmRhckRuZENvbnRleHQ+XG5cblx0XHRcdHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cblx0XHRcdHtyZW5kZXJFdmVudEZvcm1cblx0XHRcdFx0PyByZW5kZXJFdmVudEZvcm0oZXZlbnRGb3JtUHJvcHMpXG5cdFx0XHRcdDogaXNFdmVudEZvcm1PcGVuICYmIDxFdmVudEZvcm0gey4uLmV2ZW50Rm9ybVByb3BzfSAvPn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSWxhbXlDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlDYWxlbmRhclByb3BzPiA9ICh7XG5cdGV2ZW50cyxcblx0Zmlyc3REYXlPZldlZWsgPSAnc3VuZGF5Jyxcblx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRpbml0aWFsRGF0ZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyUHJvdmlkZXJcblx0XHRcdGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuXHRcdFx0ZXZlbnRTcGFjaW5nPXtldmVudFNwYWNpbmd9XG5cdFx0XHRldmVudHM9e25vcm1hbGl6ZUV2ZW50czxJbGFteUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50PihldmVudHMpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuXHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PENhbGVuZGFyQ29udGVudCAvPlxuXHRcdDwvQ2FsZW5kYXJQcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7XG5cdERyYWdDYW5jZWxFdmVudCxcblx0RHJhZ0VuZEV2ZW50LFxuXHREcmFnU3RhcnRFdmVudCxcbn0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB7XG5cdERuZENvbnRleHQsXG5cdE1vdXNlU2Vuc29yLFxuXHRwb2ludGVyV2l0aGluLFxuXHRUb3VjaFNlbnNvcixcblx0dXNlU2Vuc29yLFxuXHR1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBSZWN1cnJlbmNlRWRpdERpYWxvZyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGdldFVwZGF0ZWRFdmVudCB9IGZyb20gJy4vZG5kLXV0aWxzJ1xuaW1wb3J0IHsgRXZlbnREcmFnT3ZlcmxheSB9IGZyb20gJy4vZXZlbnQtZHJhZy1vdmVybGF5J1xuXG5pbnRlcmZhY2UgQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMge1xuXHRjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDYWxlbmRhckRuZENvbnRleHQoeyBjaGlsZHJlbiB9OiBDYWxlbmRhckRuZENvbnRleHRQcm9wcykge1xuXHRjb25zdCBhY3RpdmVFdmVudFJlZiA9IHVzZVJlZjxDYWxlbmRhckV2ZW50PihudWxsKVxuXHRjb25zdCBkcmFnT3ZlcmxheVJlZiA9IHVzZVJlZjx7XG5cdFx0c2V0QWN0aXZlRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR9PihudWxsKVxuXG5cdGNvbnN0IHsgdXBkYXRlRXZlbnQsIHVwZGF0ZVJlY3VycmluZ0V2ZW50LCBkaXNhYmxlRHJhZ0FuZERyb3AgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBjb250ZXh0LmRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHR9KSlcblxuXHQvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuXHRjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG5cdH0+KHtcblx0XHRpc09wZW46IGZhbHNlLFxuXHRcdGV2ZW50OiBudWxsLFxuXHRcdHVwZGF0ZXM6IG51bGwsXG5cdH0pXG5cblx0Ly8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuXHRjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuXHRcdC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuXHRcdGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG5cdFx0XHRkaXN0YW5jZTogMixcblx0XHR9LFxuXHR9KVxuXG5cdGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG5cdFx0Ly8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG5cdFx0YWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcblx0XHRcdGRlbGF5OiAxMDAsXG5cdFx0XHR0b2xlcmFuY2U6IDUsXG5cdFx0fSxcblx0fSlcblxuXHRjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cblx0Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcblx0Y29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB7XG5cdFx0Ly8gVmFsaWRhdGUgaW5wdXRzXG5cdFx0aWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblxuXHRcdGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuXHRcdFx0Ly8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHR9KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcblx0XHRcdHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuXHRcdH1cblx0fVxuXG5cdC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcblx0XHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuXHRcdFx0XHRzY29wZSxcblx0XHRcdFx0ZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG5cdFx0XHR9KVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0c2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcblx0XHR9XG5cdH1cblxuXHQvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuXHRjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuXHRcdHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cblx0XHQvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuXHRcdGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG5cdFx0XHRkcmFnT3ZlcmxheVJlZi5jdXJyZW50Py5zZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuXHRcdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IGFjdGl2ZS5kYXRhLmN1cnJlbnQuZXZlbnRcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnRW5kID0gKGV2ZW50OiBEcmFnRW5kRXZlbnQpID0+IHtcblx0XHRjb25zdCB1cGRhdGVkRXZlbnQgPSBnZXRVcGRhdGVkRXZlbnQoZXZlbnQsIGFjdGl2ZUV2ZW50UmVmLmN1cnJlbnQpXG5cdFx0aWYgKHVwZGF0ZWRFdmVudCkge1xuXHRcdFx0Y29uc3QgeyBhY3RpdmVFdmVudCwgdXBkYXRlcyB9ID0gdXBkYXRlZEV2ZW50XG5cdFx0XHRwZXJmb3JtRXZlbnRVcGRhdGUoYWN0aXZlRXZlbnQsIHVwZGF0ZXMpXG5cdFx0fVxuXG5cdFx0Ly8gQ2xlYXIgdGhlIGFjdGl2ZSBldmVudCByZWZlcmVuY2Vcblx0XHRhY3RpdmVFdmVudFJlZi5jdXJyZW50ID0gbnVsbFxuXHRcdGRyYWdPdmVybGF5UmVmLmN1cnJlbnQ/LnNldEFjdGl2ZUV2ZW50KG51bGwpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEcmFnQ2FuY2VsID0gKF9ldmVudDogRHJhZ0NhbmNlbEV2ZW50KSA9PiB7XG5cdFx0YWN0aXZlRXZlbnRSZWYuY3VycmVudCA9IG51bGxcblx0fVxuXG5cdC8vIElmIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWQsIGp1c3QgcmV0dXJuIGNoaWxkcmVuIHdpdGhvdXQgRG5kQ29udGV4dFxuXHRpZiAoZGlzYWJsZURyYWdBbmREcm9wKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuIGFzIFJlYWN0LlJlYWN0RWxlbWVudFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PERuZENvbnRleHRcblx0XHRcdFx0Y29sbGlzaW9uRGV0ZWN0aW9uPXtwb2ludGVyV2l0aGlufVxuXHRcdFx0XHRvbkRyYWdDYW5jZWw9e2hhbmRsZURyYWdDYW5jZWx9XG5cdFx0XHRcdG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cblx0XHRcdFx0b25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cblx0XHRcdFx0c2Vuc29ycz17c2Vuc29yc31cblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8RXZlbnREcmFnT3ZlcmxheSByZWY9e2RyYWdPdmVybGF5UmVmfSAvPlxuXHRcdFx0PC9EbmRDb250ZXh0PlxuXG5cdFx0XHR7LyogUmVjdXJyaW5nIGV2ZW50IGVkaXQgZGlhbG9nICovfVxuXHRcdFx0PFJlY3VycmVuY2VFZGl0RGlhbG9nXG5cdFx0XHRcdGV2ZW50VGl0bGU9e3JlY3VycmluZ0RpYWxvZy5ldmVudD8udGl0bGUgfHwgJyd9XG5cdFx0XHRcdGlzT3Blbj17cmVjdXJyaW5nRGlhbG9nLmlzT3Blbn1cblx0XHRcdFx0b25DbG9zZT17aGFuZGxlUmVjdXJyaW5nRXZlbnRDbG9zZX1cblx0XHRcdFx0b25Db25maXJtPXtoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm19XG5cdFx0XHRcdG9wZXJhdGlvblR5cGU9XCJlZGl0XCJcblx0XHRcdC8+XG5cdFx0PC8+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5jb25zdCBidXR0b25WYXJpYW50cyA9IGN2YShcblx0XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00IHNocmluay0wIFsmX3N2Z106c2hyaW5rLTAgb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZVwiLFxuXHR7XG5cdFx0dmFyaWFudHM6IHtcblx0XHRcdHZhcmlhbnQ6IHtcblx0XHRcdFx0ZGVmYXVsdDogJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeS85MCcsXG5cdFx0XHRcdGRlc3RydWN0aXZlOlxuXHRcdFx0XHRcdCdiZy1kZXN0cnVjdGl2ZSB0ZXh0LXdoaXRlIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcblx0XHRcdFx0b3V0bGluZTpcblx0XHRcdFx0XHQnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG5cdFx0XHRcdHNlY29uZGFyeTpcblx0XHRcdFx0XHQnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwJyxcblx0XHRcdFx0Z2hvc3Q6XG5cdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctYWNjZW50LzUwJyxcblx0XHRcdFx0bGluazogJ3RleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lJyxcblx0XHRcdH0sXG5cdFx0XHRzaXplOiB7XG5cdFx0XHRcdGRlZmF1bHQ6ICdoLTkgcHgtNCBweS0yIGhhcy1bPnN2Z106cHgtMycsXG5cdFx0XHRcdHNtOiAnaC04IHJvdW5kZWQtbWQgZ2FwLTEuNSBweC0zIGhhcy1bPnN2Z106cHgtMi41Jyxcblx0XHRcdFx0bGc6ICdoLTEwIHJvdW5kZWQtbWQgcHgtNiBoYXMtWz5zdmddOnB4LTQnLFxuXHRcdFx0XHRpY29uOiAnc2l6ZS05Jyxcblx0XHRcdFx0J2ljb24tc20nOiAnc2l6ZS04Jyxcblx0XHRcdFx0J2ljb24tbGcnOiAnc2l6ZS0xMCcsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0ZGVmYXVsdFZhcmlhbnRzOiB7XG5cdFx0XHR2YXJpYW50OiAnZGVmYXVsdCcsXG5cdFx0XHRzaXplOiAnZGVmYXVsdCcsXG5cdFx0fSxcblx0fVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdHZhcmlhbnQsXG5cdHNpemUsXG5cdGFzQ2hpbGQgPSBmYWxzZSxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG5cdFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuXHRcdGFzQ2hpbGQ/OiBib29sZWFuXG5cdH0pIHtcblx0Y29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuXHRyZXR1cm4gKFxuXHRcdDxDb21wXG5cdFx0XHRjbGFzc05hbWU9e2NuKGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudCwgc2l6ZSwgY2xhc3NOYW1lIH0pKX1cblx0XHRcdGRhdGEtc2xvdD1cImJ1dHRvblwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgRGlhbG9nUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1kaWFsb2cnXG5pbXBvcnQgeyBYSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuXHRyZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcblx0cmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1vdmVybGF5XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuXHRcdFx0PERpYWxvZ092ZXJsYXkgLz5cblx0XHRcdDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdCdiZy1iYWNrZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBmaXhlZCB0b3AtWzUwJV0gbGVmdC1bNTAlXSB6LTUwIGdyaWQgdy1mdWxsIG1heC13LVtjYWxjKDEwMCUtMnJlbSldIHRyYW5zbGF0ZS14LVstNTAlXSB0cmFuc2xhdGUteS1bLTUwJV0gZ2FwLTQgcm91bmRlZC1sZyBib3JkZXIgcC02IHNoYWRvdy1sZyBkdXJhdGlvbi0yMDAgc206bWF4LXctbGcgbWF4LWgtWzkwJV0nLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdD5cblx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG5cdFx0XHRcdFx0PFhJY29uIC8+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuXHRcdFx0XHQ8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cblx0XHRcdDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG5cdFx0PC9EaWFsb2dQb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtY29sIGdhcC0yIHRleHQtY2VudGVyIHNtOnRleHQtbGVmdCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wtcmV2ZXJzZSBnYXAtMiBzbTpmbGV4LXJvdyBzbTpqdXN0aWZ5LWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImRpYWxvZy1mb290ZXJcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuXHRyZXR1cm4gKFxuXHRcdDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbGcgbGVhZGluZy1ub25lIGZvbnQtc2VtaWJvbGQnLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS1zbG90PVwiZGlhbG9nLXRpdGxlXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDbG9zZSxcblx0RGlhbG9nQ29udGVudCxcblx0RGlhbG9nRGVzY3JpcHRpb24sXG5cdERpYWxvZ0Zvb3Rlcixcblx0RGlhbG9nSGVhZGVyLFxuXHREaWFsb2dPdmVybGF5LFxuXHREaWFsb2dQb3J0YWwsXG5cdERpYWxvZ1RpdGxlLFxuXHREaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuXG4vKipcbiAqIEdlbmVyaWMgaG9vayB0aGF0IGRldGVjdHMgd2hpY2ggY2FsZW5kYXIgY29udGV4dCBpcyBhdmFpbGFibGUgYW5kIHJldHVybnMgc2VsZWN0ZWQgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oc2VsZWN0b3I6IChjb250ZXh0KSA9PiBUKTogVCB7XG5cdC8vIENoZWNrIGJvdGggY29udGV4dHMgdXNpbmcgdXNlQ29udGV4dCBkaXJlY3RseSAobm8gaG9va3MpXG5cdGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG5cdGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cblx0aWYgKHJlc291cmNlQ29udGV4dCkge1xuXHRcdHJldHVybiBzZWxlY3RvcihyZXNvdXJjZUNvbnRleHQpXG5cdH1cblxuXHRpZiAocmVndWxhckNvbnRleHQpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3IocmVndWxhckNvbnRleHQpXG5cdH1cblxuXHQvLyBJZiBuZWl0aGVyIGNvbnRleHQgaXMgYXZhaWxhYmxlLCB0aHJvdyBhbiBlcnJvclxuXHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0J3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbktleSB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3LCBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckNvbnRleHRUeXBlIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXSAvLyBVbnByb2Nlc3NlZCBldmVudHMgZm9yIGV4cG9ydFxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuXHRzZXRDdXJyZW50RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHNlbGVjdERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZXRWaWV3OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG5leHRQZXJpb2Q6ICgpID0+IHZvaWRcblx0cHJldlBlcmlvZDogKCkgPT4gdm9pZFxuXHR0b2RheTogKCkgPT4gdm9pZFxuXHRhZGRFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdHVwZGF0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyLCBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PikgPT4gdm9pZFxuXHR1cGRhdGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4sXG5cdFx0b3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG5cdCkgPT4gdm9pZFxuXHRkZWxldGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudDogKFxuXHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0b3BlbkV2ZW50Rm9ybTogKGV2ZW50RGF0YT86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0Y2xvc2VFdmVudEZvcm06ICgpID0+IHZvaWRcblx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoXG5cdFx0c3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcblx0XHRlbmREYXRlOiBkYXlqcy5EYXlqc1xuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNlbGxDbGljazogKGluZm86IENlbGxDbGlja0luZm8pID0+IHZvaWRcblx0Y3VycmVudExvY2FsZT86IHN0cmluZ1xuXHRkaXNhYmxlQ2VsbENsaWNrPzogYm9vbGVhblxuXHRkaXNhYmxlRXZlbnRDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZURyYWdBbmREcm9wPzogYm9vbGVhblxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRldmVudFNwYWNpbmc6IG51bWJlclxuXHRzdGlja3lWaWV3SGVhZGVyOiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU6IHN0cmluZ1xuXHRoZWFkZXJDb21wb25lbnQ/OiBSZWFjdC5SZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcblx0aGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3Ncblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0cmVuZGVyRXZlbnRGb3JtPzogKHByb3BzOiBFdmVudEZvcm1Qcm9wcykgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG5cdHQ6IChrZXk6IFRyYW5zbGF0aW9uS2V5KSA9PiBzdHJpbmdcblx0dGltZUZvcm1hdDogVGltZUZvcm1hdFxuXHRjbGFzc2VzT3ZlcnJpZGU/OiBDYWxlbmRhckNsYXNzZXNPdmVycmlkZVxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+ID1cblx0Y3JlYXRlQ29udGV4dDxDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckNvbnRleHQgPSAoKTogQ2FsZW5kYXJDb250ZXh0VHlwZSA9PiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KENhbGVuZGFyQ29udGV4dClcblx0aWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcigndXNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyJylcblx0fVxuXHRyZXR1cm4gY29udGV4dFxufVxuXG4vKipcbiAqIFNpbXBsaWZpZWQgY2FsZW5kYXIgY29udGV4dCB0eXBlIGZvciBleHRlcm5hbCB1c2VcbiAqIENvbnRhaW5zIG9ubHkgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBjYWxlbmRhciBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4ge1xuXHRyZWFkb25seSBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcblx0cmVhZG9ubHkgdmlldzogQ2FsZW5kYXJWaWV3XG5cdHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJlYWRvbmx5IGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuXHRyZWFkb25seSBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRyZWFkb25seSBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuXHRyZWFkb25seSBmaXJzdERheU9mV2VlazogbnVtYmVyXG5cdHJlYWRvbmx5IHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0cmVhZG9ubHkgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHNldFZpZXc6ICh2aWV3OiBDYWxlbmRhclZpZXcpID0+IHZvaWRcblx0cmVhZG9ubHkgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuXHRyZWFkb25seSBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IHRvZGF5OiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0cmVhZG9ubHkgdXBkYXRlRXZlbnQ6IChcblx0XHRldmVudElkOiBzdHJpbmcgfCBudW1iZXIsXG5cdFx0ZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0KSA9PiB2b2lkXG5cdHJlYWRvbmx5IGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG5cdHJlYWRvbmx5IG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdHJlYWRvbmx5IGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHJlYWRvbmx5IGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG59XG5cbmV4cG9ydCBjb25zdCB1c2VJbGFteUNhbGVuZGFyQ29udGV4dCA9ICgpOiBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiA9PiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KENhbGVuZGFyQ29udGV4dClcblx0aWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdCd1c2VJbGFteUNhbGVuZGFyQ29udGV4dCBtdXN0IGJlIHVzZWQgd2l0aGluIGEgQ2FsZW5kYXJQcm92aWRlcidcblx0XHQpXG5cdH1cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcblx0XHR2aWV3OiBjb250ZXh0LnZpZXcsXG5cdFx0ZXZlbnRzOiBjb250ZXh0LmV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW46IGNvbnRleHQuaXNFdmVudEZvcm1PcGVuLFxuXHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGU6IGNvbnRleHQuc2VsZWN0ZWREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBjb250ZXh0LmZpcnN0RGF5T2ZXZWVrLFxuXHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdHNlbGVjdERhdGU6IGNvbnRleHQuc2VsZWN0RGF0ZSxcblx0XHRzZXRWaWV3OiBjb250ZXh0LnNldFZpZXcsXG5cdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2Q6IGNvbnRleHQucHJldlBlcmlvZCxcblx0XHR0b2RheTogY29udGV4dC50b2RheSxcblx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudDogY29udGV4dC51cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudDogY29udGV4dC5kZWxldGVFdmVudCxcblx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm06IGNvbnRleHQuY2xvc2VFdmVudEZvcm0sXG5cdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHR9IGFzIGNvbnN0XG59XG4iLAogICAgImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDb250ZXh0VHlwZSxcblx0VXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBDZWxsQ2xpY2tJbmZvIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSBleHRlbmRzIENhbGVuZGFyQ29udGV4dFR5cGUge1xuXHQvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuXHRyZXNvdXJjZXM6IFJlc291cmNlW11cblx0dmlzaWJsZVJlc291cmNlczogU2V0PHN0cmluZyB8IG51bWJlcj5cblxuXHQvLyBSZXNvdXJjZSB1dGlsaXRpZXNcblx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IENhbGVuZGFyRXZlbnRbXVxuXHRnZXRFdmVudHNGb3JSZXNvdXJjZXM6IChyZXNvdXJjZUlkczogKHN0cmluZyB8IG51bWJlcilbXSkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGdldFJlc291cmNlQnlJZDogKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4gUmVzb3VyY2UgfCB1bmRlZmluZWRcblx0Z2V0VmlzaWJsZVJlc291cmNlczogKCkgPT4gUmVzb3VyY2VbXVxuXG5cdC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuXHRpc0V2ZW50Q3Jvc3NSZXNvdXJjZTogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBib29sZWFuXG5cdGdldEV2ZW50UmVzb3VyY2VJZHM6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gKHN0cmluZyB8IG51bWJlcilbXVxuXG5cdC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyIGNvbnRleHRcblx0b25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s6IChpbmZvOiBDZWxsQ2xpY2tJbmZvKSA9PiB2b2lkXG5cdHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dDogUmVhY3QuQ29udGV4dDxcblx0UmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlIHwgdW5kZWZpbmVkXG4+ID0gY3JlYXRlQ29udGV4dDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0ID0gKCk6IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSA9PiB7XG5cdGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFJlc291cmNlQ2FsZW5kYXJDb250ZXh0KVxuXHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0J3VzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0KVxuXHR9XG5cdHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCByZXNvdXJjZSBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm5cblx0ZXh0ZW5kcyBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG5cdHJlYWRvbmx5IGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdHJlYWRvbmx5IHJlc291cmNlczogUmVzb3VyY2VbXVxuXHRyZWFkb25seSBnZXRFdmVudHNGb3JSZXNvdXJjZTogKFxuXHRcdHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlclxuXHQpID0+IENhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCA9XG5cdCgpOiBVc2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcblx0XHRjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChSZXNvdXJjZUNhbGVuZGFyQ29udGV4dClcblx0XHRpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdCd1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG5cdFx0XHQpXG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGNvbnRleHQudmlldyxcblx0XHRcdGV2ZW50czogY29udGV4dC5ldmVudHMsXG5cdFx0XHRyZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzLFxuXHRcdFx0aXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3Blbixcblx0XHRcdHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcblx0XHRcdHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG5cdFx0XHRmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2Vlayxcblx0XHRcdHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuXHRcdFx0c2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuXHRcdFx0c2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuXHRcdFx0bmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuXHRcdFx0cHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuXHRcdFx0dG9kYXk6IGNvbnRleHQudG9kYXksXG5cdFx0XHRhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcblx0XHRcdHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuXHRcdFx0ZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG5cdFx0XHRvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG5cdFx0XHRjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcblx0XHRcdGdldEV2ZW50c0ZvclJlc291cmNlOiBjb250ZXh0LmdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdFx0YnVzaW5lc3NIb3VyczogY29udGV4dC5idXNpbmVzc0hvdXJzLFxuXHRcdH0gYXMgY29uc3Rcblx0fVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclByb3ZpZGVyUHJvcHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7XG5cdENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlLFxuXHRDZWxsQ2xpY2tJbmZvLFxufSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5jb25zdCBnZXRFdmVudFJlc291cmNlSWRzID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XG5cdGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuXHRcdHJldHVybiBldmVudC5yZXNvdXJjZUlkc1xuXHR9XG5cdGlmIChldmVudC5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gW2V2ZW50LnJlc291cmNlSWRdXG5cdH1cblx0cmV0dXJuIFtdXG59XG5cbmludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wcyBleHRlbmRzIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuXHRyZXNvdXJjZXM/OiBSZXNvdXJjZVtdXG5cdHJlbmRlclJlc291cmNlPzogKHJlc291cmNlOiBSZXNvdXJjZSkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG5cdG9yaWVudGF0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcblx0UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuXHRjaGlsZHJlbixcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcsXG5cdHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuXHR2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG5cdGhlYWRlckNvbXBvbmVudCxcblx0aGVhZGVyQ2xhc3NOYW1lLFxuXHR0cmFuc2xhdGlvbnMsXG5cdHRyYW5zbGF0b3IsXG5cdHJlbmRlclJlc291cmNlLFxuXHRyZW5kZXJFdmVudEZvcm0sXG5cdGJ1c2luZXNzSG91cnMsXG5cdHRpbWVGb3JtYXQgPSAnMTItaG91cicsXG5cdGNsYXNzZXNPdmVycmlkZSxcblx0b3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCcsXG59KSA9PiB7XG5cdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdGNvbnN0IFtjdXJyZW50UmVzb3VyY2VzXSA9IHVzZVN0YXRlPFJlc291cmNlW10+KHJlc291cmNlcylcblx0Y29uc3QgW3Zpc2libGVSZXNvdXJjZXMsIHNldFZpc2libGVSZXNvdXJjZXNdID0gdXNlU3RhdGU8XG5cdFx0U2V0PHN0cmluZyB8IG51bWJlcj5cblx0PihuZXcgU2V0KHJlc291cmNlcy5tYXAoKHIpID0+IHIuaWQpKSlcblxuXHQvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuXHRjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcblx0XHRldmVudHMsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0aW5pdGlhbFZpZXcsXG5cdFx0aW5pdGlhbERhdGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRvbkV2ZW50QWRkLFxuXHRcdG9uRXZlbnRVcGRhdGUsXG5cdFx0b25FdmVudERlbGV0ZSxcblx0XHRvbkRhdGVDaGFuZ2UsXG5cdFx0b25WaWV3Q2hhbmdlOiBvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdC8vIFJlc291cmNlIHZpc2liaWxpdHlcblx0Y29uc3QgdG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdFx0c2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHByZXYpXG5cdFx0XHRcdGlmIChuZXdTZXQuaGFzKHJlc291cmNlSWQpKSB7XG5cdFx0XHRcdFx0bmV3U2V0LmRlbGV0ZShyZXNvdXJjZUlkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1NldC5hZGQocmVzb3VyY2VJZClcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbmV3U2V0XG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W11cblx0KVxuXG5cdGNvbnN0IHNob3dSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiBuZXcgU2V0KHByZXYpLmFkZChyZXNvdXJjZUlkKSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGlkZVJlc291cmNlID0gdXNlQ2FsbGJhY2soKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IHtcblx0XHRcdGNvbnN0IG5ld1NldCA9IG5ldyBTZXQocHJldilcblx0XHRcdG5ld1NldC5kZWxldGUocmVzb3VyY2VJZClcblx0XHRcdHJldHVybiBuZXdTZXRcblx0XHR9KVxuXHR9LCBbXSlcblxuXHRjb25zdCBzaG93QWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldChjdXJyZW50UmVzb3VyY2VzLm1hcCgocikgPT4gci5pZCkpKVxuXHR9LCBbY3VycmVudFJlc291cmNlc10pXG5cblx0Y29uc3QgaGlkZUFsbFJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcblx0XHRzZXRWaXNpYmxlUmVzb3VyY2VzKG5ldyBTZXQoKSlcblx0fSwgW10pXG5cblx0Ly8gRXZlbnQgdXRpbGl0aWVzXG5cdGNvbnN0IGdldEV2ZW50c0ZvclJlc291cmNlID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRyZXR1cm4gY2FsZW5kYXJFbmdpbmUuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWRzLmluY2x1ZGVzKHJlc291cmNlSWQpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGV2ZW50LnJlc291cmNlSWQgPT09IHJlc291cmNlSWRcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogQ2FsZW5kYXJFdmVudFtdID0+IHtcblx0XHRcdHJldHVybiBjYWxlbmRhckVuZ2luZS5ldmVudHMuZmlsdGVyKChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCBldmVudFJlc291cmNlSWRzID0gZ2V0RXZlbnRSZXNvdXJjZUlkcyhldmVudClcblx0XHRcdFx0cmV0dXJuIGV2ZW50UmVzb3VyY2VJZHMuc29tZSgoaWQpID0+IHJlc291cmNlSWRzLmluY2x1ZGVzKGlkKSlcblx0XHRcdH0pXG5cdFx0fSxcblx0XHRbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuXHQpXG5cblx0Y29uc3QgZ2V0UmVzb3VyY2VCeUlkID0gdXNlQ2FsbGJhY2soXG5cdFx0KHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFJlc291cmNlIHwgdW5kZWZpbmVkID0+IHtcblx0XHRcdHJldHVybiBjdXJyZW50UmVzb3VyY2VzLmZpbmQoKHJlc291cmNlKSA9PiByZXNvdXJjZS5pZCA9PT0gcmVzb3VyY2VJZClcblx0XHR9LFxuXHRcdFtjdXJyZW50UmVzb3VyY2VzXVxuXHQpXG5cblx0Y29uc3QgZ2V0VmlzaWJsZVJlc291cmNlcyA9IHVzZUNhbGxiYWNrKCgpOiBSZXNvdXJjZVtdID0+IHtcblx0XHRyZXR1cm4gY3VycmVudFJlc291cmNlcy5maWx0ZXIoKHJlc291cmNlKSA9PlxuXHRcdFx0dmlzaWJsZVJlc291cmNlcy5oYXMocmVzb3VyY2UuaWQpXG5cdFx0KVxuXHR9LCBbY3VycmVudFJlc291cmNlcywgdmlzaWJsZVJlc291cmNlc10pXG5cblx0Ly8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG5cdGNvbnN0IGlzRXZlbnRDcm9zc1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG5cdFx0cmV0dXJuIEJvb2xlYW4oZXZlbnQucmVzb3VyY2VJZHMgJiYgZXZlbnQucmVzb3VyY2VJZHMubGVuZ3RoID4gMSlcblx0fSwgW10pXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG5ld0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuXHRcdFx0XHRcdHRpdGxlOiBjYWxlbmRhckVuZ2luZS50KCduZXdFdmVudCcpLFxuXHRcdFx0XHRcdHN0YXJ0OiBpbmZvLnN0YXJ0LFxuXHRcdFx0XHRcdGVuZDogaW5mby5lbmQsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246ICcnLFxuXHRcdFx0XHRcdGFsbERheTogZmFsc2UsXG5cdFx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudFxuXG5cdFx0XHRcdGlmIChpbmZvLnJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdG5ld0V2ZW50LnJlc291cmNlSWQgPSBpbmZvLnJlc291cmNlSWRcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRXZlbnQobmV3RXZlbnQpXG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLnNldFNlbGVjdGVkRGF0ZShpbmZvLnN0YXJ0KVxuXHRcdFx0XHRjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Li4uY2FsZW5kYXJFbmdpbmUsXG5cdFx0XHR2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuXHRcdFx0c2V0VmlldzogY2FsZW5kYXJFbmdpbmUuc2V0Vmlldyxcblx0XHRcdGV2ZW50czogY2FsZW5kYXJFbmdpbmUuZXZlbnRzLFxuXHRcdFx0cmF3RXZlbnRzOiBjYWxlbmRhckVuZ2luZS5yYXdFdmVudHMsXG5cblx0XHRcdC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG5cdFx0XHRyZXNvdXJjZXM6IGN1cnJlbnRSZXNvdXJjZXMsXG5cdFx0XHR2aXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0dG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuXHRcdFx0c2hvd1Jlc291cmNlLFxuXHRcdFx0aGlkZVJlc291cmNlLFxuXHRcdFx0c2hvd0FsbFJlc291cmNlcyxcblx0XHRcdGhpZGVBbGxSZXNvdXJjZXMsXG5cblx0XHRcdC8vIFJlc291cmNlIHV0aWxpdGllc1xuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXG5cdFx0XHQvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcblx0XHRcdGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuXHRcdFx0Z2V0RXZlbnRSZXNvdXJjZUlkcyxcblxuXHRcdFx0Ly8gT3ZlcnJpZGUgaGFuZGxlcnNcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cblx0XHRcdC8vIFBhc3MgdGhyb3VnaCBoZWFkZXIgcHJvcHNcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblxuXHRcdFx0Ly8gUGFzcyB0aHJvdWdoIG90aGVyIHByb3BzXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdHJlbmRlclJlc291cmNlLFxuXHRcdFx0cmVuZGVyRXZlbnRGb3JtLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdFx0b3JpZW50YXRpb24sXG5cdFx0fSksXG5cdFx0W1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUsXG5cdFx0XHRjdXJyZW50UmVzb3VyY2VzLFxuXHRcdFx0dmlzaWJsZVJlc291cmNlcyxcblx0XHRcdHRvZ2dsZVJlc291cmNlVmlzaWJpbGl0eSxcblx0XHRcdHNob3dSZXNvdXJjZSxcblx0XHRcdGhpZGVSZXNvdXJjZSxcblx0XHRcdHNob3dBbGxSZXNvdXJjZXMsXG5cdFx0XHRoaWRlQWxsUmVzb3VyY2VzLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdFx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG5cdFx0XHRnZXRSZXNvdXJjZUJ5SWQsXG5cdFx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdFx0aXNFdmVudENyb3NzUmVzb3VyY2UsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRyZW5kZXJSZXNvdXJjZSxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdGxvY2FsZSxcblx0XHRcdHRpbWV6b25lLFxuXHRcdFx0ZGlzYWJsZUNlbGxDbGljayxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0c3RpY2t5Vmlld0hlYWRlcixcblx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0XHRoZWFkZXJDbGFzc05hbWUsXG5cdFx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdFx0dGltZUZvcm1hdCxcblx0XHRcdGNsYXNzZXNPdmVycmlkZSxcblx0XHRcdG9yaWVudGF0aW9uLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvUmVzb3VyY2VDYWxlbmRhckNvbnRleHQuUHJvdmlkZXI+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHtcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQgYXMgZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuXHRnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zbGF0aW9ucyB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0J1xuaW1wb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMsIFRyYW5zbGF0b3JGdW5jdGlvbiB9IGZyb20gJ0AvbGliL3RyYW5zbGF0aW9ucy90eXBlcydcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MsIGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJWaWV3IH0gZnJvbSAnQC90eXBlcydcbmltcG9ydCB7IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgfSBmcm9tICcuLi9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lQ29uZmlnIHtcblx0ZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRpbml0aWFsVmlldz86IENhbGVuZGFyVmlld1xuXHRpbml0aWFsRGF0ZT86IGRheWpzLkRheWpzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdGxvY2FsZT86IHN0cmluZ1xuXHR0aW1lem9uZT86IHN0cmluZ1xuXHR0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcblx0dHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyRW5naW5lUmV0dXJuIHtcblx0Y3VycmVudERhdGU6IGRheWpzLkRheWpzXG5cdHZpZXc6IENhbGVuZGFyVmlld1xuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRyYXdFdmVudHM6IENhbGVuZGFyRXZlbnRbXVxuXHRpc0V2ZW50Rm9ybU9wZW46IGJvb2xlYW5cblx0c2VsZWN0ZWRFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcblx0c2VsZWN0ZWREYXRlOiBkYXlqcy5EYXlqcyB8IG51bGxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuXHRkYXlNYXhFdmVudHM6IG51bWJlclxuXHRjdXJyZW50TG9jYWxlOiBzdHJpbmdcblx0YnVzaW5lc3NIb3Vycz86IEJ1c2luZXNzSG91cnMgfCBCdXNpbmVzc0hvdXJzW11cblx0c2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcblx0c2V0VmlldzogKHZpZXc6IENhbGVuZGFyVmlldykgPT4gdm9pZFxuXHRuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG5cdHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcblx0dG9kYXk6ICgpID0+IHZvaWRcblx0YWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHR1cGRhdGVFdmVudDogKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgZXZlbnQ6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHZvaWRcblx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHR1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuXHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHQpID0+IHZvaWRcblx0ZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IChcblx0XHRldmVudDogQ2FsZW5kYXJFdmVudCxcblx0XHRvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcblx0KSA9PiB2b2lkXG5cdG9wZW5FdmVudEZvcm06IChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG5cdGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG5cdHNldFNlbGVjdGVkRXZlbnQ6IFJlYWN0LkRpc3BhdGNoPFJlYWN0LlNldFN0YXRlQWN0aW9uPENhbGVuZGFyRXZlbnQgfCBudWxsPj5cblx0c2V0SXNFdmVudEZvcm1PcGVuOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxib29sZWFuPj5cblx0c2V0U2VsZWN0ZWREYXRlOiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxkYXlqcy5EYXlqcyB8IG51bGw+PlxuXHRnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IChcblx0XHRzdGFydERhdGU6IGRheWpzLkRheWpzLFxuXHRcdGVuZERhdGU6IGRheWpzLkRheWpzXG5cdCkgPT4gQ2FsZW5kYXJFdmVudFtdXG5cdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHR0OiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHN0cmluZ1xufVxuXG5jb25zdCBWSUVXX1VOSVRTOiBSZWNvcmQ8Q2FsZW5kYXJWaWV3LCBkYXlqcy5NYW5pcHVsYXRlVHlwZT4gPSB7XG5cdGRheTogJ2RheScsXG5cdHdlZWs6ICd3ZWVrJyxcblx0bW9udGg6ICdtb250aCcsXG5cdHllYXI6ICd5ZWFyJyxcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyRW5naW5lID0gKFxuXHRjb25maWc6IENhbGVuZGFyRW5naW5lQ29uZmlnXG4pOiBDYWxlbmRhckVuZ2luZVJldHVybiA9PiB7XG5cdGNvbnN0IHtcblx0XHRldmVudHMgPSBbXSxcblx0XHRmaXJzdERheU9mV2VlayA9IDAsXG5cdFx0aW5pdGlhbFZpZXcgPSAnbW9udGgnLFxuXHRcdGluaXRpYWxEYXRlID0gZGF5anMoKSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9ID0gY29uZmlnXG5cblx0Y29uc3QgW2N1cnJlbnREYXRlLCBzZXRDdXJyZW50RGF0ZV0gPSB1c2VTdGF0ZTxkYXlqcy5EYXlqcz4oaW5pdGlhbERhdGUpXG5cdGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPENhbGVuZGFyVmlldz4oaW5pdGlhbFZpZXcpXG5cdGNvbnN0IFtjdXJyZW50RXZlbnRzLCBzZXRDdXJyZW50RXZlbnRzXSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnRbXT4oZXZlbnRzKVxuXHRjb25zdCBbaXNFdmVudEZvcm1PcGVuLCBzZXRJc0V2ZW50Rm9ybU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZEV2ZW50LCBzZXRTZWxlY3RlZEV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihudWxsKVxuXHRjb25zdCBbc2VsZWN0ZWREYXRlLCBzZXRTZWxlY3RlZERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anMgfCBudWxsPihudWxsKVxuXHRjb25zdCBbY3VycmVudExvY2FsZSwgc2V0Q3VycmVudExvY2FsZV0gPSB1c2VTdGF0ZShsb2NhbGUgfHwgJ2VuJylcblxuXHRjb25zdCB0ID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKHRyYW5zbGF0b3IpIHtcblx0XHRcdHJldHVybiB0cmFuc2xhdG9yXG5cdFx0fVxuXHRcdGlmICh0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiAoa2V5OiBrZXlvZiBUcmFuc2xhdGlvbnMpID0+IHRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuXHRcdH1cblx0XHRyZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiBkZWZhdWx0VHJhbnNsYXRpb25zW2tleV0gfHwga2V5XG5cdH0sIFt0cmFuc2xhdGlvbnMsIHRyYW5zbGF0b3JdKVxuXG5cdGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG5cdFx0XHRjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cblx0XHRcdGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuXHRcdFx0XHRpZiAoZXZlbnQucnJ1bGUpIHtcblx0XHRcdFx0XHRhbGxFdmVudHMucHVzaChcblx0XHRcdFx0XHRcdC4uLmdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzKHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRFdmVudHMsXG5cdFx0XHRcdFx0XHRcdHN0YXJ0RGF0ZSxcblx0XHRcdFx0XHRcdFx0ZW5kRGF0ZSxcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHN0YXJ0c0luUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNTYW1lT3JBZnRlcihzdGFydERhdGUpICYmXG5cdFx0XHRcdFx0XHRldmVudC5zdGFydC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IGVuZHNJblJhbmdlID1cblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcblx0XHRcdFx0XHRcdGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXHRcdFx0XHRcdGNvbnN0IHNwYW5zUmFuZ2UgPVxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RhcnQuaXNCZWZvcmUoc3RhcnREYXRlKSAmJiBldmVudC5lbmQuaXNBZnRlcihlbmREYXRlKVxuXHRcdFx0XHRcdGlmIChzdGFydHNJblJhbmdlIHx8IGVuZHNJblJhbmdlIHx8IHNwYW5zUmFuZ2UpIHtcblx0XHRcdFx0XHRcdGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbEV2ZW50c1xuXHRcdH0sXG5cdFx0W2N1cnJlbnRFdmVudHNdXG5cdClcblxuXHRjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuXHRcdGlmICh2aWV3ID09PSAnZGF5Jykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ2RheScpLFxuXHRcdFx0XHRlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdkYXknKSxcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHZpZXcgPT09ICd5ZWFyJykge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c3RhcnQ6IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ3llYXInKSxcblx0XHRcdFx0ZW5kOiBjdXJyZW50RGF0ZS5lbmRPZigneWVhcicpLFxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAodmlldyA9PT0gJ3dlZWsnKSB7XG5cdFx0XHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHN0YXJ0OiB3ZWVrRGF5c1swXS5zdGFydE9mKCdkYXknKSxcblx0XHRcdFx0ZW5kOiB3ZWVrRGF5c1s2XS5lbmRPZignZGF5JyksXG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIG1vbnRoIHZpZXdcblx0XHRjb25zdCB3ZWVrcyA9IGdldE1vbnRoV2Vla3MoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXHRcdHJldHVybiB7IHN0YXJ0OiB3ZWVrc1swXVswXS5zdGFydE9mKCdkYXknKSwgZW5kOiB3ZWVrc1s1XVs2XS5lbmRPZignZGF5JykgfVxuXHR9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuXHRcdHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcblx0fSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAoZXZlbnRzKSB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcblx0XHR9XG5cdH0sIFtldmVudHNdKVxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChsb2NhbGUpIHtcblx0XHRcdHNldEN1cnJlbnRMb2NhbGUobG9jYWxlKVxuXHRcdFx0ZGF5anMubG9jYWxlKGxvY2FsZSlcblx0XHRcdHNldEN1cnJlbnREYXRlKChwcmV2RGF0ZSkgPT4gcHJldkRhdGUubG9jYWxlKGxvY2FsZSkpXG5cdFx0fVxuXHR9LCBbbG9jYWxlXSlcblx0dXNlRWZmZWN0KCgpID0+IHtcblx0XHRpZiAodGltZXpvbmUpIHtcblx0XHRcdGRheWpzLnR6LnNldERlZmF1bHQodGltZXpvbmUpXG5cdFx0fVxuXHR9LCBbdGltZXpvbmVdKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSB1c2VDYWxsYmFjayhcblx0XHQoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRcdHNldEN1cnJlbnREYXRlKGRhdGUpXG5cdFx0XHRvbkRhdGVDaGFuZ2U/LihkYXRlKVxuXHRcdH0sXG5cdFx0W29uRGF0ZUNoYW5nZV1cblx0KVxuXG5cdGNvbnN0IG5hdmlnYXRlUGVyaW9kID0gdXNlQ2FsbGJhY2soXG5cdFx0KGRpcmVjdGlvbjogMSB8IC0xKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RGF0ZSgocHJldikgPT4ge1xuXHRcdFx0XHRjb25zdCBuZXdEYXRlID1cblx0XHRcdFx0XHRkaXJlY3Rpb24gPT09IDFcblx0XHRcdFx0XHRcdD8gcHJldi5hZGQoMSwgVklFV19VTklUU1t2aWV3XSlcblx0XHRcdFx0XHRcdDogcHJldi5zdWJ0cmFjdCgxLCBWSUVXX1VOSVRTW3ZpZXddKVxuXHRcdFx0XHRvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuXHRcdFx0XHRyZXR1cm4gbmV3RGF0ZVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFt2aWV3LCBvbkRhdGVDaGFuZ2VdXG5cdClcblxuXHRjb25zdCBuZXh0UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4gbmF2aWdhdGVQZXJpb2QoMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cdGNvbnN0IHByZXZQZXJpb2QgPSB1c2VDYWxsYmFjaygoKSA9PiBuYXZpZ2F0ZVBlcmlvZCgtMSksIFtuYXZpZ2F0ZVBlcmlvZF0pXG5cblx0Y29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0Y29uc3QgbmV3RGF0ZSA9IGRheWpzKClcblx0XHRzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuXHRcdG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG5cdH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG5cdGNvbnN0IGFkZEV2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiBbLi4ucHJldiwgZXZlbnRdKVxuXHRcdFx0b25FdmVudEFkZD8uKGV2ZW50KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRBZGRdXG5cdClcblxuXHRjb25zdCB1cGRhdGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4pID0+IHtcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoKHByZXYpID0+XG5cdFx0XHRcdHByZXYubWFwKChldmVudCkgPT4ge1xuXHRcdFx0XHRcdGlmIChldmVudC5pZCAhPT0gZXZlbnRJZCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGV2ZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlcyB9XG5cdFx0XHRcdFx0b25FdmVudFVwZGF0ZT8uKG5ld0V2ZW50KVxuXHRcdFx0XHRcdHJldHVybiBuZXdFdmVudFxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH0sXG5cdFx0W29uRXZlbnRVcGRhdGVdXG5cdClcblxuXHRjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChcblx0XHRcdGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuXHRcdFx0dXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50Pixcblx0XHRcdG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9uc1xuXHRcdCkgPT4ge1xuXHRcdFx0b25FdmVudFVwZGF0ZT8uKHsgLi4uZXZlbnQsIC4uLnVwZGF0ZXMgfSlcblx0XHRcdHNldEN1cnJlbnRFdmVudHMoXG5cdFx0XHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50SW1wbCh7XG5cdFx0XHRcdFx0dGFyZ2V0RXZlbnQ6IGV2ZW50LFxuXHRcdFx0XHRcdHVwZGF0ZXMsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50VXBkYXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlUmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnQ6IENhbGVuZGFyRXZlbnQsIG9wdGlvbnM6IFJlY3VycmVuY2VFZGl0T3B0aW9ucykgPT4ge1xuXHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50KVxuXHRcdFx0c2V0Q3VycmVudEV2ZW50cyhcblx0XHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnRJbXBsKHtcblx0XHRcdFx0XHR0YXJnZXRFdmVudDogZXZlbnQsXG5cdFx0XHRcdFx0Y3VycmVudEV2ZW50cyxcblx0XHRcdFx0XHRzY29wZTogb3B0aW9ucy5zY29wZSxcblx0XHRcdFx0fSlcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzLCBvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3QgZGVsZXRlRXZlbnQgPSB1c2VDYWxsYmFjayhcblx0XHQoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG5cdFx0XHRzZXRDdXJyZW50RXZlbnRzKChwcmV2KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50VG9EZWxldGUgPSBwcmV2LmZpbmQoKGUpID0+IGUuaWQgPT09IGV2ZW50SWQpXG5cdFx0XHRcdGlmIChldmVudFRvRGVsZXRlKSB7XG5cdFx0XHRcdFx0b25FdmVudERlbGV0ZT8uKGV2ZW50VG9EZWxldGUpXG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHByZXYuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBldmVudElkKVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdFtvbkV2ZW50RGVsZXRlXVxuXHQpXG5cblx0Y29uc3Qgb3BlbkV2ZW50Rm9ybSA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudERhdGE/OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRpZiAoZXZlbnREYXRhPy5zdGFydCkge1xuXHRcdFx0XHRzZXRTZWxlY3RlZERhdGUoZXZlbnREYXRhLnN0YXJ0KVxuXHRcdFx0fVxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBldmVudERhdGE/LnN0YXJ0ID8/IGN1cnJlbnREYXRlXG5cdFx0XHRzZXRTZWxlY3RlZEV2ZW50KHtcblx0XHRcdFx0dGl0bGU6IHQoJ25ld0V2ZW50JyksXG5cdFx0XHRcdHN0YXJ0LFxuXHRcdFx0XHRlbmQ6IGV2ZW50RGF0YT8uZW5kID8/IHN0YXJ0LmFkZCgxLCAnaG91cicpLFxuXHRcdFx0XHRyZXNvdXJjZUlkOiBldmVudERhdGE/LnJlc291cmNlSWQsXG5cdFx0XHRcdGRlc2NyaXB0aW9uOiAnJyxcblx0XHRcdFx0YWxsRGF5OiBldmVudERhdGE/LmFsbERheSA/PyBmYWxzZSxcblx0XHRcdH0gYXMgQ2FsZW5kYXJFdmVudClcblx0XHRcdHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2N1cnJlbnREYXRlLCB0XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKG51bGwpXG5cdFx0c2V0U2VsZWN0ZWRFdmVudChudWxsKVxuXHRcdHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcblx0fSwgW10pXG5cblx0Y29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IHVzZUNhbGxiYWNrKFxuXHRcdChuZXdWaWV3OiBDYWxlbmRhclZpZXcpID0+IHtcblx0XHRcdHNldFZpZXcobmV3Vmlldylcblx0XHRcdG9uVmlld0NoYW5nZT8uKG5ld1ZpZXcpXG5cdFx0fSxcblx0XHRbb25WaWV3Q2hhbmdlXVxuXHQpXG5cblx0Y29uc3QgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50KTogQ2FsZW5kYXJFdmVudCB8IG51bGwgPT4ge1xuXHRcdFx0Y29uc3QgdGFyZ2V0VUlEID0gZXZlbnQudWlkXG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRjdXJyZW50RXZlbnRzLmZpbmQoXG5cdFx0XHRcdFx0KGUpID0+IChlLnVpZCB8fCBgJHtlLmlkfUBpbGFteS5jYWxlbmRhcmApID09PSB0YXJnZXRVSUQgJiYgZS5ycnVsZVxuXHRcdFx0XHQpIHx8IG51bGxcblx0XHRcdClcblx0XHR9LFxuXHRcdFtjdXJyZW50RXZlbnRzXVxuXHQpXG5cblx0cmV0dXJuIHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHR2aWV3LFxuXHRcdGV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuXHRcdHJhd0V2ZW50czogY3VycmVudEV2ZW50cyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRzZWxlY3RlZERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0ZGF5TWF4RXZlbnRzOiBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRzZXRDdXJyZW50RGF0ZSxcblx0XHRzZWxlY3REYXRlLFxuXHRcdHNldFZpZXc6IGhhbmRsZVZpZXdDaGFuZ2UsXG5cdFx0bmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kLFxuXHRcdHRvZGF5LFxuXHRcdGFkZEV2ZW50LFxuXHRcdHVwZGF0ZUV2ZW50LFxuXHRcdHVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdGRlbGV0ZUV2ZW50LFxuXHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdG9wZW5FdmVudEZvcm0sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2V0U2VsZWN0ZWRFdmVudCxcblx0XHRzZXRJc0V2ZW50Rm9ybU9wZW4sXG5cdFx0c2V0U2VsZWN0ZWREYXRlLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0dCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4vdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNsYXRpb25zOiBUcmFuc2xhdGlvbnMgPSB7XG5cdC8vIENvbW1vbiBhY3Rpb25zXG5cdHRvZGF5OiAnVG9kYXknLFxuXHRjcmVhdGU6ICdDcmVhdGUnLFxuXHRuZXc6ICdOZXcnLFxuXHR1cGRhdGU6ICdVcGRhdGUnLFxuXHRkZWxldGU6ICdEZWxldGUnLFxuXHRjYW5jZWw6ICdDYW5jZWwnLFxuXHRleHBvcnQ6ICdFeHBvcnQnLFxuXG5cdC8vIEV2ZW50IHJlbGF0ZWRcblx0ZXZlbnQ6ICdFdmVudCcsXG5cdGV2ZW50czogJ0V2ZW50cycsXG5cdG5ld0V2ZW50OiAnTmV3IEV2ZW50Jyxcblx0dGl0bGU6ICdUaXRsZScsXG5cdGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nLFxuXHRsb2NhdGlvbjogJ0xvY2F0aW9uJyxcblx0YWxsRGF5OiAnQWxsIGRheScsXG5cdHN0YXJ0RGF0ZTogJ1N0YXJ0IERhdGUnLFxuXHRlbmREYXRlOiAnRW5kIERhdGUnLFxuXHRzdGFydFRpbWU6ICdTdGFydCBUaW1lJyxcblx0ZW5kVGltZTogJ0VuZCBUaW1lJyxcblx0Y29sb3I6ICdDb2xvcicsXG5cblx0Ly8gRXZlbnQgZm9ybVxuXHRjcmVhdGVFdmVudDogJ0NyZWF0ZSBFdmVudCcsXG5cdGVkaXRFdmVudDogJ0VkaXQgRXZlbnQnLFxuXHRhZGROZXdFdmVudDogJ0FkZCBhIG5ldyBldmVudCB0byB5b3VyIGNhbGVuZGFyJyxcblx0ZWRpdEV2ZW50RGV0YWlsczogJ0VkaXQgeW91ciBldmVudCBkZXRhaWxzJyxcblx0ZXZlbnRUaXRsZVBsYWNlaG9sZGVyOiAnRXZlbnQgdGl0bGUnLFxuXHRldmVudERlc2NyaXB0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpJyxcblx0ZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyOiAnRXZlbnQgbG9jYXRpb24gKG9wdGlvbmFsKScsXG5cblx0Ly8gUmVjdXJyZW5jZVxuXHRyZXBlYXQ6ICdSZXBlYXQnLFxuXHRyZXBlYXRzOiAnUmVwZWF0cycsXG5cdGN1c3RvbVJlY3VycmVuY2U6ICdDdXN0b20gcmVjdXJyZW5jZScsXG5cdGRhaWx5OiAnRGFpbHknLFxuXHR3ZWVrbHk6ICdXZWVrbHknLFxuXHRtb250aGx5OiAnTW9udGhseScsXG5cdHllYXJseTogJ1llYXJseScsXG5cdGludGVydmFsOiAnSW50ZXJ2YWwnLFxuXHRyZXBlYXRPbjogJ1JlcGVhdCBvbicsXG5cdG5ldmVyOiAnTmV2ZXInLFxuXHRjb3VudDogJ0NvdW50Jyxcblx0ZXZlcnk6ICdFdmVyeScsXG5cdGVuZHM6ICdFbmRzJyxcblx0YWZ0ZXI6ICdBZnRlcicsXG5cdG9jY3VycmVuY2VzOiAnb2NjdXJyZW5jZXMnLFxuXHRvbjogJ09uJyxcblxuXHQvLyBSZWN1cnJlbmNlIGVkaXQgZGlhbG9nXG5cdGVkaXRSZWN1cnJpbmdFdmVudDogJ0VkaXQgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6ICdEZWxldGUgcmVjdXJyaW5nIGV2ZW50Jyxcblx0ZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG5cdFx0J2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZWRpdCBpdD8nLFxuXHRkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uOlxuXHRcdCdpcyBhIHJlY3VycmluZyBldmVudC4gSG93IHdvdWxkIHlvdSBsaWtlIHRvIGRlbGV0ZSBpdD8nLFxuXHR0aGlzRXZlbnQ6ICdUaGlzIGV2ZW50Jyxcblx0dGhpc0V2ZW50RGVzY3JpcHRpb246ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHR0aGlzQW5kRm9sbG93aW5nRXZlbnRzOiAnVGhpcyBhbmQgZm9sbG93aW5nIGV2ZW50cycsXG5cdHRoaXNBbmRGb2xsb3dpbmdFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG5cdGFsbEV2ZW50czogJ0FsbCBldmVudHMnLFxuXHRhbGxFdmVudHNEZXNjcmlwdGlvbjogJ0VkaXQgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seUNoYW5nZVRoaXM6ICdPbmx5IGNoYW5nZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRjaGFuZ2VUaGlzQW5kRnV0dXJlOiAnQ2hhbmdlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRjaGFuZ2VFbnRpcmVTZXJpZXM6ICdDaGFuZ2UgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblx0b25seURlbGV0ZVRoaXM6ICdPbmx5IGRlbGV0ZSB0aGlzIHNwZWNpZmljIG9jY3VycmVuY2UnLFxuXHRkZWxldGVUaGlzQW5kRnV0dXJlOiAnRGVsZXRlIHRoaXMgYW5kIGFsbCBmdXR1cmUgb2NjdXJyZW5jZXMnLFxuXHRkZWxldGVFbnRpcmVTZXJpZXM6ICdEZWxldGUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzJyxcblxuXHQvLyBWaWV3IHR5cGVzXG5cdG1vbnRoOiAnTW9udGgnLFxuXHR3ZWVrOiAnV2VlaycsXG5cdGRheTogJ0RheScsXG5cdHllYXI6ICdZZWFyJyxcblx0bW9yZTogJ21vcmUnLFxuXG5cdC8vIFJlc291cmNlIGNhbGVuZGFyXG5cdHJlc291cmNlczogJ1Jlc291cmNlcycsXG5cdHJlc291cmNlOiAnUmVzb3VyY2UnLFxuXHR0aW1lOiAnVGltZScsXG5cdGRhdGU6ICdEYXRlJyxcblx0bm9SZXNvdXJjZXNWaXNpYmxlOiAnTm8gcmVzb3VyY2VzIHZpc2libGUnLFxuXHRhZGRSZXNvdXJjZXNPclNob3dFeGlzdGluZzogJ0FkZCByZXNvdXJjZXMgb3Igc2hvdyBleGlzdGluZyBvbmVzJyxcblxuXHQvLyBEYXlzIG9mIHdlZWtcblx0c3VuZGF5OiAnU3VuZGF5Jyxcblx0bW9uZGF5OiAnTW9uZGF5Jyxcblx0dHVlc2RheTogJ1R1ZXNkYXknLFxuXHR3ZWRuZXNkYXk6ICdXZWRuZXNkYXknLFxuXHR0aHVyc2RheTogJ1RodXJzZGF5Jyxcblx0ZnJpZGF5OiAnRnJpZGF5Jyxcblx0c2F0dXJkYXk6ICdTYXR1cmRheScsXG5cblx0Ly8gRGF5cyBzaG9ydFxuXHRzdW46ICdTdW4nLFxuXHRtb246ICdNb24nLFxuXHR0dWU6ICdUdWUnLFxuXHR3ZWQ6ICdXZWQnLFxuXHR0aHU6ICdUaHUnLFxuXHRmcmk6ICdGcmknLFxuXHRzYXQ6ICdTYXQnLFxuXG5cdC8vIE1vbnRoc1xuXHRqYW51YXJ5OiAnSmFudWFyeScsXG5cdGZlYnJ1YXJ5OiAnRmVicnVhcnknLFxuXHRtYXJjaDogJ01hcmNoJyxcblx0YXByaWw6ICdBcHJpbCcsXG5cdG1heTogJ01heScsXG5cdGp1bmU6ICdKdW5lJyxcblx0anVseTogJ0p1bHknLFxuXHRhdWd1c3Q6ICdBdWd1c3QnLFxuXHRzZXB0ZW1iZXI6ICdTZXB0ZW1iZXInLFxuXHRvY3RvYmVyOiAnT2N0b2JlcicsXG5cdG5vdmVtYmVyOiAnTm92ZW1iZXInLFxuXHRkZWNlbWJlcjogJ0RlY2VtYmVyJyxcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuXHRjdXJyZW50RGF0ZTogZGF5anMuRGF5anMsXG5cdGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW10ge1xuXHRjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG5cdFx0LnN0YXJ0T2YoJ3dlZWsnKVxuXHRcdC5kYXkoZmlyc3REYXlPZldlZWspXG5cblx0Y29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuXHRcdD8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuXHRcdDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG5cdFx0YWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIDYgd2Vla3Mgb2YgZGF5cyBmb3IgYSBtb250aCBjYWxlbmRhciB2aWV3LlxuICogQWx3YXlzIHJldHVybnMgNDIgZGF5cyAoNiB3ZWVrcyDDlyA3IGRheXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhXZWVrcyhcblx0bW9udGhEYXRlOiBkYXlqcy5EYXlqcyxcblx0Zmlyc3REYXlPZldlZWs6IG51bWJlclxuKTogZGF5anMuRGF5anNbXVtdIHtcblx0Y29uc3QgZmlyc3RXZWVrID0gZ2V0V2Vla0RheXMobW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJyksIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA2IH0sIChfLCB3ZWVrSW5kZXgpID0+IHtcblx0XHRjb25zdCB3ZWVrU3RhcnQgPSBmaXJzdFdlZWtbMF0uYWRkKHdlZWtJbmRleCwgJ3dlZWsnKVxuXHRcdHJldHVybiBnZXRXZWVrRGF5cyh3ZWVrU3RhcnQsIGZpcnN0RGF5T2ZXZWVrKVxuXHR9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhEYXlzKG1vbnRoRGF0ZTogZGF5anMuRGF5anMpOiBkYXlqcy5EYXlqc1tdIHtcblx0Y29uc3QgZGF5c0luTW9udGggPSBtb250aERhdGUuZGF5c0luTW9udGgoKVxuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG5cdFx0bW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuYWRkKGksICdkYXknKVxuXHQpXG59XG5cbmludGVyZmFjZSBHZXREYXlIb3Vyc09wdGlvbnMge1xuXHRyZWZlcmVuY2VEYXRlPzogZGF5anMuRGF5anMgLy8gUmVmZXJlbmNlIGRhdGUgdG8gc2V0IHRoZSBob3VycyBvbiAoZGVmYXVsdCBpcyB0b2RheSlcblx0bGVuZ3RoPzogbnVtYmVyIC8vIE51bWJlciBvZiBob3VycyBpbiB0aGUgZGF5IChkZWZhdWx0IGlzIDI0KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF5SG91cnMoe1xuXHRyZWZlcmVuY2VEYXRlID0gZGF5anMoKSxcblx0bGVuZ3RoID0gMjQsXG59OiBHZXREYXlIb3Vyc09wdGlvbnMgPSB7fSk6IGRheWpzLkRheWpzW10ge1xuXHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9LCAoXywgaSkgPT5cblx0XHRyZWZlcmVuY2VEYXRlLmhvdXIoaSkubWludXRlKDApLnNlY29uZCgwKVxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBHQVBfQkVUV0VFTl9FTEVNRU5UUyA9IDEgLy8gcHggKGdhcC0xKVxuZXhwb3J0IGNvbnN0IERBWV9OVU1CRVJfSEVJR0hUID0gMjQgLy8gcHggKGgtNilcbmV4cG9ydCBjb25zdCBFVkVOVF9CQVJfSEVJR0hUID0gMjQgLy8gcHggKGgtWzI0cHhdKVxuZXhwb3J0IGNvbnN0IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQgPSA0IC8vIERlZmF1bHQgbWF4IGV2ZW50cyBwZXIgZGF5XG5leHBvcnQgY29uc3QgRElTQUJMRURfQ0VMTF9DTEFTU05BTUUgPVxuXHQnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwb2ludGVyLWV2ZW50cy1ub25lJ1xuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuXHQwOiAnc3VuZGF5Jyxcblx0MTogJ21vbmRheScsXG5cdDI6ICd0dWVzZGF5Jyxcblx0MzogJ3dlZG5lc2RheScsXG5cdDQ6ICd0aHVyc2RheScsXG5cdDU6ICdmcmlkYXknLFxuXHQ2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBSZWN1cnJlbmNlRWRpdFNjb3BlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcyB7XG5cdGlzT3BlbjogYm9vbGVhblxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG5cdG9uQ29uZmlybTogKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB2b2lkXG5cdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdGV2ZW50VGl0bGU6IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmVjdXJyZW5jZUVkaXREaWFsb2coe1xuXHRpc09wZW4sXG5cdG9uQ2xvc2UsXG5cdG9uQ29uZmlybSxcblx0b3BlcmF0aW9uVHlwZSxcblx0ZXZlbnRUaXRsZSxcbn06IFJlY3VycmVuY2VFZGl0RGlhbG9nUHJvcHMpIHtcblx0Y29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuXG5cdGNvbnN0IGhhbmRsZVNjb3BlU2VsZWN0ID0gKHNjb3BlOiBSZWN1cnJlbmNlRWRpdFNjb3BlKSA9PiB7XG5cdFx0b25Db25maXJtKHNjb3BlKVxuXHRcdG9uQ2xvc2UoKVxuXHR9XG5cblx0Y29uc3QgaXNFZGl0ID0gb3BlcmF0aW9uVHlwZSA9PT0gJ2VkaXQnXG5cblx0cmV0dXJuIChcblx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17aXNPcGVufT5cblx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cIm1heC13LW1kXCI+XG5cdFx0XHRcdDxEaWFsb2dIZWFkZXI+XG5cdFx0XHRcdFx0PERpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudCcpIDogdCgnZGVsZXRlUmVjdXJyaW5nRXZlbnQnKX1cblx0XHRcdFx0XHQ8L0RpYWxvZ1RpdGxlPlxuXHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0XHRcdFwie2V2ZW50VGl0bGV9XCJ7JyAnfVxuXHRcdFx0XHRcdFx0e2lzRWRpdFxuXHRcdFx0XHRcdFx0XHQ/IHQoJ2VkaXRSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJylcblx0XHRcdFx0XHRcdFx0OiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudFF1ZXN0aW9uJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dEZXNjcmlwdGlvbj5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTNcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwganVzdGlmeS1zdGFydCBoLWF1dG8gcC00XCJcblx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IGhhbmRsZVNjb3BlU2VsZWN0KCd0aGlzJyl9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzRXZlbnQnKX08L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdHtpc0VkaXQgPyB0KCdvbmx5Q2hhbmdlVGhpcycpIDogdCgnb25seURlbGV0ZVRoaXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2ZvbGxvd2luZycpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgndGhpc0FuZEZvbGxvd2luZ0V2ZW50cycpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0e2lzRWRpdCA/IHQoJ2NoYW5nZVRoaXNBbmRGdXR1cmUnKSA6IHQoJ2RlbGV0ZVRoaXNBbmRGdXR1cmUnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuXHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ2FsbCcpfVxuXHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1sZWZ0XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj57dCgnYWxsRXZlbnRzJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7aXNFZGl0ID8gdCgnY2hhbmdlRW50aXJlU2VyaWVzJykgOiB0KCdkZWxldGVFbnRpcmVTZXJpZXMnKX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PERpYWxvZ0Zvb3Rlcj5cblx0XHRcdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uQ2xvc2V9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdFx0XHR7dCgnY2FuY2VsJyl9XG5cdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdDwvRGlhbG9nPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgRHJhZ0VuZEV2ZW50IH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgZ2V0VXBkYXRlZEV2ZW50ID0gKFxuXHRldmVudDogRHJhZ0VuZEV2ZW50LFxuXHRhY3RpdmVFdmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGxcbikgPT4ge1xuXHRjb25zdCB7IGFjdGl2ZSwgb3ZlciB9ID0gZXZlbnRcblxuXHRpZiAoIWFjdGl2ZSB8fCAhb3ZlciB8fCAhYWN0aXZlRXZlbnQpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgaXNUaW1lQ2VsbCA9IG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJ1xuXHRjb25zdCB7IHJlc291cmNlSWQsIGFsbERheSB9ID0gb3Zlci5kYXRhLmN1cnJlbnQgfHwge31cblx0bGV0IG5ld1N0YXJ0XG5cblx0aWYgKGlzVGltZUNlbGwpIHtcblx0XHRjb25zdCB7IGRhdGUsIGhvdXIgPSAwLCBtaW51dGUgPSAwIH0gPSBvdmVyLmRhdGEuY3VycmVudFxuXG5cdFx0Ly8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSkuaG91cihob3VyKS5taW51dGUobWludXRlKVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IHsgZGF0ZSB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuXHRcdG5ld1N0YXJ0ID0gZGF5anMoZGF0ZSlcblx0fVxuXG5cdGNvbnN0IGV2ZW50RHVyYXRpb24gPSBhY3RpdmVFdmVudC5lbmQuZGlmZihhY3RpdmVFdmVudC5zdGFydCwgJ3NlY29uZCcpXG5cblx0Ly8gQ3JlYXRlIG5ldyBlbmQgdGltZSBieSBhZGRpbmcgdGhlIG9yaWdpbmFsIGR1cmF0aW9uXG5cdGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZXZlbnREdXJhdGlvbiwgJ3NlY29uZCcpXG5cblx0aWYgKG5ld0VuZC5pc1NhbWUobmV3RW5kLnN0YXJ0T2YoJ2RheScpKSkge1xuXHRcdC8vIElmIHRoZSBuZXcgZW5kIHRpbWUgaXMgYXQgbWlkbmlnaHQsIHNldCBpdCB0byAyNCBob3VycyBvZiBwYXJ0aWFsIGRheVxuXHRcdG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG5cdH1cblxuXHQvLyBVcGRhdGUgdGhlIGV2ZW50IHdpdGggbmV3IHRpbWVzIGFuZCByZXNvdXJjZSBpZiBjaGFuZ2VkXG5cdGNvbnN0IHVwZGF0ZXMgPSB7XG5cdFx0c3RhcnQ6IG5ld1N0YXJ0LFxuXHRcdGVuZDogbmV3RW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5OiBpc1RpbWVDZWxsID8gZmFsc2UgOiAoYWxsRGF5ID8/IGFjdGl2ZUV2ZW50LmFsbERheSksXG5cdH1cblx0cmV0dXJuIHsgYWN0aXZlRXZlbnQsIHVwZGF0ZXMgfVxufVxuIiwKICAgICJpbXBvcnQgeyBEcmFnT3ZlcmxheSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vdHlwZXMnXG5cbmludGVyZmFjZSBFdmVudERyYWdPdmVybGF5UHJvcHMge1xuXHRyZWY6IFJlYWN0LlJlZjx7IHNldEFjdGl2ZUV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWQgfT5cbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50RHJhZ092ZXJsYXk6IFJlYWN0LkZDPEV2ZW50RHJhZ092ZXJsYXlQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuXHRjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IHVzZVN0YXRlPENhbGVuZGFyRXZlbnQ+KG51bGwpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0c2V0QWN0aXZlRXZlbnQsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuXHRcdFx0e2FjdGl2ZUV2ZW50ICYmIChcblx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWIgdHJ1bmNhdGUgcm91bmRlZCBiZy1hbWJlci0yMDAgcC0yIHRleHQtWzEwcHhdIHNoYWRvdy1sZyBzbTp0ZXh0LXhzIHctMjAnLFxuXHRcdFx0XHRcdFx0YWN0aXZlRXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG5cdFx0XHRcdFx0XHRhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e2FjdGl2ZUV2ZW50Py50aXRsZX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvRHJhZ092ZXJsYXk+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2hlY2tib3gnXG5pbXBvcnQgeyBEYXRlUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyJ1xuaW1wb3J0IHtcblx0RGlhbG9nLFxuXHREaWFsb2dDb250ZW50LFxuXHREaWFsb2dEZXNjcmlwdGlvbixcblx0RGlhbG9nRm9vdGVyLFxuXHREaWFsb2dIZWFkZXIsXG5cdERpYWxvZ1RpdGxlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGlhbG9nJ1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvaW5wdXQnXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9sYWJlbCdcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyBUaW1lUGlja2VyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3RpbWUtcGlja2VyJ1xuaW1wb3J0IHsgaXNCdXNpbmVzc0RheSB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQge1xuXHRidWlsZERhdGVUaW1lLFxuXHRidWlsZEVuZERhdGVUaW1lLFxuXHRnZXRUaW1lQ29uc3RyYWludHMsXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvZXZlbnQtZm9ybS11dGlscydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IGlzUmVjdXJyaW5nRXZlbnQgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuY29uc3QgQ09MT1JfTkFNRVMgPSBbXG5cdCdibHVlJyxcblx0J2dyZWVuJyxcblx0J3B1cnBsZScsXG5cdCdyZWQnLFxuXHQneWVsbG93Jyxcblx0J3BpbmsnLFxuXHQnaW5kaWdvJyxcblx0J2FtYmVyJyxcblx0J2VtZXJhbGQnLFxuXHQnc2t5Jyxcblx0J3Zpb2xldCcsXG5cdCdyb3NlJyxcblx0J3RlYWwnLFxuXHQnb3JhbmdlJyxcbl0gYXMgY29uc3RcblxuY29uc3QgQ09MT1JfT1BUSU9OUyA9IENPTE9SX05BTUVTLm1hcCgoY29sb3IpID0+ICh7XG5cdHZhbHVlOiBgYmctJHtjb2xvcn0tMTAwIHRleHQtJHtjb2xvcn0tODAwYCxcblx0bGFiZWw6IGNvbG9yLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY29sb3Iuc2xpY2UoMSksXG59KSlcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEZvcm1Qcm9wcyB7XG5cdG9wZW4/OiBib29sZWFuXG5cdHNlbGVjdGVkRXZlbnQ/OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuXHRvbkFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvblVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkRlbGV0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkNsb3NlOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCBjb25zdCBFdmVudEZvcm06IFJlYWN0LkZDPEV2ZW50Rm9ybVByb3BzPiA9ICh7XG5cdHNlbGVjdGVkRXZlbnQsXG5cdG9uQ2xvc2UsXG5cdG9uVXBkYXRlLFxuXHRvbkRlbGV0ZSxcblx0b25BZGQsXG59KSA9PiB7XG5cdGNvbnN0IHtcblx0XHRkaWFsb2dTdGF0ZSxcblx0XHRvcGVuRWRpdERpYWxvZyxcblx0XHRvcGVuRGVsZXRlRGlhbG9nLFxuXHRcdGNsb3NlRGlhbG9nLFxuXHRcdGhhbmRsZUNvbmZpcm0sXG5cdH0gPSB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25DbG9zZSlcblxuXHRjb25zdCB7IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCwgdCwgYnVzaW5lc3NIb3VycywgdGltZUZvcm1hdCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHRcdGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY29udGV4dC5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0XHR0OiBjb250ZXh0LnQsXG5cdFx0XHRidXNpbmVzc0hvdXJzOiBjb250ZXh0LmJ1c2luZXNzSG91cnMsXG5cdFx0XHR0aW1lRm9ybWF0OiBjb250ZXh0LnRpbWVGb3JtYXQsXG5cdFx0fSkpXG5cblx0Y29uc3Qgc3RhcnQgPSBzZWxlY3RlZEV2ZW50Py5zdGFydCA/PyBkYXlqcygpXG5cdGNvbnN0IGVuZCA9IHNlbGVjdGVkRXZlbnQ/LmVuZCA/PyBkYXlqcygpLmFkZCgxLCAnaG91cicpXG5cblx0Ly8gRmluZCBwYXJlbnQgZXZlbnQgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudCBpbnN0YW5jZVxuXHRjb25zdCBwYXJlbnRFdmVudCA9IHNlbGVjdGVkRXZlbnRcblx0XHQ/IGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KVxuXHRcdDogbnVsbFxuXG5cdC8vIEZvcm0gc3RhdGVcblx0Y29uc3QgW3N0YXJ0RGF0ZSwgc2V0U3RhcnREYXRlXSA9IHVzZVN0YXRlKHN0YXJ0LnRvRGF0ZSgpKVxuXHRjb25zdCBbZW5kRGF0ZSwgc2V0RW5kRGF0ZV0gPSB1c2VTdGF0ZShlbmQudG9EYXRlKCkpXG5cdGNvbnN0IFtpc0FsbERheSwgc2V0SXNBbGxEYXldID0gdXNlU3RhdGUoc2VsZWN0ZWRFdmVudD8uYWxsRGF5IHx8IGZhbHNlKVxuXHRjb25zdCBbc2VsZWN0ZWRDb2xvciwgc2V0U2VsZWN0ZWRDb2xvcl0gPSB1c2VTdGF0ZShcblx0XHRzZWxlY3RlZEV2ZW50Py5jb2xvciB8fCBDT0xPUl9PUFRJT05TWzBdLnZhbHVlXG5cdClcblxuXHQvLyBUaW1lIHN0YXRlXG5cdGNvbnN0IFtzdGFydFRpbWUsIHNldFN0YXJ0VGltZV0gPSB1c2VTdGF0ZShzdGFydC5mb3JtYXQoJ0hIOm1tJykpXG5cdGNvbnN0IFtlbmRUaW1lLCBzZXRFbmRUaW1lXSA9IHVzZVN0YXRlKGVuZC5mb3JtYXQoJ0hIOm1tJykpXG5cblx0Ly8gSW5pdGlhbGl6ZSBmb3JtIHZhbHVlcyBmcm9tIHNlbGVjdGVkIGV2ZW50IG9yIGRlZmF1bHRzXG5cdGNvbnN0IFtmb3JtVmFsdWVzLCBzZXRGb3JtVmFsdWVzXSA9IHVzZVN0YXRlKHtcblx0XHR0aXRsZTogc2VsZWN0ZWRFdmVudD8udGl0bGUgfHwgJycsXG5cdFx0ZGVzY3JpcHRpb246IHNlbGVjdGVkRXZlbnQ/LmRlc2NyaXB0aW9uIHx8ICcnLFxuXHRcdGxvY2F0aW9uOiBzZWxlY3RlZEV2ZW50Py5sb2NhdGlvbiB8fCAnJyxcblx0fSlcblxuXHQvLyBSZWN1cnJlbmNlIHN0YXRlIC0gcHVsbCBSUlVMRSBmcm9tIHBhcmVudCBpZiB0aGlzIGlzIGFuIGluc3RhbmNlXG5cdGNvbnN0IFtycnVsZSwgc2V0UnJ1bGVdID0gdXNlU3RhdGU8UlJ1bGVPcHRpb25zIHwgbnVsbD4oKCkgPT4ge1xuXHRcdGNvbnN0IGV2ZW50UnJ1bGUgPSBzZWxlY3RlZEV2ZW50Py5ycnVsZSB8fCBwYXJlbnRFdmVudD8ucnJ1bGVcblx0XHRyZXR1cm4gZXZlbnRScnVsZSB8fCBudWxsXG5cdH0pXG5cblx0Ly8gQ3JlYXRlIHdyYXBwZXIgZnVuY3Rpb25zIHRvIGZpeCBUeXBlU2NyaXB0IGVycm9ycyB3aXRoIERhdGVQaWNrZXJcblx0Y29uc3QgaGFuZGxlU3RhcnREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRTdGFydERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0FmdGVyKGRheWpzKGVuZERhdGUpKSkge1xuXHRcdFx0c2V0RW5kRGF0ZShkYXRlKVxuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdHNldEVuZERhdGUoZGF0ZSlcblx0XHRpZiAoZGF0ZSAmJiBkYXlqcyhkYXRlKS5pc0JlZm9yZShkYXlqcyhzdGFydERhdGUpKSkge1xuXHRcdFx0c2V0U3RhcnREYXRlKGRhdGUpXG5cdFx0fVxuXHR9XG5cblx0Ly8gVGltZSB2YWxpZGF0aW9uIGhhbmRsZXJzIC0gb25seSB2YWxpZGF0ZSB3aGVuIGRhdGVzIGFyZSB0aGUgc2FtZVxuXHRjb25zdCBoYW5kbGVTdGFydFRpbWVDaGFuZ2UgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0c2V0U3RhcnRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPiBlbmRUaW1lKSB7XG5cdFx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlRW5kVGltZUNoYW5nZSA9ICh0aW1lOiBzdHJpbmcpID0+IHtcblx0XHRzZXRFbmRUaW1lKHRpbWUpXG5cdFx0Ly8gT25seSB2YWxpZGF0ZSBpZiBzYW1lIGRheVxuXHRcdGlmIChkYXlqcyhzdGFydERhdGUpLmlzU2FtZShkYXlqcyhlbmREYXRlKSwgJ2RheScpICYmIHRpbWUgPCBzdGFydFRpbWUpIHtcblx0XHRcdHNldFN0YXJ0VGltZSh0aW1lKVxuXHRcdH1cblx0fVxuXG5cdC8vIFVwZGF0ZSBmb3JtIHZhbHVlcyB3aGVuIGlucHV0IGNoYW5nZXNcblx0Y29uc3QgaGFuZGxlSW5wdXRDaGFuZ2UgPSAoXG5cdFx0ZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG5cdCkgPT4ge1xuXHRcdGNvbnN0IHsgbmFtZSwgdmFsdWUgfSA9IGUudGFyZ2V0XG5cdFx0c2V0Rm9ybVZhbHVlcygocHJldikgPT4gKHsgLi4ucHJldiwgW25hbWVdOiB2YWx1ZSB9KSlcblx0fVxuXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0Ly8gUmVzZXQgZW5kIHRpbWUgd2hlbiBhbGwgZGF5IGlzIHRvZ2dsZWQgdG8gb25cblx0XHRpZiAoaXNBbGxEYXkpIHtcblx0XHRcdHNldEVuZFRpbWUoJzIzOjU5Jylcblx0XHR9XG5cdH0sIFtpc0FsbERheV0pXG5cblx0Y29uc3QgaGFuZGxlU3VibWl0ID0gKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuXHRcdGUucHJldmVudERlZmF1bHQoKVxuXG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdGNvbnN0IGVuZERhdGVUaW1lID0gYnVpbGRFbmREYXRlVGltZShlbmREYXRlLCBlbmRUaW1lLCBpc0FsbERheSlcblxuXHRcdGNvbnN0IGV2ZW50RGF0YTogQ2FsZW5kYXJFdmVudCA9IHtcblx0XHRcdGlkOiBzZWxlY3RlZEV2ZW50Py5pZCB8fCBkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKSxcblx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUsXG5cdFx0XHRlbmQ6IGVuZERhdGVUaW1lLFxuXHRcdFx0cmVzb3VyY2VJZDogc2VsZWN0ZWRFdmVudD8ucmVzb3VyY2VJZCxcblx0XHRcdGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuXHRcdFx0bG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG5cdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0Y29sb3I6IHNlbGVjdGVkQ29sb3IsXG5cdFx0XHRycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuXHRcdH1cblxuXHRcdGlmIChzZWxlY3RlZEV2ZW50Py5pZCAmJiBpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG5cdFx0XHRvcGVuRWRpdERpYWxvZyhzZWxlY3RlZEV2ZW50LCB7XG5cdFx0XHRcdHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuXHRcdFx0XHRzdGFydDogc3RhcnREYXRlVGltZSxcblx0XHRcdFx0ZW5kOiBlbmREYXRlVGltZSxcblx0XHRcdFx0ZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG5cdFx0XHRcdGxvY2F0aW9uOiBmb3JtVmFsdWVzLmxvY2F0aW9uLFxuXHRcdFx0XHRhbGxEYXk6IGlzQWxsRGF5LFxuXHRcdFx0XHRjb2xvcjogc2VsZWN0ZWRDb2xvcixcblx0XHRcdFx0cnJ1bGU6IHJydWxlIHx8IHVuZGVmaW5lZCxcblx0XHRcdH0pXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHRpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcblx0XHRcdG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvbkFkZD8uKGV2ZW50RGF0YSlcblx0XHR9XG5cdFx0b25DbG9zZSgpXG5cdH1cblxuXHRjb25zdCBoYW5kbGVEZWxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGVjdGVkRXZlbnQ/LmlkKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50XG5cdFx0XHRpZiAoaXNSZWN1cnJpbmdFdmVudChzZWxlY3RlZEV2ZW50KSkge1xuXHRcdFx0XHQvLyBTaG93IHJlY3VycmluZyBldmVudCBkZWxldGUgZGlhbG9nXG5cdFx0XHRcdG9wZW5EZWxldGVEaWFsb2coc2VsZWN0ZWRFdmVudClcblx0XHRcdFx0cmV0dXJuIC8vIERvbid0IGNsb3NlIHRoZSBmb3JtIHlldCwgbGV0IHRoZSBkaWFsb2cgaGFuZGxlIGl0XG5cdFx0XHR9XG5cdFx0XHRvbkRlbGV0ZT8uKHNlbGVjdGVkRXZlbnQpXG5cdFx0XHRvbkNsb3NlKClcblx0XHR9XG5cdH1cblxuXHRjb25zdCBoYW5kbGVSUnVsZUNoYW5nZSA9IChuZXdSUnVsZTogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghbmV3UlJ1bGUpIHtcblx0XHRcdHNldFJydWxlKG51bGwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0Y29uc3Qgc3RhcnREYXRlVGltZSA9IGJ1aWxkRGF0ZVRpbWUoc3RhcnREYXRlLCBzdGFydFRpbWUsIGlzQWxsRGF5KVxuXHRcdHNldFJydWxlKHsgLi4ubmV3UlJ1bGUsIGR0c3RhcnQ6IHN0YXJ0RGF0ZVRpbWUudG9EYXRlKCkgfSlcblx0fVxuXG5cdGNvbnN0IGRpc2FibGVkRGF0ZU1hdGNoZXIgPSBidXNpbmVzc0hvdXJzXG5cdFx0PyAoZGF0ZTogRGF0ZSkgPT4gIWlzQnVzaW5lc3NEYXkoZGF5anMoZGF0ZSksIGJ1c2luZXNzSG91cnMpXG5cdFx0OiB1bmRlZmluZWRcblxuXHRjb25zdCBzdGFydENvbnN0cmFpbnRzID0gZ2V0VGltZUNvbnN0cmFpbnRzKHN0YXJ0RGF0ZSwgYnVzaW5lc3NIb3Vycylcblx0Y29uc3QgZW5kQ29uc3RyYWludHMgPSBnZXRUaW1lQ29uc3RyYWludHMoZW5kRGF0ZSwgYnVzaW5lc3NIb3VycylcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RGlhbG9nIG9uT3BlbkNoYW5nZT17b25DbG9zZX0gb3Blbj17dHJ1ZX0+XG5cdFx0XHRcdDxEaWFsb2dDb250ZW50IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1bOTB2aF0gdy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02IG92ZXJmbG93LWhpZGRlbiBnYXAtMFwiPlxuXHRcdFx0XHRcdDxEaWFsb2dIZWFkZXIgY2xhc3NOYW1lPVwibWItMiBzbTptYi00IHNocmluay0wXCI+XG5cdFx0XHRcdFx0XHQ8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50JykgOiB0KCdjcmVhdGVFdmVudCcpfVxuXHRcdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkID8gdCgnZWRpdEV2ZW50RGV0YWlscycpIDogdCgnYWRkTmV3RXZlbnQnKX1cblx0XHRcdFx0XHRcdDwvRGlhbG9nRGVzY3JpcHRpb24+XG5cdFx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cblx0XHRcdFx0XHQ8Zm9ybVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgbWluLWgtMFwiXG5cdFx0XHRcdFx0XHRvblN1Ym1pdD17aGFuZGxlU3VibWl0fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxTY3JvbGxBcmVhIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4taC0wXCI+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBzbTpnYXAtNCBwLTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwidGl0bGVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3RpdGxlJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwidGl0bGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudFRpdGxlUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWRcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMudGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCIgaHRtbEZvcj1cImRlc2NyaXB0aW9uXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdkZXNjcmlwdGlvbicpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cImRlc2NyaXB0aW9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dCgnZXZlbnREZXNjcmlwdGlvblBsYWNlaG9sZGVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtmb3JtVmFsdWVzLmRlc2NyaXB0aW9ufVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17aXNBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwiYWxsRGF5XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGVja2VkQ2hhbmdlPXsoY2hlY2tlZCkgPT4gc2V0SXNBbGxEYXkoY2hlY2tlZCA9PT0gdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiIGh0bWxGb3I9XCJhbGxEYXlcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2FsbERheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtMiBnYXAtMiBzbTpnYXAtNFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCdzdGFydERhdGUnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PERhdGVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU9uU2VsZWN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17c3RhcnREYXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZERhdGVNYXRjaGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXtoYW5kbGVTdGFydERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnZW5kRGF0ZScpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxEYXRlUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibXQtMVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VPblNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGU9e2VuZERhdGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlzYWJsZWQ9e2Rpc2FibGVkRGF0ZU1hdGNoZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdFx0XHRcdHshaXNBbGxEYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ3N0YXJ0VGltZScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRpbWVQaWNrZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cIm10LTEgaC04IHRleHQtc20gc206aC05XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heFRpbWU9e3N0YXJ0Q29uc3RyYWludHMubWF4fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWluVGltZT17c3RhcnRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwic3RhcnQtdGltZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlU3RhcnRUaW1lQ2hhbmdlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGltZUZvcm1hdD17dGltZUZvcm1hdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtzdGFydFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2VuZFRpbWUnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxUaW1lUGlja2VyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJtdC0xIGgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhUaW1lPXtlbmRDb25zdHJhaW50cy5tYXh9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaW5UaW1lPXtlbmRDb25zdHJhaW50cy5taW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZW5kLXRpbWVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e2hhbmRsZUVuZFRpbWVDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aW1lRm9ybWF0PXt0aW1lRm9ybWF0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2VuZFRpbWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQpfVxuXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e3QoJ2NvbG9yJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e0NPTE9SX09QVElPTlMubWFwKChjb2xvcikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtbGFiZWw9e2NvbG9yLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YCR7Y29sb3IudmFsdWV9IGgtNiB3LTYgcm91bmRlZC1mdWxsIHNtOmgtOCBzbTp3LThgLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3RlZENvbG9yID09PSBjb2xvci52YWx1ZSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyaW5nLTIgcmluZy1ibGFjayByaW5nLW9mZnNldC0xIHNtOnJpbmctb2Zmc2V0LTInXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2xvci52YWx1ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIiBodG1sRm9yPVwibG9jYXRpb25cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2xvY2F0aW9uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0PElucHV0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwibG9jYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPXt0KCdldmVudExvY2F0aW9uUGxhY2Vob2xkZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2Zvcm1WYWx1ZXMubG9jYXRpb259XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdFx0XHRcdFx0ey8qIFJlY3VycmVuY2UgU2VjdGlvbiAqL31cblx0XHRcdFx0XHRcdFx0XHQ8UmVjdXJyZW5jZUVkaXRvciBvbkNoYW5nZT17aGFuZGxlUlJ1bGVDaGFuZ2V9IHZhbHVlPXtycnVsZX0gLz5cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cblx0XHRcdFx0XHRcdDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtNCBzaHJpbmstMCBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206ZmxleC1yb3cgc206Z2FwLTBcIj5cblx0XHRcdFx0XHRcdFx0e3NlbGVjdGVkRXZlbnQ/LmlkICYmIChcblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgc206bXItYXV0byBzbTp3LWF1dG9cIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17aGFuZGxlRGVsZXRlfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImRlc3RydWN0aXZlXCJcblx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgnZGVsZXRlJyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgZ2FwLTIgc206dy1hdXRvXCI+XG5cdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIHNtOmZsZXgtbm9uZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXtvbkNsb3NlfVxuXHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHt0KCdjYW5jZWwnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIiB0eXBlPVwic3VibWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCd1cGRhdGUnKSA6IHQoJ2NyZWF0ZScpfVxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvRGlhbG9nRm9vdGVyPlxuXHRcdFx0XHRcdDwvZm9ybT5cblx0XHRcdFx0PC9EaWFsb2dDb250ZW50PlxuXHRcdFx0PC9EaWFsb2c+XG5cblx0XHRcdHsvKiBSZWN1cnJpbmcgRXZlbnQgRWRpdCBEaWFsb2cgKi99XG5cdFx0XHQ8UmVjdXJyZW5jZUVkaXREaWFsb2dcblx0XHRcdFx0ZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuXHRcdFx0XHRpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cblx0XHRcdFx0b25DbG9zZT17Y2xvc2VEaWFsb2d9XG5cdFx0XHRcdG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cblx0XHRcdFx0b3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cblx0XHRcdC8+XG5cdFx0PC8+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgQ2hlY2tib3hQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LWNoZWNrYm94J1xuaW1wb3J0IHsgQ2hlY2tJY29uIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcblx0cmV0dXJuIChcblx0XHQ8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3Jcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG5cdFx0XHRcdGRhdGEtc2xvdD1cImNoZWNrYm94LWluZGljYXRvclwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuXHRcdFx0PC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG5cdFx0PC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuXHQpXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgTWF0Y2hlciB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHsgQ2FsZW5kYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvY2FsZW5kYXInXG5pbXBvcnQge1xuXHRQb3BvdmVyLFxuXHRQb3BvdmVyQ29udGVudCxcblx0UG9wb3ZlclRyaWdnZXIsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9wb3BvdmVyJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIERhdGVQaWNrZXJQcm9wcyB7XG5cdGRhdGU6IERhdGUgfCB1bmRlZmluZWRcblx0b25DaGFuZ2U/OiAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4gdm9pZFxuXHRsYWJlbD86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcblx0Y2xvc2VPblNlbGVjdD86IGJvb2xlYW5cblx0ZGlzYWJsZWQ/OiBNYXRjaGVyIHwgTWF0Y2hlcltdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRlUGlja2VyKHtcblx0ZGF0ZSxcblx0Y2xvc2VPblNlbGVjdCxcblx0b25DaGFuZ2UsXG5cdGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcblx0Y2xhc3NOYW1lLFxuXHRkaXNhYmxlZCxcbn06IERhdGVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBwb3BPdmVyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcblx0Y29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPERhdGUgfCB1bmRlZmluZWQ+KGRhdGUpXG5cblx0Ly8gU3luYyBkYXRlIHN0YXRlIHdpdGggZGF0ZSBwcm9wXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0c2V0U2VsZWN0ZWREYXRlKGRhdGUpXG5cdH0sIFtkYXRlXSlcblxuXHRjb25zdCBoYW5kbGVEYXRlU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRzZXRTZWxlY3RlZERhdGUoZGF0ZSlcblx0XHRpZiAoY2xvc2VPblNlbGVjdCkge1xuXHRcdFx0cG9wT3ZlclJlZi5jdXJyZW50Py5jbGljaygpXG5cdFx0fVxuXHRcdG9uQ2hhbmdlPy4oZGF0ZSlcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG5cdFx0XHQ8UG9wb3Zlcj5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2RhdGEtW2VtcHR5PXRydWVdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCB3LWZ1bGwganVzdGlmeS1zdGFydCB0ZXh0LWxlZnQgZm9udC1ub3JtYWwnXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0ZGF0YS1lbXB0eT17IWRhdGV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PENhbGVuZGFySWNvbiAvPlxuXHRcdFx0XHRcdFx0e3NlbGVjdGVkRGF0ZSA/IChcblx0XHRcdFx0XHRcdFx0ZGF5anMoc2VsZWN0ZWREYXRlKS5mb3JtYXQoJ01NTSBELCBZWVlZJylcblx0XHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHRcdDxzcGFuPntsYWJlbH08L3NwYW4+XG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJzdGFydFwiIGNsYXNzTmFtZT1cInctYXV0byBwLTBcIj5cblx0XHRcdFx0XHQ8UG9wb3ZlckNsb3NlIHJlZj17cG9wT3ZlclJlZn0gLz5cblx0XHRcdFx0XHQ8Q2FsZW5kYXJcblx0XHRcdFx0XHRcdGNhcHRpb25MYXlvdXQ9XCJkcm9wZG93blwiXG5cdFx0XHRcdFx0XHRkZWZhdWx0TW9udGg9e3NlbGVjdGVkRGF0ZX1cblx0XHRcdFx0XHRcdGRpc2FibGVkPXtkaXNhYmxlZH1cblx0XHRcdFx0XHRcdG1vZGU9XCJzaW5nbGVcIlxuXHRcdFx0XHRcdFx0b25TZWxlY3Q9e2hhbmRsZURhdGVTZWxlY3R9XG5cdFx0XHRcdFx0XHRzZWxlY3RlZD17c2VsZWN0ZWREYXRlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHtcblx0Q2hldnJvbkRvd25JY29uLFxuXHRDaGV2cm9uTGVmdEljb24sXG5cdENoZXZyb25SaWdodEljb24sXG59IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhbGVuZGFyKHtcblx0Y2xhc3NOYW1lLFxuXHRjbGFzc05hbWVzLFxuXHRzaG93T3V0c2lkZURheXMgPSB0cnVlLFxuXHRjYXB0aW9uTGF5b3V0ID0gJ2xhYmVsJyxcblx0YnV0dG9uVmFyaWFudCA9ICdnaG9zdCcsXG5cdGZvcm1hdHRlcnMsXG5cdGNvbXBvbmVudHMsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGF5UGlja2VyPiAmIHtcblx0YnV0dG9uVmFyaWFudD86IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBCdXR0b24+Wyd2YXJpYW50J11cbn0pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0cmV0dXJuIChcblx0XHQ8RGF5UGlja2VyXG5cdFx0XHRjYXB0aW9uTGF5b3V0PXtjYXB0aW9uTGF5b3V0fVxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG5cdFx0XHRcdFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcblx0XHRcdFx0U3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0Y2xhc3NOYW1lcz17e1xuXHRcdFx0XHRyb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcblx0XHRcdFx0bW9udGhzOiBjbihcblx0XHRcdFx0XHQnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG5cdFx0XHRcdCksXG5cdFx0XHRcdG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG5cdFx0XHRcdG5hdjogY24oXG5cdFx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcblx0XHRcdFx0KSxcblx0XHRcdFx0YnV0dG9uX3ByZXZpb3VzOiBjbihcblx0XHRcdFx0XHRidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG5cdFx0XHRcdFx0J3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcblx0XHRcdFx0KSxcblx0XHRcdFx0YnV0dG9uX25leHQ6IGNuKFxuXHRcdFx0XHRcdGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcblx0XHRcdFx0XHQnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG5cdFx0XHRcdCksXG5cdFx0XHRcdG1vbnRoX2NhcHRpb246IGNuKFxuXHRcdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cblx0XHRcdFx0KSxcblx0XHRcdFx0ZHJvcGRvd25zOiBjbihcblx0XHRcdFx0XHQndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bl9yb290OiBjbihcblx0XHRcdFx0XHQncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkcm9wZG93bjogY24oXG5cdFx0XHRcdFx0J2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG5cdFx0XHRcdCksXG5cdFx0XHRcdGNhcHRpb25fbGFiZWw6IGNuKFxuXHRcdFx0XHRcdCdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG5cdFx0XHRcdFx0Y2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuXHRcdFx0XHRcdFx0PyAndGV4dC1zbSdcblx0XHRcdFx0XHRcdDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcblx0XHRcdFx0KSxcblx0XHRcdFx0dGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcblx0XHRcdFx0d2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuXHRcdFx0XHR3ZWVrZGF5OiBjbihcblx0XHRcdFx0XHQndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuXHRcdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0d2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcblx0XHRcdFx0d2Vla19udW1iZXJfaGVhZGVyOiBjbihcblx0XHRcdFx0XHQnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0d2Vla19udW1iZXI6IGNuKFxuXHRcdFx0XHRcdCd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0ZGF5OiBjbihcblx0XHRcdFx0XHQncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6bGFzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1yLW1kIGdyb3VwL2RheSBhc3BlY3Qtc3F1YXJlIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0XHRwcm9wcy5zaG93V2Vla051bWJlclxuXHRcdFx0XHRcdFx0PyAnWyY6bnRoLWNoaWxkKDIpW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLWwtbWQnXG5cdFx0XHRcdFx0XHQ6ICdbJjpmaXJzdC1jaGlsZFtkYXRhLXNlbGVjdGVkPXRydWVdX2J1dHRvbl06cm91bmRlZC1sLW1kJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0cmFuZ2Vfc3RhcnQ6IGNuKFxuXHRcdFx0XHRcdCdyb3VuZGVkLWwtbWQgYmctYWNjZW50Jyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9zdGFydFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRyYW5nZV9taWRkbGU6IGNuKCdyb3VuZGVkLW5vbmUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9taWRkbGUpLFxuXHRcdFx0XHRyYW5nZV9lbmQ6IGNuKCdyb3VuZGVkLXItbWQgYmctYWNjZW50JywgZGVmYXVsdENsYXNzTmFtZXMucmFuZ2VfZW5kKSxcblx0XHRcdFx0dG9kYXk6IGNuKFxuXHRcdFx0XHRcdCdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCByb3VuZGVkLW1kIGRhdGEtW3NlbGVjdGVkPXRydWVdOnJvdW5kZWQtbm9uZScsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMudG9kYXlcblx0XHRcdFx0KSxcblx0XHRcdFx0b3V0c2lkZTogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBhcmlhLXNlbGVjdGVkOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0ZGVmYXVsdENsYXNzTmFtZXMub3V0c2lkZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkaXNhYmxlZDogY24oXG5cdFx0XHRcdFx0J3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcblx0XHRcdFx0XHRkZWZhdWx0Q2xhc3NOYW1lcy5kaXNhYmxlZFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRoaWRkZW46IGNuKCdpbnZpc2libGUnLCBkZWZhdWx0Q2xhc3NOYW1lcy5oaWRkZW4pLFxuXHRcdFx0XHQuLi5jbGFzc05hbWVzLFxuXHRcdFx0fX1cblx0XHRcdGNvbXBvbmVudHM9e3tcblx0XHRcdFx0Um9vdDogKHsgY2xhc3NOYW1lLCByb290UmVmLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihjbGFzc05hbWUpfVxuXHRcdFx0XHRcdFx0XHRkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG5cdFx0XHRcdFx0XHRcdHJlZj17cm9vdFJlZn1cblx0XHRcdFx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENoZXZyb246ICh7IGNsYXNzTmFtZSwgb3JpZW50YXRpb24sIC4uLnByb3BzIH0pID0+IHtcblx0XHRcdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdsZWZ0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PENoZXZyb25MZWZ0SWNvbiBjbGFzc05hbWU9e2NuKCdzaXplLTQnLCBjbGFzc05hbWUpfSB7Li4ucHJvcHN9IC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG9yaWVudGF0aW9uID09PSAncmlnaHQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8Q2hldnJvblJpZ2h0SWNvblxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8Q2hldnJvbkRvd25JY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdERheUJ1dHRvbjogQ2FsZW5kYXJEYXlCdXR0b24sXG5cdFx0XHRcdFdlZWtOdW1iZXI6ICh7IGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDx0ZCB7Li4ucHJvcHN9PlxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggc2l6ZS0oLS1jZWxsLXNpemUpIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQ8L3RkPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSxcblx0XHRcdFx0Li4uY29tcG9uZW50cyxcblx0XHRcdH19XG5cdFx0XHRmb3JtYXR0ZXJzPXt7XG5cdFx0XHRcdGZvcm1hdE1vbnRoRHJvcGRvd246IChkYXRlKSA9PlxuXHRcdFx0XHRcdGRhdGUudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IG1vbnRoOiAnc2hvcnQnIH0pLFxuXHRcdFx0XHQuLi5mb3JtYXR0ZXJzLFxuXHRcdFx0fX1cblx0XHRcdHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FsZW5kYXJEYXlCdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdGRheSxcblx0bW9kaWZpZXJzLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERheUJ1dHRvbj4pIHtcblx0Y29uc3QgZGVmYXVsdENsYXNzTmFtZXMgPSBnZXREZWZhdWx0Q2xhc3NOYW1lcygpXG5cblx0Y29uc3QgcmVmID0gUmVhY3QudXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuXHRcdGlmIChtb2RpZmllcnMuZm9jdXNlZCkge1xuXHRcdFx0cmVmLmN1cnJlbnQ/LmZvY3VzKClcblx0XHR9XG5cdH0sIFttb2RpZmllcnMuZm9jdXNlZF0pXG5cblx0cmV0dXJuIChcblx0XHQ8QnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOmJnLXByaW1hcnkgZGF0YS1bc2VsZWN0ZWQtc2luZ2xlPXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpiZy1hY2NlbnQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6Ym9yZGVyLXJpbmcgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1yaW5nLzUwIGRhcms6aG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBmbGV4IGFzcGVjdC1zcXVhcmUgc2l6ZS1hdXRvIHctZnVsbCBtaW4tdy0oLS1jZWxsLXNpemUpIGZsZXgtY29sIGdhcC0xIGxlYWRpbmctbm9uZSBmb250LW5vcm1hbCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyZWxhdGl2ZSBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTp6LTEwIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJpbmctWzNweF0gZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2UtZW5kPXRydWVdOnJvdW5kZWQtci1tZCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06cm91bmRlZC1ub25lIGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnJvdW5kZWQtbWQgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1sLW1kIFsmPnNwYW5dOnRleHQteHMgWyY+c3Bhbl06b3BhY2l0eS03MCcsXG5cdFx0XHRcdGRlZmF1bHRDbGFzc05hbWVzLmRheSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1kYXk9e2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuXHRcdFx0ZGF0YS1yYW5nZS1lbmQ9e21vZGlmaWVycy5yYW5nZV9lbmR9XG5cdFx0XHRkYXRhLXJhbmdlLW1pZGRsZT17bW9kaWZpZXJzLnJhbmdlX21pZGRsZX1cblx0XHRcdGRhdGEtcmFuZ2Utc3RhcnQ9e21vZGlmaWVycy5yYW5nZV9zdGFydH1cblx0XHRcdGRhdGEtc2VsZWN0ZWQtc2luZ2xlPXtcblx0XHRcdFx0bW9kaWZpZXJzLnNlbGVjdGVkICYmXG5cdFx0XHRcdCFtb2RpZmllcnMucmFuZ2Vfc3RhcnQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9lbmQgJiZcblx0XHRcdFx0IW1vZGlmaWVycy5yYW5nZV9taWRkbGVcblx0XHRcdH1cblx0XHRcdHJlZj17cmVmfVxuXHRcdFx0c2l6ZT1cImljb25cIlxuXHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7IENhbGVuZGFyLCBDYWxlbmRhckRheUJ1dHRvbiB9XG4iLAogICAgImltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5pbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBQb3BvdmVyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5Sb290IGRhdGEtc2xvdD1cInBvcG92ZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJUcmlnZ2VyKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXI+KSB7XG5cdHJldHVybiA8UG9wb3ZlclByaW1pdGl2ZS5UcmlnZ2VyIGRhdGEtc2xvdD1cInBvcG92ZXItdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlckNvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGFsaWduID0gJ2NlbnRlcicsXG5cdHNpZGVPZmZzZXQgPSA0LFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQ29udGVudD4pIHtcblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Qb3J0YWw+XG5cdFx0XHQ8UG9wb3ZlclByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LTcyIG9yaWdpbi0oLS1yYWRpeC1wb3BvdmVyLWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgcm91bmRlZC1tZCBib3JkZXIgcC00IHNoYWRvdy1tZCBvdXRsaW5lLWhpZGRlbicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtc2xvdD1cInBvcG92ZXItY29udGVudFwiXG5cdFx0XHRcdHNpZGVPZmZzZXQ9e3NpZGVPZmZzZXR9XG5cdFx0XHRcdHsuLi5wcm9wc31cblx0XHRcdC8+XG5cdFx0PC9Qb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cblx0KVxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQW5jaG9yKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBQb3BvdmVyUHJpbWl0aXZlLkFuY2hvcj4pIHtcblx0cmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLkFuY2hvciBkYXRhLXNsb3Q9XCJwb3BvdmVyLWFuY2hvclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZXhwb3J0IHsgUG9wb3ZlciwgUG9wb3ZlclRyaWdnZXIsIFBvcG92ZXJDb250ZW50LCBQb3BvdmVyQW5jaG9yIH1cbiIsCiAgICAiaW1wb3J0IHR5cGUgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG5cdHJldHVybiAoXG5cdFx0PGlucHV0XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmlsZTp0ZXh0LWZvcmVncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHNlbGVjdGlvbjpiZy1wcmltYXJ5IHNlbGVjdGlvbjp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmJnLWlucHV0LzMwIGJvcmRlci1pbnB1dCBmbGV4IGgtOSB3LWZ1bGwgbWluLXctMCByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTEgdGV4dC1iYXNlIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZmlsZTppbmxpbmUtZmxleCBmaWxlOmgtNyBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LXNtIGZpbGU6Zm9udC1tZWRpdW0gZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBtZDp0ZXh0LXNtJyxcblx0XHRcdFx0J2ZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdJyxcblx0XHRcdFx0J2FyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImlucHV0XCJcblx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgImltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIExhYmVsKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiAoXG5cdFx0PExhYmVsUHJpbWl0aXZlLlJvb3Rcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwibGFiZWxcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZXhwb3J0IHsgTGFiZWwgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBTY3JvbGxBcmVhUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zY3JvbGwtYXJlYSdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcblx0ZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG5cdHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7XG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdHZpZXdQb3J0UHJvcHMsXG5cdC4uLnByb3BzXG59OiBTY3JvbGxBcmVhUHJvcHMpIHtcblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYVwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnRcblx0XHRcdFx0ey4uLnZpZXdQb3J0UHJvcHN9XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2ZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIHNpemUtZnVsbCByb3VuZGVkLVtpbmhlcml0XSB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGZvY3VzLXZpc2libGU6b3V0bGluZS0xJyxcblx0XHRcdFx0XHR2aWV3UG9ydFByb3BzPy5jbGFzc05hbWVcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuXHRcdFx0PlxuXHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuVmlld3BvcnQ+XG5cdFx0XHQ8U2Nyb2xsQmFyIC8+XG5cdFx0XHQ8U2Nyb2xsQXJlYVByaW1pdGl2ZS5Db3JuZXIgLz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuUm9vdD5cblx0KVxufVxuXG5mdW5jdGlvbiBTY3JvbGxCYXIoe1xuXHRjbGFzc05hbWUsXG5cdG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJyxcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTY3JvbGxBcmVhUHJpbWl0aXZlLlNjcm9sbEFyZWFTY3JvbGxiYXI+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcblx0XHRcdFx0b3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcblx0XHRcdFx0XHQnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50Jyxcblx0XHRcdFx0b3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuXHRcdFx0XHRcdCdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhLXNjcm9sbGJhclwiXG5cdFx0XHRvcmllbnRhdGlvbj17b3JpZW50YXRpb259XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVRodW1iXG5cdFx0XHRcdGNsYXNzTmFtZT1cImJnLWJvcmRlciByZWxhdGl2ZSBmbGV4LTEgcm91bmRlZC1mdWxsXCJcblx0XHRcdFx0ZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuXHRcdFx0Lz5cblx0XHQ8L1Njcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj5cblx0KVxufVxuXG5leHBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfVxuIiwKICAgICJpbXBvcnQgeyBDbG9jayB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2lucHV0J1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyIH0gZnJvbSAnQC9ob29rcy91c2UtYXV0b2NvbXBsZXRlLXRpbWVwaWNrZXInXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBUaW1lRm9ybWF0IH0gZnJvbSAnQC90eXBlcydcblxuY29uc3QgaGFuZGxlV2hlZWwgPSAoZTogUmVhY3QuV2hlZWxFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcblx0Ly8gUHJldmVudCBldmVudCBmcm9tIGJ1YmJsaW5nIHRvIHByZXZlbnQgUG9wb3ZlciBmcm9tIGNsb3Npbmdcblx0ZS5zdG9wUHJvcGFnYXRpb24oKVxufVxuXG5pbnRlcmZhY2UgVGltZVBpY2tlclByb3BzIHtcblx0dmFsdWU6IHN0cmluZ1xuXHRvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdHBsYWNlaG9sZGVyPzogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRkaXNhYmxlZD86IGJvb2xlYW5cblx0bmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVGltZVBpY2tlcih7XG5cdHZhbHVlLFxuXHRvbkNoYW5nZSxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRwbGFjZWhvbGRlciA9ICdTZWxlY3QgdGltZS4uLicsXG5cdGNsYXNzTmFtZSxcblx0ZGlzYWJsZWQgPSBmYWxzZSxcblx0bmFtZSxcbn06IFRpbWVQaWNrZXJQcm9wcykge1xuXHRjb25zdCBbb3Blbiwgc2V0T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblx0Y29uc3QgW3NlYXJjaCwgc2V0U2VhcmNoXSA9IHVzZVN0YXRlKCcnKVxuXHRjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXHRjb25zdCB0cmlnZ2VyUmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKVxuXHRjb25zdCBbdHJpZ2dlcldpZHRoLCBzZXRUcmlnZ2VyV2lkdGhdID0gdXNlU3RhdGU8bnVtYmVyPigwKVxuXG5cdGNvbnN0IHsgdGltZU9wdGlvbnMsIGZvcm1hdFRpbWUgfSA9IHVzZUF1dG9jb21wbGV0ZVRpbWVwaWNrZXIoe1xuXHRcdHRpbWVGb3JtYXQsXG5cdFx0bWluVGltZSxcblx0XHRtYXhUaW1lLFxuXHR9KVxuXG5cdC8vIEZpbHRlciB0aW1lIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoXG5cdGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRpbWVPcHRpb25zLmZpbHRlcigodGltZSkgPT4ge1xuXHRcdGNvbnN0IGZvcm1hdHRlZFRpbWUgPSBmb3JtYXRUaW1lKHRpbWUpXG5cdFx0cmV0dXJuIGZvcm1hdHRlZFRpbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSlcblx0fSlcblxuXHRjb25zdCBoYW5kbGVTZWxlY3QgPSAodGltZTogc3RyaW5nKSA9PiB7XG5cdFx0b25DaGFuZ2UodGltZSlcblx0XHRzZXRPcGVuKGZhbHNlKVxuXHRcdHNldFNlYXJjaCgnJylcblx0fVxuXG5cdC8vIE1lYXN1cmUgdHJpZ2dlciB3aWR0aCBhbmQgZm9jdXMgaW5wdXQgd2hlbiBwb3BvdmVyIG9wZW5zXG5cdHVzZUVmZmVjdCgoKSA9PiB7XG5cdFx0aWYgKG9wZW4pIHtcblx0XHRcdGlmICh0cmlnZ2VyUmVmLmN1cnJlbnQpIHtcblx0XHRcdFx0c2V0VHJpZ2dlcldpZHRoKHRyaWdnZXJSZWYuY3VycmVudC5vZmZzZXRXaWR0aClcblx0XHRcdH1cblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRpbnB1dFJlZi5jdXJyZW50Py5mb2N1cygpXG5cdFx0XHR9LCAwKVxuXHRcdH1cblx0fSwgW29wZW5dKVxuXG5cdGNvbnN0IGN1cnJlbnRUaW1lU3RyaW5nID0gdmFsdWUgPyBmb3JtYXRUaW1lKHZhbHVlKSA6IHBsYWNlaG9sZGVyXG5cblx0cmV0dXJuIChcblx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE9wZW59IG9wZW49e29wZW59PlxuXHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRhcmlhLWNvbnRyb2xzPVwidGltZS1waWNrZXItbGlzdGJveFwiXG5cdFx0XHRcdFx0YXJpYS1leHBhbmRlZD17b3Blbn1cblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCd3LWZ1bGwganVzdGlmeS1zdGFydCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B0aW1lLXBpY2tlci0ke25hbWV9YH1cblx0XHRcdFx0XHRkaXNhYmxlZD17ZGlzYWJsZWR9XG5cdFx0XHRcdFx0cmVmPXt0cmlnZ2VyUmVmfVxuXHRcdFx0XHRcdHJvbGU9XCJjb21ib2JveFwiXG5cdFx0XHRcdFx0dmFyaWFudD1cIm91dGxpbmVcIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PENsb2NrIGNsYXNzTmFtZT1cIm1yLTIgaC00IHctNFwiIC8+XG5cdFx0XHRcdFx0e2N1cnJlbnRUaW1lU3RyaW5nfVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvUG9wb3ZlclRyaWdnZXI+XG5cdFx0XHQ8UG9wb3ZlckNvbnRlbnRcblx0XHRcdFx0YWxpZ249XCJzdGFydFwiXG5cdFx0XHRcdGNsYXNzTmFtZT1cInAtMFwiXG5cdFx0XHRcdHN0eWxlPXt7IHdpZHRoOiB0cmlnZ2VyV2lkdGggfX1cblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTIgYm9yZGVyLWJcIj5cblx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaChlLnRhcmdldC52YWx1ZSl9XG5cdFx0XHRcdFx0XHRwbGFjZWhvbGRlcj1cIlNlYXJjaCB0aW1lLi4uXCJcblx0XHRcdFx0XHRcdHJlZj17aW5wdXRSZWZ9XG5cdFx0XHRcdFx0XHR2YWx1ZT17c2VhcmNofVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLVsyMDBweF1cIiBvbldoZWVsPXtoYW5kbGVXaGVlbH0+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwLTFcIj5cblx0XHRcdFx0XHRcdHtmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInB5LTYgdGV4dC1jZW50ZXIgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHROL0Fcblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpIDogKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJlZE9wdGlvbnMubWFwKCh0aW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGZvcm1hdFRpbWUodGltZSlcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc1NlbGVjdGVkID0gdGltZSA9PT0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdyZWxhdGl2ZSBmbGV4IHctZnVsbCBjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbSBweC0yIHB5LTEuNSB0ZXh0LXNtIG91dGxpbmUtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXNTZWxlY3RlZCAmJiAnYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQnXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17dGltZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KHRpbWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3RpbWVTdHJpbmd9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8L1Njcm9sbEFyZWE+XG5cdFx0XHQ8L1BvcG92ZXJDb250ZW50PlxuXHRcdDwvUG9wb3Zlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuXG5pbnRlcmZhY2UgVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzIHtcblx0dGltZUZvcm1hdD86IFRpbWVGb3JtYXRcblx0bWluVGltZT86IHN0cmluZ1xuXHRtYXhUaW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvY29tcGxldGVUaW1lcGlja2VyKHtcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0bWluVGltZSA9ICcwMDowMCcsXG5cdG1heFRpbWUgPSAnMjM6NDUnLFxufTogVXNlQXV0b2NvbXBsZXRlVGltZXBpY2tlclByb3BzKSB7XG5cdC8vIEdlbmVyYXRlIHRpbWUgb3B0aW9ucyAoMTUtbWludXRlIGludGVydmFscykgd2l0aGluIG1pbi9tYXggcmFuZ2Vcblx0Y29uc3QgdGltZU9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRjb25zdCB0aW1lczogc3RyaW5nW10gPSBbXVxuXHRcdGNvbnN0IFttaW5Ib3VyLCBtaW5NaW51dGVdID0gbWluVGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG5cdFx0Y29uc3QgW21heEhvdXIsIG1heE1pbnV0ZV0gPSBtYXhUaW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblxuXHRcdGNvbnN0IG1pblRvdGFsTWludXRlcyA9IG1pbkhvdXIgKiA2MCArIG1pbk1pbnV0ZVxuXHRcdGNvbnN0IG1heFRvdGFsTWludXRlcyA9IG1heEhvdXIgKiA2MCArIG1heE1pbnV0ZVxuXG5cdFx0Zm9yIChcblx0XHRcdGxldCB0b3RhbE1pbnV0ZXMgPSBtaW5Ub3RhbE1pbnV0ZXM7XG5cdFx0XHR0b3RhbE1pbnV0ZXMgPD0gbWF4VG90YWxNaW51dGVzO1xuXHRcdFx0dG90YWxNaW51dGVzICs9IDE1XG5cdFx0KSB7XG5cdFx0XHRjb25zdCBob3VycyA9IE1hdGguZmxvb3IodG90YWxNaW51dGVzIC8gNjApXG5cdFx0XHRjb25zdCBtaW51dGVzID0gdG90YWxNaW51dGVzICUgNjBcblxuXHRcdFx0Y29uc3QgdGltZVN0cmluZyA9IGAke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX1gXG5cdFx0XHR0aW1lcy5wdXNoKHRpbWVTdHJpbmcpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRpbWVzXG5cdH0sIFttaW5UaW1lLCBtYXhUaW1lXSlcblxuXHRjb25zdCBmb3JtYXRUaW1lID0gKHRpbWU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0XHRjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nXG5cdFx0Y29uc3QgZGlzcGxheUhvdXJzID0gaG91cnMgPT09IDAgPyAxMiA6IGhvdXJzID4gMTIgPyBob3VycyAtIDEyIDogaG91cnNcblxuXHRcdGlmICh0aW1lRm9ybWF0ID09PSAnMjQtaG91cicpIHtcblx0XHRcdHJldHVybiBgJHtob3Vycy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YFxuXHRcdH1cblxuXHRcdHJldHVybiBgJHtkaXNwbGF5SG91cnN9OiR7bWludXRlcy50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9ICR7cGVyaW9kfWBcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0dGltZU9wdGlvbnMsXG5cdFx0Zm9ybWF0VGltZSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMsIFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmNvbnN0IERBWV9UT19OVU1CRVI6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcblx0c3VuZGF5OiAwLFxuXHRtb25kYXk6IDEsXG5cdHR1ZXNkYXk6IDIsXG5cdHdlZG5lc2RheTogMyxcblx0dGh1cnNkYXk6IDQsXG5cdGZyaWRheTogNSxcblx0c2F0dXJkYXk6IDYsXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGFwcHJvcHJpYXRlIGJ1c2luZXNzIGhvdXJzIGNvbmZpZ3VyYXRpb24gZm9yIGEgZ2l2ZW4gZGF0ZS5cbiAqIElmIGJ1c2luZXNzSG91cnMgaXMgYW4gYXJyYXksIGZpbmRzIHRoZSBmaXJzdCBjb25maWcgdGhhdCBpbmNsdWRlcyB0aGUgZGF0ZSdzIGRheSBvZiB3ZWVrLlxuICogSWYgYnVzaW5lc3NIb3VycyBpcyBhIHNpbmdsZSBvYmplY3QsIHJldHVybnMgaXQgYXMtaXMuXG4gKlxuICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gZmluZCBidXNpbmVzcyBob3VycyBmb3JcbiAqIEBwYXJhbSBidXNpbmVzc0hvdXJzIFRoZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIChzaW5nbGUgb3IgYXJyYXkpXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hpbmcgQnVzaW5lc3NIb3VycyBjb25maWcgb3IgdW5kZWZpbmVkIGlmIG5vIG1hdGNoIGZvdW5kXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZSA9IChcblx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pOiBCdXNpbmVzc0hvdXJzIHwgdW5kZWZpbmVkID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZFxuXHR9XG5cblx0Ly8gSWYgc2luZ2xlIG9iamVjdCwgcmV0dXJuIGl0XG5cdGlmICghQXJyYXkuaXNBcnJheShidXNpbmVzc0hvdXJzKSkge1xuXHRcdHJldHVybiBidXNpbmVzc0hvdXJzXG5cdH1cblxuXHQvLyBJZiBhcnJheSwgZmluZCB0aGUgY29uZmlnIHRoYXQgYXBwbGllcyB0byB0aGlzIGRheVxuXHRjb25zdCBkYXlPZldlZWsgPSBkYXRlLmRheSgpXG5cdHJldHVybiBidXNpbmVzc0hvdXJzLmZpbmQoKGNvbmZpZykgPT4ge1xuXHRcdGlmICghY29uZmlnLmRheXNPZldlZWspIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0XHRyZXR1cm4gY29uZmlnLmRheXNPZldlZWsuc29tZSgoZCkgPT4gREFZX1RPX05VTUJFUltkXSA9PT0gZGF5T2ZXZWVrKVxuXHR9KVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHNwZWNpZmljIGRhdGUgaXMgYSBidXNpbmVzcyBkYXkuXG4gKlxuICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gY2hlY2tcbiAqIEBwYXJhbSBidXNpbmVzc0hvdXJzIFRoZSBidXNpbmVzcyBob3VycyBjb25maWd1cmF0aW9uIChzaW5nbGUgb3IgYXJyYXkpXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRlIGlzIGEgYnVzaW5lc3MgZGF5LCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQnVzaW5lc3NEYXkgPSAoXG5cdGRhdGU6IGRheWpzLkRheWpzLFxuXHRidXNpbmVzc0hvdXJzPzogQnVzaW5lc3NIb3VycyB8IEJ1c2luZXNzSG91cnNbXVxuKTogYm9vbGVhbiA9PiB7XG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHRjb25zdCBjb25maWcgPSBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZShkYXRlLCBidXNpbmVzc0hvdXJzKVxuXHRpZiAoIWNvbmZpZykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0Ly8gQ2hlY2sgZGF5IG9mIHdlZWtcblx0aWYgKGNvbmZpZy5kYXlzT2ZXZWVrKSB7XG5cdFx0cmV0dXJuIGNvbmZpZy5kYXlzT2ZXZWVrLnNvbWUoKGQpID0+IERBWV9UT19OVU1CRVJbZF0gPT09IGRhdGUuZGF5KCkpXG5cdH1cblxuXHRyZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElzQnVzaW5lc3NIb3VyT3B0aW9ucyB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGhvdXI/OiBudW1iZXJcblx0bWludXRlPzogbnVtYmVyXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgc3BlY2lmaWMgaG91ciBvbiBhIHNwZWNpZmljIGRhdGUgaXMgd2l0aGluIGJ1c2luZXNzIGhvdXJzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBjaGVja2luZyBidXNpbmVzcyBob3Vyc1xuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGltZSBpcyB3aXRoaW4gYnVzaW5lc3MgaG91cnMsIGZhbHNlIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgaXNCdXNpbmVzc0hvdXIgPSAoe1xuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUgPSAwLFxuXHRidXNpbmVzc0hvdXJzLFxufTogSXNCdXNpbmVzc0hvdXJPcHRpb25zKTogYm9vbGVhbiA9PiB7XG5cdC8vIEZpcnN0IGNoZWNrIGlmIGl0J3MgYSBidXNpbmVzcyBkYXlcblx0aWYgKCFpc0J1c2luZXNzRGF5KGRhdGUsIGJ1c2luZXNzSG91cnMpKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHQvLyBJZiBidXNpbmVzcyBob3VycyBhcmUgbm90IGNvbmZpZ3VyZWQsIGNvbnNpZGVyIGV2ZXJ5dGhpbmcgYXMgXCJidXNpbmVzcyBob3Vyc1wiXG5cdGlmICghYnVzaW5lc3NIb3Vycykge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblxuXHQvLyBJZiBob3VyIGlzIG5vdCBwcm92aWRlZCwgd2UgYXNzdW1lIHRoZSB1c2VyIG9ubHkgY2FyZXMgYWJvdXQgdGhlIGRheVxuXHQvLyBTaW5jZSB3ZSBhbHJlYWR5IHBhc3NlZCBpc0J1c2luZXNzRGF5IGNoZWNrLCB3ZSByZXR1cm4gdHJ1ZVxuXHRpZiAoaG91ciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIHRydWVcblx0fVxuXG5cdGNvbnN0IGNvbmZpZyA9IGdldEJ1c2luZXNzSG91cnNGb3JEYXRlKGRhdGUsIGJ1c2luZXNzSG91cnMpXG5cdGlmICghY29uZmlnKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHQvLyBDaGVjayB0aW1lXG5cdC8vIHN0YXJ0VGltZSBhbmQgZW5kVGltZSBhcmUgbnVtYmVycyAoMC0yNClcblx0Ly8gV2UgdHJlYXQgdGhlbSBhcyBleGFjdCBob3Vycy4gZS5nLiA5IG1lYW5zIDA5OjAwLlxuXHRjb25zdCBzdGFydEggPSBjb25maWcuc3RhcnRUaW1lID8/IDlcblx0Y29uc3QgZW5kSCA9IGNvbmZpZy5lbmRUaW1lID8/IDE3XG5cblx0Y29uc3QgY3VycmVudE1pbnV0ZXMgPSBob3VyICogNjAgKyBtaW51dGVcblx0Y29uc3Qgc3RhcnRNaW51dGVzID0gc3RhcnRIICogNjBcblx0Y29uc3QgZW5kTWludXRlcyA9IGVuZEggKiA2MFxuXG5cdGlmIChjdXJyZW50TWludXRlcyA8IHN0YXJ0TWludXRlcyB8fCBjdXJyZW50TWludXRlcyA+PSBlbmRNaW51dGVzKSB7XG5cdFx0cmV0dXJuIGZhbHNlXG5cdH1cblxuXHRyZXR1cm4gdHJ1ZVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1c2luZXNzSG91cnMgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQge1xuXHRnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZSxcblx0aXNCdXNpbmVzc0RheSxcbn0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci91dGlscy9idXNpbmVzcy1ob3VycydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IGJ1aWxkRGF0ZVRpbWUgPSAoXG5cdGRhdGU6IERhdGUsXG5cdHRpbWU6IHN0cmluZyxcblx0aXNBbGxEYXk6IGJvb2xlYW5cbik6IGRheWpzLkRheWpzID0+IHtcblx0Y29uc3QgW2hvdXJzLCBtaW51dGVzXSA9IHRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXHRjb25zdCBiYXNlID0gZGF5anMoZGF0ZSkuaG91cihob3VycykubWludXRlKG1pbnV0ZXMpXG5cdHJldHVybiBpc0FsbERheSA/IGJhc2UuaG91cigwKS5taW51dGUoMCkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEVuZERhdGVUaW1lID0gKFxuXHRkYXRlOiBEYXRlLFxuXHR0aW1lOiBzdHJpbmcsXG5cdGlzQWxsRGF5OiBib29sZWFuXG4pOiBkYXlqcy5EYXlqcyA9PiB7XG5cdGNvbnN0IFtob3VycywgbWludXRlc10gPSB0aW1lLnNwbGl0KCc6JykubWFwKE51bWJlcilcblx0Y29uc3QgYmFzZSA9IGRheWpzKGRhdGUpLmhvdXIoaG91cnMpLm1pbnV0ZShtaW51dGVzKVxuXHRyZXR1cm4gaXNBbGxEYXkgPyBiYXNlLmhvdXIoMjMpLm1pbnV0ZSg1OSkgOiBiYXNlXG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lQ29uc3RyYWludHMgPSAoXG5cdGRhdGU6IERhdGUsXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG4pID0+IHtcblx0aWYgKCFidXNpbmVzc0hvdXJzKSByZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cblx0Y29uc3QgZGF5anNEYXRlID0gZGF5anMoZGF0ZSlcblx0aWYgKCFpc0J1c2luZXNzRGF5KGRheWpzRGF0ZSwgYnVzaW5lc3NIb3VycykpIHtcblx0XHRyZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cdH1cblxuXHRjb25zdCBjb25maWcgPSBnZXRCdXNpbmVzc0hvdXJzRm9yRGF0ZShkYXlqc0RhdGUsIGJ1c2luZXNzSG91cnMpXG5cdGlmICghY29uZmlnKSByZXR1cm4geyBtaW46ICcwMDowMCcsIG1heDogJzIzOjU5JyB9XG5cblx0cmV0dXJuIHtcblx0XHRtaW46IGAkeyhjb25maWcuc3RhcnRUaW1lID8/IDkpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06MDBgLFxuXHRcdG1heDogYCR7KChjb25maWcuZW5kVGltZSA/PyAxNykgLSAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OjQ1YCxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgeyBDYXJkLCBDYXJkQ29udGVudCwgQ2FyZEhlYWRlciwgQ2FyZFRpdGxlIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhcmQnXG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9jaGVja2JveCdcbmltcG9ydCB7IERhdGVQaWNrZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvZGF0ZS1waWNrZXInXG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9pbnB1dCdcbmltcG9ydCB7IExhYmVsIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2xhYmVsJ1xuaW1wb3J0IHtcblx0U2VsZWN0LFxuXHRTZWxlY3RDb250ZW50LFxuXHRTZWxlY3RJdGVtLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3NlbGVjdCdcbmltcG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5jb25zdCBGUkVRX01BUCA9IHtcblx0REFJTFk6IFJSdWxlLkRBSUxZLFxuXHRXRUVLTFk6IFJSdWxlLldFRUtMWSxcblx0TU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcblx0WUVBUkxZOiBSUnVsZS5ZRUFSTFksXG59IGFzIGNvbnN0XG5jb25zdCBGUkVRX1RPX1NUUiA9IE9iamVjdC5mcm9tRW50cmllcyhcblx0T2JqZWN0LmVudHJpZXMoRlJFUV9NQVApLm1hcCgoW2ssIHZdKSA9PiBbdiwga10pXG4pIGFzIFJlY29yZDxudW1iZXIsIHN0cmluZz5cbmNvbnN0IFdFRUtEQVlTID0gW1xuXHRSUnVsZS5TVSxcblx0UlJ1bGUuTU8sXG5cdFJSdWxlLlRVLFxuXHRSUnVsZS5XRSxcblx0UlJ1bGUuVEgsXG5cdFJSdWxlLkZSLFxuXHRSUnVsZS5TQSxcbl1cbmNvbnN0IERBWV9LRVlTID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXVxuY29uc3QgcGFyc2VOdW0gPSAodjogc3RyaW5nKSA9PiBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQodiwgMTApIHx8IDEpXG5cbmNvbnN0IGdldERlc2NyaXB0aW9uID0gKFxuXHRvcHRzOiBSUnVsZU9wdGlvbnMgfCBudWxsLFxuXHR0OiAoazogc3RyaW5nKSA9PiBzdHJpbmdcbikgPT4ge1xuXHRpZiAoIW9wdHMpIHtcblx0XHRyZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG5cdH1cblx0dHJ5IHtcblx0XHRjb25zdCB0ZXh0ID0gbmV3IFJSdWxlKG9wdHMpLnRvVGV4dCgpXG5cdFx0cmV0dXJuIHRleHQgJiYgIXRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuXHRcdFx0PyB0ZXh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGV4dC5zbGljZSgxKVxuXHRcdFx0OiB0KCdjdXN0b21SZWN1cnJlbmNlJylcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuXHR9XG59XG5cbmludGVyZmFjZSBQcm9wcyB7XG5cdHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuXHRvbkNoYW5nZTogKHY6IFJSdWxlT3B0aW9ucyB8IG51bGwpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IFJlY3VycmVuY2VFZGl0b3I6IFJlYWN0LkZDPFByb3BzPiA9ICh7IHZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHsgdDogY3R4LnQgfSkpXG5cdGNvbnN0IFtzaG93LCBzZXRTaG93XSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cdGNvbnN0IFtvcHRzLCBzZXRPcHRzXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHZhbHVlIHx8IG51bGwpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IERBWV9LRVlTLm1hcCgoaywgaSkgPT4gKHsgdmFsdWU6IFdFRUtEQVlTW2ldLCBsYWJlbDogdChrKSB9KSksXG5cdFx0W3RdXG5cdClcblxuXHR1c2VFZmZlY3QoKCkgPT4ge1xuXHRcdHNldFNob3coISF2YWx1ZSlcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHNldE9wdHModmFsdWUpXG5cdFx0fVxuXHR9LCBbdmFsdWVdKVxuXG5cdGNvbnN0IHVwZGF0ZSA9ICh1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcblx0XHRpZiAoIW9wdHMpIHtcblx0XHRcdHJldHVyblxuXHRcdH1cblx0XHRjb25zdCBuZXh0ID0geyAuLi5vcHRzLCAuLi51IH1cblx0XHRzZXRPcHRzKG5leHQpXG5cdFx0b25DaGFuZ2Uoc2hvdyA/IG5leHQgOiBudWxsKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcblx0XHRzZXRTaG93KGNoZWNrZWQpXG5cdFx0aWYgKCFjaGVja2VkKSB7XG5cdFx0XHRvbkNoYW5nZShudWxsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGlmIChvcHRzKSB7XG5cdFx0XHRvbkNoYW5nZShvcHRzKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXHRcdGNvbnN0IGRlZiA9IHsgZnJlcTogUlJ1bGUuREFJTFksIGludGVydmFsOiAxIH0gYXMgUlJ1bGVPcHRpb25zXG5cdFx0c2V0T3B0cyhkZWYpXG5cdFx0b25DaGFuZ2UoZGVmKVxuXHR9XG5cblx0Y29uc3QgdG9nZ2xlRGF5ID0gKGk6IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IGN1cnIgPSAob3B0cz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cblx0XHRjb25zdCBkYXkgPSBXRUVLREFZU1tpXVxuXHRcdGNvbnN0IG5leHQgPSBjdXJyLmluY2x1ZGVzKGRheSlcblx0XHRcdD8gY3Vyci5maWx0ZXIoKGQpID0+IGQgIT09IGRheSlcblx0XHRcdDogWy4uLmN1cnIsIGRheV1cblx0XHR1cGRhdGUoeyBieXdlZWtkYXk6IG5leHQubGVuZ3RoID8gbmV4dCA6IHVuZGVmaW5lZCB9KVxuXHR9XG5cblx0Y29uc3Qgc2V0RW5kVHlwZSA9ICh0eXBlOiAnbmV2ZXInIHwgJ2NvdW50JyB8ICd1bnRpbCcpID0+IHtcblx0XHRjb25zdCB1OiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4gPSB7IGNvdW50OiB1bmRlZmluZWQsIHVudGlsOiB1bmRlZmluZWQgfVxuXHRcdGlmICh0eXBlID09PSAnY291bnQnKSB7XG5cdFx0XHR1LmNvdW50ID0gb3B0cz8uY291bnQgfHwgMVxuXHRcdH1cblx0XHRpZiAodHlwZSA9PT0gJ3VudGlsJykge1xuXHRcdFx0dS51bnRpbCA9IG9wdHM/LnVudGlsIHx8IGRheWpzKCkuYWRkKDEsICdtb250aCcpLmVuZE9mKCdkYXknKS50b0RhdGUoKVxuXHRcdH1cblx0XHR1cGRhdGUodSlcblx0fVxuXG5cdGNvbnN0IGVuZFR5cGUgPSBvcHRzPy51bnRpbCA/ICd1bnRpbCcgOiBvcHRzPy5jb3VudCA/ICdjb3VudCcgOiAnbmV2ZXInXG5cdGNvbnN0IGZyZXEgPSBGUkVRX1RPX1NUUltvcHRzPy5mcmVxID8/IFJSdWxlLkRBSUxZXSB8fCAnREFJTFknXG5cdGNvbnN0IGJ5d2Vla2RheSA9IEFycmF5LmlzQXJyYXkob3B0cz8uYnl3ZWVrZGF5KVxuXHRcdD8gb3B0cy5ieXdlZWtkYXlcblx0XHQ6IG9wdHM/LmJ5d2Vla2RheVxuXHRcdFx0PyBbb3B0cy5ieXdlZWtkYXldXG5cdFx0XHQ6IFtdXG5cblx0cmV0dXJuIChcblx0XHQ8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG5cdFx0XHQ8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRjaGVja2VkPXtzaG93fVxuXHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ0b2dnbGUtcmVjdXJyZW5jZVwiXG5cdFx0XHRcdFx0XHRpZD1cInJlY3VycmluZ1wiXG5cdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9e3RvZ2dsZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXBlYXQnKX08L0NhcmRUaXRsZT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdHtzaG93ICYmIHZhbHVlICYmIChcblx0XHRcdFx0XHQ8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0e2dldERlc2NyaXB0aW9uKHZhbHVlLCB0KX1cblx0XHRcdFx0XHQ8L3A+XG5cdFx0XHRcdCl9XG5cdFx0XHQ8L0NhcmRIZWFkZXI+XG5cblx0XHRcdHtzaG93ICYmIChcblx0XHRcdFx0PENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC00XCI+XG5cdFx0XHRcdFx0XHRcdDxkaXY+XG5cdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwiZnJlcXVlbmN5XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHR7dCgncmVwZWF0cycpfVxuXHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0b25WYWx1ZUNoYW5nZT17KGYpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGZyZXE6IEZSRVFfTUFQW2YgYXMga2V5b2YgdHlwZW9mIEZSRVFfTUFQXSB9KVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e2ZyZXF9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PFNlbGVjdFRyaWdnZXJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC04XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJmcmVxdWVuY3ktc2VsZWN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJmcmVxdWVuY3lcIlxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8U2VsZWN0VmFsdWUgLz5cblx0XHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0VHJpZ2dlcj5cblx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7T2JqZWN0LmtleXMoRlJFUV9NQVApLm1hcCgoZikgPT4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxTZWxlY3RJdGVtIGtleT17Zn0gdmFsdWU9e2Z9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoZi50b0xvd2VyQ2FzZSgpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L1NlbGVjdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9TZWxlY3RDb250ZW50PlxuXHRcdFx0XHRcdFx0XHRcdDwvU2VsZWN0PlxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJpbnRlcnZhbFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0e3QoJ2V2ZXJ5Jyl9XG5cdFx0XHRcdFx0XHRcdFx0PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8SW5wdXRcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtOFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRpZD1cImludGVydmFsXCJcblx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhlKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGUoeyBpbnRlcnZhbDogcGFyc2VOdW0oZS50YXJnZXQudmFsdWUpIH0pXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwibnVtYmVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlPXtvcHRzPy5pbnRlcnZhbCB8fCAxfVxuXHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0XHRcdHtvcHRzPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8ZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGQsIGkpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIiBrZXk9e2QubGFiZWx9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDaGVja2JveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17Ynl3ZWVrZGF5LmluY2x1ZGVzKGQudmFsdWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2BkYXktJHtpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHRvZ2dsZURheShpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxMYWJlbFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC14cyBjdXJzb3ItcG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRodG1sRm9yPXtgZGF5LSR7aX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkLmxhYmVsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0KSl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0KX1cblxuXHRcdFx0XHRcdFx0PGRpdj5cblx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICduZXZlcid9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwibmV2ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwibmV2ZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ25ldmVyJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8Q2hlY2tib3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2hlY2tlZD17ZW5kVHlwZSA9PT0gJ2NvdW50J31cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJhZnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gc2V0RW5kVHlwZSgnY291bnQnKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14c1wiIGh0bWxGb3I9XCJhZnRlclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7dCgnYWZ0ZXInKX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHRcdFx0XHRcdFx0XHR7ZW5kVHlwZSA9PT0gJ2NvdW50JyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxJbnB1dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNiB3LTE2IHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY291bnQtaW5wdXRcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pbj1cIjFcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsoZSkgPT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVwZGF0ZSh7IGNvdW50OiBwYXJzZU51bShlLnRhcmdldC52YWx1ZSkgfSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIm51bWJlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e29wdHM/LmNvdW50IHx8IDF9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0PENoZWNrYm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNoZWNrZWQ9e2VuZFR5cGUgPT09ICd1bnRpbCd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPVwib25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNoZWNrZWRDaGFuZ2U9eygpID0+IHNldEVuZFR5cGUoJ3VudGlsJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIiBodG1sRm9yPVwib25cIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3QoJ29uJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0XHRcdFx0XHRcdFx0e2VuZFR5cGUgPT09ICd1bnRpbCcgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8RGF0ZVBpY2tlclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImgtNlwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGF0ZT17b3B0cz8udW50aWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9eyhkKSA9PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW50aWw6IGQgPyBkYXlqcyhkKS5lbmRPZignZGF5JykudG9EYXRlKCkgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvQ2FyZENvbnRlbnQ+XG5cdFx0XHQpfVxuXHRcdDwvQ2FyZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBDYXJkKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQndGV4dC1jYXJkLWZvcmVncm91bmQgZmxleCBmbGV4LWNvbCBnYXAtNiByb3VuZGVkLXhsIGJvcmRlciBzaGFkb3ctc20nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRIZWFkZXIoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdAY29udGFpbmVyL2NhcmQtaGVhZGVyIGdyaWQgYXV0by1yb3dzLW1pbiBncmlkLXJvd3MtW2F1dG9fYXV0b10gaXRlbXMtc3RhcnQgZ2FwLTEuNSBwLTQgcGItMCBoYXMtZGF0YS1bc2xvdD1jYXJkLWFjdGlvbl06Z3JpZC1jb2xzLVsxZnJfYXV0b10nLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWhlYWRlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBDYXJkVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2xlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtdGl0bGVcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZERlc2NyaXB0aW9uKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1zbScsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWRlc2NyaXB0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRBY3Rpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdjb2wtc3RhcnQtMiByb3ctc3Bhbi0yIHJvdy1zdGFydC0xIHNlbGYtc3RhcnQganVzdGlmeS1zZWxmLWVuZCcsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtYWN0aW9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIENhcmRDb250ZW50KHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJjYXJkLWNvbnRlbnRcIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdC8+XG5cdClcbn1cblxuZnVuY3Rpb24gQ2FyZEZvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbignZmxleCBpdGVtcy1jZW50ZXIgcHgtNiBbLmJvcmRlci10XTpwdC02JywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cImNhcmQtZm9vdGVyXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdENhcmQsXG5cdENhcmRIZWFkZXIsXG5cdENhcmRGb290ZXIsXG5cdENhcmRUaXRsZSxcblx0Q2FyZEFjdGlvbixcblx0Q2FyZERlc2NyaXB0aW9uLFxuXHRDYXJkQ29udGVudCxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcbmltcG9ydCB0eXBlICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlJvb3Q+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwic2VsZWN0XCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RHcm91cCh7XG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkdyb3VwPikge1xuXHRyZXR1cm4gPFNlbGVjdFByaW1pdGl2ZS5Hcm91cCBkYXRhLXNsb3Q9XCJzZWxlY3QtZ3JvdXBcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdFZhbHVlKHtcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVmFsdWU+KSB7XG5cdHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLlZhbHVlIGRhdGEtc2xvdD1cInNlbGVjdC12YWx1ZVwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VHJpZ2dlcih7XG5cdGNsYXNzTmFtZSxcblx0c2l6ZSA9ICdkZWZhdWx0Jyxcblx0Y2hpbGRyZW4sXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+ICYge1xuXHRzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xufSkge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuVHJpZ2dlclxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XCJib3JkZXItaW5wdXQgZGF0YS1bcGxhY2Vob2xkZXJdOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBbJl9zdmc6bm90KFtjbGFzcyo9J3RleHQtJ10pXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgZGFyazpiZy1pbnB1dC8zMCBkYXJrOmhvdmVyOmJnLWlucHV0LzUwIGZsZXggdy1maXQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiByb3VuZGVkLW1kIGJvcmRlciBiZy10cmFuc3BhcmVudCBweC0zIHB5LTIgdGV4dC1zbSB3aGl0ZXNwYWNlLW5vd3JhcCBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzaXplPWRlZmF1bHRdOmgtOSBkYXRhLVtzaXplPXNtXTpoLTggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06bGluZS1jbGFtcC0xICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmZsZXggKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06aXRlbXMtY2VudGVyICo6ZGF0YS1bc2xvdD1zZWxlY3QtdmFsdWVdOmdhcC0yIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmddOnNocmluay0wIFsmX3N2Zzpub3QoW2NsYXNzKj0nc2l6ZS0nXSldOnNpemUtNFwiLFxuXHRcdFx0XHRjbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXNpemU9e3NpemV9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JY29uIGFzQ2hpbGQ+XG5cdFx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00IG9wYWNpdHktNTBcIiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSWNvbj5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdENvbnRlbnQoe1xuXHRjbGFzc05hbWUsXG5cdGNoaWxkcmVuLFxuXHRwb3NpdGlvbiA9ICdwb3BwZXInLFxuXHRhbGlnbiA9ICdjZW50ZXInLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5Db250ZW50Pikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuUG9ydGFsPlxuXHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5Db250ZW50XG5cdFx0XHRcdGFsaWduPXthbGlnbn1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgcmVsYXRpdmUgei01MCBtYXgtaC0oLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0KSBtaW4tdy1bOHJlbV0gb3JpZ2luLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIG92ZXJmbG93LXgtaGlkZGVuIG92ZXJmbG93LXktYXV0byByb3VuZGVkLW1kIGJvcmRlciBzaGFkb3ctbWQnLFxuXHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0J2RhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEnLFxuXHRcdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0XHQpfVxuXHRcdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3QtY29udGVudFwiXG5cdFx0XHRcdHBvc2l0aW9uPXtwb3NpdGlvbn1cblx0XHRcdFx0ey4uLnByb3BzfVxuXHRcdFx0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQncC0xJyxcblx0XHRcdFx0XHRcdHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuXHRcdFx0XHRcdFx0XHQnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y2hpbGRyZW59XG5cdFx0XHRcdDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuXHRcdFx0XHQ8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuXHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuXHRyZXR1cm4gKFxuXHRcdDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcblx0XHRcdGNsYXNzTmFtZT17Y24oJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0yIHB5LTEuNSB0ZXh0LXhzJywgY2xhc3NOYW1lKX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0Lz5cblx0KVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcblx0Y2xhc3NOYW1lLFxuXHRjaGlsZHJlbixcblx0Li4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS1zbG90PVwic2VsZWN0LWl0ZW1cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cblx0XHRcdFx0PFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuXHRcdFx0XHRcdDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHRcdFx0PC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cblx0XHRcdDwvc3Bhbj5cblx0XHRcdDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG5cdClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3Jcblx0XHRcdGNsYXNzTmFtZT17Y24oJ2JnLWJvcmRlciBwb2ludGVyLWV2ZW50cy1ub25lIC1teC0xIG15LTEgaC1weCcsIGNsYXNzTmFtZSl9XG5cdFx0XHRkYXRhLXNsb3Q9XCJzZWxlY3Qtc2VwYXJhdG9yXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQvPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcblx0Y2xhc3NOYW1lLFxuXHQuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcblx0cmV0dXJuIChcblx0XHQ8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtdXAtYnV0dG9uXCJcblx0XHRcdHsuLi5wcm9wc31cblx0XHQ+XG5cdFx0XHQ8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuXHRcdDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuXHQpXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuXHRjbGFzc05hbWUsXG5cdC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG5cdHJldHVybiAoXG5cdFx0PFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHQnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHRcdGRhdGEtc2xvdD1cInNlbGVjdC1zY3JvbGwtZG93bi1idXR0b25cIlxuXHRcdFx0ey4uLnByb3BzfVxuXHRcdD5cblx0XHRcdDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cblx0XHQ8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuXHQpXG59XG5cbmV4cG9ydCB7XG5cdFNlbGVjdCxcblx0U2VsZWN0Q29udGVudCxcblx0U2VsZWN0R3JvdXAsXG5cdFNlbGVjdEl0ZW0sXG5cdFNlbGVjdExhYmVsLFxuXHRTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuXHRTZWxlY3RTY3JvbGxVcEJ1dHRvbixcblx0U2VsZWN0U2VwYXJhdG9yLFxuXHRTZWxlY3RUcmlnZ2VyLFxuXHRTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcblx0Y29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG5cdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcblx0XHRcdGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdH0pKVxuXG5cdGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8e1xuXHRcdGlzT3BlbjogYm9vbGVhblxuXHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG5cdFx0ZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG5cdFx0dXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cblx0XHRvbkNvbmZpcm0/OiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcblx0fT4oe1xuXHRcdGlzT3BlbjogZmFsc2UsXG5cdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdGV2ZW50OiBudWxsLFxuXHR9KVxuXG5cdGNvbnN0IG9wZW5FZGl0RGlhbG9nID0gdXNlQ2FsbGJhY2soXG5cdFx0KGV2ZW50OiBDYWxlbmRhckV2ZW50LCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG5cdFx0XHRzZXREaWFsb2dTdGF0ZSh7XG5cdFx0XHRcdGlzT3BlbjogdHJ1ZSxcblx0XHRcdFx0b3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0dXBkYXRlcyxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHR1cGRhdGVSZWN1cnJpbmdFdmVudChldmVudCwgdXBkYXRlcywge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W3VwZGF0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3Qgb3BlbkRlbGV0ZURpYWxvZyA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0XHRpc09wZW46IHRydWUsXG5cdFx0XHRcdG9wZXJhdGlvblR5cGU6ICdkZWxldGUnLFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0b25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdFx0XHRkZWxldGVSZWN1cnJpbmdFdmVudChldmVudCwge1xuXHRcdFx0XHRcdFx0c2NvcGUsXG5cdFx0XHRcdFx0XHRldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0sXG5cdFx0XHR9KVxuXHRcdH0sXG5cdFx0W2RlbGV0ZVJlY3VycmluZ0V2ZW50XVxuXHQpXG5cblx0Y29uc3QgY2xvc2VEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG5cdFx0c2V0RGlhbG9nU3RhdGUoe1xuXHRcdFx0aXNPcGVuOiBmYWxzZSxcblx0XHRcdG9wZXJhdGlvblR5cGU6ICdlZGl0Jyxcblx0XHRcdGV2ZW50OiBudWxsLFxuXHRcdH0pXG5cdH0sIFtdKVxuXG5cdGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcblx0XHQoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcblx0XHRcdGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcblx0XHRcdFx0ZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuXHRcdFx0fVxuXHRcdFx0Y2xvc2VEaWFsb2coKVxuXHRcdFx0Ly8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuXHRcdFx0b25Db21wbGV0ZT8uKClcblx0XHR9LFxuXHRcdFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG5cdClcblxuXHRyZXR1cm4ge1xuXHRcdGRpYWxvZ1N0YXRlLFxuXHRcdG9wZW5FZGl0RGlhbG9nLFxuXHRcdG9wZW5EZWxldGVEaWFsb2csXG5cdFx0Y2xvc2VEaWFsb2csXG5cdFx0aGFuZGxlQ29uZmlybSxcblx0fVxufVxuIiwKICAgICJpbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24sIERvd25sb2FkLCBNZW51LCBQbHVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7XG5cdFBvcG92ZXIsXG5cdFBvcG92ZXJDb250ZW50LFxuXHRQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3BvcG92ZXInXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCBUaXRsZUNvbnRlbnQgZnJvbSAnLi90aXRsZS1jb250ZW50J1xuaW1wb3J0IFZpZXdDb250cm9scyBmcm9tICcuL3ZpZXctY29udHJvbHMnXG5cbmludGVyZmFjZSBIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5jb25zdCBIZWFkZXI6IFJlYWN0LkZDPEhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSA9ICcnIH0pID0+IHtcblx0Y29uc3Qge1xuXHRcdHZpZXcsXG5cdFx0c2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kLFxuXHRcdHByZXZQZXJpb2QsXG5cdFx0dG9kYXksXG5cdFx0b3BlbkV2ZW50Rm9ybSxcblx0XHRoZWFkZXJDb21wb25lbnQsXG5cdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdHJhd0V2ZW50cyxcblx0XHR0LFxuXHR9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGN0eCkgPT4gKHtcblx0XHR2aWV3OiBjdHgudmlldyxcblx0XHRzZXRWaWV3OiBjdHguc2V0Vmlldyxcblx0XHRuZXh0UGVyaW9kOiBjdHgubmV4dFBlcmlvZCxcblx0XHRwcmV2UGVyaW9kOiBjdHgucHJldlBlcmlvZCxcblx0XHR0b2RheTogY3R4LnRvZGF5LFxuXHRcdG9wZW5FdmVudEZvcm06IGN0eC5vcGVuRXZlbnRGb3JtLFxuXHRcdGhlYWRlckNvbXBvbmVudDogY3R4LmhlYWRlckNvbXBvbmVudCxcblx0XHRoZWFkZXJDbGFzc05hbWU6IGN0eC5oZWFkZXJDbGFzc05hbWUsXG5cdFx0cmF3RXZlbnRzOiBjdHgucmF3RXZlbnRzLFxuXHRcdHQ6IGN0eC50LFxuXHR9KSlcblxuXHRjb25zdCBbbW9iaWxlTWVudU9wZW4sIHNldE1vYmlsZU1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG5cdGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHNldE1vYmlsZU1lbnVPcGVuKGZhbHNlKVxuXG5cdGNvbnN0IGhhbmRsZUV4cG9ydCA9ICgpID0+IHtcblx0XHRjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG5cdFx0ZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcblx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHR9XG5cblx0Y29uc3QgTmV3RXZlbnRCdXR0b24gPSAoKSA9PiAoXG5cdFx0PEJ1dHRvblxuXHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuXHRcdFx0b25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuXHRcdFx0c2l6ZT1cInNtXCJcblx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHQ+XG5cdFx0XHQ8UGx1cyBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG5cdFx0PC9CdXR0b24+XG5cdClcblxuXHRjb25zdCBFeHBvcnRCdXR0b24gPSAoeyBmdWxsV2lkdGggPSBmYWxzZSB9OiB7IGZ1bGxXaWR0aD86IGJvb2xlYW4gfSkgPT4gKFxuXHRcdDxCdXR0b25cblx0XHRcdGNsYXNzTmFtZT17Y24oJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xJywgZnVsbFdpZHRoICYmICd3LWZ1bGwgZ2FwLTInKX1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUV4cG9ydH1cblx0XHRcdHNpemU9XCJzbVwiXG5cdFx0XHR2YXJpYW50PVwib3V0bGluZVwiXG5cdFx0PlxuXHRcdFx0PERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0e2Z1bGxXaWR0aCA/IChcblx0XHRcdFx0YCR7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKWBcblx0XHRcdCkgOiAoXG5cdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPnt0KCdleHBvcnQnKX08L3NwYW4+XG5cdFx0XHQpfVxuXHRcdDwvQnV0dG9uPlxuXHQpXG5cblx0aWYgKGhlYWRlckNvbXBvbmVudCkge1xuXHRcdHJldHVybiBoZWFkZXJDb21wb25lbnRcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwiQGNvbnRhaW5lci9iYXNlLWhlYWRlciB3LWZ1bGxcIlxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnZmxleCBqdXN0aWZ5LWNlbnRlciBAMnhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktYmV0d2VlbiBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0yJyxcblx0XHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdFx0aGVhZGVyQ2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuXHRcdFx0XHRcdDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG5cdFx0XHRcdFx0PFRpdGxlQ29udGVudCAvPlxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cblx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwianVzdGlmeS1lbmRcIlxuXHRcdFx0XHRcdFx0XHRjdXJyZW50Vmlldz17dmlld31cblx0XHRcdFx0XHRcdFx0b25DaGFuZ2U9e3NldFZpZXd9XG5cdFx0XHRcdFx0XHRcdG9uTmV4dD17bmV4dFBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25QcmV2aW91cz17cHJldlBlcmlvZH1cblx0XHRcdFx0XHRcdFx0b25Ub2RheT17dG9kYXl9XG5cdFx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJkZWZhdWx0XCJcblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8TmV3RXZlbnRCdXR0b24gLz5cblx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gLz5cblx0XHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuXHRcdFx0XHRcdFx0PE5ld0V2ZW50QnV0dG9uIC8+XG5cdFx0XHRcdFx0XHQ8UG9wb3ZlciBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZU1lbnVPcGVufSBvcGVuPXttb2JpbGVNZW51T3Blbn0+XG5cdFx0XHRcdFx0XHRcdDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b24gc2l6ZT1cInNtXCIgdmFyaWFudD1cIm91dGxpbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdDxWaWV3Q29udHJvbHNcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudFZpZXc9e3ZpZXd9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9uQ2hhbmdlPXsodikgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldFZpZXcodilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbk5leHQ9eygpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXh0UGVyaW9kKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvblByZXZpb3VzPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJldlBlcmlvZCgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xvc2VNb2JpbGVNZW51KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0b25Ub2RheT17KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvZGF5KClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbG9zZU1vYmlsZU1lbnUoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PVwiZ3JpZFwiXG5cdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJwdC0yIGJvcmRlci10XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxFeHBvcnRCdXR0b24gZnVsbFdpZHRoIC8+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0PC9Qb3BvdmVyQ29udGVudD5cblx0XHRcdFx0XHRcdDwvUG9wb3Zlcj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgZGVmYXVsdCBIZWFkZXJcbiIsCiAgICAiaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nXG5cbmNvbnN0IFVUQ19WVElNRVpPTkUgPSBbXG5cdCdCRUdJTjpWVElNRVpPTkUnLFxuXHQnVFpJRDpVVEMnLFxuXHQnQkVHSU46U1RBTkRBUkQnLFxuXHQnRFRTVEFSVDoxOTcwMDEwMVQwMDAwMDAnLFxuXHQnVFpOQU1FOlVUQycsXG5cdCdUWk9GRlNFVEZST006KzAwMDAnLFxuXHQnVFpPRkZTRVRUTzorMDAwMCcsXG5cdCdFTkQ6U1RBTkRBUkQnLFxuXHQnRU5EOlZUSU1FWk9ORScsXG5dLmpvaW4oQ1JMRilcblxuY29uc3QgZXNjYXBlVGV4dCA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuXHRyZXR1cm4gdGV4dFxuXHRcdC5yZXBsYWNlQWxsKCdcXFxcJywgJ1xcXFxcXFxcJylcblx0XHQucmVwbGFjZUFsbCgnOycsICdcXFxcOycpXG5cdFx0LnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKVxuXHRcdC5yZXBsYWNlQWxsKCdcXG4nLCAnXFxcXG4nKVxuXHRcdC5yZXBsYWNlQWxsKCdcXHInLCAnJylcbn1cblxuY29uc3QgZm9ybWF0RGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgaXNBbGxEYXkgPSBmYWxzZSk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBpc0FsbERheVxuXHRcdD8gZGF0ZS5mb3JtYXQoJ1lZWVlNTUREJylcblx0XHQ6IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbmNvbnN0IGdldFVJRCA9IChldmVudDogQ2FsZW5kYXJFdmVudCk6IHN0cmluZyA9PiB7XG5cdHJldHVybiBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG5jb25zdCBmb3JtYXRSUnVsZSA9IChycnVsZU9wdGlvbnM6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IHJydWxlU3RyaW5nID0gbmV3IFJSdWxlKFxuXHRcdFx0cnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG5cdFx0KS50b1N0cmluZygpXG5cdFx0cmV0dXJuIChcblx0XHRcdHJydWxlU3RyaW5nLnNwbGl0KCdcXG4nKS5maW5kKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoJ1JSVUxFOicpKSB8fCAnJ1xuXHRcdClcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuICcnXG5cdH1cbn1cblxuY29uc3QgY29udmVydEV2ZW50VG9WRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuXHRjb25zdCB0aW1lc3RhbXAgPSBkYXlqcygpLnV0YygpLmZvcm1hdCgnWVlZWU1NRERbVF1ISG1tc3NbWl0nKVxuXHRjb25zdCBkYXRlUGFyYW0gPSBldmVudC5hbGxEYXkgPyAnO1ZBTFVFPURBVEUnIDogJydcblx0Y29uc3QgcnJ1bGUgPSBldmVudC5ycnVsZSA/IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKSA6ICcnXG5cblx0Y29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXM/Lmxlbmd0aFxuXHRcdD8gZXZlbnQuZXhkYXRlcy5tYXAoKGQpID0+IGZvcm1hdERhdGUoZGF5anMoZCksIGV2ZW50LmFsbERheSkpLmpvaW4oJywnKVxuXHRcdDogbnVsbFxuXG5cdGNvbnN0IHJlY3VycmVuY2VJZCA9IGV2ZW50LnJlY3VycmVuY2VJZFxuXHRcdD8gZm9ybWF0RGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG5cdFx0OiBudWxsXG5cblx0Y29uc3QgbGluZXMgPSBbXG5cdFx0J0JFR0lOOlZFVkVOVCcsXG5cdFx0YFVJRDoke2dldFVJRChldmVudCl9YCxcblx0XHRgRFRTVEFSVCR7ZGF0ZVBhcmFtfToke2Zvcm1hdERhdGUoZXZlbnQuc3RhcnQsIGV2ZW50LmFsbERheSl9YCxcblx0XHRgRFRFTkQke2RhdGVQYXJhbX06JHtmb3JtYXREYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KX1gLFxuXHRcdGBTVU1NQVJZOiR7ZXNjYXBlVGV4dChldmVudC50aXRsZSl9YCxcblx0XHRldmVudC5kZXNjcmlwdGlvbiAmJiBgREVTQ1JJUFRJT046JHtlc2NhcGVUZXh0KGV2ZW50LmRlc2NyaXB0aW9uKX1gLFxuXHRcdGV2ZW50LmxvY2F0aW9uICYmIGBMT0NBVElPTjoke2VzY2FwZVRleHQoZXZlbnQubG9jYXRpb24pfWAsXG5cdFx0cnJ1bGUsXG5cdFx0ZXhkYXRlcyAmJiBgRVhEQVRFOiR7ZXhkYXRlc31gLFxuXHRcdHJlY3VycmVuY2VJZCAmJiBgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gLFxuXHRcdGBEVFNUQU1QOiR7dGltZXN0YW1wfWAsXG5cdFx0YENSRUFURUQ6JHt0aW1lc3RhbXB9YCxcblx0XHRgTEFTVC1NT0RJRklFRDoke3RpbWVzdGFtcH1gLFxuXHRcdCdTVEFUVVM6Q09ORklSTUVEJyxcblx0XHQnU0VRVUVOQ0U6MCcsXG5cdFx0J1RSQU5TUDpPUEFRVUUnLFxuXHRcdCdFTkQ6VkVWRU5UJyxcblx0XVxuXG5cdHJldHVybiBsaW5lcy5maWx0ZXIoQm9vbGVhbikuam9pbihDUkxGKVxufVxuXG5jb25zdCBmaWx0ZXJFdmVudHMgPSAoZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuXHRjb25zdCBzZWVuVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cblx0cmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgdWlkID0gZ2V0VUlEKGV2ZW50KVxuXHRcdGNvbnN0IGlzQmFzZVJlY3VycmluZyA9IGV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWRcblx0XHRjb25zdCBpc01vZGlmaWVkSW5zdGFuY2UgPSBldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlXG5cblx0XHRpZiAoaXNCYXNlUmVjdXJyaW5nKSB7XG5cdFx0XHRzZWVuVUlEcy5hZGQodWlkKVxuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0aWYgKGlzTW9kaWZpZWRJbnN0YW5jZSkge1xuXHRcdFx0cmV0dXJuIHRydWVcblx0XHR9XG5cdFx0cmV0dXJuICFldmVudC5ycnVsZSAmJiAhZXZlbnQucmVjdXJyZW5jZUlkICYmICFzZWVuVUlEcy5oYXModWlkKVxuXHR9KVxufVxuXG5leHBvcnQgY29uc3QgZXhwb3J0VG9JQ2FsZW5kYXIgPSAoXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdLFxuXHRjYWxlbmRhck5hbWUgPSAnaWxhbXkgQ2FsZW5kYXInXG4pOiBzdHJpbmcgPT4ge1xuXHRjb25zdCBuYW1lID0gZXNjYXBlVGV4dChjYWxlbmRhck5hbWUpXG5cdGNvbnN0IHZldmVudFN0cmluZ3MgPSBmaWx0ZXJFdmVudHMoZXZlbnRzKS5tYXAoY29udmVydEV2ZW50VG9WRXZlbnQpXG5cblx0cmV0dXJuIFtcblx0XHQnQkVHSU46VkNBTEVOREFSJyxcblx0XHQnVkVSU0lPTjoyLjAnLFxuXHRcdCdQUk9ESUQ6LS8vaWxhbXkvL2lsYW15IENhbGVuZGFyLy9FTicsXG5cdFx0J0NBTFNDQUxFOkdSRUdPUklBTicsXG5cdFx0J01FVEhPRDpQVUJMSVNIJyxcblx0XHRgWC1XUi1DQUxOQU1FOiR7bmFtZX1gLFxuXHRcdGBYLVdSLUNBTERFU0M6RXhwb3J0ZWQgZnJvbSAke25hbWV9YCxcblx0XHRVVENfVlRJTUVaT05FLFxuXHRcdC4uLnZldmVudFN0cmluZ3MsXG5cdFx0J0VORDpWQ0FMRU5EQVInLFxuXHRdLmpvaW4oQ1JMRilcbn1cblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSUNhbGVuZGFyID0gKFxuXHRldmVudHM6IENhbGVuZGFyRXZlbnRbXSxcblx0ZmlsZW5hbWUgPSAnY2FsZW5kYXIuaWNzJyxcblx0Y2FsZW5kYXJOYW1lID0gJ2lsYW15IENhbGVuZGFyJ1xuKTogdm9pZCA9PiB7XG5cdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhwb3J0VG9JQ2FsZW5kYXIoZXZlbnRzLCBjYWxlbmRhck5hbWUpXSwge1xuXHRcdHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuXHR9KVxuXHRjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG5cdGNvbnN0IG5vcm1hbGl6ZWRGaWxlbmFtZSA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJylcblx0XHQ/IGZpbGVuYW1lXG5cdFx0OiBgJHtmaWxlbmFtZX0uaWNzYFxuXG5cdGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcblx0bGluay5ocmVmID0gdXJsXG5cdGxpbmsuZG93bmxvYWQgPSBub3JtYWxpemVkRmlsZW5hbWVcblxuXHRkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuXHRsaW5rLmNsaWNrKClcblx0bGluay5yZW1vdmUoKVxuXHRVUkwucmV2b2tlT2JqZWN0VVJMKHVybClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvYnV0dG9uJ1xuaW1wb3J0IHtcblx0UG9wb3Zlcixcblx0UG9wb3ZlckNvbnRlbnQsXG5cdFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IE1PTlRIX0tFWVMgPSBbXG5cdCdqYW51YXJ5Jyxcblx0J2ZlYnJ1YXJ5Jyxcblx0J21hcmNoJyxcblx0J2FwcmlsJyxcblx0J21heScsXG5cdCdqdW5lJyxcblx0J2p1bHknLFxuXHQnYXVndXN0Jyxcblx0J3NlcHRlbWJlcicsXG5cdCdvY3RvYmVyJyxcblx0J25vdmVtYmVyJyxcblx0J2RlY2VtYmVyJyxcbl0gYXMgY29uc3RcblxuY29uc3QgYW5pbWF0aW9uID0ge1xuXHRpbml0aWFsOiB7IG9wYWNpdHk6IDAsIHk6IDEwIH0sXG5cdGFuaW1hdGU6IHsgb3BhY2l0eTogMSwgeTogMCB9LFxuXHRleGl0OiB7IG9wYWNpdHk6IDAsIHk6IC0xMCB9LFxufVxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0LCBmaXJzdERheU9mV2VlayB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY3R4KSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGN0eC5jdXJyZW50RGF0ZSxcblx0XHRcdHZpZXc6IGN0eC52aWV3LFxuXHRcdFx0c2V0Q3VycmVudERhdGU6IGN0eC5zZXRDdXJyZW50RGF0ZSxcblx0XHRcdHQ6IGN0eC50LFxuXHRcdFx0Zmlyc3REYXlPZldlZWs6IGN0eC5maXJzdERheU9mV2Vlayxcblx0XHR9KSlcblxuXHRjb25zdCBbb3BlblBvcG92ZXIsIHNldE9wZW5Qb3BvdmVyXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cblx0Y29uc3QgbW9udGhzID0gdXNlTWVtbygoKSA9PiBNT05USF9LRVlTLm1hcCgoa2V5KSA9PiB0KGtleSkpLCBbdF0pXG5cdGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cdGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cdGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuXG5cdGNvbnN0IHNlbGVjdERhdGUgPSAoZGF0ZTogZGF5anMuRGF5anMpID0+IHtcblx0XHRzZXRDdXJyZW50RGF0ZShkYXRlKVxuXHRcdHNldE9wZW5Qb3BvdmVyKG51bGwpXG5cdH1cblxuXHRjb25zdCByZW5kZXJNb250aENvbnRlbnQgPSAoKSA9PiAoXG5cdFx0PD5cblx0XHRcdHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHQnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG5cdFx0XHRcdFx0XHRjdXJyZW50RGF0ZS5tb250aCgpID09PSBpbmRleCAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17bW9udGh9XG5cdFx0XHRcdFx0b25DbGljaz17KCkgPT4gc2VsZWN0RGF0ZShjdXJyZW50RGF0ZS5tb250aChpbmRleCkpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7bW9udGh9XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KSl9XG5cdFx0PC8+XG5cdClcblxuXHRjb25zdCByZW5kZXJZZWFyQ29udGVudCA9ICgpID0+IChcblx0XHQ8PlxuXHRcdFx0e3llYXJzLm1hcCgoeWVhcikgPT4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcblx0XHRcdFx0XHRcdGN1cnJlbnREYXRlLnllYXIoKSA9PT0geWVhciAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGtleT17eWVhcn1cblx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKGN1cnJlbnREYXRlLnllYXIoeWVhcikpfVxuXHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7eWVhcn1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpKX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlcldlZWtDb250ZW50ID0gKCkgPT4gKFxuXHRcdDw+XG5cdFx0XHR7QXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgaSkgPT4ge1xuXHRcdFx0XHRjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcblx0XHRcdFx0Y29uc3QgZGF5cyA9IGdldFdlZWtEYXlzKHdlZWtEYXRlLCBmaXJzdERheU9mV2Vlaylcblx0XHRcdFx0Y29uc3Qgc3RhcnQgPSBkYXlzWzBdXG5cdFx0XHRcdGNvbnN0IGVuZCA9IGRheXNbNl1cblx0XHRcdFx0Y29uc3QgaXNDdXJyZW50V2VlayA9IHdlZWtEYXRlLmlzU2FtZShjdXJyZW50RGF0ZSwgJ3dlZWsnKVxuXHRcdFx0XHRjb25zdCBjcm9zc2VzTW9udGggPSBzdGFydC5tb250aCgpICE9PSBlbmQubW9udGgoKVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGtleT17c3RhcnQuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBzZWxlY3REYXRlKHN0YXJ0KX1cblx0XHRcdFx0XHRcdHZhcmlhbnQ9XCJnaG9zdFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuPntgJHtzdGFydC5mb3JtYXQoJ01NTSBEJyl9IC0gJHtlbmQuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG5cdFx0XHRcdFx0XHRcdHtjcm9zc2VzTW9udGggJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cIm1sLTAuNSB0ZXh0LXhzIG9wYWNpdHktNzBcIj57YCR7c3RhcnQuZm9ybWF0KCdNTU0nKX0tJHtlbmQuZm9ybWF0KCdNTU0nKX1gfTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8Lz5cblx0KVxuXG5cdGNvbnN0IHJlbmRlckRheUNvbnRlbnQgPSAoKSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXkgPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cdFx0Y29uc3QgZGF5c0luTW9udGggPSBjdXJyZW50RGF0ZS5kYXlzSW5Nb250aCgpXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PD5cblx0XHRcdFx0e0FycmF5LmZyb20oeyBsZW5ndGg6IGRheXNJbk1vbnRoIH0sIChfLCBpKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgZGF5ID0gZmlyc3REYXkuZGF0ZShpICsgMSlcblx0XHRcdFx0XHRjb25zdCBpc0N1cnJlbnREYXkgPSBkYXkuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5Jylcblx0XHRcdFx0XHRjb25zdCBpc1RvZGF5ID0gZGF5LmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0J2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuXHRcdFx0XHRcdFx0XHRcdGlzQ3VycmVudERheSAmJiAnYmctcHJpbWFyeS8xMCdcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0a2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG5cdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eygpID0+IHNlbGVjdERhdGUoZGF5KX1cblx0XHRcdFx0XHRcdFx0dmFyaWFudD1cImdob3N0XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4+e2RheS5mb3JtYXQoJ2RkZGQsIE1NTSBEJyl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdHtpc1RvZGF5ICYmIChcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1zbSBweC0xISB0ZXh0LXhzXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt0KCd0b2RheScpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9KX1cblx0XHRcdDwvPlxuXHRcdClcblx0fVxuXG5cdGNvbnN0IHBvcG92ZXJzID0gW1xuXHRcdHtcblx0XHRcdGlkOiAnbW9udGgnLFxuXHRcdFx0aGlkZGVuOiB2aWV3ID09PSAneWVhcicsXG5cdFx0XHR0aXRsZTogY3VycmVudERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRyZW5kZXI6IHJlbmRlck1vbnRoQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAneWVhcicsXG5cdFx0XHRoaWRkZW46IGZhbHNlLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJZZWFyQ29udGVudCxcblx0XHR9LFxuXHRcdHtcblx0XHRcdGlkOiAnd2VlaycsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICd3ZWVrJyxcblx0XHRcdHRpdGxlOiBgJHt3ZWVrRGF5c1swXS5mb3JtYXQoJ01NTSBEJyl9IC0gJHt3ZWVrRGF5c1s2XS5mb3JtYXQoJ01NTSBEJyl9YCxcblx0XHRcdHJlbmRlcjogcmVuZGVyV2Vla0NvbnRlbnQsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRpZDogJ2RheScsXG5cdFx0XHRoaWRkZW46IHZpZXcgIT09ICdkYXknLFxuXHRcdFx0dGl0bGU6IGN1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgRCcpLFxuXHRcdFx0cmVuZGVyOiByZW5kZXJEYXlDb250ZW50LFxuXHRcdH0sXG5cdF1cblxuXHRyZXR1cm4gcG9wb3ZlcnNcblx0XHQuZmlsdGVyKChwKSA9PiAhcC5oaWRkZW4pXG5cdFx0Lm1hcCgocG9wb3ZlcikgPT4gKFxuXHRcdFx0PFBvcG92ZXJcblx0XHRcdFx0a2V5PXtwb3BvdmVyLmlkfVxuXHRcdFx0XHRvbk9wZW5DaGFuZ2U9eyhvcGVuKSA9PiBzZXRPcGVuUG9wb3ZlcihvcGVuID8gcG9wb3Zlci5pZCA6IG51bGwpfVxuXHRcdFx0XHRvcGVuPXtvcGVuUG9wb3ZlciA9PT0gcG9wb3Zlci5pZH1cblx0XHRcdD5cblx0XHRcdFx0PFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcHgtMSEgZm9udC1zZW1pYm9sZFwiXG5cdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImNhbGVuZGFyLW1vbnRoLWJ1dHRvblwiXG5cdFx0XHRcdFx0XHR2YXJpYW50PVwiZ2hvc3RcIlxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHRcdFx0PG1vdGlvbi5zcGFuXG5cdFx0XHRcdFx0XHRcdFx0YW5pbWF0ZT1cImFuaW1hdGVcIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwiY2FsZW5kYXItbW9udGgtZGlzcGxheVwiXG5cdFx0XHRcdFx0XHRcdFx0ZXhpdD1cImV4aXRcIlxuXHRcdFx0XHRcdFx0XHRcdGluaXRpYWw9XCJpbml0aWFsXCJcblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake3BvcG92ZXIuaWR9LSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuXHRcdFx0XHRcdFx0XHRcdHZhcmlhbnRzPXthbmltYXRpb259XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7cG9wb3Zlci50aXRsZX1cblx0XHRcdFx0XHRcdFx0PC9tb3Rpb24uc3Bhbj5cblx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHRcdFx0PENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L1BvcG92ZXJUcmlnZ2VyPlxuXHRcdFx0XHQ8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuXHRcdFx0XHRcdFx0e3BvcG92ZXIucmVuZGVyKCl9XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvUG9wb3ZlckNvbnRlbnQ+XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IENoZXZyb25MZWZ0LCBDaGV2cm9uUmlnaHQgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9idXR0b24nXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG50eXBlIFZpZXdUeXBlID0gJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG5jb25zdCBBVkFJTEFCTEVfVklFV1M6IFZpZXdUeXBlW10gPSBbJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXVxuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuXHRjdXJyZW50VmlldzogVmlld1R5cGVcblx0b25DaGFuZ2U6ICh2aWV3OiBWaWV3VHlwZSkgPT4gdm9pZFxuXHRvblRvZGF5PzogKCkgPT4gdm9pZFxuXHRvbk5leHQ/OiAoKSA9PiB2b2lkXG5cdG9uUHJldmlvdXM/OiAoKSA9PiB2b2lkXG5cdHZhcmlhbnQ/OiAnZGVmYXVsdCcgfCAnZ3JpZCdcblx0c2l6ZT86ICdzbScgfCAnZGVmYXVsdCdcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IFZpZXdDb250cm9sczogUmVhY3QuRkM8Vmlld0NvbnRyb2xzUHJvcHM+ID0gKHtcblx0Y3VycmVudFZpZXcsXG5cdG9uQ2hhbmdlLFxuXHR2YXJpYW50ID0gJ2RlZmF1bHQnLFxuXHRzaXplID0gJ3NtJyxcblx0Y2xhc3NOYW1lLFxuXHRvblRvZGF5LFxuXHRvbk5leHQsXG5cdG9uUHJldmlvdXMsXG59KSA9PiB7XG5cdGNvbnN0IHsgdCwgcmVzb3VyY2VzIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcblx0XHR0OiBjb250ZXh0LnQsXG5cdFx0cmVzb3VyY2VzOiBjb250ZXh0LnJlc291cmNlcyxcblx0fSkpXG5cdGNvbnN0IGlzR3JpZCA9IHZhcmlhbnQgPT09ICdncmlkJ1xuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSByZXNvdXJjZXMgJiYgcmVzb3VyY2VzLmxlbmd0aCA+IDBcblxuXHQvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cblx0Y29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiBWaWV3VHlwZSkgPT4ge1xuXHRcdHJldHVybiBjbihcblx0XHRcdC8vIEJhc2Ugd2lkdGggZm9yIGdyaWQgbGF5b3V0XG5cdFx0XHRpc0dyaWQgPyAndy1mdWxsJyA6ICcnLFxuXHRcdFx0Ly8gQWN0aXZlIHZpZXcgc3R5bGluZ1xuXHRcdFx0Y3VycmVudFZpZXcgPT09IHZpZXdUeXBlICYmICdiZy1wcmltYXJ5LzgwJ1xuXHRcdClcblx0fVxuXG5cdGNvbnN0IGdldEJ0blZhcmlhbnQgPSAodmlld1R5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0cmV0dXJuIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSA/ICdkZWZhdWx0JyA6ICdvdXRsaW5lJ1xuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRpc0dyaWQgPyAnZ3JpZCBncmlkLWNvbHMtMiBnYXAtMicgOiAnZmxleCBnYXAtMScsXG5cdFx0XHRcdGNsYXNzTmFtZVxuXHRcdFx0KX1cblx0XHQ+XG5cdFx0XHQ8QnV0dG9uIG9uQ2xpY2s9e29uUHJldmlvdXN9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uTGVmdCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cblx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvbk5leHR9IHNpemU9e3NpemV9IHZhcmlhbnQ9XCJvdXRsaW5lXCI+XG5cdFx0XHRcdDxDaGV2cm9uUmlnaHQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG5cdFx0XHQ8L0J1dHRvbj5cblxuXHRcdFx0e0FWQUlMQUJMRV9WSUVXUy5tYXAoKHR5cGU6IFZpZXdUeXBlKSA9PiB7XG5cdFx0XHRcdGlmIChpc1Jlc291cmNlQ2FsZW5kYXIgJiYgdHlwZSA9PT0gJ3llYXInKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGxcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUodHlwZSl9XG5cdFx0XHRcdFx0XHRrZXk9e3R5cGV9XG5cdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSh0eXBlKX1cblx0XHRcdFx0XHRcdHNpemU9e3NpemV9XG5cdFx0XHRcdFx0XHR2YXJpYW50PXtnZXRCdG5WYXJpYW50KHR5cGUpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt0KHR5cGUpfVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblxuXHRcdFx0PEJ1dHRvbiBvbkNsaWNrPXtvblRvZGF5fSBzaXplPXtzaXplfSB2YXJpYW50PVwib3V0bGluZVwiPlxuXHRcdFx0XHR7dCgndG9kYXknKX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdDb250cm9sc1xuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlIb3VycyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGN1cnJlbnRMb2NhbGUsIHRpbWVGb3JtYXQsIHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cdGNvbnN0IGlzVG9kYXkgPSBjdXJyZW50RGF0ZS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdGNvbnN0IGhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSB9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHtcblx0XHRpZDogYGRheS1jb2wtJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdGRheTogY3VycmVudERhdGUsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0Y2xhc3NOYW1lOiAndy1bY2FsYygxMDAlLTRyZW0pXSBmbGV4LTEnLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdH1cblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17PEFsbERheVJvdyBkYXlzPXtbY3VycmVudERhdGVdfSAvPn1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJywgYWxsRGF5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCBjb2x1bW5zXX1cblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xIGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlcid9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwiZGF5LXZpZXctaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdCdmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcblx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAndGV4dC1wcmltYXJ5J1xuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0a2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuXHRcdFx0XHRcdFx0XHR7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCAnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuXHRcdFx0XHRcdFx0e2lzVG9kYXkgJiYgKFxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIG1sLTIgcm91bmRlZC1mdWxsIHB4LTEgcHktMC41IHRleHQteHMgc206cHgtMiBzbTp0ZXh0LXNtXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3QoJ3RvZGF5Jyl9XG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHQ8L0FuaW1hdGVQcmVzZW5jZT5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IERheVZpZXdcbiIsCiAgICAiaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZFJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9ob3Jpem9udGFsLWdyaWQvaG9yaXpvbnRhbC1ncmlkLXJvdydcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2UgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFsbERheUNlbGwgfSBmcm9tICcuL2FsbC1kYXktY2VsbCdcblxuaW50ZXJmYWNlIEFsbERheVJvd1Byb3BzIHtcblx0ZGF5czogZGF5anMuRGF5anNbXVxuXHRjbGFzc2VzPzogeyByb3c/OiBzdHJpbmc7IGNlbGw/OiBzdHJpbmc7IHNwYWNlcj86IHN0cmluZyB9XG5cdHJlc291cmNlPzogUmVzb3VyY2Vcblx0c2hvd1NwYWNlcj86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Um93OiBSZWFjdC5GQzxBbGxEYXlSb3dQcm9wcz4gPSAoe1xuXHRkYXlzLFxuXHRjbGFzc2VzLFxuXHRyZXNvdXJjZSxcblx0c2hvd1NwYWNlciA9IHRydWUsXG59KSA9PiB7XG5cdGNvbnN0IGNvbHVtbnMgPSBkYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcblx0XHRpZDogYGFsbGRheS1jb2wtJHtkYXkudG9JU09TdHJpbmcoKX0tJHtpbmRleH1gLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0Y2xhc3NOYW1lOiBjbignaC1mdWxsIG1pbi1oLTEyIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCcsIGNsYXNzZXM/LmNlbGwpLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXYgY2xhc3NOYW1lPXtjbignZmxleCB3LWZ1bGwnLCBjbGFzc2VzPy5yb3cpfSBkYXRhLXRlc3RpZD1cImFsbC1kYXktcm93XCI+XG5cdFx0XHR7LyogVGltZSBjb2wgc3BhY2VyICovfVxuXHRcdFx0e3Nob3dTcGFjZXIgJiYgPEFsbERheUNlbGwgY2xhc3NOYW1lPXtjbGFzc2VzPy5zcGFjZXJ9IC8+fVxuXG5cdFx0XHR7LyogRGF5IGFsbCBkYXkgY2VsbCAqL31cblx0XHRcdDxIb3Jpem9udGFsR3JpZFJvd1xuXHRcdFx0XHRhbGxEYXlcblx0XHRcdFx0Y2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLWZpdFwiXG5cdFx0XHRcdGNvbHVtbnM9e2NvbHVtbnN9XG5cdFx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdFx0Z3JpZFR5cGU9XCJkYXlcIlxuXHRcdFx0XHRpZD17YGFsbC1kYXktcm93LSR7cmVzb3VyY2U/LmlkID8/ICdtYWluJ31gfVxuXHRcdFx0XHRpc0xhc3RSb3dcblx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHR2YXJpYW50PVwicmVndWxhclwiXG5cdFx0XHQvPlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBBbGxEYXlSb3cgPSBtZW1vKE5vTWVtb0FsbERheVJvdylcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEdyaWRDZWxsIH0gZnJvbSAnLi4vZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnLi4vcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXIgfSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1ldmVudHMtbGF5ZXInXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZENvbHVtbiB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRncmlkVHlwZTogJ2RheScgfCAnaG91cidcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHJlbmRlckNlbGw/OiAocm93OiBIb3Jpem9udGFsR3JpZFJvd1Byb3BzKSA9PiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzIHtcblx0aWQ6IHN0cmluZyB8IG51bWJlclxuXHRyZXNvdXJjZT86IFJlc291cmNlXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0dmFyaWFudD86ICdyZWd1bGFyJyB8ICdyZXNvdXJjZSdcblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRjb2x1bW5zPzogSG9yaXpvbnRhbEdyaWRDb2x1bW5bXVxuXHRhbGxEYXk/OiBib29sZWFuXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuXG5cdGlzTGFzdFJvdz86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRSb3c6IFJlYWN0LkZDPEhvcml6b250YWxHcmlkUm93UHJvcHM+ID0gKHtcblx0aWQsXG5cdHJlc291cmNlLFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHR2YXJpYW50ID0gJ3Jlc291cmNlJyxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRjbGFzc05hbWUsXG5cdGNvbHVtbnMgPSBbXSxcblx0YWxsRGF5LFxuXHRzaG93RGF5TnVtYmVyID0gZmFsc2UsXG5cdGlzTGFzdFJvdyA9IGZhbHNlLFxufSkgPT4ge1xuXHRjb25zdCB7IHJlbmRlclJlc291cmNlIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0cmVuZGVyUmVzb3VyY2U6IHN0YXRlLnJlbmRlclJlc291cmNlLFxuXHR9KSlcblxuXHRjb25zdCBpc1Jlc291cmNlQ2FsZW5kYXIgPSB2YXJpYW50ID09PSAncmVzb3VyY2UnXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKCdmbGV4IGZsZXgtMSByZWxhdGl2ZSBtaW4taC1bNjBweF0nLCBjbGFzc05hbWUpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLXJvdy0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0e2lzUmVzb3VyY2VDYWxlbmRhciAmJiAoXG5cdFx0XHRcdDxSZXNvdXJjZUNlbGxcblx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LTQwIG1pbi13LTQwIG1heC13LTQwIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGgtZnVsbFwiXG5cdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2Bob3Jpem9udGFsLXJvdy1sYWJlbC0ke3Jlc291cmNlPy5pZH1gfVxuXHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHtyZW5kZXJSZXNvdXJjZSA/IChcblx0XHRcdFx0XHRcdHJlbmRlclJlc291cmNlKHJlc291cmNlKVxuXHRcdFx0XHRcdCkgOiAoXG5cdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cIndyYXAtYnJlYWstd29yZCB0ZXh0LXNtXCI+e3Jlc291cmNlPy50aXRsZX08L2Rpdj5cblx0XHRcdFx0XHQpfVxuXHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdCl9XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtMSBmbGV4XCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEdyaWRDZWxsXG5cdFx0XHRcdFx0XHRcdFx0YWxsRGF5PXthbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdCdmbGV4LTEgdy0yMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RSb3cgJiYgJ2JvcmRlci1iLTAnLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sLmNsYXNzTmFtZVxuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5PXtjb2wuZGF5fVxuXHRcdFx0XHRcdFx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdFx0XHRcdFx0XHRob3VyPXtncmlkVHlwZSA9PT0gJ2hvdXInID8gY29sLmRheS5ob3VyKCkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtjb2wuZGF5LnRvSVNPU3RyaW5nKCl9XG5cdFx0XHRcdFx0XHRcdFx0cmVzb3VyY2VJZD17cmVzb3VyY2U/LmlkfVxuXHRcdFx0XHRcdFx0XHRcdHNob3dEYXlOdW1iZXI9e3Nob3dEYXlOdW1iZXJ9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBFdmVudHMgbGF5ZXIgcG9zaXRpb25lZCBhYnNvbHV0ZWx5IG92ZXIgdGhlIHJvdyAqL31cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdDxIb3Jpem9udGFsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudHMtJHtpZH1gfVxuXHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRkYXlzPXtjb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wuZGF5KS5maWx0ZXIoQm9vbGVhbil9XG5cdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZT8uaWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRSb3cgPSBtZW1vKE5vTWVtb0hvcml6b250YWxHcmlkUm93KVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgbWVtbywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRGF5TnVtYmVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2RheS1udW1iZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc0J1c2luZXNzSG91ciB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdXRpbHMvYnVzaW5lc3MtaG91cnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRob3VyPzogbnVtYmVyIC8vIE9wdGlvbmFsIGhvdXIgZm9yIGhvdXItYmFzZWQgZ3JpZHNcblx0bWludXRlPzogbnVtYmVyIC8vIE9wdGlvbmFsIG1pbnV0ZSBmb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzXG5cdGRheU1heEV2ZW50cz86IG51bWJlclxuXHRjbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY2xhc3NOYW1lIGZvciBjdXN0b20gc3R5bGluZ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyIC8vIE9wdGlvbmFsIHJlc291cmNlIElEIGZvciByZXNvdXJjZS1zcGVjaWZpYyBkYXkgY2VsbHNcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyAvLyBGdXR1cmUgdXNlIGZvciBkaWZmZXJlbnQgZ3JpZCB0eXBlc1xuXHRzaG91bGRSZW5kZXJFdmVudHM/OiBib29sZWFuIC8vIEZsYWcgdG8gZGV0ZXJtaW5lIGlmIGV2ZW50cyBzaG91bGQgYmUgcmVuZGVyZWRcblx0YWxsRGF5PzogYm9vbGVhbiAvLyBGbGFnIHRvIGluZGljYXRlIGlmIHRoaXMgaXMgYW4gYWxsLWRheSBjZWxsXG5cdHNob3dEYXlOdW1iZXI/OiBib29sZWFuIC8vIEZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBkYXkgbnVtYmVyXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vR3JpZENlbGw6IFJlYWN0LkZDPEdyaWRQcm9wcz4gPSAoe1xuXHRkYXksXG5cdGhvdXIsXG5cdG1pbnV0ZSxcblx0Y2xhc3NOYW1lID0gJycsXG5cdHJlc291cmNlSWQsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHNob3VsZFJlbmRlckV2ZW50cyA9IHRydWUsXG5cdGFsbERheSA9IGZhbHNlLFxuXHQnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxuXHRzaG93RGF5TnVtYmVyID0gZmFsc2UsXG5cdGNoaWxkcmVuLFxufSkgPT4ge1xuXHRjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuXHRcdG9wZW46ICgpID0+IHZvaWRcblx0XHRjbG9zZTogKCkgPT4gdm9pZFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuXHR9PihudWxsKVxuXHRjb25zdCB7XG5cdFx0ZGF5TWF4RXZlbnRzID0gMCxcblx0XHRnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0dCxcblx0XHRnZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0ZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBzdGF0ZS5maXJzdERheU9mV2Vlayxcblx0XHR0OiBzdGF0ZS50LFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlOiBzdGF0ZS5nZXRFdmVudHNGb3JSZXNvdXJjZSxcblx0XHRidXNpbmVzc0hvdXJzOiBzdGF0ZS5idXNpbmVzc0hvdXJzLFxuXHRcdGN1cnJlbnRMb2NhbGU6IHN0YXRlLmN1cnJlbnRMb2NhbGUsXG5cdH0pKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0aWYgKCFzaG91bGRSZW5kZXJFdmVudHMpIHtcblx0XHRcdHJldHVybiBbXVxuXHRcdH1cblxuXHRcdGxldCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcblx0XHRcdGRheS5zdGFydE9mKGdyaWRUeXBlKSxcblx0XHRcdGRheS5lbmRPZihncmlkVHlwZSlcblx0XHQpXG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR0b2RheUV2ZW50cyA9IHRvZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gZS5hbGxEYXkpXG5cdFx0fVxuXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZCkgPz8gW11cblxuXHRcdFx0cmV0dXJuIHRvZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKHJlKSA9PiBTdHJpbmcocmUuaWQpID09PSBTdHJpbmcoZXZlbnQuaWQpKVxuXHRcdFx0KVxuXHRcdH1cblxuXHRcdHJldHVybiB0b2RheUV2ZW50c1xuXHR9LCBbXG5cdFx0ZGF5LFxuXHRcdHJlc291cmNlSWQsXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdGdyaWRUeXBlLFxuXHRcdHNob3VsZFJlbmRlckV2ZW50cyxcblx0XHRhbGxEYXksXG5cdF0pXG5cblx0Ly8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG5cdGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcblx0XHRhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuXHRcdFx0ZGF5LFxuXHRcdFx0ZXZlbnRzLFxuXHRcdH0pXG5cdFx0YWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuXHR9XG5cblx0Y29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuXG5cdGNvbnN0IGhpZGRlbkV2ZW50c0NvdW50ID0gdG9kYXlFdmVudHMubGVuZ3RoIC0gZGF5TWF4RXZlbnRzXG5cdGNvbnN0IGhhc0hpZGRlbkV2ZW50cyA9IGhpZGRlbkV2ZW50c0NvdW50ID4gMFxuXG5cdGNvbnN0IGlzQnVzaW5lc3MgPSBpc0J1c2luZXNzSG91cih7XG5cdFx0ZGF0ZTogZGF5LFxuXHRcdGhvdXI6IGdyaWRUeXBlID09PSAnaG91cicgPyBkYXkuaG91cigpIDogdW5kZWZpbmVkLFxuXHRcdGJ1c2luZXNzSG91cnMsXG5cdH0pXG5cblx0Y29uc3QgaG91clN0ciA9IGRheS5mb3JtYXQoJ0hIJylcblx0Y29uc3QgbW0gPSBkYXkuZm9ybWF0KCdtbScpXG5cdGNvbnN0IGRhdGVUZXN0SWRCYXNlID1cblx0XHRncmlkVHlwZSA9PT0gJ2hvdXInXG5cdFx0XHQ/IGBkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX0tJHtob3VyU3RyfS0ke21tfWBcblx0XHRcdDogYGRheS1jZWxsLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWBcblxuXHRyZXR1cm4gKFxuXHRcdDw+XG5cdFx0XHQ8RHJvcHBhYmxlQ2VsbFxuXHRcdFx0XHRhbGxEYXk9e2FsbERheX1cblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctY2xpcCBwLTEgaG92ZXI6YmctYWNjZW50IG1pbi1oLVs2MHB4XSByZWxhdGl2ZSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgb25seTpib3JkZXItciBib3JkZXItYicsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPXtkYXRhVGVzdElkIHx8IGRhdGVUZXN0SWRCYXNlfVxuXHRcdFx0XHRkYXRlPXtkYXl9XG5cdFx0XHRcdGRpc2FibGVkPXshaXNCdXNpbmVzcyB8fCAhaXNDdXJyZW50TW9udGh9XG5cdFx0XHRcdGhvdXI9e2hvdXJ9XG5cdFx0XHRcdGlkPXtgZGF5LWNlbGwtJHtkYXkudG9JU09TdHJpbmcoKX0ke3Jlc291cmNlSWQgPyBgLXJlc291cmNlLSR7cmVzb3VyY2VJZH1gIDogJyd9YH1cblx0XHRcdFx0bWludXRlPXttaW51dGV9XG5cdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG5cdFx0XHRcdHR5cGU9XCJkYXktY2VsbFwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMSBoLWZ1bGwgdy1mdWxsXCI+XG5cdFx0XHRcdFx0e3Nob3dEYXlOdW1iZXIgJiYgPERheU51bWJlciBkYXRlPXtkYXl9IGxvY2FsZT17Y3VycmVudExvY2FsZX0gLz59XG5cblx0XHRcdFx0XHR7c2hvdWxkUmVuZGVyRXZlbnRzICYmIChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cblx0XHRcdFx0XHRcdFx0e3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLTUgdy1mdWxsXCJcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fS0ke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0ey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG5cdFx0XHRcdFx0XHRcdHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcblx0XHRcdFx0XHRcdFx0XHRcdG9uQ2xpY2s9eyhlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0b25LZXlEb3duPXsoZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUucHJldmVudERlZmF1bHQoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRyb2xlPVwiYnV0dG9uXCJcblx0XHRcdFx0XHRcdFx0XHRcdC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGFnLW92ZXItcm9sZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGFiSW5kZXg9ezB9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0K3toaWRkZW5FdmVudHNDb3VudH0ge3QoJ21vcmUnKX1cblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0e2NoaWxkcmVufVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRHJvcHBhYmxlQ2VsbD5cblxuXHRcdFx0ey8qIERpYWxvZyBmb3Igc2hvd2luZyBhbGwgZXZlbnRzICovfVxuXHRcdFx0PEFsbEV2ZW50RGlhbG9nIHJlZj17YWxsRXZlbnRzRGlhbG9nUmVmfSAvPlxuXHRcdDwvPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBHcmlkQ2VsbCA9IG1lbW8oTm9NZW1vR3JpZENlbGwpIGFzIHR5cGVvZiBOb01lbW9HcmlkQ2VsbFxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXlOdW1iZXJQcm9wcyB7XG5cdGRhdGU6IGRheWpzLkRheWpzXG5cdGxvY2FsZT86IHN0cmluZ1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBkYXkgbnVtYmVyIGZvciBhIGNhbGVuZGFyIGNlbGwsIGhpZ2hsaWdodGluZyAndG9kYXknIHdpdGggYSBwcmltYXJ5IGJhY2tncm91bmQuXG4gKi9cbmV4cG9ydCBjb25zdCBEYXlOdW1iZXI6IFJlYWN0LkZDPERheU51bWJlclByb3BzPiA9ICh7XG5cdGRhdGUsXG5cdGxvY2FsZSA9ICdlbicsXG5cdGNsYXNzTmFtZSxcbn0pID0+IHtcblx0Y29uc3QgaXNUb2RheSA9IGRhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc2hyaW5rLTAnLFxuXHRcdFx0XHRpc1RvZGF5ICYmICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGZvbnQtbWVkaXVtJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e1xuXHRcdFx0XHRpc1RvZGF5ID8gJ2RheS1udW1iZXItdG9kYXknIDogYGRheS1udW1iZXItJHtkYXRlLmZvcm1hdCgnRCcpfWBcblx0XHRcdH1cblx0XHQ+XG5cdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgZGF5OiAnbnVtZXJpYycgfSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQge1xuXHREaWFsb2csXG5cdERpYWxvZ0NvbnRlbnQsXG5cdERpYWxvZ0hlYWRlcixcblx0RGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aS9kaWFsb2cnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWREYXlFdmVudHMge1xuXHRkYXk6IGRheWpzLkRheWpzXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG59XG5cbmludGVyZmFjZSBBbGxFdmVudERpYWxvZ1Byb3BzIHtcblx0cmVmOiBSZWFjdC5SZWY8e1xuXHRcdG9wZW46ICgpID0+IHZvaWRcblx0XHRjbG9zZTogKCkgPT4gdm9pZFxuXHRcdHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuXHR9PlxufVxuXG5leHBvcnQgY29uc3QgQWxsRXZlbnREaWFsb2c6IFJlYWN0LkZDPEFsbEV2ZW50RGlhbG9nUHJvcHM+ID0gKHsgcmVmIH0pID0+IHtcblx0Y29uc3QgW2RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG5cdGNvbnN0IFtzZWxlY3RlZERheUV2ZW50cywgc2V0U2VsZWN0ZWREYXlFdmVudHNdID1cblx0XHR1c2VTdGF0ZTxTZWxlY3RlZERheUV2ZW50cyB8IG51bGw+KG51bGwpXG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0Y3VycmVudERhdGU6IHN0YXRlLmN1cnJlbnREYXRlLFxuXHRcdGZpcnN0RGF5T2ZXZWVrOiBzdGF0ZS5maXJzdERheU9mV2Vlayxcblx0fSkpXG5cblx0dXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG5cdFx0b3BlbjogKCkgPT4gc2V0RGlhbG9nT3Blbih0cnVlKSxcblx0XHRjbG9zZTogKCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSksXG5cdFx0c2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PlxuXHRcdFx0c2V0U2VsZWN0ZWREYXlFdmVudHMoZGF5RXZlbnRzKSxcblx0fSkpXG5cblx0Ly8gR2V0IHN0YXJ0IGRhdGUgZm9yIHRoZSBjdXJyZW50IG1vbnRoIHZpZXcgYmFzZWQgb24gZmlyc3REYXlPZldlZWtcblx0Y29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXG5cdC8vIENhbGN1bGF0ZSB0aGUgZmlyc3QgZGF5IG9mIHRoZSBjYWxlbmRhciBncmlkIGNvcnJlY3RseVxuXHQvLyBGaW5kIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayAoZS5nLiBTdW5kYXkgb3IgTW9uZGF5KSB0aGF0IGNvbWVzIGJlZm9yZSBvciBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFxuXHRsZXQgYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBmaXJzdERheU9mTW9udGguY2xvbmUoKVxuXHR3aGlsZSAoYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuZGF5KCkgIT09IGZpcnN0RGF5T2ZXZWVrKSB7XG5cdFx0YWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIgPSBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5zdWJ0cmFjdCgxLCAnZGF5Jylcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PERpYWxvZyBvbk9wZW5DaGFuZ2U9e3NldERpYWxvZ09wZW59IG9wZW49e2RpYWxvZ09wZW59PlxuXHRcdFx0PERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LWgtWzgwdmhdIG1heC13LW1kIG92ZXJmbG93LXktYXV0b1wiPlxuXHRcdFx0XHQ8RGlhbG9nSGVhZGVyPlxuXHRcdFx0XHRcdDxEaWFsb2dUaXRsZT5cblx0XHRcdFx0XHRcdHtzZWxlY3RlZERheUV2ZW50cz8uZGF5LmZvcm1hdCgnTU1NTSBELCBZWVlZJyl9XG5cdFx0XHRcdFx0PC9EaWFsb2dUaXRsZT5cblx0XHRcdFx0PC9EaWFsb2dIZWFkZXI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwibXQtNCBzcGFjZS15LTNcIj5cblx0XHRcdFx0XHR7c2VsZWN0ZWREYXlFdmVudHM/LmV2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCIgLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cblx0XHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2BhbGwtZXZlbnRzLWRpYWxvZy1ldmVudC0kJHtldmVudC5pZH1gfVxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50PXtldmVudH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2V2ZW50LmlkfVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvRGlhbG9nQ29udGVudD5cblx0XHQ8L0RpYWxvZz5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VEcmFnZ2FibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGdldEJvcmRlclJhZGl1c0NsYXNzID0gKFxuXHRpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuLFxuXHRpc1RydW5jYXRlZEVuZDogYm9vbGVhblxuKSA9PiB7XG5cdGlmIChpc1RydW5jYXRlZFN0YXJ0ICYmIGlzVHJ1bmNhdGVkRW5kKSB7XG5cdFx0cmV0dXJuICdyb3VuZGVkLW5vbmUnXG5cdH1cblx0aWYgKGlzVHJ1bmNhdGVkU3RhcnQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtci1tZCByb3VuZGVkLWwtbm9uZSdcblx0fVxuXHRpZiAoaXNUcnVuY2F0ZWRFbmQpIHtcblx0XHRyZXR1cm4gJ3JvdW5kZWQtbC1tZCByb3VuZGVkLXItbm9uZSdcblx0fVxuXHRyZXR1cm4gJ3JvdW5kZWQtbWQnXG59XG5cbmZ1bmN0aW9uIERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCh7XG5cdGVsZW1lbnRJZCxcblx0ZXZlbnQsXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdGRpc2FibGVEcmFnID0gZmFsc2UsXG59OiB7XG5cdGVsZW1lbnRJZDogc3RyaW5nXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHRzdHlsZT86IENTU1Byb3BlcnRpZXNcblx0ZXZlbnQ6IENhbGVuZGFyRXZlbnRcblx0ZGlzYWJsZURyYWc/OiBib29sZWFuXG59KSB7XG5cdGNvbnN0IHsgb25FdmVudENsaWNrLCByZW5kZXJFdmVudCwgZGlzYWJsZUV2ZW50Q2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cblx0XHR1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0XHRvbkV2ZW50Q2xpY2s6IHN0YXRlLm9uRXZlbnRDbGljayxcblx0XHRcdHJlbmRlckV2ZW50OiBzdGF0ZS5yZW5kZXJFdmVudCxcblx0XHRcdGRpc2FibGVFdmVudENsaWNrOiBzdGF0ZS5kaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcDogc3RhdGUuZGlzYWJsZURyYWdBbmREcm9wLFxuXHRcdH0pKVxuXG5cdGNvbnN0IHsgYXR0cmlidXRlcywgbGlzdGVuZXJzLCBzZXROb2RlUmVmLCBpc0RyYWdnaW5nIH0gPSB1c2VEcmFnZ2FibGUoe1xuXHRcdGlkOiBlbGVtZW50SWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0ZXZlbnQsXG5cdFx0XHR0eXBlOiAnY2FsZW5kYXItZXZlbnQnLFxuXHRcdH0sXG5cdFx0ZGlzYWJsZWQ6IGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCxcblx0fSlcblxuXHQvLyBEZWZhdWx0IGV2ZW50IGNvbnRlbnQgdG8gcmVuZGVyIGlmIGN1c3RvbSByZW5kZXJFdmVudCBpcyBub3QgcHJvdmlkZWRcblx0Y29uc3QgRGVmYXVsdEV2ZW50Q29udGVudCA9ICgpID0+IHtcblx0XHQvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGhhcyB0cnVuY2F0aW9uIGluZm9ybWF0aW9uXG5cdFx0Y29uc3QgZW5oYW5jZWRFdmVudCA9IGV2ZW50IGFzIHVua25vd24gYXMge1xuXHRcdFx0aXNUcnVuY2F0ZWRTdGFydD86IGJvb2xlYW5cblx0XHRcdGlzVHJ1bmNhdGVkRW5kPzogYm9vbGVhblxuXHRcdH1cblx0XHRjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZW5oYW5jZWRFdmVudC5pc1RydW5jYXRlZFN0YXJ0XG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkRW5kXG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdGV2ZW50LmJhY2tncm91bmRDb2xvciB8fCAnYmctYmx1ZS01MDAnLFxuXHRcdFx0XHRcdGV2ZW50LmNvbG9yIHx8ICd0ZXh0LXdoaXRlJyxcblx0XHRcdFx0XHQnaC1mdWxsIHctZnVsbCBweC0xIGJvcmRlci1bMS41cHhdIGJvcmRlci1jYXJkIHRleHQtbGVmdCBvdmVyZmxvdy1jbGlwIHJlbGF0aXZlJyxcblx0XHRcdFx0XHRnZXRCb3JkZXJSYWRpdXNDbGFzcyhpc1RydW5jYXRlZFN0YXJ0LCBpc1RydW5jYXRlZEVuZClcblx0XHRcdFx0KX1cblx0XHRcdFx0c3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBldmVudC5iYWNrZ3JvdW5kQ29sb3IsIGNvbG9yOiBldmVudC5jb2xvciB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogTGVmdCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuXHRcdFx0XHR7aXNUcnVuY2F0ZWRTdGFydCAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXG5cdFx0XHRcdHsvKiBFdmVudCB0aXRsZSAqL31cblx0XHRcdFx0PHBcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J3RleHQtWzEwcHhdIGZvbnQtc2VtaWJvbGQgc206dGV4dC14cyBtdC0wLjUnLFxuXHRcdFx0XHRcdFx0Ly8gQWRkIHNsaWdodCBwYWRkaW5nIHRvIGF2b2lkIG92ZXJsYXAgd2l0aCBpbmRpY2F0b3JzXG5cdFx0XHRcdFx0XHRpc1RydW5jYXRlZFN0YXJ0ICYmICdwbC0xJyxcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kICYmICdwci0xJ1xuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7ZXZlbnQudGl0bGV9XG5cdFx0XHRcdDwvcD5cblxuXHRcdFx0XHR7LyogUmlnaHQgY29udGludWF0aW9uIGluZGljYXRvciAqL31cblx0XHRcdFx0e2lzVHJ1bmNhdGVkRW5kICYmIChcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTAgdG9wLTAgYm90dG9tLTAgdy0wLjUgYmctZm9yZWdyb3VuZC8yNVwiPjwvZGl2PlxuXHRcdFx0XHQpfVxuXHRcdFx0PC9kaXY+XG5cdFx0KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRrZXk9e2VsZW1lbnRJZH1cblx0XHRcdFx0cmVmPXtzZXROb2RlUmVmfVxuXHRcdFx0XHR7Li4uYXR0cmlidXRlc31cblx0XHRcdFx0ey4uLmxpc3RlbmVyc31cblx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J3RydW5jYXRlIGgtZnVsbCB3LWZ1bGwnLFxuXHRcdFx0XHRcdGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcFxuXHRcdFx0XHRcdFx0PyBkaXNhYmxlRXZlbnRDbGlja1xuXHRcdFx0XHRcdFx0XHQ/ICdjdXJzb3ItZGVmYXVsdCdcblx0XHRcdFx0XHRcdFx0OiAnY3Vyc29yLXBvaW50ZXInXG5cdFx0XHRcdFx0XHQ6ICdjdXJzb3ItZ3JhYicsXG5cdFx0XHRcdFx0aXNEcmFnZ2luZyAmJlxuXHRcdFx0XHRcdFx0IShkaXNhYmxlRHJhZyB8fCBkaXNhYmxlRHJhZ0FuZERyb3ApICYmXG5cdFx0XHRcdFx0XHQnY3Vyc29yLWdyYWJiaW5nIHNoYWRvdy1sZycsXG5cdFx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTUwIH19XG5cdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTUwIH19XG5cdFx0XHRcdGxheW91dFxuXHRcdFx0XHRsYXlvdXRJZD17ZWxlbWVudElkfVxuXHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4ge1xuXHRcdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHRcdH19XG5cdFx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHRcdFx0dHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC40LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogVXNlIGN1c3RvbSByZW5kZXJFdmVudCBmcm9tIGNvbnRleHQgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGRlZmF1bHQgKi99XG5cdFx0XHRcdHtyZW5kZXJFdmVudCA/IHJlbmRlckV2ZW50KGV2ZW50KSA6IDxEZWZhdWx0RXZlbnRDb250ZW50IC8+fVxuXHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBEcmFnZ2FibGVFdmVudCA9IG1lbW8oXG5cdERyYWdnYWJsZUV2ZW50VW5tZW1vaXplZCxcblx0KHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiB7XG5cdFx0Ly8gQ29tcGFyZSB0aGUgZXNzZW50aWFsIHByb3BzIHRvIHByZXZlbnQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuXHRcdHJldHVybiAoXG5cdFx0XHRwcmV2UHJvcHMuZWxlbWVudElkID09PSBuZXh0UHJvcHMuZWxlbWVudElkICYmXG5cdFx0XHRwcmV2UHJvcHMuZGlzYWJsZURyYWcgPT09IG5leHRQcm9wcy5kaXNhYmxlRHJhZyAmJlxuXHRcdFx0cHJldlByb3BzLmNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmNsYXNzTmFtZSAmJlxuXHRcdFx0cHJldlByb3BzLmV2ZW50ID09PSBuZXh0UHJvcHMuZXZlbnRcblx0XHQpXG5cdH1cbilcbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cblxuaW1wb3J0IHsgdXNlRHJvcHBhYmxlIH0gZnJvbSAnQGRuZC1raXQvY29yZSdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuXHRpZDogc3RyaW5nXG5cdHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuXHRkYXRlOiBkYXlqcy5EYXlqc1xuXHRob3VyPzogbnVtYmVyXG5cdG1pbnV0ZT86IG51bWJlclxuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGFsbERheT86IGJvb2xlYW5cblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGRpc2FibGVkPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG5cdGlkLFxuXHR0eXBlLFxuXHRkYXRlLFxuXHRob3VyLFxuXHRtaW51dGUsXG5cdHJlc291cmNlSWQsXG5cdGFsbERheSxcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcblx0c3R5bGUsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGRpc2FibGVkID0gZmFsc2UsXG59OiBEcm9wcGFibGVDZWxsUHJvcHMpIHtcblx0Y29uc3QgeyBvbkNlbGxDbGljaywgZGlzYWJsZURyYWdBbmREcm9wLCBkaXNhYmxlQ2VsbENsaWNrLCBjbGFzc2VzT3ZlcnJpZGUgfSA9XG5cdFx0dXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdFx0b25DZWxsQ2xpY2s6IHN0YXRlLm9uQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZURyYWdBbmREcm9wOiBzdGF0ZS5kaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrOiBzdGF0ZS5kaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlOiBzdGF0ZS5jbGFzc2VzT3ZlcnJpZGUsXG5cdFx0fSkpXG5cblx0Y29uc3QgeyBpc092ZXIsIHNldE5vZGVSZWYgfSA9IHVzZURyb3BwYWJsZSh7XG5cdFx0aWQsXG5cdFx0ZGF0YToge1xuXHRcdFx0dHlwZSxcblx0XHRcdGRhdGUsXG5cdFx0XHRob3VyLFxuXHRcdFx0bWludXRlLFxuXHRcdFx0cmVzb3VyY2VJZCxcblx0XHRcdGFsbERheSxcblx0XHR9LFxuXHRcdGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AgfHwgZGlzYWJsZWQsXG5cdH0pXG5cblx0Y29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpXG5cblx0XHRpZiAoZGlzYWJsZUNlbGxDbGljayB8fCBkaXNhYmxlZCkge1xuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RhcnQgPSBkYXRlLmhvdXIoaG91ciA/PyAwKS5taW51dGUobWludXRlID8/IDApXG5cdFx0bGV0IGVuZCA9IHN0YXJ0LmNsb25lKClcblx0XHRpZiAoaG91ciAhPT0gdW5kZWZpbmVkICYmIG1pbnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbmQgPSBlbmQuaG91cihob3VyKS5taW51dGUobWludXRlICsgMTUpIC8vIGRheSB2aWV3IHRpbWUgc2xvdHMgYXJlIDE1IG1pbnV0ZXNcblx0XHR9IGVsc2UgaWYgKGhvdXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0ZW5kID0gZW5kLmhvdXIoaG91ciArIDEpLm1pbnV0ZSgwKSAvLyB3ZWVrIHZpZXcgdGltZSBzbG90cyBhcmUgMSBob3VyXG5cdFx0fSBlbHNlIHtcblx0XHRcdGVuZCA9IGVuZC5ob3VyKDIzKS5taW51dGUoNTkpIC8vIG1vbnRoIHZpZXcgZnVsbCBkYXlcblx0XHR9XG5cblx0XHRvbkNlbGxDbGljayh7IHN0YXJ0LCBlbmQsIHJlc291cmNlSWQsIGFsbERheSB9KVxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50c1xuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdkcm9wcGFibGUtY2VsbCcsXG5cdFx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdFx0aXNPdmVyICYmICFkaXNhYmxlRHJhZ0FuZERyb3AgJiYgIWRpc2FibGVkICYmICdiZy1hY2NlbnQnLFxuXHRcdFx0XHRkaXNhYmxlQ2VsbENsaWNrIHx8IGRpc2FibGVkID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcicsXG5cdFx0XHRcdGRpc2FibGVkICYmIChjbGFzc2VzT3ZlcnJpZGU/LmRpc2FibGVkQ2VsbCB8fCBESVNBQkxFRF9DRUxMX0NMQVNTTkFNRSlcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHRcdG9uQ2xpY2s9e2hhbmRsZUNlbGxDbGlja31cblx0XHRcdHJlZj17c2V0Tm9kZVJlZn1cblx0XHRcdHN0eWxlPXtzdHlsZX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW59XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VDZWxsUHJvcHMge1xuXHRyZXNvdXJjZTogUmVzb3VyY2Vcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2VsbDogUmVhY3QuRkM8UmVzb3VyY2VDZWxsUHJvcHM+ID0gKHtcblx0cmVzb3VyY2UsXG5cdGNsYXNzTmFtZSxcblx0Y2hpbGRyZW4sXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHAtMiBmbGV4LTEgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG5cdFx0XHRzdHlsZT17e1xuXHRcdFx0XHRjb2xvcjogcmVzb3VyY2UuY29sb3IsXG5cdFx0XHRcdGJhY2tncm91bmRDb2xvcjogcmVzb3VyY2UuYmFja2dyb3VuZENvbG9yLFxuXHRcdFx0fX1cblx0XHQ+XG5cdFx0XHR7Y2hpbGRyZW4gPz8gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdHJ1bmNhdGVcIj57cmVzb3VyY2UudGl0bGV9PC9kaXY+XG5cdFx0XHQpfVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRXZWVrRXZlbnRzIH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9ob29rcy91c2VQcm9jZXNzZWRXZWVrRXZlbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGFsbERheT86IGJvb2xlYW5cbn1cblxuY29uc3QgTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcjogUmVhY3QuRkM8XG5cdEhvcml6b250YWxHcmlkRXZlbnRzTGF5ZXJQcm9wc1xuPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHJlc291cmNlSWQsXG5cdGRheU51bWJlckhlaWdodCxcblx0J2RhdGEtdGVzdGlkJzogZGF0YVRlc3RJZCxcblx0YWxsRGF5LFxufSkgPT4ge1xuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cblx0Y29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoe1xuXHRcdGRheXMsXG5cdFx0Z3JpZFR5cGUsXG5cdFx0cmVzb3VyY2VJZCxcblx0XHRkYXlOdW1iZXJIZWlnaHQsXG5cdFx0YWxsRGF5LFxuXHR9KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cHJvY2Vzc2VkV2Vla0V2ZW50cy5tYXAoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYCR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9LSR7cmVzb3VyY2VJZCA/PyAnbm8tcmVzb3VyY2UnfWBcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgaG9yaXpvbnRhbC1ldmVudC0ke2V2ZW50LmlkfWB9XG5cdFx0XHRcdFx0XHRrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cblx0XHRcdFx0XHRcdHN0eWxlPXt7XG5cdFx0XHRcdFx0XHRcdGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcblx0XHRcdFx0XHRcdFx0dG9wOiBgJHtldmVudC50b3B9cHhgLFxuXHRcdFx0XHRcdFx0XHRoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8RHJhZ2dhYmxlRXZlbnRcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuXHRcdFx0XHRcdFx0XHRlbGVtZW50SWQ9e2V2ZW50S2V5fVxuXHRcdFx0XHRcdFx0XHRldmVudD17ZXZlbnR9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllciA9IG1lbW8oTm9NZW1vSG9yaXpvbnRhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRQb3NpdGlvbmVkRXZlbnRzIH0gZnJvbSAnQC9saWIvdXRpbHMvcG9zaXRpb24td2Vlay1ldmVudHMnXG5cbmludGVyZmFjZSBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGFsbERheT86IGJvb2xlYW5cblx0ZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGFsbERheSxcblx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRyZXNvdXJjZUlkLFxuXHRncmlkVHlwZSxcbn06IFVzZVByb2Nlc3NlZFdlZWtFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCB7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGRheU1heEV2ZW50cyxcblx0XHRldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2UsXG5cdH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiBzdGF0ZS5nZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG5cdFx0ZGF5TWF4RXZlbnRzOiBzdGF0ZS5kYXlNYXhFdmVudHMsXG5cdFx0ZXZlbnRTcGFjaW5nOiBzdGF0ZS5ldmVudFNwYWNpbmcsXG5cdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IHN0YXRlLmdldEV2ZW50c0ZvclJlc291cmNlLFxuXHR9KSlcblxuXHRjb25zdCB3ZWVrU3RhcnQgPSBkYXlzLmF0KDApLnN0YXJ0T2YoJ2RheScpXG5cdGNvbnN0IHdlZWtFbmQgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcblxuXHRjb25zdCBldmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRsZXQgd2Vla0V2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cdFx0aWYgKHJlc291cmNlSWQpIHtcblx0XHRcdGNvbnN0IHJlc291cmNlRXZlbnRzID0gZ2V0RXZlbnRzRm9yUmVzb3VyY2UocmVzb3VyY2VJZClcblx0XHRcdHdlZWtFdmVudHMgPSB3ZWVrRXZlbnRzLmZpbHRlcigoZXZlbnQpID0+XG5cdFx0XHRcdHJlc291cmNlRXZlbnRzLnNvbWUoKGUpID0+IFN0cmluZyhlLmlkKSA9PT0gU3RyaW5nKGV2ZW50LmlkKSlcblx0XHRcdClcblx0XHR9XG5cblx0XHRpZiAoYWxsRGF5KSB7XG5cdFx0XHR3ZWVrRXZlbnRzID0gd2Vla0V2ZW50cy5maWx0ZXIoKGUpID0+ICEhZS5hbGxEYXkgPT09IGFsbERheSlcblx0XHR9XG5cblx0XHRyZXR1cm4gd2Vla0V2ZW50c1xuXHR9LCBbXG5cdFx0Z2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdHdlZWtTdGFydCxcblx0XHR3ZWVrRW5kLFxuXHRcdHJlc291cmNlSWQsXG5cdFx0YWxsRGF5LFxuXHRdKVxuXG5cdC8vIEdldCBhbGwgZXZlbnRzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhpcyB3ZWVrXG5cdGNvbnN0IHBvc2l0aW9uZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0UG9zaXRpb25lZEV2ZW50cyh7XG5cdFx0XHRkYXlzLFxuXHRcdFx0ZXZlbnRzLFxuXHRcdFx0ZGF5TWF4RXZlbnRzLFxuXHRcdFx0ZGF5TnVtYmVySGVpZ2h0LFxuXHRcdFx0ZXZlbnRTcGFjaW5nLFxuXHRcdFx0Z3JpZFR5cGUsXG5cdFx0fSlcblx0fSwgW2RheXMsIGRheU1heEV2ZW50cywgZGF5TnVtYmVySGVpZ2h0LCBldmVudFNwYWNpbmcsIGV2ZW50cywgZ3JpZFR5cGVdKVxuXG5cdHJldHVybiBwb3NpdGlvbmVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7XG5cdERBWV9OVU1CRVJfSEVJR0hULFxuXHRFVkVOVF9CQVJfSEVJR0hULFxuXHRHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5pbnRlcmZhY2UgUG9zaXRpb25lZEV2ZW50IGV4dGVuZHMgQ2FsZW5kYXJFdmVudCB7XG5cdGxlZnQ6IG51bWJlciAvLyBMZWZ0IHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0d2lkdGg6IG51bWJlciAvLyBXaWR0aCBpbiBwZXJjZW50YWdlXG5cdHRvcDogbnVtYmVyIC8vIFRvcCBwb3NpdGlvbiBpbiBwZXJjZW50YWdlXG5cdGhlaWdodDogbnVtYmVyIC8vIEhlaWdodCBpbiBwZXJjZW50YWdlXG5cdHBvc2l0aW9uOiBudW1iZXIgLy8gUG9zaXRpb24gaW4gdGhlIHJvdyAoMCBmb3IgZmlyc3QsIDEgZm9yIHNlY29uZCwgZXRjLilcblx0aXNUcnVuY2F0ZWRTdGFydDogYm9vbGVhbiAvLyBXaGV0aGVyIHRoZSBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIHN0YXJ0XG5cdGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgZW5kXG59XG5cbmludGVyZmFjZSBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG5cdGRheU1heEV2ZW50czogbnVtYmVyXG5cdGRheU51bWJlckhlaWdodD86IG51bWJlclxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG5cdGV2ZW50U3BhY2luZz86IG51bWJlciAvLyBDdXN0b20gdmVydGljYWwgc3BhY2luZyBiZXR3ZWVuIGV2ZW50cyAoZGVmYXVsdHMgdG8gR0FQX0JFVFdFRU5fRUxFTUVOVFMpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb3NpdGlvbmVkRXZlbnRzID0gKHtcblx0ZGF5cyxcblx0ZXZlbnRzLFxuXHRkYXlNYXhFdmVudHMsXG5cdGRheU51bWJlckhlaWdodCA9IERBWV9OVU1CRVJfSEVJR0hULFxuXHRncmlkVHlwZSA9ICdkYXknLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcbn06IEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcykgPT4ge1xuXHRjb25zdCBmaXJzdERheSA9IGRheXNbMF0uc3RhcnRPZignZGF5Jylcblx0Y29uc3QgbGFzdERheSA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuXHRjb25zdCBkYXlDb3VudCA9IGRheXMubGVuZ3RoXG5cblx0Ly8gU2VwYXJhdGUgbXVsdGktZGF5IGFuZCBzaW5nbGUtZGF5IGV2ZW50c1xuXHRjb25zdCBtdWx0aURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID4gMClcblx0Y29uc3Qgc2luZ2xlRGF5RXZlbnRzID0gZXZlbnRzLmZpbHRlcihcblx0XHQoZSkgPT4gZS5lbmQuZGlmZihlLnN0YXJ0LCBncmlkVHlwZSkgPT09IDBcblx0KVxuXG5cdC8vIFNvcnQgbXVsdGktZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlLCB0aGVuIGJ5IGR1cmF0aW9uXG5cdGNvbnN0IHNvcnRlZE11bHRpRGF5ID0gWy4uLm11bHRpRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PiB7XG5cdFx0Y29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG5cdFx0aWYgKHN0YXJ0RGlmZiAhPT0gMCkge1xuXHRcdFx0cmV0dXJuIHN0YXJ0RGlmZlxuXHRcdH1cblx0XHRyZXR1cm4gYi5lbmQuZGlmZihiLnN0YXJ0KSAtIGEuZW5kLmRpZmYoYS5zdGFydCkgLy8gTG9uZ2VyIGV2ZW50cyBmaXJzdFxuXHR9KVxuXG5cdC8vIFNvcnQgc2luZ2xlLWRheSBldmVudHMgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRTaW5nbGVEYXkgPSBbLi4uc2luZ2xlRGF5RXZlbnRzXS5zb3J0KChhLCBiKSA9PlxuXHRcdGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHQpXG5cblx0Ly8gQ3JlYXRlIGRheUNvdW50IHggZGF5TWF4RXZlbnRzIGdyaWQgd2l0aCBmbGFnc1xuXHRjb25zdCBncmlkOiB7IHRha2VuOiBib29sZWFuOyBldmVudDogQ2FsZW5kYXJFdmVudCB8IG51bGwgfVtdW10gPSBbXVxuXHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0Z3JpZFtyb3ddID0gW11cblx0XHRmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBkYXlDb3VudDsgY29sKyspIHtcblx0XHRcdGdyaWRbcm93XVtjb2xdID0geyB0YWtlbjogZmFsc2UsIGV2ZW50OiBudWxsIH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBwcm9jZXNzZWRFdmVudHM6IFBvc2l0aW9uZWRFdmVudFtdID0gW11cblxuXHQvLyBTdGVwIDE6IEFzc2lnbiBwb3NpdGlvbnMgdG8gbXVsdGktZGF5IGV2ZW50cyBmaXJzdFxuXHRmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZE11bHRpRGF5KSB7XG5cdFx0Y29uc3QgZXZlbnRTdGFydCA9IGRheWpzLm1heChldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKSwgZmlyc3REYXkpXG5cdFx0Y29uc3QgYWRqdXN0ZWRFbmQgPVxuXHRcdFx0Z3JpZFR5cGUgPT09ICdob3VyJyA/IGV2ZW50LmVuZC5zdWJ0cmFjdCgxLCAnbWludXRlJykgOiBldmVudC5lbmRcblx0XHRjb25zdCBldmVudEVuZCA9IGRheWpzLm1pbihhZGp1c3RlZEVuZC5zdGFydE9mKGdyaWRUeXBlKSwgbGFzdERheSlcblx0XHRjb25zdCBzdGFydENvbCA9IE1hdGgubWF4KDAsIGV2ZW50U3RhcnQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXHRcdGNvbnN0IGVuZENvbCA9IE1hdGgubWluKGRheUNvdW50IC0gMSwgZXZlbnRFbmQuZGlmZihmaXJzdERheSwgZ3JpZFR5cGUpKVxuXG5cdFx0Ly8gRGV0ZWN0IGlmIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgYm91bmRhcmllc1xuXHRcdGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBldmVudC5zdGFydC5zdGFydE9mKGdyaWRUeXBlKS5pc0JlZm9yZShmaXJzdERheSlcblx0XHRjb25zdCBpc1RydW5jYXRlZEVuZCA9IGV2ZW50LmVuZC5zdGFydE9mKGdyaWRUeXBlKS5pc0FmdGVyKGxhc3REYXkpXG5cblx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIGV2ZW50IHN0YXJ0aW5nIGZyb20gaXRzIG9yaWdpbmFsIHN0YXJ0IGNvbHVtblxuXHRcdGxldCBwbGFjZWRTdWNjZXNzZnVsbHkgPSBmYWxzZVxuXG5cdFx0Ly8gRmlyc3QgdHJ5OiBwbGFjZSBmcm9tIG9yaWdpbmFsIHN0YXJ0IHBvc2l0aW9uXG5cdFx0bGV0IGFzc2lnbmVkUm93ID0gLTFcblx0XHRmb3IgKGxldCByb3cgPSAwOyByb3cgPCBkYXlNYXhFdmVudHM7IHJvdysrKSB7XG5cdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0aWYgKGdyaWRbcm93XVtjb2xdLnRha2VuKSB7XG5cdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChjYW5QbGFjZSkge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50IHRvIGFsbCBpdHMgY29sdW1uc1xuXHRcdGlmIChhc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdGZvciAobGV0IGNvbCA9IHN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuXHRcdFx0XHRncmlkW2Fzc2lnbmVkUm93XVtjb2xdID0geyB0YWtlbjogdHJ1ZSwgZXZlbnQgfVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgcmVuZGVyaW5nXG5cdFx0XHRjb25zdCBzcGFuRGF5cyA9IGVuZENvbCAtIHN0YXJ0Q29sICsgMVxuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoc3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHdpZHRoOiAoc3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHR9XG5cblx0XHQvLyBJZiBjb3VsZG4ndCBwbGFjZSBhdCBvcmlnaW5hbCBwb3NpdGlvbiwgdHJ5IHRydW5jYXRlZCB2ZXJzaW9ucyBzdGFydGluZyBmcm9tIGxhdGVyIGRheXNcblx0XHRpZiAoIXBsYWNlZFN1Y2Nlc3NmdWxseSkge1xuXHRcdFx0Zm9yIChcblx0XHRcdFx0bGV0IHRyeVN0YXJ0Q29sID0gc3RhcnRDb2wgKyAxO1xuXHRcdFx0XHR0cnlTdGFydENvbCA8PSBlbmRDb2w7XG5cdFx0XHRcdHRyeVN0YXJ0Q29sKytcblx0XHRcdCkge1xuXHRcdFx0XHQvLyBUcnkgdG8gcGxhY2UgdGhlIHRydW5jYXRlZCBldmVudCBzdGFydGluZyBmcm9tIHRoaXMgY29sdW1uXG5cdFx0XHRcdGxldCB0cnVuY2F0ZWRBc3NpZ25lZFJvdyA9IC0xXG5cdFx0XHRcdGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGRheU1heEV2ZW50czsgcm93KyspIHtcblx0XHRcdFx0XHRsZXQgY2FuUGxhY2UgPSB0cnVlXG5cdFx0XHRcdFx0Zm9yIChsZXQgY29sID0gdHJ5U3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG5cdFx0XHRcdFx0XHRpZiAoZ3JpZFtyb3ddW2NvbF0udGFrZW4pIHtcblx0XHRcdFx0XHRcdFx0Y2FuUGxhY2UgPSBmYWxzZVxuXHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2FuUGxhY2UpIHtcblx0XHRcdFx0XHRcdHRydW5jYXRlZEFzc2lnbmVkUm93ID0gcm93XG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHdlIGZvdW5kIGEgcm93IGZvciB0aGUgdHJ1bmNhdGVkIHZlcnNpb24sIHBsYWNlIGl0XG5cdFx0XHRcdGlmICh0cnVuY2F0ZWRBc3NpZ25lZFJvdyAhPT0gLTEpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcblx0XHRcdFx0XHRcdGdyaWRbdHJ1bmNhdGVkQXNzaWduZWRSb3ddW2NvbF0gPSB7IHRha2VuOiB0cnVlLCBldmVudCB9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHRoZSB0cnVuY2F0ZWQgcmVuZGVyaW5nXG5cdFx0XHRcdFx0Y29uc3QgdHJ1bmNhdGVkU3BhbkRheXMgPSBlbmRDb2wgLSB0cnlTdGFydENvbCArIDFcblx0XHRcdFx0XHRwcm9jZXNzZWRFdmVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHRsZWZ0OiAodHJ5U3RhcnRDb2wgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdFx0XHR3aWR0aDogKHRydW5jYXRlZFNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHRcdFx0dG9wOlxuXHRcdFx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdFx0XHRldmVudFNwYWNpbmcgK1xuXHRcdFx0XHRcdFx0XHR0cnVuY2F0ZWRBc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgZXZlbnRTcGFjaW5nKSxcblx0XHRcdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0XHRcdHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcblx0XHRcdFx0XHRcdC4uLmV2ZW50LFxuXHRcdFx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydDogdHJ1ZSwgLy8gQWx3YXlzIHRydW5jYXRlZCBhdCBzdGFydCB3aGVuIHVzaW5nIHRoaXMgZmFsbGJhY2sgbG9naWNcblx0XHRcdFx0XHRcdGlzVHJ1bmNhdGVkRW5kLFxuXHRcdFx0XHRcdH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuXHRcdFx0XHRcdHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcblx0XHRcdFx0XHRicmVhayAvLyBTdWNjZXNzZnVsbHkgcGxhY2VkLCBzdG9wIHRyeWluZyBvdGhlciBzdGFydCBwb3NpdGlvbnNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFN0ZXAgMjogRmlsbCBnYXBzIHdpdGggc2luZ2xlLWRheSBldmVudHNcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRTaW5nbGVEYXkpIHtcblx0XHRjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcblx0XHQvLyBDbGFtcCBjb2wgdG8gdmFsaWQgZ3JpZCBib3VuZHMgdG8gcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGdyaWQgcG9zaXRpb25zXG5cdFx0Y29uc3QgY29sID0gTWF0aC5tYXgoXG5cdFx0XHQwLFxuXHRcdFx0TWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblx0XHQpXG5cblx0XHQvLyBTaW5nbGUtZGF5IGV2ZW50cyBhcmUgbm90IHRydW5jYXRlZCBieSBkZWZpbml0aW9uXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGZhbHNlXG5cdFx0Y29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBmYWxzZVxuXG5cdFx0Ly8gRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIHJvdyBpbiB0aGlzIGNvbHVtblxuXHRcdGxldCBhc3NpZ25lZFJvdyA9IC0xXG5cdFx0Zm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuXHRcdFx0aWYgKCFncmlkW3Jvd11bY29sXS50YWtlbikge1xuXHRcdFx0XHRhc3NpZ25lZFJvdyA9IHJvd1xuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50XG5cdFx0aWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuXHRcdFx0Z3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblxuXHRcdFx0Ly8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuXHRcdFx0cHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuXHRcdFx0XHRsZWZ0OiAoY29sIC8gZGF5Q291bnQpICogMTAwLFxuXHRcdFx0XHR3aWR0aDogKDEgLyBkYXlDb3VudCkgKiAxMDAsXG5cdFx0XHRcdHRvcDpcblx0XHRcdFx0XHRkYXlOdW1iZXJIZWlnaHQgK1xuXHRcdFx0XHRcdGV2ZW50U3BhY2luZyArXG5cdFx0XHRcdFx0YXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIGV2ZW50U3BhY2luZyksXG5cdFx0XHRcdGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcblx0XHRcdFx0cG9zaXRpb246IGFzc2lnbmVkUm93LFxuXHRcdFx0XHQuLi5ldmVudCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRTdGFydCxcblx0XHRcdFx0aXNUcnVuY2F0ZWRFbmQsXG5cdFx0XHR9IGFzIFBvc2l0aW9uZWRFdmVudClcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBBbGxEYXlDZWxsUHJvcHMge1xuXHRjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vQWxsRGF5Q2VsbDogUmVhY3QuRkM8QWxsRGF5Q2VsbFByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG5cdGNvbnN0IHsgdCB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoeyB0OiBzdGF0ZS50IH0pKVxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCd3LTE2IGJvcmRlci1yIHNocmluay0wIHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHNtOnRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdD5cblx0XHRcdHt0KCdhbGxEYXknKX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQWxsRGF5Q2VsbCA9IG1lbW8oTm9NZW1vQWxsRGF5Q2VsbClcbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBHcmlkQ2VsbCB9IGZyb20gJy4uL2dyaWQtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyIH0gZnJvbSAnLi92ZXJ0aWNhbC1ncmlkLWV2ZW50cy1sYXllcidcblxuZXhwb3J0IGludGVyZmFjZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB7XG5cdGlkOiBzdHJpbmdcblx0ZGF5OiBkYXlqcy5EYXlqc1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdGRheXM6IGRheWpzLkRheWpzW10gLy8gVGhlIHNwZWNpZmljIGRheSB0aGlzIGNvbHVtbiByZXByZXNlbnRzXG5cdGNsYXNzTmFtZT86IHN0cmluZ1xuXHQnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0cmVuZGVySGVhZGVyPzogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG5cdHJlbmRlckNlbGw/OiAoZGF0ZTogZGF5anMuRGF5anMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXHRub0V2ZW50cz86IGJvb2xlYW5cblx0LyoqIE9wdGlvbmFsIGFycmF5IG9mIG1pbnV0ZSBzbG90cyBieSB3aGljaCB0aGUgaG91ciBpcyBkaXZpZGVkXG5cdCAqIGUuZy4sIFswLCAxNSwgMzAsIDQ1XSBmb3IgcXVhcnRlci1ob3VyIHNsb3RzXG5cdCAqL1xuXHRjZWxsU2xvdHM/OiBudW1iZXJbXVxuXHQvKiogV2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IGNvbHVtbiBpbiB0aGUgZ3JpZCAqL1xuXHRpc0xhc3RDb2x1bW4/OiBib29sZWFuXG59XG5cbmNvbnN0IE5vTWVtb1ZlcnRpY2FsR3JpZENvbDogUmVhY3QuRkM8VmVydGljYWxHcmlkQ29sUHJvcHM+ID0gKHtcblx0aWQsXG5cdGRheXMsXG5cdHJlc291cmNlSWQsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG5cdGdyaWRUeXBlLFxuXHRjbGFzc05hbWUsXG5cdHJlbmRlckNlbGwsXG5cdG5vRXZlbnRzLFxuXHRjZWxsU2xvdHMgPSBbNjBdLCAvLyBEZWZhdWx0IHRvIGZ1bGwgaG91ciBzbG90c1xuXHRpc0xhc3RDb2x1bW4sXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggZmxleC1jb2wgZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtaW4tdy01MCBiZy1iYWNrZ3JvdW5kIHJlbGF0aXZlJyxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWQgfHwgYHZlcnRpY2FsLWNvbC0ke2lkfWB9XG5cdFx0PlxuXHRcdFx0ey8qIFRpbWUgc2xvdHMgKi99XG5cdFx0XHQ8ZGl2XG5cdFx0XHRcdGNsYXNzTmFtZT1cInctZnVsbCByZWxhdGl2ZSBncmlkXCJcblx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRncmlkVGVtcGxhdGVSb3dzOiBgcmVwZWF0KCR7ZGF5cy5sZW5ndGh9LCBtaW5tYXgoMCwgMWZyKSlgLFxuXHRcdFx0XHR9fVxuXHRcdFx0PlxuXHRcdFx0XHR7ZGF5cy5tYXAoKGRheSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGhvdXJTdHIgPSBkYXkuZm9ybWF0KCdISCcpXG5cdFx0XHRcdFx0Y29uc3QgZGF0ZVN0ciA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG5cdFx0XHRcdFx0aWYgKHJlbmRlckNlbGwpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHRlc3RJZCA9XG5cdFx0XHRcdFx0XHRcdGlkID09PSAndGltZS1jb2wnXG5cdFx0XHRcdFx0XHRcdFx0PyBgdmVydGljYWwtdGltZS0ke2hvdXJTdHJ9YFxuXHRcdFx0XHRcdFx0XHRcdDogYHZlcnRpY2FsLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LTAwJHtyZXNvdXJjZUlkID8gYC0ke3Jlc291cmNlSWR9YCA6ICcnfWBcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJoLVs2MHB4XSBib3JkZXItYiBib3JkZXItclwiXG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e3Rlc3RJZH1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn1gfVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0e3JlbmRlckNlbGwoZGF5KX1cblx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGNlbGxTbG90cy5tYXAoKG1pbnV0ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbSA9IG1pbnV0ZSA9PT0gNjAgPyB1bmRlZmluZWQgOiBtaW51dGVcblx0XHRcdFx0XHRcdGNvbnN0IG1tID0gbSA9PT0gdW5kZWZpbmVkID8gJzAwJyA6IFN0cmluZyhtKS5wYWRTdGFydCgyLCAnMCcpXG5cdFx0XHRcdFx0XHRjb25zdCB0ZXN0SWQgPSBgdmVydGljYWwtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tJHttbX0ke3Jlc291cmNlSWQgPyBgLSR7cmVzb3VyY2VJZH1gIDogJyd9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8R3JpZENlbGxcblx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0J2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJyxcblx0XHRcdFx0XHRcdFx0XHRcdG1pbnV0ZSA9PT0gNjAgPyAnJyA6ICdib3JkZXItZGFzaGVkIGgtWzE1cHhdIG1pbi1oLVsxNXB4XScsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0xhc3RDb2x1bW4gPyAnYm9yZGVyLXItMCcgOiAnYm9yZGVyLXInXG5cdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17dGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdGRheT17bSA/IGRheS5taW51dGUobSkgOiBkYXl9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGhvdXI9e2RheS5ob3VyKCl9XG5cdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LSR7bW19LSR7cmVzb3VyY2VJZCB8fCAnbm8tcmVzb3VyY2UnfWB9XG5cdFx0XHRcdFx0XHRcdFx0bWludXRlPXttfVxuXHRcdFx0XHRcdFx0XHRcdHJlc291cmNlSWQ9e3Jlc291cmNlSWR9IC8vIEV2ZW50cyBhcmUgcmVuZGVyZWQgaW4gYSBzZXBhcmF0ZSBsYXllclxuXHRcdFx0XHRcdFx0XHRcdHNob3VsZFJlbmRlckV2ZW50cz17ZmFsc2V9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fSl9XG5cblx0XHRcdFx0ey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cblx0XHRcdFx0eyFub0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuXHRcdFx0XHRcdFx0PFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyXG5cdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgdmVydGljYWwtZXZlbnRzLSR7aWR9YH1cblx0XHRcdFx0XHRcdFx0ZGF5cz17ZGF5c31cblx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KX1cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQpXG59XG5cbmV4cG9ydCBjb25zdCBWZXJ0aWNhbEdyaWRDb2wgPSBtZW1vKFxuXHROb01lbW9WZXJ0aWNhbEdyaWRDb2xcbikgYXMgdHlwZW9mIE5vTWVtb1ZlcnRpY2FsR3JpZENvbFxuIiwKICAgICJpbXBvcnQgeyBtZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDdXJyZW50VGltZUluZGljYXRvciB9IGZyb20gJ0AvY29tcG9uZW50cy9jdXJyZW50LXRpbWUtaW5kaWNhdG9yJ1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZERheUV2ZW50cyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkRGF5RXZlbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgVmVydGljYWxHcmlkRXZlbnRzTGF5ZXJQcm9wcyB7XG5cdGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcblx0ZGF5czogZGF5anMuRGF5anNbXSAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgbGF5ZXIgcmVwcmVzZW50c1xuXHRyZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG5cdCdkYXRhLXRlc3RpZCc/OiBzdHJpbmdcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkRXZlbnRzTGF5ZXI6IFJlYWN0LkZDPFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyUHJvcHM+ID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdHJlc291cmNlSWQsXG5cdCdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlUHJvY2Vzc2VkRGF5RXZlbnRzKHsgZGF5cywgZ3JpZFR5cGUsIHJlc291cmNlSWQgfSlcblx0Y29uc3QgcmFuZ2VTdGFydCA9IGRheXMuYXQoMClcblx0Y29uc3QgcmFuZ2VFbmQgPSBkYXlzLmF0KC0xKT8uYWRkKDEsIGdyaWRUeXBlKVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiXG5cdFx0XHRkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cblx0XHQ+XG5cdFx0XHR7cmFuZ2VTdGFydCAmJiByYW5nZUVuZCAmJiAoXG5cdFx0XHRcdDxDdXJyZW50VGltZUluZGljYXRvciByYW5nZUVuZD17cmFuZ2VFbmR9IHJhbmdlU3RhcnQ9e3JhbmdlU3RhcnR9IC8+XG5cdFx0XHQpfVxuXHRcdFx0e3RvZGF5RXZlbnRzLm1hcCgoZXZlbnQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGV2ZW50S2V5ID0gYGV2ZW50LSR7ZXZlbnQuaWR9LSR7aW5kZXh9LSR7ZGF5cy5hdCgwKS50b0lTT1N0cmluZygpfS0ke3Jlc291cmNlSWQgPz8gJ25vLXJlc291cmNlJ31gXG5cdFx0XHRcdGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcblxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImFic29sdXRlXCJcblx0XHRcdFx0XHRcdGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuXHRcdFx0XHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0XHRcdFx0bGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcblx0XHRcdFx0XHRcdFx0d2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuXHRcdFx0XHRcdFx0XHR0b3A6IGAke2V2ZW50LnRvcH0lYCxcblx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdDxEcmFnZ2FibGVFdmVudFxuXHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKCdwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlJywge1xuXHRcdFx0XHRcdFx0XHRcdCdbJl9wXTp0ZXh0LVsxMHB4XSBbJl9wXTptdC0wJzogaXNTaG9ydEV2ZW50LFxuXHRcdFx0XHRcdFx0XHR9KX1cblx0XHRcdFx0XHRcdFx0ZWxlbWVudElkPXtldmVudEtleX1cblx0XHRcdFx0XHRcdFx0ZXZlbnQ9e2V2ZW50fVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0KVxuXHRcdFx0fSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZEV2ZW50c0xheWVyID0gbWVtbyhOb01lbW9WZXJ0aWNhbEdyaWRFdmVudHNMYXllcilcbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbnRlcmZhY2UgQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcyB7XG5cdC8qKiBUaGUgc3RhcnQgZGF0ZS90aW1lIG9mIHRoZSBjb250YWluZXIncyB0aW1lbGluZSAoZS5nLiwgdG9wIG9mIHRoZSBjb2x1bW4pICovXG5cdHJhbmdlU3RhcnQ6IGRheWpzLkRheWpzXG5cdC8qKiBUaGUgZW5kIGRhdGUvdGltZSBvZiB0aGUgY29udGFpbmVyJ3MgdGltZWxpbmUgKGUuZy4sIGJvdHRvbSBvZiB0aGUgY29sdW1uKSAqL1xuXHRyYW5nZUVuZDogZGF5anMuRGF5anNcblx0LyoqIE9wdGlvbmFsIHJlZmVyZW5jZSB0aW1lIGZvciBcIm5vd1wiICh1c2VmdWwgZm9yIHRlc3RpbmcpICovXG5cdG5vdz86IGRheWpzLkRheWpzXG59XG5cbi8qKlxuICogUmVuZGVycyBhIGhvcml6b250YWwgcmVkIGxpbmUgaW5kaWNhdGluZyB0aGUgY3VycmVudCB0aW1lIHJlbGF0aXZlIHRvIGEgdmVydGljYWwgY29udGFpbmVyJ3MgdGltZWxpbmUuXG4gKiBUaGUgaW5kaWNhdG9yIGhhbmRsZXMgaXRzIG93biB2aXNpYmlsaXR5IGJhc2VkIG9uIHdoZXRoZXIgJ25vdycgZmFsbHMgd2l0aGluIHRoZSBwcm92aWRlZCByYW5nZS5cbiAqL1xuY29uc3QgTm9NZW1vQ3VycmVudFRpbWVJbmRpY2F0b3IgPSAoe1xuXHRyYW5nZVN0YXJ0LFxuXHRyYW5nZUVuZCxcblx0bm93OiBwcm9wTm93LFxufTogQ3VycmVudFRpbWVJbmRpY2F0b3JQcm9wcykgPT4ge1xuXHRjb25zdCBub3cgPSBwcm9wTm93ID8/IGRheWpzKClcblxuXHQvLyBDaGVjayBpZiBjdXJyZW50IHRpbWUgZmFsbHMgd2l0aGluIHRoaXMgcmFuZ2Vcblx0Y29uc3QgaXNXaXRoaW5SYW5nZSA9IG5vdy5pc1NhbWVPckFmdGVyKHJhbmdlU3RhcnQpICYmIG5vdy5pc0JlZm9yZShyYW5nZUVuZClcblxuXHRpZiAoIWlzV2l0aGluUmFuZ2UpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cblx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IHJhbmdlRW5kLmRpZmYocmFuZ2VTdGFydCwgJ21pbnV0ZScpXG5cdGNvbnN0IG1pbnV0ZXNGcm9tU3RhcnQgPSBub3cuZGlmZihyYW5nZVN0YXJ0LCAnbWludXRlJylcblx0Y29uc3QgcHJvZ3Jlc3MgPSAobWludXRlc0Zyb21TdGFydCAvIHRvdGFsRHVyYXRpb24pICogMTAwXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTAgcmlnaHQtMCBoLTAuNSBiZy1yZWQtNTAwIHotNTAgcG9pbnRlci1ldmVudHMtbm9uZVwiXG5cdFx0XHRkYXRhLXRlc3RpZD1cImN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuXHRcdFx0c3R5bGU9e3tcblx0XHRcdFx0dG9wOiBgJHtwcm9ncmVzc30lYCxcblx0XHRcdH19XG5cdFx0Lz5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgQ3VycmVudFRpbWVJbmRpY2F0b3IgPSBtZW1vKE5vTWVtb0N1cnJlbnRUaW1lSW5kaWNhdG9yKVxuIiwKICAgICJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7XG5cdGdldFBvc2l0aW9uZWREYXlFdmVudHMsXG5cdHR5cGUgUG9zaXRpb25lZEV2ZW50LFxufSBmcm9tICdAL2xpYi91dGlscy9wb3NpdGlvbi1kYXktZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuXHRkYXlzOiBkYXlqcy5EYXlqc1tdIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IHVzZVByb2Nlc3NlZERheUV2ZW50cyA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlLFxuXHRyZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMpID0+IHtcblx0Y29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGdldEV2ZW50c0ZvclJlc291cmNlIH0gPVxuXHRcdHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcblx0XHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogc3RhdGUuZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdFx0Z2V0RXZlbnRzRm9yUmVzb3VyY2U6IHN0YXRlLmdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRcdH0pKVxuXHRjb25zdCBkYXlTdGFydCA9IGRheXMuYXQoMCkuc3RhcnRPZignZGF5Jylcblx0Y29uc3QgZGF5RW5kID0gZGF5cy5hdCgtMSkuZW5kT2YoJ2RheScpXG5cblx0Y29uc3QgZXZlbnRzID0gdXNlTWVtbygoKSA9PiB7XG5cdFx0bGV0IGRheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShkYXlTdGFydCwgZGF5RW5kKVxuXHRcdGlmIChyZXNvdXJjZUlkKSB7XG5cdFx0XHRjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG5cdFx0XHRkYXlFdmVudHMgPSBkYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cblx0XHRcdFx0cmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0Ly8gVmVydGljYWwgZ3JpZHMgKERheS9XZWVrL1Jlc291cmNlIFZlcnRpY2FsKSBuZXZlciByZW5kZXIgYWxsLWRheSBldmVudHNcblx0XHQvLyBhcyB0aG9zZSBhcmUgaGFuZGxlZCBieSB0aGUgYWxsLWRheS1yb3cgb3IgYXJlIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHRpbWUgZ3JpZC5cblx0XHRyZXR1cm4gZGF5RXZlbnRzLmZpbHRlcigoZSkgPT4gIWUuYWxsRGF5KVxuXHR9LCBbXG5cdFx0ZGF5U3RhcnQsXG5cdFx0ZGF5RW5kLFxuXHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZSxcblx0XHRyZXNvdXJjZUlkLFxuXHRcdGdldEV2ZW50c0ZvclJlc291cmNlLFxuXHRdKVxuXG5cdGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQb3NpdGlvbmVkRXZlbnRbXT4oKCkgPT4ge1xuXHRcdHJldHVybiBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzKHtcblx0XHRcdGRheXMsXG5cdFx0XHRldmVudHMsXG5cdFx0XHRncmlkVHlwZSxcblx0XHR9KVxuXHR9LCBbZGF5cywgZ3JpZFR5cGUsIGV2ZW50c10pXG5cblx0cmV0dXJuIHRvZGF5RXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcblx0bGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuXHR3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2Vcblx0dG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2Vcblx0aGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2Vcblx0ekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgR2V0UG9zaXRpb25lZERheUV2ZW50c1BhcmFtcyB7XG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJyB8ICdtaW51dGUnXG5cdGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG59XG5cbmV4cG9ydCBjb25zdCBnZXRQb3NpdGlvbmVkRGF5RXZlbnRzID0gKHtcblx0ZGF5cyxcblx0Z3JpZFR5cGUgPSAnaG91cicsXG5cdGV2ZW50cyxcbn06IEdldFBvc2l0aW9uZWREYXlFdmVudHNQYXJhbXMpOiBQb3NpdGlvbmVkRXZlbnRbXSA9PiB7XG5cdC8vIEZpbHRlciBvdXQgYWxsLWRheSBldmVudHMgYW5kIHNvcnQgYnkgc3RhcnQgdGltZVxuXHRjb25zdCBzb3J0ZWRFdmVudHMgPSBldmVudHNcblx0XHQuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG5cdFx0LnRvU29ydGVkKChhLCBiKSA9PiBhLnN0YXJ0LmRpZmYoYi5zdGFydCkpXG5cblx0aWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gW11cblx0fVxuXG5cdC8vIERldGVybWluZSBncmlkIGJvdW5kYXJpZXMgYW5kIG1ldHJpY3Ncblx0Ly8gVXNlIGV4cGxpY2l0IHN0YXJ0T2YgdG8gZW5zdXJlIHdlIGFyZSBhbmNob3JlZCB0byB0aGUgZ3JpZCB1bml0IGJvdW5kYXJpZXNcblx0Ly8gVGhpcyBwcmV2ZW50cyBvZmZzZXRzIGlmIHRoZSBncmlkIGRheXMgYXJlIG5vdCBub3JtYWxpemVkXG5cdGNvbnN0IGdyaWRTdGFydCA9IGRheXMuYXQoMCk/LnN0YXJ0T2YoJ2RheScpIHx8IGRheWpzKClcblx0Y29uc3QgdG90YWxVbml0cyA9IGRheXMubGVuZ3RoXG5cdGNvbnN0IGlzRGlzY3JldGUgPSBncmlkVHlwZSA9PT0gJ2RheSdcblxuXHQvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRjb25zdCBjbHVzdGVyczogQ2FsZW5kYXJFdmVudFtdW10gPSBbXVxuXHRsZXQgY3VycmVudENsdXN0ZXI6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cdGxldCBsYXN0RXZlbnRFbmQ6IGRheWpzLkRheWpzIHwgbnVsbCA9IG51bGxcblx0Zm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRFdmVudHMpIHtcblx0XHRpZiAobGFzdEV2ZW50RW5kICYmIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQWZ0ZXIobGFzdEV2ZW50RW5kKSkge1xuXHRcdFx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Y2x1c3RlcnMucHVzaChjdXJyZW50Q2x1c3Rlcilcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRDbHVzdGVyID0gW11cblx0XHR9XG5cdFx0Y3VycmVudENsdXN0ZXIucHVzaChldmVudClcblx0XHRsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmQgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpIDogZXZlbnQuZW5kXG5cdH1cblx0aWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcblx0XHRjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuXHR9XG5cblx0Ly8gU3RlcCAyOiBGb3IgZWFjaCBjbHVzdGVyLCB1c2UgYSBtb3JlIGludGVsbGlnZW50IGNvbHVtbiBhc3NpZ25tZW50XG5cdGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuXHRmb3IgKGNvbnN0IGNsdXN0ZXIgb2YgY2x1c3RlcnMpIHtcblx0XHRpZiAoY2x1c3Rlci5sZW5ndGggPT09IDEpIHtcblx0XHRcdC8vIFNpbmdsZSBldmVudCB0YWtlcyBmdWxsIHdpZHRoXG5cdFx0XHRjb25zdCBldmVudCA9IGNsdXN0ZXJbMF1cblxuXHRcdFx0bGV0IHN0YXJ0VGltZSA9IGV2ZW50LnN0YXJ0LmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblx0XHRcdGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmRpZmYoZ3JpZFN0YXJ0LCBncmlkVHlwZSwgdHJ1ZSlcblxuXHRcdFx0aWYgKGlzRGlzY3JldGUpIHtcblx0XHRcdFx0c3RhcnRUaW1lID0gTWF0aC5mbG9vcihzdGFydFRpbWUpXG5cdFx0XHRcdGVuZFRpbWUgPSBNYXRoLmNlaWwoZW5kVGltZSlcblx0XHRcdFx0Ly8gRW5zdXJlIGF0IGxlYXN0IDEgdW5pdCBkdXJhdGlvbiBmb3IgZGlzY3JldGUgZXZlbnRzXG5cdFx0XHRcdGlmIChlbmRUaW1lIDw9IHN0YXJ0VGltZSkge1xuXHRcdFx0XHRcdGVuZFRpbWUgPSBzdGFydFRpbWUgKyAxXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xhbXAgdG8gZ3JpZCBib3VuZGFyaWVzXG5cdFx0XHRpZiAoc3RhcnRUaW1lIDwgMCkgc3RhcnRUaW1lID0gMFxuXHRcdFx0aWYgKGVuZFRpbWUgPiB0b3RhbFVuaXRzKSBlbmRUaW1lID0gdG90YWxVbml0c1xuXG5cdFx0XHRjb25zdCB0b3RhbER1cmF0aW9uID0gTWF0aC5tYXgoMCwgZW5kVGltZSAtIHN0YXJ0VGltZSlcblxuXHRcdFx0Ly8gU2tpcCBldmVudHMgdGhhdCBhcmUgY29tcGxldGVseSBvdXRzaWRlIHRoZSBncmlkXG5cdFx0XHRpZiAodG90YWxEdXJhdGlvbiA9PT0gMCkgY29udGludWVcblxuXHRcdFx0Y29uc3QgdG9wID0gKHN0YXJ0VGltZSAvIHRvdGFsVW5pdHMpICogMTAwXG5cdFx0XHRjb25zdCBoZWlnaHQgPSAodG90YWxEdXJhdGlvbiAvIHRvdGFsVW5pdHMpICogMTAwXG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIHRvcCwgaGVpZ2h0IH0pXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGV2ZW50cyAtIHVzZSBsYXllcmVkIHBvc2l0aW9uaW5nIGFwcHJvYWNoXG5cdFx0Ly8gU29ydCBieSBkdXJhdGlvbiAobG9uZ2VzdCBmaXJzdCksIHRoZW4gYnkgc3RhcnQgdGltZVxuXHRcdGNvbnN0IHNvcnRlZENsdXN0ZXIgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0Y29uc3QgYUR1cmF0aW9uID0gYS5lbmQuZGlmZihhLnN0YXJ0LCAnbWludXRlJylcblx0XHRcdGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydCwgJ21pbnV0ZScpXG5cblx0XHRcdC8vIExvbmdlciBldmVudHMgZmlyc3Rcblx0XHRcdGlmIChhRHVyYXRpb24gIT09IGJEdXJhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYkR1cmF0aW9uIC0gYUR1cmF0aW9uXG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHNhbWUgZHVyYXRpb24sIGVhcmxpZXIgc3RhcnQgdGltZSBmaXJzdFxuXHRcdFx0cmV0dXJuIGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuXHRcdH0pXG5cblx0XHQvLyBQcm9jZXNzIGV2ZW50cyB3aXRoIGxheWVyZWQgcG9zaXRpb25pbmdcblx0XHRjb25zdCB0b3RhbEV2ZW50cyA9IHNvcnRlZENsdXN0ZXIubGVuZ3RoXG5cblx0XHQvLyBDYWxjdWxhdGUgZHluYW1pYyBvZmZzZXQgYmFzZWQgb24gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuXHRcdC8vIEZld2VyIGV2ZW50cyA9IGxhcmdlciBpbmRpdmlkdWFsIG9mZnNldHMsIG1vcmUgZXZlbnRzID0gc21hbGxlciBvZmZzZXRzXG5cdFx0bGV0IG1heE9mZnNldDogbnVtYmVyXG5cdFx0aWYgKHRvdGFsRXZlbnRzID09PSAyKSB7XG5cdFx0XHRtYXhPZmZzZXQgPSAyNSAvLyAyNSUgb2Zmc2V0IGZvciAyIGV2ZW50c1xuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDMpIHtcblx0XHRcdG1heE9mZnNldCA9IDUwIC8vIDUwJSB0b3RhbCBmb3IgMyBldmVudHMgKDI1JSBlYWNoKVxuXHRcdH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDQpIHtcblx0XHRcdG1heE9mZnNldCA9IDYwIC8vIDYwJSB0b3RhbCBmb3IgNCBldmVudHMgKDIwJSBlYWNoKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXhPZmZzZXQgPSA3MCAvLyA3MCUgdG90YWwgZm9yIDUrIGV2ZW50c1xuXHRcdH1cblxuXHRcdGNvbnN0IG9mZnNldFBlckV2ZW50ID0gdG90YWxFdmVudHMgPiAxID8gbWF4T2Zmc2V0IC8gKHRvdGFsRXZlbnRzIC0gMSkgOiAwXG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRlZENsdXN0ZXIubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGV2ZW50ID0gc29ydGVkQ2x1c3RlcltpXVxuXG5cdFx0XHRsZXQgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXHRcdFx0bGV0IGVuZFRpbWUgPSBldmVudC5lbmQuZGlmZihncmlkU3RhcnQsIGdyaWRUeXBlLCB0cnVlKVxuXG5cdFx0XHRpZiAoaXNEaXNjcmV0ZSkge1xuXHRcdFx0XHRzdGFydFRpbWUgPSBNYXRoLmZsb29yKHN0YXJ0VGltZSlcblx0XHRcdFx0ZW5kVGltZSA9IE1hdGguY2VpbChlbmRUaW1lKVxuXHRcdFx0XHRpZiAoZW5kVGltZSA8PSBzdGFydFRpbWUpIHtcblx0XHRcdFx0XHRlbmRUaW1lID0gc3RhcnRUaW1lICsgMVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsYW1wIHRvIGdyaWQgYm91bmRhcmllc1xuXHRcdFx0aWYgKHN0YXJ0VGltZSA8IDApIHN0YXJ0VGltZSA9IDBcblx0XHRcdGlmIChlbmRUaW1lID4gdG90YWxVbml0cykgZW5kVGltZSA9IHRvdGFsVW5pdHNcblxuXHRcdFx0Y29uc3QgdG90YWxEdXJhdGlvbiA9IE1hdGgubWF4KDAsIGVuZFRpbWUgLSBzdGFydFRpbWUpXG5cblx0XHRcdGlmICh0b3RhbER1cmF0aW9uID09PSAwKSBjb250aW51ZVxuXG5cdFx0XHRjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gdG90YWxVbml0cykgKiAxMDBcblx0XHRcdGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gdG90YWxVbml0cykgKiAxMDBcblxuXHRcdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uaW5nIGJhc2VkIG9uIGxheWVyIGFuZCB0b3RhbCBldmVudHNcblx0XHRcdGxldCBsZWZ0OiBudW1iZXJcblx0XHRcdGxldCB3aWR0aDogbnVtYmVyXG5cdFx0XHRsZXQgekluZGV4OiBudW1iZXJcblxuXHRcdFx0aWYgKGkgPT09IDApIHtcblx0XHRcdFx0Ly8gRmlyc3QgZXZlbnQgKGxvbmdlc3QpIHRha2VzIGZ1bGwgd2lkdGggYXQgYm90dG9tXG5cdFx0XHRcdGxlZnQgPSAwXG5cdFx0XHRcdHdpZHRoID0gMTAwXG5cdFx0XHRcdHpJbmRleCA9IDFcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIFN1YnNlcXVlbnQgZXZlbnRzIGFyZSBvZmZzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gdG90YWwgZXZlbnQgY291bnRcblx0XHRcdFx0bGVmdCA9IG9mZnNldFBlckV2ZW50ICogaVxuXHRcdFx0XHR3aWR0aCA9IDEwMCAtIGxlZnQgLy8gUmVtYWluaW5nIHdpZHRoXG5cdFx0XHRcdHpJbmRleCA9IGkgKyAxIC8vIEhpZ2hlciB6LWluZGV4IGZvciBldmVudHMgb24gdG9wXG5cdFx0XHR9XG5cblx0XHRcdHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcblx0XHRcdFx0Li4uZXZlbnQsXG5cdFx0XHRcdGxlZnQsXG5cdFx0XHRcdHdpZHRoLFxuXHRcdFx0XHR0b3AsXG5cdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0ekluZGV4LFxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcHJvY2Vzc2VkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3Nlcz86IHsgaGVhZGVyPzogc3RyaW5nOyBhbGxEYXk/OiBzdHJpbmcgfVxuXHRhbGxEYXlSb3c/OiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuY29uc3QgTm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyOiBSZWFjdC5GQzxcblx0VmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHNcbj4gPSAoeyBjaGlsZHJlbiwgY2xhc3NlcywgYWxsRGF5Um93IH0pID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2XG5cdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0PlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9e2NuKCdoLTEyIGJvcmRlci1iIHctZml0JywgY2xhc3Nlcz8uaGVhZGVyKX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJ2ZXJ0aWNhbC1ncmlkLWhlYWRlclwiXG5cdFx0XHQ+XG5cdFx0XHRcdHtjaGlsZHJlbn1cblx0XHRcdDwvZGl2PlxuXHRcdFx0ey8qIEFsbC1kYXkgcm93ICovfVxuXHRcdFx0e2FsbERheVJvdyAmJiAoXG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggdy1mdWxsIGJvcmRlci1iIG1pbi1oLTEyIGgtZnVsbCcsXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5hbGxEYXlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1hbGwtZGF5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHthbGxEYXlSb3d9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0KX1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyID0gbWVtbyhcblx0Tm9NZW1vVmVydGljYWxHcmlkSGVhZGVyQ29udGFpbmVyXG4pXG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2Nyb2xsQXJlYSwgU2Nyb2xsQmFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL3Njcm9sbC1hcmVhJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZENvbCwgdHlwZSBWZXJ0aWNhbEdyaWRDb2xQcm9wcyB9IGZyb20gJy4vdmVydGljYWwtZ3JpZC1jb2wnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWRIZWFkZXJDb250YWluZXIgfSBmcm9tICcuL3ZlcnRpY2FsLWdyaWQtaGVhZGVyLWNvbnRhaW5lcidcblxuY29uc3QgQk9EWV9IRUlHSFQgPSAnaC1bY2FsYygxMDAlLTNyZW0pXSdcblxuaW50ZXJmYWNlIFZlcnRpY2FsR3JpZFByb3BzIHtcblx0Y29sdW1uczogVmVydGljYWxHcmlkQ29sUHJvcHNbXVxuXHRjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdHZhcmlhbnQ/OiAncmVndWxhcicgfCAncmVzb3VyY2UnXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgYWxsRGF5Pzogc3RyaW5nIH1cblx0YWxsRGF5Um93PzogUmVhY3QuUmVhY3ROb2RlXG5cdC8qKlxuXHQgKiBPcHRpb25hbCBhcnJheSBvZiBtaW51dGUgc2xvdHMgYnkgd2hpY2ggdGhlIGhvdXIgaXMgZGl2aWRlZFxuXHQgKiBlLmcuLCBbMCwgMTUsIDMwLCA0NV0gZm9yIHF1YXJ0ZXItaG91ciBzbG90c1xuXHQgKi9cblx0Y2VsbFNsb3RzPzogbnVtYmVyW11cbn1cblxuZXhwb3J0IGNvbnN0IFZlcnRpY2FsR3JpZDogUmVhY3QuRkM8VmVydGljYWxHcmlkUHJvcHM+ID0gKHtcblx0Y29sdW1ucyxcblx0Y2hpbGRyZW4sXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdHZhcmlhbnQgPSAncmVzb3VyY2UnLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXlSb3csXG5cdGNlbGxTbG90cyxcbn0pID0+IHtcblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PFZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lclxuXHRcdFx0YWxsRGF5Um93PXthbGxEYXlSb3d9XG5cdFx0XHRjbGFzc2VzPXt7IGhlYWRlcjogY2xhc3Nlcz8uaGVhZGVyLCBhbGxEYXk6IGNsYXNzZXM/LmFsbERheSB9fVxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L1ZlcnRpY2FsR3JpZEhlYWRlckNvbnRhaW5lcj5cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PGRpdiBjbGFzc05hbWU9XCJoLWZ1bGwgYm9yZGVyXCI+XG5cdFx0XHR7LyogaGVhZGVyIHJvdyAqL31cblx0XHRcdHtpc1JlZ3VsYXJDYWxlbmRhciAmJiBoZWFkZXJ9XG5cblx0XHRcdDxTY3JvbGxBcmVhXG5cdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0J2gtZnVsbCcsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgJ292ZXJmbG93LWF1dG8nLFxuXHRcdFx0XHRcdGlzUmVndWxhckNhbGVuZGFyICYmIEJPRFlfSEVJR0hUIC8vIHNjcm9sbCBhcmVhIGJlY29tZXMgYm9keSBpbiByZWd1bGFyIGNhbGVuZGFyXG5cdFx0XHRcdCl9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1zY3JvbGxcIlxuXHRcdFx0XHR2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyB9fVxuXHRcdFx0PlxuXHRcdFx0XHR7LyogaGVhZGVyIHJvdyBmb3IgcmVzb3VyY2UgY2FsZW5kYXIgaW5zaWRlIHNjcm9sbCBhcmVhICovfVxuXHRcdFx0XHR7aXNSZXNvdXJjZUNhbGVuZGFyICYmIGhlYWRlcn1cblx0XHRcdFx0ey8qIENhbGVuZGFyIGFyZWEgd2l0aCBzY3JvbGwgKi99XG5cdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0J2ZsZXggZmxleC0xIHctZml0Jyxcblx0XHRcdFx0XHRcdGlzUmVzb3VyY2VDYWxlbmRhciAmJiBCT0RZX0hFSUdIVCxcblx0XHRcdFx0XHRcdGNsYXNzZXM/LmJvZHlcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdGRhdGEtdGVzdGlkPVwidmVydGljYWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG5cdFx0XHRcdFx0e2NvbHVtbnMubWFwKChjb2x1bW4sIGluZGV4KSA9PiAoXG5cdFx0XHRcdFx0XHQ8VmVydGljYWxHcmlkQ29sXG5cdFx0XHRcdFx0XHRcdGtleT17YCR7Y29sdW1uLmlkfS0ke2luZGV4fWB9XG5cdFx0XHRcdFx0XHRcdHsuLi5jb2x1bW59XG5cdFx0XHRcdFx0XHRcdGNlbGxTbG90cz17Y2VsbFNsb3RzfVxuXHRcdFx0XHRcdFx0XHRncmlkVHlwZT17Z3JpZFR5cGV9XG5cdFx0XHRcdFx0XHRcdGlzTGFzdENvbHVtbj17aW5kZXggPT09IGNvbHVtbnMubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiAvPiB7LyogdmVydGljYWwgc2Nyb2xsYmFyICovfVxuXHRcdFx0XHQ8U2Nyb2xsQmFyIGNsYXNzTmFtZT1cInotMzBcIiBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPnsnICd9XG5cdFx0XHRcdHsvKiBob3Jpem9udGFsIHNjcm9sbGJhciAqL31cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGdldE1vbnRoV2Vla3MgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuaW1wb3J0IHsgTW9udGhIZWFkZXIgfSBmcm9tICcuL21vbnRoLWhlYWRlcidcbmltcG9ydCB0eXBlIHsgTW9udGhWaWV3UHJvcHMgfSBmcm9tICcuL3R5cGVzJ1xuXG5leHBvcnQgY29uc3QgTW9udGhWaWV3OiBSZWFjdC5GQzxNb250aFZpZXdQcm9wcz4gPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHdlZWtzID0gdXNlTWVtbyhcblx0XHQoKSA9PiBnZXRNb250aFdlZWtzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IHJvd3MgPSB3ZWVrcy5tYXAoKGRheXMsIHdlZWtJbmRleCkgPT4gKHtcblx0XHRpZDogYHdlZWstJHt3ZWVrSW5kZXh9YCxcblx0XHRjb2x1bW5zOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuXHRcdFx0aWQ6IGBjb2wtJHtkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0Z3JpZFR5cGU6ICdkYXknIGFzIGNvbnN0LFxuXHRcdH0pKSxcblx0XHRjbGFzc05hbWU6ICdmbGV4LTEnLFxuXHRcdHNob3dEYXlOdW1iZXI6IHRydWUsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PEhvcml6b250YWxHcmlkXG5cdFx0XHRjbGFzc2VzPXt7IGJvZHk6ICd3LWZ1bGwnLCBoZWFkZXI6ICd3LWZ1bGwnIH19XG5cdFx0XHRyb3dzPXtyb3dzfVxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxNb250aEhlYWRlciBjbGFzc05hbWU9XCJoLTEyXCIgLz5cblx0XHQ8L0hvcml6b250YWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclByb3BzIHtcblx0Y2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcblx0Y2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IE5vTWVtb0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyID0gKHtcblx0Y2hpbGRyZW4sXG5cdGNsYXNzTmFtZSxcbn06IEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyUHJvcHMpID0+IHtcblx0Y29uc3QgeyBzdGlja3lWaWV3SGVhZGVyLCB2aWV3SGVhZGVyQ2xhc3NOYW1lIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcblx0XHQoc3RhdGUpID0+ICh7XG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyOiBzdGF0ZS5zdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZTogc3RhdGUudmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHR9KVxuXHQpXG5cdHJldHVybiAoXG5cdFx0PGRpdlxuXHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0J2ZsZXggaC0xMiB3LWZpdCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLFxuXHRcdFx0XHRjbGFzc05hbWUsXG5cdFx0XHRcdHZpZXdIZWFkZXJDbGFzc05hbWVcblx0XHRcdCl9XG5cdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L2Rpdj5cblx0KVxufVxuXG5leHBvcnQgY29uc3QgSG9yaXpvbnRhbEdyaWRIZWFkZXJDb250YWluZXIgPSBtZW1vKFxuXHROb01lbW9Ib3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lclxuKVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9IGZyb20gJ0AvY29tcG9uZW50cy91aS9zY3JvbGwtYXJlYSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBIb3Jpem9udGFsR3JpZEhlYWRlckNvbnRhaW5lciB9IGZyb20gJy4vaG9yaXpvbnRhbC1ncmlkLWhlYWRlci1jb250YWluZXInXG5pbXBvcnQge1xuXHRIb3Jpem9udGFsR3JpZFJvdyxcblx0dHlwZSBIb3Jpem9udGFsR3JpZFJvd1Byb3BzLFxufSBmcm9tICcuL2hvcml6b250YWwtZ3JpZC1yb3cnXG5cbmNvbnN0IEJPRFlfSEVJR0hUID0gJ2gtW2NhbGMoMTAwJS0zcmVtKV0nXG5cbmludGVyZmFjZSBIb3Jpem9udGFsR3JpZFByb3BzIHtcblx0cm93czogSG9yaXpvbnRhbEdyaWRSb3dQcm9wc1tdXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZyB9XG5cdGFsbERheT86IGJvb2xlYW5cblx0Z3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuXHR2YXJpYW50PzogJ3JlZ3VsYXInIHwgJ3Jlc291cmNlJ1xuXHRkYXlOdW1iZXJIZWlnaHQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IEhvcml6b250YWxHcmlkOiBSZWFjdC5GQzxIb3Jpem9udGFsR3JpZFByb3BzPiA9ICh7XG5cdHJvd3MsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxuXHRhbGxEYXk6IHRvcExldmVsQWxsRGF5LFxuXHRncmlkVHlwZSxcblx0dmFyaWFudCA9ICdyZXNvdXJjZScsXG5cdGRheU51bWJlckhlaWdodCxcbn0pID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKHN0YXRlKSA9PiAoe1xuXHRcdGN1cnJlbnREYXRlOiBzdGF0ZS5jdXJyZW50RGF0ZSxcblx0fSkpXG5cblx0Y29uc3QgaXNSZXNvdXJjZUNhbGVuZGFyID0gdmFyaWFudCA9PT0gJ3Jlc291cmNlJ1xuXHRjb25zdCBpc1JlZ3VsYXJDYWxlbmRhciA9ICFpc1Jlc291cmNlQ2FsZW5kYXJcblxuXHRjb25zdCBoZWFkZXIgPSBjaGlsZHJlbiAmJiAoXG5cdFx0PEhvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyIGNsYXNzTmFtZT17Y2xhc3Nlcz8uaGVhZGVyfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0hvcml6b250YWxHcmlkSGVhZGVyQ29udGFpbmVyPlxuXHQpXG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImgtZnVsbCBib3JkZXJcIj5cblx0XHRcdHsvKipcblx0XHRcdCAqIGhlYWRlciByb3cgaXMgcmVuZGVyZWQgb3V0c2lkZSBzY3JvbGwgYXJlYSBmb3IgcmVndWxhciBjYWxlbmRhclxuXHRcdFx0ICovfVxuXHRcdFx0e2lzUmVndWxhckNhbGVuZGFyICYmIGhlYWRlcn1cblxuXHRcdFx0PFNjcm9sbEFyZWFcblx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHQnaC1mdWxsJyxcblx0XHRcdFx0XHRpc1JlZ3VsYXJDYWxlbmRhciAmJiAnb3ZlcmZsb3ctYXV0bycsXG5cdFx0XHRcdFx0aXNSZWd1bGFyQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQgLy8gc2Nyb2xsIGFyZWEgYmVjb21lcyBib2R5IGluIHJlZ3VsYXIgY2FsZW5kYXJcblx0XHRcdFx0KX1cblx0XHRcdFx0ZGF0YS10ZXN0aWQ9XCJob3Jpem9udGFsLWdyaWQtc2Nyb2xsXCJcblx0XHRcdFx0dmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2whICo6bWluLWgtZnVsbCcgfX1cblx0XHRcdD5cblx0XHRcdFx0ey8qKlxuXHRcdFx0XHQgKiBoZWFkZXIgcm93IGZvciByZXNvdXJjZSBjYWxlbmRhciBpbnNpZGUgc2Nyb2xsIGFyZWFcblx0XHRcdFx0ICogKi99XG5cdFx0XHRcdHtpc1Jlc291cmNlQ2FsZW5kYXIgJiYgaGVhZGVyfVxuXG5cdFx0XHRcdHsvKiBDYWxlbmRhciBhcmVhIHdpdGggc2Nyb2xsICovfVxuXHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdCdmbGV4IGZsZXgtMSB3LWZpdCcsXG5cdFx0XHRcdFx0XHRpc1Jlc291cmNlQ2FsZW5kYXIgJiYgQk9EWV9IRUlHSFQsIC8vIHRoaXMgYmVjb21lcyBib2R5IGluIHJlc291cmNlIGNhbGVuZGFyXG5cdFx0XHRcdFx0XHRjbGFzc2VzPy5ib2R5XG5cdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRkYXRhLXRlc3RpZD1cImhvcml6b250YWwtZ3JpZC1ib2R5XCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBmbGV4IGZsZXgtY29sIGZsZXgtMVwiXG5cdFx0XHRcdFx0XHRrZXk9e2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTScpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHtyb3dzLm1hcCgocm93LCBpbmRleCkgPT4gKFxuXHRcdFx0XHRcdFx0XHQ8SG9yaXpvbnRhbEdyaWRSb3dcblx0XHRcdFx0XHRcdFx0XHRhbGxEYXk9e3Jvdy5hbGxEYXkgPz8gdG9wTGV2ZWxBbGxEYXl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF5TnVtYmVySGVpZ2h0PXtkYXlOdW1iZXJIZWlnaHR9XG5cdFx0XHRcdFx0XHRcdFx0Z3JpZFR5cGU9e2dyaWRUeXBlfVxuXHRcdFx0XHRcdFx0XHRcdGlzTGFzdFJvdz17aW5kZXggPT09IHJvd3MubGVuZ3RoIC0gMX1cblx0XHRcdFx0XHRcdFx0XHRrZXk9e3Jvdy5pZH1cblx0XHRcdFx0XHRcdFx0XHR2YXJpYW50PXt2YXJpYW50fVxuXHRcdFx0XHRcdFx0XHRcdHsuLi5yb3d9XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PC9kaXY+XG5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgLz5cblx0XHRcdFx0PFNjcm9sbEJhciBjbGFzc05hbWU9XCJ6LTMwXCIgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgLz5cblx0XHRcdDwvU2Nyb2xsQXJlYT5cblx0XHQ8L2Rpdj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG5cdGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcblx0Y29uc3QgeyBmaXJzdERheU9mV2Vlaywgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSwgY3VycmVudERhdGUgfSA9XG5cdFx0dXNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuXHRjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuXHRyZXR1cm4gKFxuXHRcdDxkaXZcblx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdCdmbGV4IHctZnVsbCcsXG5cdFx0XHRcdHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIwJyxcblx0XHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdFx0Y2xhc3NOYW1lXG5cdFx0XHQpfVxuXHRcdFx0ZGF0YS10ZXN0aWQ9XCJtb250aC1oZWFkZXJcIlxuXHRcdD5cblx0XHRcdHt3ZWVrRGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG5cdFx0XHRcdDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5LnRvSVNPU3RyaW5nKCl9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleC0xXCJcblx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgd2Vla2RheS1oZWFkZXItJHt3ZWVrRGF5LmZvcm1hdCgnZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRrZXk9e3dlZWtEYXkudG9JU09TdHJpbmcoKX1cblx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3tcblx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDAuMjUsXG5cdFx0XHRcdFx0XHRcdGVhc2U6ICdlYXNlSW5PdXQnLFxuXHRcdFx0XHRcdFx0XHRkZWxheTogaW5kZXggKiAwLjA1LFxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGNhcGl0YWxpemVcIj57d2Vla0RheS5mb3JtYXQoJ2RkZCcpfTwvc3Bhbj5cblx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0KSl9XG5cdFx0PC9kaXY+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlIb3VycywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5jb25zdCBDRUxMX0NMQVNTID0gJ3ctW2NhbGMoKDEwMCUtNHJlbSkvNyldIG1pbi13LVtjYWxjKCgxMDAlLTRyZW0pLzcpXSBmbGV4LTEnXG5jb25zdCBMRUZUX0NPTF9XSURUSCA9ICd3LTEwIHNtOnctMTYgbWluLXctMTAgc206bWluLXctMTYgbWF4LXctMTAgc206bWF4LXctMTYnXG5cbmNvbnN0IFdlZWtWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3Qge1xuXHRcdHQsXG5cdFx0Y3VycmVudERhdGUsXG5cdFx0Zmlyc3REYXlPZldlZWssXG5cdFx0c2VsZWN0RGF0ZSxcblx0XHRvcGVuRXZlbnRGb3JtLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0fSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheXM6IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZTogY3VycmVudERhdGUgfSksXG5cdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0Y2xhc3NOYW1lOiBgc2hyaW5rLTAgJHtMRUZUX0NPTF9XSURUSH0gc3RpY2t5IGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBgLFxuXHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRob3VyOiAnbnVtZXJpYycsXG5cdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdH0pLmZvcm1hdChkYXRlLnRvRGF0ZSgpKX1cblx0XHRcdDwvZGl2PlxuXHRcdCksXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oKCkgPT4ge1xuXHRcdHJldHVybiB3ZWVrRGF5cy5tYXAoKGRheSkgPT4gKHtcblx0XHRcdGlkOiBgZGF5LWNvbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gLFxuXHRcdFx0ZGF5LFxuXHRcdFx0bGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcblx0XHRcdGNsYXNzTmFtZTogQ0VMTF9DTEFTUyxcblx0XHRcdGRheXM6IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZTogZGF5IH0pLFxuXHRcdFx0dmFsdWU6IGRheSxcblx0XHR9KSlcblx0fSwgW3dlZWtEYXlzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxBbGxEYXlSb3dcblx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6IENFTExfQ0xBU1MsIHNwYWNlcjogTEVGVF9DT0xfV0lEVEggfX1cblx0XHRcdFx0XHRkYXlzPXt3ZWVrRGF5c31cblx0XHRcdFx0Lz5cblx0XHRcdH1cblx0XHRcdGNsYXNzZXM9e3sgaGVhZGVyOiAndy1mdWxsIGgtMTgnLCBib2R5OiAnaC1bY2FsYygxMDAlLTQuNXJlbSldIHctZnVsbCcgfX1cblx0XHRcdGNvbHVtbnM9e1tmaXJzdENvbCwgLi4uY29sdW1uc119XG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdFx0dmFyaWFudD1cInJlZ3VsYXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPXsnZmxleCBoLWZ1bGwgZmxleC0xJ30gZGF0YS10ZXN0aWQ9XCJ3ZWVrLXZpZXctaGVhZGVyXCI+XG5cdFx0XHRcdHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctMTAgc206dy0xNiBoLWZ1bGwgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1yIHAtMiBmbGV4XCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e2N1cnJlbnREYXRlLndlZWsoKX08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBEYXkgaGVhZGVyIGNlbGxzICovfVxuXHRcdFx0XHR7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHdlZWstZGF5LWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17a2V5fSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHQnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBmbGV4IGZsZXgtY29sIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIHAtMSB0ZXh0LWNlbnRlciBzbTpwLTIgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIHctNTAgaC1mdWxsJyxcblx0XHRcdFx0XHRcdFx0XHRcdGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkvMTAgZm9udC1ib2xkJ1xuXHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2B3ZWVrLWRheS1oZWFkZXItJHtkYXkuZm9ybWF0KCdkZGRkJykudG9Mb3dlckNhc2UoKX1gfVxuXHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzZWxlY3REYXRlKGRheSlcblx0XHRcdFx0XHRcdFx0XHRcdG9wZW5FdmVudEZvcm0oeyBzdGFydDogZGF5IH0pXG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdGVhc2U6ICdlYXNlSW5PdXQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J214LWF1dG8gbXQtMSBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXhzJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXk6ICdudW1lcmljJyxcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChkYXkudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0XHQ8L0FuaW1hdGVQcmVzZW5jZT5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0pfVxuXHRcdFx0PC9kaXY+XG5cdFx0PC9WZXJ0aWNhbEdyaWQ+XG5cdClcbn1cblxuZXhwb3J0IGRlZmF1bHQgV2Vla1ZpZXdcbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IERBWV9IRUFERVJfTkFNRVMgPSBbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXVxuY29uc3QgRVZFTlRfRE9UX0NPTE9SUyA9IFsnYmctcHJpbWFyeScsICdiZy1ibHVlLTUwMCcsICdiZy1ncmVlbi01MDAnXVxuY29uc3QgREFZU19JTl9NSU5JX0NBTEVOREFSID0gNDJcblxuY29uc3QgZ2V0RGF5VG9vbHRpcCA9IChldmVudENvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRpZiAoZXZlbnRDb3VudCA9PT0gMCkge1xuXHRcdHJldHVybiAnJ1xuXHR9XG5cdGNvbnN0IHBsdXJhbCA9IGV2ZW50Q291bnQgPiAxID8gJ3MnIDogJydcblx0cmV0dXJuIGAke2V2ZW50Q291bnR9IGV2ZW50JHtwbHVyYWx9YFxufVxuXG5pbnRlcmZhY2UgTW9udGhEYXRhIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0bmFtZTogc3RyaW5nXG5cdGV2ZW50Q291bnQ6IG51bWJlclxuXHRtb250aEtleTogc3RyaW5nXG59XG5cbmludGVyZmFjZSBEYXlEYXRhIHtcblx0ZGF0ZTogZGF5anMuRGF5anNcblx0ZGF5S2V5OiBzdHJpbmdcblx0aXNJbkN1cnJlbnRNb250aDogYm9vbGVhblxuXHRpc1RvZGF5OiBib29sZWFuXG5cdGlzU2VsZWN0ZWQ6IGJvb2xlYW5cblx0ZXZlbnRDb3VudDogbnVtYmVyXG59XG5cbmNvbnN0IFllYXJWaWV3ID0gKCkgPT4ge1xuXHRjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cblx0XHR1c2VDYWxlbmRhckNvbnRleHQoKVxuXHRjb25zdCBjdXJyZW50WWVhciA9IGN1cnJlbnREYXRlLnllYXIoKVxuXG5cdGNvbnN0IGdlbmVyYXRlTW9udGhzRGF0YSA9ICgpOiBNb250aERhdGFbXSA9PiB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBtb250aEluZGV4KSA9PiB7XG5cdFx0XHRjb25zdCBtb250aERhdGUgPSBkYXlqcygpXG5cdFx0XHRcdC55ZWFyKGN1cnJlbnRZZWFyKVxuXHRcdFx0XHQubW9udGgobW9udGhJbmRleClcblx0XHRcdFx0LnN0YXJ0T2YoJ21vbnRoJylcblx0XHRcdGNvbnN0IGV2ZW50c0luTW9udGggPSBldmVudHMuZmlsdGVyKFxuXHRcdFx0XHQoZXZlbnQpID0+XG5cdFx0XHRcdFx0ZXZlbnQuc3RhcnQueWVhcigpID09PSBjdXJyZW50WWVhciAmJlxuXHRcdFx0XHRcdGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoSW5kZXhcblx0XHRcdClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogbW9udGhEYXRlLFxuXHRcdFx0XHRuYW1lOiBtb250aERhdGUuZm9ybWF0KCdNTU1NJyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuXHRcdFx0XHRtb250aEtleTogbW9udGhEYXRlLmZvcm1hdCgnTU0nKSxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgZ2VuZXJhdGVEYXlzRm9yTW9udGggPSAobW9udGhEYXRlOiBkYXlqcy5EYXlqcyk6IERheURhdGFbXSA9PiB7XG5cdFx0Y29uc3QgZmlyc3REYXlPZkNhbGVuZGFyID0gbW9udGhEYXRlLnN0YXJ0T2YoJ21vbnRoJykuc3RhcnRPZignd2VlaycpXG5cblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogREFZU19JTl9NSU5JX0NBTEVOREFSIH0sIChfLCBkYXlJbmRleCkgPT4ge1xuXHRcdFx0Y29uc3QgZGF5RGF0ZSA9IGZpcnN0RGF5T2ZDYWxlbmRhci5hZGQoZGF5SW5kZXgsICdkYXknKVxuXHRcdFx0Y29uc3QgZGF5U3RhcnQgPSBkYXlEYXRlLnN0YXJ0T2YoJ2RheScpXG5cdFx0XHRjb25zdCBkYXlFbmQgPSBkYXlEYXRlLmVuZE9mKCdkYXknKVxuXHRcdFx0Y29uc3QgZXZlbnRzT25EYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoZGF5U3RhcnQsIGRheUVuZClcblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0ZTogZGF5RGF0ZSxcblx0XHRcdFx0ZGF5S2V5OiBkYXlEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxuXHRcdFx0XHRpc0luQ3VycmVudE1vbnRoOiBkYXlEYXRlLm1vbnRoKCkgPT09IG1vbnRoRGF0ZS5tb250aCgpLFxuXHRcdFx0XHRpc1RvZGF5OiBkYXlEYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JyksXG5cdFx0XHRcdGlzU2VsZWN0ZWQ6IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JyksXG5cdFx0XHRcdGV2ZW50Q291bnQ6IGV2ZW50c09uRGF5Lmxlbmd0aCxcblx0XHRcdH1cblx0XHR9KVxuXHR9XG5cblx0Y29uc3QgbmF2aWdhdGVUb0RhdGUgPSAoXG5cdFx0ZGF0ZTogZGF5anMuRGF5anMsXG5cdFx0dmlldzogJ21vbnRoJyB8ICdkYXknLFxuXHRcdGV2ZW50PzogUmVhY3QuTW91c2VFdmVudFxuXHQpID0+IHtcblx0XHRldmVudD8uc3RvcFByb3BhZ2F0aW9uKClcblx0XHRzZWxlY3REYXRlKGRhdGUpXG5cdFx0c2V0Vmlldyh2aWV3KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnRDb3VudExhYmVsID0gKGNvdW50OiBudW1iZXIpOiBzdHJpbmcgPT4ge1xuXHRcdGNvbnN0IGV2ZW50V29yZCA9IGNvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpXG5cdFx0cmV0dXJuIGAke2NvdW50fSAke2V2ZW50V29yZH1gXG5cdH1cblxuXHRjb25zdCBnZXREYXlDbGFzc05hbWUgPSAoZGF5OiBEYXlEYXRhKTogc3RyaW5nID0+IHtcblx0XHRjb25zdCBiYXNlQ2xhc3MgPVxuXHRcdFx0J3JlbGF0aXZlIGZsZXggYXNwZWN0LXNxdWFyZSB3LWZ1bGwgY3Vyc29yLXBvaW50ZXIgZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCByb3VuZGVkLXNtIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTIwMCdcblx0XHRjb25zdCBvdXRzaWRlTW9udGhDbGFzcyA9IGRheS5pc0luQ3VycmVudE1vbnRoXG5cdFx0XHQ/ICcnXG5cdFx0XHQ6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCdcblx0XHRjb25zdCB0b2RheUNsYXNzID0gZGF5LmlzVG9kYXlcblx0XHRcdD8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJ1xuXHRcdFx0OiAnJ1xuXHRcdGNvbnN0IHNlbGVjdGVkQ2xhc3MgPVxuXHRcdFx0ZGF5LmlzU2VsZWN0ZWQgJiYgIWRheS5pc1RvZGF5ID8gJ2JnLW11dGVkIHJvdW5kZWQtZnVsbCBmb250LWJvbGQnIDogJydcblx0XHRjb25zdCBoYXNFdmVudHNDbGFzcyA9XG5cdFx0XHRkYXkuZXZlbnRDb3VudCA+IDAgJiYgIWRheS5pc1RvZGF5ICYmICFkYXkuaXNTZWxlY3RlZCA/ICdmb250LW1lZGl1bScgOiAnJ1xuXG5cdFx0cmV0dXJuIGNuKFxuXHRcdFx0YmFzZUNsYXNzLFxuXHRcdFx0b3V0c2lkZU1vbnRoQ2xhc3MsXG5cdFx0XHR0b2RheUNsYXNzLFxuXHRcdFx0c2VsZWN0ZWRDbGFzcyxcblx0XHRcdGhhc0V2ZW50c0NsYXNzXG5cdFx0KVxuXHR9XG5cblx0Y29uc3QgZ2V0RXZlbnREb3RDbGFzc05hbWUgPSAoY29sb3I6IHN0cmluZywgaXNUb2RheTogYm9vbGVhbik6IHN0cmluZyA9PiB7XG5cdFx0Y29uc3QgZG90Q29sb3IgPSBpc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiBjb2xvclxuXHRcdHJldHVybiBjbignaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsIGRvdENvbG9yKVxuXHR9XG5cblx0Y29uc3QgbW9udGhzRGF0YSA9IGdlbmVyYXRlTW9udGhzRGF0YSgpXG5cblx0cmV0dXJuIChcblx0XHQ8U2Nyb2xsQXJlYSBjbGFzc05hbWU9XCJoLWZ1bGxcIiBkYXRhLXRlc3RpZD1cInllYXItdmlld1wiPlxuXHRcdFx0PGRpdlxuXHRcdFx0XHRjbGFzc05hbWU9XCJncmlkIGF1dG8tcm93cy1mciBncmlkLWNvbHMtMSBnYXAtNCBwLTQgc206Z3JpZC1jb2xzLTIgbGc6Z3JpZC1jb2xzLTNcIlxuXHRcdFx0XHRkYXRhLXRlc3RpZD1cInllYXItZ3JpZFwiXG5cdFx0XHQ+XG5cdFx0XHRcdHttb250aHNEYXRhLm1hcCgobW9udGgsIG1vbnRoSW5kZXgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBkYXlzSW5Nb250aCA9IGdlbmVyYXRlRGF5c0Zvck1vbnRoKG1vbnRoLmRhdGUpXG5cdFx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uRGVsYXkgPSBtb250aEluZGV4ICogMC4wNVxuXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiaG92ZXI6Ym9yZGVyLXByaW1hcnkgZmxleCBmbGV4LWNvbCByb3VuZGVkLWxnIGJvcmRlciBwLTMgdGV4dC1sZWZ0IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMCBob3ZlcjpzaGFkb3ctbWRcIlxuXHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRrZXk9e21vbnRoLm1vbnRoS2V5fVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWItMiBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIlxuXHRcdFx0XHRcdFx0XHRcdFx0ZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRrZXk9e2Btb250aC0ke21vbnRoSW5kZXh9YH1cblx0XHRcdFx0XHRcdFx0XHRcdHRyYW5zaXRpb249e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZHVyYXRpb246IDAuMjUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVhc2U6ICdlYXNlSW5PdXQnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWxheTogYW5pbWF0aW9uRGVsYXksXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1sZyBmb250LW1lZGl1bSBob3Zlcjp1bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXJcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHllYXItbW9udGgtdGl0bGUtJHttb250aC5tb250aEtleX1gfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZVRvRGF0ZShtb250aC5kYXRlLCAnbW9udGgnKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHttb250aC5uYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XG5cblx0XHRcdFx0XHRcdFx0XHRcdHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLWZ1bGwgcHgtMiBweS0xIHRleHQteHNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC1ldmVudC1jb3VudC0ke21vbnRoLm1vbnRoS2V5fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7Z2V0RXZlbnRDb3VudExhYmVsKG1vbnRoLmV2ZW50Q291bnQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cblx0XHRcdFx0XHRcdFx0PGRpdlxuXHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTcgZ2FwLVsxcHhdIHRleHQtWzAuNnJlbV1cIlxuXHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGgubW9udGhLZXl9YH1cblx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdHtEQVlfSEVBREVSX05BTUVTLm1hcCgoZGF5TmFtZSwgaGVhZGVySW5kZXgpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXZcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGgtMyB0ZXh0LWNlbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17YGhlYWRlci0ke2hlYWRlckluZGV4fWB9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXlOYW1lfVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0KSl9XG5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5c0luTW9udGgubWFwKChkYXkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGRheVRlc3RJZCA9IGB5ZWFyLWRheS0ke21vbnRoLmRhdGUuZm9ybWF0KCdZWVlZLU1NJyl9LSR7ZGF5LmRheUtleX1gXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBoYXNFdmVudHMgPSBkYXkuZXZlbnRDb3VudCA+IDBcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHZpc2libGVEb3RDb3VudCA9IE1hdGgubWluKGRheS5ldmVudENvdW50LCAzKVxuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgdmlzaWJsZURvdENvbG9ycyA9IEVWRU5UX0RPVF9DT0xPUlMuc2xpY2UoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGVEb3RDb3VudFxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXREYXlDbGFzc05hbWUoZGF5KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17ZGF5VGVzdElkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17ZGF5LmRheUtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvbkNsaWNrPXsoZSkgPT4gbmF2aWdhdGVUb0RhdGUoZGF5LmRhdGUsICdkYXknLCBlKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17Z2V0RGF5VG9vbHRpcChkYXkuZXZlbnRDb3VudCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtkYXkuZGF0ZS5kYXRlKCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2hhc0V2ZW50cyAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Fic29sdXRlIGJvdHRvbS0wIGZsZXggdy1mdWxsIGp1c3RpZnktY2VudGVyIHNwYWNlLXgtWzFweF0nLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5ICYmICdib3R0b20tWzFweF0nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt2aXNpYmxlRG90Q29sb3JzLm1hcCgoZG90Q29sb3IpID0+IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtnZXRFdmVudERvdENsYXNzTmFtZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG90Q29sb3IsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRheS5pc1RvZGF5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtkb3RDb2xvcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdH0pfVxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxTY3JvbGxCYXIgY2xhc3NOYW1lPVwiei0zMFwiIC8+XG5cdFx0PC9TY3JvbGxBcmVhPlxuXHQpXG59XG5cbmV4cG9ydCBkZWZhdWx0IFllYXJWaWV3XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEV2ZW50Rm9ybVByb3BzIH0gZnJvbSAnQC9jb21wb25lbnRzL2V2ZW50LWZvcm0vZXZlbnQtZm9ybSdcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NIb3VycywgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHtcblx0Q2FsZW5kYXJDbGFzc2VzT3ZlcnJpZGUsXG5cdENlbGxDbGlja0luZm8sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9ucywgVHJhbnNsYXRvckZ1bmN0aW9uIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhclZpZXcsIFRpbWVGb3JtYXQgfSBmcm9tICdAL3R5cGVzJ1xuaW1wb3J0IHsgQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG5cdGNoaWxkcmVuOiBSZWFjdE5vZGVcblx0ZXZlbnRzPzogQ2FsZW5kYXJFdmVudFtdXG5cdGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG5cdGluaXRpYWxWaWV3PzogQ2FsZW5kYXJWaWV3XG5cdGluaXRpYWxEYXRlPzogZGF5anMuRGF5anNcblx0cmVuZGVyRXZlbnQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IFJlYWN0Tm9kZVxuXHRvbkV2ZW50Q2xpY2s/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25DZWxsQ2xpY2s/OiAoaW5mbzogQ2VsbENsaWNrSW5mbykgPT4gdm9pZFxuXHRvblZpZXdDaGFuZ2U/OiAodmlldzogQ2FsZW5kYXJWaWV3KSA9PiB2b2lkXG5cdG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcblx0b25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuXHRvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG5cdG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuXHRsb2NhbGU/OiBzdHJpbmdcblx0dGltZXpvbmU/OiBzdHJpbmdcblx0ZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cblx0ZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG5cdGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cblx0ZGF5TWF4RXZlbnRzOiBudW1iZXJcblx0ZXZlbnRTcGFjaW5nPzogbnVtYmVyXG5cdHN0aWNreVZpZXdIZWFkZXI/OiBib29sZWFuXG5cdHZpZXdIZWFkZXJDbGFzc05hbWU/OiBzdHJpbmdcblx0aGVhZGVyQ29tcG9uZW50PzogUmVhY3ROb2RlIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY29tcG9uZW50XG5cdGhlYWRlckNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNsYXNzXG5cdGJ1c2luZXNzSG91cnM/OiBCdXNpbmVzc0hvdXJzIHwgQnVzaW5lc3NIb3Vyc1tdXG5cdHJlbmRlckV2ZW50Rm9ybT86IChwcm9wczogRXZlbnRGb3JtUHJvcHMpID0+IFJlYWN0Tm9kZVxuXHQvLyBUcmFuc2xhdGlvbiBvcHRpb25zIC0gcHJvdmlkZSBlaXRoZXIgdHJhbnNsYXRpb25zIG9iamVjdCBPUiB0cmFuc2xhdG9yIGZ1bmN0aW9uXG5cdHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuXHR0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG5cdHRpbWVGb3JtYXQ/OiBUaW1lRm9ybWF0XG5cdGNsYXNzZXNPdmVycmlkZT86IENhbGVuZGFyQ2xhc3Nlc092ZXJyaWRlXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxDYWxlbmRhclByb3ZpZGVyUHJvcHM+ID0gKHtcblx0Y2hpbGRyZW4sXG5cdGV2ZW50cyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9IDAsXG5cdGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcblx0aW5pdGlhbERhdGUsXG5cdHJlbmRlckV2ZW50LFxuXHRvbkV2ZW50Q2xpY2ssXG5cdG9uQ2VsbENsaWNrLFxuXHRvblZpZXdDaGFuZ2UsXG5cdG9uRXZlbnRBZGQsXG5cdG9uRXZlbnRVcGRhdGUsXG5cdG9uRXZlbnREZWxldGUsXG5cdG9uRGF0ZUNoYW5nZSxcblx0bG9jYWxlLFxuXHR0aW1lem9uZSxcblx0ZGlzYWJsZUNlbGxDbGljayxcblx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0ZGF5TWF4RXZlbnRzLFxuXHRldmVudFNwYWNpbmcgPSBHQVBfQkVUV0VFTl9FTEVNRU5UUyxcblx0c3RpY2t5Vmlld0hlYWRlciA9IHRydWUsXG5cdHZpZXdIZWFkZXJDbGFzc05hbWUgPSAnJyxcblx0aGVhZGVyQ29tcG9uZW50LFxuXHRoZWFkZXJDbGFzc05hbWUsXG5cdGJ1c2luZXNzSG91cnMsXG5cdHJlbmRlckV2ZW50Rm9ybSxcblx0dHJhbnNsYXRpb25zLFxuXHR0cmFuc2xhdG9yLFxuXHR0aW1lRm9ybWF0ID0gJzEyLWhvdXInLFxuXHRjbGFzc2VzT3ZlcnJpZGUsXG59KSA9PiB7XG5cdC8vIFVzZSB0aGUgY2FsZW5kYXIgZW5naW5lXG5cdGNvbnN0IGNhbGVuZGFyRW5naW5lID0gdXNlQ2FsZW5kYXJFbmdpbmUoe1xuXHRcdGV2ZW50cyxcblx0XHRmaXJzdERheU9mV2Vlayxcblx0XHRpbml0aWFsVmlldyxcblx0XHRpbml0aWFsRGF0ZSxcblx0XHRidXNpbmVzc0hvdXJzLFxuXHRcdG9uRXZlbnRBZGQsXG5cdFx0b25FdmVudFVwZGF0ZSxcblx0XHRvbkV2ZW50RGVsZXRlLFxuXHRcdG9uRGF0ZUNoYW5nZSxcblx0XHRvblZpZXdDaGFuZ2UsXG5cdFx0bG9jYWxlLFxuXHRcdHRpbWV6b25lLFxuXHRcdHRyYW5zbGF0aW9ucyxcblx0XHR0cmFuc2xhdG9yLFxuXHR9KVxuXG5cdGNvbnN0IGVkaXRFdmVudCA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0Y2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcblx0XHRcdGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuXHRcdH0sXG5cdFx0W2NhbGVuZGFyRW5naW5lXVxuXHQpXG5cblx0Ly8gQ3VzdG9tIGhhbmRsZXJzIHRoYXQgY2FsbCBleHRlcm5hbCBjYWxsYmFja3Ncblx0Y29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuXHRcdChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuXHRcdFx0aWYgKGRpc2FibGVFdmVudENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdFx0aWYgKG9uRXZlbnRDbGljaykge1xuXHRcdFx0XHRvbkV2ZW50Q2xpY2soZXZlbnQpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlZGl0RXZlbnQoZXZlbnQpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRbZGlzYWJsZUV2ZW50Q2xpY2ssIG9uRXZlbnRDbGljaywgZWRpdEV2ZW50XVxuXHQpXG5cblx0Y29uc3QgaGFuZGxlRGF0ZUNsaWNrID0gdXNlQ2FsbGJhY2soXG5cdFx0KGluZm86IENlbGxDbGlja0luZm8pID0+IHtcblx0XHRcdGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob25DZWxsQ2xpY2spIHtcblx0XHRcdFx0b25DZWxsQ2xpY2soaW5mbylcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0oaW5mbylcblx0XHRcdH1cblx0XHR9LFxuXHRcdFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG5cdClcblxuXHQvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcblx0Y29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0Y3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLmN1cnJlbnREYXRlLFxuXHRcdFx0dmlldzogY2FsZW5kYXJFbmdpbmUudmlldyxcblx0XHRcdGV2ZW50czogY2FsZW5kYXJFbmdpbmUuZXZlbnRzLFxuXHRcdFx0cmF3RXZlbnRzOiBjYWxlbmRhckVuZ2luZS5yYXdFdmVudHMsXG5cdFx0XHRjdXJyZW50TG9jYWxlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50TG9jYWxlLFxuXHRcdFx0aXNFdmVudEZvcm1PcGVuOiBjYWxlbmRhckVuZ2luZS5pc0V2ZW50Rm9ybU9wZW4sXG5cdFx0XHRzZWxlY3RlZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5zZWxlY3RlZEV2ZW50LFxuXHRcdFx0c2VsZWN0ZWREYXRlOiBjYWxlbmRhckVuZ2luZS5zZWxlY3RlZERhdGUsXG5cdFx0XHRmaXJzdERheU9mV2VlazogY2FsZW5kYXJFbmdpbmUuZmlyc3REYXlPZldlZWssXG5cdFx0XHRzZXRDdXJyZW50RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2V0Q3VycmVudERhdGUsXG5cdFx0XHRzZWxlY3REYXRlOiBjYWxlbmRhckVuZ2luZS5zZWxlY3REYXRlLFxuXHRcdFx0c2V0VmlldzogY2FsZW5kYXJFbmdpbmUuc2V0Vmlldyxcblx0XHRcdG5leHRQZXJpb2Q6IGNhbGVuZGFyRW5naW5lLm5leHRQZXJpb2QsXG5cdFx0XHRwcmV2UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5wcmV2UGVyaW9kLFxuXHRcdFx0dG9kYXk6IGNhbGVuZGFyRW5naW5lLnRvZGF5LFxuXHRcdFx0YWRkRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmFkZEV2ZW50LFxuXHRcdFx0dXBkYXRlRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnVwZGF0ZUV2ZW50LFxuXHRcdFx0dXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLnVwZGF0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0ZGVsZXRlRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmRlbGV0ZUV2ZW50LFxuXHRcdFx0ZGVsZXRlUmVjdXJyaW5nRXZlbnQ6IGNhbGVuZGFyRW5naW5lLmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuXHRcdFx0b3BlbkV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybSxcblx0XHRcdGNsb3NlRXZlbnRGb3JtOiBjYWxlbmRhckVuZ2luZS5jbG9zZUV2ZW50Rm9ybSxcblx0XHRcdGdldEV2ZW50c0ZvckRhdGVSYW5nZTogY2FsZW5kYXJFbmdpbmUuZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuXHRcdFx0ZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5maW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsXG5cdFx0XHRyZW5kZXJFdmVudCxcblx0XHRcdG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcblx0XHRcdG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cdFx0XHRsb2NhbGUsXG5cdFx0XHR0aW1lem9uZSxcblx0XHRcdGRpc2FibGVDZWxsQ2xpY2ssXG5cdFx0XHRkaXNhYmxlRXZlbnRDbGljayxcblx0XHRcdGRpc2FibGVEcmFnQW5kRHJvcCxcblx0XHRcdGRheU1heEV2ZW50cyxcblx0XHRcdGV2ZW50U3BhY2luZyxcblx0XHRcdHN0aWNreVZpZXdIZWFkZXIsXG5cdFx0XHR2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0aGVhZGVyQ29tcG9uZW50LFxuXHRcdFx0aGVhZGVyQ2xhc3NOYW1lLFxuXHRcdFx0YnVzaW5lc3NIb3Vycyxcblx0XHRcdHJlbmRlckV2ZW50Rm9ybSxcblx0XHRcdHQ6IGNhbGVuZGFyRW5naW5lLnQsXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdH0pLFxuXHRcdFtcblx0XHRcdGNhbGVuZGFyRW5naW5lLFxuXHRcdFx0cmVuZGVyRXZlbnQsXG5cdFx0XHRoYW5kbGVFdmVudENsaWNrLFxuXHRcdFx0aGFuZGxlRGF0ZUNsaWNrLFxuXHRcdFx0bG9jYWxlLFxuXHRcdFx0dGltZXpvbmUsXG5cdFx0XHRkaXNhYmxlQ2VsbENsaWNrLFxuXHRcdFx0ZGlzYWJsZUV2ZW50Q2xpY2ssXG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3AsXG5cdFx0XHRkYXlNYXhFdmVudHMsXG5cdFx0XHRldmVudFNwYWNpbmcsXG5cdFx0XHRzdGlja3lWaWV3SGVhZGVyLFxuXHRcdFx0dmlld0hlYWRlckNsYXNzTmFtZSxcblx0XHRcdGhlYWRlckNvbXBvbmVudCxcblx0XHRcdGhlYWRlckNsYXNzTmFtZSxcblx0XHRcdGJ1c2luZXNzSG91cnMsXG5cdFx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdFx0XHR0aW1lRm9ybWF0LFxuXHRcdFx0Y2xhc3Nlc092ZXJyaWRlLFxuXHRcdF1cblx0KVxuXG5cdHJldHVybiAoXG5cdFx0PENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cblx0XHRcdHtjaGlsZHJlbn1cblx0XHQ8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBFdmVudEZvcm0gfSBmcm9tICdAL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtJ1xuaW1wb3J0IHsgSGVhZGVyIH0gZnJvbSAnQC9jb21wb25lbnRzL2hlYWRlcidcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IFJlc291cmNlRGF5VmlldyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldydcbmltcG9ydCB7IFJlc291cmNlTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldydcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhckJvZHk6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7XG5cdFx0dmlldyxcblx0XHRpc0V2ZW50Rm9ybU9wZW4sXG5cdFx0Y2xvc2VFdmVudEZvcm0sXG5cdFx0c2VsZWN0ZWRFdmVudCxcblx0XHRhZGRFdmVudCxcblx0XHR1cGRhdGVFdmVudCxcblx0XHRkZWxldGVFdmVudCxcblx0XHRyZW5kZXJFdmVudEZvcm0sXG5cdH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3Qgdmlld01hcCA9IHtcblx0XHRtb250aDogPFJlc291cmNlTW9udGhWaWV3IGtleT1cIm1vbnRoXCIgLz4sXG5cdFx0d2VlazogPFJlc291cmNlV2Vla1ZpZXcga2V5PVwid2Vla1wiIC8+LFxuXHRcdGRheTogPFJlc291cmNlRGF5VmlldyBrZXk9XCJkYXlcIiAvPixcblx0fVxuXG5cdGNvbnN0IGhhbmRsZU9uVXBkYXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG5cdFx0dXBkYXRlRXZlbnQoZXZlbnQuaWQsIGV2ZW50KVxuXHR9XG5cblx0Y29uc3QgaGFuZGxlT25EZWxldGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcblx0XHRkZWxldGVFdmVudChldmVudC5pZClcblx0fVxuXG5cdGNvbnN0IGV2ZW50Rm9ybVByb3BzID0ge1xuXHRcdG9wZW46IGlzRXZlbnRGb3JtT3Blbixcblx0XHRvbkNsb3NlOiBjbG9zZUV2ZW50Rm9ybSxcblx0XHRzZWxlY3RlZEV2ZW50LFxuXHRcdG9uQWRkOiBhZGRFdmVudCxcblx0XHRvblVwZGF0ZTogaGFuZGxlT25VcGRhdGUsXG5cdFx0b25EZWxldGU6IGhhbmRsZU9uRGVsZXRlLFxuXHR9XG5cblx0cmV0dXJuIChcblx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuXHRcdFx0PEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG5cdFx0XHR7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVQcmVzZW5jZSBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cblx0XHRcdDxDYWxlbmRhckRuZENvbnRleHQ+XG5cdFx0XHRcdDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB4OiAwIH19XG5cdFx0XHRcdFx0XHRjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldIEBjb250YWluZXIvY2FsZW5kYXItYm9keVwiXG5cdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHg6IC0yMCB9fVxuXHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB4OiAyMCB9fVxuXHRcdFx0XHRcdFx0a2V5PXt2aWV3fVxuXHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4xLCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt2aWV3TWFwW3ZpZXddfVxuXHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHQ8L0NhbGVuZGFyRG5kQ29udGV4dD5cblxuXHRcdFx0ey8qIEV2ZW50IEZvcm0gRGlhbG9nICovfVxuXHRcdFx0e3JlbmRlckV2ZW50Rm9ybVxuXHRcdFx0XHQ/IHJlbmRlckV2ZW50Rm9ybShldmVudEZvcm1Qcm9wcylcblx0XHRcdFx0OiBpc0V2ZW50Rm9ybU9wZW4gJiYgPEV2ZW50Rm9ybSB7Li4uZXZlbnRGb3JtUHJvcHN9IC8+fVxuXHRcdDwvZGl2PlxuXHQpXG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGF5SG91cnMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgY3VycmVudExvY2FsZSwgdGltZUZvcm1hdCB9ID1cblx0XHR1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Ly8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG5cdGNvbnN0IGRheUhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSB9KVxuXG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlRXZlbnRHcmlkIGRheXM9e2RheUhvdXJzfSBncmlkVHlwZT1cImhvdXJcIj5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBzaHJpbmstMCBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciBzdGlja3kgdG9wLTAgbGVmdC0wIGJnLWJhY2tncm91bmQgei0yMFwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgZmxleCBmbGV4LWNvbFwiPlxuXHRcdFx0XHR7LyogVGltZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHtkYXlIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLWRheS1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX1gXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQndy0yMCBib3JkZXItYiBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBzaHJpbmstMCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGRhdGEtdGVzdGlkPXtgcmVzb3VyY2UtZGF5LXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEhvcml6b250YWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL2hvcml6b250YWwtZ3JpZC9ob3Jpem9udGFsLWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VFdmVudEdyaWRQcm9wcyB7XG5cdC8qKlxuXHQgKiBBcnJheSBvZiBkYXlzIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWRcblx0ICovXG5cdGRheXM6IGRheWpzLkRheWpzW11cblx0LyoqIFRoZSB0eXBlIG9mIGdyaWQgdG8gZGlzcGxheSAtICdkYXknIGZvciBkYXkgdmlldywgJ2hvdXInIGZvciB3ZWVrIHZpZXdcblx0ICogKGFmZmVjdHMgZXZlbnQgcG9zaXRpb25pbmcgbG9naWMpXG5cdCAqL1xuXHRncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInXG5cdC8qKlxuXHQgKiBDaGlsZHJlbiB3aWxsIGJlIHJlbmRlcmVkIGFzIGhlYWRlcnMgYWJvdmUgdGhlIGdyaWRcblx0ICogKGUuZy4sIGZvciBkYXkgbmFtZXMgaW4gbW9udGggdmlldylcblx0ICovXG5cdGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG5cdGNsYXNzZXM/OiB7IGhlYWRlcj86IHN0cmluZzsgYm9keT86IHN0cmluZzsgc2Nyb2xsPzogc3RyaW5nIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRXZlbnRHcmlkOiBSZWFjdC5GQzxSZXNvdXJjZUV2ZW50R3JpZFByb3BzPiA9ICh7XG5cdGRheXMsXG5cdGdyaWRUeXBlID0gJ2RheScsXG5cdGNoaWxkcmVuLFxuXHRjbGFzc2VzLFxufSkgPT4ge1xuXHRjb25zdCB7IGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCB2aXNpYmxlUmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cblx0Y29uc3QgY29sdW1ucyA9IGRheXMubWFwKChkYXkpID0+ICh7XG5cdFx0aWQ6IGBjb2wtJHtkYXkudG9JU09TdHJpbmcoKX1gLFxuXHRcdGRheSxcblx0XHRncmlkVHlwZSxcblx0fSkpXG5cblx0Y29uc3Qgcm93cyA9IHZpc2libGVSZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKHtcblx0XHRpZDogcmVzb3VyY2UuaWQsXG5cdFx0dGl0bGU6IHJlc291cmNlLnRpdGxlLFxuXHRcdHJlc291cmNlOiByZXNvdXJjZSxcblx0XHRjb2x1bW5zLFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxIb3Jpem9udGFsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17Y2xhc3Nlc31cblx0XHRcdGRheU51bWJlckhlaWdodD17MH1cblx0XHRcdGdyaWRUeXBlPXtncmlkVHlwZX1cblx0XHRcdHJvd3M9e3Jvd3N9XG5cdFx0PlxuXHRcdFx0e2NoaWxkcmVufVxuXHRcdDwvSG9yaXpvbnRhbEdyaWQ+XG5cdClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxEYXlDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1kYXktcm93L2FsbC1kYXktY2VsbCdcbmltcG9ydCB7IEFsbERheVJvdyB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LXJvdydcbmltcG9ydCB7IFJlc291cmNlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9yZXNvdXJjZS1jZWxsJ1xuaW1wb3J0IHsgVmVydGljYWxHcmlkIH0gZnJvbSAnQC9jb21wb25lbnRzL3ZlcnRpY2FsLWdyaWQvdmVydGljYWwtZ3JpZCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXREYXlIb3VycyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZURheVZlcnRpY2FsOiBSZWFjdC5GQyA9ICgpID0+IHtcblx0Y29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0VmlzaWJsZVJlc291cmNlcywgY3VycmVudExvY2FsZSwgdGltZUZvcm1hdCB9ID1cblx0XHR1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0Y29uc3QgcmVzb3VyY2VzID0gZ2V0VmlzaWJsZVJlc291cmNlcygpXG5cdGNvbnN0IGhvdXJzID0gZ2V0RGF5SG91cnMoeyByZWZlcmVuY2VEYXRlOiBjdXJyZW50RGF0ZSB9KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAndGltZS1jb2wnLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGRheXM6IGhvdXJzLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHRcdG5vRXZlbnRzOiB0cnVlLFxuXHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgcC0yIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14cyBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuXHRcdFx0XHR7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG5cdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdGhvdXIxMjogdGltZUZvcm1hdCA9PT0gJzEyLWhvdXInLFxuXHRcdFx0XHR9KS5mb3JtYXQoZGF0ZS50b0RhdGUoKSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgZGF5LWNvbC0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0ZGF5czogaG91cnMsXG5cdFx0ZGF5OiBjdXJyZW50RGF0ZSxcblx0XHRncmlkVHlwZTogJ2hvdXInIGFzIGNvbnN0LFxuXHR9KSlcblxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGxcIj5cblx0XHRcdFx0XHQ8QWxsRGF5Q2VsbCAvPlxuXHRcdFx0XHRcdHtyZXNvdXJjZXMubWFwKChyZXNvdXJjZSkgPT4gKFxuXHRcdFx0XHRcdFx0PEFsbERheVJvd1xuXHRcdFx0XHRcdFx0XHRjbGFzc2VzPXt7IGNlbGw6ICdtaW4tdy01MCcgfX1cblx0XHRcdFx0XHRcdFx0ZGF5cz17W2N1cnJlbnREYXRlXX1cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtYWxsZGF5LXJvdy0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRcdHJlc291cmNlPXtyZXNvdXJjZX1cblx0XHRcdFx0XHRcdFx0c2hvd1NwYWNlcj17ZmFsc2V9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdGNlbGxTbG90cz17WzAsIDE1LCAzMCwgNDVdfVxuXHRcdFx0Y2xhc3Nlcz17eyBib2R5OiAndy1mdWxsJywgaGVhZGVyOiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtZGF5XCJcblx0XHRcdGdyaWRUeXBlPVwiaG91clwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTBcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS1kYXktaG9yaXpvbnRhbCdcbmltcG9ydCB7IFJlc291cmNlRGF5VmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlRGF5VmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgb3JpZW50YXRpb24gfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRpZiAob3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcblx0XHRyZXR1cm4gPFJlc291cmNlRGF5VmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VEYXlIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldE1vbnRoRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIHQgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSBjYWxlbmRhciBncmlkIC0gZGF5cyBvZiB0aGUgbW9udGhcblx0Y29uc3QgbW9udGhEYXlzID0gdXNlTWVtbzxkYXlqcy5EYXlqc1tdPigoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1vbnRoRGF5cyhjdXJyZW50RGF0ZSlcblx0fSwgW2N1cnJlbnREYXRlXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZCBkYXlzPXttb250aERheXN9PlxuXHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ3LTQwIGJvcmRlci1iIGJvcmRlci1yIHNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cblx0XHRcdDwvZGl2PlxuXG5cdFx0XHR7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuXHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2UtbW9udGgtaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YFxuXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT1cInctMjAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuXHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRrZXk9e2Ake2tleX0tbW90aW9uYH1cblx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdGVhc2U6ICdlYXNlSW5PdXQnLFxuXHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnZGRkJyl9XG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PC9tb3Rpb24uZGl2PlxuXHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHQpXG5cdFx0XHR9KX1cblx0XHQ8L1Jlc291cmNlRXZlbnRHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL3Jlc291cmNlLWNlbGwnXG5pbXBvcnQgeyBWZXJ0aWNhbEdyaWQgfSBmcm9tICdAL2NvbXBvbmVudHMvdmVydGljYWwtZ3JpZC92ZXJ0aWNhbC1ncmlkJ1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHRjb25zdCByZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblx0Y29uc3Qgc3RhcnRPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuXHRjb25zdCBkYXlzSW5Nb250aCA9IEFycmF5LmZyb20oXG5cdFx0eyBsZW5ndGg6IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKCkgfSxcblx0XHQoXywgaSkgPT4gc3RhcnRPZk1vbnRoLmFkZChpLCAnZGF5Jylcblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0ge1xuXHRcdGlkOiAnZGF0ZS1jb2wnLFxuXHRcdGRheXM6IGRheXNJbk1vbnRoLFxuXHRcdGRheTogdW5kZWZpbmVkLFxuXHRcdGNsYXNzTmFtZTpcblx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdFx0bm9FdmVudHM6IHRydWUsXG5cdFx0cmVuZGVyQ2VsbDogKGRhdGU6IGRheWpzLkRheWpzKSA9PiAoXG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdDxzcGFuPntkYXRlLmZvcm1hdCgnRCcpfTwvc3Bhbj5cblx0XHRcdFx0PHNwYW4+e2RhdGUuZm9ybWF0KCdkZGQnKX08L3NwYW4+XG5cdFx0XHQ8L2Rpdj5cblx0XHQpLFxuXHR9XG5cblx0Y29uc3QgY29sdW1ucyA9IHJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuXHRcdGlkOiBgbW9udGgtY29sLXJlc291cmNlLSR7cmVzb3VyY2UuaWR9YCxcblx0XHRkYXk6IHVuZGVmaW5lZCxcblx0XHRyZXNvdXJjZUlkOiByZXNvdXJjZS5pZCxcblx0XHRkYXlzOiBkYXlzSW5Nb250aCxcblx0XHRncmlkVHlwZTogJ2RheScgYXMgY29uc3QsXG5cdH0pKVxuXG5cdHJldHVybiAoXG5cdFx0PFZlcnRpY2FsR3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICd3LWZ1bGwnLCBib2R5OiAndy1mdWxsJyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtdmVydGljYWwtZ3JpZFwiXG5cdFx0PlxuXHRcdFx0ey8qIEhlYWRlciAqL31cblx0XHRcdDxkaXZcblx0XHRcdFx0Y2xhc3NOYW1lPXsnZmxleCBib3JkZXItYiBoLTEyIGZsZXgtMSd9XG5cdFx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2UtbW9udGgtaGVhZGVyXCJcblx0XHRcdD5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCBib3JkZXItciB3LTE2IHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCIgLz5cblx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0PFJlc291cmNlQ2VsbFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lPVwibWluLXctNTBcIlxuXHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2UtY2VsbC0ke3Jlc291cmNlLmlkfWB9XG5cdFx0XHRcdFx0XHRyZXNvdXJjZT17cmVzb3VyY2V9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSl9XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L1ZlcnRpY2FsR3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aEhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoVmVydGljYWwgfSBmcm9tICcuL3Jlc291cmNlLW1vbnRoLXZlcnRpY2FsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VNb250aFZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZU1vbnRoVmVydGljYWwgLz5cblx0fVxuXG5cdHJldHVybiA8UmVzb3VyY2VNb250aEhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXREYXlIb3VycywgZ2V0V2Vla0RheXMgfSBmcm9tICdAL2xpYi91dGlscy9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrLCB0LCBjdXJyZW50TG9jYWxlLCB0aW1lRm9ybWF0IH0gPVxuXHRcdHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuXHRjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcblx0XHRyZXR1cm4gd2Vla0RheXMuZmxhdE1hcCgoZGF5KSA9PiBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGU6IGRheSB9KSlcblx0fSwgW3dlZWtEYXlzXSlcblxuXHRyZXR1cm4gKFxuXHRcdDxSZXNvdXJjZUV2ZW50R3JpZFxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0ZGF5cz17d2Vla0hvdXJzfVxuXHRcdFx0Z3JpZFR5cGU9XCJob3VyXCJcblx0XHQ+XG5cdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInctNDAgYm9yZGVyLWIgYm9yZGVyLXIgc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cblx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3Jlc291cmNlcycpfTwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIERheSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzVG9kYXkgPSBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0PEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuXHRcdFx0XHRcdFx0XHRcdDxtb3Rpb24uZGl2XG5cdFx0XHRcdFx0XHRcdFx0XHRhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzTmFtZT17Y24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdzaHJpbmstMCBib3JkZXItciBsYXN0OmJvcmRlci1yLTAgYm9yZGVyLWIgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gdy1bY2FsYygyNCp2YXIoLS1zcGFjaW5nKSoyMCldJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNUb2RheSAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwJ1xuXHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e2RheS5mb3JtYXQoJ00vRCcpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXG5cdFx0XHRcdHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyIGJvcmRlci1iXCI+XG5cdFx0XHRcdFx0e3dlZWtIb3Vycy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7Y29sLnRvSVNPU3RyaW5nKCl9LWhvdXJgXG5cblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bW90aW9uLmRpdlxuXHRcdFx0XHRcdFx0XHRcdFx0YW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc05hbWU9e2NuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQndy0yMCBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIHNocmluay0wJyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG5cdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YS10ZXN0aWQ9e2ByZXNvdXJjZS13ZWVrLXRpbWUtbGFiZWwtJHtjb2wuZm9ybWF0KCdISCcpfWB9XG5cdFx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRob3VyMTI6IHRpbWVGb3JtYXQgPT09ICcxMi1ob3VyJyxcblx0XHRcdFx0XHRcdFx0XHRcdH0pLmZvcm1hdChjb2wudG9EYXRlKCkpfVxuXHRcdFx0XHRcdFx0XHRcdDwvbW90aW9uLmRpdj5cblx0XHRcdFx0XHRcdFx0PC9BbmltYXRlUHJlc2VuY2U+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9SZXNvdXJjZUV2ZW50R3JpZD5cblx0KVxufVxuIiwKICAgICJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQWxsRGF5Q2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9hbGwtZGF5LXJvdy9hbGwtZGF5LWNlbGwnXG5pbXBvcnQgeyBBbGxEYXlSb3cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWRheS1yb3cvYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBSZXNvdXJjZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvcmVzb3VyY2UtY2VsbCdcbmltcG9ydCB7IFZlcnRpY2FsR3JpZCB9IGZyb20gJ0AvY29tcG9uZW50cy92ZXJ0aWNhbC1ncmlkL3ZlcnRpY2FsLWdyaWQnXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldERheUhvdXJzLCBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZVdlZWtWZXJ0aWNhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG5cdGNvbnN0IHtcblx0XHRjdXJyZW50RGF0ZSxcblx0XHRnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXHRcdGZpcnN0RGF5T2ZXZWVrLFxuXHRcdGN1cnJlbnRMb2NhbGUsXG5cdFx0dGltZUZvcm1hdCxcblx0XHR0LFxuXHR9ID0gdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG5cdGNvbnN0IHJlc291cmNlcyA9IGdldFZpc2libGVSZXNvdXJjZXMoKVxuXHQvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcblx0Y29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuXHRcdCgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG5cdFx0W2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cblx0KVxuXG5cdGNvbnN0IGZpcnN0Q29sID0gdXNlTWVtbyhcblx0XHQoKSA9PiAoe1xuXHRcdFx0aWQ6ICd0aW1lLWNvbCcsXG5cdFx0XHRkYXlzOiBnZXREYXlIb3Vycyh7IHJlZmVyZW5jZURhdGU6IGN1cnJlbnREYXRlIH0pLFxuXHRcdFx0ZGF5OiB1bmRlZmluZWQsXG5cdFx0XHRjbGFzc05hbWU6XG5cdFx0XHRcdCdzaHJpbmstMCB3LTE2IG1pbi13LTE2IG1heC13LTE2IHN0aWNreSBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwJyxcblx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRub0V2ZW50czogdHJ1ZSxcblx0XHRcdHJlbmRlckNlbGw6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gKFxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBwLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyXCI+XG5cdFx0XHRcdFx0e0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwge1xuXHRcdFx0XHRcdFx0aG91cjogJ251bWVyaWMnLFxuXHRcdFx0XHRcdFx0aG91cjEyOiB0aW1lRm9ybWF0ID09PSAnMTItaG91cicsXG5cdFx0XHRcdFx0fSkuZm9ybWF0KGRhdGUudG9EYXRlKCkpfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdCksXG5cdFx0fSksXG5cdFx0W2N1cnJlbnREYXRlLCBjdXJyZW50TG9jYWxlLCB0aW1lRm9ybWF0XVxuXHQpXG5cblx0Y29uc3QgY29sdW1ucyA9IHVzZU1lbW8oXG5cdFx0KCkgPT5cblx0XHRcdHJlc291cmNlcy5mbGF0TWFwKChyZXNvdXJjZSkgPT5cblx0XHRcdFx0d2Vla0RheXMubWFwKChkYXkpID0+ICh7XG5cdFx0XHRcdFx0aWQ6IGBkYXktY29sLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfS1yZXNvdXJjZS0ke3Jlc291cmNlLmlkfWAsXG5cdFx0XHRcdFx0cmVzb3VyY2VJZDogcmVzb3VyY2UuaWQsXG5cdFx0XHRcdFx0ZGF5LFxuXHRcdFx0XHRcdGRheXM6IGdldERheUhvdXJzKHsgcmVmZXJlbmNlRGF0ZTogZGF5IH0pLFxuXHRcdFx0XHRcdGdyaWRUeXBlOiAnaG91cicgYXMgY29uc3QsXG5cdFx0XHRcdH0pKVxuXHRcdFx0KSxcblx0XHRbcmVzb3VyY2VzLCB3ZWVrRGF5c11cblx0KVxuXHRyZXR1cm4gKFxuXHRcdDxWZXJ0aWNhbEdyaWRcblx0XHRcdGFsbERheVJvdz17XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleFwiPlxuXHRcdFx0XHRcdDxBbGxEYXlDZWxsIC8+XG5cdFx0XHRcdFx0e3Jlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoXG5cdFx0XHRcdFx0XHQ8QWxsRGF5Um93XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXM9e3sgY2VsbDogJ21pbi13LTUwJyB9fVxuXHRcdFx0XHRcdFx0XHRkYXlzPXt3ZWVrRGF5c31cblx0XHRcdFx0XHRcdFx0a2V5PXtgcmVzb3VyY2Utd2Vlay1hbGxkYXktcm93LSR7cmVzb3VyY2UuaWR9YH1cblx0XHRcdFx0XHRcdFx0cmVzb3VyY2U9e3Jlc291cmNlfVxuXHRcdFx0XHRcdFx0XHRzaG93U3BhY2VyPXtmYWxzZX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0KSl9XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0Y2xhc3Nlcz17eyBoZWFkZXI6ICdoLTI0JyB9fVxuXHRcdFx0Y29sdW1ucz17W2ZpcnN0Q29sLCAuLi5jb2x1bW5zXX1cblx0XHRcdGRhdGEtdGVzdGlkPVwicmVzb3VyY2Utd2Vla1wiXG5cdFx0XHRncmlkVHlwZT1cImhvdXJcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGZsZXggZmxleC1jb2xcIj5cblx0XHRcdFx0ey8qIFJlc291cmNlIGhlYWRlciByb3cgKi99XG5cdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLTEyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzaHJpbmstMCB3LTE2IGJvcmRlci1yIHotMjAgYmctYmFja2dyb3VuZCBzdGlja3kgbGVmdC0wXCI+XG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzc05hbWU9XCJweC0yIGgtZnVsbCB3LWZ1bGwgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1lbmQgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cblx0XHRcdFx0XHRcdFx0e3QoJ3dlZWsnKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7cmVzb3VyY2VzLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBrZXkgPSBgcmVzb3VyY2Utd2Vlay1oZWFkZXItJHtyZXNvdXJjZS5pZH0tZGF5YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3Nocmluay0wIGJvcmRlci1yIGxhc3Q6Ym9yZGVyLXItMCBib3JkZXItYiBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSB3LVtjYWxjKDcqdmFyKC0tc3BhY2luZykqNTApXSdcblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0aW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cblx0XHRcdFx0XHRcdFx0XHRcdGtleT17YCR7a2V5fS1tb3Rpb25gfVxuXHRcdFx0XHRcdFx0XHRcdFx0dHJhbnNpdGlvbj17e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkdXJhdGlvbjogMC4yNSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWFzZTogJ2Vhc2VJbk91dCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGF5OiBpbmRleCAqIDAuMDUsXG5cdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdDxSZXNvdXJjZUNlbGwgY2xhc3NOYW1lPVwiaC1mdWxsXCIgcmVzb3VyY2U9e3Jlc291cmNlfT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJzdGlja3kgbGVmdC0xLzIgdGV4dC1zbSBmb250LW1lZGl1bSB0cnVuY2F0ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHtyZXNvdXJjZS50aXRsZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L1Jlc291cmNlQ2VsbD5cblx0XHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblxuXHRcdFx0XHR7LyogRGF0ZSBoZWFkZXIgcm93ICovfVxuXHRcdFx0XHQ8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMlwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3NOYW1lPVwic2hyaW5rLTAgdy0xNiBib3JkZXItciBib3JkZXItYiB6LTIwIGJnLWJhY2tncm91bmQgc3RpY2t5IGxlZnQtMFwiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3NOYW1lPVwicHgtMiBoLWZ1bGwgdy1mdWxsIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgZm9udC1tZWRpdW1cIj5cblx0XHRcdFx0XHRcdFx0e2N1cnJlbnREYXRlLndlZWsoKX1cblx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHR7Y29sdW1ucy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdGNvbnN0IGRheSA9IGNvbC5kYXlcblx0XHRcdFx0XHRcdGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfS1ob3VyLSR7Y29sLnJlc291cmNlSWR9YFxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHQ8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG5cdFx0XHRcdFx0XHRcdFx0PG1vdGlvbi5kaXZcblx0XHRcdFx0XHRcdFx0XHRcdGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3NOYW1lPXtjbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3ctNTAgYm9yZGVyLXIgbGFzdDpib3JkZXItci0wIGJvcmRlci1iIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQteHMgc2hyaW5rLTAgYmctYmFja2dyb3VuZCdcblx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRlc3RpZD17YHJlc291cmNlLXdlZWstdGltZS1sYWJlbC0ke2RheS5mb3JtYXQoJ0hIJyl9YH1cblx0XHRcdFx0XHRcdFx0XHRcdGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG5cdFx0XHRcdFx0XHRcdFx0XHRpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5PXtgJHtrZXl9LW1vdGlvbmB9XG5cdFx0XHRcdFx0XHRcdFx0XHR0cmFuc2l0aW9uPXt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAwLjI1LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlYXNlOiAnZWFzZUluT3V0Jyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsYXk6IGluZGV4ICogMC4wNSxcblx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7ZGF5LmZvcm1hdCgnTS9EJyl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0XHRcdFx0XHQ8L21vdGlvbi5kaXY+XG5cdFx0XHRcdFx0XHRcdDwvQW5pbWF0ZVByZXNlbmNlPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH0pfVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvVmVydGljYWxHcmlkPlxuXHQpXG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtIb3Jpem9udGFsIH0gZnJvbSAnLi9yZXNvdXJjZS13ZWVrLWhvcml6b250YWwnXG5pbXBvcnQgeyBSZXNvdXJjZVdlZWtWZXJ0aWNhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay12ZXJ0aWNhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlV2Vla1ZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuXHRjb25zdCB7IG9yaWVudGF0aW9uIH0gPSB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cblx0aWYgKG9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG5cdFx0cmV0dXJuIDxSZXNvdXJjZVdlZWtWZXJ0aWNhbCAvPlxuXHR9XG5cblx0cmV0dXJuIDxSZXNvdXJjZVdlZWtIb3Jpem9udGFsIC8+XG59XG4iLAogICAgImltcG9ydCB0eXBlIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHR5cGUge1xuXHRJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wRXZlbnQsXG5cdElsYW15UmVzb3VyY2VDYWxlbmRhclByb3BzLFxufSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL3R5cGVzJ1xuaW1wb3J0IHtcblx0REFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0R0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdFdFRUtfREFZU19OVU1CRVJfTUFQLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVFdmVudHMsIHNhZmVEYXRlIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQm9keSB9IGZyb20gJy4vcmVzb3VyY2UtY2FsZW5kYXItYm9keSdcblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcblx0ZXZlbnRzID0gW10sXG5cdHJlc291cmNlcyA9IFtdLFxuXHRmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuXHRpbml0aWFsVmlldyA9ICdtb250aCcsXG5cdGluaXRpYWxEYXRlLFxuXHRkaXNhYmxlRHJhZ0FuZERyb3AgPSBmYWxzZSxcblx0ZGF5TWF4RXZlbnRzID0gREFZX01BWF9FVkVOVFNfREVGQVVMVCxcblx0dGltZUZvcm1hdCA9ICcxMi1ob3VyJyxcblx0ZXZlbnRTcGFjaW5nID0gR0FQX0JFVFdFRU5fRUxFTUVOVFMsXG5cdC4uLnByb3BzXG59KSA9PiB7XG5cdHJldHVybiAoXG5cdFx0PFJlc291cmNlQ2FsZW5kYXJQcm92aWRlclxuXHRcdFx0ZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG5cdFx0XHRkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cblx0XHRcdGV2ZW50U3BhY2luZz17ZXZlbnRTcGFjaW5nfVxuXHRcdFx0ZXZlbnRzPXtub3JtYWxpemVFdmVudHM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcEV2ZW50LCBDYWxlbmRhckV2ZW50Pihcblx0XHRcdFx0ZXZlbnRzXG5cdFx0XHQpfVxuXHRcdFx0Zmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cblx0XHRcdGluaXRpYWxEYXRlPXtzYWZlRGF0ZShpbml0aWFsRGF0ZSl9XG5cdFx0XHRpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG5cdFx0XHRyZXNvdXJjZXM9e3Jlc291cmNlc31cblx0XHRcdHRpbWVGb3JtYXQ9e3RpbWVGb3JtYXR9XG5cdFx0XHR7Li4ucHJvcHN9XG5cdFx0PlxuXHRcdFx0PFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG5cdFx0PC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG5cdClcbn1cbiIKICBdLAogICJtYXBwaW5ncyI6ICJBQUlBLGdCQUFTLGVDSlQsZ0JBQVMsZUNBVCxzQkFDQSwwQ0FDQSw4Q0FDQSwrQ0FDQSwyQ0FDQSx1Q0FDQSx5Q0FDQSxvQ0FDQSx3Q0FDQSwyQ0FlQSwyQkFDQSwyQkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSw4QkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSw4QkFDQSw4QkFDQSwyQkFDQSwyQkFDQSwyQkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSwyQkFDQSwyQkFDQSw4QkFDQSw4QkFDQSw4QkFDQSw4QkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSw4QkFDQSw4QkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSxpQ0FDQSwyQkFDQSwyQkFDQSwyQkFDQSwyQkFDQSwy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eUIsQ0FDaEQsRUFBWSxFQUFNLEVBQUUsRUFVckIsRUFFQSxPQUNDLEdBdUJFLE1BdkJGLENBQUssVUFBVSw4QkFBZixTQXVCRSxDQXRCRCxHQUFDLEdBQUQsQ0FBUSxVQUFVLE1BQU0sRUFHeEIsR0FhRSxHQWJGLFVBQ0MsR0FXRSxHQVhGLENBQWlCLEtBQUssT0FBdEIsU0FDQyxHQVNFLEdBQU8sSUFUVCxDQUNDLFFBQVMsQ0FBRSxRQUFTLEVBQUcsRUFBRyxDQUFFLEVBQzVCLFVBQVUsd0RBQ1YsS0FBTSxDQUFFLFFBQVMsRUFBRyxFQUFHLEdBQUksRUFDM0IsUUFBUyxDQUFFLFFBQVMsRUFBRyxFQUFHLEVBQUcsRUFFN0IsV0FBWSxDQUFFLFNBQVUsSUFBSyxLQUFNLFdBQVksRUFOaEQsU0FRRSxFQUFRLElBSEosQ0FJSixFQUNELEVBQ0QsRUFHRCxFQUNFLEVBQWdCLENBQWMsRUFDOUIsR0FBbUIsR0FBQyxHQUFELElBQWUsRUFBZ0IsR0FDcEQsNENXdkRHLElBQU0sR0FBOEQsRUFDMUUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsYUFBYSxVQUNiLGVBQWUsTUFDWixLQUNFLENBQ0wsT0FDQyxHQWVFLEdBZkYsQ0FDQyxhQUFjLEVBQ2QsbUJBQW9CLEVBQ3BCLGFBQWMsRUFDZCxPQUFRLEdBQ1AsQ0FDRCxFQUNBLGVBQWdCLEdBQXFCLEdBQ3JDLFlBQWEsR0FBUyxDQUFXLEVBQ2pDLFlBQWEsRUFDYixVQUFXLEVBQ1gsV0FBWSxLQUNSLEVBWkwsU0FjQyxHQUFDLEdBQUQsRUFBc0IsRUFDckIiLAogICJkZWJ1Z0lkIjogIjZEREMzRTU2M0VEMkIzOTA2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|