@ilamy/calendar 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import{AnimatePresence as Ep,motion as vp}from"motion/react";import yp,{useMemo as cp}from"react";import{createContext as D5,useContext as Uf}from"react";var dP=D5(void 0),x=()=>{let P=Uf(dP);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},u5=()=>{let P=Uf(dP);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}};import{clsx as t5}from"clsx";import UP from"dayjs";import x5 from"dayjs/plugin/weekday.js";import E5 from"dayjs/plugin/weekOfYear.js";import v5 from"dayjs/plugin/isSameOrAfter.js";import y5 from"dayjs/plugin/isSameOrBefore.js";import c5 from"dayjs/plugin/isBetween.js";import r5 from"dayjs/plugin/minMax.js";import j5 from"dayjs/plugin/timezone.js";import l5 from"dayjs/plugin/utc.js";import d5 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";UP.extend(x5);UP.extend(E5);UP.extend(v5);UP.extend(y5);UP.extend(c5);UP.extend(r5);UP.extend(j5);UP.extend(l5);UP.extend(d5);var A=UP;import{twMerge as s5}from"tailwind-merge";function AP(P,f){let p=P.startOf("week").day(f),_=P.isBefore(p)?p.subtract(1,"week"):p;return Array.from({length:7},($,Q)=>_.add(Q,"day"))}function z(...P){return s5(t5(P))}function Gf(P){if(A.isDayjs(P))return P;let f=A(P);return f.isValid()?f:A()}var Nf=(P,f)=>{let p={...P};for(let _ of f)delete p[_];return p};function Bf(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:A.isDayjs(f.start)?f.start:A(f.start),end:A.isDayjs(f.end)?f.end:A(f.end)}})}import{jsx as W_}from"react/jsx-runtime";import{Slot as a5}from"@radix-ui/react-slot";import{cva as n5}from"class-variance-authority";import{jsx as e5}from"react/jsx-runtime";var H0=n5("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 shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs 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 shadow-xs 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"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:f,size:p,asChild:_=!1,...$}){return e5(_?a5:"button",{"data-slot":"button",className:z(H0({variant:f,size:p,className:P})),...$})}import*as A0 from"react";import{ChevronDownIcon as Pp,ChevronLeftIcon as fp,ChevronRightIcon as pp}from"lucide-react";import{DayPicker as _p,getDefaultClassNames as Ff}from"react-day-picker";import{jsx as wP}from"react/jsx-runtime";function Wf({className:P,classNames:f,showOutsideDays:p=!0,captionLayout:_="label",buttonVariant:$="ghost",formatters:Q,components:X,...J}){let Y=Ff();return wP(_p,{showOutsideDays:p,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:_,formatters:{formatMonthDropdown:(q)=>q.toLocaleString("default",{month:"short"}),...Q},classNames:{root:z("w-fit",Y.root),months:z("flex gap-4 flex-col md:flex-row relative",Y.months),month:z("flex flex-col w-full gap-4",Y.month),nav:z("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",Y.nav),button_previous:z(H0({variant:$}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Y.button_previous),button_next:z(H0({variant:$}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Y.button_next),month_caption:z("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",Y.month_caption),dropdowns:z("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",Y.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",Y.dropdown_root),dropdown:z("absolute bg-popover inset-0 opacity-0",Y.dropdown),caption_label:z("select-none font-medium",_==="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",Y.caption_label),table:"w-full border-collapse",weekdays:z("flex",Y.weekdays),weekday:z("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",Y.weekday),week:z("flex w-full mt-2",Y.week),week_number_header:z("select-none w-(--cell-size)",Y.week_number_header),week_number:z("text-[0.8rem] select-none text-muted-foreground",Y.week_number),day:z("relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Y.day),range_start:z("rounded-l-md bg-accent",Y.range_start),range_middle:z("rounded-none",Y.range_middle),range_end:z("rounded-r-md bg-accent",Y.range_end),today:z("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",Y.today),outside:z("text-muted-foreground aria-selected:text-muted-foreground",Y.outside),disabled:z("text-muted-foreground opacity-50",Y.disabled),hidden:z("invisible",Y.hidden),...f},components:{Root:({className:q,rootRef:G,...M})=>{return wP("div",{"data-slot":"calendar",ref:G,className:z(q),...M})},Chevron:({className:q,orientation:G,...M})=>{if(G==="left")return wP(fp,{className:z("size-4",q),...M});if(G==="right")return wP(pp,{className:z("size-4",q),...M});return wP(Pp,{className:z("size-4",q),...M})},DayButton:Qp,WeekNumber:({children:q,...G})=>{return wP("td",{...G,children:wP("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:q})})},...X},...J})}function Qp({className:P,day:f,modifiers:p,..._}){let $=Ff(),Q=A0.useRef(null);return A0.useEffect(()=>{if(p.focused)Q.current?.focus()},[p.focused]),wP(g,{ref:Q,variant:"ghost",size:"icon","data-day":f.date.toLocaleDateString(),"data-selected-single":p.selected&&!p.range_start&&!p.range_end&&!p.range_middle,"data-range-start":p.range_start,"data-range-end":p.range_end,"data-range-middle":p.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",$.day,P),..._})}import*as M0 from"@radix-ui/react-checkbox";import{CheckIcon as Jp}from"lucide-react";import{jsx as c0}from"react/jsx-runtime";function hP({className:P,...f}){return c0(M0.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:c0(M0.Indicator,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:c0(Jp,{className:"size-3.5"})})})}import{jsx as V0}from"react/jsx-runtime";function Hf({className:P,...f}){return V0("div",{"data-slot":"card",className:z("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),...f})}function Af({className:P,...f}){return V0("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 Mf({className:P,...f}){return V0("div",{"data-slot":"card-title",className:z("leading-none font-semibold",P),...f})}function Vf({className:P,...f}){return V0("div",{"data-slot":"card-content",className:z("p-4 pt-0",P),...f})}import{Calendar as Xp}from"lucide-react";import*as MP from"@radix-ui/react-popover";import{jsx as b0}from"react/jsx-runtime";function VP({...P}){return b0(MP.Root,{"data-slot":"popover",...P})}function bP({...P}){return b0(MP.Trigger,{"data-slot":"popover-trigger",...P})}function SP({className:P,align:f="center",sideOffset:p=4,..._}){return b0(MP.Portal,{children:b0(MP.Content,{"data-slot":"popover-content",align:f,sideOffset:p,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),..._})})}import{useRef as $p}from"react";import{PopoverClose as Zp}from"@radix-ui/react-popover";import{jsx as tP,jsxs as r0}from"react/jsx-runtime";function z0({date:P,closeOnSelect:f,setDate:p,label:_="Pick a date",className:$}){let Q=$p(null),X=(J)=>{if(p(J),f)Q.current?.click()};return tP("div",{className:$,children:r0(VP,{children:[tP(bP,{asChild:!0,children:r0(g,{variant:"outline",className:z("w-full justify-start text-left font-normal",!P&&"text-muted-foreground"),children:[tP(Xp,{className:"mr-2 h-4 w-4"}),P?A(P).format("MMM D, YYYY"):tP("span",{children:_})]})}),r0(SP,{className:"w-auto p-0",align:"start",children:[tP(Zp,{ref:Q}),tP(Wf,{mode:"single",selected:P,onSelect:X,month:P,initialFocus:!0})]})]})})}import*as n from"@radix-ui/react-dialog";import{XIcon as Yp}from"lucide-react";import{jsx as GP,jsxs as j0}from"react/jsx-runtime";function sP({...P}){return GP(n.Root,{"data-slot":"dialog",...P})}function qp({...P}){return GP(n.Portal,{"data-slot":"dialog-portal",...P})}function zp({className:P,...f}){return GP(n.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 aP({className:P,children:f,...p}){return j0(qp,{"data-slot":"dialog-portal",children:[GP(zp,{}),j0(n.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%] overflow-y-scroll",P),...p,children:[f,j0(n.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:[GP(Yp,{}),GP("span",{className:"sr-only",children:"Close"})]})]})]})}function nP({className:P,...f}){return GP("div",{"data-slot":"dialog-header",className:z("flex flex-col gap-2 text-center sm:text-left",P),...f})}function S0({className:P,...f}){return GP("div",{"data-slot":"dialog-footer",className:z("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),...f})}function eP({className:P,...f}){return GP(n.Title,{"data-slot":"dialog-title",className:z("text-lg leading-none font-semibold",P),...f})}function m0({className:P,...f}){return GP(n.Description,{"data-slot":"dialog-description",className:z("text-muted-foreground text-sm",P),...f})}import{jsx as Kp}from"react/jsx-runtime";function mP({className:P,type:f,...p}){return Kp("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),...p})}import*as bf from"@radix-ui/react-label";import{jsx as Lp}from"react/jsx-runtime";function l({className:P,...f}){return Lp(bf.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*as NP from"@radix-ui/react-scroll-area";import{jsx as K0,jsxs as Up}from"react/jsx-runtime";function BP({className:P,children:f,...p}){return Up(NP.Root,{"data-slot":"scroll-area",className:z("relative",P),...p,children:[K0(NP.Viewport,{...p.viewPortProps,"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",p.viewPortProps?.className),children:f}),K0(l0,{}),K0(NP.Corner,{})]})}function l0({className:P,orientation:f="vertical",...p}){return K0(NP.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),...p,children:K0(NP.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}import*as y from"@radix-ui/react-select";import{CheckIcon as Gp,ChevronDownIcon as Sf,ChevronUpIcon as Np}from"lucide-react";import{jsx as s,jsxs as d0}from"react/jsx-runtime";function mf({...P}){return s(y.Root,{"data-slot":"select",...P})}function Of({...P}){return s(y.Value,{"data-slot":"select-value",...P})}function Tf({className:P,size:f="default",children:p,..._}){return d0(y.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),..._,children:[p,s(y.Icon,{asChild:!0,children:s(Sf,{className:"size-4 opacity-50"})})]})}function Rf({className:P,children:f,position:p="popper",..._}){return s(y.Portal,{children:d0(y.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",p==="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:p,..._,children:[s(Bp,{}),s(y.Viewport,{className:z("p-1",p==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),s(Fp,{})]})})}function L0({className:P,children:f,...p}){return d0(y.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),...p,children:[s("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:s(y.ItemIndicator,{children:s(Gp,{className:"size-4"})})}),s(y.ItemText,{children:f})]})}function Bp({className:P,...f}){return s(y.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:z("flex cursor-default items-center justify-center py-1",P),...f,children:s(Np,{className:"size-4"})})}function Fp({className:P,...f}){return s(y.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:z("flex cursor-default items-center justify-center py-1",P),...f,children:s(Sf,{className:"size-4"})})}import*as O0 from"@radix-ui/react-tabs";import{jsx as B9}from"react/jsx-runtime";import*as $P from"@radix-ui/react-tooltip";import{jsx as P0,jsxs as Wp}from"react/jsx-runtime";function t0({delayDuration:P=0,...f}){return P0($P.Provider,{"data-slot":"tooltip-provider",delayDuration:P,...f})}function If({...P}){return P0(t0,{children:P0($P.Root,{"data-slot":"tooltip",...P})})}function gf({...P}){return P0($P.Trigger,{"data-slot":"tooltip-trigger",...P})}function wf({className:P,sideOffset:f=0,children:p,..._}){return P0($P.Portal,{children:Wp($P.Content,{"data-slot":"tooltip-content",sideOffset:f,className:z("bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",P),..._,children:[p,P0($P.Arrow,{className:"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}import{useDraggable as Sp}from"@dnd-kit/core";import{AnimatePresence as mp,motion as Op}from"motion/react";import{memo as Tp}from"react";import{useContext as vf}from"react";import{createContext as Hp,useContext as hf}from"react";var f0=Hp(void 0),ZP=()=>{let P=hf(f0);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},Ap=()=>{let P=hf(f0);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}};import{useCallback as _P,useMemo as Vp,useState as uf}from"react";import{useCallback as e,useEffect as n0,useMemo as Df,useState as xP}from"react";import{RRule as Mp}from"rrule";var p0=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},s0=({event:P,currentEvents:f,startDate:p,endDate:_})=>{if(!P.rrule)return[];try{let $={...P.rrule,dtstart:P.rrule.dtstart||P.start.toDate()},Q=new Mp($),X=f.filter((Z)=>Z.recurrenceId&&Z.uid===P.uid),J=P.end.diff(P.start),Y=p.subtract(J,"millisecond").toDate(),q=_.toDate();return Q.between(Y,q,!0).map((Z,F)=>{let K=A(Z),U=X.find((m)=>Gf(m.recurrenceId).isSame(K));if(U)return{...P,...U};let V=P.end.diff(P.start),N=K.add(V,"millisecond"),L=`${P.id}_${F}`,W=P.uid||`${P.id}@ilamy.calendar`;return{...P,id:L,start:K,end:N,uid:W,rrule:void 0}}).filter((Z)=>{if(P.exdates&&P.exdates.length>0){let U=Z.start.toISOString();if(P.exdates.includes(U))return!1}return Z.start.isSameOrBefore(_)&&Z.end.isSameOrAfter(p)})}catch($){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${$ instanceof Error?$.message:"Unknown error"}`)}},of=({targetEvent:P,updates:f,currentEvents:p,scope:_})=>{let $=[...p],Q=$.findIndex((J)=>{return(J.uid||`${J.id}@ilamy.calendar`)===P.uid&&J.rrule&&!J.recurrenceId});if(Q===-1)throw Error("Base recurring event not found");let X=$[Q];switch(_){case"this":{let J=P.start.toISOString(),q=[...X.exdates||[],J],G={...X,exdates:q};$[Q]=G;let M=`${P.id}_modified_${Date.now()}`,Z={...Nf(P,["width","height","top","left","right"]),...f,id:M,recurrenceId:J,uid:X.uid||`${X.id}@ilamy.calendar`,rrule:void 0};$.push(Z);break}case"following":{let Y=P.start.subtract(1,"day").endOf("day").toDate(),q={...X,rrule:{...X.rrule,until:Y}};$[Q]=q;let G=X.end.diff(X.start),M=f.start||P.start,Z=f.end||M.add(G),F=`${X.id}_following`,K=`${F}@ilamy.calendar`,U={...X,...f,rrule:{...X.rrule,...f.rrule,dtstart:M.toDate()},id:F,uid:K,start:M,end:Z,recurrenceId:void 0};$.push(U);break}case"all":{let J={...X,...f};$[Q]=J;break}default:throw Error(`Invalid scope: ${_}. Must be 'this', 'following', or 'all'`)}return $},kf=({targetEvent:P,currentEvents:f,scope:p})=>{let _=[...f],$=_.findIndex((X)=>{return(X.uid||`${X.id}@ilamy.calendar`)===P.uid&&X.rrule&&!X.recurrenceId});if($===-1)throw Error("Base recurring event not found");let Q=_[$];switch(p){case"this":{let X=P.start.toISOString(),Y=[...Q.exdates||[],X],q={...Q,exdates:Y};_[$]=q;break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),Y={...Q,rrule:{...Q.rrule,until:J}};_[$]=Y;break}case"all":return _.filter((J)=>J.uid!==P.uid);default:throw Error(`Invalid scope: ${p}. Must be 'this', 'following', or 'all'`)}return _};var a0={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 OP=1,Cf=28,d=24,_0=4,T0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var R0=(P)=>{let{events:f=[],firstDayOfWeek:p=0,initialView:_="month",onEventAdd:$,onEventUpdate:Q,onEventDelete:X,onDateChange:J,onViewChange:Y,locale:q,timezone:G,translations:M,translator:Z}=P,[F,K]=xP(A()),[U,V]=xP(_),[N,L]=xP(f),[W,H]=xP(!1),[m,O]=xP(null),[w,b]=xP(null),[o,R]=xP(q||"en"),D=Df(()=>{if(Z)return Z;if(M)return(B)=>M[B]||B;return(B)=>a0[B]||B},[M,Z]),E=e((B,S)=>{let k=[];for(let u of N)if(u.rrule){let pP=s0({event:u,currentEvents:N,startDate:B,endDate:S});k.push(...pP)}else{let pP=u.start.isSameOrAfter(B)&&u.start.isSameOrBefore(S),W0=u.end.isSameOrAfter(B)&&u.end.isSameOrBefore(S),C5=u.start.isBefore(B)&&u.end.isAfter(S);if(pP||W0||C5)k.push(u)}return k},[N]),T=e(()=>{switch(U){case"day":return{start:F.startOf("day"),end:F.endOf("day")};case"week":return{start:F.startOf("week").subtract(p===1?1:0,"day"),end:F.endOf("week").add(p===1?1:0,"day")};case"month":return{start:F.startOf("month").startOf("week").subtract(p===1?1:0,"day"),end:F.endOf("month").endOf("week").add(p===1?1:0,"day")};case"year":return{start:F.startOf("year"),end:F.endOf("year")};default:return{start:F.startOf("month"),end:F.endOf("month")}}},[F,U,p]),v=Df(()=>{let{start:B,end:S}=T();return E(B,S)},[E,T]);n0(()=>{if(f)L(f)},[f]),n0(()=>{if(q)R(q),A.locale(q)},[q]),n0(()=>{if(G)A.tz.setDefault(G)},[G]);let IP=e((B)=>{K(B),J?.(B)},[J]),zP=e(()=>{switch(U){case"month":K((B)=>{let S=B.add(1,"month");return J?.(S),S});break;case"week":K((B)=>{let S=B.add(1,"week");return J?.(S),S});break;case"day":K((B)=>{let S=B.add(1,"day");return J?.(S),S});break;case"year":K((B)=>{let S=B.add(1,"year");return J?.(S),S});break}},[U,J]),WP=e(()=>{switch(U){case"month":K((B)=>{let S=B.subtract(1,"month");return J?.(S),S});break;case"week":K((B)=>{let S=B.subtract(1,"week");return J?.(S),S});break;case"day":K((B)=>{let S=B.subtract(1,"day");return J?.(S),S});break;case"year":K((B)=>{let S=B.subtract(1,"year");return J?.(S),S});break}},[U,J]),HP=e(()=>{let B=A();K(B),J?.(B)},[J]),cP=e((B)=>{L((S)=>[...S,B]),$?.(B)},[$]),gP=e((B,S)=>{L((k)=>{return k.map((pP)=>{if(pP.id===B){let W0={...pP,...S};return Q?.(W0),W0}return pP})})},[Q]),uP=e((B,S,k)=>{let u={...B,...S};Q?.(u);let pP=of({targetEvent:B,updates:S,currentEvents:N,scope:k.scope});L(pP)},[N,Q]),rP=e((B,S)=>{X?.(B);let k=kf({targetEvent:B,currentEvents:N,scope:S.scope});L(k)},[N,X]),jP=e((B)=>{L((S)=>{let k=S.find((u)=>u.id===B);if(k)X?.(k);return S.filter((u)=>u.id!==B)})},[X]),lP=e((B)=>{if(B)b(B);O({title:D("newEvent"),start:B??F,end:B??F.add(1,"hour"),description:"",allDay:!1}),H(!0)},[F,D]),I=e(()=>{b(null),O(null),H(!1)},[]),JP=e((B)=>{V(B),Y?.(B)},[Y]),XP=e((B)=>{let S=B.uid;return N.find((u)=>{return(u.uid||`${u.id}@ilamy.calendar`)===S&&u.rrule})||null},[N]);return{currentDate:F,view:U,events:v,rawEvents:N,isEventFormOpen:W,selectedEvent:m,selectedDate:w,firstDayOfWeek:p,dayMaxEvents:_0,currentLocale:o,setCurrentDate:K,selectDate:IP,setView:JP,nextPeriod:zP,prevPeriod:WP,today:HP,addEvent:cP,updateEvent:gP,updateRecurringEvent:uP,deleteEvent:jP,deleteRecurringEvent:rP,openEventForm:lP,closeEventForm:I,setSelectedEvent:O,setIsEventFormOpen:H,setSelectedDate:b,getEventsForDateRange:E,findParentRecurringEvent:XP,getCurrentViewRange:T,t:D}};import{jsx as bp}from"react/jsx-runtime";var xf=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},Ef=({children:P,events:f=[],resources:p=[],firstDayOfWeek:_=0,initialView:$="month",renderEvent:Q,onEventClick:X,onCellClick:J,onViewChange:Y,onEventAdd:q,onEventUpdate:G,onEventDelete:M,onDateChange:Z,locale:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L,stickyViewHeader:W=!0,viewHeaderClassName:H="",headerComponent:m,headerClassName:O,translations:w,translator:b,renderResource:o})=>{let[R]=uf(p),[D,E]=uf(new Set(p.map((B)=>B.id))),T=R0({events:f,firstDayOfWeek:_,initialView:$,onEventAdd:q,onEventUpdate:G,onEventDelete:M,onDateChange:Z,onViewChange:Y,locale:F,timezone:K,translations:w,translator:b}),v=_P((B)=>{E((S)=>{let k=new Set(S);if(k.has(B))k.delete(B);else k.add(B);return k})},[]),IP=_P((B)=>{E((S)=>new Set(S).add(B))},[]),zP=_P((B)=>{E((S)=>{let k=new Set(S);return k.delete(B),k})},[]),WP=_P(()=>{E(new Set(R.map((B)=>B.id)))},[R]),HP=_P(()=>{E(new Set)},[]),cP=_P((B)=>{return T.events.filter((S)=>{if(S.resourceIds)return S.resourceIds.includes(B);return S.resourceId===B})},[T.events]),gP=_P((B)=>{return T.events.filter((S)=>{return xf(S).some((u)=>B.includes(u))})},[T.events]),uP=_P((B)=>{return R.find((S)=>S.id===B)},[R]),rP=_P(()=>{return R.filter((B)=>D.has(B.id))},[R,D]),jP=_P((B)=>{return Boolean(B.resourceIds&&B.resourceIds.length>1)},[]),lP=_P((B)=>{T.setSelectedEvent(B),T.setIsEventFormOpen(!0)},[T]),I=_P((B)=>{if(V)return;if(X)X(B);else lP(B)},[V,X,lP]),JP=_P((B,S,k)=>{if(U)return;if(J)J(B,S,k);else{let u={title:T.t("newEvent"),start:B,end:S,description:"",allDay:!1};if(k!==void 0)u.resourceId=k;T.setSelectedEvent(u),T.setSelectedDate(B),T.setIsEventFormOpen(!0)}},[J,U,T]),XP=Vp(()=>({...T,view:T.view,setView:T.setView,events:T.events,rawEvents:T.rawEvents,resources:R,visibleResources:D,toggleResourceVisibility:v,showResource:IP,hideResource:zP,showAllResources:WP,hideAllResources:HP,getEventsForResource:cP,getEventsForResources:gP,getResourceById:uP,getVisibleResources:rP,isEventCrossResource:jP,getEventResourceIds:xf,onEventClick:I,onCellClick:JP,headerComponent:m,headerClassName:O,renderEvent:Q,renderResource:o,locale:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L,stickyViewHeader:W,viewHeaderClassName:H}),[T,R,D,v,IP,zP,WP,HP,cP,gP,uP,rP,jP,I,JP,Q,o,F,K,U,V,N,L,W,H,m,O]);return bp(f0.Provider,{value:XP,children:P})};function r(P){let f=vf(f0),p=vf(dP);if(f)return P(f);if(p)return P(p);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as Q0,jsxs as gp}from"react/jsx-runtime";var Rp=(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 Ip({elementId:P,event:f,className:p,style:_,disableDrag:$=!1}){let{onEventClick:Q,renderEvent:X,disableEventClick:J,disableDragAndDrop:Y}=r((K)=>({onEventClick:K.onEventClick,renderEvent:K.renderEvent,disableEventClick:K.disableEventClick,disableDragAndDrop:K.disableDragAndDrop})),{attributes:q,listeners:G,setNodeRef:M,isDragging:Z}=Sp({id:P,data:{event:f,type:"calendar-event"},disabled:$||Y}),F=()=>{let K=f,U=K.isTruncatedStart,V=K.isTruncatedEnd;return gp("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",Rp(U,V)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[U&&Q0("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),Q0("p",{className:z("text-[10px] font-semibold sm:text-xs mt-0.5",U&&"pl-1",V&&"pr-1"),children:f.title}),V&&Q0("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return Q0(mp,{mode:"wait",children:Q0(Op.div,{ref:M,...q,...G,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",$||Y?J?"cursor-default":"cursor-pointer":"cursor-grab",Z&&!($||Y)&&"cursor-grabbing shadow-lg",p),style:_,onClick:(K)=>{K.stopPropagation(),Q(f)},children:X?X(f):Q0(F,{})},P)})}var YP=Tp(Ip,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{useImperativeHandle as wp,useState as yf}from"react";import{jsx as U0,jsxs as hp}from"react/jsx-runtime";var J0=({ref:P})=>{let[f,p]=yf(!1),[_,$]=yf(null),{currentDate:Q,firstDayOfWeek:X}=r((q)=>({currentDate:q.currentDate,firstDayOfWeek:q.firstDayOfWeek}));wp(P,()=>({open:()=>p(!0),close:()=>p(!1),setSelectedDayEvents:(q)=>$(q)}));let Y=Q.startOf("month").clone();while(Y.day()!==X)Y=Y.subtract(1,"day");return U0(sP,{open:f,onOpenChange:p,children:hp(aP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[U0(nP,{children:U0(eP,{children:_&&_.day.format("MMMM D, YYYY")})}),U0("div",{className:"mt-4 space-y-3",children:_&&_.events.map((q)=>{return U0(YP,{elementId:`all-events-dialog-event-$${q.id}`,event:q,className:"relative my-1 h-[30px]"},q.id)})})]})})};import{AnimatePresence as ip,motion as op}from"motion/react";import{useMemo as kp}from"react";import{jsx as I0}from"react/jsx-runtime";var cf=({className:P})=>{let{firstDayOfWeek:f,currentLocale:p,stickyViewHeader:_,viewHeaderClassName:$}=x(),Q=kp(()=>{let X=A.weekdaysShort().map((J)=>J.toLowerCase());for(let J=0;J<f;J++){let Y=X.shift();if(Y)X.push(Y)}return{days:X}},[f,p]);return I0("div",{className:z("grid grid-cols-7 border-b",_&&"sticky top-0 z-20",$,P),"data-testid":"month-header",children:Q.days.map((X,J)=>I0(ip,{mode:"wait",children:I0(op.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:J*0.05},className:"py-2 text-center font-medium border-r first:border-l","data-testid":`weekday-header-${X}`,children:I0("span",{className:"text-sm capitalize",children:X})},X)},X))})};var g0=({days:P,events:f,dayMaxEvents:p,dayNumberHeight:_=Cf,gridType:$="day"})=>{let Q=P[0].startOf("day"),X=P.at(-1).endOf("day"),J=P.length,Y=f.filter((K)=>K.end.diff(K.start,$)>0),q=f.filter((K)=>K.end.diff(K.start,$)===0),G=[...Y].sort((K,U)=>{let V=K.start.diff(U.start);if(V!==0)return V;return U.end.diff(U.start)-K.end.diff(K.start)}),M=[...q].sort((K,U)=>K.start.diff(U.start)),Z=[];for(let K=0;K<p;K++){Z[K]=[];for(let U=0;U<J;U++)Z[K][U]={taken:!1,event:null}}let F=[];for(let K of G){let U=A.max(K.start.startOf($),Q),V=$==="hour"?K.end.subtract(1,"minute"):K.end,N=A.min(V.startOf($),X),L=Math.max(0,U.diff(Q,$)),W=Math.min(J-1,N.diff(Q,$)),H=K.start.startOf($).isBefore(Q),m=K.end.startOf($).isAfter(X),O=!1,w=-1;for(let b=0;b<p;b++){let o=!0;for(let R=L;R<=W;R++)if(Z[b][R].taken){o=!1;break}if(o){w=b;break}}if(w!==-1){for(let o=L;o<=W;o++)Z[w][o]={taken:!0,event:K};let b=W-L+1;F.push({left:L/J*100,width:b/J*100,top:_+OP+w*(d+OP),height:d,position:w,...K,isTruncatedStart:H,isTruncatedEnd:m}),O=!0}if(!O)for(let b=L+1;b<=W;b++){let o=-1;for(let R=0;R<p;R++){let D=!0;for(let E=b;E<=W;E++)if(Z[R][E].taken){D=!1;break}if(D){o=R;break}}if(o!==-1){for(let D=b;D<=W;D++)Z[o][D]={taken:!0,event:K};let R=W-b+1;F.push({left:b/J*100,width:R/J*100,top:_+OP+o*(d+OP),height:d,position:o,...K,isTruncatedStart:!0,isTruncatedEnd:m}),O=!0;break}}}for(let K of M){let U=A.max(K.start.startOf($),Q),V=Math.max(0,Math.min(J-1,U.diff(Q,$))),N=!1,L=!1,W=-1;for(let H=0;H<p;H++)if(!Z[H][V].taken){W=H;break}if(W!==-1)Z[W][V]={taken:!0,event:K},F.push({left:V/J*100,width:1/J*100,top:_+OP+W*(d+OP),height:d,position:W,...K,isTruncatedStart:!1,isTruncatedEnd:!1})}return F};var rf=({days:P})=>{let{getEventsForDateRange:f,dayMaxEvents:p}=x(),_=P[0].startOf("day"),$=P[6].endOf("day"),Q=f(_,$);return g0({days:P,events:Q,dayMaxEvents:p})};import{jsx as e0}from"react/jsx-runtime";var jf=({days:P})=>{let f=P[0],p=rf({days:P});return e0("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:p.map((_)=>{let $=`${_.id}-${_.position}-${f.toISOString()}`;return e0("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${_.left}% + var(--spacing) * 0.25)`,width:`calc(${_.width}% - var(--spacing) * 1)`,top:`${_.top}px`,height:`${d}px`},"data-testid":`week-event-layer-event-${_.id}`,children:e0(YP,{elementId:$,event:_,className:"h-full w-full shadow"})},`${$}-wrapper`)})})};import up from"react";import{useDroppable as Cp}from"@dnd-kit/core";import{jsx as Dp}from"react/jsx-runtime";function PP({id:P,type:f,date:p,hour:_,minute:$,resourceId:Q,children:X,className:J,style:Y,"data-testid":q}){let{onCellClick:G,disableDragAndDrop:M,disableCellClick:Z}=r((V)=>({onCellClick:V.onCellClick,disableDragAndDrop:V.disableDragAndDrop,disableCellClick:V.disableCellClick})),{isOver:F,setNodeRef:K}=Cp({id:P,data:{type:f,date:p,hour:_,minute:$,resourceId:Q},disabled:M}),U=(V)=>{if(V.stopPropagation(),Z)return;let N=p.hour(_??0).minute($??0),L=N.clone();if(_!==void 0&&$!==void 0)L=L.hour(_).minute($+15);else if(_!==void 0)L=L.hour(_+1).minute(0);else L=L.hour(23).minute(59);G(N,L)};return Dp("div",{ref:K,"data-testid":q,className:z(J,F&&!M&&"bg-accent",Z?"cursor-default":"cursor-pointer"),onClick:U,style:Y,children:X})}import{jsx as w0,jsxs as Pf,Fragment as xp}from"react/jsx-runtime";var lf=({index:P,day:f,className:p=""})=>{let _=up.useRef(null),{currentLocale:$,getEventsForDateRange:Q,currentDate:X,firstDayOfWeek:J,dayMaxEvents:Y=0,t:q}=x(),G=Q(f.startOf("day"),f.endOf("day")),Z=X.startOf("month").clone();while(Z.day()!==J)Z=Z.subtract(1,"day");let F=(W,H)=>{_.current?.setSelectedDayEvents({day:W,events:H}),_.current?.open()},K=f.isSame(A(),"day"),U=f.month()===X.month(),V=P===6,N=G.length-Y,L=N>0;return Pf(xp,{children:[w0(PP,{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]",!U&&"bg-secondary text-muted-foreground",V&&"border-r-0",p),children:Pf("div",{className:"flex flex-col gap-1",children:[w0("div",{className:z("flex h-5 w-5 items-center justify-center rounded-full text-xs sm:h-6 sm:w-6",K&&"bg-primary text-primary-foreground font-medium"),children:Intl.DateTimeFormat($,{day:"numeric"}).format(f.toDate())}),G.slice(0,Y).map((W,H)=>w0("div",{className:"h-[20px] w-full","data-testid":W?.title},`empty-${H}`)),L&&Pf("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(W)=>{W.stopPropagation(),F(f,G)},onKeyDown:(W)=>{if(W.key==="Enter"||W.key===" ")W.preventDefault(),W.stopPropagation(),F(f,G)},tabIndex:0,role:"button",children:["+",N," ",q("more")]})]})}),w0(J0,{ref:_})]})};import{jsx as iP,jsxs as df}from"react/jsx-runtime";var tf=({dayMaxEvents:P=3})=>{let f=yp.useRef(null),{currentDate:p,firstDayOfWeek:_}=x(),Q=p.startOf("month").clone();while(Q.day()!==_)Q=Q.subtract(1,"day");let X=cp(()=>{let J=[[]],Y=Q.clone();for(let q=0;q<42;q++){if(J[J.length-1].length===7)J.push([]);J[J.length-1].push(Y),Y=Y.add(1,"day")}return J},[Q]);return df("div",{className:"flex h-full flex-col","data-testid":"month-view",children:[iP(cf,{className:"h-[3rem]"}),iP(BP,{className:"overflow-auto h-[calc(100%-3rem)]","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col *:min-h-full"},children:iP(Ep,{mode:"wait",children:iP(vp.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:X.map((J,Y)=>{return df("div",{className:"relative col-span-7 grid grid-cols-7","data-testid":`week-row-${Y}`,children:[J.map((q,G)=>{return iP(lf,{index:G,day:q,dayMaxEvents:P,className:"border-r border-b first:border-l"},q.format("YYYY-MM-DD"))}),iP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:iP(jf,{days:J})})]},`week-${Y}`)})},p.format("YYYY-MM-DD"))})}),iP(J0,{ref:f})]})};import P2 from"dayjs/plugin/weekOfYear";import{useMemo as rp}from"react";import{jsx as X0,jsxs as jp}from"react/jsx-runtime";var sf=()=>{let{currentDate:P,getEventsForDateRange:f,firstDayOfWeek:p,t:_}=x(),$=AP(P,p),Q=$[0],X=$[6],J=Q.subtract(6,"day"),Y=X.add(6,"day"),G=f(J,Y).filter((Z)=>Z.allDay),{processedAllDayEvents:M}=rp(()=>{let Z=[...G].sort((U,V)=>{let N=U.start.diff(V.start);if(N!==0)return N;let L=U.end.diff(U.start);return V.end.diff(V.start)-L}),F=[],K=[];return Z.forEach((U)=>{let V=U.start.isBefore(Q)?Q:U.start,N=U.end.isAfter(X)?X:U.end,L=Math.max(0,V.diff(Q,"day")),W=Math.min(6,N.diff(Q,"day")),H=L/7*100,m=(W-L+1)/7*100,O=0,w=!1;while(!w)if(O>=F.length)F.push([]),w=!0;else if(F[O].every((R)=>{return V.isAfter(R.end)||N.isBefore(R.event.start)}))w=!0;else O++;F[O].push({end:N,event:U}),K.push({...U,left:H,width:m,top:O*(d+OP),height:d,allDay:!0})}),{processedAllDayEvents:K,allDayRowsCount:Math.max(1,F.length)}},[G,Q,X]);return jp("div",{className:"grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1 relative","data-testid":"week-all-day-row",children:[X0("div",{className:"w-16 flex shrink-0 items-center justify-end border-x border-b px-1 min-h-16",children:X0("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:_("allDay")})}),$.map((Z)=>X0(PP,{id:`all-day-cell-${Z.format("YYYY-MM-DD")}`,type:"day-cell",date:Z,className:"hover:bg-accent h-full flex-1 cursor-pointer border-r border-b"},`all-day-${Z.format("YYYY-MM-DD")}`)),X0("div",{className:"absolute inset-0 z-10 p-1 col-span-7 col-start-2",children:M.map((Z,F)=>X0("div",{className:"absolute",style:{left:`${Z.left}%`,width:`calc(${Z.width}% - var(--spacing) * 2)`,top:`${Z.top}px`,height:`${Z.height}px`},children:X0(YP,{elementId:`all-day-${Z.id}-${F}`,event:Z,className:"h-full w-full overflow-clip text-xs absolute"},`all-day-${Z.id}-${F}`)},`all-day-container-${Z.id}`))})]})};import{AnimatePresence as lp,motion as dp}from"motion/react";import{jsx as $0,jsxs as ff}from"react/jsx-runtime";var af=({className:P})=>{let{currentDate:f,currentLocale:p,selectDate:_,openEventForm:$,firstDayOfWeek:Q,stickyViewHeader:X,viewHeaderClassName:J,t:Y}=x(),q=AP(f,Q);return ff("div",{className:z("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1",X&&"sticky top-0 z-20",J,P),"data-testid":"week-header",children:[$0("div",{className:"col-span-1 w-16 shrink-0 items-center justify-center border-x border-b p-2",children:ff("div",{className:"flex flex-col items-center justify-center",children:[$0("span",{className:"text-muted-foreground text-xs",children:Y("week")}),$0("span",{className:"font-medium",children:f.week()})]})}),q.map((G,M)=>{let Z=G.isSame(A(),"day");return $0(lp,{mode:"wait",children:ff(dp.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:M*0.05},className:z("hover:bg-accent flex-1 cursor-pointer p-1 text-center sm:p-2 border-r border-b",Z&&"bg-primary/10 font-bold"),onClick:()=>{_(G),$(G)},"data-testid":`week-day-header-${G.format("dddd").toLowerCase()}`,children:[$0("div",{className:"text-xs sm:text-sm",children:G.format("ddd")}),$0("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",Z&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(p,{day:"numeric"}).format(G.toDate())})]},G.format("YYYY-MM-DD"))},G.format("YYYY-MM-DD"))})]})};import{useMemo as tp}from"react";var nf=({day:P})=>{let{getEventsForDateRange:f}=x();return tp(()=>{let _=f(P.startOf("day"),P.endOf("day"));if(_=_.filter((Y)=>!Y.allDay).toSorted((Y,q)=>Y.start.diff(q.start)),_.length===0)return[];let $=[],Q=[],X=null;for(let Y of _){if(X&&Y.start.isSameOrAfter(X)){if(Q.length>0)$.push(Q);Q=[]}Q.push(Y),X=X?A.max(X,Y.end):Y.end}if(Q.length>0)$.push(Q);let J=[];for(let Y of $){if(Y.length===1){let F=Y[0],K=F.start.hour()+F.start.minute()/60,U=F.end.hour()+F.end.minute()/60;if(U<K)U=24;let V=U-K,N=K/24*100,L=V/24*100;J.push({...F,left:0,width:100,top:N,height:L});continue}let q=[...Y].sort((F,K)=>{let U=F.end.diff(F.start,"minute"),V=K.end.diff(K.start,"minute");if(U!==V)return V-U;return F.start.diff(K.start)}),G=q.length,M;if(G===2)M=25;else if(G===3)M=50;else if(G===4)M=60;else M=70;let Z=G>1?M/(G-1):0;for(let F=0;F<q.length;F++){let K=q[F],U=K.start.hour()+K.start.minute()/60,V=K.end.hour()+K.end.minute()/60;if(V<U)V=24;let N=V-U,L=U/24*100,W=N/24*100,H,m,O;if(F===0)H=0,m=100,O=1;else H=Z*F,m=100-H,O=F+1;J.push({...K,left:H,width:m,top:L,height:W,zIndex:O})}}return J},[P,f])};import{jsx as pf}from"react/jsx-runtime";var h0=({day:P,"data-testid":f})=>{let p=nf({day:P});return pf("div",{"data-testid":f,className:"pointer-events-none absolute inset-0 z-10",children:p.map((_,$)=>{let Q=`event-${_.id}-${$}-${P.toISOString()}`,X=_.end.diff(_.start,"minute")<=15;return pf("div",{className:"absolute",style:{left:`${_.left}%`,width:`calc(${_.width}% - var(--spacing) * 2)`,top:`${_.top}%`,height:`${_.height}%`},children:pf(YP,{elementId:Q,event:_,className:z("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":X})})},`${Q}-wrapper`)})})};import{jsx as ef,jsxs as ap}from"react/jsx-runtime";var sp=Array.from({length:24},(P,f)=>f).map((P)=>A().hour(P).minute(0)),P5=({day:P})=>{return ap("div",{"data-testid":`week-day-col-${P.format("YYYY-MM-DD")}`,className:"col-span-1 relative grid grid-rows-24 border-r",children:[sp.map((f)=>{let p=f.hour(),_=P.format("YYYY-MM-DD");return ef(PP,{id:`time-cell-${_}-${f.format("HH")}`,type:"time-cell",date:P,hour:p,"data-testid":`week-time-cell-${_}-${f.format("HH")}`,className:z("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b")},`${_}-${f.format("HH")}`)}),ef(h0,{"data-testid":`week-day-events-${P.format("YYYY-MM-DD")}`,day:P})]})};import{jsx as EP,jsxs as ep}from"react/jsx-runtime";var np=Array.from({length:24},(P,f)=>f).map((P)=>A().hour(P).minute(0)),f5=()=>{let{currentDate:P,firstDayOfWeek:f,currentLocale:p}=x(),_=AP(P,f),$=_.findIndex((X)=>X.isSame(A(),"day")),Q=$!==-1;return ep("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:[EP("div",{"data-testid":"week-time-labels",className:"z-10 col-span-1 w-16 grid grid-rows-24 border-x",children:np.map((X)=>EP("div",{"data-testid":`week-time-hour-${X.format("HH")}`,className:"h-[60px] border-b text-right",children:EP("span",{className:"text-muted-foreground px-1 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat(p,{hour:"numeric",minute:"numeric",hour12:!0}).format(X.toDate())})},X.format("HH:mm")))}),_.map((X)=>EP(P5,{day:X},X.format("YYYY-MM-DD"))),Q&&EP("div",{"data-testid":"week-current-time-indicator",className:"pointer-events-none absolute z-40",style:{top:`${(A().hour()+A().minute()/60)*60}px`,left:`calc(var(--spacing) * 16 + ${$} * (100% - var(--spacing) * 16) / 7)`,width:"calc((100% - var(--spacing) * 16) / 7)"},children:EP("div",{className:"w-full border-t border-red-500",children:EP("div",{className:"-mt-1 ml-1 h-2 w-2 rounded-full bg-red-500"})})})]})};import{jsx as _f,jsxs as p5}from"react/jsx-runtime";A.extend(P2);var f2=()=>{return p5("div",{className:"flex flex-col h-full","data-testid":"week-view",children:[_f(af,{className:"h-[5rem]"}),p5(BP,{className:"flex overflow-auto h-[calc(100%-5rem)]","data-testid":"week-scroll-area",children:[_f(sf,{}),_f(f5,{})]})]})},_5=f2;import{Fragment as $2}from"react";import{useMemo as Q5}from"react";import{jsx as Z0,jsxs as p2}from"react/jsx-runtime";var J5=()=>{let{currentDate:P,getEventsForDateRange:f,t:p}=x(),_=f(P.startOf("day"),P.endOf("day")),{allDayEvents:$}=Q5(()=>{let X=_.filter((Y)=>Y.allDay),J=_.filter((Y)=>!Y.allDay);return{allDayEvents:X,regularEvents:J}},[_]),{processedAllDayEvents:Q}=Q5(()=>{let X=[...$].sort((q,G)=>{return q.start.diff(G.start)}),J=[],Y=[];return X.forEach((q,G)=>{let M=!1;while(!M)if(G>=J.length)J.push([]),M=!0;else M=!0;J[G].push({event:q}),Y.push({...q,left:0,width:100,top:G*d,height:d,allDay:!0})}),{processedAllDayEvents:Y,allDayRowsCount:Math.max(1,J.length)}},[$]);return p2("div",{"data-testid":"day-all-day-row",className:"grid grid-cols-8 border-b border-x",children:[Z0("div",{className:"col-span-2 flex shrink-0 items-center justify-end border-r pr-2 md:col-span-1",children:Z0("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:p("allDay")})}),Z0("div",{className:"relative col-span-6 md:col-span-7 ",children:Z0(PP,{id:`all-day-${P.format("YYYY-MM-DD")}`,type:"day-cell",date:P,className:"hover:bg-accent w-full cursor-pointer min-h-10 flex flex-col",children:Q.map((X,J)=>{return Z0("div",{style:{height:d+"px"},children:Z0(YP,{elementId:`all-day-${X.id}-${J}`,event:X,className:"overflow-clip text-xs",style:{width:"calc(100% - var(--spacing) * 2)"}})},`all-day-${X.id}-${J}`)})})})]})};import{AnimatePresence as _2,motion as Q2}from"motion/react";import{jsx as i0,jsxs as J2}from"react/jsx-runtime";var X5=({className:P})=>{let{currentDate:f,stickyViewHeader:p,viewHeaderClassName:_}=x(),$=f.isSame(A(),"day");return i0("div",{"data-testid":"day-header",className:z("flex items-center justify-center border-b p-2 border-x",p&&"sticky top-0 z-20",_,P),children:i0(_2,{mode:"wait",children:J2(Q2.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",$&&"text-primary"),children:[i0("span",{className:"xs:inline hidden",children:f.format("dddd, ")}),f.format("MMMM D, YYYY"),$&&i0("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 Qf}from"react/jsx-runtime";var X2=Array.from({length:24},(P,f)=>f).map((P)=>{return A().hour(P).minute(0)}),$5=({className:P})=>{let{currentLocale:f}=x();return Qf("div",{"data-testid":"day-time-col",className:`col-span-2 h-full md:col-span-1 ${P}`,children:X2.map((p)=>Qf("div",{"data-testid":`day-time-hour-${p.format("HH")}`,className:"h-[60px] border-b text-right",children:Qf("span",{className:"text-muted-foreground pr-2 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat(f,{hour:"numeric",minute:"numeric",hour12:!0}).format(p.toDate())})},p.format("HH:mm")))})};import{jsx as fP,jsxs as G0}from"react/jsx-runtime";var Z2=[0,15,30,45],Jf=Array.from({length:24},(P,f)=>f).map((P)=>{return A().hour(P).minute(0)}),Y2=()=>{let{currentDate:P}=x(),f=P.isSame(A(),"day"),p=P.format("YYYY-MM-DD");return G0("div",{"data-testid":"day-view",className:"flex h-full flex-col",children:[fP(X5,{className:"h-[3rem]"}),G0(BP,{"data-testid":"day-scroll-area",className:"relative overflow-y-auto h-[calc(100%-3rem)]",children:[fP(J5,{}),G0("div",{"data-testid":"day-time-grid",className:"grid grid-cols-8 divide-x border-x",style:{height:`${Jf.length*60}px`},children:[fP($5,{className:"col-span-2 h-full md:col-span-1"}),G0("div",{"data-testid":"day-events-column",className:"relative col-span-6 h-full md:col-span-7",children:[fP("div",{"data-testid":"day-background-grid",className:"absolute inset-0 z-0",children:Jf.map((_,$)=>fP("div",{className:"h-[60px] border-b",children:Z2.slice(1).map((Q)=>fP("div",{className:"border-border absolute w-full border-t border-dashed",style:{top:`${$*60+Q}px`}},`bg-${_.format("HH")}-${Q}`))},`bg-${P.format("YYYY-MM-DD")}-${_.format("HH")}`))}),fP("div",{"data-testid":"day-interactive-layer",className:"pointer-events-auto absolute inset-0 z-10",children:Jf.map((_)=>{let $=_.hour();return G0($2,{children:[fP(PP,{id:`time-cell-${p}-${_.format("HH")}-00`,type:"time-cell",date:P,hour:$,minute:0,className:z("hover:bg-accent h-[15px] cursor-pointer")}),fP(PP,{id:`time-cell-${p}-${_.format("HH")}-15`,type:"time-cell",date:P,hour:$,minute:15,className:"hover:bg-accent h-[15px] cursor-pointer"}),fP(PP,{id:`time-cell-${p}-${_.format("HH")}-30`,type:"time-cell",date:P,hour:$,minute:30,className:"hover:bg-accent h-[15px] cursor-pointer"}),fP(PP,{id:`time-cell-${p}-${_.format("HH")}-45`,type:"time-cell",date:P,hour:$,minute:45,className:"hover:bg-accent h-[15px] cursor-pointer"})]},`${p}-${_.format("HH")}`)})}),fP(h0,{day:P}),f&&fP("div",{"data-testid":"day-current-time-indicator",className:"absolute right-0 left-0 z-40 border-t border-red-500",style:{top:`${(A().hour()+A().minute()/60)*60}px`},children:fP("div",{className:"-mt-1 -ml-1 h-2 w-2 rounded-full bg-red-500"})})]})]})]})]})},Z5=Y2;import{useEffect as K5,useState as oP}from"react";import{useState as Y5,useEffect as q2,useMemo as z2}from"react";import{RRule as C}from"rrule";import{jsx as c,jsxs as a}from"react/jsx-runtime";function K2(P,f){if(!P)return f("customRecurrence");try{let _=new C(P).toText();if(!_||_.includes("RRule error")||_.includes("Unable to fully convert")||_.toLowerCase().includes("error"))return f("customRecurrence");return _.charAt(0).toUpperCase()+_.slice(1)}catch{return f("customRecurrence")}}var q5=({value:P,onChange:f})=>{let{t:p}=r((L)=>({t:L.t})),[_,$]=Y5(!!P),Q=z2(()=>[{value:C.SU,label:p("sunday"),short:p("sun")},{value:C.MO,label:p("monday"),short:p("mon")},{value:C.TU,label:p("tuesday"),short:p("tue")},{value:C.WE,label:p("wednesday"),short:p("wed")},{value:C.TH,label:p("thursday"),short:p("thu")},{value:C.FR,label:p("friday"),short:p("fri")},{value:C.SA,label:p("saturday"),short:p("sat")}],[p]),X=(L)=>{return{[C.DAILY]:"DAILY",[C.WEEKLY]:"WEEKLY",[C.MONTHLY]:"MONTHLY",[C.YEARLY]:"YEARLY"}[L]||"DAILY"},[J,Y]=Y5(()=>P||null);q2(()=>{if($(!!P),P)Y(P)},[P]);let q=(L)=>{if(!J)return;let W={...J,...L};if(Y(W),_)f(W);else f(null)},G=(L)=>{if($(L),L)if(J)f(J);else{let W={freq:C.DAILY,interval:1};Y(W),f(W)}else f(null)},M=(L)=>{let W={DAILY:C.DAILY,WEEKLY:C.WEEKLY,MONTHLY:C.MONTHLY,YEARLY:C.YEARLY};q({freq:W[L]||C.DAILY})},Z=(L)=>{let W=Math.max(1,Number.parseInt(L.target.value)||1);q({interval:W})},F=(L)=>{let W={};if(L==="never")W.count=void 0,W.until=void 0;else if(L==="count")W.count=J?.count||1,W.until=void 0;else if(L==="until")W.until=J?.until||A().add(1,"month").endOf("day").toDate(),W.count=void 0;q(W)},K=(L)=>{let W=Math.max(1,Number.parseInt(L.target.value)||1);q({count:W})},U=(L)=>{let W=L?A(L).endOf("day").toDate():void 0;q({until:W})},V=(L)=>{let W=[C.SU,C.MO,C.TU,C.WE,C.TH,C.FR,C.SA],H=J?.byweekday||[],m=W[L],O=H.includes(m),w;if(O)w=H.filter((b)=>b!==m);else w=[...H,m];q({byweekday:w.length>0?w:void 0})},N=()=>{if(J?.until)return"until";if(J?.count)return"count";return"never"};return a(Hf,{"data-testid":"recurrence-editor",children:[a(Af,{className:"pb-3",children:[a("div",{className:"flex items-center space-x-2",children:[c(hP,{id:"recurring",checked:_,onCheckedChange:G,"data-testid":"toggle-recurrence"}),c(Mf,{className:"text-sm",children:p("repeat")})]}),_&&P&&c("p",{className:"text-xs text-muted-foreground",children:K2(P,p)})]}),_&&c(Vf,{className:"pt-0",children:a("div",{className:"space-y-4",children:[a("div",{className:"grid grid-cols-2 gap-4",children:[a("div",{children:[c(l,{htmlFor:"frequency",className:"text-xs",children:p("repeats")}),a(mf,{value:X(J?.freq??C.DAILY),onValueChange:M,children:[c(Tf,{id:"frequency",className:"h-8","data-testid":"frequency-select",children:c(Of,{})}),a(Rf,{children:[c(L0,{value:"DAILY",children:p("daily")}),c(L0,{value:"WEEKLY",children:p("weekly")}),c(L0,{value:"MONTHLY",children:p("monthly")}),c(L0,{value:"YEARLY",children:p("yearly")})]})]})]}),a("div",{children:[c(l,{htmlFor:"interval",className:"text-xs",children:p("every")}),c(mP,{id:"interval",type:"number",min:"1",value:J?.interval||1,onChange:Z,className:"h-8"})]})]}),J?.freq===C.WEEKLY&&a("div",{children:[c(l,{className:"text-xs",children:p("repeatOn")}),c("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((L,W)=>{let m=(Array.isArray(J?.byweekday)?J.byweekday:(J?.byweekday)?[J.byweekday]:[]).includes(L.value);return a("div",{className:"flex items-center space-x-1",children:[c(hP,{id:`day-${W}`,checked:m,onCheckedChange:()=>V(W)}),c(l,{htmlFor:`day-${W}`,className:"text-xs cursor-pointer",children:L.short})]},`day-${W}`)})})]}),a("div",{children:[c(l,{className:"text-xs",children:p("ends")}),a("div",{className:"space-y-2 mt-1",children:[a("div",{className:"flex items-center space-x-2",children:[c(hP,{id:"never",checked:N()==="never",onCheckedChange:()=>F("never")}),c(l,{htmlFor:"never",className:"text-xs",children:p("never")})]}),a("div",{className:"flex items-center space-x-2",children:[c(hP,{id:"after",checked:N()==="count",onCheckedChange:()=>F("count")}),c(l,{htmlFor:"after",className:"text-xs",children:p("after")}),N()==="count"&&c(mP,{type:"number",min:"1",value:J?.count||1,onChange:K,className:"h-6 w-16 text-xs","data-testid":"count-input"}),c("span",{className:"text-xs",children:p("occurrences")})]}),a("div",{className:"flex items-center space-x-2",children:[c(hP,{id:"on",checked:N()==="until",onCheckedChange:()=>F("until")}),c(l,{htmlFor:"on",className:"text-xs",children:p("on")}),N()==="until"&&c(z0,{date:J?.until,setDate:U,className:"h-6"})]})]})]})]})})]})};import{jsx as QP,jsxs as vP}from"react/jsx-runtime";function N0({isOpen:P,onClose:f,onConfirm:p,operationType:_,eventTitle:$}){let{t:Q}=r((Y)=>({t:Y.t})),X=(Y)=>{p(Y),f()},J=_==="edit";return QP(sP,{open:P,onOpenChange:f,children:vP(aP,{className:"max-w-md",children:[vP(nP,{children:[QP(eP,{children:J?Q("editRecurringEvent"):Q("deleteRecurringEvent")}),vP(m0,{children:['"',$,'"'," ",J?Q("editRecurringEventQuestion"):Q("deleteRecurringEventQuestion")]})]}),vP("div",{className:"space-y-3",children:[QP(g,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("this"),children:vP("div",{className:"text-left",children:[QP("div",{className:"font-medium",children:Q("thisEvent")}),QP("div",{className:"text-sm text-muted-foreground",children:J?Q("onlyChangeThis"):Q("onlyDeleteThis")})]})}),QP(g,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("following"),children:vP("div",{className:"text-left",children:[QP("div",{className:"font-medium",children:Q("thisAndFollowingEvents")}),QP("div",{className:"text-sm text-muted-foreground",children:J?Q("changeThisAndFuture"):Q("deleteThisAndFuture")})]})}),QP(g,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("all"),children:vP("div",{className:"text-left",children:[QP("div",{className:"font-medium",children:Q("allEvents")}),QP("div",{className:"text-sm text-muted-foreground",children:J?Q("changeEntireSeries"):Q("deleteEntireSeries")})]})})]}),QP(S0,{children:QP(g,{variant:"outline",onClick:f,children:Q("cancel")})})]})})}import{useState as L2,useCallback as o0}from"react";function z5(P){let{updateRecurringEvent:f,deleteRecurringEvent:p}=r((q)=>({updateRecurringEvent:q.updateRecurringEvent,deleteRecurringEvent:q.deleteRecurringEvent})),[_,$]=L2({isOpen:!1,operationType:"edit",event:null}),Q=o0((q,G)=>{$({isOpen:!0,operationType:"edit",event:q,updates:G,onConfirm:(M)=>{f(q,G,{scope:M,eventDate:q.start})}})},[f]),X=o0((q)=>{$({isOpen:!0,operationType:"delete",event:q,onConfirm:(G)=>{p(q,{scope:G,eventDate:q.start})}})},[p]),J=o0(()=>{$({isOpen:!1,operationType:"edit",event:null})},[]),Y=o0((q)=>{if(_.onConfirm)_.onConfirm(q);J(),P?.()},[_,J,P]);return{dialogState:_,openEditDialog:Q,openDeleteDialog:X,closeDialog:J,handleConfirm:Y}}import{jsx as h,jsxs as t,Fragment as U2}from"react/jsx-runtime";var L5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],k0=({selectedEvent:P,selectedDate:f,onClose:p,onUpdate:_,onDelete:$,onAdd:Q})=>{let{dialogState:X,openEditDialog:J,openDeleteDialog:Y,closeDialog:q,handleConfirm:G}=z5(p),{findParentRecurringEvent:M,t:Z}=r((I)=>({findParentRecurringEvent:I.findParentRecurringEvent,t:I.t})),F=P?.start,K=P?.end,U=P?M(P):null,V=f?.toDate()||new Date,N=f?.add(1,"hour").toDate()||A().add(1,"hour").toDate(),[L,W]=oP(F?.toDate()||V),[H,m]=oP(K?.toDate()||N),[O,w]=oP(P?.allDay||!1),[b,o]=oP(P?.color||L5[0].value),[R,D]=oP(F?F.format("HH:mm"):A(V).format("HH:mm")),[E,T]=oP(K?K.format("HH:mm"):A(N).format("HH:mm")),[v,IP]=oP({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[zP,WP]=oP(()=>{return P?.rrule||U?.rrule||null}),HP=(I)=>{if(I)W(I)},cP=(I)=>{if(I)m(I)},gP=(I)=>{let{name:JP,value:XP}=I.target;IP((B)=>({...B,[JP]:XP}))},uP=(I,JP)=>{let XP=I.target.value;if(JP)D(XP);else T(XP)};K5(()=>{if(O)T("23:59")},[O]);let rP=(I)=>{I.preventDefault();let[JP,XP]=R.split(":").map(Number),[B,S]=E.split(":").map(Number),k=A(L).hour(JP).minute(XP),u=A(H).hour(B).minute(S);if(O)k=k.hour(0).minute(0),u=u.hour(23).minute(59);let pP={id:P?.id||A().format("YYYYMMDDHHmmss"),title:v.title,start:k,end:u,description:v.description,location:v.location,allDay:O,color:b,rrule:zP||void 0};if(P?.id){if(p0(P)){J(P,{title:v.title,start:k,end:u,description:v.description,location:v.location,allDay:O,color:b,rrule:zP||void 0});return}_?.(pP)}else Q?.(pP);p()},jP=()=>{if(P?.id){if(p0(P)){Y(P);return}$?.(P),p()}},lP=(I)=>{if(I){let[JP,XP]=R.split(":").map(Number),B=A(L).hour(JP).minute(XP);if(O)B=B.hour(0).minute(0);let S={...I,dtstart:B.toDate()};WP(S)}else WP(null)};return K5(()=>{if(A(L).isAfter(A(H)))m(L)},[L,H]),t(U2,{children:[h(sP,{open:!0,onOpenChange:p,children:h(aP,{className:"w-[90vw] max-w-[500px] p-4 sm:p-6",children:t("form",{onSubmit:rP,children:[t(nP,{className:"mb-2 sm:mb-4",children:[h(eP,{className:"text-base sm:text-lg",children:P?.id?Z("editEvent"):Z("createEvent")}),h(m0,{className:"text-xs sm:text-sm",children:P?.id?Z("editEventDetails"):Z("addNewEvent")})]}),t("div",{className:"grid gap-3 py-2 sm:gap-4 sm:py-4",children:[t("div",{className:"grid gap-2",children:[h(l,{htmlFor:"title",className:"text-xs sm:text-sm",children:Z("title")}),h(mP,{id:"title",name:"title",value:v.title,onChange:gP,placeholder:Z("eventTitlePlaceholder"),required:!0,className:"h-8 text-sm sm:h-9"})]}),t("div",{className:"grid gap-1 sm:gap-2",children:[h(l,{htmlFor:"description",className:"text-xs sm:text-sm",children:Z("description")}),h(mP,{id:"description",name:"description",value:v.description,onChange:gP,placeholder:Z("eventDescriptionPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),t("div",{className:"flex items-center space-x-2",children:[h(hP,{id:"allDay",checked:O,onCheckedChange:(I)=>w(I===!0)}),h(l,{htmlFor:"allDay",className:"text-xs sm:text-sm",children:Z("allDay")})]}),t("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[t("div",{children:[h(l,{className:"text-xs sm:text-sm",children:Z("startDate")}),h(z0,{date:L,setDate:HP,className:"mt-1",closeOnSelect:!0})]}),t("div",{children:[h(l,{className:"text-xs sm:text-sm",children:Z("endDate")}),h(z0,{date:H,setDate:cP,className:"mt-1",closeOnSelect:!0})]})]}),!O&&t("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[t("div",{children:[h(l,{htmlFor:"start-time",className:"text-xs sm:text-sm",children:Z("startTime")}),h(mP,{id:"start-time",type:"time",value:R,onChange:(I)=>uP(I,!0),className:"mt-1 h-8 text-sm sm:h-9"})]}),t("div",{children:[h(l,{htmlFor:"end-time",className:"text-xs sm:text-sm",children:Z("endTime")}),h(mP,{id:"end-time",type:"time",value:E,onChange:(I)=>uP(I,!1),className:"mt-1 h-8 text-sm sm:h-9"})]})]}),t("div",{className:"grid gap-1 sm:gap-2",children:[h(l,{className:"text-xs sm:text-sm",children:Z("color")}),h("div",{className:"flex flex-wrap gap-2",children:h(t0,{children:L5.map((I)=>t(If,{children:[h(gf,{asChild:!0,children:h(g,{variant:"ghost",type:"button",className:z(`${I.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,b===I.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>o(I.value),"aria-label":I.label},I.value)}),h(wf,{children:h("p",{className:"text-xs sm:text-sm",children:I.label})})]},I.value))})})]}),t("div",{className:"grid gap-1 sm:gap-2",children:[h(l,{htmlFor:"location",className:"text-xs sm:text-sm",children:Z("location")}),h(mP,{id:"location",name:"location",value:v.location,onChange:gP,placeholder:Z("eventLocationPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),h(q5,{value:zP,onChange:lP})]}),t(S0,{className:"mt-2 flex flex-col-reverse gap-2 sm:mt-4 sm:flex-row sm:gap-0",children:[P?.id&&h(g,{type:"button",variant:"destructive",onClick:jP,className:"w-full sm:mr-auto sm:w-auto",size:"sm",children:Z("delete")}),t("div",{className:"flex w-full gap-2 sm:w-auto",children:[h(g,{type:"button",variant:"outline",onClick:p,className:"flex-1 sm:flex-none",size:"sm",children:Z("cancel")}),h(g,{type:"submit",className:"flex-1 sm:flex-none",size:"sm",children:P?.id?Z("update"):Z("create")})]})]})]})})}),h(N0,{isOpen:X.isOpen,onClose:q,onConfirm:G,operationType:X.operationType,eventTitle:X.event?.title||""})]})};import{RRule as G2}from"rrule";var B0=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
1
+ import{AnimatePresence as Ep,motion as vp}from"motion/react";import cp,{useMemo as yp}from"react";import{createContext as D5,useContext as Uf}from"react";var dP=D5(void 0),x=()=>{let P=Uf(dP);if(P===void 0)throw Error("useCalendarContext must be used within a CalendarProvider");return P},u5=()=>{let P=Uf(dP);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}};import{clsx as t5}from"clsx";import UP from"dayjs";import x5 from"dayjs/plugin/weekday.js";import E5 from"dayjs/plugin/weekOfYear.js";import v5 from"dayjs/plugin/isSameOrAfter.js";import c5 from"dayjs/plugin/isSameOrBefore.js";import y5 from"dayjs/plugin/isBetween.js";import r5 from"dayjs/plugin/minMax.js";import j5 from"dayjs/plugin/timezone.js";import l5 from"dayjs/plugin/utc.js";import d5 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";UP.extend(x5);UP.extend(E5);UP.extend(v5);UP.extend(c5);UP.extend(y5);UP.extend(r5);UP.extend(j5);UP.extend(l5);UP.extend(d5);var A=UP;import{twMerge as s5}from"tailwind-merge";function AP(P,f){let p=P.startOf("week").day(f),_=P.isBefore(p)?p.subtract(1,"week"):p;return Array.from({length:7},($,Q)=>_.add(Q,"day"))}function z(...P){return s5(t5(P))}function Gf(P){if(A.isDayjs(P))return P;let f=A(P);return f.isValid()?f:A()}var Nf=(P,f)=>{let p={...P};for(let _ of f)delete p[_];return p};function Bf(P){if(!P||!P.length)return[];return P.map((f)=>{return{...f,start:A.isDayjs(f.start)?f.start:A(f.start),end:A.isDayjs(f.end)?f.end:A(f.end)}})}import{jsx as W_}from"react/jsx-runtime";import{Slot as a5}from"@radix-ui/react-slot";import{cva as n5}from"class-variance-authority";import{jsx as e5}from"react/jsx-runtime";var H0=n5("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 shadow-xs hover:bg-primary/90",destructive:"bg-destructive text-white shadow-xs 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 shadow-xs 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"}},defaultVariants:{variant:"default",size:"default"}});function g({className:P,variant:f,size:p,asChild:_=!1,...$}){return e5(_?a5:"button",{"data-slot":"button",className:z(H0({variant:f,size:p,className:P})),...$})}import*as A0 from"react";import{ChevronDownIcon as Pp,ChevronLeftIcon as fp,ChevronRightIcon as pp}from"lucide-react";import{DayPicker as _p,getDefaultClassNames as Ff}from"react-day-picker";import{jsx as wP}from"react/jsx-runtime";function Wf({className:P,classNames:f,showOutsideDays:p=!0,captionLayout:_="label",buttonVariant:$="ghost",formatters:Q,components:X,...J}){let Y=Ff();return wP(_p,{showOutsideDays:p,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:_,formatters:{formatMonthDropdown:(q)=>q.toLocaleString("default",{month:"short"}),...Q},classNames:{root:z("w-fit",Y.root),months:z("flex gap-4 flex-col md:flex-row relative",Y.months),month:z("flex flex-col w-full gap-4",Y.month),nav:z("flex items-center gap-1 w-full absolute top-0 inset-x-0 justify-between",Y.nav),button_previous:z(H0({variant:$}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Y.button_previous),button_next:z(H0({variant:$}),"size-(--cell-size) aria-disabled:opacity-50 p-0 select-none",Y.button_next),month_caption:z("flex items-center justify-center h-(--cell-size) w-full px-(--cell-size)",Y.month_caption),dropdowns:z("w-full flex items-center text-sm font-medium justify-center h-(--cell-size) gap-1.5",Y.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",Y.dropdown_root),dropdown:z("absolute bg-popover inset-0 opacity-0",Y.dropdown),caption_label:z("select-none font-medium",_==="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",Y.caption_label),table:"w-full border-collapse",weekdays:z("flex",Y.weekdays),weekday:z("text-muted-foreground rounded-md flex-1 font-normal text-[0.8rem] select-none",Y.weekday),week:z("flex w-full mt-2",Y.week),week_number_header:z("select-none w-(--cell-size)",Y.week_number_header),week_number:z("text-[0.8rem] select-none text-muted-foreground",Y.week_number),day:z("relative w-full h-full p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md group/day aspect-square select-none",Y.day),range_start:z("rounded-l-md bg-accent",Y.range_start),range_middle:z("rounded-none",Y.range_middle),range_end:z("rounded-r-md bg-accent",Y.range_end),today:z("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none",Y.today),outside:z("text-muted-foreground aria-selected:text-muted-foreground",Y.outside),disabled:z("text-muted-foreground opacity-50",Y.disabled),hidden:z("invisible",Y.hidden),...f},components:{Root:({className:q,rootRef:G,...M})=>{return wP("div",{"data-slot":"calendar",ref:G,className:z(q),...M})},Chevron:({className:q,orientation:G,...M})=>{if(G==="left")return wP(fp,{className:z("size-4",q),...M});if(G==="right")return wP(pp,{className:z("size-4",q),...M});return wP(Pp,{className:z("size-4",q),...M})},DayButton:Qp,WeekNumber:({children:q,...G})=>{return wP("td",{...G,children:wP("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:q})})},...X},...J})}function Qp({className:P,day:f,modifiers:p,..._}){let $=Ff(),Q=A0.useRef(null);return A0.useEffect(()=>{if(p.focused)Q.current?.focus()},[p.focused]),wP(g,{ref:Q,variant:"ghost",size:"icon","data-day":f.date.toLocaleDateString(),"data-selected-single":p.selected&&!p.range_start&&!p.range_end&&!p.range_middle,"data-range-start":p.range_start,"data-range-end":p.range_end,"data-range-middle":p.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",$.day,P),..._})}import*as M0 from"@radix-ui/react-checkbox";import{CheckIcon as Jp}from"lucide-react";import{jsx as y0}from"react/jsx-runtime";function hP({className:P,...f}){return y0(M0.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:y0(M0.Indicator,{"data-slot":"checkbox-indicator",className:"flex items-center justify-center text-current transition-none",children:y0(Jp,{className:"size-3.5"})})})}import{jsx as V0}from"react/jsx-runtime";function Hf({className:P,...f}){return V0("div",{"data-slot":"card",className:z("text-card-foreground flex flex-col gap-6 rounded-xl border shadow-sm",P),...f})}function Af({className:P,...f}){return V0("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 Mf({className:P,...f}){return V0("div",{"data-slot":"card-title",className:z("leading-none font-semibold",P),...f})}function Vf({className:P,...f}){return V0("div",{"data-slot":"card-content",className:z("p-4 pt-0",P),...f})}import{Calendar as Xp}from"lucide-react";import*as MP from"@radix-ui/react-popover";import{jsx as b0}from"react/jsx-runtime";function VP({...P}){return b0(MP.Root,{"data-slot":"popover",...P})}function bP({...P}){return b0(MP.Trigger,{"data-slot":"popover-trigger",...P})}function mP({className:P,align:f="center",sideOffset:p=4,..._}){return b0(MP.Portal,{children:b0(MP.Content,{"data-slot":"popover-content",align:f,sideOffset:p,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),..._})})}import{useRef as $p}from"react";import{PopoverClose as Zp}from"@radix-ui/react-popover";import{jsx as tP,jsxs as r0}from"react/jsx-runtime";function z0({date:P,closeOnSelect:f,setDate:p,label:_="Pick a date",className:$}){let Q=$p(null),X=(J)=>{if(p(J),f)Q.current?.click()};return tP("div",{className:$,children:r0(VP,{children:[tP(bP,{asChild:!0,children:r0(g,{variant:"outline",className:z("w-full justify-start text-left font-normal",!P&&"text-muted-foreground"),children:[tP(Xp,{className:"mr-2 h-4 w-4"}),P?A(P).format("MMM D, YYYY"):tP("span",{children:_})]})}),r0(mP,{className:"w-auto p-0",align:"start",children:[tP(Zp,{ref:Q}),tP(Wf,{mode:"single",selected:P,onSelect:X,month:P,initialFocus:!0})]})]})})}import*as n from"@radix-ui/react-dialog";import{XIcon as Yp}from"lucide-react";import{jsx as GP,jsxs as j0}from"react/jsx-runtime";function sP({...P}){return GP(n.Root,{"data-slot":"dialog",...P})}function qp({...P}){return GP(n.Portal,{"data-slot":"dialog-portal",...P})}function zp({className:P,...f}){return GP(n.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 aP({className:P,children:f,...p}){return j0(qp,{"data-slot":"dialog-portal",children:[GP(zp,{}),j0(n.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%] overflow-y-scroll",P),...p,children:[f,j0(n.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:[GP(Yp,{}),GP("span",{className:"sr-only",children:"Close"})]})]})]})}function nP({className:P,...f}){return GP("div",{"data-slot":"dialog-header",className:z("flex flex-col gap-2 text-center sm:text-left",P),...f})}function m0({className:P,...f}){return GP("div",{"data-slot":"dialog-footer",className:z("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",P),...f})}function eP({className:P,...f}){return GP(n.Title,{"data-slot":"dialog-title",className:z("text-lg leading-none font-semibold",P),...f})}function S0({className:P,...f}){return GP(n.Description,{"data-slot":"dialog-description",className:z("text-muted-foreground text-sm",P),...f})}import{jsx as Kp}from"react/jsx-runtime";function SP({className:P,type:f,...p}){return Kp("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),...p})}import*as bf from"@radix-ui/react-label";import{jsx as Lp}from"react/jsx-runtime";function l({className:P,...f}){return Lp(bf.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*as NP from"@radix-ui/react-scroll-area";import{jsx as K0,jsxs as Up}from"react/jsx-runtime";function BP({className:P,children:f,...p}){return Up(NP.Root,{"data-slot":"scroll-area",className:z("relative",P),...p,children:[K0(NP.Viewport,{...p.viewPortProps,"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",p.viewPortProps?.className),children:f}),K0(l0,{}),K0(NP.Corner,{})]})}function l0({className:P,orientation:f="vertical",...p}){return K0(NP.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),...p,children:K0(NP.ScrollAreaThumb,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}import*as c from"@radix-ui/react-select";import{CheckIcon as Gp,ChevronDownIcon as mf,ChevronUpIcon as Np}from"lucide-react";import{jsx as s,jsxs as d0}from"react/jsx-runtime";function Sf({...P}){return s(c.Root,{"data-slot":"select",...P})}function Of({...P}){return s(c.Value,{"data-slot":"select-value",...P})}function Tf({className:P,size:f="default",children:p,..._}){return d0(c.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),..._,children:[p,s(c.Icon,{asChild:!0,children:s(mf,{className:"size-4 opacity-50"})})]})}function Rf({className:P,children:f,position:p="popper",..._}){return s(c.Portal,{children:d0(c.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",p==="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:p,..._,children:[s(Bp,{}),s(c.Viewport,{className:z("p-1",p==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:f}),s(Fp,{})]})})}function L0({className:P,children:f,...p}){return d0(c.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),...p,children:[s("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:s(c.ItemIndicator,{children:s(Gp,{className:"size-4"})})}),s(c.ItemText,{children:f})]})}function Bp({className:P,...f}){return s(c.ScrollUpButton,{"data-slot":"select-scroll-up-button",className:z("flex cursor-default items-center justify-center py-1",P),...f,children:s(Np,{className:"size-4"})})}function Fp({className:P,...f}){return s(c.ScrollDownButton,{"data-slot":"select-scroll-down-button",className:z("flex cursor-default items-center justify-center py-1",P),...f,children:s(mf,{className:"size-4"})})}import*as O0 from"@radix-ui/react-tabs";import{jsx as B9}from"react/jsx-runtime";import*as $P from"@radix-ui/react-tooltip";import{jsx as P0,jsxs as Wp}from"react/jsx-runtime";function t0({delayDuration:P=0,...f}){return P0($P.Provider,{"data-slot":"tooltip-provider",delayDuration:P,...f})}function If({...P}){return P0(t0,{children:P0($P.Root,{"data-slot":"tooltip",...P})})}function gf({...P}){return P0($P.Trigger,{"data-slot":"tooltip-trigger",...P})}function wf({className:P,sideOffset:f=0,children:p,..._}){return P0($P.Portal,{children:Wp($P.Content,{"data-slot":"tooltip-content",sideOffset:f,className:z("bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-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-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",P),..._,children:[p,P0($P.Arrow,{className:"bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]"})]})})}import{useDraggable as mp}from"@dnd-kit/core";import{AnimatePresence as Sp,motion as Op}from"motion/react";import{memo as Tp}from"react";import{useContext as vf}from"react";import{createContext as Hp,useContext as hf}from"react";var f0=Hp(void 0),ZP=()=>{let P=hf(f0);if(P===void 0)throw Error("useResourceCalendarContext must be used within a ResourceCalendarProvider");return P},Ap=()=>{let P=hf(f0);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}};import{useCallback as _P,useMemo as Vp,useState as uf}from"react";import{useCallback as e,useEffect as n0,useMemo as Df,useState as xP}from"react";import{RRule as Mp}from"rrule";var p0=(P)=>{return Boolean(P.rrule||P.recurrenceId||P.uid)},s0=({event:P,currentEvents:f,startDate:p,endDate:_})=>{if(!P.rrule)return[];try{let $={...P.rrule,dtstart:P.rrule.dtstart||P.start.toDate()},Q=new Mp($),X=f.filter((Z)=>Z.recurrenceId&&Z.uid===P.uid),J=P.end.diff(P.start),Y=p.subtract(J,"millisecond").toDate(),q=_.toDate();return Q.between(Y,q,!0).map((Z,F)=>{let K=A(Z),U=X.find((S)=>Gf(S.recurrenceId).isSame(K));if(U)return{...P,...U};let V=P.end.diff(P.start),N=K.add(V,"millisecond"),L=`${P.id}_${F}`,W=P.uid||`${P.id}@ilamy.calendar`;return{...P,id:L,start:K,end:N,uid:W,rrule:void 0}}).filter((Z)=>{if(P.exdates&&P.exdates.length>0){let U=Z.start.toISOString();if(P.exdates.includes(U))return!1}return Z.start.isSameOrBefore(_)&&Z.end.isSameOrAfter(p)})}catch($){throw Error(`Invalid RRULE options: ${JSON.stringify(P.rrule)}. Error: ${$ instanceof Error?$.message:"Unknown error"}`)}},kf=({targetEvent:P,updates:f,currentEvents:p,scope:_})=>{let $=[...p],Q=$.findIndex((J)=>{return(J.uid||`${J.id}@ilamy.calendar`)===P.uid&&J.rrule&&!J.recurrenceId});if(Q===-1)throw Error("Base recurring event not found");let X=$[Q];switch(_){case"this":{let J=P.start.toISOString(),q=[...X.exdates||[],J],G={...X,exdates:q};$[Q]=G;let M=`${P.id}_modified_${Date.now()}`,Z={...Nf(P,["width","height","top","left","right"]),...f,id:M,recurrenceId:J,uid:X.uid||`${X.id}@ilamy.calendar`,rrule:void 0};$.push(Z);break}case"following":{let Y=P.start.subtract(1,"day").endOf("day").toDate(),q={...X,rrule:{...X.rrule,until:Y}};$[Q]=q;let G=X.end.diff(X.start),M=f.start||P.start,Z=f.end||M.add(G),F=`${X.id}_following`,K=`${F}@ilamy.calendar`,U={...X,...f,rrule:{...X.rrule,...f.rrule,dtstart:M.toDate()},id:F,uid:K,start:M,end:Z,recurrenceId:void 0};$.push(U);break}case"all":{let J={...X,...f};$[Q]=J;break}default:throw Error(`Invalid scope: ${_}. Must be 'this', 'following', or 'all'`)}return $},of=({targetEvent:P,currentEvents:f,scope:p})=>{let _=[...f],$=_.findIndex((X)=>{return(X.uid||`${X.id}@ilamy.calendar`)===P.uid&&X.rrule&&!X.recurrenceId});if($===-1)throw Error("Base recurring event not found");let Q=_[$];switch(p){case"this":{let X=P.start.toISOString(),Y=[...Q.exdates||[],X],q={...Q,exdates:Y};_[$]=q;break}case"following":{let J=P.start.subtract(1,"day").endOf("day").toDate(),Y={...Q,rrule:{...Q.rrule,until:J}};_[$]=Y;break}case"all":return _.filter((J)=>J.uid!==P.uid);default:throw Error(`Invalid scope: ${p}. Must be 'this', 'following', or 'all'`)}return _};var a0={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 OP=1,Cf=28,d=24,_0=4,T0={sunday:0,monday:1,tuesday:2,wednesday:3,thursday:4,friday:5,saturday:6};var R0=(P)=>{let{events:f=[],firstDayOfWeek:p=0,initialView:_="month",onEventAdd:$,onEventUpdate:Q,onEventDelete:X,onDateChange:J,onViewChange:Y,locale:q,timezone:G,translations:M,translator:Z}=P,[F,K]=xP(A()),[U,V]=xP(_),[N,L]=xP(f),[W,H]=xP(!1),[S,O]=xP(null),[w,b]=xP(null),[k,R]=xP(q||"en"),D=Df(()=>{if(Z)return Z;if(M)return(B)=>M[B]||B;return(B)=>a0[B]||B},[M,Z]),E=e((B,m)=>{let o=[];for(let u of N)if(u.rrule){let pP=s0({event:u,currentEvents:N,startDate:B,endDate:m});o.push(...pP)}else{let pP=u.start.isSameOrAfter(B)&&u.start.isSameOrBefore(m),W0=u.end.isSameOrAfter(B)&&u.end.isSameOrBefore(m),C5=u.start.isBefore(B)&&u.end.isAfter(m);if(pP||W0||C5)o.push(u)}return o},[N]),T=e(()=>{switch(U){case"day":return{start:F.startOf("day"),end:F.endOf("day")};case"week":return{start:F.startOf("week").subtract(p===1?1:0,"day"),end:F.endOf("week").add(p===1?1:0,"day")};case"month":return{start:F.startOf("month").startOf("week").subtract(p===1?1:0,"day"),end:F.endOf("month").endOf("week").add(p===1?1:0,"day")};case"year":return{start:F.startOf("year"),end:F.endOf("year")};default:return{start:F.startOf("month"),end:F.endOf("month")}}},[F,U,p]),v=Df(()=>{let{start:B,end:m}=T();return E(B,m)},[E,T]);n0(()=>{if(f)L(f)},[f]),n0(()=>{if(q)R(q),A.locale(q)},[q]),n0(()=>{if(G)A.tz.setDefault(G)},[G]);let IP=e((B)=>{K(B),J?.(B)},[J]),zP=e(()=>{switch(U){case"month":K((B)=>{let m=B.add(1,"month");return J?.(m),m});break;case"week":K((B)=>{let m=B.add(1,"week");return J?.(m),m});break;case"day":K((B)=>{let m=B.add(1,"day");return J?.(m),m});break;case"year":K((B)=>{let m=B.add(1,"year");return J?.(m),m});break}},[U,J]),WP=e(()=>{switch(U){case"month":K((B)=>{let m=B.subtract(1,"month");return J?.(m),m});break;case"week":K((B)=>{let m=B.subtract(1,"week");return J?.(m),m});break;case"day":K((B)=>{let m=B.subtract(1,"day");return J?.(m),m});break;case"year":K((B)=>{let m=B.subtract(1,"year");return J?.(m),m});break}},[U,J]),HP=e(()=>{let B=A();K(B),J?.(B)},[J]),yP=e((B)=>{L((m)=>[...m,B]),$?.(B)},[$]),gP=e((B,m)=>{L((o)=>{return o.map((pP)=>{if(pP.id===B){let W0={...pP,...m};return Q?.(W0),W0}return pP})})},[Q]),uP=e((B,m,o)=>{let u={...B,...m};Q?.(u);let pP=kf({targetEvent:B,updates:m,currentEvents:N,scope:o.scope});L(pP)},[N,Q]),rP=e((B,m)=>{X?.(B);let o=of({targetEvent:B,currentEvents:N,scope:m.scope});L(o)},[N,X]),jP=e((B)=>{L((m)=>{let o=m.find((u)=>u.id===B);if(o)X?.(o);return m.filter((u)=>u.id!==B)})},[X]),lP=e((B)=>{if(B)b(B);O({title:D("newEvent"),start:B??F,end:B??F.add(1,"hour"),description:"",allDay:!1}),H(!0)},[F,D]),I=e(()=>{b(null),O(null),H(!1)},[]),JP=e((B)=>{V(B),Y?.(B)},[Y]),XP=e((B)=>{let m=B.uid;return N.find((u)=>{return(u.uid||`${u.id}@ilamy.calendar`)===m&&u.rrule})||null},[N]);return{currentDate:F,view:U,events:v,rawEvents:N,isEventFormOpen:W,selectedEvent:S,selectedDate:w,firstDayOfWeek:p,dayMaxEvents:_0,currentLocale:k,setCurrentDate:K,selectDate:IP,setView:JP,nextPeriod:zP,prevPeriod:WP,today:HP,addEvent:yP,updateEvent:gP,updateRecurringEvent:uP,deleteEvent:jP,deleteRecurringEvent:rP,openEventForm:lP,closeEventForm:I,setSelectedEvent:O,setIsEventFormOpen:H,setSelectedDate:b,getEventsForDateRange:E,findParentRecurringEvent:XP,getCurrentViewRange:T,t:D}};import{jsx as bp}from"react/jsx-runtime";var xf=(P)=>{if(P.resourceIds)return P.resourceIds;if(P.resourceId!==void 0)return[P.resourceId];return[]},Ef=({children:P,events:f=[],resources:p=[],firstDayOfWeek:_=0,initialView:$="month",renderEvent:Q,onEventClick:X,onCellClick:J,onViewChange:Y,onEventAdd:q,onEventUpdate:G,onEventDelete:M,onDateChange:Z,locale:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L,stickyViewHeader:W=!0,viewHeaderClassName:H="",headerComponent:S,headerClassName:O,translations:w,translator:b,renderResource:k})=>{let[R]=uf(p),[D,E]=uf(new Set(p.map((B)=>B.id))),T=R0({events:f,firstDayOfWeek:_,initialView:$,onEventAdd:q,onEventUpdate:G,onEventDelete:M,onDateChange:Z,onViewChange:Y,locale:F,timezone:K,translations:w,translator:b}),v=_P((B)=>{E((m)=>{let o=new Set(m);if(o.has(B))o.delete(B);else o.add(B);return o})},[]),IP=_P((B)=>{E((m)=>new Set(m).add(B))},[]),zP=_P((B)=>{E((m)=>{let o=new Set(m);return o.delete(B),o})},[]),WP=_P(()=>{E(new Set(R.map((B)=>B.id)))},[R]),HP=_P(()=>{E(new Set)},[]),yP=_P((B)=>{return T.events.filter((m)=>{if(m.resourceIds)return m.resourceIds.includes(B);return m.resourceId===B})},[T.events]),gP=_P((B)=>{return T.events.filter((m)=>{return xf(m).some((u)=>B.includes(u))})},[T.events]),uP=_P((B)=>{return R.find((m)=>m.id===B)},[R]),rP=_P(()=>{return R.filter((B)=>D.has(B.id))},[R,D]),jP=_P((B)=>{return Boolean(B.resourceIds&&B.resourceIds.length>1)},[]),lP=_P((B)=>{T.setSelectedEvent(B),T.setIsEventFormOpen(!0)},[T]),I=_P((B)=>{if(V)return;if(X)X(B);else lP(B)},[V,X,lP]),JP=_P((B,m,o)=>{if(U)return;if(J)J(B,m,o);else{let u={title:T.t("newEvent"),start:B,end:m,description:"",allDay:!1};if(o!==void 0)u.resourceId=o;T.setSelectedEvent(u),T.setSelectedDate(B),T.setIsEventFormOpen(!0)}},[J,U,T]),XP=Vp(()=>({...T,view:T.view,setView:T.setView,events:T.events,rawEvents:T.rawEvents,resources:R,visibleResources:D,toggleResourceVisibility:v,showResource:IP,hideResource:zP,showAllResources:WP,hideAllResources:HP,getEventsForResource:yP,getEventsForResources:gP,getResourceById:uP,getVisibleResources:rP,isEventCrossResource:jP,getEventResourceIds:xf,onEventClick:I,onCellClick:JP,headerComponent:S,headerClassName:O,renderEvent:Q,renderResource:k,locale:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L,stickyViewHeader:W,viewHeaderClassName:H}),[T,R,D,v,IP,zP,WP,HP,yP,gP,uP,rP,jP,I,JP,Q,k,F,K,U,V,N,L,W,H,S,O]);return bp(f0.Provider,{value:XP,children:P})};function r(P){let f=vf(f0),p=vf(dP);if(f)return P(f);if(p)return P(p);throw Error("useSmartCalendarContext must be used within a CalendarProvider or ResourceCalendarProvider")}import{jsx as Q0,jsxs as gp}from"react/jsx-runtime";var Rp=(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 Ip({elementId:P,event:f,className:p,style:_,disableDrag:$=!1}){let{onEventClick:Q,renderEvent:X,disableEventClick:J,disableDragAndDrop:Y}=r((K)=>({onEventClick:K.onEventClick,renderEvent:K.renderEvent,disableEventClick:K.disableEventClick,disableDragAndDrop:K.disableDragAndDrop})),{attributes:q,listeners:G,setNodeRef:M,isDragging:Z}=mp({id:P,data:{event:f,type:"calendar-event"},disabled:$||Y}),F=()=>{let K=f,U=K.isTruncatedStart,V=K.isTruncatedEnd;return gp("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",Rp(U,V)),style:{backgroundColor:f.backgroundColor,color:f.color},children:[U&&Q0("div",{className:"absolute left-0 top-0 bottom-0 w-0.5 bg-foreground/25"}),Q0("p",{className:z("text-[10px] font-semibold sm:text-xs mt-0.5",U&&"pl-1",V&&"pr-1"),children:f.title}),V&&Q0("div",{className:"absolute right-0 top-0 bottom-0 w-0.5 bg-foreground/25"})]})};return Q0(Sp,{mode:"wait",children:Q0(Op.div,{ref:M,...q,...G,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",$||Y?J?"cursor-default":"cursor-pointer":"cursor-grab",Z&&!($||Y)&&"cursor-grabbing shadow-lg",p),style:_,onClick:(K)=>{K.stopPropagation(),Q(f)},children:X?X(f):Q0(F,{})},P)})}var YP=Tp(Ip,(P,f)=>{return P.elementId===f.elementId&&P.disableDrag===f.disableDrag&&P.className===f.className&&P.event===f.event});import{useImperativeHandle as wp,useState as cf}from"react";import{jsx as U0,jsxs as hp}from"react/jsx-runtime";var J0=({ref:P})=>{let[f,p]=cf(!1),[_,$]=cf(null),{currentDate:Q,firstDayOfWeek:X}=r((q)=>({currentDate:q.currentDate,firstDayOfWeek:q.firstDayOfWeek}));wp(P,()=>({open:()=>p(!0),close:()=>p(!1),setSelectedDayEvents:(q)=>$(q)}));let Y=Q.startOf("month").clone();while(Y.day()!==X)Y=Y.subtract(1,"day");return U0(sP,{open:f,onOpenChange:p,children:hp(aP,{className:"max-h-[80vh] max-w-md overflow-y-auto",children:[U0(nP,{children:U0(eP,{children:_&&_.day.format("MMMM D, YYYY")})}),U0("div",{className:"mt-4 space-y-3",children:_&&_.events.map((q)=>{return U0(YP,{elementId:`all-events-dialog-event-$${q.id}`,event:q,className:"relative my-1 h-[30px]"},q.id)})})]})})};import{AnimatePresence as ip,motion as kp}from"motion/react";import{useMemo as op}from"react";import{jsx as I0}from"react/jsx-runtime";var yf=({className:P})=>{let{firstDayOfWeek:f,currentLocale:p,stickyViewHeader:_,viewHeaderClassName:$}=x(),Q=op(()=>{let X=A.weekdaysShort().map((J)=>J.toLowerCase());for(let J=0;J<f;J++){let Y=X.shift();if(Y)X.push(Y)}return{days:X}},[f,p]);return I0("div",{className:z("grid grid-cols-7 border-b",_&&"sticky top-0 z-20",$,P),"data-testid":"month-header",children:Q.days.map((X,J)=>I0(ip,{mode:"wait",children:I0(kp.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:J*0.05},className:"py-2 text-center font-medium border-r first:border-l","data-testid":`weekday-header-${X}`,children:I0("span",{className:"text-sm capitalize",children:X})},X)},X))})};var g0=({days:P,events:f,dayMaxEvents:p,dayNumberHeight:_=Cf,gridType:$="day"})=>{let Q=P[0].startOf("day"),X=P.at(-1).endOf("day"),J=P.length,Y=f.filter((K)=>K.end.diff(K.start,$)>0),q=f.filter((K)=>K.end.diff(K.start,$)===0),G=[...Y].sort((K,U)=>{let V=K.start.diff(U.start);if(V!==0)return V;return U.end.diff(U.start)-K.end.diff(K.start)}),M=[...q].sort((K,U)=>K.start.diff(U.start)),Z=[];for(let K=0;K<p;K++){Z[K]=[];for(let U=0;U<J;U++)Z[K][U]={taken:!1,event:null}}let F=[];for(let K of G){let U=A.max(K.start.startOf($),Q),V=$==="hour"?K.end.subtract(1,"minute"):K.end,N=A.min(V.startOf($),X),L=Math.max(0,U.diff(Q,$)),W=Math.min(J-1,N.diff(Q,$)),H=K.start.startOf($).isBefore(Q),S=K.end.startOf($).isAfter(X),O=!1,w=-1;for(let b=0;b<p;b++){let k=!0;for(let R=L;R<=W;R++)if(Z[b][R].taken){k=!1;break}if(k){w=b;break}}if(w!==-1){for(let k=L;k<=W;k++)Z[w][k]={taken:!0,event:K};let b=W-L+1;F.push({left:L/J*100,width:b/J*100,top:_+OP+w*(d+OP),height:d,position:w,...K,isTruncatedStart:H,isTruncatedEnd:S}),O=!0}if(!O)for(let b=L+1;b<=W;b++){let k=-1;for(let R=0;R<p;R++){let D=!0;for(let E=b;E<=W;E++)if(Z[R][E].taken){D=!1;break}if(D){k=R;break}}if(k!==-1){for(let D=b;D<=W;D++)Z[k][D]={taken:!0,event:K};let R=W-b+1;F.push({left:b/J*100,width:R/J*100,top:_+OP+k*(d+OP),height:d,position:k,...K,isTruncatedStart:!0,isTruncatedEnd:S}),O=!0;break}}}for(let K of M){let U=A.max(K.start.startOf($),Q),V=Math.max(0,Math.min(J-1,U.diff(Q,$))),N=!1,L=!1,W=-1;for(let H=0;H<p;H++)if(!Z[H][V].taken){W=H;break}if(W!==-1)Z[W][V]={taken:!0,event:K},F.push({left:V/J*100,width:1/J*100,top:_+OP+W*(d+OP),height:d,position:W,...K,isTruncatedStart:!1,isTruncatedEnd:!1})}return F};var rf=({days:P})=>{let{getEventsForDateRange:f,dayMaxEvents:p}=x(),_=P[0].startOf("day"),$=P[6].endOf("day"),Q=f(_,$);return g0({days:P,events:Q,dayMaxEvents:p})};import{jsx as e0}from"react/jsx-runtime";var jf=({days:P})=>{let f=P[0],p=rf({days:P});return e0("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:p.map((_)=>{let $=`${_.id}-${_.position}-${f.toISOString()}`;return e0("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${_.left}% + var(--spacing) * 0.25)`,width:`calc(${_.width}% - var(--spacing) * 1)`,top:`${_.top}px`,height:`${d}px`},"data-testid":`week-event-layer-event-${_.id}`,children:e0(YP,{elementId:$,event:_,className:"h-full w-full shadow"})},`${$}-wrapper`)})})};import up from"react";import{useDroppable as Cp}from"@dnd-kit/core";import{jsx as Dp}from"react/jsx-runtime";function PP({id:P,type:f,date:p,hour:_,minute:$,resourceId:Q,children:X,className:J,style:Y,"data-testid":q}){let{onCellClick:G,disableDragAndDrop:M,disableCellClick:Z}=r((V)=>({onCellClick:V.onCellClick,disableDragAndDrop:V.disableDragAndDrop,disableCellClick:V.disableCellClick})),{isOver:F,setNodeRef:K}=Cp({id:P,data:{type:f,date:p,hour:_,minute:$,resourceId:Q},disabled:M}),U=(V)=>{if(V.stopPropagation(),Z)return;let N=p.hour(_??0).minute($??0),L=N.clone();if(_!==void 0&&$!==void 0)L=L.hour(_).minute($+15);else if(_!==void 0)L=L.hour(_+1).minute(0);else L=L.hour(23).minute(59);G(N,L)};return Dp("div",{ref:K,"data-testid":q,className:z(J,F&&!M&&"bg-accent",Z?"cursor-default":"cursor-pointer"),onClick:U,style:Y,children:X})}import{jsx as w0,jsxs as Pf,Fragment as xp}from"react/jsx-runtime";var lf=({index:P,day:f,className:p=""})=>{let _=up.useRef(null),{currentLocale:$,getEventsForDateRange:Q,currentDate:X,firstDayOfWeek:J,dayMaxEvents:Y=0,t:q}=x(),G=Q(f.startOf("day"),f.endOf("day")),Z=X.startOf("month").clone();while(Z.day()!==J)Z=Z.subtract(1,"day");let F=(W,H)=>{_.current?.setSelectedDayEvents({day:W,events:H}),_.current?.open()},K=f.isSame(A(),"day"),U=f.month()===X.month(),V=P===6,N=G.length-Y,L=N>0;return Pf(xp,{children:[w0(PP,{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]",!U&&"bg-secondary text-muted-foreground",V&&"border-r-0",p),children:Pf("div",{className:"flex flex-col gap-1",children:[w0("div",{className:z("flex h-5 w-5 items-center justify-center rounded-full text-xs sm:h-6 sm:w-6",K&&"bg-primary text-primary-foreground font-medium"),children:Intl.DateTimeFormat($,{day:"numeric"}).format(f.toDate())}),G.slice(0,Y).map((W,H)=>w0("div",{className:"h-[20px] w-full","data-testid":W?.title},`empty-${H}`)),L&&Pf("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(W)=>{W.stopPropagation(),F(f,G)},onKeyDown:(W)=>{if(W.key==="Enter"||W.key===" ")W.preventDefault(),W.stopPropagation(),F(f,G)},tabIndex:0,role:"button",children:["+",N," ",q("more")]})]})}),w0(J0,{ref:_})]})};import{jsx as iP,jsxs as df}from"react/jsx-runtime";var tf=({dayMaxEvents:P=3})=>{let f=cp.useRef(null),{currentDate:p,firstDayOfWeek:_}=x(),Q=p.startOf("month").clone();while(Q.day()!==_)Q=Q.subtract(1,"day");let X=yp(()=>{let J=[[]],Y=Q.clone();for(let q=0;q<42;q++){if(J[J.length-1].length===7)J.push([]);J[J.length-1].push(Y),Y=Y.add(1,"day")}return J},[Q]);return df("div",{className:"flex h-full flex-col","data-testid":"month-view",children:[iP(yf,{className:"h-[3rem]"}),iP(BP,{className:"overflow-auto h-[calc(100%-3rem)]","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col *:min-h-full"},children:iP(Ep,{mode:"wait",children:iP(vp.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:X.map((J,Y)=>{return df("div",{className:"relative col-span-7 grid grid-cols-7","data-testid":`week-row-${Y}`,children:[J.map((q,G)=>{return iP(lf,{index:G,day:q,dayMaxEvents:P,className:"border-r border-b first:border-l"},q.format("YYYY-MM-DD"))}),iP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:iP(jf,{days:J})})]},`week-${Y}`)})},p.format("YYYY-MM-DD"))})}),iP(J0,{ref:f})]})};import P2 from"dayjs/plugin/weekOfYear";import{useMemo as rp}from"react";import{jsx as X0,jsxs as jp}from"react/jsx-runtime";var sf=()=>{let{currentDate:P,getEventsForDateRange:f,firstDayOfWeek:p,t:_}=x(),$=AP(P,p),Q=$[0],X=$[6],J=Q.subtract(6,"day"),Y=X.add(6,"day"),G=f(J,Y).filter((Z)=>Z.allDay),{processedAllDayEvents:M}=rp(()=>{let Z=[...G].sort((U,V)=>{let N=U.start.diff(V.start);if(N!==0)return N;let L=U.end.diff(U.start);return V.end.diff(V.start)-L}),F=[],K=[];return Z.forEach((U)=>{let V=U.start.isBefore(Q)?Q:U.start,N=U.end.isAfter(X)?X:U.end,L=Math.max(0,V.diff(Q,"day")),W=Math.min(6,N.diff(Q,"day")),H=L/7*100,S=(W-L+1)/7*100,O=0,w=!1;while(!w)if(O>=F.length)F.push([]),w=!0;else if(F[O].every((R)=>{return V.isAfter(R.end)||N.isBefore(R.event.start)}))w=!0;else O++;F[O].push({end:N,event:U}),K.push({...U,left:H,width:S,top:O*(d+OP),height:d,allDay:!0})}),{processedAllDayEvents:K,allDayRowsCount:Math.max(1,F.length)}},[G,Q,X]);return jp("div",{className:"grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1 relative","data-testid":"week-all-day-row",children:[X0("div",{className:"w-16 flex shrink-0 items-center justify-end border-x border-b px-1 min-h-16",children:X0("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:_("allDay")})}),$.map((Z)=>X0(PP,{id:`all-day-cell-${Z.format("YYYY-MM-DD")}`,type:"day-cell",date:Z,className:"hover:bg-accent h-full flex-1 cursor-pointer border-r border-b"},`all-day-${Z.format("YYYY-MM-DD")}`)),X0("div",{className:"absolute inset-0 z-10 p-1 col-span-7 col-start-2",children:M.map((Z,F)=>X0("div",{className:"absolute",style:{left:`${Z.left}%`,width:`calc(${Z.width}% - var(--spacing) * 2)`,top:`${Z.top}px`,height:`${Z.height}px`},children:X0(YP,{elementId:`all-day-${Z.id}-${F}`,event:Z,className:"h-full w-full overflow-clip text-xs absolute"},`all-day-${Z.id}-${F}`)},`all-day-container-${Z.id}`))})]})};import{AnimatePresence as lp,motion as dp}from"motion/react";import{jsx as $0,jsxs as ff}from"react/jsx-runtime";var af=({className:P})=>{let{currentDate:f,currentLocale:p,selectDate:_,openEventForm:$,firstDayOfWeek:Q,stickyViewHeader:X,viewHeaderClassName:J,t:Y}=x(),q=AP(f,Q);return ff("div",{className:z("grid grid-cols-[auto_1fr_1fr_1fr_1fr_1fr_1fr_1fr] grid-rows-1",X&&"sticky top-0 z-20",J,P),"data-testid":"week-header",children:[$0("div",{className:"col-span-1 w-16 shrink-0 items-center justify-center border-x border-b p-2",children:ff("div",{className:"flex flex-col items-center justify-center",children:[$0("span",{className:"text-muted-foreground text-xs",children:Y("week")}),$0("span",{className:"font-medium",children:f.week()})]})}),q.map((G,M)=>{let Z=G.isSame(A(),"day");return $0(lp,{mode:"wait",children:ff(dp.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:M*0.05},className:z("hover:bg-accent flex-1 cursor-pointer p-1 text-center sm:p-2 border-r border-b",Z&&"bg-primary/10 font-bold"),onClick:()=>{_(G),$(G)},"data-testid":`week-day-header-${G.format("dddd").toLowerCase()}`,children:[$0("div",{className:"text-xs sm:text-sm",children:G.format("ddd")}),$0("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",Z&&"bg-primary text-primary-foreground"),children:Intl.DateTimeFormat(p,{day:"numeric"}).format(G.toDate())})]},G.format("YYYY-MM-DD"))},G.format("YYYY-MM-DD"))})]})};import{useMemo as tp}from"react";var nf=({day:P})=>{let{getEventsForDateRange:f}=x();return tp(()=>{let _=f(P.startOf("day"),P.endOf("day"));if(_=_.filter((Y)=>!Y.allDay).toSorted((Y,q)=>Y.start.diff(q.start)),_.length===0)return[];let $=[],Q=[],X=null;for(let Y of _){if(X&&Y.start.isSameOrAfter(X)){if(Q.length>0)$.push(Q);Q=[]}Q.push(Y),X=X?A.max(X,Y.end):Y.end}if(Q.length>0)$.push(Q);let J=[];for(let Y of $){if(Y.length===1){let F=Y[0],K=F.start.hour()+F.start.minute()/60,U=F.end.hour()+F.end.minute()/60;if(U<K)U=24;let V=U-K,N=K/24*100,L=V/24*100;J.push({...F,left:0,width:100,top:N,height:L});continue}let q=[...Y].sort((F,K)=>{let U=F.end.diff(F.start,"minute"),V=K.end.diff(K.start,"minute");if(U!==V)return V-U;return F.start.diff(K.start)}),G=q.length,M;if(G===2)M=25;else if(G===3)M=50;else if(G===4)M=60;else M=70;let Z=G>1?M/(G-1):0;for(let F=0;F<q.length;F++){let K=q[F],U=K.start.hour()+K.start.minute()/60,V=K.end.hour()+K.end.minute()/60;if(V<U)V=24;let N=V-U,L=U/24*100,W=N/24*100,H,S,O;if(F===0)H=0,S=100,O=1;else H=Z*F,S=100-H,O=F+1;J.push({...K,left:H,width:S,top:L,height:W,zIndex:O})}}return J},[P,f])};import{jsx as pf}from"react/jsx-runtime";var h0=({day:P,"data-testid":f})=>{let p=nf({day:P});return pf("div",{"data-testid":f,className:"pointer-events-none absolute inset-0 z-10",children:p.map((_,$)=>{let Q=`event-${_.id}-${$}-${P.toISOString()}`,X=_.end.diff(_.start,"minute")<=15;return pf("div",{className:"absolute",style:{left:`${_.left}%`,width:`calc(${_.width}% - var(--spacing) * 2)`,top:`${_.top}%`,height:`${_.height}%`},children:pf(YP,{elementId:Q,event:_,className:z("pointer-events-auto absolute",{"[&_p]:text-[10px] [&_p]:mt-0":X})})},`${Q}-wrapper`)})})};import{jsx as ef,jsxs as ap}from"react/jsx-runtime";var sp=Array.from({length:24},(P,f)=>f).map((P)=>A().hour(P).minute(0)),P5=({day:P})=>{return ap("div",{"data-testid":`week-day-col-${P.format("YYYY-MM-DD")}`,className:"col-span-1 relative grid grid-rows-24 border-r",children:[sp.map((f)=>{let p=f.hour(),_=f.format("HH"),$=P.format("YYYY-MM-DD");return ef(PP,{id:`week-time-cell-${$}-${_}`,type:"time-cell",date:P,hour:p,"data-testid":`week-time-cell-${$}-${_}`,className:z("hover:bg-accent relative z-10 h-[60px] cursor-pointer border-b")},`${$}-${_}`)}),ef(h0,{"data-testid":`week-day-events-${P.format("YYYY-MM-DD")}`,day:P})]})};import{jsx as EP,jsxs as ep}from"react/jsx-runtime";var np=Array.from({length:24},(P,f)=>f).map((P)=>A().hour(P).minute(0)),f5=()=>{let{currentDate:P,firstDayOfWeek:f,currentLocale:p}=x(),_=AP(P,f),$=_.findIndex((X)=>X.isSame(A(),"day")),Q=$!==-1;return ep("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:[EP("div",{"data-testid":"week-time-labels",className:"z-10 col-span-1 w-16 grid grid-rows-24 border-x",children:np.map((X)=>EP("div",{"data-testid":`week-time-hour-${X.format("HH")}`,className:"h-[60px] border-b text-right",children:EP("span",{className:"text-muted-foreground px-1 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat(p,{hour:"numeric",minute:"numeric",hour12:!0}).format(X.toDate())})},X.format("HH:mm")))}),_.map((X)=>EP(P5,{day:X},X.format("YYYY-MM-DD"))),Q&&EP("div",{"data-testid":"week-current-time-indicator",className:"pointer-events-none absolute z-40",style:{top:`${(A().hour()+A().minute()/60)*60}px`,left:`calc(var(--spacing) * 16 + ${$} * (100% - var(--spacing) * 16) / 7)`,width:"calc((100% - var(--spacing) * 16) / 7)"},children:EP("div",{className:"w-full border-t border-red-500",children:EP("div",{className:"-mt-1 ml-1 h-2 w-2 rounded-full bg-red-500"})})})]})};import{jsx as _f,jsxs as p5}from"react/jsx-runtime";A.extend(P2);var f2=()=>{return p5("div",{className:"flex flex-col h-full","data-testid":"week-view",children:[_f(af,{className:"h-[5rem]"}),p5(BP,{className:"flex overflow-auto h-[calc(100%-5rem)]","data-testid":"week-scroll-area",children:[_f(sf,{}),_f(f5,{})]})]})},_5=f2;import{Fragment as $2}from"react";import{useMemo as Q5}from"react";import{jsx as Z0,jsxs as p2}from"react/jsx-runtime";var J5=()=>{let{currentDate:P,getEventsForDateRange:f,t:p}=x(),_=f(P.startOf("day"),P.endOf("day")),{allDayEvents:$}=Q5(()=>{let X=_.filter((Y)=>Y.allDay),J=_.filter((Y)=>!Y.allDay);return{allDayEvents:X,regularEvents:J}},[_]),{processedAllDayEvents:Q}=Q5(()=>{let X=[...$].sort((q,G)=>{return q.start.diff(G.start)}),J=[],Y=[];return X.forEach((q,G)=>{let M=!1;while(!M)if(G>=J.length)J.push([]),M=!0;else M=!0;J[G].push({event:q}),Y.push({...q,left:0,width:100,top:G*d,height:d,allDay:!0})}),{processedAllDayEvents:Y,allDayRowsCount:Math.max(1,J.length)}},[$]);return p2("div",{"data-testid":"day-all-day-row",className:"grid grid-cols-8 border-b border-x",children:[Z0("div",{className:"col-span-2 flex shrink-0 items-center justify-end border-r pr-2 md:col-span-1",children:Z0("span",{className:"text-muted-foreground text-[10px] whitespace-nowrap sm:text-xs",children:p("allDay")})}),Z0("div",{className:"relative col-span-6 md:col-span-7 ",children:Z0(PP,{id:`all-day-${P.format("YYYY-MM-DD")}`,type:"day-cell",date:P,className:"hover:bg-accent w-full cursor-pointer min-h-10 flex flex-col",children:Q.map((X,J)=>{return Z0("div",{style:{height:d+"px"},children:Z0(YP,{elementId:`all-day-${X.id}-${J}`,event:X,className:"overflow-clip text-xs",style:{width:"calc(100% - var(--spacing) * 2)"}})},`all-day-${X.id}-${J}`)})})})]})};import{AnimatePresence as _2,motion as Q2}from"motion/react";import{jsx as i0,jsxs as J2}from"react/jsx-runtime";var X5=({className:P})=>{let{currentDate:f,stickyViewHeader:p,viewHeaderClassName:_}=x(),$=f.isSame(A(),"day");return i0("div",{"data-testid":"day-header",className:z("flex items-center justify-center border-b p-2 border-x",p&&"sticky top-0 z-20",_,P),children:i0(_2,{mode:"wait",children:J2(Q2.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",$&&"text-primary"),children:[i0("span",{className:"xs:inline hidden",children:f.format("dddd, ")}),f.format("MMMM D, YYYY"),$&&i0("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 Qf}from"react/jsx-runtime";var X2=Array.from({length:24},(P,f)=>f).map((P)=>{return A().hour(P).minute(0)}),$5=({className:P})=>{let{currentLocale:f}=x();return Qf("div",{"data-testid":"day-time-col",className:`col-span-2 h-full md:col-span-1 ${P}`,children:X2.map((p)=>Qf("div",{"data-testid":`day-time-hour-${p.format("HH")}`,className:"h-[60px] border-b text-right",children:Qf("span",{className:"text-muted-foreground pr-2 text-right text-[10px] sm:text-xs",children:Intl.DateTimeFormat(f,{hour:"numeric",minute:"numeric",hour12:!0}).format(p.toDate())})},p.format("HH:mm")))})};import{jsx as fP,jsxs as G0}from"react/jsx-runtime";var Z2=[0,15,30,45],Jf=Array.from({length:24},(P,f)=>f).map((P)=>{return A().hour(P).minute(0)}),Y2=()=>{let{currentDate:P}=x(),f=P.isSame(A(),"day"),p=P.format("YYYY-MM-DD");return G0("div",{"data-testid":"day-view",className:"flex h-full flex-col",children:[fP(X5,{className:"h-[3rem]"}),G0(BP,{"data-testid":"day-scroll-area",className:"relative overflow-y-auto h-[calc(100%-3rem)]",children:[fP(J5,{}),G0("div",{"data-testid":"day-time-grid",className:"grid grid-cols-8 divide-x border-x",style:{height:`${Jf.length*60}px`},children:[fP($5,{className:"col-span-2 h-full md:col-span-1"}),G0("div",{"data-testid":"day-events-column",className:"relative col-span-6 h-full md:col-span-7",children:[fP("div",{"data-testid":"day-background-grid",className:"absolute inset-0 z-0",children:Jf.map((_,$)=>{let Q=_.format("HH"),X=P.format("YYYY-MM-DD");return fP("div",{className:"h-[60px] border-b","data-testid":`day-bg-hour-${Q}`,children:Z2.slice(1).map((J)=>fP("div",{"data-testid":`day-bg-hour-${Q}-${J}`,className:"border-border absolute w-full border-t border-dashed",style:{top:`${$*60+J}px`}},`bg-${Q}-${J}`))},`bg-${X}-${Q}`)})}),fP("div",{"data-testid":"day-interactive-layer",className:"pointer-events-auto absolute inset-0 z-10",children:Jf.map((_)=>{let $=_.hour(),Q=_.format("HH");return G0($2,{children:[fP(PP,{id:`day-time-cell-${p}-${Q}-00`,"data-testid":`day-time-cell-${Q}-00`,type:"time-cell",date:P,hour:$,minute:0,className:z("hover:bg-accent h-[15px] cursor-pointer")}),fP(PP,{id:`day-time-cell-${p}-${Q}-15`,"data-testid":`day-time-cell-${Q}-15`,type:"time-cell",date:P,hour:$,minute:15,className:"hover:bg-accent h-[15px] cursor-pointer"}),fP(PP,{id:`day-time-cell-${p}-${Q}-30`,"data-testid":`day-time-cell-${Q}-30`,type:"time-cell",date:P,hour:$,minute:30,className:"hover:bg-accent h-[15px] cursor-pointer"}),fP(PP,{id:`day-time-cell-${p}-${Q}-45`,"data-testid":`day-time-cell-${Q}-45`,type:"time-cell",date:P,hour:$,minute:45,className:"hover:bg-accent h-[15px] cursor-pointer"})]},`${p}-${Q}`)})}),fP(h0,{day:P}),f&&fP("div",{"data-testid":"day-current-time-indicator",className:"absolute right-0 left-0 z-40 border-t border-red-500",style:{top:`${(A().hour()+A().minute()/60)*60}px`},children:fP("div",{className:"-mt-1 -ml-1 h-2 w-2 rounded-full bg-red-500"})})]})]})]})]})},Z5=Y2;import{useEffect as K5,useState as kP}from"react";import{useState as Y5,useEffect as q2,useMemo as z2}from"react";import{RRule as C}from"rrule";import{jsx as y,jsxs as a}from"react/jsx-runtime";function K2(P,f){if(!P)return f("customRecurrence");try{let _=new C(P).toText();if(!_||_.includes("RRule error")||_.includes("Unable to fully convert")||_.toLowerCase().includes("error"))return f("customRecurrence");return _.charAt(0).toUpperCase()+_.slice(1)}catch{return f("customRecurrence")}}var q5=({value:P,onChange:f})=>{let{t:p}=r((L)=>({t:L.t})),[_,$]=Y5(!!P),Q=z2(()=>[{value:C.SU,label:p("sunday"),short:p("sun")},{value:C.MO,label:p("monday"),short:p("mon")},{value:C.TU,label:p("tuesday"),short:p("tue")},{value:C.WE,label:p("wednesday"),short:p("wed")},{value:C.TH,label:p("thursday"),short:p("thu")},{value:C.FR,label:p("friday"),short:p("fri")},{value:C.SA,label:p("saturday"),short:p("sat")}],[p]),X=(L)=>{return{[C.DAILY]:"DAILY",[C.WEEKLY]:"WEEKLY",[C.MONTHLY]:"MONTHLY",[C.YEARLY]:"YEARLY"}[L]||"DAILY"},[J,Y]=Y5(()=>P||null);q2(()=>{if($(!!P),P)Y(P)},[P]);let q=(L)=>{if(!J)return;let W={...J,...L};if(Y(W),_)f(W);else f(null)},G=(L)=>{if($(L),L)if(J)f(J);else{let W={freq:C.DAILY,interval:1};Y(W),f(W)}else f(null)},M=(L)=>{let W={DAILY:C.DAILY,WEEKLY:C.WEEKLY,MONTHLY:C.MONTHLY,YEARLY:C.YEARLY};q({freq:W[L]||C.DAILY})},Z=(L)=>{let W=Math.max(1,Number.parseInt(L.target.value)||1);q({interval:W})},F=(L)=>{let W={};if(L==="never")W.count=void 0,W.until=void 0;else if(L==="count")W.count=J?.count||1,W.until=void 0;else if(L==="until")W.until=J?.until||A().add(1,"month").endOf("day").toDate(),W.count=void 0;q(W)},K=(L)=>{let W=Math.max(1,Number.parseInt(L.target.value)||1);q({count:W})},U=(L)=>{let W=L?A(L).endOf("day").toDate():void 0;q({until:W})},V=(L)=>{let W=[C.SU,C.MO,C.TU,C.WE,C.TH,C.FR,C.SA],H=J?.byweekday||[],S=W[L],O=H.includes(S),w;if(O)w=H.filter((b)=>b!==S);else w=[...H,S];q({byweekday:w.length>0?w:void 0})},N=()=>{if(J?.until)return"until";if(J?.count)return"count";return"never"};return a(Hf,{"data-testid":"recurrence-editor",children:[a(Af,{className:"pb-3",children:[a("div",{className:"flex items-center space-x-2",children:[y(hP,{id:"recurring",checked:_,onCheckedChange:G,"data-testid":"toggle-recurrence"}),y(Mf,{className:"text-sm",children:p("repeat")})]}),_&&P&&y("p",{className:"text-xs text-muted-foreground",children:K2(P,p)})]}),_&&y(Vf,{className:"pt-0",children:a("div",{className:"space-y-4",children:[a("div",{className:"grid grid-cols-2 gap-4",children:[a("div",{children:[y(l,{htmlFor:"frequency",className:"text-xs",children:p("repeats")}),a(Sf,{value:X(J?.freq??C.DAILY),onValueChange:M,children:[y(Tf,{id:"frequency",className:"h-8","data-testid":"frequency-select",children:y(Of,{})}),a(Rf,{children:[y(L0,{value:"DAILY",children:p("daily")}),y(L0,{value:"WEEKLY",children:p("weekly")}),y(L0,{value:"MONTHLY",children:p("monthly")}),y(L0,{value:"YEARLY",children:p("yearly")})]})]})]}),a("div",{children:[y(l,{htmlFor:"interval",className:"text-xs",children:p("every")}),y(SP,{id:"interval",type:"number",min:"1",value:J?.interval||1,onChange:Z,className:"h-8"})]})]}),J?.freq===C.WEEKLY&&a("div",{children:[y(l,{className:"text-xs",children:p("repeatOn")}),y("div",{className:"flex flex-wrap gap-1 mt-1",children:Q.map((L,W)=>{let S=(Array.isArray(J?.byweekday)?J.byweekday:(J?.byweekday)?[J.byweekday]:[]).includes(L.value);return a("div",{className:"flex items-center space-x-1",children:[y(hP,{id:`day-${W}`,checked:S,onCheckedChange:()=>V(W)}),y(l,{htmlFor:`day-${W}`,className:"text-xs cursor-pointer",children:L.short})]},`day-${W}`)})})]}),a("div",{children:[y(l,{className:"text-xs",children:p("ends")}),a("div",{className:"space-y-2 mt-1",children:[a("div",{className:"flex items-center space-x-2",children:[y(hP,{id:"never",checked:N()==="never",onCheckedChange:()=>F("never")}),y(l,{htmlFor:"never",className:"text-xs",children:p("never")})]}),a("div",{className:"flex items-center space-x-2",children:[y(hP,{id:"after",checked:N()==="count",onCheckedChange:()=>F("count")}),y(l,{htmlFor:"after",className:"text-xs",children:p("after")}),N()==="count"&&y(SP,{type:"number",min:"1",value:J?.count||1,onChange:K,className:"h-6 w-16 text-xs","data-testid":"count-input"}),y("span",{className:"text-xs",children:p("occurrences")})]}),a("div",{className:"flex items-center space-x-2",children:[y(hP,{id:"on",checked:N()==="until",onCheckedChange:()=>F("until")}),y(l,{htmlFor:"on",className:"text-xs",children:p("on")}),N()==="until"&&y(z0,{date:J?.until,setDate:U,className:"h-6"})]})]})]})]})})]})};import{jsx as QP,jsxs as vP}from"react/jsx-runtime";function N0({isOpen:P,onClose:f,onConfirm:p,operationType:_,eventTitle:$}){let{t:Q}=r((Y)=>({t:Y.t})),X=(Y)=>{p(Y),f()},J=_==="edit";return QP(sP,{open:P,onOpenChange:f,children:vP(aP,{className:"max-w-md",children:[vP(nP,{children:[QP(eP,{children:J?Q("editRecurringEvent"):Q("deleteRecurringEvent")}),vP(S0,{children:['"',$,'"'," ",J?Q("editRecurringEventQuestion"):Q("deleteRecurringEventQuestion")]})]}),vP("div",{className:"space-y-3",children:[QP(g,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("this"),children:vP("div",{className:"text-left",children:[QP("div",{className:"font-medium",children:Q("thisEvent")}),QP("div",{className:"text-sm text-muted-foreground",children:J?Q("onlyChangeThis"):Q("onlyDeleteThis")})]})}),QP(g,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("following"),children:vP("div",{className:"text-left",children:[QP("div",{className:"font-medium",children:Q("thisAndFollowingEvents")}),QP("div",{className:"text-sm text-muted-foreground",children:J?Q("changeThisAndFuture"):Q("deleteThisAndFuture")})]})}),QP(g,{variant:"outline",className:"w-full justify-start h-auto p-4",onClick:()=>X("all"),children:vP("div",{className:"text-left",children:[QP("div",{className:"font-medium",children:Q("allEvents")}),QP("div",{className:"text-sm text-muted-foreground",children:J?Q("changeEntireSeries"):Q("deleteEntireSeries")})]})})]}),QP(m0,{children:QP(g,{variant:"outline",onClick:f,children:Q("cancel")})})]})})}import{useState as L2,useCallback as k0}from"react";function z5(P){let{updateRecurringEvent:f,deleteRecurringEvent:p}=r((q)=>({updateRecurringEvent:q.updateRecurringEvent,deleteRecurringEvent:q.deleteRecurringEvent})),[_,$]=L2({isOpen:!1,operationType:"edit",event:null}),Q=k0((q,G)=>{$({isOpen:!0,operationType:"edit",event:q,updates:G,onConfirm:(M)=>{f(q,G,{scope:M,eventDate:q.start})}})},[f]),X=k0((q)=>{$({isOpen:!0,operationType:"delete",event:q,onConfirm:(G)=>{p(q,{scope:G,eventDate:q.start})}})},[p]),J=k0(()=>{$({isOpen:!1,operationType:"edit",event:null})},[]),Y=k0((q)=>{if(_.onConfirm)_.onConfirm(q);J(),P?.()},[_,J,P]);return{dialogState:_,openEditDialog:Q,openDeleteDialog:X,closeDialog:J,handleConfirm:Y}}import{jsx as h,jsxs as t,Fragment as U2}from"react/jsx-runtime";var L5=[{value:"bg-blue-100 text-blue-800",label:"Blue"},{value:"bg-green-100 text-green-800",label:"Green"},{value:"bg-purple-100 text-purple-800",label:"Purple"},{value:"bg-red-100 text-red-800",label:"Red"},{value:"bg-yellow-100 text-yellow-800",label:"Yellow"},{value:"bg-pink-100 text-pink-800",label:"Pink"},{value:"bg-indigo-100 text-indigo-800",label:"Indigo"},{value:"bg-amber-100 text-amber-800",label:"Amber"},{value:"bg-emerald-100 text-emerald-800",label:"Emerald"},{value:"bg-sky-100 text-sky-800",label:"Sky"},{value:"bg-violet-100 text-violet-800",label:"Violet"},{value:"bg-rose-100 text-rose-800",label:"Rose"},{value:"bg-teal-100 text-teal-800",label:"Teal"},{value:"bg-orange-100 text-orange-800",label:"Orange"}],o0=({selectedEvent:P,selectedDate:f,onClose:p,onUpdate:_,onDelete:$,onAdd:Q})=>{let{dialogState:X,openEditDialog:J,openDeleteDialog:Y,closeDialog:q,handleConfirm:G}=z5(p),{findParentRecurringEvent:M,t:Z}=r((I)=>({findParentRecurringEvent:I.findParentRecurringEvent,t:I.t})),F=P?.start,K=P?.end,U=P?M(P):null,V=f?.toDate()||new Date,N=f?.add(1,"hour").toDate()||A().add(1,"hour").toDate(),[L,W]=kP(F?.toDate()||V),[H,S]=kP(K?.toDate()||N),[O,w]=kP(P?.allDay||!1),[b,k]=kP(P?.color||L5[0].value),[R,D]=kP(F?F.format("HH:mm"):A(V).format("HH:mm")),[E,T]=kP(K?K.format("HH:mm"):A(N).format("HH:mm")),[v,IP]=kP({title:P?.title||"",description:P?.description||"",location:P?.location||""}),[zP,WP]=kP(()=>{return P?.rrule||U?.rrule||null}),HP=(I)=>{if(I)W(I)},yP=(I)=>{if(I)S(I)},gP=(I)=>{let{name:JP,value:XP}=I.target;IP((B)=>({...B,[JP]:XP}))},uP=(I,JP)=>{let XP=I.target.value;if(JP)D(XP);else T(XP)};K5(()=>{if(O)T("23:59")},[O]);let rP=(I)=>{I.preventDefault();let[JP,XP]=R.split(":").map(Number),[B,m]=E.split(":").map(Number),o=A(L).hour(JP).minute(XP),u=A(H).hour(B).minute(m);if(O)o=o.hour(0).minute(0),u=u.hour(23).minute(59);let pP={id:P?.id||A().format("YYYYMMDDHHmmss"),title:v.title,start:o,end:u,description:v.description,location:v.location,allDay:O,color:b,rrule:zP||void 0};if(P?.id){if(p0(P)){J(P,{title:v.title,start:o,end:u,description:v.description,location:v.location,allDay:O,color:b,rrule:zP||void 0});return}_?.(pP)}else Q?.(pP);p()},jP=()=>{if(P?.id){if(p0(P)){Y(P);return}$?.(P),p()}},lP=(I)=>{if(I){let[JP,XP]=R.split(":").map(Number),B=A(L).hour(JP).minute(XP);if(O)B=B.hour(0).minute(0);let m={...I,dtstart:B.toDate()};WP(m)}else WP(null)};return K5(()=>{if(A(L).isAfter(A(H)))S(L)},[L,H]),t(U2,{children:[h(sP,{open:!0,onOpenChange:p,children:h(aP,{className:"w-[90vw] max-w-[500px] p-4 sm:p-6",children:t("form",{onSubmit:rP,children:[t(nP,{className:"mb-2 sm:mb-4",children:[h(eP,{className:"text-base sm:text-lg",children:P?.id?Z("editEvent"):Z("createEvent")}),h(S0,{className:"text-xs sm:text-sm",children:P?.id?Z("editEventDetails"):Z("addNewEvent")})]}),t("div",{className:"grid gap-3 py-2 sm:gap-4 sm:py-4",children:[t("div",{className:"grid gap-2",children:[h(l,{htmlFor:"title",className:"text-xs sm:text-sm",children:Z("title")}),h(SP,{id:"title",name:"title",value:v.title,onChange:gP,placeholder:Z("eventTitlePlaceholder"),required:!0,className:"h-8 text-sm sm:h-9"})]}),t("div",{className:"grid gap-1 sm:gap-2",children:[h(l,{htmlFor:"description",className:"text-xs sm:text-sm",children:Z("description")}),h(SP,{id:"description",name:"description",value:v.description,onChange:gP,placeholder:Z("eventDescriptionPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),t("div",{className:"flex items-center space-x-2",children:[h(hP,{id:"allDay",checked:O,onCheckedChange:(I)=>w(I===!0)}),h(l,{htmlFor:"allDay",className:"text-xs sm:text-sm",children:Z("allDay")})]}),t("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[t("div",{children:[h(l,{className:"text-xs sm:text-sm",children:Z("startDate")}),h(z0,{date:L,setDate:HP,className:"mt-1",closeOnSelect:!0})]}),t("div",{children:[h(l,{className:"text-xs sm:text-sm",children:Z("endDate")}),h(z0,{date:H,setDate:yP,className:"mt-1",closeOnSelect:!0})]})]}),!O&&t("div",{className:"grid grid-cols-2 gap-2 sm:gap-4",children:[t("div",{children:[h(l,{htmlFor:"start-time",className:"text-xs sm:text-sm",children:Z("startTime")}),h(SP,{id:"start-time",type:"time",value:R,onChange:(I)=>uP(I,!0),className:"mt-1 h-8 text-sm sm:h-9"})]}),t("div",{children:[h(l,{htmlFor:"end-time",className:"text-xs sm:text-sm",children:Z("endTime")}),h(SP,{id:"end-time",type:"time",value:E,onChange:(I)=>uP(I,!1),className:"mt-1 h-8 text-sm sm:h-9"})]})]}),t("div",{className:"grid gap-1 sm:gap-2",children:[h(l,{className:"text-xs sm:text-sm",children:Z("color")}),h("div",{className:"flex flex-wrap gap-2",children:h(t0,{children:L5.map((I)=>t(If,{children:[h(gf,{asChild:!0,children:h(g,{variant:"ghost",type:"button",className:z(`${I.value} h-6 w-6 rounded-full sm:h-8 sm:w-8`,b===I.value&&"ring-2 ring-black ring-offset-1 sm:ring-offset-2"),onClick:()=>k(I.value),"aria-label":I.label},I.value)}),h(wf,{children:h("p",{className:"text-xs sm:text-sm",children:I.label})})]},I.value))})})]}),t("div",{className:"grid gap-1 sm:gap-2",children:[h(l,{htmlFor:"location",className:"text-xs sm:text-sm",children:Z("location")}),h(SP,{id:"location",name:"location",value:v.location,onChange:gP,placeholder:Z("eventLocationPlaceholder"),className:"h-8 text-sm sm:h-9"})]}),h(q5,{value:zP,onChange:lP})]}),t(m0,{className:"mt-2 flex flex-col-reverse gap-2 sm:mt-4 sm:flex-row sm:gap-0",children:[P?.id&&h(g,{type:"button",variant:"destructive",onClick:jP,className:"w-full sm:mr-auto sm:w-auto",size:"sm",children:Z("delete")}),t("div",{className:"flex w-full gap-2 sm:w-auto",children:[h(g,{type:"button",variant:"outline",onClick:p,className:"flex-1 sm:flex-none",size:"sm",children:Z("cancel")}),h(g,{type:"submit",className:"flex-1 sm:flex-none",size:"sm",children:P?.id?Z("update"):Z("create")})]})]})]})})}),h(N0,{isOpen:X.isOpen,onClose:q,onConfirm:G,operationType:X.operationType,eventTitle:X.event?.title||""})]})};import{RRule as G2}from"rrule";var B0=(P)=>{return P.replaceAll("\\","\\\\").replaceAll(";","\\;").replaceAll(",","\\,").replaceAll(`
2
2
  `,"\\n").replaceAll("\r","")},C0=(P,f=!1)=>{if(f)return P.format("YYYYMMDD");return P.utc().format("YYYYMMDD[T]HHmmss[Z]")},N2=(P)=>{if(P.uid)return P.uid;return`${P.id}@ilamy.calendar`},B2=(P)=>{try{return new G2(P).toString().split(`
3
3
  `).find(($)=>$.startsWith("RRULE:"))||""}catch{return""}},F2=(P)=>{let f=[];f.push("BEGIN:VEVENT"),f.push(`UID:${N2(P)}`);let p=C0(P.start,P.allDay);if(P.allDay)f.push(`DTSTART;VALUE=DATE:${p}`);else f.push(`DTSTART:${p}`);let _=C0(P.end,P.allDay);if(P.allDay)f.push(`DTEND;VALUE=DATE:${_}`);else f.push(`DTEND:${_}`);if(f.push(`SUMMARY:${B0(P.title)}`),P.description)f.push(`DESCRIPTION:${B0(P.description)}`);if(P.location)f.push(`LOCATION:${B0(P.location)}`);if(P.rrule){let Q=B2(P.rrule);if(Q)f.push(Q)}if(P.exdates&&P.exdates.length>0){let Q=P.exdates.map((X)=>C0(A(X),P.allDay)).join(",");f.push(`EXDATE:${Q}`)}if(P.recurrenceId){let Q=C0(A(P.recurrenceId),P.allDay);f.push(`RECURRENCE-ID:${Q}`)}let $=A().utc().format("YYYYMMDD[T]HHmmss[Z]");return f.push(`DTSTAMP:${$}`),f.push(`CREATED:${$}`),f.push(`LAST-MODIFIED:${$}`),f.push("STATUS:CONFIRMED"),f.push("SEQUENCE:0"),f.push("TRANSP:OPAQUE"),f.push("END:VEVENT"),f.join(`\r
4
4
  `)},W2=(P)=>{let f=[],p=new Set;for(let _ of P){let $=_.uid||`${_.id}@ilamy.calendar`;if(_.rrule&&!_.recurrenceId){f.push(_),p.add($);continue}if(_.recurrenceId&&!_.rrule){f.push(_);continue}if(!_.rrule&&!_.recurrenceId){if(!p.has($))f.push(_)}}return f},H2=(P,f="ilamy Calendar")=>{let p=[];return p.push("BEGIN:VCALENDAR"),p.push("VERSION:2.0"),p.push("PRODID:-//ilamy//ilamy Calendar//EN"),p.push("CALSCALE:GREGORIAN"),p.push("METHOD:PUBLISH"),p.push(`X-WR-CALNAME:${B0(f)}`),p.push(`X-WR-CALDESC:${B0(`Exported from ${f}`)}`),p.push("BEGIN:VTIMEZONE"),p.push("TZID:UTC"),p.push("BEGIN:STANDARD"),p.push("DTSTART:19700101T000000"),p.push("TZNAME:UTC"),p.push("TZOFFSETFROM:+0000"),p.push("TZOFFSETTO:+0000"),p.push("END:STANDARD"),p.push("END:VTIMEZONE"),W2(P).forEach(($)=>{p.push(F2($))}),p.push("END:VCALENDAR"),p.join(`\r
5
- `)},U5=(P,f="calendar.ics",p="ilamy Calendar")=>{let _=H2(P,p),$=new Blob([_],{type:"text/calendar;charset=utf-8"}),Q=URL.createObjectURL($),X=document.createElement("a");X.href=Q,X.download=f.endsWith(".ics")?f:`${f}.ics`,document.body.append(X),X.click(),document.body.removeChild(X),URL.revokeObjectURL(Q)};import{Calendar as T2,Download as N5,Menu as R2,Plus as I2}from"lucide-react";import{useCallback as B5,useState as g2}from"react";import{AnimatePresence as D0,motion as u0}from"motion/react";import{ChevronDown as x0}from"lucide-react";import{useMemo as A2,useState as E0}from"react";import{jsx as i,jsxs as KP,Fragment as V2}from"react/jsx-runtime";var v0={initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10}},M2=()=>{let{currentDate:P,view:f,setCurrentDate:p,t:_}=r((N)=>({currentDate:N.currentDate,view:N.view,setCurrentDate:N.setCurrentDate,t:N.t})),$=A2(()=>[_("january"),_("february"),_("march"),_("april"),_("may"),_("june"),_("july"),_("august"),_("september"),_("october"),_("november"),_("december")],[_]),[Q,X]=E0(!1),[J,Y]=E0(!1),[q,G]=E0(!1),[M,Z]=E0(!1),F=P.year(),K=Array.from({length:11},(N,L)=>F-5+L),U=(N)=>{let L=P.month(N);p(L),X(!1)},V=(N)=>{let L=P.year(N);p(L),Y(!1)};return KP(V2,{children:[f!=="year"&&KP(VP,{open:Q,onOpenChange:X,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:P.format("MMMM")},`month-${P.month()}`)}),i(x0,{className:"h-4 w-4"})]})}),i(SP,{className:"w-40 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:$.map((N,L)=>i(g,{variant:"ghost",className:z("justify-start font-normal",P.month()===L&&"bg-primary/10"),onClick:()=>U(L),children:N},N))})})]}),KP(VP,{open:J,onOpenChange:Y,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:P.format("YYYY")},`year-${P.year()}`)}),i(x0,{className:"h-4 w-4"})]})}),i(SP,{className:"w-24 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:K.map((N)=>i(g,{variant:"ghost",className:z("justify-start font-normal",P.year()===N&&"bg-primary/10"),onClick:()=>V(N),children:N},N))})})]}),f==="week"&&KP(VP,{open:q,onOpenChange:G,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:`${P.startOf("week").format("MMM D")} - ${P.endOf("week").format("MMM D")}`},`week-range-${P.format("YYYY-MM-DD")}`)}),i(x0,{className:"ml-1 h-3 w-3 opacity-70"})]})}),i(SP,{className:"w-56 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:Array.from({length:7},(N,L)=>{let W=P.subtract(3,"week").add(L,"week"),H=W.startOf("week"),m=W.endOf("week"),O=W.isSame(P,"week");return i(g,{variant:"ghost",className:z("justify-start font-normal",O&&"bg-primary/10"),onClick:()=>{p(H),G(!1)},children:KP("div",{className:"flex w-full items-center justify-between",children:[i("span",{children:`${H.format("MMM D")} - ${m.format("D")}`}),H.month()!==m.month()&&i("span",{className:"text-xs opacity-70",children:`${H.format("MMM")}-${m.format("MMM")}`})]})},H.format("YYYY-MM-DD"))})})})]}),f==="day"&&KP(VP,{open:M,onOpenChange:Z,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:P.format("dddd, D")},`day-info-${P.format("YYYY-MM-DD")}`)}),i(x0,{className:"ml-1 h-3 w-3 opacity-70"})]})}),i(SP,{className:"w-56 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:(()=>{let N=P.startOf("month"),L=P.daysInMonth();return Array.from({length:L},(W,H)=>{let m=N.date(H+1),O=m.isSame(P,"day"),w=m.isSame(A(),"day");return i(g,{variant:"ghost",className:z("justify-start font-normal",O&&"bg-primary/10"),onClick:()=>{p(m),Z(!1)},children:KP("div",{className:"flex w-full items-center justify-between",children:[i("span",{children:m.format("dddd, MMM D")}),w&&i("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:_("today")})]})},m.format("YYYY-MM-DD"))})})()})})]})]})},G5=M2;import{ChevronLeft as b2,ChevronRight as S2}from"lucide-react";import{jsx as TP,jsxs as O2}from"react/jsx-runtime";var m2=({currentView:P,onChange:f,variant:p="default",size:_="sm",className:$,onToday:Q,onNext:X,onPrevious:J})=>{let{t:Y}=r((Z)=>({t:Z.t})),q=p==="grid",G=(Z)=>{return z(q?"w-full":"",P===Z&&"bg-primary/80")},M=(Z)=>{return P===Z?"default":"outline"};return O2("div",{className:z(q?"grid grid-cols-2 gap-2":"flex gap-1",$),children:[TP(g,{onClick:J,variant:"outline",size:_,children:TP(b2,{className:"h-4 w-4"})}),TP(g,{onClick:X,variant:"outline",size:_,children:TP(S2,{className:"h-4 w-4"})}),TP(g,{onClick:()=>f("day"),variant:M("day"),size:_,className:G("day"),children:Y("day")}),TP(g,{onClick:()=>f("week"),variant:M("week"),size:_,className:G("week"),children:Y("week")}),TP(g,{onClick:()=>f("month"),variant:M("month"),size:_,className:G("month"),children:Y("month")}),TP(g,{onClick:()=>f("year"),variant:M("year"),size:_,className:G("year"),children:Y("year")}),TP(g,{onClick:Q,variant:"outline",size:_,children:Y("today")})]})},Xf=m2;import{jsx as j,jsxs as FP,Fragment as h2}from"react/jsx-runtime";var w2=({className:P=""})=>{let{view:f,setView:p,nextPeriod:_,prevPeriod:$,today:Q,openEventForm:X,headerComponent:J,headerClassName:Y,rawEvents:q,t:G}=r((N)=>({view:N.view,setView:N.setView,nextPeriod:N.nextPeriod,prevPeriod:N.prevPeriod,today:N.today,openEventForm:N.openEventForm,headerComponent:N.headerComponent,headerClassName:N.headerClassName,rawEvents:N.rawEvents,t:N.t})),[M,Z]=g2(!1),F=(N,L=!1)=>{if(p(N),L)Z(!1)},K=B5(()=>{let N=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;U5(q,N,"ilamy Calendar"),Z(!1)},[q]),U={today:()=>{Q(),Z(!1)},previous:()=>{$(),Z(!1)},next:()=>{_(),Z(!1)}},V=B5(()=>j("div",{className:"flex items-center gap-2",children:FP(g,{onClick:()=>X(),variant:"default",size:"sm",className:"flex items-center gap-1",children:[j(I2,{className:"h-4 w-4"}),j("span",{className:"hidden @4xl:inline",children:G("new")})]})}),[X,G]);if(J)return J;return j(h2,{children:j("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:FP("div",{className:z("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2 border-b",P,Y),children:[FP("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[j(T2,{className:"h-5 w-5"}),j(G5,{})]}),FP("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[FP("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[j(Xf,{currentView:f,onChange:p,onToday:Q,onNext:_,onPrevious:$,variant:"default",className:"justify-end"}),j(V,{}),FP(g,{onClick:K,variant:"outline",size:"sm",className:"flex items-center gap-1",children:[j(N5,{className:"h-4 w-4"}),j("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]})]}),FP("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[j(V,{}),FP(VP,{open:M,onOpenChange:Z,children:[j(bP,{asChild:!0,children:j(g,{variant:"outline",size:"sm",children:j(R2,{className:"h-4 w-4"})})}),j(SP,{align:"end",className:"w-[240px] p-2",children:FP("div",{className:"space-y-2",children:[j("h3",{className:"mb-1 text-sm font-medium",children:"View & Navigation"}),j(Xf,{currentView:f,onChange:(N)=>F(N,!0),onToday:U.today,onNext:U.next,onPrevious:U.previous,variant:"grid"}),j("div",{className:"pt-2 border-t",children:FP(g,{onClick:K,variant:"outline",size:"sm",className:"w-full flex items-center gap-2",children:[j(N5,{className:"h-4 w-4"}),G("export")," Calendar (.ics)"]})})]})})]})]})]})]})})})},F0=w2;import{AnimatePresence as i2,motion as o2}from"motion/react";import{jsx as RP,jsxs as Y0}from"react/jsx-runtime";var k2=()=>{let{currentDate:P,selectDate:f,events:p,setView:_,getEventsForDateRange:$,t:Q}=x(),X=P.year(),Y=Array.from({length:12},(Z,F)=>{let K=A().year(X).month(F).startOf("month");return{date:K,name:K.format("MMMM"),daysInMonth:K.daysInMonth(),firstDayOfMonth:K.startOf("month").day()}}).map((Z)=>{let F=p.filter((K)=>K.start.year()===X&&K.start.month()===Z.date.month());return{...Z,eventCount:F.length}}),q=(Z)=>{f(Z),_("month")},G=(Z,F)=>{F.stopPropagation(),f(Z),_("day")},M=(Z)=>{let F=Z.date.startOf("month").startOf("week"),K=Array.from({length:42},(U,V)=>{let N=F.add(V,"day"),L=N.month()===Z.date.month(),W=N.isSame(A(),"day"),H=N.isSame(P,"day"),m=$(N.startOf("day"),N.endOf("day")),O=m.length>0;return{day:N,isCurrentMonth:L,isToday:W,isCurrentDate:H,hasEvents:O,eventCount:m.length,events:m}});return Y0("div",{"data-testid":`year-mini-calendar-${Z.date.format("MM")}`,className:"grid grid-cols-7 gap-[1px] text-[0.6rem]",children:[["S","M","T","W","T","F","S"].map((U,V)=>RP("div",{className:"text-muted-foreground h-3 text-center",children:U},`header-${V}`)),K.map((U,V)=>Y0("div",{"data-testid":`year-day-${Z.date.format("YYYY-MM")}-${U.day.format("YYYY-MM-DD")}`,onClick:(N)=>G(U.day,N),className:z("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center","hover:bg-accent rounded-sm transition-colors duration-200",!U.isCurrentMonth&&"text-muted-foreground opacity-50",U.isToday&&"bg-primary text-primary-foreground rounded-full",U.isCurrentDate&&!U.isToday&&"bg-muted rounded-full font-bold",U.hasEvents&&!U.isToday&&!U.isCurrentDate&&"font-medium"),title:U.hasEvents?`${U.eventCount} event${U.eventCount>1?"s":""}`:"",children:[RP("span",{className:"text-center leading-none",children:U.day.date()}),U.hasEvents&&Y0("div",{className:z("absolute bottom-0 flex w-full justify-center space-x-[1px]",U.isToday?"bottom-[1px]":""),children:[U.eventCount>0&&RP("span",{className:z("h-[3px] w-[3px] rounded-full",U.isToday?"bg-primary-foreground":"bg-primary")}),U.eventCount>1&&RP("span",{className:z("h-[3px] w-[3px] rounded-full",U.isToday?"bg-primary-foreground":"bg-blue-500")}),U.eventCount>2&&RP("span",{className:z("h-[3px] w-[3px] rounded-full",U.isToday?"bg-primary-foreground":"bg-green-500")})]})]},`day-${V}`))]})};return RP(BP,{"data-testid":"year-view",className:"h-full",children:RP("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:Y.map((Z,F)=>Y0("div",{"data-testid":`year-month-${Z.date.format("MM")}`,onClick:()=>q(Z.date),className:"hover:border-primary flex cursor-pointer flex-col rounded-lg border p-3 transition-all duration-200 hover:scale-[1.01] hover:shadow-md",children:[RP(i2,{mode:"wait",children:Y0(o2.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:F*0.05},className:"mb-2 flex items-center justify-between",children:[RP("h3",{"data-testid":`year-month-title-${Z.date.format("MM")}`,className:"text-lg font-medium",children:Z.name}),Z.eventCount>0&&Y0("span",{"data-testid":`year-month-event-count-${Z.date.format("MM")}`,className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs",children:[Z.eventCount," ",Z.eventCount===1?Q("event"):Q("events")]})]},`month-${F}`)}),M(Z)]},Z.name))})})},F5=k2;import{AnimatePresence as t2,motion as s2}from"motion/react";import{DndContext as C2,DragOverlay as D2,MouseSensor as u2,pointerWithin as x2,TouchSensor as E2,useSensor as W5,useSensors as v2}from"@dnd-kit/core";import y2,{useState as c2}from"react";import{snapCenterToCursor as r2}from"@dnd-kit/modifiers";import{jsx as $f,jsxs as H5,Fragment as j2}from"react/jsx-runtime";function y0({children:P}){let{updateEvent:f,updateRecurringEvent:p,view:_,disableDragAndDrop:$}=r((L)=>({updateEvent:L.updateEvent,updateRecurringEvent:L.updateRecurringEvent,view:L.view,disableDragAndDrop:L.disableDragAndDrop})),[Q,X]=y2.useState(null),[J,Y]=c2({isOpen:!1,event:null,updates:null}),q=W5(u2,{activationConstraint:{distance:2}}),G=W5(E2,{activationConstraint:{delay:100,tolerance:5}}),M=v2(q,G),Z=(L,W)=>{if(!L||!L.id)return;if(!W||Object.keys(W).length===0)return;if(p0(L))Y({isOpen:!0,event:L,updates:W});else f(L.id,W)},F=(L)=>{if(!J.event||!J.updates){Y({isOpen:!1,event:null,updates:null});return}try{p(J.event,J.updates,{scope:L,eventDate:J.event.start})}catch{}finally{Y({isOpen:!1,event:null,updates:null})}},K=()=>{Y({isOpen:!1,event:null,updates:null})},U=(L)=>{let{active:W}=L;if(W.data.current?.type==="calendar-event")X(W.data.current.event)},V=(L)=>{let{active:W,over:H}=L;if(!W||!H||!Q){X(null);return}if(H.data.current?.type==="time-cell"){let{date:m,hour:O=0,minute:w=0,resourceId:b}=H.data.current,o=Q.start,D=Q.end.diff(o,"minute"),E=A(m).hour(O).minute(w||0),T=E.add(D,"minute");if(T.isSame(T.startOf("day")))T=T.subtract(1,"day").endOf("day");let v={start:E,end:T};if(b!==void 0)v.resourceId=b;Z(Q,v)}else if(H.data.current?.type==="day-cell"){let{date:m,resourceId:O}=H.data.current,w=A(m),b=!Q.start.isSame(Q.end,"day"),o=Q.start,R=Q.end;if(b)if(_==="week"){let D=o.hour(),E=o.minute(),T=R.hour(),v=R.minute(),IP=R.diff(o,"day"),zP=w.startOf("day").hour(D).minute(E),WP=zP.add(IP,"day").hour(T).minute(v),HP={start:zP,end:WP};if(O!==void 0)HP.resourceId=O;Z(Q,HP)}else{let D=w.diff(o.startOf("day"),"day"),E=o.add(D,"day"),T=R.add(D,"day"),v={start:E,end:T};if(O!==void 0)v.resourceId=O;Z(Q,v)}else{let D=w.hour(Q.start.hour()).minute(Q.start.minute()),E=Q.end.diff(Q.start,"minute"),T=D.add(E,"minute"),v={start:D,end:T};if(O!==void 0)v.resourceId=O;Z(Q,v)}}X(null)},N=(L)=>{X(null)};if($)return P;return H5(j2,{children:[H5(C2,{sensors:M,onDragStart:U,onDragEnd:V,onDragCancel:N,collisionDetection:x2,children:[P,$f(D2,{modifiers:[r2],children:Q&&$f("div",{className:z("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",Q.backgroundColor||"bg-blue-500",Q.color||"text-white"),children:Q?.title})})]}),$f(N0,{isOpen:J.isOpen,onClose:K,onConfirm:F,operationType:"edit",eventTitle:J.event?.title||""})]})}import{useCallback as Zf,useMemo as l2}from"react";import{jsx as d2}from"react/jsx-runtime";var A5=({children:P,events:f=[],firstDayOfWeek:p=0,initialView:_="month",renderEvent:$,onEventClick:Q,onCellClick:X,onViewChange:J,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V,dayMaxEvents:N,stickyViewHeader:L=!0,viewHeaderClassName:W="",headerComponent:H,headerClassName:m,translations:O,translator:w})=>{let b=R0({events:f,firstDayOfWeek:p,initialView:_,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,onViewChange:J,locale:Z,timezone:F,translations:O,translator:w}),o=Zf((T)=>{b.setSelectedEvent(T),b.setIsEventFormOpen(!0)},[b]),R=Zf((T)=>{if(U)return;if(Q)Q(T);else o(T)},[U,Q,o]),D=Zf((T,v)=>{if(K)return;if(X)X(T,v);else b.openEventForm(T)},[X,K,b]),E=l2(()=>({currentDate:b.currentDate,view:b.view,events:b.events,rawEvents:b.rawEvents,currentLocale:b.currentLocale,isEventFormOpen:b.isEventFormOpen,selectedEvent:b.selectedEvent,selectedDate:b.selectedDate,firstDayOfWeek:b.firstDayOfWeek,setCurrentDate:b.setCurrentDate,selectDate:b.selectDate,setView:b.setView,nextPeriod:b.nextPeriod,prevPeriod:b.prevPeriod,today:b.today,addEvent:b.addEvent,updateEvent:b.updateEvent,updateRecurringEvent:b.updateRecurringEvent,deleteEvent:b.deleteEvent,deleteRecurringEvent:b.deleteRecurringEvent,openEventForm:b.openEventForm,closeEventForm:b.closeEventForm,getEventsForDateRange:b.getEventsForDateRange,findParentRecurringEvent:b.findParentRecurringEvent,renderEvent:$,onEventClick:R,onCellClick:D,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V,dayMaxEvents:N,stickyViewHeader:L,viewHeaderClassName:W,headerComponent:H,headerClassName:m,t:b.t}),[b,$,R,D,Z,F,K,U,V,N,L,W,H,m]);return d2(dP.Provider,{value:E,children:P})};import{jsx as LP,jsxs as e2}from"react/jsx-runtime";var a2=()=>{let{view:P,isEventFormOpen:f,closeEventForm:p,selectedEvent:_,selectedDate:$,addEvent:Q,updateEvent:X,deleteEvent:J,dayMaxEvents:Y}=x(),q={month:LP(tf,{dayMaxEvents:Y},"month"),week:LP(_5,{},"week"),day:LP(Z5,{},"day"),year:LP(F5,{},"year")},G=(Z)=>{X(Z.id,Z)},M=(Z)=>{J(Z.id)};return e2("div",{className:"flex flex-col w-full h-full",children:[LP(F0,{className:"p-1"}),LP(y0,{children:LP(t2,{mode:"wait",children:LP(s2.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)})}),f&&LP(k0,{onClose:p,selectedEvent:_,selectedDate:$,onAdd:Q,onUpdate:G,onDelete:M})]})},n2=({events:P,firstDayOfWeek:f="sunday",initialView:p="month",renderEvent:_,onEventClick:$,onCellClick:Q,onViewChange:X,onEventAdd:J,onEventUpdate:Y,onEventDelete:q,onDateChange:G,locale:M,translations:Z,translator:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L=_0,stickyViewHeader:W=!0,viewHeaderClassName:H="",headerComponent:m,headerClassName:O})=>{return LP(A5,{events:Bf(P),firstDayOfWeek:T0[f],initialView:p,renderEvent:_,onEventClick:$,onCellClick:Q,onViewChange:X,onEventAdd:J,onEventUpdate:Y,onEventDelete:q,onDateChange:G,locale:M,translations:Z,translator:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L,stickyViewHeader:W,viewHeaderClassName:H,headerComponent:m,headerClassName:O,children:LP(a2,{})})};import{useMemo as _4}from"react";var M5=({days:P,gridType:f="day",resourceId:p})=>{let{getEventsForResource:_,getEventsForDateRange:$,dayMaxEvents:Q}=ZP(),X=P[0].startOf("day"),J=P.at(-1).endOf("day"),Y=_(p),q=$(X,J);return g0({days:P,events:Y.filter((G)=>q.some((M)=>M.id===G.id)),dayMaxEvents:Q,dayNumberHeight:0,gridType:f})};import{jsx as Yf}from"react/jsx-runtime";var V5=({days:P,gridType:f="day",resourceId:p})=>{let _=P[0].startOf("day"),$=M5({days:P,gridType:f,resourceId:p});return Yf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:$.map((Q)=>{let X=`${p}-event-${Q.id}-${Q.position}-${_.toISOString()}`;return Yf("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${Q.left}% + var(--spacing) * 0.25)`,width:`calc(${Q.width}% - var(--spacing) * 1)`,top:`${Q.top}px`,height:`${d}px`},"data-testid":`week-event-layer-event-${Q.id}`,children:Yf(YP,{elementId:X,event:Q,className:"h-full w-full shadow"})},`${X}-wrapper`)})})};import P4,{useMemo as f4}from"react";import{jsx as qf,jsxs as zf,Fragment as p4}from"react/jsx-runtime";var b5=({index:P,day:f,className:p="",resourceId:_,gridType:$="day"})=>{let Q=P4.useRef(null),{dayMaxEvents:X=0,getEventsForDateRange:J,currentDate:Y,firstDayOfWeek:q,t:G,getEventsForResource:M}=r((H)=>({dayMaxEvents:H.dayMaxEvents,getEventsForDateRange:H.getEventsForDateRange,currentDate:H.currentDate,firstDayOfWeek:H.firstDayOfWeek,t:H.t,getEventsForResource:H.getEventsForResource})),Z=f4(()=>{let H=_?M(_):[],m=J(f.startOf($),f.endOf($));if(H.length)return m.filter((O)=>H.some((w)=>String(w.id)===String(O.id)));return m},[f,_,J,M,$]),K=Y.startOf("month").clone();while(K.day()!==q)K=K.subtract(1,"day");let U=(H,m)=>{Q.current?.setSelectedDayEvents({day:H,events:m}),Q.current?.open()},V=f.month()===Y.month(),N=P===6,L=Z.length-X,W=L>0;return zf(p4,{children:[qf(PP,{id:`day-cell-${f.toISOString()}${_?`-resource-${_}`:""}`,type:"day-cell","data-testid":`day-cell-${f.toISOString()}`,date:f,resourceId:_,className:z("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]",!V&&"bg-secondary text-muted-foreground",N&&"border-r-0",p),children:zf("div",{className:"flex flex-col gap-1",children:[Z.slice(0,X).map((H,m)=>qf("div",{className:"h-[20px] w-full","data-testid":H?.title},`empty-${m}`)),W&&zf("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(H)=>{H.stopPropagation(),U(f,Z)},onKeyDown:(H)=>{if(H.key==="Enter"||H.key===" ")H.preventDefault(),H.stopPropagation(),U(f,Z)},tabIndex:0,role:"button",children:["+",L," ",G("more")]})]})}),qf(J0,{ref:Q})]})};import{jsx as kP,jsxs as Kf}from"react/jsx-runtime";var q0=({days:P,gridType:f="day",children:p})=>{let{currentDate:_,getVisibleResources:$,dayMaxEvents:Q,renderResource:X}=ZP(),Y=$().map((q)=>({id:q.id,title:q.title,resource:q,cells:P.map((G)=>({label:G.format("D"),value:G,id:G.toISOString()}))}));return Kf(BP,{className:"h-full","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[p,kP("div",{className:"flex flex-1 h-[calc(100%-3rem)] w-fit",children:kP("div",{className:"relative w-full flex flex-col",children:Y.map((q)=>Kf("div",{className:"flex flex-1 relative min-h-[60px] ",children:[kP("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:X?X(q.resource):kP("div",{className:"break-words text-sm",children:q.title})}),Kf("div",{className:"relative flex-1 flex",children:[q.cells.map((G)=>kP(b5,{index:G.value.day(),day:G.value,resourceId:q.id,dayMaxEvents:Q,gridType:f,className:"border-r border-b w-20"},G.id)),kP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:kP(V5,{days:P,resourceId:q.id,gridType:f})})]})]},q.id))},_.format("YYYY-MM"))}),kP(l0,{orientation:"horizontal"})]})};import{AnimatePresence as Q4,motion as J4}from"motion/react";import{jsx as yP,jsxs as S5}from"react/jsx-runtime";var m5=()=>{let{currentDate:P,t:f,stickyViewHeader:p,viewHeaderClassName:_}=ZP(),$=_4(()=>{let Q=P.daysInMonth();return Array.from({length:Q},(X,J)=>P.startOf("month").add(J,"day"))},[P]);return yP("div",{className:"flex flex-col h-full border",children:yP(q0,{days:$,children:S5("div",{className:z("flex h-12 w-fit",p&&"sticky top-0 z-21 bg-background",_),children:[yP("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:yP("div",{className:"text-sm",children:f("resources")})}),$.map((Q,X)=>{let J=`resource-month-header-${Q.toISOString()}`;return yP(Q4,{mode:"wait",children:S5(J4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:X*0.05},className:"w-20 border-b border-r flex-shrink-0 flex items-center justify-center flex-col",children:[yP("div",{className:"text-xs font-medium",children:Q.format("D")}),yP("div",{className:"text-xs text-muted-foreground",children:Q.format("ddd")})]},`${J}-motion`)},`${J}-presence`)})]})})})};import{jsx as X4}from"react/jsx-runtime";var O5=()=>{return X4(m5,{})};import{useMemo as T5}from"react";import{AnimatePresence as R5,motion as I5}from"motion/react";import{jsx as qP,jsxs as Lf}from"react/jsx-runtime";var g5=()=>{let{currentDate:P,firstDayOfWeek:f,t:p,stickyViewHeader:_,viewHeaderClassName:$}=ZP(),Q=T5(()=>AP(P,f),[P,f]),X=T5(()=>{return Q.flatMap((J)=>Array.from({length:24},(Y,q)=>J.hour(q).minute(0)))},[Q]);return qP("div",{className:"flex h-full flex-col border",children:qP(q0,{days:X,gridType:"hour",children:Lf("div",{className:z("flex h-24 w-fit",_&&"sticky top-0 z-21 bg-background",$),children:[qP("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:qP("div",{className:"text-sm",children:p("resources")})}),Lf("div",{className:"flex-1 border-b border-r flex flex-col",children:[qP("div",{className:"flex h-12 border-b",children:Q.map((J,Y)=>{let q=J.isSame(A(),"day"),G=`resource-week-header-${J.toISOString()}-day`;return qP(R5,{mode:"wait",children:qP(I5.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Y*0.05},className:z("flex-shrink-0 border-r flex items-center text-center font-medium w-[calc(24*var(--spacing)*20)]",q&&"bg-blue-50 text-blue-600"),children:Lf("div",{className:"sticky left-1/2",children:[qP("div",{className:"text-sm",children:J.format("ddd")}),qP("div",{className:"text-xs text-muted-foreground",children:J.format("M/D")})]})},`${G}-motion`)},`${G}-presence`)})}),qP("div",{className:"flex h-12 border-b",children:X.map((J,Y)=>{let q=J.isSame(A(),"hour"),G=`resource-week-header-${J.toISOString()}-hour`;return qP(R5,{mode:"wait",children:qP(I5.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Y*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:J.format("ha")},`${G}-motion`)},`${G}-presence`)})})]})]})})})};import{jsx as $4}from"react/jsx-runtime";var w5=()=>{return $4(g5,{})};import{useMemo as Z4}from"react";import{AnimatePresence as Y4,motion as q4}from"motion/react";import{jsx as CP,jsxs as z4}from"react/jsx-runtime";var h5=()=>{let{currentDate:P,t:f,stickyViewHeader:p,viewHeaderClassName:_}=ZP(),$=Z4(()=>{return Array.from({length:24},(Q,X)=>P.hour(X).minute(0))},[P]);return CP("div",{className:"flex h-full flex-col border",children:CP(q0,{days:$,gridType:"hour",children:z4("div",{className:z("flex h-12 w-fit",p&&"sticky top-0 z-21 bg-background",_),children:[CP("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:CP("div",{className:"text-sm",children:f("resources")})}),CP("div",{className:"flex-1 border-b border-r flex flex-col",children:CP("div",{className:"flex h-12 border-b",children:$.map((Q,X)=>{let J=Q.isSame(A(),"hour"),Y=`resource-day-header-${Q.toISOString()}`;return CP(Y4,{mode:"wait",children:CP(q4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:X*0.05},className:z("w-20 border-r flex items-center justify-center text-xs flex-shrink-0",J&&"bg-blue-50 text-blue-600 font-medium"),children:Q.format("ha")},`${Y}-motion`)},`${Y}-presence`)})})})]})})})};import{jsx as K4}from"react/jsx-runtime";var i5=()=>{return K4(h5,{})};import{AnimatePresence as L4,motion as U4}from"motion/react";import{jsx as DP,jsxs as G4}from"react/jsx-runtime";var o5=()=>{let{view:P,isEventFormOpen:f,closeEventForm:p,selectedEvent:_,selectedDate:$,addEvent:Q,updateEvent:X,deleteEvent:J}=ZP(),Y={month:DP(O5,{},"month"),week:DP(w5,{},"week"),day:DP(i5,{},"day")},q=(M)=>{X(M.id,M)},G=(M)=>{J(M.id)};return G4("div",{className:"flex flex-col w-full h-full",children:[DP(F0,{className:"p-1"}),DP(y0,{children:DP(L4,{mode:"wait",children:DP(U4.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:Y[P]},P)})}),f&&DP(k0,{onClose:p,selectedEvent:_,selectedDate:$,onAdd:Q,onUpdate:q,onDelete:G})]})};import{jsx as k5}from"react/jsx-runtime";var N4=({events:P=[],resources:f=[],firstDayOfWeek:p="sunday",initialView:_="month",renderEvent:$,onEventClick:Q,onCellClick:X,onViewChange:J,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V=!1,dayMaxEvents:N=_0,stickyViewHeader:L,viewHeaderClassName:W,headerComponent:H,headerClassName:m,translations:O,translator:w,renderResource:b})=>{return k5(Ef,{events:P,resources:f,firstDayOfWeek:T0[p],initialView:_,renderEvent:$,renderResource:b,onEventClick:Q,onCellClick:X,onViewChange:J,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V,dayMaxEvents:N,stickyViewHeader:L,viewHeaderClassName:W,headerComponent:H,headerClassName:m,translations:O,translator:w,children:k5(o5,{})})};import{RRule as aX}from"rrule";export{Ap as useIlamyResourceCalendarContext,u5 as useIlamyCalendarContext,p0 as isRecurringEvent,s0 as generateRecurringEvents,a0 as defaultTranslations,aX as RRule,N4 as IlamyResourceCalendar,n2 as IlamyCalendar};
5
+ `)},U5=(P,f="calendar.ics",p="ilamy Calendar")=>{let _=H2(P,p),$=new Blob([_],{type:"text/calendar;charset=utf-8"}),Q=URL.createObjectURL($),X=document.createElement("a");X.href=Q,X.download=f.endsWith(".ics")?f:`${f}.ics`,document.body.append(X),X.click(),document.body.removeChild(X),URL.revokeObjectURL(Q)};import{Calendar as T2,Download as N5,Menu as R2,Plus as I2}from"lucide-react";import{useCallback as B5,useState as g2}from"react";import{AnimatePresence as D0,motion as u0}from"motion/react";import{ChevronDown as x0}from"lucide-react";import{useMemo as A2,useState as E0}from"react";import{jsx as i,jsxs as KP,Fragment as V2}from"react/jsx-runtime";var v0={initial:{opacity:0,y:10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10}},M2=()=>{let{currentDate:P,view:f,setCurrentDate:p,t:_}=r((N)=>({currentDate:N.currentDate,view:N.view,setCurrentDate:N.setCurrentDate,t:N.t})),$=A2(()=>[_("january"),_("february"),_("march"),_("april"),_("may"),_("june"),_("july"),_("august"),_("september"),_("october"),_("november"),_("december")],[_]),[Q,X]=E0(!1),[J,Y]=E0(!1),[q,G]=E0(!1),[M,Z]=E0(!1),F=P.year(),K=Array.from({length:11},(N,L)=>F-5+L),U=(N)=>{let L=P.month(N);p(L),X(!1)},V=(N)=>{let L=P.year(N);p(L),Y(!1)};return KP(V2,{children:[f!=="year"&&KP(VP,{open:Q,onOpenChange:X,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:P.format("MMMM")},`month-${P.month()}`)}),i(x0,{className:"h-4 w-4"})]})}),i(mP,{className:"w-40 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:$.map((N,L)=>i(g,{variant:"ghost",className:z("justify-start font-normal",P.month()===L&&"bg-primary/10"),onClick:()=>U(L),children:N},N))})})]}),KP(VP,{open:J,onOpenChange:Y,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:P.format("YYYY")},`year-${P.year()}`)}),i(x0,{className:"h-4 w-4"})]})}),i(mP,{className:"w-24 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:K.map((N)=>i(g,{variant:"ghost",className:z("justify-start font-normal",P.year()===N&&"bg-primary/10"),onClick:()=>V(N),children:N},N))})})]}),f==="week"&&KP(VP,{open:q,onOpenChange:G,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:`${P.startOf("week").format("MMM D")} - ${P.endOf("week").format("MMM D")}`},`week-range-${P.format("YYYY-MM-DD")}`)}),i(x0,{className:"ml-1 h-3 w-3 opacity-70"})]})}),i(mP,{className:"w-56 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:Array.from({length:7},(N,L)=>{let W=P.subtract(3,"week").add(L,"week"),H=W.startOf("week"),S=W.endOf("week"),O=W.isSame(P,"week");return i(g,{variant:"ghost",className:z("justify-start font-normal",O&&"bg-primary/10"),onClick:()=>{p(H),G(!1)},children:KP("div",{className:"flex w-full items-center justify-between",children:[i("span",{children:`${H.format("MMM D")} - ${S.format("D")}`}),H.month()!==S.month()&&i("span",{className:"text-xs opacity-70",children:`${H.format("MMM")}-${S.format("MMM")}`})]})},H.format("YYYY-MM-DD"))})})})]}),f==="day"&&KP(VP,{open:M,onOpenChange:Z,children:[i(bP,{asChild:!0,children:KP(g,{variant:"ghost",className:"flex items-center gap-1 px-1! font-semibold",children:[i(D0,{mode:"wait",children:i(u0.span,{initial:"initial",animate:"animate",exit:"exit",variants:v0,transition:{duration:0.25,ease:"easeInOut"},children:P.format("dddd, D")},`day-info-${P.format("YYYY-MM-DD")}`)}),i(x0,{className:"ml-1 h-3 w-3 opacity-70"})]})}),i(mP,{className:"w-56 p-0",children:i("div",{className:"flex max-h-60 flex-col overflow-auto",children:(()=>{let N=P.startOf("month"),L=P.daysInMonth();return Array.from({length:L},(W,H)=>{let S=N.date(H+1),O=S.isSame(P,"day"),w=S.isSame(A(),"day");return i(g,{variant:"ghost",className:z("justify-start font-normal",O&&"bg-primary/10"),onClick:()=>{p(S),Z(!1)},children:KP("div",{className:"flex w-full items-center justify-between",children:[i("span",{children:S.format("dddd, MMM D")}),w&&i("span",{className:"bg-primary text-primary-foreground rounded-sm px-1! text-xs",children:_("today")})]})},S.format("YYYY-MM-DD"))})})()})})]})]})},G5=M2;import{ChevronLeft as b2,ChevronRight as m2}from"lucide-react";import{jsx as TP,jsxs as O2}from"react/jsx-runtime";var S2=({currentView:P,onChange:f,variant:p="default",size:_="sm",className:$,onToday:Q,onNext:X,onPrevious:J})=>{let{t:Y}=r((Z)=>({t:Z.t})),q=p==="grid",G=(Z)=>{return z(q?"w-full":"",P===Z&&"bg-primary/80")},M=(Z)=>{return P===Z?"default":"outline"};return O2("div",{className:z(q?"grid grid-cols-2 gap-2":"flex gap-1",$),children:[TP(g,{onClick:J,variant:"outline",size:_,children:TP(b2,{className:"h-4 w-4"})}),TP(g,{onClick:X,variant:"outline",size:_,children:TP(m2,{className:"h-4 w-4"})}),TP(g,{onClick:()=>f("day"),variant:M("day"),size:_,className:G("day"),children:Y("day")}),TP(g,{onClick:()=>f("week"),variant:M("week"),size:_,className:G("week"),children:Y("week")}),TP(g,{onClick:()=>f("month"),variant:M("month"),size:_,className:G("month"),children:Y("month")}),TP(g,{onClick:()=>f("year"),variant:M("year"),size:_,className:G("year"),children:Y("year")}),TP(g,{onClick:Q,variant:"outline",size:_,children:Y("today")})]})},Xf=S2;import{jsx as j,jsxs as FP,Fragment as h2}from"react/jsx-runtime";var w2=({className:P=""})=>{let{view:f,setView:p,nextPeriod:_,prevPeriod:$,today:Q,openEventForm:X,headerComponent:J,headerClassName:Y,rawEvents:q,t:G}=r((N)=>({view:N.view,setView:N.setView,nextPeriod:N.nextPeriod,prevPeriod:N.prevPeriod,today:N.today,openEventForm:N.openEventForm,headerComponent:N.headerComponent,headerClassName:N.headerClassName,rawEvents:N.rawEvents,t:N.t})),[M,Z]=g2(!1),F=(N,L=!1)=>{if(p(N),L)Z(!1)},K=B5(()=>{let N=`ilamy-calendar-${new Date().toISOString().split("T")[0]}.ics`;U5(q,N,"ilamy Calendar"),Z(!1)},[q]),U={today:()=>{Q(),Z(!1)},previous:()=>{$(),Z(!1)},next:()=>{_(),Z(!1)}},V=B5(()=>j("div",{className:"flex items-center gap-2",children:FP(g,{onClick:()=>X(),variant:"default",size:"sm",className:"flex items-center gap-1",children:[j(I2,{className:"h-4 w-4"}),j("span",{className:"hidden @4xl:inline",children:G("new")})]})}),[X,G]);if(J)return J;return j(h2,{children:j("div",{className:"@container/base-header w-full","data-testid":"calendar-header",children:FP("div",{className:z("flex justify-center @2xl/base-header:justify-between flex-wrap items-center gap-2 border-b",P,Y),children:[FP("div",{className:"flex flex-wrap items-center justify-center gap-1 @2xl/base-header:justify-start",children:[j(T2,{className:"h-5 w-5"}),j(G5,{})]}),FP("div",{className:"flex flex-wrap justify-start @xl/base-header:justify-center gap-1 @4xl/base-header:justify-end overflow-x-auto",children:[FP("div",{className:"hidden @md/base-header:flex items-center justify-start gap-1",children:[j(Xf,{currentView:f,onChange:p,onToday:Q,onNext:_,onPrevious:$,variant:"default",className:"justify-end"}),j(V,{}),FP(g,{onClick:K,variant:"outline",size:"sm",className:"flex items-center gap-1",children:[j(N5,{className:"h-4 w-4"}),j("span",{className:"hidden @4xl/base-header:inline",children:G("export")})]})]}),FP("div",{className:"flex items-center justify-end gap-1 @md/base-header:hidden",children:[j(V,{}),FP(VP,{open:M,onOpenChange:Z,children:[j(bP,{asChild:!0,children:j(g,{variant:"outline",size:"sm",children:j(R2,{className:"h-4 w-4"})})}),j(mP,{align:"end",className:"w-[240px] p-2",children:FP("div",{className:"space-y-2",children:[j("h3",{className:"mb-1 text-sm font-medium",children:"View & Navigation"}),j(Xf,{currentView:f,onChange:(N)=>F(N,!0),onToday:U.today,onNext:U.next,onPrevious:U.previous,variant:"grid"}),j("div",{className:"pt-2 border-t",children:FP(g,{onClick:K,variant:"outline",size:"sm",className:"w-full flex items-center gap-2",children:[j(N5,{className:"h-4 w-4"}),G("export")," Calendar (.ics)"]})})]})})]})]})]})]})})})},F0=w2;import{AnimatePresence as i2,motion as k2}from"motion/react";import{jsx as RP,jsxs as Y0}from"react/jsx-runtime";var o2=()=>{let{currentDate:P,selectDate:f,events:p,setView:_,getEventsForDateRange:$,t:Q}=x(),X=P.year(),Y=Array.from({length:12},(Z,F)=>{let K=A().year(X).month(F).startOf("month");return{date:K,name:K.format("MMMM"),daysInMonth:K.daysInMonth(),firstDayOfMonth:K.startOf("month").day()}}).map((Z)=>{let F=p.filter((K)=>K.start.year()===X&&K.start.month()===Z.date.month());return{...Z,eventCount:F.length}}),q=(Z)=>{f(Z),_("month")},G=(Z,F)=>{F.stopPropagation(),f(Z),_("day")},M=(Z)=>{let F=Z.date.startOf("month").startOf("week"),K=Array.from({length:42},(U,V)=>{let N=F.add(V,"day"),L=N.month()===Z.date.month(),W=N.isSame(A(),"day"),H=N.isSame(P,"day"),S=$(N.startOf("day"),N.endOf("day")),O=S.length>0;return{day:N,isCurrentMonth:L,isToday:W,isCurrentDate:H,hasEvents:O,eventCount:S.length,events:S}});return Y0("div",{"data-testid":`year-mini-calendar-${Z.date.format("MM")}`,className:"grid grid-cols-7 gap-[1px] text-[0.6rem]",children:[["S","M","T","W","T","F","S"].map((U,V)=>RP("div",{className:"text-muted-foreground h-3 text-center",children:U},`header-${V}`)),K.map((U,V)=>Y0("div",{"data-testid":`year-day-${Z.date.format("YYYY-MM")}-${U.day.format("YYYY-MM-DD")}`,onClick:(N)=>G(U.day,N),className:z("relative flex aspect-square w-full cursor-pointer flex-col items-center justify-center","hover:bg-accent rounded-sm transition-colors duration-200",!U.isCurrentMonth&&"text-muted-foreground opacity-50",U.isToday&&"bg-primary text-primary-foreground rounded-full",U.isCurrentDate&&!U.isToday&&"bg-muted rounded-full font-bold",U.hasEvents&&!U.isToday&&!U.isCurrentDate&&"font-medium"),title:U.hasEvents?`${U.eventCount} event${U.eventCount>1?"s":""}`:"",children:[RP("span",{className:"text-center leading-none",children:U.day.date()}),U.hasEvents&&Y0("div",{className:z("absolute bottom-0 flex w-full justify-center space-x-[1px]",U.isToday?"bottom-[1px]":""),children:[U.eventCount>0&&RP("span",{className:z("h-[3px] w-[3px] rounded-full",U.isToday?"bg-primary-foreground":"bg-primary")}),U.eventCount>1&&RP("span",{className:z("h-[3px] w-[3px] rounded-full",U.isToday?"bg-primary-foreground":"bg-blue-500")}),U.eventCount>2&&RP("span",{className:z("h-[3px] w-[3px] rounded-full",U.isToday?"bg-primary-foreground":"bg-green-500")})]})]},`day-${V}`))]})};return RP(BP,{"data-testid":"year-view",className:"h-full",children:RP("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:Y.map((Z,F)=>Y0("div",{"data-testid":`year-month-${Z.date.format("MM")}`,onClick:()=>q(Z.date),className:"hover:border-primary flex cursor-pointer flex-col rounded-lg border p-3 transition-all duration-200 hover:scale-[1.01] hover:shadow-md",children:[RP(i2,{mode:"wait",children:Y0(k2.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:F*0.05},className:"mb-2 flex items-center justify-between",children:[RP("h3",{"data-testid":`year-month-title-${Z.date.format("MM")}`,className:"text-lg font-medium",children:Z.name}),Z.eventCount>0&&Y0("span",{"data-testid":`year-month-event-count-${Z.date.format("MM")}`,className:"bg-primary text-primary-foreground rounded-full px-2 py-1 text-xs",children:[Z.eventCount," ",Z.eventCount===1?Q("event"):Q("events")]})]},`month-${F}`)}),M(Z)]},Z.name))})})},F5=o2;import{AnimatePresence as t2,motion as s2}from"motion/react";import{DndContext as C2,DragOverlay as D2,MouseSensor as u2,pointerWithin as x2,TouchSensor as E2,useSensor as W5,useSensors as v2}from"@dnd-kit/core";import c2,{useState as y2}from"react";import{snapCenterToCursor as r2}from"@dnd-kit/modifiers";import{jsx as $f,jsxs as H5,Fragment as j2}from"react/jsx-runtime";function c0({children:P}){let{updateEvent:f,updateRecurringEvent:p,view:_,disableDragAndDrop:$}=r((L)=>({updateEvent:L.updateEvent,updateRecurringEvent:L.updateRecurringEvent,view:L.view,disableDragAndDrop:L.disableDragAndDrop})),[Q,X]=c2.useState(null),[J,Y]=y2({isOpen:!1,event:null,updates:null}),q=W5(u2,{activationConstraint:{distance:2}}),G=W5(E2,{activationConstraint:{delay:100,tolerance:5}}),M=v2(q,G),Z=(L,W)=>{if(!L||!L.id)return;if(!W||Object.keys(W).length===0)return;if(p0(L))Y({isOpen:!0,event:L,updates:W});else f(L.id,W)},F=(L)=>{if(!J.event||!J.updates){Y({isOpen:!1,event:null,updates:null});return}try{p(J.event,J.updates,{scope:L,eventDate:J.event.start})}catch{}finally{Y({isOpen:!1,event:null,updates:null})}},K=()=>{Y({isOpen:!1,event:null,updates:null})},U=(L)=>{let{active:W}=L;if(W.data.current?.type==="calendar-event")X(W.data.current.event)},V=(L)=>{let{active:W,over:H}=L;if(!W||!H||!Q){X(null);return}if(H.data.current?.type==="time-cell"){let{date:S,hour:O=0,minute:w=0,resourceId:b}=H.data.current,k=Q.start,D=Q.end.diff(k,"minute"),E=A(S).hour(O).minute(w||0),T=E.add(D,"minute");if(T.isSame(T.startOf("day")))T=T.subtract(1,"day").endOf("day");let v={start:E,end:T};if(b!==void 0)v.resourceId=b;Z(Q,v)}else if(H.data.current?.type==="day-cell"){let{date:S,resourceId:O}=H.data.current,w=A(S),b=!Q.start.isSame(Q.end,"day"),k=Q.start,R=Q.end;if(b)if(_==="week"){let D=k.hour(),E=k.minute(),T=R.hour(),v=R.minute(),IP=R.diff(k,"day"),zP=w.startOf("day").hour(D).minute(E),WP=zP.add(IP,"day").hour(T).minute(v),HP={start:zP,end:WP};if(O!==void 0)HP.resourceId=O;Z(Q,HP)}else{let D=w.diff(k.startOf("day"),"day"),E=k.add(D,"day"),T=R.add(D,"day"),v={start:E,end:T};if(O!==void 0)v.resourceId=O;Z(Q,v)}else{let D=w.hour(Q.start.hour()).minute(Q.start.minute()),E=Q.end.diff(Q.start,"minute"),T=D.add(E,"minute"),v={start:D,end:T};if(O!==void 0)v.resourceId=O;Z(Q,v)}}X(null)},N=(L)=>{X(null)};if($)return P;return H5(j2,{children:[H5(C2,{sensors:M,onDragStart:U,onDragEnd:V,onDragCancel:N,collisionDetection:x2,children:[P,$f(D2,{modifiers:[r2],children:Q&&$f("div",{className:z("cursor-grab truncate rounded bg-amber-200 p-2 text-[10px] shadow-lg sm:text-xs w-20",Q.backgroundColor||"bg-blue-500",Q.color||"text-white"),children:Q?.title})})]}),$f(N0,{isOpen:J.isOpen,onClose:K,onConfirm:F,operationType:"edit",eventTitle:J.event?.title||""})]})}import{useCallback as Zf,useMemo as l2}from"react";import{jsx as d2}from"react/jsx-runtime";var A5=({children:P,events:f=[],firstDayOfWeek:p=0,initialView:_="month",renderEvent:$,onEventClick:Q,onCellClick:X,onViewChange:J,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V,dayMaxEvents:N,stickyViewHeader:L=!0,viewHeaderClassName:W="",headerComponent:H,headerClassName:S,translations:O,translator:w})=>{let b=R0({events:f,firstDayOfWeek:p,initialView:_,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,onViewChange:J,locale:Z,timezone:F,translations:O,translator:w}),k=Zf((T)=>{b.setSelectedEvent(T),b.setIsEventFormOpen(!0)},[b]),R=Zf((T)=>{if(U)return;if(Q)Q(T);else k(T)},[U,Q,k]),D=Zf((T,v)=>{if(K)return;if(X)X(T,v);else b.openEventForm(T)},[X,K,b]),E=l2(()=>({currentDate:b.currentDate,view:b.view,events:b.events,rawEvents:b.rawEvents,currentLocale:b.currentLocale,isEventFormOpen:b.isEventFormOpen,selectedEvent:b.selectedEvent,selectedDate:b.selectedDate,firstDayOfWeek:b.firstDayOfWeek,setCurrentDate:b.setCurrentDate,selectDate:b.selectDate,setView:b.setView,nextPeriod:b.nextPeriod,prevPeriod:b.prevPeriod,today:b.today,addEvent:b.addEvent,updateEvent:b.updateEvent,updateRecurringEvent:b.updateRecurringEvent,deleteEvent:b.deleteEvent,deleteRecurringEvent:b.deleteRecurringEvent,openEventForm:b.openEventForm,closeEventForm:b.closeEventForm,getEventsForDateRange:b.getEventsForDateRange,findParentRecurringEvent:b.findParentRecurringEvent,renderEvent:$,onEventClick:R,onCellClick:D,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V,dayMaxEvents:N,stickyViewHeader:L,viewHeaderClassName:W,headerComponent:H,headerClassName:S,t:b.t}),[b,$,R,D,Z,F,K,U,V,N,L,W,H,S]);return d2(dP.Provider,{value:E,children:P})};import{jsx as LP,jsxs as e2}from"react/jsx-runtime";var a2=()=>{let{view:P,isEventFormOpen:f,closeEventForm:p,selectedEvent:_,selectedDate:$,addEvent:Q,updateEvent:X,deleteEvent:J,dayMaxEvents:Y}=x(),q={month:LP(tf,{dayMaxEvents:Y},"month"),week:LP(_5,{},"week"),day:LP(Z5,{},"day"),year:LP(F5,{},"year")},G=(Z)=>{X(Z.id,Z)},M=(Z)=>{J(Z.id)};return e2("div",{className:"flex flex-col w-full h-full",children:[LP(F0,{className:"p-1"}),LP(c0,{children:LP(t2,{mode:"wait",children:LP(s2.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)})}),f&&LP(o0,{onClose:p,selectedEvent:_,selectedDate:$,onAdd:Q,onUpdate:G,onDelete:M})]})},n2=({events:P,firstDayOfWeek:f="sunday",initialView:p="month",renderEvent:_,onEventClick:$,onCellClick:Q,onViewChange:X,onEventAdd:J,onEventUpdate:Y,onEventDelete:q,onDateChange:G,locale:M,translations:Z,translator:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L=_0,stickyViewHeader:W=!0,viewHeaderClassName:H="",headerComponent:S,headerClassName:O})=>{return LP(A5,{events:Bf(P),firstDayOfWeek:T0[f],initialView:p,renderEvent:_,onEventClick:$,onCellClick:Q,onViewChange:X,onEventAdd:J,onEventUpdate:Y,onEventDelete:q,onDateChange:G,locale:M,translations:Z,translator:F,timezone:K,disableCellClick:U,disableEventClick:V,disableDragAndDrop:N,dayMaxEvents:L,stickyViewHeader:W,viewHeaderClassName:H,headerComponent:S,headerClassName:O,children:LP(a2,{})})};import{useMemo as _4}from"react";var M5=({days:P,gridType:f="day",resourceId:p})=>{let{getEventsForResource:_,getEventsForDateRange:$,dayMaxEvents:Q}=ZP(),X=P[0].startOf("day"),J=P.at(-1).endOf("day"),Y=_(p),q=$(X,J);return g0({days:P,events:Y.filter((G)=>q.some((M)=>M.id===G.id)),dayMaxEvents:Q,dayNumberHeight:0,gridType:f})};import{jsx as Yf}from"react/jsx-runtime";var V5=({days:P,gridType:f="day",resourceId:p})=>{let _=P[0].startOf("day"),$=M5({days:P,gridType:f,resourceId:p});return Yf("div",{className:"relative w-full h-full pointer-events-none z-10 overflow-clip",children:$.map((Q)=>{let X=`${p}-event-${Q.id}-${Q.position}-${_.toISOString()}`;return Yf("div",{className:"absolute z-10 pointer-events-auto overflow-clip",style:{left:`calc(${Q.left}% + var(--spacing) * 0.25)`,width:`calc(${Q.width}% - var(--spacing) * 1)`,top:`${Q.top}px`,height:`${d}px`},"data-testid":`week-event-layer-event-${Q.id}`,children:Yf(YP,{elementId:X,event:Q,className:"h-full w-full shadow"})},`${X}-wrapper`)})})};import P4,{useMemo as f4}from"react";import{jsx as qf,jsxs as zf,Fragment as p4}from"react/jsx-runtime";var b5=({index:P,day:f,className:p="",resourceId:_,gridType:$="day"})=>{let Q=P4.useRef(null),{dayMaxEvents:X=0,getEventsForDateRange:J,currentDate:Y,firstDayOfWeek:q,t:G,getEventsForResource:M}=r((H)=>({dayMaxEvents:H.dayMaxEvents,getEventsForDateRange:H.getEventsForDateRange,currentDate:H.currentDate,firstDayOfWeek:H.firstDayOfWeek,t:H.t,getEventsForResource:H.getEventsForResource})),Z=f4(()=>{let H=_?M(_):[],S=J(f.startOf($),f.endOf($));if(H.length)return S.filter((O)=>H.some((w)=>String(w.id)===String(O.id)));return S},[f,_,J,M,$]),K=Y.startOf("month").clone();while(K.day()!==q)K=K.subtract(1,"day");let U=(H,S)=>{Q.current?.setSelectedDayEvents({day:H,events:S}),Q.current?.open()},V=f.month()===Y.month(),N=P===6,L=Z.length-X,W=L>0;return zf(p4,{children:[qf(PP,{id:`day-cell-${f.toISOString()}${_?`-resource-${_}`:""}`,type:"day-cell","data-testid":`day-cell-${f.toISOString()}`,date:f,resourceId:_,className:z("cursor-pointer overflow-clip p-1 hover:bg-accent min-h-[60px]",!V&&"bg-secondary text-muted-foreground",N&&"border-r-0",p),children:zf("div",{className:"flex flex-col gap-1",children:[Z.slice(0,X).map((H,S)=>qf("div",{className:"h-[20px] w-full","data-testid":H?.title},`empty-${S}`)),W&&zf("div",{className:"text-muted-foreground hover:text-foreground cursor-pointer text-[10px] whitespace-nowrap sm:text-xs mt-1",onClick:(H)=>{H.stopPropagation(),U(f,Z)},onKeyDown:(H)=>{if(H.key==="Enter"||H.key===" ")H.preventDefault(),H.stopPropagation(),U(f,Z)},tabIndex:0,role:"button",children:["+",L," ",G("more")]})]})}),qf(J0,{ref:Q})]})};import{jsx as oP,jsxs as Kf}from"react/jsx-runtime";var q0=({days:P,gridType:f="day",children:p})=>{let{currentDate:_,getVisibleResources:$,dayMaxEvents:Q,renderResource:X}=ZP(),Y=$().map((q)=>({id:q.id,title:q.title,resource:q,cells:P.map((G)=>({label:G.format("D"),value:G,id:G.toISOString()}))}));return Kf(BP,{className:"h-full","data-testid":"month-scroll-area",viewPortProps:{className:"*:flex! *:flex-col! *:min-h-full"},children:[p,oP("div",{className:"flex flex-1 h-[calc(100%-3rem)] w-fit",children:oP("div",{className:"relative w-full flex flex-col",children:Y.map((q)=>Kf("div",{className:"flex flex-1 relative min-h-[60px] ",children:[oP("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:X?X(q.resource):oP("div",{className:"break-words text-sm",children:q.title})}),Kf("div",{className:"relative flex-1 flex",children:[q.cells.map((G)=>oP(b5,{index:G.value.day(),day:G.value,resourceId:q.id,dayMaxEvents:Q,gridType:f,className:"border-r border-b w-20"},G.id)),oP("div",{className:"absolute inset-0 z-10 pointer-events-none",children:oP(V5,{days:P,resourceId:q.id,gridType:f})})]})]},q.id))},_.format("YYYY-MM"))}),oP(l0,{orientation:"horizontal"})]})};import{AnimatePresence as Q4,motion as J4}from"motion/react";import{jsx as cP,jsxs as m5}from"react/jsx-runtime";var S5=()=>{let{currentDate:P,t:f,stickyViewHeader:p,viewHeaderClassName:_}=ZP(),$=_4(()=>{let Q=P.daysInMonth();return Array.from({length:Q},(X,J)=>P.startOf("month").add(J,"day"))},[P]);return cP("div",{className:"flex flex-col h-full border",children:cP(q0,{days:$,children:m5("div",{className:z("flex h-12 w-fit",p&&"sticky top-0 z-21 bg-background",_),children:[cP("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:cP("div",{className:"text-sm",children:f("resources")})}),$.map((Q,X)=>{let J=`resource-month-header-${Q.toISOString()}`;return cP(Q4,{mode:"wait",children:m5(J4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:X*0.05},className:"w-20 border-b border-r flex-shrink-0 flex items-center justify-center flex-col",children:[cP("div",{className:"text-xs font-medium",children:Q.format("D")}),cP("div",{className:"text-xs text-muted-foreground",children:Q.format("ddd")})]},`${J}-motion`)},`${J}-presence`)})]})})})};import{jsx as X4}from"react/jsx-runtime";var O5=()=>{return X4(S5,{})};import{useMemo as T5}from"react";import{AnimatePresence as R5,motion as I5}from"motion/react";import{jsx as qP,jsxs as Lf}from"react/jsx-runtime";var g5=()=>{let{currentDate:P,firstDayOfWeek:f,t:p,stickyViewHeader:_,viewHeaderClassName:$}=ZP(),Q=T5(()=>AP(P,f),[P,f]),X=T5(()=>{return Q.flatMap((J)=>Array.from({length:24},(Y,q)=>J.hour(q).minute(0)))},[Q]);return qP("div",{className:"flex h-full flex-col border",children:qP(q0,{days:X,gridType:"hour",children:Lf("div",{className:z("flex h-24 w-fit",_&&"sticky top-0 z-21 bg-background",$),children:[qP("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:qP("div",{className:"text-sm",children:p("resources")})}),Lf("div",{className:"flex-1 border-b border-r flex flex-col",children:[qP("div",{className:"flex h-12 border-b",children:Q.map((J,Y)=>{let q=J.isSame(A(),"day"),G=`resource-week-header-${J.toISOString()}-day`;return qP(R5,{mode:"wait",children:qP(I5.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Y*0.05},className:z("flex-shrink-0 border-r flex items-center text-center font-medium w-[calc(24*var(--spacing)*20)]",q&&"bg-blue-50 text-blue-600"),children:Lf("div",{className:"sticky left-1/2",children:[qP("div",{className:"text-sm",children:J.format("ddd")}),qP("div",{className:"text-xs text-muted-foreground",children:J.format("M/D")})]})},`${G}-motion`)},`${G}-presence`)})}),qP("div",{className:"flex h-12 border-b",children:X.map((J,Y)=>{let q=J.isSame(A(),"hour"),G=`resource-week-header-${J.toISOString()}-hour`;return qP(R5,{mode:"wait",children:qP(I5.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:Y*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:J.format("ha")},`${G}-motion`)},`${G}-presence`)})})]})]})})})};import{jsx as $4}from"react/jsx-runtime";var w5=()=>{return $4(g5,{})};import{useMemo as Z4}from"react";import{AnimatePresence as Y4,motion as q4}from"motion/react";import{jsx as CP,jsxs as z4}from"react/jsx-runtime";var h5=()=>{let{currentDate:P,t:f,stickyViewHeader:p,viewHeaderClassName:_}=ZP(),$=Z4(()=>{return Array.from({length:24},(Q,X)=>P.hour(X).minute(0))},[P]);return CP("div",{className:"flex h-full flex-col border",children:CP(q0,{days:$,gridType:"hour",children:z4("div",{className:z("flex h-12 w-fit",p&&"sticky top-0 z-21 bg-background",_),children:[CP("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:CP("div",{className:"text-sm",children:f("resources")})}),CP("div",{className:"flex-1 border-b border-r flex flex-col",children:CP("div",{className:"flex h-12 border-b",children:$.map((Q,X)=>{let J=Q.isSame(A(),"hour"),Y=`resource-day-header-${Q.toISOString()}`;return CP(Y4,{mode:"wait",children:CP(q4.div,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},exit:{opacity:0,y:-10},transition:{duration:0.25,ease:"easeInOut",delay:X*0.05},className:z("w-20 border-r flex items-center justify-center text-xs flex-shrink-0",J&&"bg-blue-50 text-blue-600 font-medium"),children:Q.format("ha")},`${Y}-motion`)},`${Y}-presence`)})})})]})})})};import{jsx as K4}from"react/jsx-runtime";var i5=()=>{return K4(h5,{})};import{AnimatePresence as L4,motion as U4}from"motion/react";import{jsx as DP,jsxs as G4}from"react/jsx-runtime";var k5=()=>{let{view:P,isEventFormOpen:f,closeEventForm:p,selectedEvent:_,selectedDate:$,addEvent:Q,updateEvent:X,deleteEvent:J}=ZP(),Y={month:DP(O5,{},"month"),week:DP(w5,{},"week"),day:DP(i5,{},"day")},q=(M)=>{X(M.id,M)},G=(M)=>{J(M.id)};return G4("div",{className:"flex flex-col w-full h-full",children:[DP(F0,{className:"p-1"}),DP(c0,{children:DP(L4,{mode:"wait",children:DP(U4.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:Y[P]},P)})}),f&&DP(o0,{onClose:p,selectedEvent:_,selectedDate:$,onAdd:Q,onUpdate:q,onDelete:G})]})};import{jsx as o5}from"react/jsx-runtime";var N4=({events:P=[],resources:f=[],firstDayOfWeek:p="sunday",initialView:_="month",renderEvent:$,onEventClick:Q,onCellClick:X,onViewChange:J,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V=!1,dayMaxEvents:N=_0,stickyViewHeader:L,viewHeaderClassName:W,headerComponent:H,headerClassName:S,translations:O,translator:w,renderResource:b})=>{return o5(Ef,{events:P,resources:f,firstDayOfWeek:T0[p],initialView:_,renderEvent:$,renderResource:b,onEventClick:Q,onCellClick:X,onViewChange:J,onEventAdd:Y,onEventUpdate:q,onEventDelete:G,onDateChange:M,locale:Z,timezone:F,disableCellClick:K,disableEventClick:U,disableDragAndDrop:V,dayMaxEvents:N,stickyViewHeader:L,viewHeaderClassName:W,headerComponent:H,headerClassName:S,translations:O,translator:w,children:o5(k5,{})})};import{RRule as aX}from"rrule";export{Ap as useIlamyResourceCalendarContext,u5 as useIlamyCalendarContext,p0 as isRecurringEvent,s0 as generateRecurringEvents,a0 as defaultTranslations,aX as RRule,N4 as IlamyResourceCalendar,n2 as IlamyCalendar};
6
6
 
7
- //# debugId=CFDCBF69EA63850564756E2164756E21
8
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZy50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NhcmQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9wb3BvdmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3NlbGVjdC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGFicy50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdG9vbHRpcC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lLnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3dlZWstZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2RheS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstYWxsLWRheS1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay1kYXktY29sLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay10aW1lLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktYWxsLWRheS1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS10aW1lLWNvbC50c3giLCAic3JjL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zLnRzIiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL2Jhc2UtaGVhZGVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvdGl0bGUtY29udGVudC50c3giLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50cy1sYXllci50c3giLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4IiwgInNyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzLCBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBNb250aEhlYWRlciB9IGZyb20gJy4vbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi93ZWVrLWV2ZW50cy1sYXllcidcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyBEYXlDZWxsIH0gZnJvbSAnLi9kYXktY2VsbCdcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKHsgZGF5TWF4RXZlbnRzID0gMyB9KSA9PiB7XG4gIGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+KG51bGwpXG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBBbHdheXMgZ2VuZXJhdGUgNiB3ZWVrcyAoNDIgZGF5cykgcmVnYXJkbGVzcyBvZiB0aGUgbW9udGggbGVuZ3RoXG4gIC8vIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSA2IHJvd3Mgb2YgZGF5c1xuICBjb25zdCBjYWxlbmRhckRheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyA2IHdlZWtzIMOXIDcgZGF5cyA9IDQyIGRheXNcbiAgICBjb25zdCBkYXlzOiBkYXlqcy5EYXlqc1tdW10gPSBbW11dXG4gICAgbGV0IGRheSA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmNsb25lKCkgLy8gQ2xvbmUgdG8gYXZvaWQgbXV0YXRpb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQyOyBpKyspIHtcbiAgICAgIGlmIChkYXlzW2RheXMubGVuZ3RoIC0gMV0ubGVuZ3RoID09PSA3KSB7XG4gICAgICAgIGRheXMucHVzaChbXSkgLy8gU3RhcnQgYSBuZXcgd2Vla1xuICAgICAgfVxuICAgICAgZGF5c1tkYXlzLmxlbmd0aCAtIDFdLnB1c2goZGF5KVxuICAgICAgZGF5ID0gZGF5LmFkZCgxLCAnZGF5JykgLy8gTW92ZSB0byB0aGUgbmV4dCBkYXlcbiAgICB9XG4gICAgcmV0dXJuIGRheXNcbiAgfSwgW2FkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIiBkYXRhLXRlc3RpZD1cIm1vbnRoLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGRheXMgaGVhZGVyICovfVxuICAgICAgPE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtWzNyZW1dXCIgLz5cblxuICAgICAgey8qIENhbGVuZGFyIGdyaWQgLSBhZGRlZCBmaXhlZCBoZWlnaHQgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS0zcmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLXNjcm9sbC1hcmVhXCJcbiAgICAgICAgdmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2wgKjptaW4taC1mdWxsJyB9fVxuICAgICAgPlxuICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZ3JpZCBoLWZ1bGwgZ3JpZC1jb2xzLTcgZ3JpZC1yb3dzLTYgb3ZlcmZsb3ctYXV0byBmbGV4LTFcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1jYWxlbmRhci1ncmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogRGF5IGNlbGxzICovfVxuICAgICAgICAgICAge2NhbGVuZGFyRGF5cy5tYXAoKGRheXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgd2Vlay0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjb2wtc3Bhbi03IGdyaWQgZ3JpZC1jb2xzLTdcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXJvdy0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPERheUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtkYXlJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRheT17ZGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1yIGJvcmRlci1iIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8V2Vla0V2ZW50c0xheWVyIGRheXM9e2RheXN9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cblxuICAgICAgey8qIERpYWxvZyBmb3Igc2hvd2luZyBhbGwgZXZlbnRzICovfVxuICAgICAgPEFsbEV2ZW50RGlhbG9nIHJlZj17YWxsRXZlbnRzRGlhbG9nUmVmfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICB0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuICBjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICByZWFkb25seSB2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgcmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICByZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSB1cGRhdGVFdmVudDogKFxuICAgIGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHZvaWRcbiAgcmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgPSAoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlSWxhbXlDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInXG4gICAgKVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG4gICAgdmlldzogY29udGV4dC52aWV3LFxuICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICBzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcbiAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICBzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcbiAgICBzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgYWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuICB9IGFzIGNvbnN0XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuICByZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnLi9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNb2NrRXZlbnRzKHsgY291bnQgPSA1IH0gPSB7fSkge1xuICBjb25zdCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGV2ZW50cy5wdXNoKHtcbiAgICAgIGlkOiBpLnRvU3RyaW5nKCksXG4gICAgICB0aXRsZTogYE1vY2sgRXZlbnQgJHtpICsgMX1gLFxuICAgICAgc3RhcnQ6IGRheWpzKCkuc3RhcnRPZignd2VlaycpLmFkZChpLCAnZGF5Jykuc3RhcnRPZignZGF5JyksXG4gICAgICBlbmQ6IGRheWpzKCkuc3RhcnRPZignd2VlaycpLmFkZChpLCAnZGF5JykuZW5kT2YoJ2RheScpLFxuICAgICAgY29sb3I6ICdiZy1ncmF5LTEwMCB0ZXh0LWdyYXktODAwJyxcbiAgICB9KVxuICB9XG4gIHJldHVybiBldmVudHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEYXRlKGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyk6IGRheWpzLkRheWpzIHtcbiAgaWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgY29uc3QgcGFyc2VkRGF0ZSA9IGRheWpzKGRhdGUpXG4gIHJldHVybiBwYXJzZWREYXRlLmlzVmFsaWQoKSA/IHBhcnNlZERhdGUgOiBkYXlqcygpXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIG9iajogVCxcbiAga2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgZGVsZXRlIHJlc3VsdFtrZXldXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHVibGljRmFjaW5nQ2FsZW5kYXJFdmVudChcbiAgZXZlbnRzOiBJbGFteUNhbGVuZGFyUHJvcEV2ZW50W11cbik6IENhbGVuZGFyRXZlbnRbXSB7XG4gIGlmICghZXZlbnRzIHx8ICFldmVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAvLyBFdmVudHMgYXJlIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybWF0IHdpdGggUlJVTEUgc3RyaW5nc1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuICAgICAgZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICB9KVxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXIuanMnXG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlLmpzJ1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuLy8gSW1wb3J0IGFsbCBkYXlqcyBsb2NhbGVzIGFscGhhYmV0aWNhbGx5XG4vLyBsb2NhbGUuanNvbiBmaWxlOiBbe1wia2V5XCI6XCJhZlwiLFwibmFtZVwiOlwiQWZyaWthYW5zXCJ9LHtcImtleVwiOlwiYW1cIixcIm5hbWVcIjpcIkFtaGFyaWNcIn0se1wia2V5XCI6XCJhci1kelwiLFwibmFtZVwiOlwiQXJhYmljIChBbGdlcmlhKVwifSx7XCJrZXlcIjpcImFyLWlxXCIsXCJuYW1lXCI6XCIgQXJhYmljIChJcmFxKVwifSx7XCJrZXlcIjpcImFyLWt3XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEt1d2FpdClcIn0se1wia2V5XCI6XCJhci1seVwiLFwibmFtZVwiOlwiQXJhYmljIChMeWJpYSlcIn0se1wia2V5XCI6XCJhci1tYVwiLFwibmFtZVwiOlwiQXJhYmljIChNb3JvY2NvKVwifSx7XCJrZXlcIjpcImFyLXNhXCIsXCJuYW1lXCI6XCJBcmFiaWMgKFNhdWRpIEFyYWJpYSlcIn0se1wia2V5XCI6XCJhci10blwiLFwibmFtZVwiOlwiIEFyYWJpYyAoVHVuaXNpYSlcIn0se1wia2V5XCI6XCJhclwiLFwibmFtZVwiOlwiQXJhYmljXCJ9LHtcImtleVwiOlwiYXpcIixcIm5hbWVcIjpcIkF6ZXJiYWlqYW5pXCJ9LHtcImtleVwiOlwiYmVcIixcIm5hbWVcIjpcIkJlbGFydXNpYW5cIn0se1wia2V5XCI6XCJiZ1wiLFwibmFtZVwiOlwiQnVsZ2FyaWFuXCJ9LHtcImtleVwiOlwiYmlcIixcIm5hbWVcIjpcIkJpc2xhbWFcIn0se1wia2V5XCI6XCJibVwiLFwibmFtZVwiOlwiQmFtYmFyYVwifSx7XCJrZXlcIjpcImJuLWJkXCIsXCJuYW1lXCI6XCJCZW5nYWxpIChCYW5nbGFkZXNoKVwifSx7XCJrZXlcIjpcImJuXCIsXCJuYW1lXCI6XCJCZW5nYWxpXCJ9LHtcImtleVwiOlwiYm9cIixcIm5hbWVcIjpcIlRpYmV0YW5cIn0se1wia2V5XCI6XCJiclwiLFwibmFtZVwiOlwiQnJldG9uXCJ9LHtcImtleVwiOlwiYnNcIixcIm5hbWVcIjpcIkJvc25pYW5cIn0se1wia2V5XCI6XCJjYVwiLFwibmFtZVwiOlwiQ2F0YWxhblwifSx7XCJrZXlcIjpcImNzXCIsXCJuYW1lXCI6XCJDemVjaFwifSx7XCJrZXlcIjpcImN2XCIsXCJuYW1lXCI6XCJDaHV2YXNoXCJ9LHtcImtleVwiOlwiY3lcIixcIm5hbWVcIjpcIldlbHNoXCJ9LHtcImtleVwiOlwiZGUtYXRcIixcIm5hbWVcIjpcIkdlcm1hbiAoQXVzdHJpYSlcIn0se1wia2V5XCI6XCJkYVwiLFwibmFtZVwiOlwiRGFuaXNoXCJ9LHtcImtleVwiOlwiZGUtY2hcIixcIm5hbWVcIjpcIkdlcm1hbiAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZGVcIixcIm5hbWVcIjpcIkdlcm1hblwifSx7XCJrZXlcIjpcImR2XCIsXCJuYW1lXCI6XCJNYWxkaXZpYW5cIn0se1wia2V5XCI6XCJlbFwiLFwibmFtZVwiOlwiR3JlZWtcIn0se1wia2V5XCI6XCJlbi1hdVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQXVzdHJhbGlhKVwifSx7XCJrZXlcIjpcImVuLWNhXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZW4tZ2JcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKVwifSx7XCJrZXlcIjpcImVuLWllXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJcmVsYW5kKVwifSx7XCJrZXlcIjpcImVuLWlsXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJc3JhZWwpXCJ9LHtcImtleVwiOlwiZW4taW5cIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEluZGlhKVwifSx7XCJrZXlcIjpcImVuLW56XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChOZXcgWmVhbGFuZClcIn0se1wia2V5XCI6XCJlbi1zZ1wiLFwibmFtZVwiOlwiRW5nbGlzaCAoU2luZ2Fwb3JlKVwifSx7XCJrZXlcIjpcImVuLXR0XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChUcmluaWRhZCAmIFRvYmFnbylcIn0se1wia2V5XCI6XCJlb1wiLFwibmFtZVwiOlwiRXNwZXJhbnRvXCJ9LHtcImtleVwiOlwiZW5cIixcIm5hbWVcIjpcIkVuZ2xpc2hcIn0se1wia2V5XCI6XCJlcy1kb1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoRG9taW5pY2FuIFJlcHVibGljKVwifSx7XCJrZXlcIjpcImVzLW14XCIsXCJuYW1lXCI6XCJTcGFuaXNoIChNZXhpY28pXCJ9LHtcImtleVwiOlwiZXMtcHJcIixcIm5hbWVcIjpcIlNwYW5pc2ggKFB1ZXJ0byBSaWNvKVwifSx7XCJrZXlcIjpcImVzLXVzXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChVbml0ZWQgU3RhdGVzKVwifSx7XCJrZXlcIjpcImV0XCIsXCJuYW1lXCI6XCJFc3RvbmlhblwifSx7XCJrZXlcIjpcImVzXCIsXCJuYW1lXCI6XCJTcGFuaXNoXCJ9LHtcImtleVwiOlwiZXVcIixcIm5hbWVcIjpcIkJhc3F1ZVwifSx7XCJrZXlcIjpcImZhXCIsXCJuYW1lXCI6XCJQZXJzaWFuXCJ9LHtcImtleVwiOlwiZm9cIixcIm5hbWVcIjpcIkZhcm9lc2VcIn0se1wia2V5XCI6XCJmaVwiLFwibmFtZVwiOlwiRmlubmlzaFwifSx7XCJrZXlcIjpcImZyLWNhXCIsXCJuYW1lXCI6XCJGcmVuY2ggKENhbmFkYSlcIn0se1wia2V5XCI6XCJmci1jaFwiLFwibmFtZVwiOlwiRnJlbmNoIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJmclwiLFwibmFtZVwiOlwiRnJlbmNoXCJ9LHtcImtleVwiOlwiZnlcIixcIm5hbWVcIjpcIkZyaXNpYW5cIn0se1wia2V5XCI6XCJnYVwiLFwibmFtZVwiOlwiSXJpc2ggb3IgSXJpc2ggR2FlbGljXCJ9LHtcImtleVwiOlwiZ2RcIixcIm5hbWVcIjpcIlNjb3R0aXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdvbS1sYXRuXCIsXCJuYW1lXCI6XCJLb25rYW5pIExhdGluIHNjcmlwdFwifSx7XCJrZXlcIjpcImdsXCIsXCJuYW1lXCI6XCJHYWxpY2lhblwifSx7XCJrZXlcIjpcImd1XCIsXCJuYW1lXCI6XCJHdWphcmF0aVwifSx7XCJrZXlcIjpcImhlXCIsXCJuYW1lXCI6XCJIZWJyZXdcIn0se1wia2V5XCI6XCJoaVwiLFwibmFtZVwiOlwiSGluZGlcIn0se1wia2V5XCI6XCJoclwiLFwibmFtZVwiOlwiQ3JvYXRpYW5cIn0se1wia2V5XCI6XCJodVwiLFwibmFtZVwiOlwiSHVuZ2FyaWFuXCJ9LHtcImtleVwiOlwiaHRcIixcIm5hbWVcIjpcIkhhaXRpYW4gQ3Jlb2xlIChIYWl0aSlcIn0se1wia2V5XCI6XCJoeS1hbVwiLFwibmFtZVwiOlwiQXJtZW5pYW5cIn0se1wia2V5XCI6XCJpZFwiLFwibmFtZVwiOlwiSW5kb25lc2lhblwifSx7XCJrZXlcIjpcImlzXCIsXCJuYW1lXCI6XCJJY2VsYW5kaWNcIn0se1wia2V5XCI6XCJpdC1jaFwiLFwibmFtZVwiOlwiSXRhbGlhbiAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiaXRcIixcIm5hbWVcIjpcIkl0YWxpYW5cIn0se1wia2V5XCI6XCJqYVwiLFwibmFtZVwiOlwiSmFwYW5lc2VcIn0se1wia2V5XCI6XCJqdlwiLFwibmFtZVwiOlwiSmF2YW5lc2VcIn0se1wia2V5XCI6XCJrYVwiLFwibmFtZVwiOlwiR2VvcmdpYW5cIn0se1wia2V5XCI6XCJra1wiLFwibmFtZVwiOlwiS2F6YWtoXCJ9LHtcImtleVwiOlwia21cIixcIm5hbWVcIjpcIkNhbWJvZGlhblwifSx7XCJrZXlcIjpcImtuXCIsXCJuYW1lXCI6XCJLYW5uYWRhXCJ9LHtcImtleVwiOlwia29cIixcIm5hbWVcIjpcIktvcmVhblwifSx7XCJrZXlcIjpcImt1XCIsXCJuYW1lXCI6XCJLdXJkaXNoXCJ9LHtcImtleVwiOlwia3lcIixcIm5hbWVcIjpcIkt5cmd5elwifSx7XCJrZXlcIjpcImxiXCIsXCJuYW1lXCI6XCJMdXhlbWJvdXJnaXNoXCJ9LHtcImtleVwiOlwibG9cIixcIm5hbWVcIjpcIkxhb1wifSx7XCJrZXlcIjpcImx0XCIsXCJuYW1lXCI6XCJMaXRodWFuaWFuXCJ9LHtcImtleVwiOlwibHZcIixcIm5hbWVcIjpcIkxhdHZpYW5cIn0se1wia2V5XCI6XCJtZVwiLFwibmFtZVwiOlwiTW9udGVuZWdyaW5cIn0se1wia2V5XCI6XCJtaVwiLFwibmFtZVwiOlwiTWFvcmlcIn0se1wia2V5XCI6XCJta1wiLFwibmFtZVwiOlwiTWFjZWRvbmlhblwifSx7XCJrZXlcIjpcIm1sXCIsXCJuYW1lXCI6XCJNYWxheWFsYW1cIn0se1wia2V5XCI6XCJtblwiLFwibmFtZVwiOlwiTW9uZ29saWFuXCJ9LHtcImtleVwiOlwibXJcIixcIm5hbWVcIjpcIk1hcmF0aGlcIn0se1wia2V5XCI6XCJtcy1teVwiLFwibmFtZVwiOlwiTWFsYXlcIn0se1wia2V5XCI6XCJtc1wiLFwibmFtZVwiOlwiTWFsYXlcIn0se1wia2V5XCI6XCJtdFwiLFwibmFtZVwiOlwiTWFsdGVzZSAoTWFsdGEpXCJ9LHtcImtleVwiOlwibXlcIixcIm5hbWVcIjpcIkJ1cm1lc2VcIn0se1wia2V5XCI6XCJuYlwiLFwibmFtZVwiOlwiTm9yd2VnaWFuIEJva23DpWxcIn0se1wia2V5XCI6XCJuZVwiLFwibmFtZVwiOlwiTmVwYWxlc2VcIn0se1wia2V5XCI6XCJubC1iZVwiLFwibmFtZVwiOlwiRHV0Y2ggKEJlbGdpdW0pXCJ9LHtcImtleVwiOlwibmxcIixcIm5hbWVcIjpcIkR1dGNoXCJ9LHtcImtleVwiOlwicGxcIixcIm5hbWVcIjpcIlBvbGlzaFwifSx7XCJrZXlcIjpcInB0LWJyXCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlIChCcmF6aWwpXCJ9LHtcImtleVwiOlwicHRcIixcIm5hbWVcIjpcIlBvcnR1Z3Vlc2VcIn0se1wia2V5XCI6XCJyblwiLFwibmFtZVwiOlwiS2lydW5kaVwifSx7XCJrZXlcIjpcInJvXCIsXCJuYW1lXCI6XCJSb21hbmlhblwifSx7XCJrZXlcIjpcInJ1XCIsXCJuYW1lXCI6XCJSdXNzaWFuXCJ9LHtcImtleVwiOlwicndcIixcIm5hbWVcIjpcIktpbnlhcndhbmRhIChSd2FuZGEpXCJ9LHtcImtleVwiOlwic2RcIixcIm5hbWVcIjpcIlNpbmRoaVwifSx7XCJrZXlcIjpcInNlXCIsXCJuYW1lXCI6XCJOb3J0aGVybiBTYW1pXCJ9LHtcImtleVwiOlwic2lcIixcIm5hbWVcIjpcIlNpbmhhbGVzZVwifSx7XCJrZXlcIjpcInNrXCIsXCJuYW1lXCI6XCJTbG92YWtcIn0se1wia2V5XCI6XCJzbFwiLFwibmFtZVwiOlwiU2xvdmVuaWFuXCJ9LHtcImtleVwiOlwic3FcIixcIm5hbWVcIjpcIkFsYmFuaWFuXCJ9LHtcImtleVwiOlwic3ItY3lybFwiLFwibmFtZVwiOlwiU2VyYmlhbiBDeXJpbGxpY1wifSx7XCJrZXlcIjpcInNzXCIsXCJuYW1lXCI6XCJzaVN3YXRpXCJ9LHtcImtleVwiOlwic3YtZmlcIixcIm5hbWVcIjpcIkZpbmxhbmQgU3dlZGlzaFwifSx7XCJrZXlcIjpcInNyXCIsXCJuYW1lXCI6XCJTZXJiaWFuXCJ9LHtcImtleVwiOlwic3ZcIixcIm5hbWVcIjpcIlN3ZWRpc2hcIn0se1wia2V5XCI6XCJzd1wiLFwibmFtZVwiOlwiU3dhaGlsaVwifSx7XCJrZXlcIjpcInRhXCIsXCJuYW1lXCI6XCJUYW1pbFwifSx7XCJrZXlcIjpcInRlXCIsXCJuYW1lXCI6XCJUZWx1Z3VcIn0se1wia2V5XCI6XCJ0ZXRcIixcIm5hbWVcIjpcIlRldHVuIERpbGkgKEVhc3QgVGltb3IpXCJ9LHtcImtleVwiOlwidGdcIixcIm5hbWVcIjpcIlRhamlrXCJ9LHtcImtleVwiOlwidGhcIixcIm5hbWVcIjpcIlRoYWlcIn0se1wia2V5XCI6XCJ0a1wiLFwibmFtZVwiOlwiVHVya21lblwifSx7XCJrZXlcIjpcInRsLXBoXCIsXCJuYW1lXCI6XCJUYWdhbG9nIChQaGlsaXBwaW5lcylcIn0se1wia2V5XCI6XCJ0bGhcIixcIm5hbWVcIjpcIktsaW5nb25cIn0se1wia2V5XCI6XCJ0clwiLFwibmFtZVwiOlwiVHVya2lzaFwifSx7XCJrZXlcIjpcInR6bFwiLFwibmFtZVwiOlwiVGFsb3NzYW5cIn0se1wia2V5XCI6XCJ0em0tbGF0blwiLFwibmFtZVwiOlwiQ2VudHJhbCBBdGxhcyBUYW1hemlnaHQgTGF0aW5cIn0se1wia2V5XCI6XCJ0em1cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0XCJ9LHtcImtleVwiOlwidWctY25cIixcIm5hbWVcIjpcIlV5Z2h1ciAoQ2hpbmEpXCJ9LHtcImtleVwiOlwidWtcIixcIm5hbWVcIjpcIlVrcmFpbmlhblwifSx7XCJrZXlcIjpcInVyXCIsXCJuYW1lXCI6XCJVcmR1XCJ9LHtcImtleVwiOlwidXotbGF0blwiLFwibmFtZVwiOlwiVXpiZWsgTGF0aW5cIn0se1wia2V5XCI6XCJ1elwiLFwibmFtZVwiOlwiVXpiZWtcIn0se1wia2V5XCI6XCJ2aVwiLFwibmFtZVwiOlwiVmlldG5hbWVzZVwifSx7XCJrZXlcIjpcIngtcHNldWRvXCIsXCJuYW1lXCI6XCJQc2V1ZG9cIn0se1wia2V5XCI6XCJ5b1wiLFwibmFtZVwiOlwiWW9ydWJhIE5pZ2VyaWFcIn0se1wia2V5XCI6XCJ6aC1jblwiLFwibmFtZVwiOlwiQ2hpbmVzZSAoQ2hpbmEpXCJ9LHtcImtleVwiOlwiemgtaGtcIixcIm5hbWVcIjpcIkNoaW5lc2UgKEhvbmcgS29uZylcIn0se1wia2V5XCI6XCJ6aC10d1wiLFwibmFtZVwiOlwiQ2hpbmVzZSAoVGFpd2FuKVwifSx7XCJrZXlcIjpcInpoXCIsXCJuYW1lXCI6XCJDaGluZXNlXCJ9LHtcImtleVwiOlwib2MtbG5jXCIsXCJuYW1lXCI6XCJPY2NpdGFuLCBsZW5nYWRvY2lhbiBkaWFsZWN0ZVwifSx7XCJrZXlcIjpcIm5uXCIsXCJuYW1lXCI6XCJOeW5vcnNrXCJ9LHtcImtleVwiOlwicGEtaW5cIixcIm5hbWVcIjpcIlB1bmphYmkgKEluZGlhKVwifV1cbmltcG9ydCAnZGF5anMvbG9jYWxlL2FmLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1kei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWlxLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXIta3cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1seS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLW1hLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItc2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci10bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLWJkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYnMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3YuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jeS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtYXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZHYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWF1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1nYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWllLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLW56LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tc2cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi10dC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1kby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLW14LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtcHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy11cy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ldS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnItY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2Z5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ29tLWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ndS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaGkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oeS1hbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2l0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvamEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9qdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2thLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva2suanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva28uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2t5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbGIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbHYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21pLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy1teS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21zLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9teS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25iLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC1iZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25sLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9vYy1sbmMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wYS1pbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3BsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQtYnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3J3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2suanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NxLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3ItY3lybC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3MuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi1maS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90YS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGV0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90aC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGwtcGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90bGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHptLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWctY24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXotbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS94LXBzZXVkby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3lvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtY24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC1oay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLXR3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemguanMnXG5cbmV4cG9ydCBkZWZhdWx0IGRheWpzXG4iLAogICAgImltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anMsXG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW10ge1xuICBjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG4gICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgIC5kYXkoZmlyc3REYXlPZldlZWspXG5cbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuICAgID8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG4gICAgYWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuICApXG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6XG4gICAgICAgICAgJ2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgc2hhZG93LXhzIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcbiAgICAgICAgb3V0bGluZTpcbiAgICAgICAgICAnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG4gICAgICAgIHNlY29uZGFyeTpcbiAgICAgICAgICAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG4gICAgICAgIGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuICAgICAgICBzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG4gICAgICAgIGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00JyxcbiAgICAgICAgaWNvbjogJ3NpemUtOScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiAnZGVmYXVsdCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgfSxcbiAgfVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIHZhcmlhbnQsXG4gIHNpemUsXG4gIGFzQ2hpbGQgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG4gIFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuICAgIGFzQ2hpbGQ/OiBib29sZWFuXG4gIH0pIHtcbiAgY29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuICByZXR1cm4gKFxuICAgIDxDb21wXG4gICAgICBkYXRhLXNsb3Q9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBDaGV2cm9uRG93bkljb24sXG4gIENoZXZyb25MZWZ0SWNvbixcbiAgQ2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuICBjbGFzc05hbWUsXG4gIGNsYXNzTmFtZXMsXG4gIHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG4gIGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuICBidXR0b25WYXJpYW50ID0gJ2dob3N0JyxcbiAgZm9ybWF0dGVycyxcbiAgY29tcG9uZW50cyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuICBidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuICBjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuICByZXR1cm4gKFxuICAgIDxEYXlQaWNrZXJcbiAgICAgIHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG4gICAgICAgIFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgY2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cbiAgICAgIGZvcm1hdHRlcnM9e3tcbiAgICAgICAgZm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG4gICAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG4gICAgICAgIC4uLmZvcm1hdHRlcnMsXG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lcz17e1xuICAgICAgICByb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcbiAgICAgICAgbW9udGhzOiBjbihcbiAgICAgICAgICAnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG4gICAgICAgIG5hdjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX3ByZXZpb3VzOiBjbihcbiAgICAgICAgICBidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG4gICAgICAgICAgJ3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX25leHQ6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG4gICAgICAgICksXG4gICAgICAgIG1vbnRoX2NhcHRpb246IGNuKFxuICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cbiAgICAgICAgKSxcbiAgICAgICAgZHJvcGRvd25zOiBjbihcbiAgICAgICAgICAndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bl9yb290OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bjogY24oXG4gICAgICAgICAgJ2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG4gICAgICAgICksXG4gICAgICAgIGNhcHRpb25fbGFiZWw6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG4gICAgICAgICAgY2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuICAgICAgICAgICAgPyAndGV4dC1zbSdcbiAgICAgICAgICAgIDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcbiAgICAgICAgKSxcbiAgICAgICAgdGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcbiAgICAgICAgd2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuICAgICAgICB3ZWVrZGF5OiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcbiAgICAgICAgKSxcbiAgICAgICAgd2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcbiAgICAgICAgd2Vla19udW1iZXJfaGVhZGVyOiBjbihcbiAgICAgICAgICAnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla19udW1iZXI6IGNuKFxuICAgICAgICAgICd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcbiAgICAgICAgKSxcbiAgICAgICAgZGF5OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRheVxuICAgICAgICApLFxuICAgICAgICByYW5nZV9zdGFydDogY24oXG4gICAgICAgICAgJ3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG4gICAgICAgIHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuICAgICAgICB0b2RheTogY24oXG4gICAgICAgICAgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuICAgICAgICApLFxuICAgICAgICBvdXRzaWRlOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG4gICAgICAgICksXG4gICAgICAgIGRpc2FibGVkOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG4gICAgICAgICksXG4gICAgICAgIGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG4gICAgICAgIC4uLmNsYXNzTmFtZXMsXG4gICAgICB9fVxuICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICBSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG4gICAgICAgICAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihjbGFzc05hbWUpfVxuICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgQ2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgRGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcbiAgICAgICAgV2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgfX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhbGVuZGFyRGF5QnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBkYXksXG4gIG1vZGlmaWVycyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlCdXR0b24+KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kaWZpZXJzLmZvY3VzZWQpIHtcbiAgICAgIHJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbbW9kaWZpZXJzLmZvY3VzZWRdKVxuXG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgcmVmPXtyZWZ9XG4gICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgZGF0YS1kYXk9e2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuICAgICAgZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuICAgICAgICBtb2RpZmllcnMuc2VsZWN0ZWQgJiZcbiAgICAgICAgIW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuICAgICAgfVxuICAgICAgZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuICAgICAgZGF0YS1yYW5nZS1lbmQ9e21vZGlmaWVycy5yYW5nZV9lbmR9XG4gICAgICBkYXRhLXJhbmdlLW1pZGRsZT17bW9kaWZpZXJzLnJhbmdlX21pZGRsZX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcbiAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBDYWxlbmRhciwgQ2FsZW5kYXJEYXlCdXR0b24gfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3JcbiAgICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG4gICAgICA+XG4gICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgPC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG4gICAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3RleHQtY2FyZC1mb3JlZ3JvdW5kIGZsZXggZmxleC1jb2wgZ2FwLTYgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1oZWFkZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgQ2FyZCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZEZvb3RlcixcbiAgQ2FyZFRpdGxlLFxuICBDYXJkQWN0aW9uLFxuICBDYXJkRGVzY3JpcHRpb24sXG4gIENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuICBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG4gIHNldERhdGU6IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gIGxhYmVsPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG4gIGRhdGUsXG4gIGNsb3NlT25TZWxlY3QsXG4gIHNldERhdGUsXG4gIGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcbiAgY2xhc3NOYW1lLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG4gIGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXREYXRlKGRhdGUpXG4gICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8UG9wb3Zlcj5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICFkYXRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQnXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cbiAgICAgICAgICAgIHtkYXRlID8gZGF5anMoZGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpIDogPHNwYW4+e2xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCIgYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgIDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuICAgICAgICAgIDxDYWxlbmRhclxuICAgICAgICAgICAgbW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICBzZWxlY3RlZD17ZGF0ZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgIG1vbnRoPXtkYXRlfVxuICAgICAgICAgICAgaW5pdGlhbEZvY3VzXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgYWxpZ24gPSAnY2VudGVyJyxcbiAgc2lkZU9mZnNldCA9IDQsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuICByZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuICAgICAgPERpYWxvZ092ZXJsYXkgLz5cbiAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXSBvdmVyZmxvdy15LXNjcm9sbCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cbiAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9EaWFsb2dQb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGF0YS1zbG90PVwiaW5wdXRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG4gICAgICAgICdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8TGFiZWxQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwibGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcbiAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG4gIHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH06IFNjcm9sbEFyZWFQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICB7Li4ucHJvcHMudmlld1BvcnRQcm9wc31cbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG4gICAgICAgICAgcHJvcHMudmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgIDxTY3JvbGxCYXIgLz5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG4gIGNsYXNzTmFtZSxcbiAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50JyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuICAgICAgICAgICdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuICAgICAgICBjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG4gICAgICAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICBzaXplID0gJ2RlZmF1bHQnLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG4gICAgICBkYXRhLXNpemU9e3NpemV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cbiAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG4gICAgICA8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIHBvc2l0aW9uID0gJ3BvcHBlcicsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG4gICAgICAgICAgcG9zaXRpb24gPT09ICdwb3BwZXInICYmXG4gICAgICAgICAgICAnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHBvc2l0aW9uPXtwb3NpdGlvbn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICA8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAncC0xJyxcbiAgICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgICAnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgICAgICA8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuICAgICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3JcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuICAgICAgY2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdExhYmVsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUYWJzUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10YWJzJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUYWJzKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTInLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic0xpc3Qoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5MaXN0Pikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLkxpc3RcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtbGlzdFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctbXV0ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtOSB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBwLVszcHhdJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic1RyaWdnZXIoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLlRyaWdnZXJcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtdHJpZ2dlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImRhdGEtW3N0YXRlPWFjdGl2ZV06YmctYmFja2dyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06YmctaW5wdXQvMzAgdGV4dC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9YWN0aXZlXTpzaGFkb3ctc20gWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Db250ZW50XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWNvbnRlbnRcIlxuICAgICAgY2xhc3NOYW1lPXtjbignZmxleC0xIG91dGxpbmUtbm9uZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUb29sdGlwUHJvdmlkZXIoe1xuICBkZWxheUR1cmF0aW9uID0gMCxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyPikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyXG4gICAgICBkYXRhLXNsb3Q9XCJ0b29sdGlwLXByb3ZpZGVyXCJcbiAgICAgIGRlbGF5RHVyYXRpb249e2RlbGF5RHVyYXRpb259XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwidG9vbHRpcFwiIHsuLi5wcm9wc30gLz5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gPFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJ0b29sdGlwLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBzaWRlT2Zmc2V0ID0gMCxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1jb250ZW50XCJcbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBhbmltYXRlLWluIGZhZGUtaW4tMCB6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LWZpdCBvcmlnaW4tKC0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyB0ZXh0LWJhbGFuY2UnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPFRvb2x0aXBQcmltaXRpdmUuQXJyb3cgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBmaWxsLXByaW1hcnkgei01MCBzaXplLTIuNSB0cmFuc2xhdGUteS1bY2FsYygtNTAlXy1fMnB4KV0gcm90YXRlLTQ1IHJvdW5kZWQtWzJweF1cIiAvPlxuICAgICAgPC9Ub29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9Ub29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5leHBvcnQgeyBUb29sdGlwLCBUb29sdGlwVHJpZ2dlciwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBQcm92aWRlciB9XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyB1c2VEcmFnZ2FibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuY29uc3QgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MgPSAoXG4gIGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4sXG4gIGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuXG4pID0+IHtcbiAgaWYgKGlzVHJ1bmNhdGVkU3RhcnQgJiYgaXNUcnVuY2F0ZWRFbmQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtbm9uZSdcbiAgfVxuICBpZiAoaXNUcnVuY2F0ZWRTdGFydCkge1xuICAgIHJldHVybiAncm91bmRlZC1yLW1kIHJvdW5kZWQtbC1ub25lJ1xuICB9XG4gIGlmIChpc1RydW5jYXRlZEVuZCkge1xuICAgIHJldHVybiAncm91bmRlZC1sLW1kIHJvdW5kZWQtci1ub25lJ1xuICB9XG4gIHJldHVybiAncm91bmRlZC1tZCdcbn1cblxuZnVuY3Rpb24gRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkKHtcbiAgZWxlbWVudElkLFxuICBldmVudCxcbiAgY2xhc3NOYW1lLFxuICBzdHlsZSxcbiAgZGlzYWJsZURyYWcgPSBmYWxzZSxcbn06IHtcbiAgZWxlbWVudElkOiBzdHJpbmdcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHN0eWxlPzogQ1NTUHJvcGVydGllc1xuICBldmVudDogQ2FsZW5kYXJFdmVudFxuICBkaXNhYmxlRHJhZz86IGJvb2xlYW5cbn0pIHtcbiAgY29uc3QgeyBvbkV2ZW50Q2xpY2ssIHJlbmRlckV2ZW50LCBkaXNhYmxlRXZlbnRDbGljaywgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuICAgIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcbiAgICAgIG9uRXZlbnRDbGljazogc3RhdGUub25FdmVudENsaWNrLFxuICAgICAgcmVuZGVyRXZlbnQ6IHN0YXRlLnJlbmRlckV2ZW50LFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2s6IHN0YXRlLmRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wOiBzdGF0ZS5kaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgfSkpXG5cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG4gICAgaWQ6IGVsZW1lbnRJZCxcbiAgICBkYXRhOiB7XG4gICAgICBldmVudCxcbiAgICAgIHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG4gICAgfSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuICB9KVxuXG4gIC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuICBjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cbiAgICBjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG4gICAgICBpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuICAgICAgaXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG4gICAgfVxuICAgIGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG4gICAgICAgICAgZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuICAgICAgICAgICdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuICAgICAgICAgIGdldEJvcmRlclJhZGl1c0NsYXNzKGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG4gICAgICA+XG4gICAgICAgIHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgIHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgey8qIEV2ZW50IHRpdGxlICovfVxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG4gICAgICAgICAgICAvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcbiAgICAgICAgICAgIGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuICAgICAgICAgICAgaXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtldmVudC50aXRsZX1cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuICAgICAgICB7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgIGtleT17ZWxlbWVudElkfVxuICAgICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgICB7Li4ubGlzdGVuZXJzfVxuICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtNTAgfX1cbiAgICAgICAgbGF5b3V0XG4gICAgICAgIGxheW91dElkPXtlbGVtZW50SWR9XG4gICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuNCwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG4gICAgICAgICAgZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG4gICAgICAgICAgICA/IGRpc2FibGVFdmVudENsaWNrXG4gICAgICAgICAgICAgID8gJ2N1cnNvci1kZWZhdWx0J1xuICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgIDogJ2N1cnNvci1ncmFiJyxcbiAgICAgICAgICBpc0RyYWdnaW5nICYmXG4gICAgICAgICAgICAhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcbiAgICAgICAgICAgICdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cbiAgICAgICAge3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG4gICAgICA8L21vdGlvbi5kaXY+XG4gICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcbiAgRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuICAocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcbiAgICAvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gICAgcmV0dXJuIChcbiAgICAgIHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcbiAgICAgIHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG4gICAgICBwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG4gICAgICBwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuICAgIClcbiAgfVxuKVxuIiwKICAgICJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuXG4vKipcbiAqIEdlbmVyaWMgaG9vayB0aGF0IGRldGVjdHMgd2hpY2ggY2FsZW5kYXIgY29udGV4dCBpcyBhdmFpbGFibGUgYW5kIHJldHVybnMgc2VsZWN0ZWQgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oc2VsZWN0b3I6IChjb250ZXh0KSA9PiBUKTogVCB7XG4gIC8vIENoZWNrIGJvdGggY29udGV4dHMgdXNpbmcgdXNlQ29udGV4dCBkaXJlY3RseSAobm8gaG9va3MpXG4gIGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG4gIGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cbiAgaWYgKHJlc291cmNlQ29udGV4dCkge1xuICAgIHJldHVybiBzZWxlY3RvcihyZXNvdXJjZUNvbnRleHQpXG4gIH1cblxuICBpZiAocmVndWxhckNvbnRleHQpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IocmVndWxhckNvbnRleHQpXG4gIH1cblxuICAvLyBJZiBuZWl0aGVyIGNvbnRleHQgaXMgYXZhaWxhYmxlLCB0aHJvdyBhbiBlcnJvclxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7XG4gIFJlc291cmNlLFxuICBSZXNvdXJjZUNhbGVuZGFyRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHtcbiAgQ2FsZW5kYXJDb250ZXh0VHlwZSxcbiAgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSBleHRlbmRzIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICAvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuICByZXNvdXJjZXM6IFJlc291cmNlW11cbiAgdmlzaWJsZVJlc291cmNlczogU2V0PHN0cmluZyB8IG51bWJlcj5cblxuICAvLyBSZXNvdXJjZSB1dGlsaXRpZXNcbiAgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlQ2FsZW5kYXJFdmVudFtdXG4gIGdldEV2ZW50c0ZvclJlc291cmNlczogKFxuICAgIHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4gICkgPT4gUmVzb3VyY2VDYWxlbmRhckV2ZW50W11cbiAgZ2V0UmVzb3VyY2VCeUlkOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBSZXNvdXJjZSB8IHVuZGVmaW5lZFxuICBnZXRWaXNpYmxlUmVzb3VyY2VzOiAoKSA9PiBSZXNvdXJjZVtdXG5cbiAgLy8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG4gIGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuICBnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4gKHN0cmluZyB8IG51bWJlcilbXVxuXG4gIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyIGNvbnRleHRcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkNlbGxDbGljazogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anMsXG4gICAgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuICApID0+IHZvaWRcbiAgcmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuICBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPSAoKTogUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcbiAgICApXG4gIH1cbiAgcmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIHJlc291cmNlIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVyblxuICBleHRlbmRzIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcbiAgcmVhZG9ubHkgZXZlbnRzOiBSZXNvdXJjZUNhbGVuZGFyRXZlbnRbXVxuICByZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cbiAgcmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcbiAgICByZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKSA9PiBSZXNvdXJjZUNhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCA9XG4gICgpOiBVc2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChSZXNvdXJjZUNhbGVuZGFyQ29udGV4dClcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcbiAgICAgIHZpZXc6IGNvbnRleHQudmlldyxcbiAgICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgICByZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzLFxuICAgICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcbiAgICAgIHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICAgIHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuICAgICAgc2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuICAgICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgICAgbmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuICAgICAgcHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuICAgICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgICBhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgICBvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG4gICAgICBjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcbiAgICAgIGdldEV2ZW50c0ZvclJlc291cmNlOiBjb250ZXh0LmdldEV2ZW50c0ZvclJlc291cmNlLFxuICAgIH0gYXMgY29uc3RcbiAgfVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHtcbiAgUmVzb3VyY2UsXG4gIFJlc291cmNlQ2FsZW5kYXJFdmVudCxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcblxuY29uc3QgZ2V0RXZlbnRSZXNvdXJjZUlkcyA9IChcbiAgZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudFxuKTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XG4gIGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuICAgIHJldHVybiBldmVudC5yZXNvdXJjZUlkc1xuICB9XG4gIGlmIChldmVudC5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2V2ZW50LnJlc291cmNlSWRdXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wcyBleHRlbmRzIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG4gIGV2ZW50cz86IFJlc291cmNlQ2FsZW5kYXJFdmVudFtdXG4gIHJlc291cmNlcz86IFJlc291cmNlW11cbiAgb25DZWxsQ2xpY2s/OiAoXG4gICAgc3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcbiAgICBlbmREYXRlOiBkYXlqcy5EYXlqcyxcbiAgICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gICkgPT4gdm9pZFxuICByZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcbiAgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuICBjaGlsZHJlbixcbiAgZXZlbnRzID0gW10sXG4gIHJlc291cmNlcyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9IDAsXG4gIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgcmVuZGVyRXZlbnQsXG4gIG9uRXZlbnRDbGljayxcbiAgb25DZWxsQ2xpY2ssXG4gIG9uVmlld0NoYW5nZSxcbiAgb25FdmVudEFkZCxcbiAgb25FdmVudFVwZGF0ZSxcbiAgb25FdmVudERlbGV0ZSxcbiAgb25EYXRlQ2hhbmdlLFxuICBsb2NhbGUsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbiAgaGVhZGVyQ2xhc3NOYW1lLFxuICB0cmFuc2xhdGlvbnMsXG4gIHRyYW5zbGF0b3IsXG4gIHJlbmRlclJlc291cmNlLFxufSkgPT4ge1xuICAvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuICBjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG4gIGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuICAgIFNldDxzdHJpbmcgfCBudW1iZXI+XG4gID4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cbiAgLy8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcbiAgY29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG4gICAgZXZlbnRzLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGluaXRpYWxWaWV3LFxuICAgIG9uRXZlbnRBZGQsXG4gICAgb25FdmVudFVwZGF0ZSxcbiAgICBvbkV2ZW50RGVsZXRlLFxuICAgIG9uRGF0ZUNoYW5nZSxcbiAgICBvblZpZXdDaGFuZ2U6IG9uVmlld0NoYW5nZSxcbiAgICBsb2NhbGUsXG4gICAgdGltZXpvbmUsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIHRyYW5zbGF0b3IsXG4gIH0pXG5cbiAgLy8gUmVzb3VyY2UgdmlzaWJpbGl0eVxuICBjb25zdCB0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICBzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQocHJldilcbiAgICAgICAgaWYgKG5ld1NldC5oYXMocmVzb3VyY2VJZCkpIHtcbiAgICAgICAgICBuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3U2V0LmFkZChyZXNvdXJjZUlkKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdTZXRcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3Qgc2hvd1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKVxuICB9LCBbXSlcblxuICBjb25zdCBoaWRlUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgc2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuICAgICAgbmV3U2V0LmRlbGV0ZShyZXNvdXJjZUlkKVxuICAgICAgcmV0dXJuIG5ld1NldFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNob3dBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KGN1cnJlbnRSZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG4gIH0sIFtjdXJyZW50UmVzb3VyY2VzXSlcblxuICBjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldCgpKVxuICB9LCBbXSlcblxuICAvLyBFdmVudCB1dGlsaXRpZXNcbiAgY29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUmVzb3VyY2VDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgcmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBSZXNvdXJjZUNhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlSWRzLmluY2x1ZGVzKHJlc291cmNlSWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlSWQgPT09IHJlc291cmNlSWRcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuICApXG5cbiAgY29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUmVzb3VyY2VDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgcmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBSZXNvdXJjZUNhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG4gICAgICAgIHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2NhbGVuZGFyRW5naW5lLmV2ZW50c11cbiAgKVxuXG4gIGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG4gICAgfSxcbiAgICBbY3VycmVudFJlc291cmNlc11cbiAgKVxuXG4gIGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG4gICAgcmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cbiAgICAgIHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuICAgIClcbiAgfSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG4gIC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuICBjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVzb3VyY2VDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gQm9vbGVhbihldmVudC5yZXNvdXJjZUlkcyAmJiBldmVudC5yZXNvdXJjZUlkcy5sZW5ndGggPiAxKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIC8vIEN1c3RvbSBoYW5kbGVyc1xuICBjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcbiAgICAgIGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgIH0sXG4gICAgW2NhbGVuZGFyRW5naW5lXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVzb3VyY2VDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25FdmVudENsaWNrKSB7XG4gICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRFdmVudChldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzdGFydERhdGU6IGRheWpzLkRheWpzLFxuICAgICAgZW5kRGF0ZTogZGF5anMuRGF5anMsXG4gICAgICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gICAgKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2VsbENsaWNrKSB7XG4gICAgICAgIG9uQ2VsbENsaWNrKHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgcmVzb3VyY2VJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld0V2ZW50OiBSZXNvdXJjZUNhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgICAgdGl0bGU6IGNhbGVuZGFyRW5naW5lLnQoJ25ld0V2ZW50JyksXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmQ6IGVuZERhdGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICAgIH0gYXMgUmVzb3VyY2VDYWxlbmRhckV2ZW50XG5cbiAgICAgICAgaWYgKHJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld0V2ZW50LnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICAgIH1cblxuICAgICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuICAgICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoc3RhcnREYXRlKVxuICAgICAgICBjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG4gIClcblxuICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgLi4uY2FsZW5kYXJFbmdpbmUsXG4gICAgICB2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuICAgICAgc2V0VmlldzogY2FsZW5kYXJFbmdpbmUuc2V0VmlldyxcbiAgICAgIGV2ZW50czogY2FsZW5kYXJFbmdpbmUuZXZlbnRzLFxuICAgICAgcmF3RXZlbnRzOiBjYWxlbmRhckVuZ2luZS5yYXdFdmVudHMsXG5cbiAgICAgIC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG4gICAgICByZXNvdXJjZXM6IGN1cnJlbnRSZXNvdXJjZXMsXG4gICAgICB2aXNpYmxlUmVzb3VyY2VzLFxuICAgICAgdG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuICAgICAgc2hvd1Jlc291cmNlLFxuICAgICAgaGlkZVJlc291cmNlLFxuICAgICAgc2hvd0FsbFJlc291cmNlcyxcbiAgICAgIGhpZGVBbGxSZXNvdXJjZXMsXG5cbiAgICAgIC8vIFJlc291cmNlIHV0aWxpdGllc1xuICAgICAgZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG4gICAgICBnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG4gICAgICBnZXRSZXNvdXJjZUJ5SWQsXG4gICAgICBnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXG4gICAgICAvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcbiAgICAgIGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuICAgICAgZ2V0RXZlbnRSZXNvdXJjZUlkcyxcblxuICAgICAgLy8gT3ZlcnJpZGUgaGFuZGxlcnNcbiAgICAgIG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcbiAgICAgIG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cbiAgICAgIC8vIFBhc3MgdGhyb3VnaCBoZWFkZXIgcHJvcHNcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcblxuICAgICAgLy8gUGFzcyB0aHJvdWdoIG90aGVyIHByb3BzXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIHJlbmRlclJlc291cmNlLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICB9KSxcbiAgICBbXG4gICAgICBjYWxlbmRhckVuZ2luZSxcbiAgICAgIGN1cnJlbnRSZXNvdXJjZXMsXG4gICAgICB2aXNpYmxlUmVzb3VyY2VzLFxuICAgICAgdG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuICAgICAgc2hvd1Jlc291cmNlLFxuICAgICAgaGlkZVJlc291cmNlLFxuICAgICAgc2hvd0FsbFJlc291cmNlcyxcbiAgICAgIGhpZGVBbGxSZXNvdXJjZXMsXG4gICAgICBnZXRFdmVudHNGb3JSZXNvdXJjZSxcbiAgICAgIGdldEV2ZW50c0ZvclJlc291cmNlcyxcbiAgICAgIGdldFJlc291cmNlQnlJZCxcbiAgICAgIGdldFZpc2libGVSZXNvdXJjZXMsXG4gICAgICBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIHJlbmRlclJlc291cmNlLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICBdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgdXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZUNvbmZpZyB7XG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgaW5pdGlhbFZpZXc/OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgb25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIG9uVmlld0NoYW5nZT86ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHRpbWV6b25lPzogc3RyaW5nXG4gIHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuICB0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuICAvLyBTdGF0ZVxuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXG4gIC8vIEFjdGlvbnNcbiAgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgdG9kYXk6ICgpID0+IHZvaWRcblxuICAvLyBFdmVudCBvcGVyYXRpb25zXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuXG4gIC8vIEV2ZW50IGZvcm1cbiAgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuICBzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG4gIHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG4gIHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248ZGF5anMuRGF5anMgfCBudWxsPj5cblxuICAvLyBVdGlsaXRpZXNcbiAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoXG4gICAgc3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcbiAgICBlbmREYXRlOiBkYXlqcy5EYXlqc1xuICApID0+IENhbGVuZGFyRXZlbnRbXVxuICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgZ2V0Q3VycmVudFZpZXdSYW5nZTogKCkgPT4geyBzdGFydDogZGF5anMuRGF5anM7IGVuZDogZGF5anMuRGF5anMgfVxuXG4gIC8vIFRyYW5zbGF0aW9uXG4gIHQ6IChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcbiAgY29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuICBjb25zdCB7XG4gICAgZXZlbnRzID0gW10sXG4gICAgZmlyc3REYXlPZldlZWsgPSAwLFxuICAgIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgICBvbkV2ZW50QWRkLFxuICAgIG9uRXZlbnRVcGRhdGUsXG4gICAgb25FdmVudERlbGV0ZSxcbiAgICBvbkRhdGVDaGFuZ2UsXG4gICAgb25WaWV3Q2hhbmdlLFxuICAgIGxvY2FsZSxcbiAgICB0aW1lem9uZSxcbiAgICB0cmFuc2xhdGlvbnMsXG4gICAgdHJhbnNsYXRvcixcbiAgfSA9IGNvbmZpZ1xuXG4gIC8vIFN0YXRlXG4gIGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anM+KGRheWpzKCkpXG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPCdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJz4oXG4gICAgaW5pdGlhbFZpZXdcbiAgKVxuICBjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcbiAgY29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGU8c3RyaW5nPihsb2NhbGUgfHwgJ2VuJylcblxuICAvLyBDcmVhdGUgdHJhbnNsYXRpb24gZnVuY3Rpb25cbiAgY29uc3QgdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh0cmFuc2xhdG9yKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRvclxuICAgIH1cbiAgICBpZiAodHJhbnNsYXRpb25zKSB7XG4gICAgICByZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcbiAgICB9XG4gICAgcmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gZGVmYXVsdFRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuICB9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGV2ZW50cyBmb3IgYSBzcGVjaWZpYyBkYXRlIHJhbmdlXG4gIGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gICAgICBjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudHMgPSBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgICAgICBzdGFydERhdGUsXG4gICAgICAgICAgICBlbmREYXRlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgYWxsRXZlbnRzLnB1c2goLi4ucmVjdXJyaW5nRXZlbnRzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGV2ZW50U3RhcnRzSW5SYW5nZSA9XG4gICAgICAgICAgICBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cbiAgICAgICAgICBjb25zdCBldmVudEVuZHNJblJhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXG4gICAgICAgICAgY29uc3QgZXZlbnRTcGFuc1JhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblxuICAgICAgICAgIGlmIChldmVudFN0YXJ0c0luUmFuZ2UgfHwgZXZlbnRFbmRzSW5SYW5nZSB8fCBldmVudFNwYW5zUmFuZ2UpIHtcbiAgICAgICAgICAgIGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxsRXZlbnRzXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50c11cbiAgKVxuXG4gIC8vIEdldCB0aGUgY3VycmVudCB2aWV3J3MgZGF0ZSByYW5nZVxuICBjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgLnN1YnRyYWN0KGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgLmFkZChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAuc3VidHJhY3QoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5lbmRPZignbW9udGgnKVxuICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5hZGQoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZigneWVhcicpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ3llYXInKSxcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdtb250aCcpLFxuICAgICAgICB9XG4gICAgfVxuICB9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuICAvLyBHZXQgcHJvY2Vzc2VkIGV2ZW50cyBmb3IgdGhlIGN1cnJlbnQgdmlld1xuICBjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuICAgIHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cbiAgLy8gVXBkYXRlIGV2ZW50cyB3aGVuIGV2ZW50cyBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcbiAgICB9XG4gIH0sIFtldmVudHNdKVxuXG4gIC8vIENvbmZpZ3VyZSBsb2NhbGUgd2hlbiBsb2NhbGUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvY2FsZSkge1xuICAgICAgc2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG4gICAgICBkYXlqcy5sb2NhbGUobG9jYWxlKVxuICAgIH1cbiAgfSwgW2xvY2FsZV0pXG5cbiAgLy8gQ29uZmlndXJlIHRpbWV6b25lIHdoZW4gdGltZXpvbmUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRpbWV6b25lKSB7XG4gICAgICBkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuICAgIH1cbiAgfSwgW3RpbWV6b25lXSlcblxuICAvLyBEYXRlIG5hdmlnYXRpb25cbiAgY29uc3Qgc2VsZWN0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgc2V0Q3VycmVudERhdGUoZGF0ZSlcbiAgICAgIG9uRGF0ZUNoYW5nZT8uKGRhdGUpXG4gICAgfSxcbiAgICBbb25EYXRlQ2hhbmdlXVxuICApXG5cbiAgY29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnbW9udGgnKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICdkYXknKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd5ZWFyJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9LCBbdmlldywgb25EYXRlQ2hhbmdlXSlcblxuICBjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRoJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAneWVhcicpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXcsIG9uRGF0ZUNoYW5nZV0pXG5cbiAgY29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKClcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gIH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG4gIC8vIEV2ZW50IG9wZXJhdGlvbnNcbiAgY29uc3QgYWRkRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+IFsuLi5wcmV2RXZlbnRzLCBldmVudF0pXG4gICAgICBvbkV2ZW50QWRkPy4oZXZlbnQpXG4gICAgfSxcbiAgICBbb25FdmVudEFkZF1cbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlZEV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBwcmV2RXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuaWQgPT09IGV2ZW50SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlZEV2ZW50IH1cbiAgICAgICAgICAgIG9uRXZlbnRVcGRhdGU/LihuZXdFdmVudClcbiAgICAgICAgICAgIHJldHVybiBuZXdFdmVudFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXZlbnRcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbb25FdmVudFVwZGF0ZV1cbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuICAgICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkRXZlbnQgPSB7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH1cbiAgICAgIG9uRXZlbnRVcGRhdGU/Lih1cGRhdGVkRXZlbnQpXG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG4gIClcblxuICBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG4gICAgICBvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG4gIClcblxuICBjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRUb0RlbGV0ZSA9IHByZXZFdmVudHMuZmluZCgoZXZlbnQpID0+IGV2ZW50LmlkID09PSBldmVudElkKVxuICAgICAgICBpZiAoZXZlbnRUb0RlbGV0ZSkge1xuICAgICAgICAgIG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmlkICE9PSBldmVudElkKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvbkV2ZW50RGVsZXRlXVxuICApXG5cbiAgLy8gRXZlbnQgZm9ybVxuICBjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKGRhdGUpXG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZEV2ZW50KHtcbiAgICAgICAgdGl0bGU6IHQoJ25ld0V2ZW50JyksXG4gICAgICAgIHN0YXJ0OiBkYXRlID8/IGN1cnJlbnREYXRlLFxuICAgICAgICBlbmQ6IGRhdGUgPz8gY3VycmVudERhdGUuYWRkKDEsICdob3VyJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgYWxsRGF5OiBmYWxzZSxcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudClcbiAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgIH0sXG4gICAgW2N1cnJlbnREYXRlLCB0XVxuICApXG5cbiAgY29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWREYXRlKG51bGwpXG4gICAgc2V0U2VsZWN0ZWRFdmVudChudWxsKVxuICAgIHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcbiAgfSwgW10pXG5cbiAgLy8gVmlldyBtYW5hZ2VtZW50XG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB7XG4gICAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgICBvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuICAgIH0sXG4gICAgW29uVmlld0NoYW5nZV1cbiAgKVxuXG4gIC8vIEZpbmQgcGFyZW50IHJlY3VycmluZyBldmVudFxuICBjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblxuICAgICAgY29uc3QgcGFyZW50RXZlbnQgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50VUlEID0gZS51aWQgfHwgYCR7ZS5pZH1AaWxhbXkuY2FsZW5kYXJgXG4gICAgICAgIHJldHVybiBwYXJlbnRVSUQgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gcGFyZW50RXZlbnQgfHwgbnVsbFxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICByZXR1cm4ge1xuICAgIC8vIFN0YXRlXG4gICAgY3VycmVudERhdGUsXG4gICAgdmlldyxcbiAgICBldmVudHM6IHByb2Nlc3NlZEV2ZW50cyxcbiAgICByYXdFdmVudHM6IGN1cnJlbnRFdmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuLFxuICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50czogREFZX01BWF9FVkVOVFNfREVGQVVMVCxcbiAgICBjdXJyZW50TG9jYWxlLFxuXG4gICAgLy8gQWN0aW9uc1xuICAgIHNldEN1cnJlbnREYXRlLFxuICAgIHNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcbiAgICBuZXh0UGVyaW9kLFxuICAgIHByZXZQZXJpb2QsXG4gICAgdG9kYXksXG5cbiAgICAvLyBFdmVudCBvcGVyYXRpb25zXG4gICAgYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQsXG4gICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQsXG4gICAgZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cbiAgICAvLyBFdmVudCBmb3JtXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZXRTZWxlY3RlZEV2ZW50LFxuICAgIHNldElzRXZlbnRGb3JtT3BlbixcbiAgICBzZXRTZWxlY3RlZERhdGUsXG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgIGdldEN1cnJlbnRWaWV3UmFuZ2UsXG5cbiAgICAvLyBUcmFuc2xhdGlvblxuICAgIHQsXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IG9taXRLZXlzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcbiAgZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcbiAgZXZlbnQsXG4gIGN1cnJlbnRFdmVudHMsXG4gIHN0YXJ0RGF0ZSxcbiAgZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuICBpZiAoIWV2ZW50LnJydWxlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG4gICAgLy8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuICAgIGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAuLi5ldmVudC5ycnVsZSxcbiAgICAgIGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG4gICAgKVxuXG4gICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuICAgIGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuICAgIC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuICAgIC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG4gICAgY29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG4gICAgICAuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgIC50b0RhdGUoKVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG4gICAgLy8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2VcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG4gICAgLy8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcbiAgICAgIC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuICAgICAgICAgIHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKS5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcbiAgICAgICAgaWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcbiAgICAgICAgY29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGlkOiByZWN1cnJpbmdFdmVudElkLFxuICAgICAgICAgIHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcbiAgICAgICAgICBlbmQ6IG5ld0VuZFRpbWUsXG4gICAgICAgICAgdWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG4gICAgICAgICAgcnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN1cnJpbmdFdmVudFxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcbiAgICAgICAgY29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG4gICAgICAgIGlmIChoYXNFeGRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuICAgICAgICAgIGlmIChpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2VcbiAgICAgICAgLy8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcbiAgICAgICAgLy8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgIHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG4gICAgICAgICAgcmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG4gICAgICAgIHJldHVybiBldmVudFNwYW5zUmFuZ2VcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgIClcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICB1cGRhdGVzLFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcbiAgICAgIGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuICAgICAgICAuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIGlkOiBtb2RpZmllZEV2ZW50SWQsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG4gICAgICAgIHVpZDogYmFzZUV2ZW50LnVpZCB8fCBgJHtiYXNlRXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYCwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG4gICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2ZvbGxvd2luZyc6IHtcbiAgICAgIC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuICAgICAgY29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuICAgICAgY29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG4gICAgICAgIHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG4gICAgICBjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAgIGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIC4uLnVwZGF0ZXMucnJ1bGUsXG4gICAgICAgICAgZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBpZDogbmV3U2VyaWVzSWQsXG4gICAgICAgIHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG4gICAgICAgIHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG4gICAgICAgIGVuZDogbmV3U2VyaWVzRW5kVGltZSxcbiAgICAgICAgcmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcbiAgdGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2VcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICB1bnRpbDogdGVybWluYXRpb25EYXRlLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYWxsJzoge1xuICAgICAgLy8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG4gICAgICBjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChlKSA9PiBlLnVpZCAhPT0gdGFyZ2V0RXZlbnQudWlkXG4gICAgICApXG4gICAgICByZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcbiAgLy8gQ29tbW9uIGFjdGlvbnNcbiAgdG9kYXk6ICdUb2RheScsXG4gIGNyZWF0ZTogJ0NyZWF0ZScsXG4gIG5ldzogJ05ldycsXG4gIHVwZGF0ZTogJ1VwZGF0ZScsXG4gIGRlbGV0ZTogJ0RlbGV0ZScsXG4gIGNhbmNlbDogJ0NhbmNlbCcsXG4gIGV4cG9ydDogJ0V4cG9ydCcsXG5cbiAgLy8gRXZlbnQgcmVsYXRlZFxuICBldmVudDogJ0V2ZW50JyxcbiAgZXZlbnRzOiAnRXZlbnRzJyxcbiAgbmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuICB0aXRsZTogJ1RpdGxlJyxcbiAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG4gIGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuICBhbGxEYXk6ICdBbGwgZGF5JyxcbiAgc3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG4gIGVuZERhdGU6ICdFbmQgRGF0ZScsXG4gIHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuICBlbmRUaW1lOiAnRW5kIFRpbWUnLFxuICBjb2xvcjogJ0NvbG9yJyxcblxuICAvLyBFdmVudCBmb3JtXG4gIGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50JyxcbiAgZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG4gIGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuICBlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuICBldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG4gIGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICBldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuICAvLyBSZWN1cnJlbmNlXG4gIHJlcGVhdDogJ1JlcGVhdCcsXG4gIHJlcGVhdHM6ICdSZXBlYXRzJyxcbiAgY3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcbiAgZGFpbHk6ICdEYWlseScsXG4gIHdlZWtseTogJ1dlZWtseScsXG4gIG1vbnRobHk6ICdNb250aGx5JyxcbiAgeWVhcmx5OiAnWWVhcmx5JyxcbiAgaW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG4gIHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcbiAgbmV2ZXI6ICdOZXZlcicsXG4gIGNvdW50OiAnQ291bnQnLFxuICBldmVyeTogJ0V2ZXJ5JyxcbiAgZW5kczogJ0VuZHMnLFxuICBhZnRlcjogJ0FmdGVyJyxcbiAgb2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG4gIG9uOiAnT24nLFxuXG4gIC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcbiAgZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuICBlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcbiAgICAnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG4gICAgJ2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG4gIHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuICB0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcbiAgdGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgYWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG4gIGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG4gIC8vIFZpZXcgdHlwZXNcbiAgbW9udGg6ICdNb250aCcsXG4gIHdlZWs6ICdXZWVrJyxcbiAgZGF5OiAnRGF5JyxcbiAgeWVhcjogJ1llYXInLFxuICBtb3JlOiAnbW9yZScsXG5cbiAgLy8gUmVzb3VyY2UgY2FsZW5kYXJcbiAgcmVzb3VyY2VzOiAnUmVzb3VyY2VzJyxcbiAgcmVzb3VyY2U6ICdSZXNvdXJjZScsXG4gIHRpbWU6ICdUaW1lJyxcbiAgZGF0ZTogJ0RhdGUnLFxuICBub1Jlc291cmNlc1Zpc2libGU6ICdObyByZXNvdXJjZXMgdmlzaWJsZScsXG4gIGFkZFJlc291cmNlc09yU2hvd0V4aXN0aW5nOiAnQWRkIHJlc291cmNlcyBvciBzaG93IGV4aXN0aW5nIG9uZXMnLFxuXG4gIC8vIERheXMgb2Ygd2Vla1xuICBzdW5kYXk6ICdTdW5kYXknLFxuICBtb25kYXk6ICdNb25kYXknLFxuICB0dWVzZGF5OiAnVHVlc2RheScsXG4gIHdlZG5lc2RheTogJ1dlZG5lc2RheScsXG4gIHRodXJzZGF5OiAnVGh1cnNkYXknLFxuICBmcmlkYXk6ICdGcmlkYXknLFxuICBzYXR1cmRheTogJ1NhdHVyZGF5JyxcblxuICAvLyBEYXlzIHNob3J0XG4gIHN1bjogJ1N1bicsXG4gIG1vbjogJ01vbicsXG4gIHR1ZTogJ1R1ZScsXG4gIHdlZDogJ1dlZCcsXG4gIHRodTogJ1RodScsXG4gIGZyaTogJ0ZyaScsXG4gIHNhdDogJ1NhdCcsXG5cbiAgLy8gTW9udGhzXG4gIGphbnVhcnk6ICdKYW51YXJ5JyxcbiAgZmVicnVhcnk6ICdGZWJydWFyeScsXG4gIG1hcmNoOiAnTWFyY2gnLFxuICBhcHJpbDogJ0FwcmlsJyxcbiAgbWF5OiAnTWF5JyxcbiAganVuZTogJ0p1bmUnLFxuICBqdWx5OiAnSnVseScsXG4gIGF1Z3VzdDogJ0F1Z3VzdCcsXG4gIHNlcHRlbWJlcjogJ1NlcHRlbWJlcicsXG4gIG9jdG9iZXI6ICdPY3RvYmVyJyxcbiAgbm92ZW1iZXI6ICdOb3ZlbWJlcicsXG4gIGRlY2VtYmVyOiAnRGVjZW1iZXInLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI4IC8vIHB4IChoLTcpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcbiAgc3VuZGF5OiAwLFxuICBtb25kYXk6IDEsXG4gIHR1ZXNkYXk6IDIsXG4gIHdlZG5lc2RheTogMyxcbiAgdGh1cnNkYXk6IDQsXG4gIGZyaWRheTogNSxcbiAgc2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuICAwOiAnc3VuZGF5JyxcbiAgMTogJ21vbmRheScsXG4gIDI6ICd0dWVzZGF5JyxcbiAgMzogJ3dlZG5lc2RheScsXG4gIDQ6ICd0aHVyc2RheScsXG4gIDU6ICdmcmlkYXknLFxuICA2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQge1xuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG4gIGRheTogZGF5anMuRGF5anNcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuICByZWY6IFJlYWN0LlJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuICBjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuICAgIHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcbiAgICBjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuICB9KSlcblxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG4gICAgICBzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuICB9KSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2RpYWxvZ09wZW59IG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmIHNlbGVjdGVkRGF5RXZlbnRzLmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG4gICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmXG4gICAgICAgICAgICBzZWxlY3RlZERheUV2ZW50cy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH0gLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRheXMgPSBkYXlqcy53ZWVrZGF5c1Nob3J0KCkubWFwKChkYXkpID0+IGRheS50b0xvd2VyQ2FzZSgpKVxuXG4gICAgLy8gUm90YXRlIHRoZSBhcnJheSBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3REYXlPZldlZWs7IGkrKykge1xuICAgICAgY29uc3QgZGF5VG9Nb3ZlID0gZGF5cy5zaGlmdCgpXG4gICAgICBpZiAoZGF5VG9Nb3ZlKSB7XG4gICAgICAgIGRheXMucHVzaChkYXlUb01vdmUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGF5cyB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGVdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLTcgYm9yZGVyLWInLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcbiAgICA+XG4gICAgICB7d2Vla0RheXMuZGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5fSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3dlZWtEYXl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBmaXJzdDpib3JkZXItbFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gY2FwaXRhbGl6ZVwiPnt3ZWVrRGF5fTwvc3Bhbj5cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHtcbiAgREFZX05VTUJFUl9IRUlHSFQsXG4gIEVWRU5UX0JBUl9IRUlHSFQsXG4gIEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgcG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuICBpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcbiAgaXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgZGF5TWF4RXZlbnRzOiBudW1iZXJcbiAgZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuICBkYXlzLFxuICBldmVudHMsXG4gIGRheU1heEV2ZW50cyxcbiAgZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG4gIGdyaWRUeXBlID0gJ2RheScsXG59OiBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgZmlyc3REYXkgPSBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpXG4gIGNvbnN0IGxhc3REYXkgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcbiAgY29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG4gIC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcbiAgY29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG4gIGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG4gIClcblxuICAvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuICBjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuICAgIGlmIChzdGFydERpZmYgIT09IDApIHtcbiAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICB9XG4gICAgcmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3RcbiAgfSlcblxuICAvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcbiAgY29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cbiAgICBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgKVxuXG4gIC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3NcbiAgY29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gW11cbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgIGdyaWRbcm93XSA9IFtdXG4gICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgZGF5Q291bnQ7IGNvbCsrKSB7XG4gICAgICBncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cbiAgLy8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3RcbiAgZm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuICAgIGNvbnN0IGFkanVzdGVkRW5kID1cbiAgICAgIGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG4gICAgY29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG4gICAgY29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcbiAgICBjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuICAgIC8vIERldGVjdCBpZiBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGJvdW5kYXJpZXNcbiAgICBjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSkuaXNCZWZvcmUoZmlyc3REYXkpXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZihncmlkVHlwZSkuaXNBZnRlcihsYXN0RGF5KVxuXG4gICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cbiAgICBsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuICAgIC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgZm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FuUGxhY2UpIHtcbiAgICAgICAgYXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgY29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgbGVmdDogKHN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuICAgICAgICB3aWR0aDogKHNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuICAgICAgICB0b3A6XG4gICAgICAgICAgZGF5TnVtYmVySGVpZ2h0ICtcbiAgICAgICAgICBHQVBfQkVUV0VFTl9FTEVNRU5UUyArXG4gICAgICAgICAgYXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBwb3NpdGlvbjogYXNzaWduZWRSb3csXG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBpc1RydW5jYXRlZFN0YXJ0LFxuICAgICAgICBpc1RydW5jYXRlZEVuZCxcbiAgICAgIH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuICAgICAgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuICAgIGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG4gICAgICAgIHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcbiAgICAgICAgdHJ5U3RhcnRDb2wrK1xuICAgICAgKSB7XG4gICAgICAgIC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cbiAgICAgICAgbGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgICAgIGxldCBjYW5QbGFjZSA9IHRydWVcbiAgICAgICAgICBmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgICAgICBjYW5QbGFjZSA9IGZhbHNlXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYW5QbGFjZSkge1xuICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcbiAgICAgICAgaWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgZ3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcbiAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuICAgICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGxlZnQ6ICh0cnlTdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcbiAgICAgICAgICAgIHdpZHRoOiAodHJ1bmNhdGVkU3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG4gICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgIGRheU51bWJlckhlaWdodCArXG4gICAgICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgaXNUcnVuY2F0ZWRTdGFydDogdHJ1ZSwgLy8gQWx3YXlzIHRydW5jYXRlZCBhdCBzdGFydCB3aGVuIHVzaW5nIHRoaXMgZmFsbGJhY2sgbG9naWNcbiAgICAgICAgICAgIGlzVHJ1bmNhdGVkRW5kLFxuICAgICAgICAgIH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuICAgICAgICAgIHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcbiAgICAgICAgICBicmVhayAvLyBTdWNjZXNzZnVsbHkgcGxhY2VkLCBzdG9wIHRyeWluZyBvdGhlciBzdGFydCBwb3NpdGlvbnNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0ZXAgMjogRmlsbCBnYXBzIHdpdGggc2luZ2xlLWRheSBldmVudHNcbiAgZm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRTaW5nbGVEYXkpIHtcbiAgICBjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcbiAgICAvLyBDbGFtcCBjb2wgdG8gdmFsaWQgZ3JpZCBib3VuZHMgdG8gcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGdyaWQgcG9zaXRpb25zXG4gICAgY29uc3QgY29sID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcbiAgICApXG5cbiAgICAvLyBTaW5nbGUtZGF5IGV2ZW50cyBhcmUgbm90IHRydW5jYXRlZCBieSBkZWZpbml0aW9uXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGZhbHNlXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBmYWxzZVxuXG4gICAgLy8gRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIHJvdyBpbiB0aGlzIGNvbHVtblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgaWYgKCFncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICBhc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50XG4gICAgaWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICBsZWZ0OiAoY29sIC8gZGF5Q291bnQpICogMTAwLFxuICAgICAgICB3aWR0aDogKDEgLyBkYXlDb3VudCkgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBkYXlOdW1iZXJIZWlnaHQgK1xuICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICBhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGlzVHJ1bmNhdGVkU3RhcnQsXG4gICAgICAgIGlzVHJ1bmNhdGVkRW5kLFxuICAgICAgfSBhcyBQb3NpdGlvbmVkRXZlbnQpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0UG9zaXRpb25lZEV2ZW50cyB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcbiAgZGF5czogZGF5anMuRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG4gIGRheXMsXG59OiBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGRheU1heEV2ZW50cyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpXG4gIGNvbnN0IHdlZWtFbmQgPSBkYXlzWzZdLmVuZE9mKCdkYXknKVxuXG4gIC8vIEdldCBhbGwgZXZlbnRzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhpcyB3ZWVrXG4gIGNvbnN0IGV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cbiAgcmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuICAgIGRheXMsXG4gICAgZXZlbnRzLFxuICAgIGRheU1heEV2ZW50cyxcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBXZWVrRXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtFdmVudHNMYXllcjogUmVhY3QuRkM8V2Vla0V2ZW50c0xheWVyUHJvcHM+ID0gKHsgZGF5cyB9KSA9PiB7XG4gIGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF1cbiAgY29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoeyBkYXlzIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIj5cbiAgICAgIHtwcm9jZXNzZWRXZWVrRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQudG9JU09TdHJpbmcoKX1gXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1ldmVudC1sYXllci1ldmVudC0ke2V2ZW50LmlkfWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgIGVsZW1lbnRJZD17ZXZlbnRLZXl9XG4gICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmludGVyZmFjZSBEYXlDZWxsUHJvcHMge1xuICBpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcbiAgZGF5OiBkYXlqcy5EYXlqc1xuICBkYXlNYXhFdmVudHM/OiBudW1iZXJcbiAgY2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUNlbGw6IFJlYWN0LkZDPERheUNlbGxQcm9wcz4gPSAoe1xuICBpbmRleCxcbiAgZGF5LFxuICBjbGFzc05hbWUgPSAnJyxcbn0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgIGN1cnJlbnREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50cyA9IDAsXG4gICAgdCxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICBkYXkuZW5kT2YoJ2RheScpXG4gIClcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgLy8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG4gIGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuICAgICAgZGF5LFxuICAgICAgZXZlbnRzLFxuICAgIH0pXG4gICAgYWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuICB9XG5cbiAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gIGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IGN1cnJlbnREYXRlLm1vbnRoKClcbiAgY29uc3QgaXNMYXN0Q29sdW1uID0gaW5kZXggPT09IDYgLy8gU2F0dXJkYXkgaXMgdGhlIGxhc3QgY29sdW1uIGluIGEgd2Vla1xuXG4gIGNvbnN0IGhpZGRlbkV2ZW50c0NvdW50ID0gdG9kYXlFdmVudHMubGVuZ3RoIC0gZGF5TWF4RXZlbnRzXG4gIGNvbnN0IGhhc0hpZGRlbkV2ZW50cyA9IGhpZGRlbkV2ZW50c0NvdW50ID4gMFxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgIGlkPXtgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgdHlwZT1cImRheS1jZWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9e2BkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2N1cnNvci1wb2ludGVyIG92ZXJmbG93LWNsaXAgcC0xIGhvdmVyOmJnLWFjY2VudCBtaW4taC1bNjBweF0nLFxuICAgICAgICAgICFpc0N1cnJlbnRNb250aCAmJiAnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgaXNMYXN0Q29sdW1uICYmICdib3JkZXItci0wJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgID5cbiAgICAgICAgey8qIEFic29sdXRlbHkgcG9zaXRpb25lZCBtdWx0aS1kYXkgYmFycyAoR29vZ2xlIENhbGVuZGFyIHN0eWxlKSAqL31cblxuICAgICAgICB7LyogU2luZ2xlLWRheSBldmVudHMgY29udGFpbmVyIHBvc2l0aW9uZWQgYmVsb3cgbXVsdGktZGF5IGV2ZW50cyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgey8qIERheSBudW1iZXIgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2ZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc206aC02IHNtOnctNicsXG4gICAgICAgICAgICAgIGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHsgZGF5OiAnbnVtZXJpYycgfSkuZm9ybWF0KFxuICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogUmVuZGVyIHBsYWNlaG9sZGVycyBmb3IgZXZlbnRzIHRoYXQgb2NjdXIgdG9kYXkgc28gdGhhdCB0aGUgY2VsbCBoZWlnaHQgaXMgYWNjb3JkaW5nIHRvIGRheU1heEV2ZW50cy4gKi99XG4gICAgICAgICAge3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtgZW1wdHktJHtyb3dJbmRleH1gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVsyMHB4XSB3LWZ1bGxcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cblxuICAgICAgICAgIHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuICAgICAgICAgIHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgbXQtMVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGFnLW92ZXItcm9sZVxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgK3toaWRkZW5FdmVudHNDb3VudH0ge3QoJ21vcmUnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZURyb3BwYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuICBpZDogc3RyaW5nXG4gIHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuICBkYXRlOiBkYXlqcy5EYXlqc1xuICBob3VyPzogbnVtYmVyXG4gIG1pbnV0ZT86IG51bWJlclxuICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG4gIGlkLFxuICB0eXBlLFxuICBkYXRlLFxuICBob3VyLFxuICBtaW51dGUsXG4gIHJlc291cmNlSWQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG4gIGNvbnN0IHsgb25DZWxsQ2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCwgZGlzYWJsZUNlbGxDbGljayB9ID1cbiAgICB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG4gICAgICBvbkNlbGxDbGljazogc3RhdGUub25DZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2s6IHN0YXRlLmRpc2FibGVDZWxsQ2xpY2ssXG4gICAgfSkpXG5cbiAgY29uc3QgeyBpc092ZXIsIHNldE5vZGVSZWYgfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQsXG4gICAgZGF0YToge1xuICAgICAgdHlwZSxcbiAgICAgIGRhdGUsXG4gICAgICBob3VyLFxuICAgICAgbWludXRlLFxuICAgICAgcmVzb3VyY2VJZCxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuICAgIGxldCBlbmREYXRlID0gc3RhcnREYXRlLmNsb25lKClcbiAgICBpZiAoaG91ciAhPT0gdW5kZWZpbmVkICYmIG1pbnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmREYXRlID0gZW5kRGF0ZS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuICAgIH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmREYXRlID0gZW5kRGF0ZS5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuICAgIH0gZWxzZSB7XG4gICAgICBlbmREYXRlID0gZW5kRGF0ZS5ob3VyKDIzKS5taW51dGUoNTkpIC8vIG1vbnRoIHZpZXcgZnVsbCBkYXlcbiAgICB9XG5cbiAgICBvbkNlbGxDbGljayhzdGFydERhdGUsIGVuZERhdGUpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBjbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG4gICAgPGRpdlxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICdiZy1hY2NlbnQnLFxuICAgICAgICBkaXNhYmxlQ2VsbENsaWNrID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhcidcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFdlZWtBbGxEYXlSb3cgfSBmcm9tICcuL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi93ZWVrLWhlYWRlcidcbmltcG9ydCB7IFdlZWtUaW1lR3JpZCB9IGZyb20gJy4vd2Vlay10aW1lLWdyaWQnXG4vLyBBZGQgd2Vla09mWWVhciBwbHVnaW4gdG8gZGF5anNcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuXG5jb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwid2Vlay12aWV3XCI+XG4gICAgICB7LyogV2VlayBoZWFkZXIgcm93IC0gZml4ZWQgKi99XG4gICAgICA8V2Vla0hlYWRlciBjbGFzc05hbWU9XCJoLVs1cmVtXVwiIC8+XG5cbiAgICAgIHsvKiBTY3JvbGxhYmxlIHRpbWUgZ3JpZCAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggb3ZlcmZsb3ctYXV0byBoLVtjYWxjKDEwMCUtNXJlbSldXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXNjcm9sbC1hcmVhXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAtIGR5bmFtaWMgaGVpZ2h0IGJhc2VkIG9uIGNvbnRlbnQgKi99XG4gICAgICAgIDxXZWVrQWxsRGF5Um93IC8+XG4gICAgICAgIDxXZWVrVGltZUdyaWQgLz5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWVrVmlld1xuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBXZWVrQWxsRGF5Um93OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBmaXJzdERheU9mV2VlaywgdCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gd2Vla0RheXNbMF1cbiAgY29uc3QgZW5kT2ZXZWVrID0gd2Vla0RheXNbNl1cblxuICAvLyBHZXQgZXZlbnRzIHRoYXQgbWlnaHQgb3ZlcmxhcCB3aXRoIHRoaXMgd2VlayAoZXhwYW5kIHNlYXJjaCByYW5nZSlcbiAgY29uc3QgZXhwYW5kZWRTdGFydERhdGUgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBiZWZvcmUgd2VlayBzdGFydFxuICBjb25zdCBleHBhbmRlZEVuZERhdGUgPSBlbmRPZldlZWsuYWRkKDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBhZnRlciB3ZWVrIGVuZFxuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGV4cGFuZGVkU3RhcnREYXRlLCBleHBhbmRlZEVuZERhdGUpXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gIGNvbnN0IGFsbERheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYWxsRGF5KVxuXG4gIC8vIFByb2Nlc3MgYW5kIGxheW91dCBhbGwtZGF5IGV2ZW50cyB0byBhdm9pZCBvdmVybGFwcGluZ1xuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlIGFuZCB0aGVuIGJ5IGR1cmF0aW9uIChsb25nZXIgZXZlbnRzIGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIEZpcnN0IGNvbXBhcmUgYnkgc3RhcnQgZGF0ZVxuICAgICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc3RhcnQgZGF0ZXMgYXJlIHRoZSBzYW1lLCBsb25nZXIgZXZlbnRzIGNvbWUgZmlyc3RcbiAgICAgIGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydClcbiAgICAgIGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydClcbiAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3NcbiAgICBjb25zdCByb3dzOiB7IGVuZDogZGF5anMuRGF5anM7IGV2ZW50OiBDYWxlbmRhckV2ZW50IH1bXVtdID0gW11cbiAgICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICBzb3J0ZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBkYXlzIHRoaXMgZXZlbnQgc3BhbnNcbiAgICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBldmVudC5zdGFydC5pc0JlZm9yZShhZGp1c3RlZFN0YXJ0T2ZXZWVrKVxuICAgICAgICA/IGFkanVzdGVkU3RhcnRPZldlZWtcbiAgICAgICAgOiBldmVudC5zdGFydFxuICAgICAgY29uc3QgZXZlbnRFbmQgPSBldmVudC5lbmQuaXNBZnRlcihlbmRPZldlZWspID8gZW5kT2ZXZWVrIDogZXZlbnQuZW5kXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBhcyBwZXJjZW50YWdlIG9mIHRoZSB3ZWVrIHdpZHRoXG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGV2ZW50U3RhcnQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuZERheUluZGV4ID0gTWF0aC5taW4oNiwgZXZlbnRFbmQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JykpXG5cbiAgICAgIGNvbnN0IGxlZnQgPSAoc3RhcnREYXlJbmRleCAvIDcpICogMTAwXG4gICAgICBjb25zdCB3aWR0aCA9ICgoZW5kRGF5SW5kZXggLSBzdGFydERheUluZGV4ICsgMSkgLyA3KSAqIDEwMFxuXG4gICAgICAvLyBGaW5kIGEgcm93IHdoZXJlIHRoaXMgZXZlbnQgY2FuIGZpdFxuICAgICAgbGV0IHJvd0luZGV4ID0gMFxuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGNhbiBmaXQgaW4gdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tyb3dJbmRleF1cbiAgICAgICAgICBjb25zdCBjYW5GaXQgPSByb3cuZXZlcnkoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGV2ZW50U3RhcnQuaXNBZnRlcihpdGVtLmVuZCkgfHxcbiAgICAgICAgICAgICAgZXZlbnRFbmQuaXNCZWZvcmUoaXRlbS5ldmVudC5zdGFydClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGNhbkZpdCkge1xuICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBldmVudCB0byB0aGUgcm93XG4gICAgICByb3dzW3Jvd0luZGV4XS5wdXNoKHsgZW5kOiBldmVudEVuZCwgZXZlbnQgfSlcblxuICAgICAgLy8gQWRkIHByb2Nlc3NlZCBldmVudCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzLCBhZGp1c3RlZFN0YXJ0T2ZXZWVrLCBlbmRPZldlZWtdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMSByZWxhdGl2ZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstYWxsLWRheS1yb3dcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xNiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXIteCBib3JkZXItYiBweC0xIG1pbi1oLTE2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAge3QoJ2FsbERheScpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERyb3BwYWJsZSBjZWxscyBmb3IgZWFjaCBkYXkgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgaWQ9e2BhbGwtZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1mdWxsIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItciBib3JkZXItYlwiXG4gICAgICAgIC8+XG4gICAgICApKX1cblxuICAgICAgey8qIEFsbC1kYXkgZXZlbnQgYmxvY2tzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcC0xIGNvbC1zcGFuLTcgY29sLXN0YXJ0LTJcIj5cbiAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGFsbC1kYXktY29udGFpbmVyLSR7ZXZlbnQuaWR9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH1weGAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1jbGlwIHRleHQteHMgYWJzb2x1dGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW50ZXJmYWNlIFdlZWtIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0hlYWRlcjogUmVhY3QuRkM8V2Vla0hlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50RGF0ZSxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHNlbGVjdERhdGUsXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgdCxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cbiAgcmV0dXJuIChcbiAgICAvLyBjc3MgZ3JpZCBoZWFkZXIgd2l0aCBsZWYgY29ybmVyIGNlbGwgc2hvcnRlciB0aGFuIHRoZSByZXN0XG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLVthdXRvXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl0gZ3JpZC1yb3dzLTEnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay1oZWFkZXJcIlxuICAgID5cbiAgICAgIHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc3Bhbi0xIHctMTYgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci14IGJvcmRlci1iIHAtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQb3NpdGlvbmVkRXZlbnRbXT4oKCkgPT4ge1xuICAgIGxldCBldmVudHNGb3JEYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgICBkYXkuc3RhcnRPZignZGF5JyksXG4gICAgICBkYXkuZW5kT2YoJ2RheScpXG4gICAgKVxuXG4gICAgLy8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG4gICAgZXZlbnRzRm9yRGF5ID0gZXZlbnRzRm9yRGF5XG4gICAgICAuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG4gICAgICAudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuICAgIGlmIChldmVudHNGb3JEYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICAvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgIGNvbnN0IGNsdXN0ZXJzOiBDYWxlbmRhckV2ZW50W11bXSA9IFtdXG4gICAgbGV0IGN1cnJlbnRDbHVzdGVyOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICAgIGxldCBsYXN0RXZlbnRFbmQ6IGRheWpzLkRheWpzIHwgbnVsbCA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50c0ZvckRheSkge1xuICAgICAgaWYgKGxhc3RFdmVudEVuZCAmJiBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKGxhc3RFdmVudEVuZCkpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRDbHVzdGVyID0gW11cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRDbHVzdGVyLnB1c2goZXZlbnQpXG4gICAgICBsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmRcbiAgICAgICAgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpXG4gICAgICAgIDogZXZlbnQuZW5kXG4gICAgfVxuICAgIGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG4gICAgICBjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMjogRm9yIGVhY2ggY2x1c3RlciwgdXNlIGEgbW9yZSBpbnRlbGxpZ2VudCBjb2x1bW4gYXNzaWdubWVudFxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuICAgIGZvciAoY29uc3QgY2x1c3RlciBvZiBjbHVzdGVycykge1xuICAgICAgaWYgKGNsdXN0ZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIFNpbmdsZSBldmVudCB0YWtlcyBmdWxsIHdpZHRoXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5ob3VyKCkgKyBldmVudC5zdGFydC5taW51dGUoKSAvIDYwXG4gICAgICAgIGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmhvdXIoKSArIGV2ZW50LmVuZC5taW51dGUoKSAvIDYwXG4gICAgICAgIGlmIChlbmRUaW1lIDwgc3RhcnRUaW1lKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGVuZHMgb24gdGhlIG5leHQgZGF5LCBzZXQgZW5kIHRpbWUgdG8gMjQgaG91cnNcbiAgICAgICAgICBlbmRUaW1lID0gMjRcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIHRvcCwgaGVpZ2h0IH0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIE11bHRpcGxlIGV2ZW50cyAtIHVzZSBsYXllcmVkIHBvc2l0aW9uaW5nIGFwcHJvYWNoXG4gICAgICAvLyBTb3J0IGJ5IGR1cmF0aW9uIChsb25nZXN0IGZpcnN0KSwgdGhlbiBieSBzdGFydCB0aW1lXG4gICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhRHVyYXRpb24gPSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuICAgICAgICBjb25zdCBiRHVyYXRpb24gPSBiLmVuZC5kaWZmKGIuc3RhcnQsICdtaW51dGUnKVxuXG4gICAgICAgIC8vIExvbmdlciBldmVudHMgZmlyc3RcbiAgICAgICAgaWYgKGFEdXJhdGlvbiAhPT0gYkR1cmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJEdXJhdGlvbiAtIGFEdXJhdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgc2FtZSBkdXJhdGlvbiwgZWFybGllciBzdGFydCB0aW1lIGZpcnN0XG4gICAgICAgIHJldHVybiBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICAgIH0pXG5cbiAgICAgIC8vIFByb2Nlc3MgZXZlbnRzIHdpdGggbGF5ZXJlZCBwb3NpdGlvbmluZ1xuICAgICAgY29uc3QgdG90YWxFdmVudHMgPSBzb3J0ZWRFdmVudHMubGVuZ3RoXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBkeW5hbWljIG9mZnNldCBiYXNlZCBvbiBudW1iZXIgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgICAvLyBGZXdlciBldmVudHMgPSBsYXJnZXIgaW5kaXZpZHVhbCBvZmZzZXRzLCBtb3JlIGV2ZW50cyA9IHNtYWxsZXIgb2Zmc2V0c1xuICAgICAgbGV0IG1heE9mZnNldDogbnVtYmVyXG4gICAgICBpZiAodG90YWxFdmVudHMgPT09IDIpIHtcbiAgICAgICAgbWF4T2Zmc2V0ID0gMjUgLy8gMjUlIG9mZnNldCBmb3IgMiBldmVudHNcbiAgICAgIH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDMpIHtcbiAgICAgICAgbWF4T2Zmc2V0ID0gNTAgLy8gNTAlIHRvdGFsIGZvciAzIGV2ZW50cyAoMjUlIGVhY2gpXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSA0KSB7XG4gICAgICAgIG1heE9mZnNldCA9IDYwIC8vIDYwJSB0b3RhbCBmb3IgNCBldmVudHMgKDIwJSBlYWNoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF4T2Zmc2V0ID0gNzAgLy8gNzAlIHRvdGFsIGZvciA1KyBldmVudHNcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0UGVyRXZlbnQgPSB0b3RhbEV2ZW50cyA+IDEgPyBtYXhPZmZzZXQgLyAodG90YWxFdmVudHMgLSAxKSA6IDBcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBzb3J0ZWRFdmVudHNbaV1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuXG4gICAgICAgIGlmIChlbmRUaW1lIDwgc3RhcnRUaW1lKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGVuZHMgb24gdGhlIG5leHQgZGF5LCBzZXQgZW5kIHRpbWUgdG8gMjQgaG91cnNcbiAgICAgICAgICBlbmRUaW1lID0gMjRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lXG4gICAgICAgIGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyAyNCkgKiAxMDBcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyAyNCkgKiAxMDBcblxuICAgICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb25pbmcgYmFzZWQgb24gbGF5ZXIgYW5kIHRvdGFsIGV2ZW50c1xuICAgICAgICBsZXQgbGVmdDogbnVtYmVyXG4gICAgICAgIGxldCB3aWR0aDogbnVtYmVyXG4gICAgICAgIGxldCB6SW5kZXg6IG51bWJlclxuXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgLy8gRmlyc3QgZXZlbnQgKGxvbmdlc3QpIHRha2VzIGZ1bGwgd2lkdGggYXQgYm90dG9tXG4gICAgICAgICAgbGVmdCA9IDBcbiAgICAgICAgICB3aWR0aCA9IDEwMFxuICAgICAgICAgIHpJbmRleCA9IDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTdWJzZXF1ZW50IGV2ZW50cyBhcmUgb2Zmc2V0IGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRvdGFsIGV2ZW50IGNvdW50XG4gICAgICAgICAgbGVmdCA9IG9mZnNldFBlckV2ZW50ICogaVxuICAgICAgICAgIHdpZHRoID0gMTAwIC0gbGVmdCAvLyBSZW1haW5pbmcgd2lkdGhcbiAgICAgICAgICB6SW5kZXggPSBpICsgMSAvLyBIaWdoZXIgei1pbmRleCBmb3IgZXZlbnRzIG9uIHRvcFxuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgdG9wLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICB6SW5kZXgsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xuICB9LCBbZGF5LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2VdKVxuXG4gIHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXlFdmVudHNMYXllclByb3BzIHtcbiAgZGF5OiBkYXlqcy5EYXlqcyAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgbGF5ZXIgcmVwcmVzZW50c1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEYXlFdmVudHNMYXllcjogUmVhY3QuRkM8RGF5RXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuICBkYXksXG4gICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlUHJvY2Vzc2VkRGF5RXZlbnRzKHsgZGF5IH0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cbiAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQtMCB6LTEwXCJcbiAgICA+XG4gICAgICB7dG9kYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRLZXkgPSBgZXZlbnQtJHtldmVudC5pZH0tJHtpbmRleH0tJHtkYXkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2V2ZW50S2V5fVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LXZpZXcvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5pbnRlcmZhY2UgV2Vla0RheUNvbFByb3BzIHtcbiAgZGF5OiBkYXlqcy5EYXlqcyAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtEYXlDb2w6IFJlYWN0LkZDPFdlZWtEYXlDb2xQcm9wcz4gPSAoeyBkYXkgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktY29sLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICBjbGFzc05hbWU9XCJjb2wtc3Bhbi0xIHJlbGF0aXZlIGdyaWQgZ3JpZC1yb3dzLTI0IGJvcmRlci1yXCJcbiAgICA+XG4gICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSB0aW1lLmhvdXIoKVxuICAgICAgICBjb25zdCBjZWxsRGF0ZSA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgIGtleT17YCR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9YH1cbiAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9YH1cbiAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCByZWxhdGl2ZSB6LTEwIGgtWzYwcHhdIGN1cnNvci1wb2ludGVyIGJvcmRlci1iJ1xuICAgICAgICAgICAgKX1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9KX1cblxuICAgICAgey8qIEV2ZW50IGJsb2NrcyBsYXllciAqL31cbiAgICAgIDxEYXlFdmVudHNMYXllclxuICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWV2ZW50cy0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICBkYXk9e2RheX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBXZWVrRGF5Q29sIH0gZnJvbSAnLi93ZWVrLWRheS1jb2wnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5leHBvcnQgY29uc3QgV2Vla1RpbWVHcmlkOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG5cbiAgLy8gRmluZCBpZiBjdXJyZW50IGRheSBpcyBpbiB0aGUgZGlzcGxheWVkIHdlZWtcbiAgY29uc3QgdG9kYXlJbmRleCA9IHdlZWtEYXlzLmZpbmRJbmRleCgoZGF5KSA9PiBkYXkuaXNTYW1lKGRheWpzKCksICdkYXknKSlcbiAgY29uc3QgaXNDdXJyZW50V2VlayA9IHRvZGF5SW5kZXggIT09IC0xXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstdGltZS1ncmlkXCJcbiAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGgtZnVsbCBncmlkIGdyaWQtY29scy1bYXV0b19yZXBlYXQoNywxZnIpXSBncmlkLXJvd3MtW3JlcGVhdCgyNCxtaW5tYXgoNjBweCwgMWZyKSldXCJcbiAgICA+XG4gICAgICB7LyogVGltZSBsYWJlbHMgY29sdW1uIC0gZml4ZWQgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWxhYmVsc1wiXG4gICAgICAgIGNsYXNzTmFtZT1cInotMTAgY29sLXNwYW4tMSB3LTE2IGdyaWQgZ3JpZC1yb3dzLTI0IGJvcmRlci14XCJcbiAgICAgID5cbiAgICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17dGltZS5mb3JtYXQoJ0hIOm1tJyl9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstdGltZS1ob3VyLSR7dGltZS5mb3JtYXQoJ0hIJyl9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBweC0xIHRleHQtcmlnaHQgdGV4dC1bMTBweF0gc206dGV4dC14c1wiPlxuICAgICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgICAgfSkuZm9ybWF0KHRpbWUudG9EYXRlKCkpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGNvbHVtbnMgd2l0aCB0aW1lIHNsb3RzICovfVxuICAgICAge3dlZWtEYXlzLm1hcCgoZGF5KSA9PiAoXG4gICAgICAgIDxXZWVrRGF5Q29sIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBkYXk9e2RheX0gLz5cbiAgICAgICkpfVxuXG4gICAgICB7LyogQ3VycmVudCB0aW1lIGluZGljYXRvciAqL31cbiAgICAgIHtpc0N1cnJlbnRXZWVrICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIHotNDBcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICB0b3A6IGAkeyhkYXlqcygpLmhvdXIoKSArIGRheWpzKCkubWludXRlKCkgLyA2MCkgKiA2MH1weGAsXG4gICAgICAgICAgICBsZWZ0OiBgY2FsYyh2YXIoLS1zcGFjaW5nKSAqIDE2ICsgJHt0b2RheUluZGV4fSAqICgxMDAlIC0gdmFyKC0tc3BhY2luZykgKiAxNikgLyA3KWAsXG4gICAgICAgICAgICB3aWR0aDogYGNhbGMoKDEwMCUgLSB2YXIoLS1zcGFjaW5nKSAqIDE2KSAvIDcpYCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgYm9yZGVyLXQgYm9yZGVyLXJlZC01MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTEgbWwtMSBoLTIgdy0yIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwnXG5pbXBvcnQgeyBEYXlBbGxEYXlSb3cgfSBmcm9tICcuL2RheS1hbGwtZGF5LXJvdydcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi9kYXktZXZlbnRzLWxheWVyJ1xuaW1wb3J0IHsgRGF5SGVhZGVyIH0gZnJvbSAnLi9kYXktaGVhZGVyJ1xuaW1wb3J0IHsgRGF5VGltZUNvbCB9IGZyb20gJy4vZGF5LXRpbWUtY29sJ1xuXG4vLyBGb3IgbW9yZSBncmFudWxhciB0aW1lIHNsb3RzLCB3ZSdsbCBkaXZpZGUgZWFjaCBob3VyIGludG8gMTUtbWludXRlIHNlZ21lbnRzXG5jb25zdCB0aW1lU2VnbWVudHMgPSBbMCwgMTUsIDMwLCA0NV1cblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmNvbnN0IERheVZpZXcgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcbiAgY29uc3QgY2VsbERhdGUgPSBjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImRheS12aWV3XCIgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIj5cbiAgICAgIHsvKiBEYXkgaGVhZGVyICovfVxuICAgICAgPERheUhlYWRlciBjbGFzc05hbWU9XCJoLVszcmVtXVwiIC8+XG5cbiAgICAgIHsvKiBUaW1lIGdyaWQgd2l0aG91dCBzY3JvbGxiYXIgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1zY3JvbGwtYXJlYVwiXG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG92ZXJmbG93LXktYXV0byBoLVtjYWxjKDEwMCUtM3JlbSldXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAqL31cbiAgICAgICAgPERheUFsbERheVJvdyAvPlxuXG4gICAgICAgIHsvKiBTZXQgYSBmaXhlZCBoZWlnaHQgY29udGFpbmVyIHRoYXQgbWF0Y2hlcyBleGFjdGx5IHRoZSB0b3RhbCBoZWlnaHQgb2YgYWxsIGhvdXIgYmxvY2tzICovfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktdGltZS1ncmlkXCJcbiAgICAgICAgICBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy04IGRpdmlkZS14IGJvcmRlci14XCJcbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IGAke2hvdXJzLmxlbmd0aCAqIDYwfXB4YCB9fVxuICAgICAgICA+XG4gICAgICAgICAgey8qIFRpbWUgbGFiZWxzIGNvbHVtbiAqL31cbiAgICAgICAgICA8RGF5VGltZUNvbCBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xXCIgLz5cblxuICAgICAgICAgIHsvKiBEYXkgY29sdW1uIHdpdGggZXZlbnRzICovfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWV2ZW50cy1jb2x1bW5cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBoLWZ1bGwgbWQ6Y29sLXNwYW4tN1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgey8qIEJhY2tncm91bmQgZ3JpZCBmb3IgdGltZSBzbG90cyAtIGxvd2VzdCBsYXllciAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYmFja2dyb3VuZC1ncmlkXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCB6LTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aG91cnMubWFwKChob3VyLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9LSR7aG91ci5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICAgICdISCdcbiAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7LyogMTUtbWludXRlIG1hcmtlciBsaW5lcyAqL31cbiAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BiZy0ke2hvdXIuZm9ybWF0KCdISCcpfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyIGFic29sdXRlIHctZnVsbCBib3JkZXItdCBib3JkZXItZGFzaGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyB0b3A6IGAke2luZGV4ICogNjAgKyBtaW51dGVzfXB4YCB9fVxuICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEludGVyYWN0aXZlIGxheWVyIGZvciB0aW1lIHNsb3RzIC0gbWlkZGxlIGxheWVyIHdpdGggbm8gYm9yZGVycyAqL31cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktaW50ZXJhY3RpdmUtbGF5ZXJcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1hdXRvIGFic29sdXRlIGluc2V0LTAgei0xMFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtob3Vycy5tYXAoKHRpbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gdGltZS5ob3VyKClcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtgJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2B0aW1lLWNlbGwtJHtjZWxsRGF0ZX0tJHt0aW1lLmZvcm1hdCgnSEgnKX0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdGltZS1jZWxsLSR7Y2VsbERhdGV9LSR7dGltZS5mb3JtYXQoJ0hIJyl9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHRpbWUtY2VsbC0ke2NlbGxEYXRlfS0ke3RpbWUuZm9ybWF0KCdISCcpfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQsIFByb2Nlc3NlZENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgY29uc3QgRGF5QWxsRGF5Um93ID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IGN1cnJlbnQgZGF5J3MgZXZlbnRzIC0gdGhpcyB3aWxsIHJlZnJlc2ggYXV0b21hdGljYWxseSB3aGVuIHN0b3JlIHVwZGF0ZXNcbiAgLy8gYmVjYXVzZSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgaXMgYSBzZWxlY3RvciBmdW5jdGlvbiBmcm9tIHRoZSBzdG9yZSB0aGF0IHJ1bnMgd2hlbmV2ZXIgZXZlbnRzIGNoYW5nZVxuICBjb25zdCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG4gICAgY3VycmVudERhdGUuZW5kT2YoJ2RheScpXG4gIClcblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzXG4gIGNvbnN0IHsgYWxsRGF5RXZlbnRzIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBPbmx5IGV2ZW50cyBleHBsaWNpdGx5IG1hcmtlZCBhcyBhbGxEYXkgc2hvdWxkIGJlIGluIHRoZSBhbGwtZGF5IHNlY3Rpb25cbiAgICBjb25zdCBhbGxEYXlFdnRzID0gZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmFsbERheSlcblxuICAgIC8vIFJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcbiAgICBjb25zdCByZWd1bGFyRXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiAhZXZlbnQuYWxsRGF5KVxuXG4gICAgcmV0dXJuIHsgYWxsRGF5RXZlbnRzOiBhbGxEYXlFdnRzLCByZWd1bGFyRXZlbnRzOiByZWd1bGFyRXZ0cyB9XG4gIH0sIFtkYXlFdmVudHNdKSAvLyBPbmx5IGRlcGVuZCBvbiB0aGUgZGF5RXZlbnRzIHdoaWNoIGlzIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5XG5cbiAgLy8gUHJvY2VzcyBhbGwtZGF5IGV2ZW50cyBmb3IgZGlzcGxheVxuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyAoaWYgbmVlZGVkKVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3MgZm9yIHN0YWNraW5nXG4gICAgY29uc3Qgcm93czogeyBldmVudDogQ2FsZW5kYXJFdmVudCB9W11bXSA9IFtdXG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRDYWxlbmRhckV2ZW50W10gPSBbXVxuXG4gICAgc29ydGVkRXZlbnRzLmZvckVhY2goKGV2ZW50LCByb3dJbmRleCkgPT4ge1xuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbiBkYXkgdmlldywgd2UgY2FuIHBsYWNlIG9uZSBldmVudCBwZXIgcm93IGFzIHRoZXkgZG9uJ3Qgb3ZlcmxhcCBob3Jpem9udGFsbHlcbiAgICAgICAgICAvLyBUaGlzIGlzIHNpbXBsZXIgdGhhbiB3ZWVrIHZpZXcgd2hlcmUgd2UgbmVlZGVkIHRvIGNoZWNrIGZvciBvdmVybGFwc1xuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgdG8gdGhlIHJvd1xuICAgICAgcm93c1tyb3dJbmRleF0ucHVzaCh7IGV2ZW50IH0pXG5cbiAgICAgIC8vIEFkZCBwcm9jZXNzZWQgZXZlbnQgd2l0aCBjb3JyZWN0IHBvc2l0aW9uaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBsZWZ0OiAwLFxuICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc2VkQWxsRGF5RXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBhbGxEYXlSb3dzQ291bnQ6IE1hdGgubWF4KDEsIHJvd3MubGVuZ3RoKSwgLy8gQXQgbGVhc3QgMSByb3csIGV2ZW4gaWYgZW1wdHlcbiAgICB9XG4gIH0sIFthbGxEYXlFdmVudHNdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYWxsLWRheS1yb3dcIlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtOCBib3JkZXItYiBib3JkZXIteFwiXG4gICAgPlxuICAgICAgey8qIExlZnQgbGFiZWwgZm9yIGFsbC1kYXkgZXZlbnRzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJvcmRlci1yIHByLTIgbWQ6Y29sLXNwYW4tMVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14c1wiPlxuICAgICAgICAgIHt0KCdhbGxEYXknKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBBbGwtZGF5IGV2ZW50cyBjb250YWluZXIgd2l0aCBkeW5hbWljIGhlaWdodCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBtZDpjb2wtc3Bhbi03IFwiPlxuICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgIGlkPXtgYWxsLWRheS0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgdHlwZT1cImRheS1jZWxsXCJcbiAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgdy1mdWxsIGN1cnNvci1wb2ludGVyIG1pbi1oLTEwIGZsZXggZmxleC1jb2xcIlxuICAgICAgICA+XG4gICAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGtleT17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCArICdweCcgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWRheS0ke2V2ZW50LmlkfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1jbGlwIHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IGBjYWxjKDEwMCUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L0Ryb3BwYWJsZUNlbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIERheUhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEYXlIZWFkZXI6IFJlYWN0LkZDPERheUhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLWIgcC0yIGJvcmRlci14JyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcbiAgICAgICAgICAgIGlzVG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgJyl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgVG9kYXlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmludGVyZmFjZSBEYXlUaW1lQ29sUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheVRpbWVDb2w6IFJlYWN0LkZDPERheVRpbWVDb2xQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cImRheS10aW1lLWNvbFwiXG4gICAgICBjbGFzc05hbWU9e2Bjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xICR7Y2xhc3NOYW1lfWB9XG4gICAgPlxuICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgRGF0ZVBpY2tlcixcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nRm9vdGVyLFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ1RpdGxlLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBDb250ZW50LFxuICBUb29sdGlwUHJvdmlkZXIsXG4gIFRvb2x0aXBUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmNvbnN0IGNvbG9yT3B0aW9ucyA9IFtcbiAgeyB2YWx1ZTogJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnLCBsYWJlbDogJ0JsdWUnIH0sXG4gIHsgdmFsdWU6ICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnLCBsYWJlbDogJ0dyZWVuJyB9LFxuICB7IHZhbHVlOiAnYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAnLCBsYWJlbDogJ1B1cnBsZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXJlZC0xMDAgdGV4dC1yZWQtODAwJywgbGFiZWw6ICdSZWQnIH0sXG4gIHsgdmFsdWU6ICdiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMCcsIGxhYmVsOiAnWWVsbG93JyB9LFxuICB7IHZhbHVlOiAnYmctcGluay0xMDAgdGV4dC1waW5rLTgwMCcsIGxhYmVsOiAnUGluaycgfSxcbiAgeyB2YWx1ZTogJ2JnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwJywgbGFiZWw6ICdJbmRpZ28nIH0sXG4gIHsgdmFsdWU6ICdiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDAnLCBsYWJlbDogJ0FtYmVyJyB9LFxuICB7IHZhbHVlOiAnYmctZW1lcmFsZC0xMDAgdGV4dC1lbWVyYWxkLTgwMCcsIGxhYmVsOiAnRW1lcmFsZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXNreS0xMDAgdGV4dC1za3ktODAwJywgbGFiZWw6ICdTa3knIH0sXG4gIHsgdmFsdWU6ICdiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMCcsIGxhYmVsOiAnVmlvbGV0JyB9LFxuICB7IHZhbHVlOiAnYmctcm9zZS0xMDAgdGV4dC1yb3NlLTgwMCcsIGxhYmVsOiAnUm9zZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXRlYWwtMTAwIHRleHQtdGVhbC04MDAnLCBsYWJlbDogJ1RlYWwnIH0sXG4gIHsgdmFsdWU6ICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCcsIGxhYmVsOiAnT3JhbmdlJyB9LFxuXVxuXG5pbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuICBzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgc2VsZWN0ZWREYXRlPzogZGF5anMuRGF5anMgfCBudWxsXG4gIG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcbiAgc2VsZWN0ZWRFdmVudCxcbiAgc2VsZWN0ZWREYXRlLFxuICBvbkNsb3NlLFxuICBvblVwZGF0ZSxcbiAgb25EZWxldGUsXG4gIG9uQWRkLFxufSkgPT4ge1xuICBjb25zdCB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cbiAgY29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuICAgIChjb250ZXh0KSA9PiAoe1xuICAgICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcbiAgICAgIHQ6IGNvbnRleHQudCxcbiAgICB9KVxuICApXG5cbiAgY29uc3Qgc3RhcnQgPSBzZWxlY3RlZEV2ZW50Py5zdGFydFxuICBjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmRcblxuICAvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gIGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuICAgID8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG4gICAgOiBudWxsXG5cbiAgLy8gRm9ybSBkZWZhdWx0IHZhbHVlc1xuICBjb25zdCBkZWZhdWx0U3RhcnREYXRlID0gc2VsZWN0ZWREYXRlPy50b0RhdGUoKSB8fCBuZXcgRGF0ZSgpXG4gIGNvbnN0IGRlZmF1bHRFbmREYXRlID1cbiAgICBzZWxlY3RlZERhdGU/LmFkZCgxLCAnaG91cicpLnRvRGF0ZSgpIHx8IGRheWpzKCkuYWRkKDEsICdob3VyJykudG9EYXRlKClcblxuICAvLyBGb3JtIHN0YXRlXG4gIGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShcbiAgICBzdGFydD8udG9EYXRlKCkgfHwgZGVmYXVsdFN0YXJ0RGF0ZVxuICApXG4gIGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZD8udG9EYXRlKCkgfHwgZGVmYXVsdEVuZERhdGUpXG4gIGNvbnN0IFtpc0FsbERheSwgc2V0SXNBbGxEYXldID0gdXNlU3RhdGUoc2VsZWN0ZWRFdmVudD8uYWxsRGF5IHx8IGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRDb2xvciwgc2V0U2VsZWN0ZWRDb2xvcl0gPSB1c2VTdGF0ZShcbiAgICBzZWxlY3RlZEV2ZW50Py5jb2xvciB8fCBjb2xvck9wdGlvbnNbMF0udmFsdWVcbiAgKVxuXG4gIC8vIFRpbWUgc3RhdGVcbiAgY29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0ID8gc3RhcnQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdFN0YXJ0RGF0ZSkuZm9ybWF0KCdISDptbScpXG4gIClcbiAgY29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoXG4gICAgZW5kID8gZW5kLmZvcm1hdCgnSEg6bW0nKSA6IGRheWpzKGRlZmF1bHRFbmREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuXG4gIC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuICBjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG4gICAgdGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICBsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG4gIH0pXG5cbiAgLy8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuICBjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG4gICAgcmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuICB9KVxuXG4gIC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG4gIGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldFN0YXJ0RGF0ZShkYXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBzZXRFbmREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGZvcm0gdmFsdWVzIHdoZW4gaW5wdXQgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IChcbiAgICBlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcbiAgICBzZXRGb3JtVmFsdWVzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKVxuICB9XG5cbiAgLy8gSGFuZGxlIHRpbWUgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVUaW1lQ2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIGlzU3RhcnQ6IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgY29uc3QgdGltZVZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICBpZiAoaXNTdGFydCkge1xuICAgICAgc2V0U3RhcnRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RW5kVGltZSh0aW1lVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBSZXNldCBlbmQgdGltZSB3aGVuIGFsbCBkYXkgaXMgdG9nZ2xlZCB0byBvblxuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc2V0RW5kVGltZSgnMjM6NTknKVxuICAgIH1cbiAgfSwgW2lzQWxsRGF5XSlcblxuICAvLyBIYW5kbGUgZm9ybSBzdWJtaXNzaW9uXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIENyZWF0ZSBmdWxsIGRhdGV0aW1lIG9iamVjdHMgYnkgY29tYmluaW5nIGRhdGUgYW5kIHRpbWVcbiAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgY29uc3QgW2VuZEhvdXJzLCBlbmRNaW51dGVzXSA9IGVuZFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG4gICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgIGxldCBlbmREYXRlVGltZSA9IGRheWpzKGVuZERhdGUpLmhvdXIoZW5kSG91cnMpLm1pbnV0ZShlbmRNaW51dGVzKVxuXG4gICAgLy8gRm9yIGFsbC1kYXkgZXZlbnRzLCBzZXQgYXBwcm9wcmlhdGUgdGltZXNcbiAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICBlbmREYXRlVGltZSA9IGVuZERhdGVUaW1lLmhvdXIoMjMpLm1pbnV0ZSg1OSlcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICBpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG4gICAgICB0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcbiAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgY29sb3I6IHNlbGVjdGVkQ29sb3IsXG4gICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2dcbiAgICAgICAgb3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuICAgICAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgICAgIGVuZDogZW5kRGF0ZVRpbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICAgICAgYWxsRGF5OiBpc0FsbERheSxcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkFkZD8uKGV2ZW50RGF0YSlcbiAgICB9XG5cbiAgICBvbkNsb3NlKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZSA9ICgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnRcbiAgICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG4gICAgICAgIC8vIFNob3cgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBkaWFsb2dcbiAgICAgICAgb3BlbkRlbGV0ZURpYWxvZyhzZWxlY3RlZEV2ZW50KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uRGVsZXRlPy4oc2VsZWN0ZWRFdmVudClcbiAgICAgIG9uQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVJSdWxlQ2hhbmdlID0gKG5ld1JSdWxlOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB7XG4gICAgaWYgKG5ld1JSdWxlKSB7XG4gICAgICAvLyBDcmVhdGUgZHRzdGFydCB3aXRoIHRoZSBzYW1lIGxvZ2ljIGFzIGluIGhhbmRsZVN1Ym1pdFxuICAgICAgY29uc3QgW3N0YXJ0SG91cnMsIHN0YXJ0TWludXRlc10gPSBzdGFydFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICAgICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBkdHN0YXJ0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiBSUnVsZU9wdGlvbnMgYXMgYSBEYXRlIG9iamVjdFxuICAgICAgY29uc3QgY29tcGxldGVScnVsZTogUlJ1bGVPcHRpb25zID0ge1xuICAgICAgICAuLi5uZXdSUnVsZSxcbiAgICAgICAgZHRzdGFydDogc3RhcnREYXRlVGltZS50b0RhdGUoKSwgLy8gQ29udmVydCBkYXlqcyB0byBEYXRlXG4gICAgICB9XG4gICAgICBzZXRScnVsZShjb21wbGV0ZVJydWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRScnVsZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGVuZCBkYXRlIGlzIG5vdCBiZWZvcmUgc3RhcnQgZGF0ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkYXlqcyhzdGFydERhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG4gICAgICBzZXRFbmREYXRlKHN0YXJ0RGF0ZSlcbiAgICB9XG4gIH0sIFtzdGFydERhdGUsIGVuZERhdGVdKVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEaWFsb2cgb3Blbj17dHJ1ZX0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwidy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02XCI+XG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgICA8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNFwiPlxuICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnQnKSA6IHQoJ2NyZWF0ZUV2ZW50Jyl9XG4gICAgICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgICAgICAgIDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnREZXRhaWxzJykgOiB0KCdhZGROZXdFdmVudCcpfVxuICAgICAgICAgICAgICA8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBweS0yIHNtOmdhcC00IHNtOnB5LTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJ0aXRsZVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ3RpdGxlJyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2V2ZW50VGl0bGVQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ2Rlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgaWQ9XCJhbGxEYXlcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNBbGxEYXl9XG4gICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWxsRGF5XCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnYWxsRGF5Jyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnREYXRlJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e3N0YXJ0RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xXCJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VPblNlbGVjdFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmREYXRlJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e2VuZERhdGV9XG4gICAgICAgICAgICAgICAgICAgIHNldERhdGU9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7IWlzQWxsRGF5ICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwic3RhcnQtdGltZVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdzdGFydFRpbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdGFydC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N0YXJ0VGltZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRpbWVDaGFuZ2UoZSwgdHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImVuZC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ2VuZFRpbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlbmQtdGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbmRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCBmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdjb2xvcicpfTwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAge2NvbG9yT3B0aW9ucy5tYXAoKGNvbG9yKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAga2V5PXtjb2xvci52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjb2xvci52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29sb3IudmFsdWV9IGgtNiB3LTYgcm91bmRlZC1mdWxsIHNtOmgtOCBzbTp3LThgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JpbmctMiByaW5nLWJsYWNrIHJpbmctb2Zmc2V0LTEgc206cmluZy1vZmZzZXQtMidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2NvbG9yLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2NvbG9yLmxhYmVsfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImxvY2F0aW9uXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnbG9jYXRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMubG9jYXRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG4gICAgICAgICAgICAgIDxSZWN1cnJlbmNlRWRpdG9yIHZhbHVlPXtycnVsZX0gb25DaGFuZ2U9e2hhbmRsZVJSdWxlQ2hhbmdlfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206bXQtNCBzbTpmbGV4LXJvdyBzbTpnYXAtMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImRlc3RydWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBzbTptci1hdXRvIHNtOnctYXV0b1wiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KCdkZWxldGUnKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBnYXAtMiBzbTp3LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ3VwZGF0ZScpIDogdCgnY3JlYXRlJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0RpYWxvZz5cblxuICAgICAgey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cbiAgICAgIDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuICAgICAgICBpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17Y2xvc2VEaWFsb2d9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cbiAgICAgICAgZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBDaGVja2JveCxcbiAgRGF0ZVBpY2tlcixcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdFRyaWdnZXIsXG4gIFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvbGliL3JlY3VycmVuY2UtaGFuZGxlci90eXBlcydcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuLy8gTmF0dXJhbCBsYW5ndWFnZSBkZXNjcmlwdGlvbiBmdW5jdGlvbiB1c2luZyBSUnVsZSdzIGJ1aWx0LWluIGhlbHBlciBtZXRob2RzXG5mdW5jdGlvbiBnZXRSUnVsZURlc2NyaXB0aW9uKFxuICBycnVsZU9wdGlvbnM6IFJSdWxlT3B0aW9ucyB8IG51bGwsXG4gIHQ6IChrZXk6IHN0cmluZykgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgIHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gQ3JlYXRlIFJSdWxlIGluc3RhbmNlIGRpcmVjdGx5IGZyb20gb3B0aW9uc1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnJ1bGVPcHRpb25zKVxuXG4gICAgLy8gVXNlIFJSdWxlJ3MgYnVpbHQtaW4gbmF0dXJhbCBsYW5ndWFnZSBjb252ZXJzaW9uIHdpdGggdG9UZXh0KClcbiAgICBjb25zdCBuYXR1cmFsVGV4dCA9IHJ1bGUudG9UZXh0KClcblxuICAgIC8vIEhhbmRsZSBjYXNlcyB3aGVyZSBSUnVsZSBjYW4ndCBjb252ZXJ0IHRvIG5hdHVyYWwgbGFuZ3VhZ2VcbiAgICBpZiAoXG4gICAgICAhbmF0dXJhbFRleHQgfHxcbiAgICAgIG5hdHVyYWxUZXh0LmluY2x1ZGVzKCdSUnVsZSBlcnJvcicpIHx8XG4gICAgICBuYXR1cmFsVGV4dC5pbmNsdWRlcygnVW5hYmxlIHRvIGZ1bGx5IGNvbnZlcnQnKSB8fFxuICAgICAgbmF0dXJhbFRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuICAgICkge1xuICAgICAgcmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZmlyc3QgbGV0dGVyIGZvciBjb25zaXN0ZW50IGZvcm1hdHRpbmdcbiAgICByZXR1cm4gbmF0dXJhbFRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYXR1cmFsVGV4dC5zbGljZSgxKVxuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBwYXJzaW5nIGZhaWxzLCByZXR1cm4gZmFsbGJhY2tcbiAgICByZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0b3JQcm9wcyB7XG4gIHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuICBvbkNoYW5nZTogKHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UmVjdXJyZW5jZUVkaXRvclByb3BzPiA9ICh7XG4gIHZhbHVlLFxuICBvbkNoYW5nZSxcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuICBjb25zdCBbc2hvd1JlY3VycmVuY2UsIHNldFNob3dSZWN1cnJlbmNlXSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cbiAgLy8gQ3JlYXRlIFdFRUtfREFZUyBhcnJheSB3aXRoIHRyYW5zbGF0aW9uc1xuICBjb25zdCBXRUVLX0RBWVMgPSB1c2VNZW1vKFxuICAgICgpID0+IFtcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlNVLCBsYWJlbDogdCgnc3VuZGF5JyksIHNob3J0OiB0KCdzdW4nKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuTU8sIGxhYmVsOiB0KCdtb25kYXknKSwgc2hvcnQ6IHQoJ21vbicpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5UVSwgbGFiZWw6IHQoJ3R1ZXNkYXknKSwgc2hvcnQ6IHQoJ3R1ZScpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5XRSwgbGFiZWw6IHQoJ3dlZG5lc2RheScpLCBzaG9ydDogdCgnd2VkJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlRILCBsYWJlbDogdCgndGh1cnNkYXknKSwgc2hvcnQ6IHQoJ3RodScpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5GUiwgbGFiZWw6IHQoJ2ZyaWRheScpLCBzaG9ydDogdCgnZnJpJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlNBLCBsYWJlbDogdCgnc2F0dXJkYXknKSwgc2hvcnQ6IHQoJ3NhdCcpIH0sXG4gICAgXSxcbiAgICBbdF1cbiAgKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IFJSdWxlIGZyZXF1ZW5jeSB0byBzdHJpbmdcbiAgY29uc3QgZ2V0RnJlcXVlbmN5U3RyaW5nID0gKGZyZXE6IFJSdWxlT3B0aW9uc1snZnJlcSddKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBmcmVxTWFwOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgICAgW1JSdWxlLkRBSUxZXTogJ0RBSUxZJyxcbiAgICAgIFtSUnVsZS5XRUVLTFldOiAnV0VFS0xZJyxcbiAgICAgIFtSUnVsZS5NT05USExZXTogJ01PTlRITFknLFxuICAgICAgW1JSdWxlLllFQVJMWV06ICdZRUFSTFknLFxuICAgIH1cbiAgICByZXR1cm4gZnJlcU1hcFtmcmVxXSB8fCAnREFJTFknXG4gIH1cblxuICAvLyBXb3JrIHdpdGggY29tcGxldGUgUlJ1bGVPcHRpb25zIC0gZHRzdGFydCBjb21lcyBmcm9tIHBhcmVudCBFdmVudEZvcm1cbiAgY29uc3QgW3JydWxlT3B0aW9ucywgc2V0UlJ1bGVPcHRpb25zXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KFxuICAgICgpID0+IHZhbHVlIHx8IG51bGxcbiAgKVxuXG4gIC8vIFN5bmMgc3RhdGUgd2hlbiB2YWx1ZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZSghIXZhbHVlKVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgc2V0UlJ1bGVPcHRpb25zKHZhbHVlKVxuICAgIH1cbiAgfSwgW3ZhbHVlXSlcblxuICBjb25zdCB1cGRhdGVSUnVsZSA9ICh1cGRhdGVzOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcbiAgICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgICAgcmV0dXJuIC8vIENhbid0IHVwZGF0ZSBpZiBubyBiYXNlIG9wdGlvbnMgZXhpc3RcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7IC4uLnJydWxlT3B0aW9ucywgLi4udXBkYXRlcyB9XG4gICAgc2V0UlJ1bGVPcHRpb25zKG5ld09wdGlvbnMpXG5cbiAgICBpZiAoc2hvd1JlY3VycmVuY2UpIHtcbiAgICAgIG9uQ2hhbmdlKG5ld09wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUmVjdXJyZW5jZVRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U2hvd1JlY3VycmVuY2UoY2hlY2tlZClcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgaWYgKHJydWxlT3B0aW9ucykge1xuICAgICAgICBvbkNoYW5nZShycnVsZU9wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBSUnVsZSB3aGVuIHRvZ2dsaW5nIG9uIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAvLyBOb3RlOiBkdHN0YXJ0IHdpbGwgYmUgc2V0IGJ5IHRoZSBwYXJlbnQgRXZlbnRGb3JtXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSUnVsZTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge1xuICAgICAgICAgIGZyZXE6IFJSdWxlLkRBSUxZLFxuICAgICAgICAgIGludGVydmFsOiAxLFxuICAgICAgICB9XG4gICAgICAgIHNldFJSdWxlT3B0aW9ucyhkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgICBvbkNoYW5nZShkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZyZXF1ZW5jeUNoYW5nZSA9IChmcmVxdWVuY3k6IHN0cmluZykgPT4ge1xuICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFJSdWxlIGZyZXF1ZW5jeSBjb25zdGFudFxuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxzdHJpbmcsIFJSdWxlT3B0aW9uc1snZnJlcSddPiA9IHtcbiAgICAgIERBSUxZOiBSUnVsZS5EQUlMWSxcbiAgICAgIFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuICAgICAgTU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcbiAgICAgIFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxuICAgIH1cbiAgICB1cGRhdGVSUnVsZSh7IGZyZXE6IGZyZXFNYXBbZnJlcXVlbmN5XSB8fCBSUnVsZS5EQUlMWSB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlSW50ZXJ2YWxDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGludGVydmFsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmRUeXBlQ2hhbmdlID0gKGVuZFR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHt9XG5cbiAgICBpZiAoZW5kVHlwZSA9PT0gJ25ldmVyJykge1xuICAgICAgLy8gUmVtb3ZlIGNvdW50IGFuZCB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgY291bnQgaWYgbm9uZSBleGlzdHMsIHJlbW92ZSB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHJydWxlT3B0aW9ucz8uY291bnQgfHwgMVxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ3VudGlsJykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgdW50aWwgZGF0ZSBpZiBub25lIGV4aXN0cywgcmVtb3ZlIGNvdW50XG4gICAgICB1cGRhdGVzLnVudGlsID1cbiAgICAgICAgcnJ1bGVPcHRpb25zPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcbiAgICAgIHVwZGF0ZXMuY291bnQgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh1cGRhdGVzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ291bnRDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBjb3VudCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGNvdW50IH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBjb25zdCB1bnRpbCA9IGRhdGUgPyBkYXlqcyhkYXRlKS5lbmRPZignZGF5JykudG9EYXRlKCkgOiB1bmRlZmluZWRcbiAgICB1cGRhdGVSUnVsZSh7IHVudGlsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEYXlUb2dnbGUgPSAoZGF5SW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHdlZWtkYXlNYXAgPSBbXG4gICAgICBSUnVsZS5TVSxcbiAgICAgIFJSdWxlLk1PLFxuICAgICAgUlJ1bGUuVFUsXG4gICAgICBSUnVsZS5XRSxcbiAgICAgIFJSdWxlLlRILFxuICAgICAgUlJ1bGUuRlIsXG4gICAgICBSUnVsZS5TQSxcbiAgICBdXG4gICAgY29uc3QgY3VycmVudFdlZWtkYXlzID0gKHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cbiAgICBjb25zdCB0YXJnZXRXZWVrZGF5ID0gd2Vla2RheU1hcFtkYXlJbmRleF1cblxuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjdXJyZW50V2Vla2RheXMuaW5jbHVkZXModGFyZ2V0V2Vla2RheSlcbiAgICBsZXQgbmV3V2Vla2RheXM6IFdlZWtkYXlbXVxuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gY3VycmVudFdlZWtkYXlzLmZpbHRlcigoZGF5KSA9PiBkYXkgIT09IHRhcmdldFdlZWtkYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gWy4uLmN1cnJlbnRXZWVrZGF5cywgdGFyZ2V0V2Vla2RheV1cbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh7XG4gICAgICBieXdlZWtkYXk6IG5ld1dlZWtkYXlzLmxlbmd0aCA+IDAgPyBuZXdXZWVrZGF5cyA6IHVuZGVmaW5lZCxcbiAgICB9KVxuICB9XG5cbiAgLy8gSGVscGVyIHRvIGRldGVybWluZSBlbmQgdHlwZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICBjb25zdCBnZXRFbmRUeXBlID0gKCk6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJyA9PiB7XG4gICAgaWYgKHJydWxlT3B0aW9ucz8udW50aWwpIHtcbiAgICAgIHJldHVybiAndW50aWwnXG4gICAgfVxuICAgIGlmIChycnVsZU9wdGlvbnM/LmNvdW50KSB7XG4gICAgICByZXR1cm4gJ2NvdW50J1xuICAgIH1cbiAgICByZXR1cm4gJ25ldmVyJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG4gICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBpZD1cInJlY3VycmluZ1wiXG4gICAgICAgICAgICBjaGVja2VkPXtzaG93UmVjdXJyZW5jZX1cbiAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17aGFuZGxlUmVjdXJyZW5jZVRvZ2dsZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3JlcGVhdCcpfTwvQ2FyZFRpdGxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dSZWN1cnJlbmNlICYmIHZhbHVlICYmIChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAge2dldFJSdWxlRGVzY3JpcHRpb24odmFsdWUsIHQpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2FyZEhlYWRlcj5cblxuICAgICAge3Nob3dSZWN1cnJlbmNlICYmIChcbiAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgey8qIEZyZXF1ZW5jeSBTZWxlY3Rpb24gKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImZyZXF1ZW5jeVwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdyZXBlYXRzJyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Z2V0RnJlcXVlbmN5U3RyaW5nKHJydWxlT3B0aW9ucz8uZnJlcSA/PyBSUnVsZS5EQUlMWSl9XG4gICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtoYW5kbGVGcmVxdWVuY3lDaGFuZ2V9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFNlbGVjdFRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJmcmVxdWVuY3lcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZyZXF1ZW5jeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0VmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0VHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIkRBSUxZXCI+e3QoJ2RhaWx5Jyl9PC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIldFRUtMWVwiPnt0KCd3ZWVrbHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiTU9OVEhMWVwiPnt0KCdtb250aGx5Jyl9PC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIllFQVJMWVwiPnt0KCd5ZWFybHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8L1NlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJpbnRlcnZhbFwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdldmVyeScpfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5pbnRlcnZhbCB8fCAxfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUludGVydmFsQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogV2Vla2x5IERheSBTZWxlY3Rpb24gKi99XG4gICAgICAgICAgICB7cnJ1bGVPcHRpb25zPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cbiAgICAgICAgICAgICAgICAgIHtXRUVLX0RBWVMubWFwKChkYXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5d2Vla2RheUFycmF5ID0gQXJyYXkuaXNBcnJheShcbiAgICAgICAgICAgICAgICAgICAgICBycnVsZU9wdGlvbnM/LmJ5d2Vla2RheVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgPyBycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgOiBycnVsZU9wdGlvbnM/LmJ5d2Vla2RheVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbcnJ1bGVPcHRpb25zLmJ5d2Vla2RheV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogW11cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ5d2Vla2RheUFycmF5LmluY2x1ZGVzKGRheS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BkYXktJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2BkYXktJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZURheVRvZ2dsZShpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9e2BkYXktJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2RheS5zaG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBFbmQgQ29uZGl0aW9uICovfVxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICduZXZlcid9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgnbmV2ZXInKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cIm5ldmVyXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICB7dCgnbmV2ZXInKX1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgnY291bnQnKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImFmdGVyXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICB7dCgnYWZ0ZXInKX1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW5kVHlwZSgpID09PSAnY291bnQnICYmIChcbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3JydWxlT3B0aW9ucz8uY291bnQgfHwgMX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ291bnRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJvblwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ3VudGlsJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCd1bnRpbCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwib25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdvbicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICd1bnRpbCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e3JydWxlT3B0aW9ucz8udW50aWx9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTZcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9DYXJkQ29udGVudD5cbiAgICAgICl9XG4gICAgPC9DYXJkPlxuICApXG59XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgQnV0dG9uLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbiAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcbiAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgZXZlbnRUaXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWN1cnJlbmNlRWRpdERpYWxvZyh7XG4gIGlzT3BlbixcbiAgb25DbG9zZSxcbiAgb25Db25maXJtLFxuICBvcGVyYXRpb25UeXBlLFxuICBldmVudFRpdGxlLFxufTogUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcykge1xuICBjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoeyB0OiBjb250ZXh0LnQgfSkpXG5cbiAgY29uc3QgaGFuZGxlU2NvcGVTZWxlY3QgPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICBvbkNvbmZpcm0oc2NvcGUpXG4gICAgb25DbG9zZSgpXG4gIH1cblxuICBjb25zdCBpc0VkaXQgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCdcblxuICByZXR1cm4gKFxuICAgIDxEaWFsb2cgb3Blbj17aXNPcGVufSBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9PlxuICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LXctbWRcIj5cbiAgICAgICAgPERpYWxvZ0hlYWRlcj5cbiAgICAgICAgICA8RGlhbG9nVGl0bGU+XG4gICAgICAgICAgICB7aXNFZGl0ID8gdCgnZWRpdFJlY3VycmluZ0V2ZW50JykgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudCcpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICAgICAgXCJ7ZXZlbnRUaXRsZX1cInsnICd9XG4gICAgICAgICAgICB7aXNFZGl0XG4gICAgICAgICAgICAgID8gdCgnZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKVxuICAgICAgICAgICAgICA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKX1cbiAgICAgICAgICA8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktM1wiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ3RoaXMnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNFdmVudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge2lzRWRpdCA/IHQoJ29ubHlDaGFuZ2VUaGlzJykgOiB0KCdvbmx5RGVsZXRlVGhpcycpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnZm9sbG93aW5nJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzQW5kRm9sbG93aW5nRXZlbnRzJyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7aXNFZGl0ID8gdCgnY2hhbmdlVGhpc0FuZEZ1dHVyZScpIDogdCgnZGVsZXRlVGhpc0FuZEZ1dHVyZScpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnYWxsJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCdhbGxFdmVudHMnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHtpc0VkaXQgPyB0KCdjaGFuZ2VFbnRpcmVTZXJpZXMnKSA6IHQoJ2RlbGV0ZUVudGlyZVNlcmllcycpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGlhbG9nRm9vdGVyPlxuICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVcIiBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgICAgICAgIHt0KCdjYW5jZWwnKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgY29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG4gICAgdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgIH0pKVxuXG4gIGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gICAgdXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgICBvbkNvbmZpcm0/OiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcbiAgfT4oe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgIGV2ZW50OiBudWxsLFxuICB9KVxuXG4gIGNvbnN0IG9wZW5FZGl0RGlhbG9nID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50LCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG4gICAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudChldmVudCwgdXBkYXRlcywge1xuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW3VwZGF0ZVJlY3VycmluZ0V2ZW50XVxuICApXG5cbiAgY29uc3Qgb3BlbkRlbGV0ZURpYWxvZyA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6ICdkZWxldGUnLFxuICAgICAgICBldmVudCxcbiAgICAgICAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgICAgICBkZWxldGVSZWN1cnJpbmdFdmVudChldmVudCwge1xuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2RlbGV0ZVJlY3VycmluZ0V2ZW50XVxuICApXG5cbiAgY29uc3QgY2xvc2VEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyxcbiAgICAgIGV2ZW50OiBudWxsLFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcbiAgICAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgIGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcbiAgICAgICAgZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuICAgICAgfVxuICAgICAgY2xvc2VEaWFsb2coKVxuICAgICAgLy8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuICAgICAgb25Db21wbGV0ZT8uKClcbiAgICB9LFxuICAgIFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG4gIClcblxuICByZXR1cm4ge1xuICAgIGRpYWxvZ1N0YXRlLFxuICAgIG9wZW5FZGl0RGlhbG9nLFxuICAgIG9wZW5EZWxldGVEaWFsb2csXG4gICAgY2xvc2VEaWFsb2csXG4gICAgaGFuZGxlQ29uZmlybSxcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vKipcbiAqIEV4cG9ydCBjYWxlbmRhciBldmVudHMgdG8gaUNhbGVuZGFyICguaWNhbCkgZm9ybWF0XG4gKiBGdWxseSBSRkMgNTU0NSBjb21wbGlhbnQgaUNhbGVuZGFyIGdlbmVyYXRpb25cbiAqL1xuXG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaUNhbGVuZGFyIHRleHQgZmllbGRzXG4gKi9cbmNvbnN0IGVzY2FwZUlDYWxUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKSAvLyBFc2NhcGUgYmFja3NsYXNoZXNcbiAgICAucmVwbGFjZUFsbCgnOycsICdcXFxcOycpIC8vIEVzY2FwZSBzZW1pY29sb25zXG4gICAgLnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKSAvLyBFc2NhcGUgY29tbWFzXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpIC8vIEVzY2FwZSBuZXdsaW5lc1xuICAgIC5yZXBsYWNlQWxsKCdcXHInLCAnJykgLy8gUmVtb3ZlIGNhcnJpYWdlIHJldHVybnNcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGF0ZSBmb3IgaUNhbGVuZGFyIGZvcm1hdCAoWVlZWU1NRERUSEhNTVNTWiBmb3IgVVRDKVxuICovXG5jb25zdCBmb3JtYXRJQ2FsRGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgYWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoYWxsRGF5KSB7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG4gIH1cbiAgcmV0dXJuIGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgVUlEIGZvciBhbiBldmVudCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gKi9cbmNvbnN0IGdlbmVyYXRlVUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcbiAgaWYgKGV2ZW50LnVpZCkge1xuICAgIHJldHVybiBldmVudC51aWRcbiAgfVxuICByZXR1cm4gYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIENvbnZlcnQgUlJ1bGVPcHRpb25zIHRvIGlDYWxlbmRhciBSUlVMRSBzdHJpbmdcbiAqL1xuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2Ugd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RpbmdcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKFxuICAgICAgcnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG4gICAgKVxuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gcnVsZS50b1N0cmluZygpXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBSUlVMRSBwYXJ0IChyZW1vdmUgRFRTVEFSVCBpZiBwcmVzZW50KVxuICAgIGNvbnN0IHJydWxlUGFydCA9IHJydWxlU3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSlcbiAgICByZXR1cm4gcnJ1bGVQYXJ0IHx8ICcnXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNpbmdsZSBDYWxlbmRhckV2ZW50IHRvIGlDYWxlbmRhciBWRVZFTlQgc3RyaW5nXG4gKi9cbmNvbnN0IGV2ZW50VG9JQ2FsRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZFVkVOVCcpXG5cbiAgLy8gVUlEIChyZXF1aXJlZClcbiAgbGluZXMucHVzaChgVUlEOiR7Z2VuZXJhdGVVSUQoZXZlbnQpfWApXG5cbiAgLy8gRFRTVEFSVCAocmVxdWlyZWQpXG4gIGNvbnN0IGR0c3RhcnQgPSBmb3JtYXRJQ2FsRGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDtWQUxVRT1EQVRFOiR7ZHRzdGFydH1gKVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goYERUU1RBUlQ6JHtkdHN0YXJ0fWApXG4gIH1cblxuICAvLyBEVEVORCAocmVxdWlyZWQgZm9yIGV2ZW50cyB3aXRoIGR1cmF0aW9uKVxuICBjb25zdCBkdGVuZCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ7VkFMVUU9REFURToke2R0ZW5kfWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ6JHtkdGVuZH1gKVxuICB9XG5cbiAgLy8gU1VNTUFSWSAodGl0bGUpXG4gIGxpbmVzLnB1c2goYFNVTU1BUlk6JHtlc2NhcGVJQ2FsVGV4dChldmVudC50aXRsZSl9YClcblxuICAvLyBERVNDUklQVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2goYERFU0NSSVBUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWApXG4gIH1cblxuICAvLyBMT0NBVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5sb2NhdGlvbikge1xuICAgIGxpbmVzLnB1c2goYExPQ0FUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQubG9jYXRpb24pfWApXG4gIH1cblxuICAvLyBSUlVMRSAocmVjdXJyZW5jZSBydWxlKVxuICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICBjb25zdCBycnVsZVN0cmluZyA9IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKVxuICAgIGlmIChycnVsZVN0cmluZykge1xuICAgICAgbGluZXMucHVzaChycnVsZVN0cmluZylcbiAgICB9XG4gIH1cblxuICAvLyBFWERBVEUgKGV4Y2VwdGlvbiBkYXRlcylcbiAgaWYgKGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXNcbiAgICAgIC5tYXAoKGRhdGVTdHIpID0+IGZvcm1hdElDYWxEYXRlKGRheWpzKGRhdGVTdHIpLCBldmVudC5hbGxEYXkpKVxuICAgICAgLmpvaW4oJywnKVxuICAgIGxpbmVzLnB1c2goYEVYREFURToke2V4ZGF0ZXN9YClcbiAgfVxuXG4gIC8vIFJFQ1VSUkVOQ0UtSUQgKGZvciBtb2RpZmllZCBpbnN0YW5jZXMpXG4gIGlmIChldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICBjb25zdCByZWN1cnJlbmNlSWQgPSBmb3JtYXRJQ2FsRGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG4gICAgbGluZXMucHVzaChgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gKVxuICB9XG5cbiAgLy8gRFRTVEFNUCAocmVxdWlyZWQgLSB3aGVuIHRoaXMgd2FzIGNyZWF0ZWQvbW9kaWZpZWQpXG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG4gIGxpbmVzLnB1c2goYERUU1RBTVA6JHtub3d9YClcblxuICAvLyBDUkVBVEVEICh3aGVuIGV2ZW50IHdhcyBjcmVhdGVkKVxuICBsaW5lcy5wdXNoKGBDUkVBVEVEOiR7bm93fWApXG5cbiAgLy8gTEFTVC1NT0RJRklFRCAod2hlbiBldmVudCB3YXMgbGFzdCBtb2RpZmllZClcbiAgbGluZXMucHVzaChgTEFTVC1NT0RJRklFRDoke25vd31gKVxuXG4gIC8vIFNUQVRVUyAoZGVmYXVsdCB0byBDT05GSVJNRUQpXG4gIGxpbmVzLnB1c2goJ1NUQVRVUzpDT05GSVJNRUQnKVxuXG4gIC8vIFNFUVVFTkNFICh2ZXJzaW9uIG51bWJlciwgZGVmYXVsdCB0byAwKVxuICBsaW5lcy5wdXNoKCdTRVFVRU5DRTowJylcblxuICAvLyBUUkFOU1AgKHRyYW5zcGFyZW5jeSAtIE9QQVFVRSBmb3IgYnVzeSB0aW1lKVxuICBsaW5lcy5wdXNoKCdUUkFOU1A6T1BBUVVFJylcblxuICBsaW5lcy5wdXNoKCdFTkQ6VkVWRU5UJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICogLSBJbmNsdWRlIGJhc2UgcmVjdXJyaW5nIGV2ZW50cyAod2l0aCBSUlVMRSlcbiAqIC0gSW5jbHVkZSBtb2RpZmllZCBpbnN0YW5jZXMgKHdpdGggcmVjdXJyZW5jZUlkKVxuICogLSBJbmNsdWRlIG5vbi1yZWN1cnJpbmcgZXZlbnRzXG4gKiAtIEVYQ0xVREUgZ2VuZXJhdGVkIHJlY3VycmluZyBpbnN0YW5jZXMgKG5vIHJydWxlLCBubyByZWN1cnJlbmNlSWQpXG4gKi9cbmNvbnN0IGZpbHRlckV2ZW50c0ZvckV4cG9ydCA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gIGNvbnN0IGV4cG9ydEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgY29uc3QgcHJvY2Vzc2VkVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAvLyBHZXQgb3IgZ2VuZXJhdGUgVUlEIGZvciB0aGUgZXZlbnRcbiAgICBjb25zdCBldmVudFVJRCA9IGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAvLyBDYXNlIDE6IEJhc2UgcmVjdXJyaW5nIGV2ZW50IChoYXMgUlJVTEUsIG5vIHJlY3VycmVuY2VJZClcbiAgICBpZiAoZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICBwcm9jZXNzZWRVSURzLmFkZChldmVudFVJRClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAyOiBNb2RpZmllZCByZWN1cnJpbmcgaW5zdGFuY2UgKGhhcyByZWN1cnJlbmNlSWQsIG5vIFJSVUxFKVxuICAgIGlmIChldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAzOiBOb24tcmVjdXJyaW5nIGV2ZW50IChubyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkLCBubyBVSUQgcGF0dGVybilcbiAgICBpZiAoIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBnZW5lcmF0ZWQgaW5zdGFuY2UgYnkgVUlEIHBhdHRlcm5cbiAgICAgIGNvbnN0IGlzR2VuZXJhdGVkSW5zdGFuY2UgPSBwcm9jZXNzZWRVSURzLmhhcyhldmVudFVJRClcblxuICAgICAgaWYgKCFpc0dlbmVyYXRlZEluc3RhbmNlKSB7XG4gICAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgfVxuICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgaW5zdGFuY2VzIC0gdGhleSdsbCBiZSByZWNyZWF0ZWQgYnkgUlJVTEVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0RXZlbnRzXG59XG5cbi8qKlxuICogRXhwb3J0IGV2ZW50cyB0byBpQ2FsZW5kYXIgZm9ybWF0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgLy8gQ2FsZW5kYXIgaGVhZGVyXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZDQUxFTkRBUicpXG4gIGxpbmVzLnB1c2goJ1ZFUlNJT046Mi4wJylcbiAgbGluZXMucHVzaCgnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nKVxuICBsaW5lcy5wdXNoKCdDQUxTQ0FMRTpHUkVHT1JJQU4nKVxuICBsaW5lcy5wdXNoKCdNRVRIT0Q6UFVCTElTSCcpXG4gIGxpbmVzLnB1c2goYFgtV1ItQ0FMTkFNRToke2VzY2FwZUlDYWxUZXh0KGNhbGVuZGFyTmFtZSl9YClcbiAgbGluZXMucHVzaChgWC1XUi1DQUxERVNDOiR7ZXNjYXBlSUNhbFRleHQoYEV4cG9ydGVkIGZyb20gJHtjYWxlbmRhck5hbWV9YCl9YClcblxuICAvLyBBZGQgdGltZXpvbmUgaW5mb3JtYXRpb24gKFVUQylcbiAgbGluZXMucHVzaCgnQkVHSU46VlRJTUVaT05FJylcbiAgbGluZXMucHVzaCgnVFpJRDpVVEMnKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJylcbiAgbGluZXMucHVzaCgnVFpOQU1FOlVUQycpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VURlJPTTorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VUVE86KzAwMDAnKVxuICBsaW5lcy5wdXNoKCdFTkQ6U1RBTkRBUkQnKVxuICBsaW5lcy5wdXNoKCdFTkQ6VlRJTUVaT05FJylcblxuICAvLyBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGZpbHRlckV2ZW50c0ZvckV4cG9ydChldmVudHMpXG5cbiAgLy8gQWRkIGVhY2ggZmlsdGVyZWQgZXZlbnRcbiAgZmlsdGVyZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBsaW5lcy5wdXNoKGV2ZW50VG9JQ2FsRXZlbnQoZXZlbnQpKVxuICB9KVxuXG4gIC8vIENhbGVuZGFyIGZvb3RlclxuICBsaW5lcy5wdXNoKCdFTkQ6VkNBTEVOREFSJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBEb3dubG9hZCBpQ2FsZW5kYXIgZmlsZSB0byB1c2VyJ3MgZGV2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpY2FsQ29udGVudCA9IGV4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKVxuXG4gIC8vIENyZWF0ZSBibG9iIGFuZCBkb3dubG9hZFxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ljYWxDb250ZW50XSwge1xuICAgIHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuICB9KVxuXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICBsaW5rLmhyZWYgPSB1cmxcbiAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJykgPyBmaWxlbmFtZSA6IGAke2ZpbGVuYW1lfS5pY3NgXG5cbiAgLy8gVHJpZ2dlciBkb3dubG9hZFxuICBkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuICBsaW5rLmNsaWNrKClcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuXG4gIC8vIENsZWFuIHVwXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiwgRG93bmxvYWQsIE1lbnUsIFBsdXMgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYidcblxuaW50ZXJmYWNlIEhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lID0gJycgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgdmlldyxcbiAgICBzZXRWaWV3LFxuICAgIG5leHRQZXJpb2QsXG4gICAgcHJldlBlcmlvZCxcbiAgICB0b2RheSxcbiAgICBvcGVuRXZlbnRGb3JtLFxuICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgcmF3RXZlbnRzLFxuICAgIHQsXG4gIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcbiAgICB2aWV3OiBjb250ZXh0LnZpZXcsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGhlYWRlckNvbXBvbmVudDogY29udGV4dC5oZWFkZXJDb21wb25lbnQsXG4gICAgaGVhZGVyQ2xhc3NOYW1lOiBjb250ZXh0LmhlYWRlckNsYXNzTmFtZSxcbiAgICByYXdFdmVudHM6IGNvbnRleHQucmF3RXZlbnRzLFxuICAgIHQ6IGNvbnRleHQudCxcbiAgfSkpXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IHBvcG92ZXJcbiAgY29uc3QgW21vYmlsZVBvcG92ZXJPcGVuLCBzZXRNb2JpbGVQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAvLyBIYW5kbGUgdmlldyBjaGFuZ2Ugd2l0aCBvcHRpb25hbCBwb3BvdmVyIGNsb3NpbmdcbiAgY29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IChcbiAgICBuZXdWaWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicsXG4gICAgY2xvc2VQb3BvdmVyID0gZmFsc2VcbiAgKSA9PiB7XG4gICAgc2V0VmlldyhuZXdWaWV3KVxuICAgIGlmIChjbG9zZVBvcG92ZXIpIHtcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBpQ2FsZW5kYXIgZXhwb3J0XG4gIGNvbnN0IGhhbmRsZUV4cG9ydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG4gICAgZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcbiAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgfSwgW3Jhd0V2ZW50c10pXG5cbiAgLy8gQ2FsbGJhY2sgZm9yIG5hdmlnYXRpb24gdGhhdCBhbHNvIGNsb3NlcyB0aGUgbW9iaWxlIHBvcG92ZXJcbiAgY29uc3QgaGFuZGxlTmF2aWdhdGlvbiA9IHtcbiAgICB0b2RheTogKCkgPT4ge1xuICAgICAgdG9kYXkoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgcHJldlBlcmlvZCgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICAgIG5leHQ6ICgpID0+IHtcbiAgICAgIG5leHRQZXJpb2QoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IE5ld0V2ZW50QnV0dG9uID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBbb3BlbkV2ZW50Rm9ybSwgdF1cbiAgKVxuXG4gIGlmIChoZWFkZXJDb21wb25lbnQpIHtcbiAgICAvLyBSZW5kZXIgY3VzdG9tIGhlYWRlciBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgICByZXR1cm4gaGVhZGVyQ29tcG9uZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogQ2FsZW5kYXIgSGVhZGVyIHdpdGggZ3JpZCBsYXlvdXQgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWInLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgaGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBUaXRsZSBhcmVhIC0gTGVmdCBzZWN0aW9uICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgPENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOZXcgZXZlbnQgYnV0dG9uIC0gTW9iaWxlICYgRGVza3RvcCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICB7LyogRGVza3RvcCBjb250cm9scyAtIGNlbnRyYWxpemVkICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRWaWV3fVxuICAgICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICAgIG9uTmV4dD17bmV4dFBlcmlvZH1cbiAgICAgICAgICAgICAgICBvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgICA8TmV3RXZlbnRCdXR0b24gLz5cblxuICAgICAgICAgICAgICB7LyogRXhwb3J0IGJ1dHRvbiAtIERlc2t0b3AgKi99XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V4cG9ydCcpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIE1vYmlsZSBuYXZpZ2F0aW9uIG1lbnUgYnV0dG9uIC0gUmlnaHQgYWxpZ25lZCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuICAgICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZVBvcG92ZXJPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwibWItMSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVmlldyAmIE5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZGF5PXtoYW5kbGVOYXZpZ2F0aW9uLnRvZGF5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTmV4dD17aGFuZGxlTmF2aWdhdGlvbi5uZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKVxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG4vLyBNb250aHMgYXJyYXkgaXMgbm93IGNyZWF0ZWQgZHluYW1pY2FsbHkgaW4gdGhlIGNvbXBvbmVudCB1c2luZyB0cmFuc2xhdGlvbnNcblxuLy8gQW5pbWF0aW9uIHZhcmlhbnRzIGZvciBudW1iZXIgdHJhbnNpdGlvbnNcbmNvbnN0IGFuaW1hdGlvblZhcmlhbnRzID0ge1xuICBpbml0aWFsOiB7IG9wYWNpdHk6IDAsIHk6IDEwIH0sXG4gIGFuaW1hdGU6IHsgb3BhY2l0eTogMSwgeTogMCB9LFxuICBleGl0OiB7IG9wYWNpdHk6IDAsIHk6IC0xMCB9LFxufVxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gKHtcbiAgICAgIGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuICAgICAgdmlldzogY29udGV4dC52aWV3LFxuICAgICAgc2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG4gICAgICB0OiBjb250ZXh0LnQsXG4gICAgfSlcbiAgKVxuXG4gIC8vIENyZWF0ZSBtb250aHMgYXJyYXkgdXNpbmcgdHJhbnNsYXRpb25zXG4gIGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgdCgnamFudWFyeScpLFxuICAgICAgdCgnZmVicnVhcnknKSxcbiAgICAgIHQoJ21hcmNoJyksXG4gICAgICB0KCdhcHJpbCcpLFxuICAgICAgdCgnbWF5JyksXG4gICAgICB0KCdqdW5lJyksXG4gICAgICB0KCdqdWx5JyksXG4gICAgICB0KCdhdWd1c3QnKSxcbiAgICAgIHQoJ3NlcHRlbWJlcicpLFxuICAgICAgdCgnb2N0b2JlcicpLFxuICAgICAgdCgnbm92ZW1iZXInKSxcbiAgICAgIHQoJ2RlY2VtYmVyJyksXG4gICAgXSxcbiAgICBbdF1cbiAgKVxuXG4gIC8vIFN0YXRlIGZvciBtb2JpbGUgbWVudSBhbmQgcG9wb3ZlcnNcbiAgY29uc3QgW21vbnRoUG9wb3Zlck9wZW4sIHNldE1vbnRoUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt5ZWFyUG9wb3Zlck9wZW4sIHNldFllYXJQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3dlZWtQb3BvdmVyT3Blbiwgc2V0V2Vla1BvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZGF5UG9wb3Zlck9wZW4sIHNldERheVBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG4gIGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cbiAgLy8gSGFuZGxlIG1vbnRoIGFuZCB5ZWFyIHNlbGVjdGlvblxuICBjb25zdCBoYW5kbGVNb250aENoYW5nZSA9IChtb250aDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLm1vbnRoKG1vbnRoKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0TW9udGhQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVllYXJDaGFuZ2UgPSAoeWVhcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnllYXIoeWVhcilcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIHNldFllYXJQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt2aWV3ICE9PSAneWVhcicgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXttb250aFBvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldE1vbnRoUG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgbW9udGgtJHtjdXJyZW50RGF0ZS5tb250aCgpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e21vbnRofVxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW9udGhDaGFuZ2UoaW5kZXgpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHttb250aH1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuXG4gICAgICA8UG9wb3ZlciBvcGVuPXt5ZWFyUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0WWVhclBvcG92ZXJPcGVufT5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAga2V5PXtgeWVhci0ke2N1cnJlbnREYXRlLnllYXIoKX1gfVxuICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpfVxuICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTI0IHAtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICB7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3llYXJ9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlWWVhckNoYW5nZSh5ZWFyKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt5ZWFyfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgPC9Qb3BvdmVyPlxuXG4gICAgICB7LyogRGlzcGxheSBhZGRpdGlvbmFsIHZpZXctc3BlY2lmaWMgaW5mb3JtYXRpb24gKi99XG4gICAgICB7dmlldyA9PT0gJ3dlZWsnICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17d2Vla1BvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldFdlZWtQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLXJhbmdlLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2Ake2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX0gLSAke2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoJ01NTSBEJyl9YH1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyA3IHdlZWtzICgzIHBhc3QsIGN1cnJlbnQsIDMgZnV0dXJlKSAqL31cbiAgICAgICAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHdlZWtEYXRlLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHdlZWtEYXRlLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e3N0YXJ0T2ZXZWVrLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudERhdGUoc3RhcnRPZldlZWspXG4gICAgICAgICAgICAgICAgICAgICAgc2V0V2Vla1BvcG92ZXJPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57YCR7c3RhcnRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSBEJ1xuICAgICAgICAgICAgICAgICAgICAgICl9IC0gJHtlbmRPZldlZWsuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3N0YXJ0T2ZXZWVrLm1vbnRoKCkgIT09IGVuZE9mV2Vlay5tb250aCgpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgb3BhY2l0eS03MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7c3RhcnRPZldlZWsuZm9ybWF0KCdNTU0nKX0tJHtlbmRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNTU0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuICAgICAge3ZpZXcgPT09ICdkYXknICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17ZGF5UG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0RGF5UG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgZGF5LWluZm8tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyl9XG4gICAgICAgICAgICAgICAgPC9tb3Rpb24uc3Bhbj5cbiAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJtbC0xIGgtMyB3LTMgb3BhY2l0eS03MFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTU2IHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgey8qIFNob3cgYWxsIGRheXMgb2YgdGhlIGN1cnJlbnQgbW9udGggKi99XG4gICAgICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCBmaXJzdCBkYXkgb2YgbW9udGggYW5kIGxhc3QgZGF5IG9mIG1vbnRoXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYXJyYXkgb2YgZGF5cyBpbiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mTW9udGguZGF0ZShpICsgMSkgLy8gaSArIDEgYmVjYXVzZSBkYXlzIHN0YXJ0IGF0IDFcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JylcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXlEYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShkYXlEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGF5UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2RheURhdGUuZm9ybWF0KCdkZGRkLCBNTU0gRCcpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgndG9kYXknKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuICBjdXJyZW50VmlldzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG4gIG9uQ2hhbmdlOiAodmlldzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInKSA9PiB2b2lkXG4gIG9uVG9kYXk/OiAoKSA9PiB2b2lkXG4gIG9uTmV4dD86ICgpID0+IHZvaWRcbiAgb25QcmV2aW91cz86ICgpID0+IHZvaWRcbiAgdmFyaWFudD86ICdkZWZhdWx0JyB8ICdncmlkJ1xuICBzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgVmlld0NvbnRyb2xzOiBSZWFjdC5GQzxWaWV3Q29udHJvbHNQcm9wcz4gPSAoe1xuICBjdXJyZW50VmlldyxcbiAgb25DaGFuZ2UsXG4gIHZhcmlhbnQgPSAnZGVmYXVsdCcsXG4gIHNpemUgPSAnc20nLFxuICBjbGFzc05hbWUsXG4gIG9uVG9kYXksXG4gIG9uTmV4dCxcbiAgb25QcmV2aW91cyxcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuICBjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblxuICAvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cbiAgY29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicpID0+IHtcbiAgICByZXR1cm4gY24oXG4gICAgICAvLyBCYXNlIHdpZHRoIGZvciBncmlkIGxheW91dFxuICAgICAgaXNHcmlkID8gJ3ctZnVsbCcgOiAnJyxcbiAgICAgIC8vIEFjdGl2ZSB2aWV3IHN0eWxpbmdcbiAgICAgIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSAmJiAnYmctcHJpbWFyeS84MCdcbiAgICApXG4gIH1cblxuICBjb25zdCBnZXRCdG5WYXJpYW50ID0gKHZpZXdUeXBlOiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicpID0+IHtcbiAgICByZXR1cm4gY3VycmVudFZpZXcgPT09IHZpZXdUeXBlID8gJ2RlZmF1bHQnIDogJ291dGxpbmUnXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGlzR3JpZCA/ICdncmlkIGdyaWQtY29scy0yIGdhcC0yJyA6ICdmbGV4IGdhcC0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25QcmV2aW91c30gdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPXtzaXplfT5cbiAgICAgICAgPENoZXZyb25MZWZ0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uTmV4dH0gdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPXtzaXplfT5cbiAgICAgICAgPENoZXZyb25SaWdodCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIDwvQnV0dG9uPlxuXG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCdkYXknKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnZGF5Jyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCdkYXknKX1cbiAgICAgID5cbiAgICAgICAge3QoJ2RheScpfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCd3ZWVrJyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ3dlZWsnKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ3dlZWsnKX1cbiAgICAgID5cbiAgICAgICAge3QoJ3dlZWsnKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnbW9udGgnKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnbW9udGgnKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ21vbnRoJyl9XG4gICAgICA+XG4gICAgICAgIHt0KCdtb250aCcpfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCd5ZWFyJyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ3llYXInKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ3llYXInKX1cbiAgICAgID5cbiAgICAgICAge3QoJ3llYXInKX1cbiAgICAgIDwvQnV0dG9uPlxuXG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uVG9kYXl9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIHt0KCd0b2RheScpfVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld0NvbnRyb2xzXG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcblxuY29uc3QgWWVhclZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB5ZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cbiAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgMTIgbW9udGhzIGZvciB0aGUgY3VycmVudCB5ZWFyXG4gIGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiB7XG4gICAgY29uc3QgbW9udGhEYXRlID0gZGF5anMoKS55ZWFyKHllYXIpLm1vbnRoKGkpLnN0YXJ0T2YoJ21vbnRoJylcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbW9udGhEYXRlLFxuICAgICAgbmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuICAgICAgZGF5c0luTW9udGg6IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpLFxuICAgICAgZmlyc3REYXlPZk1vbnRoOiBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5kYXkoKSwgLy8gMC02LCAwIGlzIFN1bmRheVxuICAgIH1cbiAgfSlcblxuICAvLyBDYWxjdWxhdGUgZXZlbnRzIGZvciBlYWNoIG1vbnRoXG4gIGNvbnN0IG1vbnRoc1dpdGhFdmVudENvdW50ID0gbW9udGhzLm1hcCgobW9udGgpID0+IHtcbiAgICBjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcbiAgICAgIChldmVudCkgPT5cbiAgICAgICAgZXZlbnQuc3RhcnQueWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgIGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgIClcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tb250aCxcbiAgICAgIGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuICAgIH1cbiAgfSlcblxuICAvLyBIYW5kbGUgbW9udGggY2xpY2sgdG8gbmF2aWdhdGUgdG8gbW9udGggdmlld1xuICBjb25zdCBoYW5kbGVNb250aENsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKVxuICAgIHNldFZpZXcoJ21vbnRoJylcbiAgfVxuXG4gIC8vIEhhbmRsZSBkYXkgY2xpY2sgd2l0aGluIHRoZSBtaW5pIGNhbGVuZGFyXG4gIGNvbnN0IGhhbmRsZURheUNsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzLCBldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIC8vIFByZXZlbnQgdHJpZ2dlcmluZyB0aGUgbW9udGggY2xpY2tcbiAgICBzZWxlY3REYXRlKGRhdGUpXG4gICAgc2V0VmlldygnZGF5JykgLy8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gZGF5IHZpZXcgd2hlbiBjbGlja2luZyBvbiBhIHNwZWNpZmljIGRheVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgZGF5cyBmb3IgbWluaSBjYWxlbmRhciBpbiBlYWNoIG1vbnRoXG4gIGNvbnN0IHJlbmRlck1pbmlDYWxlbmRhciA9IChtb250aDogKHR5cGVvZiBtb250aHNXaXRoRXZlbnRDb3VudClbMF0pID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGgncyBjYWxlbmRhciAod2hpY2ggY291bGQgYmUgaW4gdGhlIHByZXZpb3VzIG1vbnRoKVxuICAgIGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoLmRhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuICAgIC8vIENyZWF0ZSA0MiBkYXlzICg2IHJvd3Mgb2YgNyBkYXlzKSBmb3IgY29uc2lzdGVuY3lcbiAgICBjb25zdCBkYXlzQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0MiB9LCAoXywgaSkgPT4ge1xuICAgICAgY29uc3QgZGF5ID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChpLCAnZGF5JylcbiAgICAgIGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gICAgICBjb25zdCBpc0N1cnJlbnREYXRlID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cbiAgICAgIC8vIEdldCBldmVudHMgZm9yIHRoaXMgZGF5XG4gICAgICBjb25zdCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgZGF5LmVuZE9mKCdkYXknKVxuICAgICAgKVxuICAgICAgY29uc3QgaGFzRXZlbnRzID0gZGF5RXZlbnRzLmxlbmd0aCA+IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF5LFxuICAgICAgICBpc0N1cnJlbnRNb250aCxcbiAgICAgICAgaXNUb2RheSxcbiAgICAgICAgaXNDdXJyZW50RGF0ZSxcbiAgICAgICAgaGFzRXZlbnRzLFxuICAgICAgICBldmVudENvdW50OiBkYXlFdmVudHMubGVuZ3RoLFxuICAgICAgICAvLyBHcm91cCBldmVudHMgYnkgdGhlaXIgY2F0ZWdvcmllcyB0byBzaG93IGRpZmZlcmVudCBjb2xvcnNcbiAgICAgICAgZXZlbnRzOiBkYXlFdmVudHMsXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtWzFweF0gdGV4dC1bMC42cmVtXVwiXG4gICAgICA+XG4gICAgICAgIHsvKiBEYXkgbmFtZXMgKi99XG4gICAgICAgIHtbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXS5tYXAoKGRheU5hbWUsIGkpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2BoZWFkZXItJHtpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZGF5TmFtZX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG5cbiAgICAgICAgey8qIENhbGVuZGFyIGRheXMgKi99XG4gICAgICAgIHtkYXlzQXJyYXkubWFwKChkYXlJbmZvLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgZGF5LSR7aX1gfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLWRheS0ke21vbnRoLmRhdGUuZm9ybWF0KCdZWVlZLU1NJyl9LSR7ZGF5SW5mby5kYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBoYW5kbGVEYXlDbGljayhkYXlJbmZvLmRheSwgZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJyxcbiAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50TW9udGggJiYgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc0N1cnJlbnREYXRlICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5oYXNFdmVudHMgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50RGF0ZSAmJlxuICAgICAgICAgICAgICAgICdmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIGRheUluZm8uaGFzRXZlbnRzXG4gICAgICAgICAgICAgICAgPyBgJHtkYXlJbmZvLmV2ZW50Q291bnR9IGV2ZW50JHtcbiAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5ldmVudENvdW50ID4gMSA/ICdzJyA6ICcnXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cbiAgICAgICAgICAgICAge2RheUluZm8uZGF5LmRhdGUoKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgey8qIEVuaGFuY2VkIGV2ZW50IGluZGljYXRvciAtIHNob3cgbXVsdGlwbGUgY29sb3JlZCBkb3RzIGZvciBkaWZmZXJlbnQgZXZlbnQgdHlwZXMgKi99XG4gICAgICAgICAgICB7ZGF5SW5mby5oYXNFdmVudHMgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LVsxcHhdJyxcbiAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdib3R0b20tWzFweF0nIDogJydcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIFNob3cgdXAgdG8gMyBldmVudCBkb3RzIHdpdGggZGlmZmVyZW50IGNvbG9ycyBpZiBhdmFpbGFibGUgKi99XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctcHJpbWFyeSdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ibHVlLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMiAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ncmVlbi01MDAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCIgY2xhc3NOYW1lPVwiaC1mdWxsXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcbiAgICAgID5cbiAgICAgICAge21vbnRoc1dpdGhFdmVudENvdW50Lm1hcCgobW9udGgsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXttb250aC5uYW1lfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vbnRoQ2xpY2sobW9udGguZGF0ZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGN1cnNvci1wb2ludGVyIGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2NhbGUtWzEuMDFdIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgIGtleT17YG1vbnRoLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aDNcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC10aXRsZS0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7bW9udGgubmFtZX1cbiAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50fXsnICd9XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuXG4gICAgICAgICAgICB7cmVuZGVyTWluaUNhbGVuZGFyKG1vbnRoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1Njcm9sbEFyZWE+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgWWVhclZpZXdcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldydcbmltcG9ydCBXZWVrVmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCBEYXlWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgREFZX01BWF9FVkVOVFNfREVGQVVMVCwgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9saWInXG5pbXBvcnQgdHlwZSB7IElsYW15Q2FsZW5kYXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5cbmNvbnN0IENhbGVuZGFyQ29udGVudDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZSxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgICBkYXlNYXhFdmVudHMsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHZpZXdNYXAgPSB7XG4gICAgbW9udGg6IDxNb250aFZpZXcga2V5PVwibW9udGhcIiBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c30gLz4sXG4gICAgd2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcbiAgICBkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuICAgIHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG4gIH1cblxuICBjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICA8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cbiAgICAgIHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuICAgICAgPENhbGVuZGFyRG5kQ29udGV4dD5cbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3ZpZXd9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHg6IDIwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeDogLTIwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjEsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmlld01hcFt2aWV3XX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9DYWxlbmRhckRuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cbiAgICAgIHtpc0V2ZW50Rm9ybU9wZW4gJiYgKFxuICAgICAgICA8RXZlbnRGb3JtXG4gICAgICAgICAgb25DbG9zZT17Y2xvc2VFdmVudEZvcm19XG4gICAgICAgICAgc2VsZWN0ZWRFdmVudD17c2VsZWN0ZWRFdmVudH1cbiAgICAgICAgICBzZWxlY3RlZERhdGU9e3NlbGVjdGVkRGF0ZX1cbiAgICAgICAgICBvbkFkZD17YWRkRXZlbnR9XG4gICAgICAgICAgb25VcGRhdGU9e2hhbmRsZU9uVXBkYXRlfVxuICAgICAgICAgIG9uRGVsZXRlPXtoYW5kbGVPbkRlbGV0ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuICBldmVudHMsXG4gIGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG4gIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgcmVuZGVyRXZlbnQsXG4gIG9uRXZlbnRDbGljayxcbiAgb25DZWxsQ2xpY2ssXG4gIG9uVmlld0NoYW5nZSxcbiAgb25FdmVudEFkZCxcbiAgb25FdmVudFVwZGF0ZSxcbiAgb25FdmVudERlbGV0ZSxcbiAgb25EYXRlQ2hhbmdlLFxuICBsb2NhbGUsXG4gIHRyYW5zbGF0aW9ucyxcbiAgdHJhbnNsYXRvcixcbiAgdGltZXpvbmUsXG4gIGRpc2FibGVDZWxsQ2xpY2ssXG4gIGRpc2FibGVFdmVudENsaWNrLFxuICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbiAgaGVhZGVyQ2xhc3NOYW1lLFxufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxDYWxlbmRhclByb3ZpZGVyXG4gICAgICBldmVudHM9e25vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQoZXZlbnRzKX1cbiAgICAgIGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG4gICAgICBpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG4gICAgICByZW5kZXJFdmVudD17cmVuZGVyRXZlbnR9XG4gICAgICBvbkV2ZW50Q2xpY2s9e29uRXZlbnRDbGlja31cbiAgICAgIG9uQ2VsbENsaWNrPXtvbkNlbGxDbGlja31cbiAgICAgIG9uVmlld0NoYW5nZT17b25WaWV3Q2hhbmdlfVxuICAgICAgb25FdmVudEFkZD17b25FdmVudEFkZH1cbiAgICAgIG9uRXZlbnRVcGRhdGU9e29uRXZlbnRVcGRhdGV9XG4gICAgICBvbkV2ZW50RGVsZXRlPXtvbkV2ZW50RGVsZXRlfVxuICAgICAgb25EYXRlQ2hhbmdlPXtvbkRhdGVDaGFuZ2V9XG4gICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgdHJhbnNsYXRvcj17dHJhbnNsYXRvcn1cbiAgICAgIHRpbWV6b25lPXt0aW1lem9uZX1cbiAgICAgIGRpc2FibGVDZWxsQ2xpY2s9e2Rpc2FibGVDZWxsQ2xpY2t9XG4gICAgICBkaXNhYmxlRXZlbnRDbGljaz17ZGlzYWJsZUV2ZW50Q2xpY2t9XG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cbiAgICAgIGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuICAgICAgc3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG4gICAgICBoZWFkZXJDb21wb25lbnQ9e2hlYWRlckNvbXBvbmVudH1cbiAgICAgIGhlYWRlckNsYXNzTmFtZT17aGVhZGVyQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxDYWxlbmRhckNvbnRlbnQgLz5cbiAgICA8L0NhbGVuZGFyUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRG5kQ29udGV4dCxcbiAgRHJhZ092ZXJsYXksXG4gIE1vdXNlU2Vuc29yLFxuICBwb2ludGVyV2l0aGluLFxuICBUb3VjaFNlbnNvcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUge1xuICBEcmFnQ2FuY2VsRXZlbnQsXG4gIERyYWdFbmRFdmVudCxcbiAgRHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcbiAgY29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIHZpZXcsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcbiAgICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICB2aWV3OiBjb250ZXh0LnZpZXcsXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A6IGNvbnRleHQuZGlzYWJsZURyYWdBbmREcm9wLFxuICAgIH0pKVxuICBjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IFJlYWN0LnVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihcbiAgICBudWxsXG4gIClcblxuICAvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuICBjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG4gIH0+KHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIHVwZGF0ZXM6IG51bGwsXG4gIH0pXG5cbiAgLy8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuICBjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuICAgIC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuICAgIGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG4gICAgICBkaXN0YW5jZTogMixcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG4gICAgLy8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgIGRlbGF5OiAxMDAsXG4gICAgICB0b2xlcmFuY2U6IDUsXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcbiAgY29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgKSA9PiB7XG4gICAgLy8gVmFsaWRhdGUgaW5wdXRzXG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuICAgICAgLy8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcbiAgICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICBpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuICAgICAgICBzY29wZSxcbiAgICAgICAgZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG4gICAgICB9KVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cbiAgICAvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuICAgIGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG4gICAgaWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJykge1xuICAgICAgY29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCwgcmVzb3VyY2VJZCB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBldmVudCBkdXJhdGlvbiBpbiBtaW51dGVzXG4gICAgICBjb25zdCBzdGFydCA9IGFjdGl2ZUV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBlbmQgPSBhY3RpdmVFdmVudC5lbmRcbiAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGVuZC5kaWZmKHN0YXJ0LCAnbWludXRlJylcblxuICAgICAgLy8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuICAgICAgY29uc3QgbmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuICAgICAgICAuaG91cihob3VyKVxuICAgICAgICAubWludXRlKG1pbnV0ZSB8fCAwKVxuXG4gICAgICAvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cbiAgICAgIGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZHVyYXRpb25NaW51dGVzLCAnbWludXRlJylcbiAgICAgIGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG4gICAgICAgIG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXMgYW5kIHJlc291cmNlIGlmIGNoYW5nZWRcbiAgICAgIGNvbnN0IHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gJiB7IHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgfSA9XG4gICAgICAgIHtcbiAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cGRhdGVzLnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICB9XG5cbiAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcbiAgICB9IGVsc2UgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAnZGF5LWNlbGwnKSB7XG4gICAgICBjb25zdCB7IGRhdGUsIHJlc291cmNlSWQgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG4gICAgICBjb25zdCBuZXdEYXRlID0gZGF5anMoZGF0ZSlcblxuICAgICAgLy8gRm9yIG11bHRpLWRheSBldmVudHMsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIGR1cmF0aW9uIGluIGRheXNcbiAgICAgIGNvbnN0IGlzTXVsdGlEYXlFdmVudCA9ICFhY3RpdmVFdmVudC5zdGFydC5pc1NhbWUoYWN0aXZlRXZlbnQuZW5kLCAnZGF5JylcbiAgICAgIGNvbnN0IHN0YXJ0ID0gYWN0aXZlRXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IGVuZCA9IGFjdGl2ZUV2ZW50LmVuZFxuXG4gICAgICBpZiAoaXNNdWx0aURheUV2ZW50KSB7XG4gICAgICAgIGlmICh2aWV3ID09PSAnd2VlaycpIHtcbiAgICAgICAgICAvLyBHZXQgdGltZSBjb21wb25lbnRzIHRvIHByZXNlcnZlXG4gICAgICAgICAgY29uc3Qgc3RhcnRIb3VyID0gc3RhcnQuaG91cigpXG4gICAgICAgICAgY29uc3Qgc3RhcnRNaW51dGUgPSBzdGFydC5taW51dGUoKVxuICAgICAgICAgIGNvbnN0IGVuZEhvdXIgPSBlbmQuaG91cigpXG4gICAgICAgICAgY29uc3QgZW5kTWludXRlID0gZW5kLm1pbnV0ZSgpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgZHVyYXRpb24gaW4gZGF5cyB0byBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IGR1cmF0aW9uRGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5JylcblxuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgc3RhcnQgYW5kIGVuZCBkYXRlc1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgICAgICAuaG91cihzdGFydEhvdXIpXG4gICAgICAgICAgICAubWludXRlKHN0YXJ0TWludXRlKVxuICAgICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ld1N0YXJ0XG4gICAgICAgICAgICAuYWRkKGR1cmF0aW9uRGF5cywgJ2RheScpXG4gICAgICAgICAgICAuaG91cihlbmRIb3VyKVxuICAgICAgICAgICAgLm1pbnV0ZShlbmRNaW51dGUpXG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+ICYge1xuICAgICAgICAgICAgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cGRhdGVzLnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBvdGhlciB2aWV3cyBsaWtlIG1vbnRoIHZpZXdcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRhdGUgc2hpZnQgKGhvdyBtYW55IGRheXMgd2UncmUgbW92aW5nIHRoZSBldmVudClcbiAgICAgICAgICBjb25zdCBkYXlzRGlmZmVyZW5jZSA9IG5ld0RhdGUuZGlmZihzdGFydC5zdGFydE9mKCdkYXknKSwgJ2RheScpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXJ0IGFuZCBlbmQgd2hpbGUgcHJlc2VydmluZyB0aW1lIGNvbXBvbmVudHNcbiAgICAgICAgICBjb25zdCBuZXdTdGFydCA9IHN0YXJ0LmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG4gICAgICAgICAgY29uc3QgbmV3RW5kID0gZW5kLmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+ICYge1xuICAgICAgICAgICAgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cGRhdGVzLnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igc2luZ2xlLWRheSBldmVudHMsIG1haW50YWluIHRoZSB0aW1lIGJ1dCBjaGFuZ2UgdGhlIGRhdGVcbiAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXdEYXRlXG4gICAgICAgICAgLmhvdXIoYWN0aXZlRXZlbnQuc3RhcnQuaG91cigpKVxuICAgICAgICAgIC5taW51dGUoYWN0aXZlRXZlbnQuc3RhcnQubWludXRlKCkpXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIGFuZCBzZXQgbmV3IGVuZCB0aW1lXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKFxuICAgICAgICAgIGFjdGl2ZUV2ZW50LnN0YXJ0LFxuICAgICAgICAgICdtaW51dGUnXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGR1cmF0aW9uTWludXRlcywgJ21pbnV0ZScpXG5cbiAgICAgICAgY29uc3QgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiAmIHtcbiAgICAgICAgICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gICAgICAgIH0gPSB7XG4gICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwZGF0ZXMucmVzb3VyY2VJZCA9IHJlc291cmNlSWRcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gIH1cblxuICAvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcbiAgaWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuICAgIHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgb25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuICAgICAgICAgIHthY3RpdmVFdmVudCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgJ2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2FjdGl2ZUV2ZW50Py50aXRsZX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRHJhZ092ZXJsYXk+XG4gICAgICA8L0RuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG4gICAgICA8UmVjdXJyZW5jZUVkaXREaWFsb2dcbiAgICAgICAgaXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuICAgICAgICBvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuICAgICAgICBldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gIGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuICBmaXJzdERheU9mV2Vlaz86IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICBpbml0aWFsVmlldz86ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJ1xuICByZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG4gIG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkNlbGxDbGljaz86IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBvblZpZXdDaGFuZ2U/OiAodmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB2b2lkXG4gIG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBsb2NhbGU/OiBzdHJpbmdcbiAgdGltZXpvbmU/OiBzdHJpbmdcbiAgZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cbiAgZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cbiAgZGF5TWF4RXZlbnRzOiBudW1iZXJcbiAgc3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuICBoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcbiAgaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3NcbiAgLy8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuICB0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcbiAgdHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBldmVudHMgPSBbXSxcbiAgZmlyc3REYXlPZldlZWsgPSAwLFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgZGF5TWF4RXZlbnRzLFxuICBzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcbiAgdmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxufSkgPT4ge1xuICAvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuICBjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcbiAgICBldmVudHMsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgaW5pdGlhbFZpZXcsXG4gICAgb25FdmVudEFkZCxcbiAgICBvbkV2ZW50VXBkYXRlLFxuICAgIG9uRXZlbnREZWxldGUsXG4gICAgb25EYXRlQ2hhbmdlLFxuICAgIG9uVmlld0NoYW5nZSxcbiAgICBsb2NhbGUsXG4gICAgdGltZXpvbmUsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIHRyYW5zbGF0b3IsXG4gIH0pXG5cbiAgY29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgfSxcbiAgICBbY2FsZW5kYXJFbmdpbmVdXG4gIClcblxuICAvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuICBjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25FdmVudENsaWNrKSB7XG4gICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRFdmVudChldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob25DZWxsQ2xpY2spIHtcbiAgICAgICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybShzdGFydERhdGUpXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuICApXG5cbiAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50RGF0ZSxcbiAgICAgIHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG4gICAgICBldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcbiAgICAgIHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbjogY2FsZW5kYXJFbmdpbmUuaXNFdmVudEZvcm1PcGVuLFxuICAgICAgc2VsZWN0ZWRFdmVudDogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWRFdmVudCxcbiAgICAgIHNlbGVjdGVkRGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWREYXRlLFxuICAgICAgZmlyc3REYXlPZldlZWs6IGNhbGVuZGFyRW5naW5lLmZpcnN0RGF5T2ZXZWVrLFxuICAgICAgc2V0Q3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLnNldEN1cnJlbnREYXRlLFxuICAgICAgc2VsZWN0RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0RGF0ZSxcbiAgICAgIHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG4gICAgICBuZXh0UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5uZXh0UGVyaW9kLFxuICAgICAgcHJldlBlcmlvZDogY2FsZW5kYXJFbmdpbmUucHJldlBlcmlvZCxcbiAgICAgIHRvZGF5OiBjYWxlbmRhckVuZ2luZS50b2RheSxcbiAgICAgIGFkZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5hZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVFdmVudCxcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGRlbGV0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIG9wZW5FdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0sXG4gICAgICBjbG9zZUV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUuY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IGNhbGVuZGFyRW5naW5lLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcbiAgICAgIGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgICAgcmVuZGVyRXZlbnQsXG4gICAgICBvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICAgIHQ6IGNhbGVuZGFyRW5naW5lLnQsXG4gICAgfSksXG4gICAgW1xuICAgICAgY2FsZW5kYXJFbmdpbmUsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICB0aW1lem9uZSxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRXZlbnRDbGljayxcbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRheU1heEV2ZW50cyxcbiAgICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgaGVhZGVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2xhc3NOYW1lLFxuICAgIF1cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHQsIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9XG4gICAgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuICBjb25zdCBtb250aERheXMgPSB1c2VNZW1vPGRheWpzLkRheWpzW10+KCgpID0+IHtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKClcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG4gICAgICBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpLmFkZChpLCAnZGF5JylcbiAgICApXG4gIH0sIFtjdXJyZW50RGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIGJvcmRlclwiPlxuICAgICAgPFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaC0xMiB3LWZpdCcsXG4gICAgICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG4gICAgICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBmbGV4LXNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYHJlc291cmNlLW1vbnRoLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2tleX0tbW90aW9uYH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtkYXkuZm9ybWF0KCdkZGQnKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZXNvdXJjZUV2ZW50R3JpZD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0UG9zaXRpb25lZEV2ZW50cyB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbiAgcmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMgPSAoe1xuICBkYXlzLFxuICBncmlkVHlwZSA9ICdkYXknLFxuICByZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgeyBnZXRFdmVudHNGb3JSZXNvdXJjZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBkYXlNYXhFdmVudHMgfSA9XG4gICAgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3QgZW5kRGF0ZSA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuICBjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG4gIGNvbnN0IHZpc2libGVFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnREYXRlLCBlbmREYXRlKVxuXG4gIHJldHVybiBnZXRQb3NpdGlvbmVkRXZlbnRzKHtcbiAgICBkYXlzLFxuICAgIGV2ZW50czogcmVzb3VyY2VFdmVudHMuZmlsdGVyKChldmVudCkgPT5cbiAgICAgIHZpc2libGVFdmVudHMuc29tZSgoZSkgPT4gZS5pZCA9PT0gZXZlbnQuaWQpXG4gICAgKSxcbiAgICBkYXlNYXhFdmVudHMsXG4gICAgZGF5TnVtYmVySGVpZ2h0OiAwLFxuICAgIGdyaWRUeXBlLFxuICB9KVxufVxuIiwKICAgICJpbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMgfSBmcm9tICcuLi9ob29rcy91c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuXG5pbnRlcmZhY2UgV2Vla0V2ZW50c0xheWVyUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbiAgcmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUV2ZW50c0xheWVyOiBSZWFjdC5GQzxXZWVrRXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuICBkYXlzLFxuICBncmlkVHlwZSA9ICdkYXknLFxuICByZXNvdXJjZUlkLFxufSkgPT4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpXG4gIGNvbnN0IHByb2Nlc3NlZFdlZWtFdmVudHMgPSB1c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMoe1xuICAgIGRheXMsXG4gICAgZ3JpZFR5cGUsXG4gICAgcmVzb3VyY2VJZCxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiPlxuICAgICAge3Byb2Nlc3NlZFdlZWtFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBldmVudEtleSA9IGAke3Jlc291cmNlSWR9LWV2ZW50LSR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9YFxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG4gICAgICAgICAgICAgIHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZXZlbnQtbGF5ZXItZXZlbnQtJHtldmVudC5pZH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2V2ZW50S2V5fVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcbiAgaW5kZXg6IG51bWJlciAvLyBJbmRleCBvZiB0aGUgZGF5IGluIHRoZSB3ZWVrICgwLTYpXG4gIGRheTogZGF5anMuRGF5anNcbiAgZGF5TWF4RXZlbnRzPzogbnVtYmVyXG4gIGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG4gIHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuICBncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG59XG5cbmV4cG9ydCBjb25zdCBHcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG4gIGluZGV4LFxuICBkYXksXG4gIGNsYXNzTmFtZSA9ICcnLFxuICByZXNvdXJjZUlkLFxuICBncmlkVHlwZSA9ICdkYXknLFxufSkgPT4ge1xuICBjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuICAgIG9wZW46ICgpID0+IHZvaWRcbiAgICBjbG9zZTogKCkgPT4gdm9pZFxuICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuICB9PihudWxsKVxuICBjb25zdCB7XG4gICAgZGF5TWF4RXZlbnRzID0gMCxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgdCxcbiAgICBnZXRFdmVudHNGb3JSZXNvdXJjZSxcbiAgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcbiAgICBkYXlNYXhFdmVudHM6IHN0YXRlLmRheU1heEV2ZW50cyxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcbiAgICBjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuICAgIHQ6IHN0YXRlLnQsXG4gICAgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IHN0YXRlLmdldEV2ZW50c0ZvclJlc291cmNlLFxuICB9KSlcblxuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlRXZlbnRzID0gcmVzb3VyY2VJZCA/IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpIDogW11cbiAgICBjb25zdCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKGdyaWRUeXBlKSxcbiAgICAgIGRheS5lbmRPZihncmlkVHlwZSlcbiAgICApXG5cbiAgICBpZiAocmVzb3VyY2VFdmVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cbiAgICAgICAgcmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRvZGF5RXZlbnRzXG4gIH0sIFtkYXksIHJlc291cmNlSWQsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UsIGdyaWRUeXBlXSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgLy8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG4gIGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuICAgICAgZGF5LFxuICAgICAgZXZlbnRzLFxuICAgIH0pXG4gICAgYWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuICB9XG5cbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgaWQ9e2BkYXktY2VsbC0ke2RheS50b0lTT1N0cmluZygpfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gfVxuICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICBkYXRhLXRlc3RpZD17YGRheS1jZWxsLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YH1cbiAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICByZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdJyxcbiAgICAgICAgICAhaXNDdXJyZW50TW9udGggJiYgJ2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGlzTGFzdENvbHVtbiAmJiAnYm9yZGVyLXItMCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHsvKiBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQgbXVsdGktZGF5IGJhcnMgKEdvb2dsZSBDYWxlbmRhciBzdHlsZSkgKi99XG5cbiAgICAgICAgey8qIFNpbmdsZS1kYXkgZXZlbnRzIGNvbnRhaW5lciBwb3NpdGlvbmVkIGJlbG93IG11bHRpLWRheSBldmVudHMgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgIHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cbiAgICAgICAgICB7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuXG4gICAgICAgICAgey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG4gICAgICAgICAge2hhc0hpZGRlbkV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0Ryb3BwYWJsZUNlbGw+XG5cbiAgICAgIHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cbiAgICAgIDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudHNMYXllciB9IGZyb20gJy4vcmVzb3VyY2UtZXZlbnRzLWxheWVyJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYidcblxuaW50ZXJmYWNlIFJlc291cmNlRXZlbnRHcmlkUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgZGF5cyB0byBkaXNwbGF5IGluIHRoZSBncmlkXG4gICAqL1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG4gIC8qKiBUaGUgdHlwZSBvZiBncmlkIHRvIGRpc3BsYXkgLSAnZGF5JyBmb3IgZGF5IHZpZXcsICdob3VyJyBmb3Igd2VlayB2aWV3XG4gICAqIChhZmZlY3RzIGV2ZW50IHBvc2l0aW9uaW5nIGxvZ2ljKVxuICAgKi9cbiAgZ3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuICAvKipcbiAgICogQ2hpbGRyZW4gd2lsbCBiZSByZW5kZXJlZCBhcyBoZWFkZXJzIGFib3ZlIHRoZSBncmlkXG4gICAqIChlLmcuLCBmb3IgZGF5IG5hbWVzIGluIG1vbnRoIHZpZXcpXG4gICAqL1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcbiAgZGF5cyxcbiAgZ3JpZFR5cGUgPSAnZGF5JyxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMsIGRheU1heEV2ZW50cywgcmVuZGVyUmVzb3VyY2UgfSA9XG4gICAgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuICBjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuICAgIGlkOiByZXNvdXJjZS5pZCxcbiAgICB0aXRsZTogcmVzb3VyY2UudGl0bGUsXG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIGNlbGxzOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuICAgICAgbGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcbiAgICAgIHZhbHVlOiBkYXksXG4gICAgICBpZDogZGF5LnRvSVNPU3RyaW5nKCksXG4gICAgfSkpLFxuICB9KSlcblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhXG4gICAgICBjbGFzc05hbWU9XCJoLWZ1bGxcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1zY3JvbGwtYXJlYVwiXG4gICAgICB2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyB9fVxuICAgID5cbiAgICAgIHsvKiBoZWFkZXIgcm93ICovfVxuICAgICAge2NoaWxkcmVufVxuXG4gICAgICB7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgaC1bY2FsYygxMDAlLTNyZW0pXSB3LWZpdFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7cm93cy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3Jvdy5pZH0gY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgcmVsYXRpdmUgbWluLWgtWzYwcHhdIFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICd3LTQwIGJvcmRlci1iIGJvcmRlci1yIHAtMiBmbGV4IGZsZXgtc2hyaW5rLTAgc3RpY2t5IGxlZnQtMCB6LTIwJyxcbiAgICAgICAgICAgICAgICAgIHJvdy5yZXNvdXJjZS5jb2xvciB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIHJvdy5yZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJhY2tncm91bmQnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6IHJvdy5yZXNvdXJjZS5jb2xvcixcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcm93LnJlc291cmNlLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3JlbmRlclJlc291cmNlID8gKFxuICAgICAgICAgICAgICAgICAgcmVuZGVyUmVzb3VyY2Uocm93LnJlc291cmNlKVxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJyZWFrLXdvcmRzIHRleHQtc21cIj57cm93LnRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cbiAgICAgICAgICAgICAgICB7cm93LmNlbGxzLm1hcCgoY2VsbCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEdyaWRDZWxsXG4gICAgICAgICAgICAgICAgICAgIGtleT17Y2VsbC5pZH1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2NlbGwudmFsdWUuZGF5KCl9XG4gICAgICAgICAgICAgICAgICAgIGRheT17Y2VsbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJZD17cm93LmlkfVxuICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgICAgICAgICAgICAgICAgZ3JpZFR5cGU9e2dyaWRUeXBlfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItciBib3JkZXItYiB3LTIwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG5cbiAgICAgICAgICAgICAgICB7LyogRXZlbnRzIGxheWVyIHBvc2l0aW9uZWQgYWJzb2x1dGVseSBvdmVyIHRoZSByZXNvdXJjZSByb3cgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgPFJlc291cmNlRXZlbnRzTGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgZGF5cz17ZGF5c31cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJZD17cm93LmlkfVxuICAgICAgICAgICAgICAgICAgICBncmlkVHlwZT17Z3JpZFR5cGV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPFNjcm9sbEJhciBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPlxuICAgIDwvU2Nyb2xsQXJlYT5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50RGF0ZSxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICB0LFxuICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcbiAgY29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG4gICAgW2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cbiAgKVxuXG4gIC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuICBjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gd2Vla0RheXMuZmxhdE1hcCgoZGF5KSA9PlxuICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGhvdXIpID0+IGRheS5ob3VyKGhvdXIpLm1pbnV0ZSgwKSlcbiAgICApXG4gIH0sIFt3ZWVrRGF5c10pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sIGJvcmRlclwiPlxuICAgICAgPFJlc291cmNlRXZlbnRHcmlkIGRheXM9e3dlZWtIb3Vyc30gZ3JpZFR5cGU9XCJob3VyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaC0yNCB3LWZpdCcsXG4gICAgICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG4gICAgICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBmbGV4LXNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBib3JkZXItYiBib3JkZXItciBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICB7LyogRGF5IGhlYWRlciByb3cgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuICAgICAgICAgICAgICB7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtrZXl9LW1vdGlvbmB9XG4gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogaW5kZXggKiAwLjA1LFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdmbGV4LXNocmluay0wIGJvcmRlci1yIGZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIHctW2NhbGMoMjQqdmFyKC0tc3BhY2luZykqMjApXScsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3RpY2t5IGxlZnQtMS8yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtkYXkuZm9ybWF0KCdNL0QnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuICAgICAgICAgICAgICB7d2Vla0hvdXJzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfS1ob3VyYFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2tleX0tbW90aW9uYH1cbiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ctMjAgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBmbGV4LXNocmluay0wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7Y29sLmZvcm1hdCgnaGEnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVzb3VyY2VFdmVudEdyaWQ+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG4gIGNvbnN0IGRheUhvdXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBob3VyKSA9PlxuICAgICAgY3VycmVudERhdGUuaG91cihob3VyKS5taW51dGUoMClcbiAgICApXG4gIH0sIFtjdXJyZW50RGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sIGJvcmRlclwiPlxuICAgICAgPFJlc291cmNlRXZlbnRHcmlkIGRheXM9e2RheUhvdXJzfSBncmlkVHlwZT1cImhvdXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZmxleCBoLTEyIHctZml0JyxcbiAgICAgICAgICAgIHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cbiAgICAgICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWVcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTQwIGJvcmRlci1iIGJvcmRlci1yIGZsZXgtc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJvcmRlci1iIGJvcmRlci1yIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuICAgICAgICAgICAgICB7ZGF5SG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNOb3dIb3VyID0gY29sLmlzU2FtZShkYXlqcygpLCAnaG91cicpXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYHJlc291cmNlLWRheS1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX1gXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7a2V5fS1tb3Rpb25gfVxuICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6ICdlYXNlSW5PdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAndy0yMCBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIGZsZXgtc2hyaW5rLTAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtjb2wuZm9ybWF0KCdoYScpfVxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZXNvdXJjZUV2ZW50R3JpZD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZSxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB2aWV3TWFwID0ge1xuICAgIG1vbnRoOiA8UmVzb3VyY2VNb250aFZpZXcga2V5PVwibW9udGhcIiAvPixcbiAgICB3ZWVrOiA8UmVzb3VyY2VXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG4gICAgZGF5OiA8UmVzb3VyY2VEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICB1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgPEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVQcmVzZW5jZSBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cbiAgICAgIDxDYWxlbmRhckRuZENvbnRleHQ+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXt2aWV3fVxuICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB4OiAyMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB4OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHg6IC0yMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4xLCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3ZpZXdNYXBbdmlld119XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG4gICAgICB7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG4gICAgICB7aXNFdmVudEZvcm1PcGVuICYmIChcbiAgICAgICAgPEV2ZW50Rm9ybVxuICAgICAgICAgIG9uQ2xvc2U9e2Nsb3NlRXZlbnRGb3JtfVxuICAgICAgICAgIHNlbGVjdGVkRXZlbnQ9e3NlbGVjdGVkRXZlbnR9XG4gICAgICAgICAgc2VsZWN0ZWREYXRlPXtzZWxlY3RlZERhdGV9XG4gICAgICAgICAgb25BZGQ9e2FkZEV2ZW50fVxuICAgICAgICAgIG9uVXBkYXRlPXtoYW5kbGVPblVwZGF0ZX1cbiAgICAgICAgICBvbkRlbGV0ZT17aGFuZGxlT25EZWxldGV9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuaW1wb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxULCBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcbiAgZXZlbnRzID0gW10sXG4gIHJlc291cmNlcyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuICBkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuICBzdGlja3lWaWV3SGVhZGVyLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxuICByZW5kZXJSZXNvdXJjZSxcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyXG4gICAgICBldmVudHM9e2V2ZW50c31cbiAgICAgIHJlc291cmNlcz17cmVzb3VyY2VzfVxuICAgICAgZmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cbiAgICAgIGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cbiAgICAgIHJlbmRlckV2ZW50PXtyZW5kZXJFdmVudH1cbiAgICAgIHJlbmRlclJlc291cmNlPXtyZW5kZXJSZXNvdXJjZX1cbiAgICAgIG9uRXZlbnRDbGljaz17b25FdmVudENsaWNrfVxuICAgICAgb25DZWxsQ2xpY2s9e29uQ2VsbENsaWNrfVxuICAgICAgb25WaWV3Q2hhbmdlPXtvblZpZXdDaGFuZ2V9XG4gICAgICBvbkV2ZW50QWRkPXtvbkV2ZW50QWRkfVxuICAgICAgb25FdmVudFVwZGF0ZT17b25FdmVudFVwZGF0ZX1cbiAgICAgIG9uRXZlbnREZWxldGU9e29uRXZlbnREZWxldGV9XG4gICAgICBvbkRhdGVDaGFuZ2U9e29uRGF0ZUNoYW5nZX1cbiAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgZGlzYWJsZUNlbGxDbGljaz17ZGlzYWJsZUNlbGxDbGlja31cbiAgICAgIGRpc2FibGVFdmVudENsaWNrPXtkaXNhYmxlRXZlbnRDbGlja31cbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICBzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cbiAgICAgIGhlYWRlckNvbXBvbmVudD17aGVhZGVyQ29tcG9uZW50fVxuICAgICAgaGVhZGVyQ2xhc3NOYW1lPXtoZWFkZXJDbGFzc05hbWV9XG4gICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgIHRyYW5zbGF0b3I9e3RyYW5zbGF0b3J9XG4gICAgPlxuICAgICAgPFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG4gICAgPC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiLy8gTWFpbiBjYWxlbmRhciBjb21wb25lbnRzXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rc1xuZXhwb3J0IHsgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB7IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG4gIGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuICBpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuLy8gUmVzb3VyY2UgY2FsZW5kYXIgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgUmVzb3VyY2UsXG4gIFJlc291cmNlQ2FsZW5kYXJFdmVudCxcbn0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRnJlcXVlbmN5LCBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNsYXRpb25zLFxuICBUcmFuc2xhdGlvbktleSxcbiAgVHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFDQSwwQkFBUyxhQUFpQixzQkFDMUIsc0JBQWdCLGVDRWhCLHdCQUFTLGlCQUFlLGVBb0RqQixJQUFNLEdBQ1gsR0FBK0MsTUFBUyxFQUU3QyxFQUFxQixJQUEyQixDQUMzRCxJQUFNLEVBQVUsR0FBVyxFQUFlLEVBQzFDLEdBQUksSUFBWSxPQUNkLE1BQVUsTUFBTSwyREFBMkQsRUFFN0UsT0FBTyxHQStCSSxHQUEwQixJQUFxQyxDQUMxRSxJQUFNLEVBQVUsR0FBVyxFQUFlLEVBQzFDLEdBQUksSUFBWSxPQUNkLE1BQVUsTUFDUixnRUFDRixFQUVGLE1BQU8sQ0FDTCxZQUFhLEVBQVEsWUFDckIsS0FBTSxFQUFRLEtBQ2QsT0FBUSxFQUFRLE9BQ2hCLGdCQUFpQixFQUFRLGdCQUN6QixjQUFlLEVBQVEsY0FDdkIsYUFB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QzNCLFdBQVksQ0FBRSxTQUFVLElBQUssS0FBTSxXQUFZLEVBQy9DLFVBQVUsK0JBTlosU0FRRyxFQUFRLElBUEosQ0FRTCxFQUNGLEVBQ0YsRUFHRCxHQUNDLEdBQUMsR0FBRCxDQUNFLFFBQVMsRUFDVCxjQUFlLEVBQ2YsYUFBYyxFQUNkLE1BQU8sRUFDUCxTQUFVLEVBQ1YsU0FBVSxFQUNaLEdBRUYsNENDOURDLElBQU0sR0FBOEQsRUFDekUsU0FBUyxDQUFDLEVBQ1YsWUFBWSxDQUFDLEVBQ2IsaUJBQWlCLFNBQ2pCLGNBQWMsUUFDZCxjQUNBLGVBQ0EsY0FDQSxlQUNBLGFBQ0EsZ0JBQ0EsZ0JBQ0EsZUFDQSxTQUNBLFdBQ0EsbUJBQ0Esb0JBQ0EscUJBQXFCLEdBQ3JCLGVBQWUsR0FDZixtQkFDQSxzQkFDQSxrQkFDQSxrQkFDQSxlQUNBLGFBQ0Esb0JBQ0ksQ0FDSixPQUNFLEdBNEJFLEdBNUJGLENBQ0UsT0FBUSxFQUNSLFVBQVcsRUFDWCxlQUFnQixHQUFxQixHQUNyQyxZQUFhLEVBQ2IsWUFBYSxFQUNiLGVBQWdCLEVBQ2hCLGFBQWMsRUFDZCxZQUFhLEVBQ2IsYUFBYyxFQUNkLFdBQVksRUFDWixjQUFlLEVBQ2YsY0FBZSxFQUNmLGFBQWMsRUFDZCxPQUFRLEVBQ1IsU0FBVSxFQUNWLGlCQUFrQixFQUNsQixrQkFBbUIsRUFDbkIsbUJBQW9CLEVBQ3BCLGFBQWMsRUFDZCxpQkFBa0IsRUFDbEIsb0JBQXFCLEVBQ3JCLGdCQUFpQixFQUNqQixnQkFBaUIsRUFDakIsYUFBYyxFQUNkLFdBQVksRUF6QmQsU0EyQkUsR0FBQyxHQUFELEVBQXNCLEVBQ3RCLEdDaENOLGdCQUFTIiwKICAiZGVidWdJZCI6ICJDRkRDQkY2OUVBNjM4NTA1NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
7
+ //# debugId=77F4C814348E425064756E2164756E21
8
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9tb250aC12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0LnRzIiwgInNyYy9saWIvdXRpbHMvaW5kZXgudHMiLCAic3JjL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZy50cyIsICJzcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiLCAic3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9jYWxlbmRhci50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvY2hlY2tib3gudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2NhcmQudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2RhdGUtcGlja2VyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9wb3BvdmVyLnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9kaWFsb2cudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsICJzcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvc2Nyb2xsLWFyZWEudHN4IiwgInNyYy9jb21wb25lbnRzL3VpL3NlbGVjdC50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdGFicy50c3giLCAic3JjL2NvbXBvbmVudHMvdWkvdG9vbHRpcC50c3giLCAic3JjL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudC50c3giLCAic3JjL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0LnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0L2NvbnRleHQudHMiLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXIudHN4IiwgInNyYy9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lLnRzIiwgInNyYy9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlci50cyIsICJzcmMvbGliL3RyYW5zbGF0aW9ucy9kZWZhdWx0LnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L21vbnRoLWhlYWRlci50c3giLCAic3JjL2xpYi91dGlscy9wb3NpdGlvbi13ZWVrLWV2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L3dlZWstZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2RheS1jZWxsLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbC50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldy50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstYWxsLWRheS1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3dlZWstdmlldy93ZWVrLWhlYWRlci50c3giLCAic3JjL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cy50cyIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktZXZlbnRzLWxheWVyLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay1kYXktY29sLnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvd2Vlay10aW1lLWdyaWQudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS12aWV3LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktYWxsLWRheS1yb3cudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS1oZWFkZXIudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L2RheS10aW1lLWNvbC50c3giLCAic3JjL2NvbXBvbmVudHMvZXZlbnQtZm9ybS9ldmVudC1mb3JtLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdG9yL3JlY3VycmVuY2UtZWRpdG9yLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVjdXJyZW5jZS9jb21wb25lbnRzL3JlY3VycmVuY2UtZWRpdC1kaWFsb2cvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZy50c3giLCAic3JjL2ZlYXR1cmVzL3JlY3VycmVuY2UvaG9va3MvdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zLnRzIiwgInNyYy9saWIvdXRpbHMvZXhwb3J0LWljYWwudHMiLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL2Jhc2UtaGVhZGVyLnRzeCIsICJzcmMvY29tcG9uZW50cy9oZWFkZXIvdGl0bGUtY29udGVudC50c3giLCAic3JjL2NvbXBvbmVudHMvaGVhZGVyL3ZpZXctY29udHJvbHMudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL3llYXItdmlldy95ZWFyLXZpZXcudHN4IiwgInNyYy9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyLnRzeCIsICJzcmMvY29tcG9uZW50cy9kcmFnLWFuZC1kcm9wL2NhbGVuZGFyLWRuZC1jb250ZXh0LnRzeCIsICJzcmMvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlci50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldy9yZXNvdXJjZS1tb250aC1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvaG9va3MvdXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzLnRzIiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50cy1sYXllci50c3giLCAic3JjL2NvbXBvbmVudHMvZ3JpZC1jZWxsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9tb250aC12aWV3L2luZGV4LnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy93ZWVrLXZpZXcvaW5kZXgudHN4IiwgInNyYy9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3L3Jlc291cmNlLWRheS1ob3Jpem9udGFsLnRzeCIsICJzcmMvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9pbmRleC50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvcmVzb3VyY2UtY2FsZW5kYXItYm9keS50c3giLCAic3JjL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIvaWxhbXktcmVzb3VyY2UtY2FsZW5kYXIudHN4IiwgInNyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgQWxsRXZlbnREaWFsb2cgfSBmcm9tICdAL2NvbXBvbmVudHMvYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IE1vbnRoVmlld1Byb3BzLCBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBNb250aEhlYWRlciB9IGZyb20gJy4vbW9udGgtaGVhZGVyJ1xuaW1wb3J0IHsgV2Vla0V2ZW50c0xheWVyIH0gZnJvbSAnLi93ZWVrLWV2ZW50cy1sYXllcidcbmltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyBEYXlDZWxsIH0gZnJvbSAnLi9kYXktY2VsbCdcblxuZXhwb3J0IGNvbnN0IE1vbnRoVmlldzogUmVhY3QuRkM8TW9udGhWaWV3UHJvcHM+ID0gKHsgZGF5TWF4RXZlbnRzID0gMyB9KSA9PiB7XG4gIGNvbnN0IGFsbEV2ZW50c0RpYWxvZ1JlZiA9IFJlYWN0LnVzZVJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+KG51bGwpXG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdldCBzdGFydCBkYXRlIGZvciB0aGUgY3VycmVudCBtb250aCB2aWV3IGJhc2VkIG9uIGZpcnN0RGF5T2ZXZWVrXG4gIGNvbnN0IGZpcnN0RGF5T2ZNb250aCA9IGN1cnJlbnREYXRlLnN0YXJ0T2YoJ21vbnRoJylcblxuICAvLyBDYWxjdWxhdGUgdGhlIGZpcnN0IGRheSBvZiB0aGUgY2FsZW5kYXIgZ3JpZCBjb3JyZWN0bHlcbiAgLy8gRmluZCB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgKGUuZy4gU3VuZGF5IG9yIE1vbmRheSkgdGhhdCBjb21lcyBiZWZvcmUgb3Igb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcbiAgbGV0IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gZmlyc3REYXlPZk1vbnRoLmNsb25lKClcbiAgd2hpbGUgKGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmRheSgpICE9PSBmaXJzdERheU9mV2Vlaykge1xuICAgIGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyID0gYWRqdXN0ZWRGaXJzdERheU9mQ2FsZW5kYXIuc3VidHJhY3QoMSwgJ2RheScpXG4gIH1cblxuICAvLyBBbHdheXMgZ2VuZXJhdGUgNiB3ZWVrcyAoNDIgZGF5cykgcmVnYXJkbGVzcyBvZiB0aGUgbW9udGggbGVuZ3RoXG4gIC8vIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSA2IHJvd3Mgb2YgZGF5c1xuICBjb25zdCBjYWxlbmRhckRheXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyA2IHdlZWtzIMOXIDcgZGF5cyA9IDQyIGRheXNcbiAgICBjb25zdCBkYXlzOiBkYXlqcy5EYXlqc1tdW10gPSBbW11dXG4gICAgbGV0IGRheSA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLmNsb25lKCkgLy8gQ2xvbmUgdG8gYXZvaWQgbXV0YXRpb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQyOyBpKyspIHtcbiAgICAgIGlmIChkYXlzW2RheXMubGVuZ3RoIC0gMV0ubGVuZ3RoID09PSA3KSB7XG4gICAgICAgIGRheXMucHVzaChbXSkgLy8gU3RhcnQgYSBuZXcgd2Vla1xuICAgICAgfVxuICAgICAgZGF5c1tkYXlzLmxlbmd0aCAtIDFdLnB1c2goZGF5KVxuICAgICAgZGF5ID0gZGF5LmFkZCgxLCAnZGF5JykgLy8gTW92ZSB0byB0aGUgbmV4dCBkYXlcbiAgICB9XG4gICAgcmV0dXJuIGRheXNcbiAgfSwgW2FkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyXSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgZmxleC1jb2xcIiBkYXRhLXRlc3RpZD1cIm1vbnRoLXZpZXdcIj5cbiAgICAgIHsvKiBXZWVrIGRheXMgaGVhZGVyICovfVxuICAgICAgPE1vbnRoSGVhZGVyIGNsYXNzTmFtZT1cImgtWzNyZW1dXCIgLz5cblxuICAgICAgey8qIENhbGVuZGFyIGdyaWQgLSBhZGRlZCBmaXhlZCBoZWlnaHQgKi99XG4gICAgICA8U2Nyb2xsQXJlYVxuICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1hdXRvIGgtW2NhbGMoMTAwJS0zcmVtKV1cIlxuICAgICAgICBkYXRhLXRlc3RpZD1cIm1vbnRoLXNjcm9sbC1hcmVhXCJcbiAgICAgICAgdmlld1BvcnRQcm9wcz17eyBjbGFzc05hbWU6ICcqOmZsZXghICo6ZmxleC1jb2wgKjptaW4taC1mdWxsJyB9fVxuICAgICAgPlxuICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgZ3JpZCBoLWZ1bGwgZ3JpZC1jb2xzLTcgZ3JpZC1yb3dzLTYgb3ZlcmZsb3ctYXV0byBmbGV4LTFcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1jYWxlbmRhci1ncmlkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7LyogRGF5IGNlbGxzICovfVxuICAgICAgICAgICAge2NhbGVuZGFyRGF5cy5tYXAoKGRheXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAga2V5PXtgd2Vlay0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBjb2wtc3Bhbi03IGdyaWQgZ3JpZC1jb2xzLTdcIlxuICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B3ZWVrLXJvdy0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2RheXMubWFwKChkYXksIGRheUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgPERheUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtkYXlJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRheT17ZGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1yIGJvcmRlci1iIGZpcnN0OmJvcmRlci1sXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KX1cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8V2Vla0V2ZW50c0xheWVyIGRheXM9e2RheXN9IC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cblxuICAgICAgey8qIERpYWxvZyBmb3Igc2hvd2luZyBhbGwgZXZlbnRzICovfVxuICAgICAgPEFsbEV2ZW50RGlhbG9nIHJlZj17YWxsRXZlbnRzRGlhbG9nUmVmfSAvPlxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uS2V5IH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL3R5cGVzJ1xuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgaW50ZXJmYWNlIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdIC8vIFVucHJvY2Vzc2VkIGV2ZW50cyBmb3IgZXhwb3J0XG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyIC8vIDAgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5LCBldGMuXG4gIHNldEN1cnJlbnREYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2VsZWN0RGF0ZTogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIHNldFZpZXc6ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbmV4dFBlcmlvZDogKCkgPT4gdm9pZFxuICBwcmV2UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHRvZGF5OiAoKSA9PiB2b2lkXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuICBvcGVuRXZlbnRGb3JtOiAoZGF0ZT86IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIGNsb3NlRXZlbnRGb3JtOiAoKSA9PiB2b2lkXG4gIGdldEV2ZW50c0ZvckRhdGVSYW5nZTogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anNcbiAgKSA9PiBDYWxlbmRhckV2ZW50W11cbiAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlbmRlckV2ZW50PzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25DZWxsQ2xpY2s6IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjdXJyZW50TG9jYWxlPzogc3RyaW5nXG4gIGRpc2FibGVDZWxsQ2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVFdmVudENsaWNrPzogYm9vbGVhblxuICBkaXNhYmxlRHJhZ0FuZERyb3A/OiBib29sZWFuXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIHN0aWNreVZpZXdIZWFkZXI6IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZTogc3RyaW5nXG4gIGhlYWRlckNvbXBvbmVudD86IFJlYWN0LlJlYWN0Tm9kZSAvLyBPcHRpb25hbCBjdXN0b20gaGVhZGVyIGNvbXBvbmVudFxuICBoZWFkZXJDbGFzc05hbWU/OiBzdHJpbmcgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjbGFzc1xuICAvLyBUcmFuc2xhdGlvbiBmdW5jdGlvblxuICB0OiAoa2V5OiBUcmFuc2xhdGlvbktleSkgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBDYWxlbmRhckNvbnRleHQ6IFJlYWN0LkNvbnRleHQ8Q2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4gPVxuICBjcmVhdGVDb250ZXh0PENhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuZXhwb3J0IGNvbnN0IHVzZUNhbGVuZGFyQ29udGV4dCA9ICgpOiBDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQ2FsZW5kYXJDb250ZXh0KVxuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInKVxuICB9XG4gIHJldHVybiBjb250ZXh0XG59XG5cbi8qKlxuICogU2ltcGxpZmllZCBjYWxlbmRhciBjb250ZXh0IHR5cGUgZm9yIGV4dGVybmFsIHVzZVxuICogQ29udGFpbnMgb25seSB0aGUgbW9zdCBjb21tb25seSB1c2VkIGNhbGVuZGFyIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VJbGFteUNhbGVuZGFyQ29udGV4dFJldHVybiB7XG4gIHJlYWRvbmx5IGN1cnJlbnREYXRlOiBkYXlqcy5EYXlqc1xuICByZWFkb25seSB2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgcmVhZG9ubHkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgcmVhZG9ubHkgaXNFdmVudEZvcm1PcGVuOiBib29sZWFuXG4gIHJlYWRvbmx5IHNlbGVjdGVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gIHJlYWRvbmx5IHNlbGVjdGVkRGF0ZTogZGF5anMuRGF5anMgfCBudWxsXG4gIHJlYWRvbmx5IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgcmVhZG9ubHkgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgcmVhZG9ubHkgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICByZWFkb25seSBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHJlYWRvbmx5IHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgdG9kYXk6ICgpID0+IHZvaWRcbiAgcmVhZG9ubHkgYWRkRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICByZWFkb25seSB1cGRhdGVFdmVudDogKFxuICAgIGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBldmVudDogUGFydGlhbDxDYWxlbmRhckV2ZW50PlxuICApID0+IHZvaWRcbiAgcmVhZG9ubHkgZGVsZXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHZvaWRcbiAgcmVhZG9ubHkgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICByZWFkb25seSBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgPSAoKTogVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4gPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlSWxhbXlDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIENhbGVuZGFyUHJvdmlkZXInXG4gICAgKVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudERhdGU6IGNvbnRleHQuY3VycmVudERhdGUsXG4gICAgdmlldzogY29udGV4dC52aWV3LFxuICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICBzZWxlY3RlZEV2ZW50OiBjb250ZXh0LnNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlOiBjb250ZXh0LnNlbGVjdGVkRGF0ZSxcbiAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICBzZXRDdXJyZW50RGF0ZTogY29udGV4dC5zZXRDdXJyZW50RGF0ZSxcbiAgICBzZWxlY3REYXRlOiBjb250ZXh0LnNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgYWRkRXZlbnQ6IGNvbnRleHQuYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQ6IGNvbnRleHQudXBkYXRlRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGNsb3NlRXZlbnRGb3JtOiBjb250ZXh0LmNsb3NlRXZlbnRGb3JtLFxuICB9IGFzIGNvbnN0XG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cydcbmltcG9ydCB0eXBlIHsgQ2xhc3NWYWx1ZSB9IGZyb20gJ2Nsc3gnXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tICd0YWlsd2luZC1tZXJnZSdcbmltcG9ydCB0eXBlIHsgSWxhbXlDYWxlbmRhclByb3BFdmVudCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuICByZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpXG59XG5cbmV4cG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnLi9kYXRlLXV0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNb2NrRXZlbnRzKHsgY291bnQgPSA1IH0gPSB7fSkge1xuICBjb25zdCBldmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGV2ZW50cy5wdXNoKHtcbiAgICAgIGlkOiBpLnRvU3RyaW5nKCksXG4gICAgICB0aXRsZTogYE1vY2sgRXZlbnQgJHtpICsgMX1gLFxuICAgICAgc3RhcnQ6IGRheWpzKCkuc3RhcnRPZignd2VlaycpLmFkZChpLCAnZGF5Jykuc3RhcnRPZignZGF5JyksXG4gICAgICBlbmQ6IGRheWpzKCkuc3RhcnRPZignd2VlaycpLmFkZChpLCAnZGF5JykuZW5kT2YoJ2RheScpLFxuICAgICAgY29sb3I6ICdiZy1ncmF5LTEwMCB0ZXh0LWdyYXktODAwJyxcbiAgICB9KVxuICB9XG4gIHJldHVybiBldmVudHNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVEYXRlKGRhdGU6IGRheWpzLkRheWpzIHwgRGF0ZSB8IHN0cmluZyk6IGRheWpzLkRheWpzIHtcbiAgaWYgKGRheWpzLmlzRGF5anMoZGF0ZSkpIHtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgY29uc3QgcGFyc2VkRGF0ZSA9IGRheWpzKGRhdGUpXG4gIHJldHVybiBwYXJzZWREYXRlLmlzVmFsaWQoKSA/IHBhcnNlZERhdGUgOiBkYXlqcygpXG59XG5cbmV4cG9ydCBjb25zdCBvbWl0S2V5cyA9IDxUIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgVD4oXG4gIG9iajogVCxcbiAga2V5czogS1tdXG4pOiBPbWl0PFQsIEs+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5vYmogfVxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgZGVsZXRlIHJlc3VsdFtrZXldXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHVibGljRmFjaW5nQ2FsZW5kYXJFdmVudChcbiAgZXZlbnRzOiBJbGFteUNhbGVuZGFyUHJvcEV2ZW50W11cbik6IENhbGVuZGFyRXZlbnRbXSB7XG4gIGlmICghZXZlbnRzIHx8ICFldmVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAvLyBFdmVudHMgYXJlIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgZm9ybWF0IHdpdGggUlJVTEUgc3RyaW5nc1xuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIHN0YXJ0OiBkYXlqcy5pc0RheWpzKGV2ZW50LnN0YXJ0KSA/IGV2ZW50LnN0YXJ0IDogZGF5anMoZXZlbnQuc3RhcnQpLFxuICAgICAgZW5kOiBkYXlqcy5pc0RheWpzKGV2ZW50LmVuZCkgPyBldmVudC5lbmQgOiBkYXlqcyhldmVudC5lbmQpLFxuICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICB9KVxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgd2Vla2RheSBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla2RheS5qcydcbmltcG9ydCB3ZWVrT2ZZZWFyIGZyb20gJ2RheWpzL3BsdWdpbi93ZWVrT2ZZZWFyLmpzJ1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXIuanMnXG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlLmpzJ1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuLmpzJ1xuaW1wb3J0IG1pbk1heCBmcm9tICdkYXlqcy9wbHVnaW4vbWluTWF4LmpzJ1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZS5qcydcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yy5qcydcbmltcG9ydCBsb2NhbGVEYXRhIGZyb20gJ2RheWpzL3BsdWdpbi9sb2NhbGVEYXRhLmpzJ1xuXG4vLyBFeHRlbmQgZGF5anMgd2l0aCBwbHVnaW5zXG5kYXlqcy5leHRlbmQod2Vla2RheSlcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNCZXR3ZWVuKVxuZGF5anMuZXh0ZW5kKG1pbk1heClcbmRheWpzLmV4dGVuZCh0aW1lem9uZSlcbmRheWpzLmV4dGVuZCh1dGMpXG5kYXlqcy5leHRlbmQobG9jYWxlRGF0YSlcblxuLy8gSW1wb3J0IGFsbCBkYXlqcyBsb2NhbGVzIGFscGhhYmV0aWNhbGx5XG4vLyBsb2NhbGUuanNvbiBmaWxlOiBbe1wia2V5XCI6XCJhZlwiLFwibmFtZVwiOlwiQWZyaWthYW5zXCJ9LHtcImtleVwiOlwiYW1cIixcIm5hbWVcIjpcIkFtaGFyaWNcIn0se1wia2V5XCI6XCJhci1kelwiLFwibmFtZVwiOlwiQXJhYmljIChBbGdlcmlhKVwifSx7XCJrZXlcIjpcImFyLWlxXCIsXCJuYW1lXCI6XCIgQXJhYmljIChJcmFxKVwifSx7XCJrZXlcIjpcImFyLWt3XCIsXCJuYW1lXCI6XCJBcmFiaWMgKEt1d2FpdClcIn0se1wia2V5XCI6XCJhci1seVwiLFwibmFtZVwiOlwiQXJhYmljIChMeWJpYSlcIn0se1wia2V5XCI6XCJhci1tYVwiLFwibmFtZVwiOlwiQXJhYmljIChNb3JvY2NvKVwifSx7XCJrZXlcIjpcImFyLXNhXCIsXCJuYW1lXCI6XCJBcmFiaWMgKFNhdWRpIEFyYWJpYSlcIn0se1wia2V5XCI6XCJhci10blwiLFwibmFtZVwiOlwiIEFyYWJpYyAoVHVuaXNpYSlcIn0se1wia2V5XCI6XCJhclwiLFwibmFtZVwiOlwiQXJhYmljXCJ9LHtcImtleVwiOlwiYXpcIixcIm5hbWVcIjpcIkF6ZXJiYWlqYW5pXCJ9LHtcImtleVwiOlwiYmVcIixcIm5hbWVcIjpcIkJlbGFydXNpYW5cIn0se1wia2V5XCI6XCJiZ1wiLFwibmFtZVwiOlwiQnVsZ2FyaWFuXCJ9LHtcImtleVwiOlwiYmlcIixcIm5hbWVcIjpcIkJpc2xhbWFcIn0se1wia2V5XCI6XCJibVwiLFwibmFtZVwiOlwiQmFtYmFyYVwifSx7XCJrZXlcIjpcImJuLWJkXCIsXCJuYW1lXCI6XCJCZW5nYWxpIChCYW5nbGFkZXNoKVwifSx7XCJrZXlcIjpcImJuXCIsXCJuYW1lXCI6XCJCZW5nYWxpXCJ9LHtcImtleVwiOlwiYm9cIixcIm5hbWVcIjpcIlRpYmV0YW5cIn0se1wia2V5XCI6XCJiclwiLFwibmFtZVwiOlwiQnJldG9uXCJ9LHtcImtleVwiOlwiYnNcIixcIm5hbWVcIjpcIkJvc25pYW5cIn0se1wia2V5XCI6XCJjYVwiLFwibmFtZVwiOlwiQ2F0YWxhblwifSx7XCJrZXlcIjpcImNzXCIsXCJuYW1lXCI6XCJDemVjaFwifSx7XCJrZXlcIjpcImN2XCIsXCJuYW1lXCI6XCJDaHV2YXNoXCJ9LHtcImtleVwiOlwiY3lcIixcIm5hbWVcIjpcIldlbHNoXCJ9LHtcImtleVwiOlwiZGUtYXRcIixcIm5hbWVcIjpcIkdlcm1hbiAoQXVzdHJpYSlcIn0se1wia2V5XCI6XCJkYVwiLFwibmFtZVwiOlwiRGFuaXNoXCJ9LHtcImtleVwiOlwiZGUtY2hcIixcIm5hbWVcIjpcIkdlcm1hbiAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiZGVcIixcIm5hbWVcIjpcIkdlcm1hblwifSx7XCJrZXlcIjpcImR2XCIsXCJuYW1lXCI6XCJNYWxkaXZpYW5cIn0se1wia2V5XCI6XCJlbFwiLFwibmFtZVwiOlwiR3JlZWtcIn0se1wia2V5XCI6XCJlbi1hdVwiLFwibmFtZVwiOlwiRW5nbGlzaCAoQXVzdHJhbGlhKVwifSx7XCJrZXlcIjpcImVuLWNhXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChDYW5hZGEpXCJ9LHtcImtleVwiOlwiZW4tZ2JcIixcIm5hbWVcIjpcIkVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKVwifSx7XCJrZXlcIjpcImVuLWllXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJcmVsYW5kKVwifSx7XCJrZXlcIjpcImVuLWlsXCIsXCJuYW1lXCI6XCJFbmdsaXNoIChJc3JhZWwpXCJ9LHtcImtleVwiOlwiZW4taW5cIixcIm5hbWVcIjpcIkVuZ2xpc2ggKEluZGlhKVwifSx7XCJrZXlcIjpcImVuLW56XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChOZXcgWmVhbGFuZClcIn0se1wia2V5XCI6XCJlbi1zZ1wiLFwibmFtZVwiOlwiRW5nbGlzaCAoU2luZ2Fwb3JlKVwifSx7XCJrZXlcIjpcImVuLXR0XCIsXCJuYW1lXCI6XCJFbmdsaXNoIChUcmluaWRhZCAmIFRvYmFnbylcIn0se1wia2V5XCI6XCJlb1wiLFwibmFtZVwiOlwiRXNwZXJhbnRvXCJ9LHtcImtleVwiOlwiZW5cIixcIm5hbWVcIjpcIkVuZ2xpc2hcIn0se1wia2V5XCI6XCJlcy1kb1wiLFwibmFtZVwiOlwiU3BhbmlzaCAoRG9taW5pY2FuIFJlcHVibGljKVwifSx7XCJrZXlcIjpcImVzLW14XCIsXCJuYW1lXCI6XCJTcGFuaXNoIChNZXhpY28pXCJ9LHtcImtleVwiOlwiZXMtcHJcIixcIm5hbWVcIjpcIlNwYW5pc2ggKFB1ZXJ0byBSaWNvKVwifSx7XCJrZXlcIjpcImVzLXVzXCIsXCJuYW1lXCI6XCJTcGFuaXNoIChVbml0ZWQgU3RhdGVzKVwifSx7XCJrZXlcIjpcImV0XCIsXCJuYW1lXCI6XCJFc3RvbmlhblwifSx7XCJrZXlcIjpcImVzXCIsXCJuYW1lXCI6XCJTcGFuaXNoXCJ9LHtcImtleVwiOlwiZXVcIixcIm5hbWVcIjpcIkJhc3F1ZVwifSx7XCJrZXlcIjpcImZhXCIsXCJuYW1lXCI6XCJQZXJzaWFuXCJ9LHtcImtleVwiOlwiZm9cIixcIm5hbWVcIjpcIkZhcm9lc2VcIn0se1wia2V5XCI6XCJmaVwiLFwibmFtZVwiOlwiRmlubmlzaFwifSx7XCJrZXlcIjpcImZyLWNhXCIsXCJuYW1lXCI6XCJGcmVuY2ggKENhbmFkYSlcIn0se1wia2V5XCI6XCJmci1jaFwiLFwibmFtZVwiOlwiRnJlbmNoIChTd2l0emVybGFuZClcIn0se1wia2V5XCI6XCJmclwiLFwibmFtZVwiOlwiRnJlbmNoXCJ9LHtcImtleVwiOlwiZnlcIixcIm5hbWVcIjpcIkZyaXNpYW5cIn0se1wia2V5XCI6XCJnYVwiLFwibmFtZVwiOlwiSXJpc2ggb3IgSXJpc2ggR2FlbGljXCJ9LHtcImtleVwiOlwiZ2RcIixcIm5hbWVcIjpcIlNjb3R0aXNoIEdhZWxpY1wifSx7XCJrZXlcIjpcImdvbS1sYXRuXCIsXCJuYW1lXCI6XCJLb25rYW5pIExhdGluIHNjcmlwdFwifSx7XCJrZXlcIjpcImdsXCIsXCJuYW1lXCI6XCJHYWxpY2lhblwifSx7XCJrZXlcIjpcImd1XCIsXCJuYW1lXCI6XCJHdWphcmF0aVwifSx7XCJrZXlcIjpcImhlXCIsXCJuYW1lXCI6XCJIZWJyZXdcIn0se1wia2V5XCI6XCJoaVwiLFwibmFtZVwiOlwiSGluZGlcIn0se1wia2V5XCI6XCJoclwiLFwibmFtZVwiOlwiQ3JvYXRpYW5cIn0se1wia2V5XCI6XCJodVwiLFwibmFtZVwiOlwiSHVuZ2FyaWFuXCJ9LHtcImtleVwiOlwiaHRcIixcIm5hbWVcIjpcIkhhaXRpYW4gQ3Jlb2xlIChIYWl0aSlcIn0se1wia2V5XCI6XCJoeS1hbVwiLFwibmFtZVwiOlwiQXJtZW5pYW5cIn0se1wia2V5XCI6XCJpZFwiLFwibmFtZVwiOlwiSW5kb25lc2lhblwifSx7XCJrZXlcIjpcImlzXCIsXCJuYW1lXCI6XCJJY2VsYW5kaWNcIn0se1wia2V5XCI6XCJpdC1jaFwiLFwibmFtZVwiOlwiSXRhbGlhbiAoU3dpdHplcmxhbmQpXCJ9LHtcImtleVwiOlwiaXRcIixcIm5hbWVcIjpcIkl0YWxpYW5cIn0se1wia2V5XCI6XCJqYVwiLFwibmFtZVwiOlwiSmFwYW5lc2VcIn0se1wia2V5XCI6XCJqdlwiLFwibmFtZVwiOlwiSmF2YW5lc2VcIn0se1wia2V5XCI6XCJrYVwiLFwibmFtZVwiOlwiR2VvcmdpYW5cIn0se1wia2V5XCI6XCJra1wiLFwibmFtZVwiOlwiS2F6YWtoXCJ9LHtcImtleVwiOlwia21cIixcIm5hbWVcIjpcIkNhbWJvZGlhblwifSx7XCJrZXlcIjpcImtuXCIsXCJuYW1lXCI6XCJLYW5uYWRhXCJ9LHtcImtleVwiOlwia29cIixcIm5hbWVcIjpcIktvcmVhblwifSx7XCJrZXlcIjpcImt1XCIsXCJuYW1lXCI6XCJLdXJkaXNoXCJ9LHtcImtleVwiOlwia3lcIixcIm5hbWVcIjpcIkt5cmd5elwifSx7XCJrZXlcIjpcImxiXCIsXCJuYW1lXCI6XCJMdXhlbWJvdXJnaXNoXCJ9LHtcImtleVwiOlwibG9cIixcIm5hbWVcIjpcIkxhb1wifSx7XCJrZXlcIjpcImx0XCIsXCJuYW1lXCI6XCJMaXRodWFuaWFuXCJ9LHtcImtleVwiOlwibHZcIixcIm5hbWVcIjpcIkxhdHZpYW5cIn0se1wia2V5XCI6XCJtZVwiLFwibmFtZVwiOlwiTW9udGVuZWdyaW5cIn0se1wia2V5XCI6XCJtaVwiLFwibmFtZVwiOlwiTWFvcmlcIn0se1wia2V5XCI6XCJta1wiLFwibmFtZVwiOlwiTWFjZWRvbmlhblwifSx7XCJrZXlcIjpcIm1sXCIsXCJuYW1lXCI6XCJNYWxheWFsYW1cIn0se1wia2V5XCI6XCJtblwiLFwibmFtZVwiOlwiTW9uZ29saWFuXCJ9LHtcImtleVwiOlwibXJcIixcIm5hbWVcIjpcIk1hcmF0aGlcIn0se1wia2V5XCI6XCJtcy1teVwiLFwibmFtZVwiOlwiTWFsYXlcIn0se1wia2V5XCI6XCJtc1wiLFwibmFtZVwiOlwiTWFsYXlcIn0se1wia2V5XCI6XCJtdFwiLFwibmFtZVwiOlwiTWFsdGVzZSAoTWFsdGEpXCJ9LHtcImtleVwiOlwibXlcIixcIm5hbWVcIjpcIkJ1cm1lc2VcIn0se1wia2V5XCI6XCJuYlwiLFwibmFtZVwiOlwiTm9yd2VnaWFuIEJva23DpWxcIn0se1wia2V5XCI6XCJuZVwiLFwibmFtZVwiOlwiTmVwYWxlc2VcIn0se1wia2V5XCI6XCJubC1iZVwiLFwibmFtZVwiOlwiRHV0Y2ggKEJlbGdpdW0pXCJ9LHtcImtleVwiOlwibmxcIixcIm5hbWVcIjpcIkR1dGNoXCJ9LHtcImtleVwiOlwicGxcIixcIm5hbWVcIjpcIlBvbGlzaFwifSx7XCJrZXlcIjpcInB0LWJyXCIsXCJuYW1lXCI6XCJQb3J0dWd1ZXNlIChCcmF6aWwpXCJ9LHtcImtleVwiOlwicHRcIixcIm5hbWVcIjpcIlBvcnR1Z3Vlc2VcIn0se1wia2V5XCI6XCJyblwiLFwibmFtZVwiOlwiS2lydW5kaVwifSx7XCJrZXlcIjpcInJvXCIsXCJuYW1lXCI6XCJSb21hbmlhblwifSx7XCJrZXlcIjpcInJ1XCIsXCJuYW1lXCI6XCJSdXNzaWFuXCJ9LHtcImtleVwiOlwicndcIixcIm5hbWVcIjpcIktpbnlhcndhbmRhIChSd2FuZGEpXCJ9LHtcImtleVwiOlwic2RcIixcIm5hbWVcIjpcIlNpbmRoaVwifSx7XCJrZXlcIjpcInNlXCIsXCJuYW1lXCI6XCJOb3J0aGVybiBTYW1pXCJ9LHtcImtleVwiOlwic2lcIixcIm5hbWVcIjpcIlNpbmhhbGVzZVwifSx7XCJrZXlcIjpcInNrXCIsXCJuYW1lXCI6XCJTbG92YWtcIn0se1wia2V5XCI6XCJzbFwiLFwibmFtZVwiOlwiU2xvdmVuaWFuXCJ9LHtcImtleVwiOlwic3FcIixcIm5hbWVcIjpcIkFsYmFuaWFuXCJ9LHtcImtleVwiOlwic3ItY3lybFwiLFwibmFtZVwiOlwiU2VyYmlhbiBDeXJpbGxpY1wifSx7XCJrZXlcIjpcInNzXCIsXCJuYW1lXCI6XCJzaVN3YXRpXCJ9LHtcImtleVwiOlwic3YtZmlcIixcIm5hbWVcIjpcIkZpbmxhbmQgU3dlZGlzaFwifSx7XCJrZXlcIjpcInNyXCIsXCJuYW1lXCI6XCJTZXJiaWFuXCJ9LHtcImtleVwiOlwic3ZcIixcIm5hbWVcIjpcIlN3ZWRpc2hcIn0se1wia2V5XCI6XCJzd1wiLFwibmFtZVwiOlwiU3dhaGlsaVwifSx7XCJrZXlcIjpcInRhXCIsXCJuYW1lXCI6XCJUYW1pbFwifSx7XCJrZXlcIjpcInRlXCIsXCJuYW1lXCI6XCJUZWx1Z3VcIn0se1wia2V5XCI6XCJ0ZXRcIixcIm5hbWVcIjpcIlRldHVuIERpbGkgKEVhc3QgVGltb3IpXCJ9LHtcImtleVwiOlwidGdcIixcIm5hbWVcIjpcIlRhamlrXCJ9LHtcImtleVwiOlwidGhcIixcIm5hbWVcIjpcIlRoYWlcIn0se1wia2V5XCI6XCJ0a1wiLFwibmFtZVwiOlwiVHVya21lblwifSx7XCJrZXlcIjpcInRsLXBoXCIsXCJuYW1lXCI6XCJUYWdhbG9nIChQaGlsaXBwaW5lcylcIn0se1wia2V5XCI6XCJ0bGhcIixcIm5hbWVcIjpcIktsaW5nb25cIn0se1wia2V5XCI6XCJ0clwiLFwibmFtZVwiOlwiVHVya2lzaFwifSx7XCJrZXlcIjpcInR6bFwiLFwibmFtZVwiOlwiVGFsb3NzYW5cIn0se1wia2V5XCI6XCJ0em0tbGF0blwiLFwibmFtZVwiOlwiQ2VudHJhbCBBdGxhcyBUYW1hemlnaHQgTGF0aW5cIn0se1wia2V5XCI6XCJ0em1cIixcIm5hbWVcIjpcIkNlbnRyYWwgQXRsYXMgVGFtYXppZ2h0XCJ9LHtcImtleVwiOlwidWctY25cIixcIm5hbWVcIjpcIlV5Z2h1ciAoQ2hpbmEpXCJ9LHtcImtleVwiOlwidWtcIixcIm5hbWVcIjpcIlVrcmFpbmlhblwifSx7XCJrZXlcIjpcInVyXCIsXCJuYW1lXCI6XCJVcmR1XCJ9LHtcImtleVwiOlwidXotbGF0blwiLFwibmFtZVwiOlwiVXpiZWsgTGF0aW5cIn0se1wia2V5XCI6XCJ1elwiLFwibmFtZVwiOlwiVXpiZWtcIn0se1wia2V5XCI6XCJ2aVwiLFwibmFtZVwiOlwiVmlldG5hbWVzZVwifSx7XCJrZXlcIjpcIngtcHNldWRvXCIsXCJuYW1lXCI6XCJQc2V1ZG9cIn0se1wia2V5XCI6XCJ5b1wiLFwibmFtZVwiOlwiWW9ydWJhIE5pZ2VyaWFcIn0se1wia2V5XCI6XCJ6aC1jblwiLFwibmFtZVwiOlwiQ2hpbmVzZSAoQ2hpbmEpXCJ9LHtcImtleVwiOlwiemgtaGtcIixcIm5hbWVcIjpcIkNoaW5lc2UgKEhvbmcgS29uZylcIn0se1wia2V5XCI6XCJ6aC10d1wiLFwibmFtZVwiOlwiQ2hpbmVzZSAoVGFpd2FuKVwifSx7XCJrZXlcIjpcInpoXCIsXCJuYW1lXCI6XCJDaGluZXNlXCJ9LHtcImtleVwiOlwib2MtbG5jXCIsXCJuYW1lXCI6XCJPY2NpdGFuLCBsZW5nYWRvY2lhbiBkaWFsZWN0ZVwifSx7XCJrZXlcIjpcIm5uXCIsXCJuYW1lXCI6XCJOeW5vcnNrXCJ9LHtcImtleVwiOlwicGEtaW5cIixcIm5hbWVcIjpcIlB1bmphYmkgKEluZGlhKVwifV1cbmltcG9ydCAnZGF5anMvbG9jYWxlL2FmLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYW0uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1kei5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLWlxLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXIta3cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci1seS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLW1hLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXItc2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9hci10bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2FyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYXouanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JnLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ibS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JuLWJkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9iby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2JyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvYnMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jYS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2NzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvY3YuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9jeS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZGUtYXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9kZS1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2RlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZHYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWF1LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tY2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1nYi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLWllLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4taWwuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi1pbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLW56LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW4tc2cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lbi10dC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZW8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy1kby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLW14LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXMtcHIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9lcy11cy5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2VzLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ldS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2ZyLWNhLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZnItY2guanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9mci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2Z5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ2EuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9nZC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2dsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvZ29tLWxhdG4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ndS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2hlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaGkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2h0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaHUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9oeS1hbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2lkLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvaXMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9pdC1jaC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2l0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvamEuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9qdi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2thLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva2suanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rbS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2tuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUva28uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9rdS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2t5LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbGIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9sby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL2x0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbHYuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21pLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbWsuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21uLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9tcy1teS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL21zLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbXQuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9teS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25iLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbmUuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ubC1iZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL25sLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvbm4uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9vYy1sbmMuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wYS1pbi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3BsLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcHQtYnIuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9wdC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3JuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvcm8uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9ydS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3J3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2QuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zZS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NpLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc2suanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zbC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NxLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3ItY3lybC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3NyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3MuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS9zdi1maS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3N2LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvc3cuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90YS5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RlLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGV0LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGcuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90aC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3RrLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdGwtcGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90bGguanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS90ci5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bC5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3R6bS1sYXRuLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdHptLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdWctY24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS91ay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3VyLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdXotbGF0bi5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3V6LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvdmkuanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS94LXBzZXVkby5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3lvLmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemgtY24uanMnXG5pbXBvcnQgJ2RheWpzL2xvY2FsZS96aC1oay5qcydcbmltcG9ydCAnZGF5anMvbG9jYWxlL3poLXR3LmpzJ1xuaW1wb3J0ICdkYXlqcy9sb2NhbGUvemguanMnXG5cbmV4cG9ydCBkZWZhdWx0IGRheWpzXG4iLAogICAgImltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHdlZWsgZGF5cyBmb3IgYSBnaXZlbiBkYXRlIGFuZCBmaXJzdCBkYXkgb2Ygd2VlayBzZXR0aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBjdXJyZW50IGRhdGUgaXMgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCB3ZWVrLFxuICogZXZlbiB3aGVuIHRoZSBmaXJzdCBkYXkgb2Ygd2VlayBpcyBzZXQgdG8gYSBkYXkgYWZ0ZXIgdGhlIGN1cnJlbnQgZGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudERhdGUgLSBUaGUgcmVmZXJlbmNlIGRhdGUgZm9yIGNhbGN1bGF0aW5nIHRoZSB3ZWVrXG4gKiBAcGFyYW0gZmlyc3REYXlPZldlZWsgLSBUaGUgZGF5IG51bWJlciAoMC02KSByZXByZXNlbnRpbmcgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2VlayAoMCA9IFN1bmRheSwgMSA9IE1vbmRheSwgZXRjLilcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIDcgZGF5anMgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHdlZWsgZGF5cywgc3RhcnRpbmcgZnJvbSBmaXJzdERheU9mV2Vla1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIE1vbmRheSBmb3IgY3VycmVudCBkYXRlXG4gKiBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGRheWpzKCcyMDI1LTEwLTEzJyksIDEpXG4gKiAvLyBSZXR1cm5zOiBbTW9uIE9jdCAxMywgVHVlIE9jdCAxNCwgLi4uLCBTdW4gT2N0IDE5XVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBHZXQgd2VlayBzdGFydGluZyBmcm9tIFdlZG5lc2RheSB3aGVuIGN1cnJlbnQgZGF0ZSBpcyBNb25kYXlcbiAqIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoZGF5anMoJzIwMjUtMTAtMTMnKSwgMylcbiAqIC8vIFJldHVybnM6IFtXZWQgT2N0IDgsIFRodSBPY3QgOSwgLi4uLCBUdWUgT2N0IDE0XSAoaW5jbHVkZXMgTW9uZGF5IE9jdCAxMylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtEYXlzKFxuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anMsXG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbik6IGRheWpzLkRheWpzW10ge1xuICBjb25zdCBzdGFydE9mV2Vla0Zyb21DdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlXG4gICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgIC5kYXkoZmlyc3REYXlPZldlZWspXG5cbiAgY29uc3QgYWRqdXN0ZWRTdGFydE9mV2VlayA9IGN1cnJlbnREYXRlLmlzQmVmb3JlKHN0YXJ0T2ZXZWVrRnJvbUN1cnJlbnREYXRlKVxuICAgID8gc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGUuc3VidHJhY3QoMSwgJ3dlZWsnKVxuICAgIDogc3RhcnRPZldlZWtGcm9tQ3VycmVudERhdGVcblxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNyB9LCAoXywgZGF5SW5kZXgpID0+XG4gICAgYWRqdXN0ZWRTdGFydE9mV2Vlay5hZGQoZGF5SW5kZXgsICdkYXknKVxuICApXG59XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU2xvdCB9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zbG90J1xuaW1wb3J0IHR5cGUgeyBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5pbXBvcnQgeyBjdmEgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmNvbnN0IGJ1dHRvblZhcmlhbnRzID0gY3ZhKFxuICBcImlubGluZS1mbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiB3aGl0ZXNwYWNlLW5vd3JhcCByb3VuZGVkLW1kIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIFsmX3N2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgc2hyaW5rLTAgWyZfc3ZnXTpzaHJpbmstMCBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBmb2N1cy12aXNpYmxlOnJpbmctWzNweF0gYXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBhcmlhLWludmFsaWQ6Ym9yZGVyLWRlc3RydWN0aXZlXCIsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHNoYWRvdy14cyBob3ZlcjpiZy1wcmltYXJ5LzkwJyxcbiAgICAgICAgZGVzdHJ1Y3RpdmU6XG4gICAgICAgICAgJ2JnLWRlc3RydWN0aXZlIHRleHQtd2hpdGUgc2hhZG93LXhzIGhvdmVyOmJnLWRlc3RydWN0aXZlLzkwIGZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBkYXJrOmJnLWRlc3RydWN0aXZlLzYwJyxcbiAgICAgICAgb3V0bGluZTpcbiAgICAgICAgICAnYm9yZGVyIGJnLWJhY2tncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRhcms6YmctaW5wdXQvMzAgZGFyazpib3JkZXItaW5wdXQgZGFyazpob3ZlcjpiZy1pbnB1dC81MCcsXG4gICAgICAgIHNlY29uZGFyeTpcbiAgICAgICAgICAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgc2hhZG93LXhzIGhvdmVyOmJnLXNlY29uZGFyeS84MCcsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgICdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXJrOmhvdmVyOmJnLWFjY2VudC81MCcsXG4gICAgICAgIGxpbms6ICd0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZScsXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBkZWZhdWx0OiAnaC05IHB4LTQgcHktMiBoYXMtWz5zdmddOnB4LTMnLFxuICAgICAgICBzbTogJ2gtOCByb3VuZGVkLW1kIGdhcC0xLjUgcHgtMyBoYXMtWz5zdmddOnB4LTIuNScsXG4gICAgICAgIGxnOiAnaC0xMCByb3VuZGVkLW1kIHB4LTYgaGFzLVs+c3ZnXTpweC00JyxcbiAgICAgICAgaWNvbjogJ3NpemUtOScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiAnZGVmYXVsdCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgfSxcbiAgfVxuKVxuXG5mdW5jdGlvbiBCdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIHZhcmlhbnQsXG4gIHNpemUsXG4gIGFzQ2hpbGQgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdidXR0b24nPiAmXG4gIFZhcmlhbnRQcm9wczx0eXBlb2YgYnV0dG9uVmFyaWFudHM+ICYge1xuICAgIGFzQ2hpbGQ/OiBib29sZWFuXG4gIH0pIHtcbiAgY29uc3QgQ29tcCA9IGFzQ2hpbGQgPyBTbG90IDogJ2J1dHRvbidcblxuICByZXR1cm4gKFxuICAgIDxDb21wXG4gICAgICBkYXRhLXNsb3Q9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBDaGV2cm9uRG93bkljb24sXG4gIENoZXZyb25MZWZ0SWNvbixcbiAgQ2hldnJvblJpZ2h0SWNvbixcbn0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IHR5cGUgeyBEYXlCdXR0b24gfSBmcm9tICdyZWFjdC1kYXktcGlja2VyJ1xuaW1wb3J0IHsgRGF5UGlja2VyLCBnZXREZWZhdWx0Q2xhc3NOYW1lcyB9IGZyb20gJ3JlYWN0LWRheS1waWNrZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcblxuZnVuY3Rpb24gQ2FsZW5kYXIoe1xuICBjbGFzc05hbWUsXG4gIGNsYXNzTmFtZXMsXG4gIHNob3dPdXRzaWRlRGF5cyA9IHRydWUsXG4gIGNhcHRpb25MYXlvdXQgPSAnbGFiZWwnLFxuICBidXR0b25WYXJpYW50ID0gJ2dob3N0JyxcbiAgZm9ybWF0dGVycyxcbiAgY29tcG9uZW50cyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlQaWNrZXI+ICYge1xuICBidXR0b25WYXJpYW50PzogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIEJ1dHRvbj5bJ3ZhcmlhbnQnXVxufSkge1xuICBjb25zdCBkZWZhdWx0Q2xhc3NOYW1lcyA9IGdldERlZmF1bHRDbGFzc05hbWVzKClcblxuICByZXR1cm4gKFxuICAgIDxEYXlQaWNrZXJcbiAgICAgIHNob3dPdXRzaWRlRGF5cz17c2hvd091dHNpZGVEYXlzfVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2JnLWJhY2tncm91bmQgZ3JvdXAvY2FsZW5kYXIgcC0zIFstLWNlbGwtc2l6ZTotLXNwYWNpbmcoOCldIFtbZGF0YS1zbG90PWNhcmQtY29udGVudF1fJl06YmctdHJhbnNwYXJlbnQgW1tkYXRhLXNsb3Q9cG9wb3Zlci1jb250ZW50XV8mXTpiZy10cmFuc3BhcmVudCcsXG4gICAgICAgIFN0cmluZy5yYXdgcnRsOioqOlsucmRwLWJ1dHRvblxcX25leHQ+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgU3RyaW5nLnJhd2BydGw6Kio6Wy5yZHAtYnV0dG9uXFxfcHJldmlvdXM+c3ZnXTpyb3RhdGUtMTgwYCxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgY2FwdGlvbkxheW91dD17Y2FwdGlvbkxheW91dH1cbiAgICAgIGZvcm1hdHRlcnM9e3tcbiAgICAgICAgZm9ybWF0TW9udGhEcm9wZG93bjogKGRhdGUpID0+XG4gICAgICAgICAgZGF0ZS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdzaG9ydCcgfSksXG4gICAgICAgIC4uLmZvcm1hdHRlcnMsXG4gICAgICB9fVxuICAgICAgY2xhc3NOYW1lcz17e1xuICAgICAgICByb290OiBjbigndy1maXQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yb290KSxcbiAgICAgICAgbW9udGhzOiBjbihcbiAgICAgICAgICAnZmxleCBnYXAtNCBmbGV4LWNvbCBtZDpmbGV4LXJvdyByZWxhdGl2ZScsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMubW9udGhzXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoOiBjbignZmxleCBmbGV4LWNvbCB3LWZ1bGwgZ2FwLTQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5tb250aCksXG4gICAgICAgIG5hdjogY24oXG4gICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHctZnVsbCBhYnNvbHV0ZSB0b3AtMCBpbnNldC14LTAganVzdGlmeS1iZXR3ZWVuJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5uYXZcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX3ByZXZpb3VzOiBjbihcbiAgICAgICAgICBidXR0b25WYXJpYW50cyh7IHZhcmlhbnQ6IGJ1dHRvblZhcmlhbnQgfSksXG4gICAgICAgICAgJ3NpemUtKC0tY2VsbC1zaXplKSBhcmlhLWRpc2FibGVkOm9wYWNpdHktNTAgcC0wIHNlbGVjdC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5idXR0b25fcHJldmlvdXNcbiAgICAgICAgKSxcbiAgICAgICAgYnV0dG9uX25leHQ6IGNuKFxuICAgICAgICAgIGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudDogYnV0dG9uVmFyaWFudCB9KSxcbiAgICAgICAgICAnc2l6ZS0oLS1jZWxsLXNpemUpIGFyaWEtZGlzYWJsZWQ6b3BhY2l0eS01MCBwLTAgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmJ1dHRvbl9uZXh0XG4gICAgICAgICksXG4gICAgICAgIG1vbnRoX2NhcHRpb246IGNuKFxuICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBoLSgtLWNlbGwtc2l6ZSkgdy1mdWxsIHB4LSgtLWNlbGwtc2l6ZSknLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLm1vbnRoX2NhcHRpb25cbiAgICAgICAgKSxcbiAgICAgICAgZHJvcGRvd25zOiBjbihcbiAgICAgICAgICAndy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW0ganVzdGlmeS1jZW50ZXIgaC0oLS1jZWxsLXNpemUpIGdhcC0xLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duc1xuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bl9yb290OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgaGFzLWZvY3VzOmJvcmRlci1yaW5nIGJvcmRlciBib3JkZXItaW5wdXQgc2hhZG93LXhzIGhhcy1mb2N1czpyaW5nLXJpbmcvNTAgaGFzLWZvY3VzOnJpbmctWzNweF0gcm91bmRlZC1tZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZHJvcGRvd25fcm9vdFxuICAgICAgICApLFxuICAgICAgICBkcm9wZG93bjogY24oXG4gICAgICAgICAgJ2Fic29sdXRlIGJnLXBvcG92ZXIgaW5zZXQtMCBvcGFjaXR5LTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRyb3Bkb3duXG4gICAgICAgICksXG4gICAgICAgIGNhcHRpb25fbGFiZWw6IGNuKFxuICAgICAgICAgICdzZWxlY3Qtbm9uZSBmb250LW1lZGl1bScsXG4gICAgICAgICAgY2FwdGlvbkxheW91dCA9PT0gJ2xhYmVsJ1xuICAgICAgICAgICAgPyAndGV4dC1zbSdcbiAgICAgICAgICAgIDogJ3JvdW5kZWQtbWQgcGwtMiBwci0xIGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtc20gaC04IFsmPnN2Z106dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmPnN2Z106c2l6ZS0zLjUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmNhcHRpb25fbGFiZWxcbiAgICAgICAgKSxcbiAgICAgICAgdGFibGU6ICd3LWZ1bGwgYm9yZGVyLWNvbGxhcHNlJyxcbiAgICAgICAgd2Vla2RheXM6IGNuKCdmbGV4JywgZGVmYXVsdENsYXNzTmFtZXMud2Vla2RheXMpLFxuICAgICAgICB3ZWVrZGF5OiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZmxleC0xIGZvbnQtbm9ybWFsIHRleHQtWzAuOHJlbV0gc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLndlZWtkYXlcbiAgICAgICAgKSxcbiAgICAgICAgd2VlazogY24oJ2ZsZXggdy1mdWxsIG10LTInLCBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrKSxcbiAgICAgICAgd2Vla19udW1iZXJfaGVhZGVyOiBjbihcbiAgICAgICAgICAnc2VsZWN0LW5vbmUgdy0oLS1jZWxsLXNpemUpJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy53ZWVrX251bWJlcl9oZWFkZXJcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla19udW1iZXI6IGNuKFxuICAgICAgICAgICd0ZXh0LVswLjhyZW1dIHNlbGVjdC1ub25lIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMud2Vla19udW1iZXJcbiAgICAgICAgKSxcbiAgICAgICAgZGF5OiBjbihcbiAgICAgICAgICAncmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwLTAgdGV4dC1jZW50ZXIgWyY6Zmlyc3QtY2hpbGRbZGF0YS1zZWxlY3RlZD10cnVlXV9idXR0b25dOnJvdW5kZWQtbC1tZCBbJjpsYXN0LWNoaWxkW2RhdGEtc2VsZWN0ZWQ9dHJ1ZV1fYnV0dG9uXTpyb3VuZGVkLXItbWQgZ3JvdXAvZGF5IGFzcGVjdC1zcXVhcmUgc2VsZWN0LW5vbmUnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRheVxuICAgICAgICApLFxuICAgICAgICByYW5nZV9zdGFydDogY24oXG4gICAgICAgICAgJ3JvdW5kZWQtbC1tZCBiZy1hY2NlbnQnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX3N0YXJ0XG4gICAgICAgICksXG4gICAgICAgIHJhbmdlX21pZGRsZTogY24oJ3JvdW5kZWQtbm9uZScsIGRlZmF1bHRDbGFzc05hbWVzLnJhbmdlX21pZGRsZSksXG4gICAgICAgIHJhbmdlX2VuZDogY24oJ3JvdW5kZWQtci1tZCBiZy1hY2NlbnQnLCBkZWZhdWx0Q2xhc3NOYW1lcy5yYW5nZV9lbmQpLFxuICAgICAgICB0b2RheTogY24oXG4gICAgICAgICAgJ2JnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHJvdW5kZWQtbWQgZGF0YS1bc2VsZWN0ZWQ9dHJ1ZV06cm91bmRlZC1ub25lJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy50b2RheVxuICAgICAgICApLFxuICAgICAgICBvdXRzaWRlOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGFyaWEtc2VsZWN0ZWQ6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICBkZWZhdWx0Q2xhc3NOYW1lcy5vdXRzaWRlXG4gICAgICAgICksXG4gICAgICAgIGRpc2FibGVkOiBjbihcbiAgICAgICAgICAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIG9wYWNpdHktNTAnLFxuICAgICAgICAgIGRlZmF1bHRDbGFzc05hbWVzLmRpc2FibGVkXG4gICAgICAgICksXG4gICAgICAgIGhpZGRlbjogY24oJ2ludmlzaWJsZScsIGRlZmF1bHRDbGFzc05hbWVzLmhpZGRlbiksXG4gICAgICAgIC4uLmNsYXNzTmFtZXMsXG4gICAgICB9fVxuICAgICAgY29tcG9uZW50cz17e1xuICAgICAgICBSb290OiAoeyBjbGFzc05hbWUsIHJvb3RSZWYsIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXNsb3Q9XCJjYWxlbmRhclwiXG4gICAgICAgICAgICAgIHJlZj17cm9vdFJlZn1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihjbGFzc05hbWUpfVxuICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgQ2hldnJvbjogKHsgY2xhc3NOYW1lLCBvcmllbnRhdGlvbiwgLi4ucHJvcHMgfSkgPT4ge1xuICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hldnJvbkxlZnRJY29uIGNsYXNzTmFtZT17Y24oJ3NpemUtNCcsIGNsYXNzTmFtZSl9IHsuLi5wcm9wc30gLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGV2cm9uUmlnaHRJY29uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPXtjbignc2l6ZS00JywgY2xhc3NOYW1lKX0gey4uLnByb3BzfSAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgICAgICAgRGF5QnV0dG9uOiBDYWxlbmRhckRheUJ1dHRvbixcbiAgICAgICAgV2Vla051bWJlcjogKHsgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRkIHsuLi5wcm9wc30+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBzaXplLSgtLWNlbGwtc2l6ZSkgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgKVxuICAgICAgICB9LFxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgfX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhbGVuZGFyRGF5QnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBkYXksXG4gIG1vZGlmaWVycyxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEYXlCdXR0b24+KSB7XG4gIGNvbnN0IGRlZmF1bHRDbGFzc05hbWVzID0gZ2V0RGVmYXVsdENsYXNzTmFtZXMoKVxuXG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbClcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobW9kaWZpZXJzLmZvY3VzZWQpIHtcbiAgICAgIHJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbbW9kaWZpZXJzLmZvY3VzZWRdKVxuXG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgcmVmPXtyZWZ9XG4gICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgZGF0YS1kYXk9e2RheS5kYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpfVxuICAgICAgZGF0YS1zZWxlY3RlZC1zaW5nbGU9e1xuICAgICAgICBtb2RpZmllcnMuc2VsZWN0ZWQgJiZcbiAgICAgICAgIW1vZGlmaWVycy5yYW5nZV9zdGFydCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX2VuZCAmJlxuICAgICAgICAhbW9kaWZpZXJzLnJhbmdlX21pZGRsZVxuICAgICAgfVxuICAgICAgZGF0YS1yYW5nZS1zdGFydD17bW9kaWZpZXJzLnJhbmdlX3N0YXJ0fVxuICAgICAgZGF0YS1yYW5nZS1lbmQ9e21vZGlmaWVycy5yYW5nZV9lbmR9XG4gICAgICBkYXRhLXJhbmdlLW1pZGRsZT17bW9kaWZpZXJzLnJhbmdlX21pZGRsZX1cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06YmctcHJpbWFyeSBkYXRhLVtzZWxlY3RlZC1zaW5nbGU9dHJ1ZV06dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGF0YS1bcmFuZ2UtbWlkZGxlPXRydWVdOmJnLWFjY2VudCBkYXRhLVtyYW5nZS1taWRkbGU9dHJ1ZV06dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLXN0YXJ0PXRydWVdOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGRhdGEtW3JhbmdlLWVuZD10cnVlXTpiZy1wcmltYXJ5IGRhdGEtW3JhbmdlLWVuZD10cnVlXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpib3JkZXItcmluZyBncm91cC1kYXRhLVtmb2N1c2VkPXRydWVdL2RheTpyaW5nLXJpbmcvNTAgZGFyazpob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGZsZXggYXNwZWN0LXNxdWFyZSBzaXplLWF1dG8gdy1mdWxsIG1pbi13LSgtLWNlbGwtc2l6ZSkgZmxleC1jb2wgZ2FwLTEgbGVhZGluZy1ub25lIGZvbnQtbm9ybWFsIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnJlbGF0aXZlIGdyb3VwLWRhdGEtW2ZvY3VzZWQ9dHJ1ZV0vZGF5OnotMTAgZ3JvdXAtZGF0YS1bZm9jdXNlZD10cnVlXS9kYXk6cmluZy1bM3B4XSBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1lbmQ9dHJ1ZV06cm91bmRlZC1yLW1kIGRhdGEtW3JhbmdlLW1pZGRsZT10cnVlXTpyb3VuZGVkLW5vbmUgZGF0YS1bcmFuZ2Utc3RhcnQ9dHJ1ZV06cm91bmRlZC1tZCBkYXRhLVtyYW5nZS1zdGFydD10cnVlXTpyb3VuZGVkLWwtbWQgWyY+c3Bhbl06dGV4dC14cyBbJj5zcGFuXTpvcGFjaXR5LTcwJyxcbiAgICAgICAgZGVmYXVsdENsYXNzTmFtZXMuZGF5LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBDYWxlbmRhciwgQ2FsZW5kYXJEYXlCdXR0b24gfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIENoZWNrYm94UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jaGVja2JveCdcbmltcG9ydCB7IENoZWNrSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgQ2hlY2tib3hQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8Q2hlY2tib3hQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3hcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3BlZXIgYm9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGF0YS1bc3RhdGU9Y2hlY2tlZF06YmctcHJpbWFyeSBkYXRhLVtzdGF0ZT1jaGVja2VkXTp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWNoZWNrZWRdOmJnLXByaW1hcnkgZGF0YS1bc3RhdGU9Y2hlY2tlZF06Ym9yZGVyLXByaW1hcnkgZm9jdXMtdmlzaWJsZTpib3JkZXItcmluZyBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgc2l6ZS00IHNocmluay0wIHJvdW5kZWQtWzRweF0gYm9yZGVyIHNoYWRvdy14cyB0cmFuc2l0aW9uLXNoYWRvdyBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3JcbiAgICAgICAgZGF0YS1zbG90PVwiY2hlY2tib3gtaW5kaWNhdG9yXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1jdXJyZW50IHRyYW5zaXRpb24tbm9uZVwiXG4gICAgICA+XG4gICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS0zLjVcIiAvPlxuICAgICAgPC9DaGVja2JveFByaW1pdGl2ZS5JbmRpY2F0b3I+XG4gICAgPC9DaGVja2JveFByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmV4cG9ydCB7IENoZWNrYm94IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIENhcmQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ3RleHQtY2FyZC1mb3JlZ3JvdW5kIGZsZXggZmxleC1jb2wgZ2FwLTYgcm91bmRlZC14bCBib3JkZXIgc2hhZG93LXNtJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEhlYWRlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1oZWFkZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ0Bjb250YWluZXIvY2FyZC1oZWFkZXIgZ3JpZCBhdXRvLXJvd3MtbWluIGdyaWQtcm93cy1bYXV0b19hdXRvXSBpdGVtcy1zdGFydCBnYXAtMS41IHAtNCBwYi0wIGhhcy1kYXRhLVtzbG90PWNhcmQtYWN0aW9uXTpncmlkLWNvbHMtWzFmcl9hdXRvXScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIENhcmRUaXRsZSh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdsZWFkaW5nLW5vbmUgZm9udC1zZW1pYm9sZCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRGVzY3JpcHRpb24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZEFjdGlvbih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiY2FyZC1hY3Rpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2NvbC1zdGFydC0yIHJvdy1zcGFuLTIgcm93LXN0YXJ0LTEgc2VsZi1zdGFydCBqdXN0aWZ5LXNlbGYtZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gQ2FyZENvbnRlbnQoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdkaXYnPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImNhcmQtY29udGVudFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdwLTQgcHQtMCcsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBDYXJkRm9vdGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJjYXJkLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKCdmbGV4IGl0ZW1zLWNlbnRlciBweC02IFsuYm9yZGVyLXRdOnB0LTYnLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgQ2FyZCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZEZvb3RlcixcbiAgQ2FyZFRpdGxlLFxuICBDYXJkQWN0aW9uLFxuICBDYXJkRGVzY3JpcHRpb24sXG4gIENhcmRDb250ZW50LFxufVxuIiwKICAgICJpbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBDYWxlbmRhciBhcyBDYWxlbmRhckljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2J1dHRvbidcbmltcG9ydCB7IENhbGVuZGFyIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpL2NhbGVuZGFyJ1xuaW1wb3J0IHtcbiAgUG9wb3ZlcixcbiAgUG9wb3ZlckNvbnRlbnQsXG4gIFBvcG92ZXJUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWkvcG9wb3ZlcidcbmltcG9ydCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUG9wb3ZlckNsb3NlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmludGVyZmFjZSBEYXRlUGlja2VyUHJvcHMge1xuICBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkXG4gIHNldERhdGU6IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB2b2lkXG4gIGxhYmVsPzogc3RyaW5nXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjbG9zZU9uU2VsZWN0PzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0ZVBpY2tlcih7XG4gIGRhdGUsXG4gIGNsb3NlT25TZWxlY3QsXG4gIHNldERhdGUsXG4gIGxhYmVsID0gJ1BpY2sgYSBkYXRlJyxcbiAgY2xhc3NOYW1lLFxufTogRGF0ZVBpY2tlclByb3BzKSB7XG4gIGNvbnN0IHBvcE92ZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBzZXREYXRlKGRhdGUpXG4gICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgIHBvcE92ZXJSZWYuY3VycmVudD8uY2xpY2soKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8UG9wb3Zlcj5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ3ctZnVsbCBqdXN0aWZ5LXN0YXJ0IHRleHQtbGVmdCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICFkYXRlICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQnXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDYWxlbmRhckljb24gY2xhc3NOYW1lPVwibXItMiBoLTQgdy00XCIgLz5cbiAgICAgICAgICAgIHtkYXRlID8gZGF5anMoZGF0ZSkuZm9ybWF0KCdNTU0gRCwgWVlZWScpIDogPHNwYW4+e2xhYmVsfTwvc3Bhbj59XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LWF1dG8gcC0wXCIgYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgIDxQb3BvdmVyQ2xvc2UgcmVmPXtwb3BPdmVyUmVmfSAvPlxuICAgICAgICAgIDxDYWxlbmRhclxuICAgICAgICAgICAgbW9kZT1cInNpbmdsZVwiXG4gICAgICAgICAgICBzZWxlY3RlZD17ZGF0ZX1cbiAgICAgICAgICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAgICAgICAgICAgIG1vbnRoPXtkYXRlfVxuICAgICAgICAgICAgaW5pdGlhbEZvY3VzXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Qb3BvdmVyQ29udGVudD5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFBvcG92ZXJQcmltaXRpdmUgZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXBvcG92ZXInXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIFBvcG92ZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwicG9wb3ZlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gUG9wb3ZlclRyaWdnZXIoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxQb3BvdmVyUHJpbWl0aXZlLlRyaWdnZXIgZGF0YS1zbG90PVwicG9wb3Zlci10cmlnZ2VyXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBQb3BvdmVyQ29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgYWxpZ24gPSAnY2VudGVyJyxcbiAgc2lkZU9mZnNldCA9IDQsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgUG9wb3ZlclByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxQb3BvdmVyUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxQb3BvdmVyUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwicG9wb3Zlci1jb250ZW50XCJcbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiB6LTUwIHctNzIgb3JpZ2luLSgtLXJhZGl4LXBvcG92ZXItY29udGVudC10cmFuc2Zvcm0tb3JpZ2luKSByb3VuZGVkLW1kIGJvcmRlciBwLTQgc2hhZG93LW1kIG91dGxpbmUtaGlkZGVuJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICA8L1BvcG92ZXJQcmltaXRpdmUuUG9ydGFsPlxuICApXG59XG5cbmZ1bmN0aW9uIFBvcG92ZXJBbmNob3Ioe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yPikge1xuICByZXR1cm4gPFBvcG92ZXJQcmltaXRpdmUuQW5jaG9yIGRhdGEtc2xvdD1cInBvcG92ZXItYW5jaG9yXCIgey4uLnByb3BzfSAvPlxufVxuXG5leHBvcnQgeyBQb3BvdmVyLCBQb3BvdmVyVHJpZ2dlciwgUG9wb3ZlckNvbnRlbnQsIFBvcG92ZXJBbmNob3IgfVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIERpYWxvZ1ByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3QtZGlhbG9nJ1xuaW1wb3J0IHsgWEljb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmZ1bmN0aW9uIERpYWxvZyh7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuVHJpZ2dlcj4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBEaWFsb2dQcmltaXRpdmUuUG9ydGFsPikge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2Uoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5DbG9zZT4pIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5PdmVybGF5Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuT3ZlcmxheVxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2RhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGZpeGVkIGluc2V0LTAgei01MCBiZy1ibGFjay81MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiPlxuICAgICAgPERpYWxvZ092ZXJsYXkgLz5cbiAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ29udGVudFxuICAgICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctY29udGVudFwiXG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2JnLWJhY2tncm91bmQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGZpeGVkIHRvcC1bNTAlXSBsZWZ0LVs1MCVdIHotNTAgZ3JpZCB3LWZ1bGwgbWF4LXctW2NhbGMoMTAwJS0ycmVtKV0gdHJhbnNsYXRlLXgtWy01MCVdIHRyYW5zbGF0ZS15LVstNTAlXSBnYXAtNCByb3VuZGVkLWxnIGJvcmRlciBwLTYgc2hhZG93LWxnIGR1cmF0aW9uLTIwMCBzbTptYXgtdy1sZyBtYXgtaC1bOTAlXSBvdmVyZmxvdy15LXNjcm9sbCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIGNsYXNzTmFtZT1cInJpbmctb2Zmc2V0LWJhY2tncm91bmQgZm9jdXM6cmluZy1yaW5nIGRhdGEtW3N0YXRlPW9wZW5dOmJnLWFjY2VudCBkYXRhLVtzdGF0ZT1vcGVuXTp0ZXh0LW11dGVkLWZvcmVncm91bmQgYWJzb2x1dGUgdG9wLTQgcmlnaHQtNCByb3VuZGVkLXhzIG9wYWNpdHktNzAgdHJhbnNpdGlvbi1vcGFjaXR5IGhvdmVyOm9wYWNpdHktMTAwIGZvY3VzOnJpbmctMiBmb2N1czpyaW5nLW9mZnNldC0yIGZvY3VzOm91dGxpbmUtaGlkZGVuIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCI+XG4gICAgICAgICAgPFhJY29uIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cbiAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9EaWFsb2dQb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctaGVhZGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTIgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8J2Rpdic+KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWZvb3RlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHNtOmZsZXgtcm93IHNtOmp1c3RpZnktZW5kJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgRGlhbG9nUHJpbWl0aXZlLlRpdGxlPikge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LWxnIGxlYWRpbmctbm9uZSBmb250LXNlbWlib2xkJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uXG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3NOYW1lPXtjbigndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQtc20nLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxufVxuIiwKICAgICJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gSW5wdXQoeyBjbGFzc05hbWUsIHR5cGUsIC4uLnByb3BzIH06IFJlYWN0LkNvbXBvbmVudFByb3BzPCdpbnB1dCc+KSB7XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgZGF0YS1zbG90PVwiaW5wdXRcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBzZWxlY3Rpb246YmctcHJpbWFyeSBzZWxlY3Rpb246dGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZGFyazpiZy1pbnB1dC8zMCBib3JkZXItaW5wdXQgZmxleCBoLTkgdy1mdWxsIG1pbi13LTAgcm91bmRlZC1tZCBib3JkZXIgYmctdHJhbnNwYXJlbnQgcHgtMyBweS0xIHRleHQtYmFzZSBzaGFkb3cteHMgdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTcgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbScsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XScsXG4gICAgICAgICdhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBJbnB1dCB9XG4iLAogICAgIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIExhYmVsUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1sYWJlbCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gTGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgTGFiZWxQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8TGFiZWxQcmltaXRpdmUuUm9vdFxuICAgICAgZGF0YS1zbG90PVwibGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHRleHQtc20gbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtIHNlbGVjdC1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOnBvaW50ZXItZXZlbnRzLW5vbmUgZ3JvdXAtZGF0YS1bZGlzYWJsZWQ9dHJ1ZV06b3BhY2l0eS01MCBwZWVyLWRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBwZWVyLWRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBMYWJlbCB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2Nyb2xsQXJlYVByaW1pdGl2ZSBmcm9tICdAcmFkaXgtdWkvcmVhY3Qtc2Nyb2xsLWFyZWEnXG5cbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBTY3JvbGxBcmVhUHJvcHNcbiAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PiB7XG4gIHZpZXdQb3J0UHJvcHM/OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbn1cblxuZnVuY3Rpb24gU2Nyb2xsQXJlYSh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIC4uLnByb3BzIH06IFNjcm9sbEFyZWFQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cInNjcm9sbC1hcmVhXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JlbGF0aXZlJywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICB7Li4ucHJvcHMudmlld1BvcnRQcm9wc31cbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdmlld3BvcnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBzaXplLWZ1bGwgcm91bmRlZC1baW5oZXJpdF0gdHJhbnNpdGlvbi1bY29sb3IsYm94LXNoYWRvd10gb3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMScsXG4gICAgICAgICAgcHJvcHMudmlld1BvcnRQcm9wcz8uY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5WaWV3cG9ydD5cbiAgICAgIDxTY3JvbGxCYXIgLz5cbiAgICAgIDxTY3JvbGxBcmVhUHJpbWl0aXZlLkNvcm5lciAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmZ1bmN0aW9uIFNjcm9sbEJhcih7XG4gIGNsYXNzTmFtZSxcbiAgb3JpZW50YXRpb24gPSAndmVydGljYWwnLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNjcm9sbEFyZWFQcmltaXRpdmUuU2Nyb2xsQXJlYVNjcm9sbGJhcj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyXG4gICAgICBkYXRhLXNsb3Q9XCJzY3JvbGwtYXJlYS1zY3JvbGxiYXJcIlxuICAgICAgb3JpZW50YXRpb249e29yaWVudGF0aW9ufVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggdG91Y2gtbm9uZSBwLXB4IHRyYW5zaXRpb24tY29sb3JzIHNlbGVjdC1ub25lJyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgJiZcbiAgICAgICAgICAnaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50JyxcbiAgICAgICAgb3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyAmJlxuICAgICAgICAgICdoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhVGh1bWJcbiAgICAgICAgZGF0YS1zbG90PVwic2Nyb2xsLWFyZWEtdGh1bWJcIlxuICAgICAgICBjbGFzc05hbWU9XCJiZy1ib3JkZXIgcmVsYXRpdmUgZmxleC0xIHJvdW5kZWQtZnVsbFwiXG4gICAgICAvPlxuICAgIDwvU2Nyb2xsQXJlYVByaW1pdGl2ZS5TY3JvbGxBcmVhU2Nyb2xsYmFyPlxuICApXG59XG5cbmV4cG9ydCB7IFNjcm9sbEFyZWEsIFNjcm9sbEJhciB9XG4iLAogICAgImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgU2VsZWN0UHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC1zZWxlY3QnXG5pbXBvcnQgeyBDaGVja0ljb24sIENoZXZyb25Eb3duSWNvbiwgQ2hldnJvblVwSWNvbiB9IGZyb20gJ2x1Y2lkZS1yZWFjdCdcblxuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuUm9vdCBkYXRhLXNsb3Q9XCJzZWxlY3RcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFNlbGVjdEdyb3VwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuR3JvdXA+KSB7XG4gIHJldHVybiA8U2VsZWN0UHJpbWl0aXZlLkdyb3VwIGRhdGEtc2xvdD1cInNlbGVjdC1ncm91cFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gU2VsZWN0VmFsdWUoe1xuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5WYWx1ZT4pIHtcbiAgcmV0dXJuIDxTZWxlY3RQcmltaXRpdmUuVmFsdWUgZGF0YS1zbG90PVwic2VsZWN0LXZhbHVlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBTZWxlY3RUcmlnZ2VyKHtcbiAgY2xhc3NOYW1lLFxuICBzaXplID0gJ2RlZmF1bHQnLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuVHJpZ2dlcj4gJiB7XG4gIHNpemU/OiAnc20nIHwgJ2RlZmF1bHQnXG59KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5UcmlnZ2VyXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3QtdHJpZ2dlclwiXG4gICAgICBkYXRhLXNpemU9e3NpemV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImJvcmRlci1pbnB1dCBkYXRhLVtwbGFjZWhvbGRlcl06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIFsmX3N2Zzpub3QoW2NsYXNzKj0ndGV4dC0nXSldOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YXJpYS1pbnZhbGlkOnJpbmctZGVzdHJ1Y3RpdmUvNDAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBkYXJrOmJnLWlucHV0LzMwIGRhcms6aG92ZXI6YmctaW5wdXQvNTAgZmxleCB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHJvdW5kZWQtbWQgYm9yZGVyIGJnLXRyYW5zcGFyZW50IHB4LTMgcHktMiB0ZXh0LXNtIHdoaXRlc3BhY2Utbm93cmFwIHNoYWRvdy14cyB0cmFuc2l0aW9uLVtjb2xvcixib3gtc2hhZG93XSBvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLVszcHhdIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC05IGRhdGEtW3NpemU9c21dOmgtOCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTpsaW5lLWNsYW1wLTEgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06ZmxleCAqOmRhdGEtW3Nsb3Q9c2VsZWN0LXZhbHVlXTppdGVtcy1jZW50ZXIgKjpkYXRhLVtzbG90PXNlbGVjdC12YWx1ZV06Z2FwLTIgWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkljb24gYXNDaGlsZD5cbiAgICAgICAgPENoZXZyb25Eb3duSWNvbiBjbGFzc05hbWU9XCJzaXplLTQgb3BhY2l0eS01MFwiIC8+XG4gICAgICA8L1NlbGVjdFByaW1pdGl2ZS5JY29uPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlRyaWdnZXI+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0Q29udGVudCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIHBvc2l0aW9uID0gJ3BvcHBlcicsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkNvbnRlbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8U2VsZWN0UHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwic2VsZWN0LWNvbnRlbnRcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIGRhdGEtW3N0YXRlPW9wZW5dOmFuaW1hdGUtaW4gZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLW91dCBkYXRhLVtzdGF0ZT1jbG9zZWRdOmZhZGUtb3V0LTAgZGF0YS1bc3RhdGU9b3Blbl06ZmFkZS1pbi0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc3RhdGU9b3Blbl06em9vbS1pbi05NSBkYXRhLVtzaWRlPWJvdHRvbV06c2xpZGUtaW4tZnJvbS10b3AtMiBkYXRhLVtzaWRlPWxlZnRdOnNsaWRlLWluLWZyb20tcmlnaHQtMiBkYXRhLVtzaWRlPXJpZ2h0XTpzbGlkZS1pbi1mcm9tLWxlZnQtMiBkYXRhLVtzaWRlPXRvcF06c2xpZGUtaW4tZnJvbS1ib3R0b20tMiByZWxhdGl2ZSB6LTUwIG1heC1oLSgtLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQpIG1pbi13LVs4cmVtXSBvcmlnaW4tKC0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbikgb3ZlcmZsb3cteC1oaWRkZW4gb3ZlcmZsb3cteS1hdXRvIHJvdW5kZWQtbWQgYm9yZGVyIHNoYWRvdy1tZCcsXG4gICAgICAgICAgcG9zaXRpb24gPT09ICdwb3BwZXInICYmXG4gICAgICAgICAgICAnZGF0YS1bc2lkZT1ib3R0b21dOnRyYW5zbGF0ZS15LTEgZGF0YS1bc2lkZT1sZWZ0XTotdHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXJpZ2h0XTp0cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9dG9wXTotdHJhbnNsYXRlLXktMScsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICAgIHBvc2l0aW9uPXtwb3NpdGlvbn1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICA8U2VsZWN0U2Nyb2xsVXBCdXR0b24gLz5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5WaWV3cG9ydFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAncC0xJyxcbiAgICAgICAgICAgIHBvc2l0aW9uID09PSAncG9wcGVyJyAmJlxuICAgICAgICAgICAgICAnaC1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItaGVpZ2h0KV0gdy1mdWxsIG1pbi13LVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCldIHNjcm9sbC1teS0xJ1xuICAgICAgICAgICl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvU2VsZWN0UHJpbWl0aXZlLlZpZXdwb3J0PlxuICAgICAgICA8U2VsZWN0U2Nyb2xsRG93bkJ1dHRvbiAvPlxuICAgICAgPC9TZWxlY3RQcmltaXRpdmUuQ29udGVudD5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0TGFiZWwoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLkxhYmVsPikge1xuICByZXR1cm4gKFxuICAgIDxTZWxlY3RQcmltaXRpdmUuTGFiZWxcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1sYWJlbFwiXG4gICAgICBjbGFzc05hbWU9e2NuKCd0ZXh0LW11dGVkLWZvcmVncm91bmQgcHgtMiBweS0xLjUgdGV4dC14cycsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBTZWxlY3RJdGVtKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBTZWxlY3RQcmltaXRpdmUuSXRlbT4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLkl0ZW1cbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgWyZfc3ZnOm5vdChbY2xhc3MqPSd0ZXh0LSddKV06dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLXNtIHB5LTEuNSBwci04IHBsLTIgdGV4dC1zbSBvdXRsaW5lLWhpZGRlbiBzZWxlY3Qtbm9uZSBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTQgKjpbc3Bhbl06bGFzdDpmbGV4ICo6W3NwYW5dOmxhc3Q6aXRlbXMtY2VudGVyICo6W3NwYW5dOmxhc3Q6Z2FwLTJcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTIgZmxleCBzaXplLTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgPFNlbGVjdFByaW1pdGl2ZS5JdGVtSW5kaWNhdG9yPlxuICAgICAgICAgIDxDaGVja0ljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgPC9TZWxlY3RQcmltaXRpdmUuSXRlbUluZGljYXRvcj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxTZWxlY3RQcmltaXRpdmUuSXRlbVRleHQ+e2NoaWxkcmVufTwvU2VsZWN0UHJpbWl0aXZlLkl0ZW1UZXh0PlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLkl0ZW0+XG4gIClcbn1cblxuZnVuY3Rpb24gU2VsZWN0U2VwYXJhdG9yKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3I+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TZXBhcmF0b3JcbiAgICAgIGRhdGEtc2xvdD1cInNlbGVjdC1zZXBhcmF0b3JcIlxuICAgICAgY2xhc3NOYW1lPXtjbignYmctYm9yZGVyIHBvaW50ZXItZXZlbnRzLW5vbmUgLW14LTEgbXktMSBoLXB4JywgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbFVwQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxVcEJ1dHRvbj4pIHtcbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLXVwLWJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBjdXJzb3ItZGVmYXVsdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktMScsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8Q2hldnJvblVwSWNvbiBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgIDwvU2VsZWN0UHJpbWl0aXZlLlNjcm9sbFVwQnV0dG9uPlxuICApXG59XG5cbmZ1bmN0aW9uIFNlbGVjdFNjcm9sbERvd25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgU2VsZWN0UHJpbWl0aXZlLlNjcm9sbERvd25CdXR0b24+KSB7XG4gIHJldHVybiAoXG4gICAgPFNlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uXG4gICAgICBkYXRhLXNsb3Q9XCJzZWxlY3Qtc2Nyb2xsLWRvd24tYnV0dG9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdmbGV4IGN1cnNvci1kZWZhdWx0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweS0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxDaGV2cm9uRG93bkljb24gY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICA8L1NlbGVjdFByaW1pdGl2ZS5TY3JvbGxEb3duQnV0dG9uPlxuICApXG59XG5cbmV4cG9ydCB7XG4gIFNlbGVjdCxcbiAgU2VsZWN0Q29udGVudCxcbiAgU2VsZWN0R3JvdXAsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdExhYmVsLFxuICBTZWxlY3RTY3JvbGxEb3duQnV0dG9uLFxuICBTZWxlY3RTY3JvbGxVcEJ1dHRvbixcbiAgU2VsZWN0U2VwYXJhdG9yLFxuICBTZWxlY3RUcmlnZ2VyLFxuICBTZWxlY3RWYWx1ZSxcbn1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUYWJzUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10YWJzJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUYWJzKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuUm9vdD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Sb290XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oJ2ZsZXggZmxleC1jb2wgZ2FwLTInLCBjbGFzc05hbWUpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic0xpc3Qoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5MaXN0Pikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLkxpc3RcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtbGlzdFwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnYmctbXV0ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtOSB3LWZpdCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBwLVszcHhdJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZnVuY3Rpb24gVGFic1RyaWdnZXIoe1xuICBjbGFzc05hbWUsXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVGFic1ByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gKFxuICAgIDxUYWJzUHJpbWl0aXZlLlRyaWdnZXJcbiAgICAgIGRhdGEtc2xvdD1cInRhYnMtdHJpZ2dlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImRhdGEtW3N0YXRlPWFjdGl2ZV06YmctYmFja2dyb3VuZCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06dGV4dC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLXJpbmcgZGFyazpkYXRhLVtzdGF0ZT1hY3RpdmVdOmJvcmRlci1pbnB1dCBkYXJrOmRhdGEtW3N0YXRlPWFjdGl2ZV06YmctaW5wdXQvMzAgdGV4dC1mb3JlZ3JvdW5kIGRhcms6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGlubGluZS1mbGV4IGgtW2NhbGMoMTAwJS0xcHgpXSBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLXRyYW5zcGFyZW50IHB4LTIgcHktMSB0ZXh0LXNtIGZvbnQtbWVkaXVtIHdoaXRlc3BhY2Utbm93cmFwIHRyYW5zaXRpb24tW2NvbG9yLGJveC1zaGFkb3ddIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOm91dGxpbmUtMSBkaXNhYmxlZDpwb2ludGVyLWV2ZW50cy1ub25lIGRpc2FibGVkOm9wYWNpdHktNTAgZGF0YS1bc3RhdGU9YWN0aXZlXTpzaGFkb3ctc20gWyZfc3ZnXTpwb2ludGVyLWV2ZW50cy1ub25lIFsmX3N2Z106c2hyaW5rLTAgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS00XCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIFRhYnNDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIFRhYnNQcmltaXRpdmUuQ29udGVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8VGFic1ByaW1pdGl2ZS5Db250ZW50XG4gICAgICBkYXRhLXNsb3Q9XCJ0YWJzLWNvbnRlbnRcIlxuICAgICAgY2xhc3NOYW1lPXtjbignZmxleC0xIG91dGxpbmUtbm9uZScsIGNsYXNzTmFtZSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5leHBvcnQgeyBUYWJzLCBUYWJzTGlzdCwgVGFic1RyaWdnZXIsIFRhYnNDb250ZW50IH1cbiIsCiAgICAiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10b29sdGlwJ1xuXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5mdW5jdGlvbiBUb29sdGlwUHJvdmlkZXIoe1xuICBkZWxheUR1cmF0aW9uID0gMCxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyPikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlByb3ZpZGVyXG4gICAgICBkYXRhLXNsb3Q9XCJ0b29sdGlwLXByb3ZpZGVyXCJcbiAgICAgIGRlbGF5RHVyYXRpb249e2RlbGF5RHVyYXRpb259XG4gICAgICB7Li4ucHJvcHN9XG4gICAgLz5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkNvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLlJvb3Q+KSB7XG4gIHJldHVybiAoXG4gICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwidG9vbHRpcFwiIHsuLi5wcm9wc30gLz5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKVxufVxuXG5mdW5jdGlvbiBUb29sdGlwVHJpZ2dlcih7XG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5UcmlnZ2VyPikge1xuICByZXR1cm4gPFRvb2x0aXBQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJ0b29sdGlwLXRyaWdnZXJcIiB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIFRvb2x0aXBDb250ZW50KHtcbiAgY2xhc3NOYW1lLFxuICBzaWRlT2Zmc2V0ID0gMCxcbiAgY2hpbGRyZW4sXG4gIC4uLnByb3BzXG59OiBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgICAgIDxUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnRcbiAgICAgICAgZGF0YS1zbG90PVwidG9vbHRpcC1jb250ZW50XCJcbiAgICAgICAgc2lkZU9mZnNldD17c2lkZU9mZnNldH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBhbmltYXRlLWluIGZhZGUtaW4tMCB6b29tLWluLTk1IGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPWNsb3NlZF06em9vbS1vdXQtOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIgei01MCB3LWZpdCBvcmlnaW4tKC0tcmFkaXgtdG9vbHRpcC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4pIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC14cyB0ZXh0LWJhbGFuY2UnLFxuICAgICAgICAgIGNsYXNzTmFtZVxuICAgICAgICApfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPFRvb2x0aXBQcmltaXRpdmUuQXJyb3cgY2xhc3NOYW1lPVwiYmctcHJpbWFyeSBmaWxsLXByaW1hcnkgei01MCBzaXplLTIuNSB0cmFuc2xhdGUteS1bY2FsYygtNTAlXy1fMnB4KV0gcm90YXRlLTQ1IHJvdW5kZWQtWzJweF1cIiAvPlxuICAgICAgPC9Ub29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+XG4gICAgPC9Ub29sdGlwUHJpbWl0aXZlLlBvcnRhbD5cbiAgKVxufVxuXG5leHBvcnQgeyBUb29sdGlwLCBUb29sdGlwVHJpZ2dlciwgVG9vbHRpcENvbnRlbnQsIFRvb2x0aXBQcm92aWRlciB9XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyB1c2VEcmFnZ2FibGUgfSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IG1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuY29uc3QgZ2V0Qm9yZGVyUmFkaXVzQ2xhc3MgPSAoXG4gIGlzVHJ1bmNhdGVkU3RhcnQ6IGJvb2xlYW4sXG4gIGlzVHJ1bmNhdGVkRW5kOiBib29sZWFuXG4pID0+IHtcbiAgaWYgKGlzVHJ1bmNhdGVkU3RhcnQgJiYgaXNUcnVuY2F0ZWRFbmQpIHtcbiAgICByZXR1cm4gJ3JvdW5kZWQtbm9uZSdcbiAgfVxuICBpZiAoaXNUcnVuY2F0ZWRTdGFydCkge1xuICAgIHJldHVybiAncm91bmRlZC1yLW1kIHJvdW5kZWQtbC1ub25lJ1xuICB9XG4gIGlmIChpc1RydW5jYXRlZEVuZCkge1xuICAgIHJldHVybiAncm91bmRlZC1sLW1kIHJvdW5kZWQtci1ub25lJ1xuICB9XG4gIHJldHVybiAncm91bmRlZC1tZCdcbn1cblxuZnVuY3Rpb24gRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkKHtcbiAgZWxlbWVudElkLFxuICBldmVudCxcbiAgY2xhc3NOYW1lLFxuICBzdHlsZSxcbiAgZGlzYWJsZURyYWcgPSBmYWxzZSxcbn06IHtcbiAgZWxlbWVudElkOiBzdHJpbmdcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIHN0eWxlPzogQ1NTUHJvcGVydGllc1xuICBldmVudDogQ2FsZW5kYXJFdmVudFxuICBkaXNhYmxlRHJhZz86IGJvb2xlYW5cbn0pIHtcbiAgY29uc3QgeyBvbkV2ZW50Q2xpY2ssIHJlbmRlckV2ZW50LCBkaXNhYmxlRXZlbnRDbGljaywgZGlzYWJsZURyYWdBbmREcm9wIH0gPVxuICAgIHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcbiAgICAgIG9uRXZlbnRDbGljazogc3RhdGUub25FdmVudENsaWNrLFxuICAgICAgcmVuZGVyRXZlbnQ6IHN0YXRlLnJlbmRlckV2ZW50LFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2s6IHN0YXRlLmRpc2FibGVFdmVudENsaWNrLFxuICAgICAgZGlzYWJsZURyYWdBbmREcm9wOiBzdGF0ZS5kaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgfSkpXG5cbiAgY29uc3QgeyBhdHRyaWJ1dGVzLCBsaXN0ZW5lcnMsIHNldE5vZGVSZWYsIGlzRHJhZ2dpbmcgfSA9IHVzZURyYWdnYWJsZSh7XG4gICAgaWQ6IGVsZW1lbnRJZCxcbiAgICBkYXRhOiB7XG4gICAgICBldmVudCxcbiAgICAgIHR5cGU6ICdjYWxlbmRhci1ldmVudCcsXG4gICAgfSxcbiAgICBkaXNhYmxlZDogZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wLFxuICB9KVxuXG4gIC8vIERlZmF1bHQgZXZlbnQgY29udGVudCB0byByZW5kZXIgaWYgY3VzdG9tIHJlbmRlckV2ZW50IGlzIG5vdCBwcm92aWRlZFxuICBjb25zdCBEZWZhdWx0RXZlbnRDb250ZW50ID0gKCkgPT4ge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgZXZlbnQgaGFzIHRydW5jYXRpb24gaW5mb3JtYXRpb25cbiAgICBjb25zdCBlbmhhbmNlZEV2ZW50ID0gZXZlbnQgYXMgdW5rbm93biBhcyB7XG4gICAgICBpc1RydW5jYXRlZFN0YXJ0PzogYm9vbGVhblxuICAgICAgaXNUcnVuY2F0ZWRFbmQ/OiBib29sZWFuXG4gICAgfVxuICAgIGNvbnN0IGlzVHJ1bmNhdGVkU3RhcnQgPSBlbmhhbmNlZEV2ZW50LmlzVHJ1bmNhdGVkU3RhcnRcbiAgICBjb25zdCBpc1RydW5jYXRlZEVuZCA9IGVuaGFuY2VkRXZlbnQuaXNUcnVuY2F0ZWRFbmRcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgZXZlbnQuYmFja2dyb3VuZENvbG9yIHx8ICdiZy1ibHVlLTUwMCcsXG4gICAgICAgICAgZXZlbnQuY29sb3IgfHwgJ3RleHQtd2hpdGUnLFxuICAgICAgICAgICdoLWZ1bGwgdy1mdWxsIHB4LTEgYm9yZGVyLVsxLjVweF0gYm9yZGVyLWNhcmQgdGV4dC1sZWZ0IG92ZXJmbG93LWNsaXAgcmVsYXRpdmUnLFxuICAgICAgICAgIGdldEJvcmRlclJhZGl1c0NsYXNzKGlzVHJ1bmNhdGVkU3RhcnQsIGlzVHJ1bmNhdGVkRW5kKVxuICAgICAgICApfVxuICAgICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGV2ZW50LmJhY2tncm91bmRDb2xvciwgY29sb3I6IGV2ZW50LmNvbG9yIH19XG4gICAgICA+XG4gICAgICAgIHsvKiBMZWZ0IGNvbnRpbnVhdGlvbiBpbmRpY2F0b3IgKi99XG4gICAgICAgIHtpc1RydW5jYXRlZFN0YXJ0ICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIGxlZnQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG4gICAgICAgICl9XG5cbiAgICAgICAgey8qIEV2ZW50IHRpdGxlICovfVxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAndGV4dC1bMTBweF0gZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhzIG10LTAuNScsXG4gICAgICAgICAgICAvLyBBZGQgc2xpZ2h0IHBhZGRpbmcgdG8gYXZvaWQgb3ZlcmxhcCB3aXRoIGluZGljYXRvcnNcbiAgICAgICAgICAgIGlzVHJ1bmNhdGVkU3RhcnQgJiYgJ3BsLTEnLFxuICAgICAgICAgICAgaXNUcnVuY2F0ZWRFbmQgJiYgJ3ByLTEnXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtldmVudC50aXRsZX1cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIHsvKiBSaWdodCBjb250aW51YXRpb24gaW5kaWNhdG9yICovfVxuICAgICAgICB7aXNUcnVuY2F0ZWRFbmQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBib3R0b20tMCB3LTAuNSBiZy1mb3JlZ3JvdW5kLzI1XCI+PC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgIGtleT17ZWxlbWVudElkfVxuICAgICAgICByZWY9e3NldE5vZGVSZWZ9XG4gICAgICAgIHsuLi5hdHRyaWJ1dGVzfVxuICAgICAgICB7Li4ubGlzdGVuZXJzfVxuICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC01MCB9fVxuICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtNTAgfX1cbiAgICAgICAgbGF5b3V0XG4gICAgICAgIGxheW91dElkPXtlbGVtZW50SWR9XG4gICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuNCwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAndHJ1bmNhdGUgaC1mdWxsIHctZnVsbCcsXG4gICAgICAgICAgZGlzYWJsZURyYWcgfHwgZGlzYWJsZURyYWdBbmREcm9wXG4gICAgICAgICAgICA/IGRpc2FibGVFdmVudENsaWNrXG4gICAgICAgICAgICAgID8gJ2N1cnNvci1kZWZhdWx0J1xuICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgIDogJ2N1cnNvci1ncmFiJyxcbiAgICAgICAgICBpc0RyYWdnaW5nICYmXG4gICAgICAgICAgICAhKGRpc2FibGVEcmFnIHx8IGRpc2FibGVEcmFnQW5kRHJvcCkgJiZcbiAgICAgICAgICAgICdjdXJzb3ItZ3JhYmJpbmcgc2hhZG93LWxnJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvbkV2ZW50Q2xpY2soZXZlbnQpXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsvKiBVc2UgY3VzdG9tIHJlbmRlckV2ZW50IGZyb20gY29udGV4dCBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCAqL31cbiAgICAgICAge3JlbmRlckV2ZW50ID8gcmVuZGVyRXZlbnQoZXZlbnQpIDogPERlZmF1bHRFdmVudENvbnRlbnQgLz59XG4gICAgICA8L21vdGlvbi5kaXY+XG4gICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IERyYWdnYWJsZUV2ZW50ID0gbWVtbyhcbiAgRHJhZ2dhYmxlRXZlbnRVbm1lbW9pemVkLFxuICAocHJldlByb3BzLCBuZXh0UHJvcHMpID0+IHtcbiAgICAvLyBDb21wYXJlIHRoZSBlc3NlbnRpYWwgcHJvcHMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gICAgcmV0dXJuIChcbiAgICAgIHByZXZQcm9wcy5lbGVtZW50SWQgPT09IG5leHRQcm9wcy5lbGVtZW50SWQgJiZcbiAgICAgIHByZXZQcm9wcy5kaXNhYmxlRHJhZyA9PT0gbmV4dFByb3BzLmRpc2FibGVEcmFnICYmXG4gICAgICBwcmV2UHJvcHMuY2xhc3NOYW1lID09PSBuZXh0UHJvcHMuY2xhc3NOYW1lICYmXG4gICAgICBwcmV2UHJvcHMuZXZlbnQgPT09IG5leHRQcm9wcy5ldmVudFxuICAgIClcbiAgfVxuKVxuIiwKICAgICJpbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb250ZXh0cy9yZXNvdXJjZS1jYWxlbmRhci1jb250ZXh0J1xuXG4vKipcbiAqIEdlbmVyaWMgaG9vayB0aGF0IGRldGVjdHMgd2hpY2ggY2FsZW5kYXIgY29udGV4dCBpcyBhdmFpbGFibGUgYW5kIHJldHVybnMgc2VsZWN0ZWQgcHJvcGVydGllc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU21hcnRDYWxlbmRhckNvbnRleHQ8VD4oc2VsZWN0b3I6IChjb250ZXh0KSA9PiBUKTogVCB7XG4gIC8vIENoZWNrIGJvdGggY29udGV4dHMgdXNpbmcgdXNlQ29udGV4dCBkaXJlY3RseSAobm8gaG9va3MpXG4gIGNvbnN0IHJlc291cmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG4gIGNvbnN0IHJlZ3VsYXJDb250ZXh0ID0gdXNlQ29udGV4dChDYWxlbmRhckNvbnRleHQpXG5cbiAgaWYgKHJlc291cmNlQ29udGV4dCkge1xuICAgIHJldHVybiBzZWxlY3RvcihyZXNvdXJjZUNvbnRleHQpXG4gIH1cblxuICBpZiAocmVndWxhckNvbnRleHQpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IocmVndWxhckNvbnRleHQpXG4gIH1cblxuICAvLyBJZiBuZWl0aGVyIGNvbnRleHQgaXMgYXZhaWxhYmxlLCB0aHJvdyBhbiBlcnJvclxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3VzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBDYWxlbmRhclByb3ZpZGVyIG9yIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7XG4gIFJlc291cmNlLFxuICBSZXNvdXJjZUNhbGVuZGFyRXZlbnQsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHtcbiAgQ2FsZW5kYXJDb250ZXh0VHlwZSxcbiAgVXNlSWxhbXlDYWxlbmRhckNvbnRleHRSZXR1cm4sXG59IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSBleHRlbmRzIENhbGVuZGFyQ29udGV4dFR5cGUge1xuICAvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuICByZXNvdXJjZXM6IFJlc291cmNlW11cbiAgdmlzaWJsZVJlc291cmNlczogU2V0PHN0cmluZyB8IG51bWJlcj5cblxuICAvLyBSZXNvdXJjZSB1dGlsaXRpZXNcbiAgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpID0+IFJlc291cmNlQ2FsZW5kYXJFdmVudFtdXG4gIGdldEV2ZW50c0ZvclJlc291cmNlczogKFxuICAgIHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4gICkgPT4gUmVzb3VyY2VDYWxlbmRhckV2ZW50W11cbiAgZ2V0UmVzb3VyY2VCeUlkOiAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiBSZXNvdXJjZSB8IHVuZGVmaW5lZFxuICBnZXRWaXNpYmxlUmVzb3VyY2VzOiAoKSA9PiBSZXNvdXJjZVtdXG5cbiAgLy8gQ3Jvc3MtcmVzb3VyY2UgZXZlbnQgdXRpbGl0aWVzXG4gIGlzRXZlbnRDcm9zc1Jlc291cmNlOiAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4gYm9vbGVhblxuICBnZXRFdmVudFJlc291cmNlSWRzOiAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4gKHN0cmluZyB8IG51bWJlcilbXVxuXG4gIC8vIEFkZGl0aW9uYWwgcHJvcGVydGllcyBmcm9tIGNhbGVuZGFyIGNvbnRleHRcbiAgb25FdmVudENsaWNrOiAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkNlbGxDbGljazogKFxuICAgIHN0YXJ0RGF0ZTogZGF5anMuRGF5anMsXG4gICAgZW5kRGF0ZTogZGF5anMuRGF5anMsXG4gICAgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuICApID0+IHZvaWRcbiAgcmVuZGVyUmVzb3VyY2U/OiAocmVzb3VyY2U6IFJlc291cmNlKSA9PiBSZWFjdC5SZWFjdE5vZGVcbn1cblxuZXhwb3J0IGNvbnN0IFJlc291cmNlQ2FsZW5kYXJDb250ZXh0OiBSZWFjdC5Db250ZXh0PFxuICBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFR5cGUgfCB1bmRlZmluZWRcbj4gPSBjcmVhdGVDb250ZXh0PFJlc291cmNlQ2FsZW5kYXJDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG5leHBvcnQgY29uc3QgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgPSAoKTogUmVzb3VyY2VDYWxlbmRhckNvbnRleHRUeXBlID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoUmVzb3VyY2VDYWxlbmRhckNvbnRleHQpXG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAndXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFJlc291cmNlQ2FsZW5kYXJQcm92aWRlcidcbiAgICApXG4gIH1cbiAgcmV0dXJuIGNvbnRleHRcbn1cblxuLyoqXG4gKiBTaW1wbGlmaWVkIHJlc291cmNlIGNhbGVuZGFyIGNvbnRleHQgdHlwZSBmb3IgZXh0ZXJuYWwgdXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dFJldHVyblxuICBleHRlbmRzIFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIHtcbiAgcmVhZG9ubHkgZXZlbnRzOiBSZXNvdXJjZUNhbGVuZGFyRXZlbnRbXVxuICByZWFkb25seSByZXNvdXJjZXM6IFJlc291cmNlW11cbiAgcmVhZG9ubHkgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IChcbiAgICByZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKSA9PiBSZXNvdXJjZUNhbGVuZGFyRXZlbnRbXVxufVxuXG5leHBvcnQgY29uc3QgdXNlSWxhbXlSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCA9XG4gICgpOiBVc2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0UmV0dXJuID0+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChSZXNvdXJjZUNhbGVuZGFyQ29udGV4dClcbiAgICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd1c2VJbGFteVJlc291cmNlQ2FsZW5kYXJDb250ZXh0IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50RGF0ZTogY29udGV4dC5jdXJyZW50RGF0ZSxcbiAgICAgIHZpZXc6IGNvbnRleHQudmlldyxcbiAgICAgIGV2ZW50czogY29udGV4dC5ldmVudHMsXG4gICAgICByZXNvdXJjZXM6IGNvbnRleHQucmVzb3VyY2VzLFxuICAgICAgaXNFdmVudEZvcm1PcGVuOiBjb250ZXh0LmlzRXZlbnRGb3JtT3BlbixcbiAgICAgIHNlbGVjdGVkRXZlbnQ6IGNvbnRleHQuc2VsZWN0ZWRFdmVudCxcbiAgICAgIHNlbGVjdGVkRGF0ZTogY29udGV4dC5zZWxlY3RlZERhdGUsXG4gICAgICBmaXJzdERheU9mV2VlazogY29udGV4dC5maXJzdERheU9mV2VlayxcbiAgICAgIHNldEN1cnJlbnREYXRlOiBjb250ZXh0LnNldEN1cnJlbnREYXRlLFxuICAgICAgc2VsZWN0RGF0ZTogY29udGV4dC5zZWxlY3REYXRlLFxuICAgICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgICAgbmV4dFBlcmlvZDogY29udGV4dC5uZXh0UGVyaW9kLFxuICAgICAgcHJldlBlcmlvZDogY29udGV4dC5wcmV2UGVyaW9kLFxuICAgICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgICBhZGRFdmVudDogY29udGV4dC5hZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgICAgZGVsZXRlRXZlbnQ6IGNvbnRleHQuZGVsZXRlRXZlbnQsXG4gICAgICBvcGVuRXZlbnRGb3JtOiBjb250ZXh0Lm9wZW5FdmVudEZvcm0sXG4gICAgICBjbG9zZUV2ZW50Rm9ybTogY29udGV4dC5jbG9zZUV2ZW50Rm9ybSxcbiAgICAgIGdldEV2ZW50c0ZvclJlc291cmNlOiBjb250ZXh0LmdldEV2ZW50c0ZvclJlc291cmNlLFxuICAgIH0gYXMgY29uc3RcbiAgfVxuIiwKICAgICJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHtcbiAgUmVzb3VyY2UsXG4gIFJlc291cmNlQ2FsZW5kYXJFdmVudCxcbn0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbmltcG9ydCB7IHVzZUNhbGVuZGFyRW5naW5lIH0gZnJvbSAnQC9ob29rcy91c2UtY2FsZW5kYXItZW5naW5lJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyUHJvdmlkZXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9wcm92aWRlcidcblxuY29uc3QgZ2V0RXZlbnRSZXNvdXJjZUlkcyA9IChcbiAgZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudFxuKTogKHN0cmluZyB8IG51bWJlcilbXSA9PiB7XG4gIGlmIChldmVudC5yZXNvdXJjZUlkcykge1xuICAgIHJldHVybiBldmVudC5yZXNvdXJjZUlkc1xuICB9XG4gIGlmIChldmVudC5yZXNvdXJjZUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2V2ZW50LnJlc291cmNlSWRdXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmludGVyZmFjZSBSZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXJQcm9wcyBleHRlbmRzIENhbGVuZGFyUHJvdmlkZXJQcm9wcyB7XG4gIGV2ZW50cz86IFJlc291cmNlQ2FsZW5kYXJFdmVudFtdXG4gIHJlc291cmNlcz86IFJlc291cmNlW11cbiAgb25DZWxsQ2xpY2s/OiAoXG4gICAgc3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcbiAgICBlbmREYXRlOiBkYXlqcy5EYXlqcyxcbiAgICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gICkgPT4gdm9pZFxuICByZW5kZXJSZXNvdXJjZT86IChyZXNvdXJjZTogUmVzb3VyY2UpID0+IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyOiBSZWFjdC5GQzxcbiAgUmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyUHJvcHNcbj4gPSAoe1xuICBjaGlsZHJlbixcbiAgZXZlbnRzID0gW10sXG4gIHJlc291cmNlcyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9IDAsXG4gIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgcmVuZGVyRXZlbnQsXG4gIG9uRXZlbnRDbGljayxcbiAgb25DZWxsQ2xpY2ssXG4gIG9uVmlld0NoYW5nZSxcbiAgb25FdmVudEFkZCxcbiAgb25FdmVudFVwZGF0ZSxcbiAgb25FdmVudERlbGV0ZSxcbiAgb25EYXRlQ2hhbmdlLFxuICBsb2NhbGUsXG4gIHRpbWV6b25lLFxuICBkaXNhYmxlQ2VsbENsaWNrLFxuICBkaXNhYmxlRXZlbnRDbGljayxcbiAgZGlzYWJsZURyYWdBbmREcm9wLFxuICBkYXlNYXhFdmVudHMsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbiAgaGVhZGVyQ2xhc3NOYW1lLFxuICB0cmFuc2xhdGlvbnMsXG4gIHRyYW5zbGF0b3IsXG4gIHJlbmRlclJlc291cmNlLFxufSkgPT4ge1xuICAvLyBSZXNvdXJjZS1zcGVjaWZpYyBzdGF0ZVxuICBjb25zdCBbY3VycmVudFJlc291cmNlc10gPSB1c2VTdGF0ZTxSZXNvdXJjZVtdPihyZXNvdXJjZXMpXG4gIGNvbnN0IFt2aXNpYmxlUmVzb3VyY2VzLCBzZXRWaXNpYmxlUmVzb3VyY2VzXSA9IHVzZVN0YXRlPFxuICAgIFNldDxzdHJpbmcgfCBudW1iZXI+XG4gID4obmV3IFNldChyZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG5cbiAgLy8gVXNlIHRoZSBjYWxlbmRhciBlbmdpbmVcbiAgY29uc3QgY2FsZW5kYXJFbmdpbmUgPSB1c2VDYWxlbmRhckVuZ2luZSh7XG4gICAgZXZlbnRzLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGluaXRpYWxWaWV3LFxuICAgIG9uRXZlbnRBZGQsXG4gICAgb25FdmVudFVwZGF0ZSxcbiAgICBvbkV2ZW50RGVsZXRlLFxuICAgIG9uRGF0ZUNoYW5nZSxcbiAgICBvblZpZXdDaGFuZ2U6IG9uVmlld0NoYW5nZSxcbiAgICBsb2NhbGUsXG4gICAgdGltZXpvbmUsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIHRyYW5zbGF0b3IsXG4gIH0pXG5cbiAgLy8gUmVzb3VyY2UgdmlzaWJpbGl0eVxuICBjb25zdCB0b2dnbGVSZXNvdXJjZVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICBzZXRWaXNpYmxlUmVzb3VyY2VzKChwcmV2KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQocHJldilcbiAgICAgICAgaWYgKG5ld1NldC5oYXMocmVzb3VyY2VJZCkpIHtcbiAgICAgICAgICBuZXdTZXQuZGVsZXRlKHJlc291cmNlSWQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3U2V0LmFkZChyZXNvdXJjZUlkKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdTZXRcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3Qgc2hvd1Jlc291cmNlID0gdXNlQ2FsbGJhY2soKHJlc291cmNlSWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIHNldFZpc2libGVSZXNvdXJjZXMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKVxuICB9LCBbXSlcblxuICBjb25zdCBoaWRlUmVzb3VyY2UgPSB1c2VDYWxsYmFjaygocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgc2V0VmlzaWJsZVJlc291cmNlcygocHJldikgPT4ge1xuICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChwcmV2KVxuICAgICAgbmV3U2V0LmRlbGV0ZShyZXNvdXJjZUlkKVxuICAgICAgcmV0dXJuIG5ld1NldFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNob3dBbGxSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VmlzaWJsZVJlc291cmNlcyhuZXcgU2V0KGN1cnJlbnRSZXNvdXJjZXMubWFwKChyKSA9PiByLmlkKSkpXG4gIH0sIFtjdXJyZW50UmVzb3VyY2VzXSlcblxuICBjb25zdCBoaWRlQWxsUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFZpc2libGVSZXNvdXJjZXMobmV3IFNldCgpKVxuICB9LCBbXSlcblxuICAvLyBFdmVudCB1dGlsaXRpZXNcbiAgY29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUmVzb3VyY2VDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgcmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBSZXNvdXJjZUNhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnJlc291cmNlSWRzKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlSWRzLmluY2x1ZGVzKHJlc291cmNlSWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50LnJlc291cmNlSWQgPT09IHJlc291cmNlSWRcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbY2FsZW5kYXJFbmdpbmUuZXZlbnRzXVxuICApXG5cbiAgY29uc3QgZ2V0RXZlbnRzRm9yUmVzb3VyY2VzID0gdXNlQ2FsbGJhY2soXG4gICAgKHJlc291cmNlSWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUmVzb3VyY2VDYWxlbmRhckV2ZW50W10gPT4ge1xuICAgICAgcmV0dXJuIGNhbGVuZGFyRW5naW5lLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBSZXNvdXJjZUNhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRSZXNvdXJjZUlkcyA9IGdldEV2ZW50UmVzb3VyY2VJZHMoZXZlbnQpXG4gICAgICAgIHJldHVybiBldmVudFJlc291cmNlSWRzLnNvbWUoKGlkKSA9PiByZXNvdXJjZUlkcy5pbmNsdWRlcyhpZCkpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2NhbGVuZGFyRW5naW5lLmV2ZW50c11cbiAgKVxuXG4gIGNvbnN0IGdldFJlc291cmNlQnlJZCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZXNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICByZXR1cm4gY3VycmVudFJlc291cmNlcy5maW5kKChyZXNvdXJjZSkgPT4gcmVzb3VyY2UuaWQgPT09IHJlc291cmNlSWQpXG4gICAgfSxcbiAgICBbY3VycmVudFJlc291cmNlc11cbiAgKVxuXG4gIGNvbnN0IGdldFZpc2libGVSZXNvdXJjZXMgPSB1c2VDYWxsYmFjaygoKTogUmVzb3VyY2VbXSA9PiB7XG4gICAgcmV0dXJuIGN1cnJlbnRSZXNvdXJjZXMuZmlsdGVyKChyZXNvdXJjZSkgPT5cbiAgICAgIHZpc2libGVSZXNvdXJjZXMuaGFzKHJlc291cmNlLmlkKVxuICAgIClcbiAgfSwgW2N1cnJlbnRSZXNvdXJjZXMsIHZpc2libGVSZXNvdXJjZXNdKVxuXG4gIC8vIENyb3NzLXJlc291cmNlIGV2ZW50IHV0aWxpdGllc1xuICBjb25zdCBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVzb3VyY2VDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gQm9vbGVhbihldmVudC5yZXNvdXJjZUlkcyAmJiBldmVudC5yZXNvdXJjZUlkcy5sZW5ndGggPiAxKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIC8vIEN1c3RvbSBoYW5kbGVyc1xuICBjb25zdCBlZGl0RXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlc291cmNlQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0U2VsZWN0ZWRFdmVudChldmVudClcbiAgICAgIGNhbGVuZGFyRW5naW5lLnNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgIH0sXG4gICAgW2NhbGVuZGFyRW5naW5lXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRXZlbnRDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVzb3VyY2VDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25FdmVudENsaWNrKSB7XG4gICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRFdmVudChldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzdGFydERhdGU6IGRheWpzLkRheWpzLFxuICAgICAgZW5kRGF0ZTogZGF5anMuRGF5anMsXG4gICAgICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gICAgKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKG9uQ2VsbENsaWNrKSB7XG4gICAgICAgIG9uQ2VsbENsaWNrKHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgcmVzb3VyY2VJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld0V2ZW50OiBSZXNvdXJjZUNhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgICAgdGl0bGU6IGNhbGVuZGFyRW5naW5lLnQoJ25ld0V2ZW50JyksXG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmQ6IGVuZERhdGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICAgIH0gYXMgUmVzb3VyY2VDYWxlbmRhckV2ZW50XG5cbiAgICAgICAgaWYgKHJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld0V2ZW50LnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICAgIH1cblxuICAgICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KG5ld0V2ZW50KVxuICAgICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZERhdGUoc3RhcnREYXRlKVxuICAgICAgICBjYWxlbmRhckVuZ2luZS5zZXRJc0V2ZW50Rm9ybU9wZW4odHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNlbGxDbGljaywgZGlzYWJsZUNlbGxDbGljaywgY2FsZW5kYXJFbmdpbmVdXG4gIClcblxuICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgdmFsdWVcbiAgY29uc3QgY29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgLi4uY2FsZW5kYXJFbmdpbmUsXG4gICAgICB2aWV3OiBjYWxlbmRhckVuZ2luZS52aWV3LFxuICAgICAgc2V0VmlldzogY2FsZW5kYXJFbmdpbmUuc2V0VmlldyxcbiAgICAgIGV2ZW50czogY2FsZW5kYXJFbmdpbmUuZXZlbnRzLFxuICAgICAgcmF3RXZlbnRzOiBjYWxlbmRhckVuZ2luZS5yYXdFdmVudHMsXG5cbiAgICAgIC8vIFJlc291cmNlLXNwZWNpZmljIHN0YXRlXG4gICAgICByZXNvdXJjZXM6IGN1cnJlbnRSZXNvdXJjZXMsXG4gICAgICB2aXNpYmxlUmVzb3VyY2VzLFxuICAgICAgdG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuICAgICAgc2hvd1Jlc291cmNlLFxuICAgICAgaGlkZVJlc291cmNlLFxuICAgICAgc2hvd0FsbFJlc291cmNlcyxcbiAgICAgIGhpZGVBbGxSZXNvdXJjZXMsXG5cbiAgICAgIC8vIFJlc291cmNlIHV0aWxpdGllc1xuICAgICAgZ2V0RXZlbnRzRm9yUmVzb3VyY2UsXG4gICAgICBnZXRFdmVudHNGb3JSZXNvdXJjZXMsXG4gICAgICBnZXRSZXNvdXJjZUJ5SWQsXG4gICAgICBnZXRWaXNpYmxlUmVzb3VyY2VzLFxuXG4gICAgICAvLyBDcm9zcy1yZXNvdXJjZSBldmVudCB1dGlsaXRpZXNcbiAgICAgIGlzRXZlbnRDcm9zc1Jlc291cmNlLFxuICAgICAgZ2V0RXZlbnRSZXNvdXJjZUlkcyxcblxuICAgICAgLy8gT3ZlcnJpZGUgaGFuZGxlcnNcbiAgICAgIG9uRXZlbnRDbGljazogaGFuZGxlRXZlbnRDbGljayxcbiAgICAgIG9uQ2VsbENsaWNrOiBoYW5kbGVEYXRlQ2xpY2ssXG5cbiAgICAgIC8vIFBhc3MgdGhyb3VnaCBoZWFkZXIgcHJvcHNcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcblxuICAgICAgLy8gUGFzcyB0aHJvdWdoIG90aGVyIHByb3BzXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIHJlbmRlclJlc291cmNlLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICB9KSxcbiAgICBbXG4gICAgICBjYWxlbmRhckVuZ2luZSxcbiAgICAgIGN1cnJlbnRSZXNvdXJjZXMsXG4gICAgICB2aXNpYmxlUmVzb3VyY2VzLFxuICAgICAgdG9nZ2xlUmVzb3VyY2VWaXNpYmlsaXR5LFxuICAgICAgc2hvd1Jlc291cmNlLFxuICAgICAgaGlkZVJlc291cmNlLFxuICAgICAgc2hvd0FsbFJlc291cmNlcyxcbiAgICAgIGhpZGVBbGxSZXNvdXJjZXMsXG4gICAgICBnZXRFdmVudHNGb3JSZXNvdXJjZSxcbiAgICAgIGdldEV2ZW50c0ZvclJlc291cmNlcyxcbiAgICAgIGdldFJlc291cmNlQnlJZCxcbiAgICAgIGdldFZpc2libGVSZXNvdXJjZXMsXG4gICAgICBpc0V2ZW50Q3Jvc3NSZXNvdXJjZSxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIHJlbmRlclJlc291cmNlLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICBdXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxSZXNvdXJjZUNhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1Jlc291cmNlQ2FsZW5kYXJDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG4iLAogICAgImltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQge1xuICBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyxcbiAgdXBkYXRlUmVjdXJyaW5nRXZlbnQgYXMgdXBkYXRlUmVjdXJyaW5nRXZlbnRJbXBsLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudCBhcyBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwsXG59IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS91dGlscy9yZWN1cnJlbmNlLWhhbmRsZXInXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0T3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnQC9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxUIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhckVuZ2luZUNvbmZpZyB7XG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIGZpcnN0RGF5T2ZXZWVrOiBudW1iZXJcbiAgaW5pdGlhbFZpZXc/OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcidcbiAgb25FdmVudEFkZD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkV2ZW50VXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRXZlbnREZWxldGU/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25EYXRlQ2hhbmdlPzogKGRhdGU6IGRheWpzLkRheWpzKSA9PiB2b2lkXG4gIG9uVmlld0NoYW5nZT86ICh2aWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgfCAneWVhcicpID0+IHZvaWRcbiAgbG9jYWxlPzogc3RyaW5nXG4gIHRpbWV6b25lPzogc3RyaW5nXG4gIHRyYW5zbGF0aW9ucz86IFRyYW5zbGF0aW9uc1xuICB0cmFuc2xhdG9yPzogVHJhbnNsYXRvckZ1bmN0aW9uXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FsZW5kYXJFbmdpbmVSZXR1cm4ge1xuICAvLyBTdGF0ZVxuICBjdXJyZW50RGF0ZTogZGF5anMuRGF5anNcbiAgdmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInXG4gIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHJhd0V2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIGlzRXZlbnRGb3JtT3BlbjogYm9vbGVhblxuICBzZWxlY3RlZEV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICBzZWxlY3RlZERhdGU6IGRheWpzLkRheWpzIHwgbnVsbFxuICBmaXJzdERheU9mV2VlazogbnVtYmVyXG4gIGRheU1heEV2ZW50czogbnVtYmVyXG4gIGN1cnJlbnRMb2NhbGU6IHN0cmluZ1xuXG4gIC8vIEFjdGlvbnNcbiAgc2V0Q3VycmVudERhdGU6IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBzZWxlY3REYXRlOiAoZGF0ZTogZGF5anMuRGF5anMpID0+IHZvaWRcbiAgc2V0VmlldzogKHZpZXc6ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJykgPT4gdm9pZFxuICBuZXh0UGVyaW9kOiAoKSA9PiB2b2lkXG4gIHByZXZQZXJpb2Q6ICgpID0+IHZvaWRcbiAgdG9kYXk6ICgpID0+IHZvaWRcblxuICAvLyBFdmVudCBvcGVyYXRpb25zXG4gIGFkZEV2ZW50OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgdXBkYXRlRXZlbnQ6IChldmVudElkOiBzdHJpbmcgfCBudW1iZXIsIGV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB2b2lkXG4gIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PixcbiAgICBvcHRpb25zOiBSZWN1cnJlbmNlRWRpdE9wdGlvbnNcbiAgKSA9PiB2b2lkXG4gIGRlbGV0ZUV2ZW50OiAoZXZlbnRJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB2b2lkXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiAoXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICkgPT4gdm9pZFxuXG4gIC8vIEV2ZW50IGZvcm1cbiAgb3BlbkV2ZW50Rm9ybTogKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBjbG9zZUV2ZW50Rm9ybTogKCkgPT4gdm9pZFxuICBzZXRTZWxlY3RlZEV2ZW50OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxDYWxlbmRhckV2ZW50IHwgbnVsbD4+XG4gIHNldElzRXZlbnRGb3JtT3BlbjogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248Ym9vbGVhbj4+XG4gIHNldFNlbGVjdGVkRGF0ZTogUmVhY3QuRGlzcGF0Y2g8UmVhY3QuU2V0U3RhdGVBY3Rpb248ZGF5anMuRGF5anMgfCBudWxsPj5cblxuICAvLyBVdGlsaXRpZXNcbiAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlOiAoXG4gICAgc3RhcnREYXRlOiBkYXlqcy5EYXlqcyxcbiAgICBlbmREYXRlOiBkYXlqcy5EYXlqc1xuICApID0+IENhbGVuZGFyRXZlbnRbXVxuICBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQ6IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgZ2V0Q3VycmVudFZpZXdSYW5nZTogKCkgPT4geyBzdGFydDogZGF5anMuRGF5anM7IGVuZDogZGF5anMuRGF5anMgfVxuXG4gIC8vIFRyYW5zbGF0aW9uXG4gIHQ6IChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDYWxlbmRhckVuZ2luZSA9IChcbiAgY29uZmlnOiBDYWxlbmRhckVuZ2luZUNvbmZpZ1xuKTogQ2FsZW5kYXJFbmdpbmVSZXR1cm4gPT4ge1xuICBjb25zdCB7XG4gICAgZXZlbnRzID0gW10sXG4gICAgZmlyc3REYXlPZldlZWsgPSAwLFxuICAgIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgICBvbkV2ZW50QWRkLFxuICAgIG9uRXZlbnRVcGRhdGUsXG4gICAgb25FdmVudERlbGV0ZSxcbiAgICBvbkRhdGVDaGFuZ2UsXG4gICAgb25WaWV3Q2hhbmdlLFxuICAgIGxvY2FsZSxcbiAgICB0aW1lem9uZSxcbiAgICB0cmFuc2xhdGlvbnMsXG4gICAgdHJhbnNsYXRvcixcbiAgfSA9IGNvbmZpZ1xuXG4gIC8vIFN0YXRlXG4gIGNvbnN0IFtjdXJyZW50RGF0ZSwgc2V0Q3VycmVudERhdGVdID0gdXNlU3RhdGU8ZGF5anMuRGF5anM+KGRheWpzKCkpXG4gIGNvbnN0IFt2aWV3LCBzZXRWaWV3XSA9IHVzZVN0YXRlPCdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJz4oXG4gICAgaW5pdGlhbFZpZXdcbiAgKVxuICBjb25zdCBbY3VycmVudEV2ZW50cywgc2V0Q3VycmVudEV2ZW50c10gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50W10+KGV2ZW50cylcbiAgY29uc3QgW2lzRXZlbnRGb3JtT3Blbiwgc2V0SXNFdmVudEZvcm1PcGVuXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRFdmVudCwgc2V0U2VsZWN0ZWRFdmVudF0gPSB1c2VTdGF0ZTxDYWxlbmRhckV2ZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkRGF0ZSwgc2V0U2VsZWN0ZWREYXRlXSA9IHVzZVN0YXRlPGRheWpzLkRheWpzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2N1cnJlbnRMb2NhbGUsIHNldEN1cnJlbnRMb2NhbGVdID0gdXNlU3RhdGU8c3RyaW5nPihsb2NhbGUgfHwgJ2VuJylcblxuICAvLyBDcmVhdGUgdHJhbnNsYXRpb24gZnVuY3Rpb25cbiAgY29uc3QgdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICh0cmFuc2xhdG9yKSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRvclxuICAgIH1cbiAgICBpZiAodHJhbnNsYXRpb25zKSB7XG4gICAgICByZXR1cm4gKGtleToga2V5b2YgVHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnNba2V5XSB8fCBrZXlcbiAgICB9XG4gICAgcmV0dXJuIChrZXk6IGtleW9mIFRyYW5zbGF0aW9ucykgPT4gZGVmYXVsdFRyYW5zbGF0aW9uc1trZXldIHx8IGtleVxuICB9LCBbdHJhbnNsYXRpb25zLCB0cmFuc2xhdG9yXSlcblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IGV2ZW50cyBmb3IgYSBzcGVjaWZpYyBkYXRlIHJhbmdlXG4gIGNvbnN0IGdldEV2ZW50c0ZvckRhdGVSYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcyk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gICAgICBjb25zdCBhbGxFdmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgY3VycmVudEV2ZW50cykge1xuICAgICAgICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudHMgPSBnZW5lcmF0ZVJlY3VycmluZ0V2ZW50cyh7XG4gICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgICAgICBzdGFydERhdGUsXG4gICAgICAgICAgICBlbmREYXRlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgYWxsRXZlbnRzLnB1c2goLi4ucmVjdXJyaW5nRXZlbnRzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGV2ZW50U3RhcnRzSW5SYW5nZSA9XG4gICAgICAgICAgICBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpXG5cbiAgICAgICAgICBjb25zdCBldmVudEVuZHNJblJhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkgJiZcbiAgICAgICAgICAgIGV2ZW50LmVuZC5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxuXG4gICAgICAgICAgY29uc3QgZXZlbnRTcGFuc1JhbmdlID1cbiAgICAgICAgICAgIGV2ZW50LnN0YXJ0LmlzQmVmb3JlKHN0YXJ0RGF0ZSkgJiYgZXZlbnQuZW5kLmlzQWZ0ZXIoZW5kRGF0ZSlcblxuICAgICAgICAgIGlmIChldmVudFN0YXJ0c0luUmFuZ2UgfHwgZXZlbnRFbmRzSW5SYW5nZSB8fCBldmVudFNwYW5zUmFuZ2UpIHtcbiAgICAgICAgICAgIGFsbEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxsRXZlbnRzXG4gICAgfSxcbiAgICBbY3VycmVudEV2ZW50c11cbiAgKVxuXG4gIC8vIEdldCB0aGUgY3VycmVudCB2aWV3J3MgZGF0ZSByYW5nZVxuICBjb25zdCBnZXRDdXJyZW50Vmlld1JhbmdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgZW5kOiBjdXJyZW50RGF0ZS5lbmRPZignZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBjdXJyZW50RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgLnN1YnRyYWN0KGZpcnN0RGF5T2ZXZWVrID09PSAxID8gMSA6IDAsICdkYXknKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlXG4gICAgICAgICAgICAuZW5kT2YoJ3dlZWsnKVxuICAgICAgICAgICAgLmFkZChmaXJzdERheU9mV2VlayA9PT0gMSA/IDEgOiAwLCAnZGF5JyksXG4gICAgICAgIH1cbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5zdGFydE9mKCdtb250aCcpXG4gICAgICAgICAgICAuc3RhcnRPZignd2VlaycpXG4gICAgICAgICAgICAuc3VidHJhY3QoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGVcbiAgICAgICAgICAgIC5lbmRPZignbW9udGgnKVxuICAgICAgICAgICAgLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgIC5hZGQoZmlyc3REYXlPZldlZWsgPT09IDEgPyAxIDogMCwgJ2RheScpLFxuICAgICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZigneWVhcicpLFxuICAgICAgICAgIGVuZDogY3VycmVudERhdGUuZW5kT2YoJ3llYXInKSxcbiAgICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKSxcbiAgICAgICAgICBlbmQ6IGN1cnJlbnREYXRlLmVuZE9mKCdtb250aCcpLFxuICAgICAgICB9XG4gICAgfVxuICB9LCBbY3VycmVudERhdGUsIHZpZXcsIGZpcnN0RGF5T2ZXZWVrXSlcblxuICAvLyBHZXQgcHJvY2Vzc2VkIGV2ZW50cyBmb3IgdGhlIGN1cnJlbnQgdmlld1xuICBjb25zdCBwcm9jZXNzZWRFdmVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldEN1cnJlbnRWaWV3UmFuZ2UoKVxuICAgIHJldHVybiBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSwgW2dldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0Q3VycmVudFZpZXdSYW5nZV0pXG5cbiAgLy8gVXBkYXRlIGV2ZW50cyB3aGVuIGV2ZW50cyBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXZlbnRzKSB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKGV2ZW50cylcbiAgICB9XG4gIH0sIFtldmVudHNdKVxuXG4gIC8vIENvbmZpZ3VyZSBsb2NhbGUgd2hlbiBsb2NhbGUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvY2FsZSkge1xuICAgICAgc2V0Q3VycmVudExvY2FsZShsb2NhbGUpXG4gICAgICBkYXlqcy5sb2NhbGUobG9jYWxlKVxuICAgIH1cbiAgfSwgW2xvY2FsZV0pXG5cbiAgLy8gQ29uZmlndXJlIHRpbWV6b25lIHdoZW4gdGltZXpvbmUgcHJvcCBjaGFuZ2VzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRpbWV6b25lKSB7XG4gICAgICBkYXlqcy50ei5zZXREZWZhdWx0KHRpbWV6b25lKVxuICAgIH1cbiAgfSwgW3RpbWV6b25lXSlcblxuICAvLyBEYXRlIG5hdmlnYXRpb25cbiAgY29uc3Qgc2VsZWN0RGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRlOiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgc2V0Q3VycmVudERhdGUoZGF0ZSlcbiAgICAgIG9uRGF0ZUNoYW5nZT8uKGRhdGUpXG4gICAgfSxcbiAgICBbb25EYXRlQ2hhbmdlXVxuICApXG5cbiAgY29uc3QgbmV4dFBlcmlvZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLmFkZCgxLCAnbW9udGgnKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICdkYXknKVxuICAgICAgICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gICAgICAgICAgcmV0dXJuIG5ld0RhdGVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuYWRkKDEsICd5ZWFyJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9LCBbdmlldywgb25EYXRlQ2hhbmdlXSlcblxuICBjb25zdCBwcmV2UGVyaW9kID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN3aXRjaCAodmlldykge1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ21vbnRoJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgc2V0Q3VycmVudERhdGUoKGN1cnJlbnREYXRlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDEsICd3ZWVrJylcbiAgICAgICAgICBvbkRhdGVDaGFuZ2U/LihuZXdEYXRlKVxuICAgICAgICAgIHJldHVybiBuZXdEYXRlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBzZXRDdXJyZW50RGF0ZSgoY3VycmVudERhdGUpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdEYXRlID0gY3VycmVudERhdGUuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHNldEN1cnJlbnREYXRlKChjdXJyZW50RGF0ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBjdXJyZW50RGF0ZS5zdWJ0cmFjdCgxLCAneWVhcicpXG4gICAgICAgICAgb25EYXRlQ2hhbmdlPy4obmV3RGF0ZSlcbiAgICAgICAgICByZXR1cm4gbmV3RGF0ZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfSwgW3ZpZXcsIG9uRGF0ZUNoYW5nZV0pXG5cbiAgY29uc3QgdG9kYXkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGRheWpzKClcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIG9uRGF0ZUNoYW5nZT8uKG5ld0RhdGUpXG4gIH0sIFtvbkRhdGVDaGFuZ2VdKVxuXG4gIC8vIEV2ZW50IG9wZXJhdGlvbnNcbiAgY29uc3QgYWRkRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+IFsuLi5wcmV2RXZlbnRzLCBldmVudF0pXG4gICAgICBvbkV2ZW50QWRkPy4oZXZlbnQpXG4gICAgfSxcbiAgICBbb25FdmVudEFkZF1cbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZUV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50SWQ6IHN0cmluZyB8IG51bWJlciwgdXBkYXRlZEV2ZW50OiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG4gICAgICBzZXRDdXJyZW50RXZlbnRzKChwcmV2RXZlbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBwcmV2RXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQuaWQgPT09IGV2ZW50SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0V2ZW50ID0geyAuLi5ldmVudCwgLi4udXBkYXRlZEV2ZW50IH1cbiAgICAgICAgICAgIG9uRXZlbnRVcGRhdGU/LihuZXdFdmVudClcbiAgICAgICAgICAgIHJldHVybiBuZXdFdmVudFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZXZlbnRcbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbb25FdmVudFVwZGF0ZV1cbiAgKVxuXG4gIGNvbnN0IHVwZGF0ZVJlY3VycmluZ0V2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQsXG4gICAgICB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+LFxuICAgICAgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkRXZlbnQgPSB7IC4uLmV2ZW50LCAuLi51cGRhdGVzIH1cbiAgICAgIG9uRXZlbnRVcGRhdGU/Lih1cGRhdGVkRXZlbnQpXG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSB1cGRhdGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHMsIG9uRXZlbnRVcGRhdGVdXG4gIClcblxuICBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCwgb3B0aW9uczogUmVjdXJyZW5jZUVkaXRPcHRpb25zKSA9PiB7XG4gICAgICBvbkV2ZW50RGVsZXRlPy4oZXZlbnQpXG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRFdmVudHMgPSBkZWxldGVSZWN1cnJpbmdFdmVudEltcGwoe1xuICAgICAgICB0YXJnZXRFdmVudDogZXZlbnQsXG4gICAgICAgIGN1cnJlbnRFdmVudHMsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgfSlcblxuICAgICAgc2V0Q3VycmVudEV2ZW50cyh1cGRhdGVkRXZlbnRzKVxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHMsIG9uRXZlbnREZWxldGVdXG4gIClcblxuICBjb25zdCBkZWxldGVFdmVudCA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudElkOiBzdHJpbmcgfCBudW1iZXIpID0+IHtcbiAgICAgIHNldEN1cnJlbnRFdmVudHMoKHByZXZFdmVudHMpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRUb0RlbGV0ZSA9IHByZXZFdmVudHMuZmluZCgoZXZlbnQpID0+IGV2ZW50LmlkID09PSBldmVudElkKVxuICAgICAgICBpZiAoZXZlbnRUb0RlbGV0ZSkge1xuICAgICAgICAgIG9uRXZlbnREZWxldGU/LihldmVudFRvRGVsZXRlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmlkICE9PSBldmVudElkKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvbkV2ZW50RGVsZXRlXVxuICApXG5cbiAgLy8gRXZlbnQgZm9ybVxuICBjb25zdCBvcGVuRXZlbnRGb3JtID0gdXNlQ2FsbGJhY2soXG4gICAgKGRhdGU/OiBkYXlqcy5EYXlqcykgPT4ge1xuICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKGRhdGUpXG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZEV2ZW50KHtcbiAgICAgICAgdGl0bGU6IHQoJ25ld0V2ZW50JyksXG4gICAgICAgIHN0YXJ0OiBkYXRlID8/IGN1cnJlbnREYXRlLFxuICAgICAgICBlbmQ6IGRhdGUgPz8gY3VycmVudERhdGUuYWRkKDEsICdob3VyJyksXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgICAgYWxsRGF5OiBmYWxzZSxcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudClcbiAgICAgIHNldElzRXZlbnRGb3JtT3Blbih0cnVlKVxuICAgIH0sXG4gICAgW2N1cnJlbnREYXRlLCB0XVxuICApXG5cbiAgY29uc3QgY2xvc2VFdmVudEZvcm0gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWREYXRlKG51bGwpXG4gICAgc2V0U2VsZWN0ZWRFdmVudChudWxsKVxuICAgIHNldElzRXZlbnRGb3JtT3BlbihmYWxzZSlcbiAgfSwgW10pXG5cbiAgLy8gVmlldyBtYW5hZ2VtZW50XG4gIGNvbnN0IGhhbmRsZVZpZXdDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3VmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB7XG4gICAgICBzZXRWaWV3KG5ld1ZpZXcpXG4gICAgICBvblZpZXdDaGFuZ2U/LihuZXdWaWV3KVxuICAgIH0sXG4gICAgW29uVmlld0NoYW5nZV1cbiAgKVxuXG4gIC8vIEZpbmQgcGFyZW50IHJlY3VycmluZyBldmVudFxuICBjb25zdCBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBDYWxlbmRhckV2ZW50IHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRVSUQgPSBldmVudC51aWRcblxuICAgICAgY29uc3QgcGFyZW50RXZlbnQgPSBjdXJyZW50RXZlbnRzLmZpbmQoKGUpID0+IHtcbiAgICAgICAgY29uc3QgcGFyZW50VUlEID0gZS51aWQgfHwgYCR7ZS5pZH1AaWxhbXkuY2FsZW5kYXJgXG4gICAgICAgIHJldHVybiBwYXJlbnRVSUQgPT09IHRhcmdldFVJRCAmJiBlLnJydWxlXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gcGFyZW50RXZlbnQgfHwgbnVsbFxuICAgIH0sXG4gICAgW2N1cnJlbnRFdmVudHNdXG4gIClcblxuICByZXR1cm4ge1xuICAgIC8vIFN0YXRlXG4gICAgY3VycmVudERhdGUsXG4gICAgdmlldyxcbiAgICBldmVudHM6IHByb2Nlc3NlZEV2ZW50cyxcbiAgICByYXdFdmVudHM6IGN1cnJlbnRFdmVudHMsXG4gICAgaXNFdmVudEZvcm1PcGVuLFxuICAgIHNlbGVjdGVkRXZlbnQsXG4gICAgc2VsZWN0ZWREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50czogREFZX01BWF9FVkVOVFNfREVGQVVMVCxcbiAgICBjdXJyZW50TG9jYWxlLFxuXG4gICAgLy8gQWN0aW9uc1xuICAgIHNldEN1cnJlbnREYXRlLFxuICAgIHNlbGVjdERhdGUsXG4gICAgc2V0VmlldzogaGFuZGxlVmlld0NoYW5nZSxcbiAgICBuZXh0UGVyaW9kLFxuICAgIHByZXZQZXJpb2QsXG4gICAgdG9kYXksXG5cbiAgICAvLyBFdmVudCBvcGVyYXRpb25zXG4gICAgYWRkRXZlbnQsXG4gICAgdXBkYXRlRXZlbnQsXG4gICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgZGVsZXRlRXZlbnQsXG4gICAgZGVsZXRlUmVjdXJyaW5nRXZlbnQsXG5cbiAgICAvLyBFdmVudCBmb3JtXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZXRTZWxlY3RlZEV2ZW50LFxuICAgIHNldElzRXZlbnRGb3JtT3BlbixcbiAgICBzZXRTZWxlY3RlZERhdGUsXG5cbiAgICAvLyBVdGlsaXRpZXNcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgIGdldEN1cnJlbnRWaWV3UmFuZ2UsXG5cbiAgICAvLyBUcmFuc2xhdGlvblxuICAgIHQsXG4gIH1cbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgUlJ1bGUgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IG9taXRLZXlzLCBzYWZlRGF0ZSB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBpc1JlY3VycmluZ0V2ZW50ID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBCb29sZWFuKGV2ZW50LnJydWxlIHx8IGV2ZW50LnJlY3VycmVuY2VJZCB8fCBldmVudC51aWQpXG59XG5cbmludGVyZmFjZSBHZW5lcmF0ZVJlY3VycmluZ0V2ZW50c1Byb3BzIHtcbiAgZXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHN0YXJ0RGF0ZTogZGF5anMuRGF5anNcbiAgZW5kRGF0ZTogZGF5anMuRGF5anNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzID0gKHtcbiAgZXZlbnQsXG4gIGN1cnJlbnRFdmVudHMsXG4gIHN0YXJ0RGF0ZSxcbiAgZW5kRGF0ZSxcbn06IEdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzUHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICAvLyBJZiBub3QgYSByZWN1cnJpbmcgZXZlbnQsIHJldHVybiBlbXB0eSBhcnJheVxuICBpZiAoIWV2ZW50LnJydWxlKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICB0cnkge1xuICAgIC8vIENyZWF0ZSBydWxlIGZyb20gUlJ1bGVPcHRpb25zIGVuc3VyaW5nIGR0c3RhcnQgaXMgYWx3YXlzIHByb3ZpZGVkXG4gICAgLy8gSWYgZHRzdGFydCBpcyBtaXNzaW5nIGZyb20gdGhlIFJSVUxFLCB1c2UgdGhlIGV2ZW50J3Mgc3RhcnQgdGltZSBhcyBmYWxsYmFja1xuICAgIGNvbnN0IHJ1bGVPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7XG4gICAgICAuLi5ldmVudC5ycnVsZSxcbiAgICAgIGR0c3RhcnQ6IGV2ZW50LnJydWxlLmR0c3RhcnQgfHwgZXZlbnQuc3RhcnQudG9EYXRlKCksXG4gICAgfVxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnVsZU9wdGlvbnMpXG5cbiAgICBjb25zdCBvdmVycmlkZXMgPSBjdXJyZW50RXZlbnRzLmZpbHRlcihcbiAgICAgIChlKSA9PiBlLnJlY3VycmVuY2VJZCAmJiBlLnVpZCA9PT0gZXZlbnQudWlkXG4gICAgKVxuXG4gICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIHRvIGV4cGFuZCBzZWFyY2ggd2luZG93IGZvciBldmVudHMgdGhhdCBzcGFuIHRoZSByYW5nZVxuICAgIGNvbnN0IGV2ZW50RHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcblxuICAgIC8vIEV4cGFuZCBzZWFyY2ggd2luZG93IGJhY2t3YXJkIGJ5IGV2ZW50IGR1cmF0aW9uIHRvIGNhdGNoIGV2ZW50cyB0aGF0IHN0YXJ0IGJlZm9yZVxuICAgIC8vIHRoZSByYW5nZSBidXQgc3BhbiBpbnRvIGl0XG4gICAgY29uc3QgZXhwYW5kZWRTdGFydERhdGVUaW1lID0gc3RhcnREYXRlXG4gICAgICAuc3VidHJhY3QoZXZlbnREdXJhdGlvbiwgJ21pbGxpc2Vjb25kJylcbiAgICAgIC50b0RhdGUoKVxuICAgIGNvbnN0IGVuZERhdGVUaW1lID0gZW5kRGF0ZS50b0RhdGUoKVxuXG4gICAgLy8gR2V0IGFsbCBvY2N1cnJlbmNlcyBpbiB0aGUgZXhwYW5kZWQgcmFuZ2VcbiAgICBjb25zdCBvY2N1cnJlbmNlcyA9IHJ1bGUuYmV0d2VlbihleHBhbmRlZFN0YXJ0RGF0ZVRpbWUsIGVuZERhdGVUaW1lLCB0cnVlKVxuXG4gICAgLy8gQ29udmVydCBvY2N1cnJlbmNlcyB0byBDYWxlbmRhckV2ZW50IGluc3RhbmNlc1xuICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gb2NjdXJyZW5jZXNcbiAgICAgIC5tYXAoKG9jY3VycmVuY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VEYXRlID0gZGF5anMob2NjdXJyZW5jZSlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdPdmVycmlkZSA9IG92ZXJyaWRlcy5maW5kKChlKSA9PlxuICAgICAgICAgIHNhZmVEYXRlKGUucmVjdXJyZW5jZUlkKS5pc1NhbWUob2NjdXJyZW5jZURhdGUpXG4gICAgICAgIClcblxuICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIG92ZXJyaWRlLCB1c2UgaXRcbiAgICAgICAgaWYgKGV4aXN0aW5nT3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5ldmVudCwgLi4uZXhpc3RpbmdPdmVycmlkZSB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGR1cmF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGV2ZW50XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBldmVudC5lbmQuZGlmZihldmVudC5zdGFydClcbiAgICAgICAgY29uc3QgbmV3RW5kVGltZSA9IG9jY3VycmVuY2VEYXRlLmFkZChvcmlnaW5hbER1cmF0aW9uLCAnbWlsbGlzZWNvbmQnKVxuICAgICAgICBjb25zdCByZWN1cnJpbmdFdmVudElkID0gYCR7ZXZlbnQuaWR9XyR7aW5kZXh9YFxuICAgICAgICBjb25zdCBwYXJlbnRVSUQgPSBldmVudC51aWQgfHwgYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gICAgICAgIGNvbnN0IHJlY3VycmluZ0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGlkOiByZWN1cnJpbmdFdmVudElkLFxuICAgICAgICAgIHN0YXJ0OiBvY2N1cnJlbmNlRGF0ZSxcbiAgICAgICAgICBlbmQ6IG5ld0VuZFRpbWUsXG4gICAgICAgICAgdWlkOiBwYXJlbnRVSUQsIC8vIFNhbWUgVUlEIGFzIHBhcmVudCBmb3IgcHJvcGVyIGdyb3VwaW5nXG4gICAgICAgICAgcnJ1bGU6IHVuZGVmaW5lZCwgLy8gSW5zdGFuY2UgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWN1cnJpbmdFdmVudFxuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHJlY3VycmluZ0V2ZW50KSA9PiB7XG4gICAgICAgIC8vIEZpbHRlciBvdXQgRVhEQVRFIGV4Y2x1c2lvbnNcbiAgICAgICAgY29uc3QgaGFzRXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwXG4gICAgICAgIGlmIChoYXNFeGRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRTdGFydElTTyA9IHJlY3VycmluZ0V2ZW50LnN0YXJ0LnRvSVNPU3RyaW5nKClcbiAgICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXZlbnQuZXhkYXRlcy5pbmNsdWRlcyhldmVudFN0YXJ0SVNPKVxuICAgICAgICAgIGlmIChpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaWx0ZXIgdG8gb25seSBpbmNsdWRlIGV2ZW50cyB0aGF0IHNwYW4gdGhyb3VnaCB0aGUgb3JpZ2luYWwgcmVxdWVzdGVkIGRhdGUgcmFuZ2VcbiAgICAgICAgLy8gQW4gZXZlbnQgc3BhbnMgdGhlIHJhbmdlIGlmOiBldmVudF9zdGFydCA8IHJhbmdlX2VuZCBBTkQgZXZlbnRfZW5kID4gcmFuZ2Vfc3RhcnRcbiAgICAgICAgLy8gVXNlIGlzU2FtZU9yQmVmb3JlL2lzU2FtZU9yQWZ0ZXIgdG8gaW5jbHVkZSBib3VuZGFyeSBjYXNlc1xuICAgICAgICBjb25zdCBldmVudFNwYW5zUmFuZ2UgPVxuICAgICAgICAgIHJlY3VycmluZ0V2ZW50LnN0YXJ0LmlzU2FtZU9yQmVmb3JlKGVuZERhdGUpICYmXG4gICAgICAgICAgcmVjdXJyaW5nRXZlbnQuZW5kLmlzU2FtZU9yQWZ0ZXIoc3RhcnREYXRlKVxuXG4gICAgICAgIHJldHVybiBldmVudFNwYW5zUmFuZ2VcbiAgICAgIH0pXG5cbiAgICByZXR1cm4gcmVjdXJyaW5nRXZlbnRzXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gSGFuZGxlIGludmFsaWQgUlJVTEUgb3B0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIFJSVUxFIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkoZXZlbnQucnJ1bGUpfS4gRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgIClcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXBkYXRlUmVjdXJyaW5nRXZlbnRQcm9wcyB7XG4gIHRhcmdldEV2ZW50OiBDYWxlbmRhckV2ZW50XG4gIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICB1cGRhdGVzLFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IFVwZGF0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gYmFzZSBldmVudCBhbmQgY3JlYXRlIHN0YW5kYWxvbmUgbW9kaWZpZWQgZXZlbnRcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBzdGFuZGFsb25lIG1vZGlmaWVkIGV2ZW50IHdpdGggcmVjdXJyZW5jZUlkXG4gICAgICBjb25zdCBtb2RpZmllZEV2ZW50SWQgPSBgJHt0YXJnZXRFdmVudC5pZH1fbW9kaWZpZWRfJHtEYXRlLm5vdygpfWBcbiAgICAgIGNvbnN0IG1vZGlmaWVkRXZlbnQ6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETzogZml4IHRoZSB0eXBlc1xuICAgICAgICAuLi5vbWl0S2V5cyh0YXJnZXRFdmVudCwgWyd3aWR0aCcsICdoZWlnaHQnLCAndG9wJywgJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIGlkOiBtb2RpZmllZEV2ZW50SWQsXG4gICAgICAgIHJlY3VycmVuY2VJZDogdGFyZ2V0RXZlbnRTdGFydElTTywgLy8gVGhpcyBtYXJrcyBpdCBhcyBhIG1vZGlmaWVkIGluc3RhbmNlXG4gICAgICAgIHVpZDogYmFzZUV2ZW50LnVpZCB8fCBgJHtiYXNlRXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYCwgLy8gS2VlcCBzYW1lIFVJRCBhcyBiYXNlIGV2ZW50IChpQ2FsZW5kYXIgc3RhbmRhcmQpXG4gICAgICAgIHJydWxlOiB1bmRlZmluZWQsIC8vIFN0YW5kYWxvbmUgZXZlbnRzIGRvbid0IGhhdmUgUlJVTEVcbiAgICAgIH0gYXMgQ2FsZW5kYXJFdmVudFxuICAgICAgdXBkYXRlZEV2ZW50cy5wdXNoKG1vZGlmaWVkRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2ZvbGxvd2luZyc6IHtcbiAgICAgIC8vIFwiVGhpcyBhbmQgZm9sbG93aW5nXCIgLSBUZXJtaW5hdGUgb3JpZ2luYWwgc2VyaWVzIGFuZCBjcmVhdGUgbmV3IHNlcmllc1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIC8vIFVwZGF0ZSBvcmlnaW5hbCBzZXJpZXMgd2l0aCBVTlRJTCB0byBlbmQgYmVmb3JlIHRhcmdldCBkYXRlXG4gICAgICBjb25zdCB0ZXJtaW5hdGVkRXZlbnQgPSB7XG4gICAgICAgIC4uLmJhc2VFdmVudCxcbiAgICAgICAgcnJ1bGU6IHtcbiAgICAgICAgICAuLi5iYXNlRXZlbnQucnJ1bGUsXG4gICAgICAgICAgdW50aWw6IHRlcm1pbmF0aW9uRGF0ZSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdGVybWluYXRlZEV2ZW50XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgc2VyaWVzIHN0YXJ0aW5nIGZyb20gdGFyZ2V0IGRhdGVcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHVyYXRpb24gPSBiYXNlRXZlbnQuZW5kLmRpZmYoYmFzZUV2ZW50LnN0YXJ0KVxuICAgICAgY29uc3QgbmV3U2VyaWVzU3RhcnRUaW1lID0gdXBkYXRlcy5zdGFydCB8fCB0YXJnZXRFdmVudC5zdGFydFxuICAgICAgY29uc3QgbmV3U2VyaWVzRW5kVGltZSA9XG4gICAgICAgIHVwZGF0ZXMuZW5kIHx8IG5ld1Nlcmllc1N0YXJ0VGltZS5hZGQob3JpZ2luYWxEdXJhdGlvbilcbiAgICAgIGNvbnN0IG5ld1Nlcmllc0lkID0gYCR7YmFzZUV2ZW50LmlkfV9mb2xsb3dpbmdgXG4gICAgICBjb25zdCBuZXdTZXJpZXNVSUQgPSBgJHtuZXdTZXJpZXNJZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAgIGNvbnN0IG5ld1Nlcmllc0V2ZW50OiBDYWxlbmRhckV2ZW50ID0ge1xuICAgICAgICAuLi5iYXNlRXZlbnQsXG4gICAgICAgIC4uLnVwZGF0ZXMsXG4gICAgICAgIHJydWxlOiB7XG4gICAgICAgICAgLi4uYmFzZUV2ZW50LnJydWxlLFxuICAgICAgICAgIC4uLnVwZGF0ZXMucnJ1bGUsXG4gICAgICAgICAgZHRzdGFydDogbmV3U2VyaWVzU3RhcnRUaW1lLnRvRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICBpZDogbmV3U2VyaWVzSWQsXG4gICAgICAgIHVpZDogbmV3U2VyaWVzVUlELCAvLyBOZXcgVUlEIGZvciBuZXcgc2VyaWVzXG4gICAgICAgIHN0YXJ0OiBuZXdTZXJpZXNTdGFydFRpbWUsXG4gICAgICAgIGVuZDogbmV3U2VyaWVzRW5kVGltZSxcbiAgICAgICAgcmVjdXJyZW5jZUlkOiB1bmRlZmluZWQsIC8vIFRoaXMgaXMgYSBuZXcgYmFzZSBldmVudCwgbm90IGFuIGluc3RhbmNlXG4gICAgICB9XG4gICAgICB1cGRhdGVkRXZlbnRzLnB1c2gobmV3U2VyaWVzRXZlbnQpXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2FsbCc6IHtcbiAgICAgIC8vIFwiQWxsIGV2ZW50c1wiIC0gVXBkYXRlIHRoZSBiYXNlIHJlY3VycmluZyBldmVudFxuICAgICAgY29uc3QgdXBkYXRlZEJhc2VFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICAuLi51cGRhdGVzLFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB1cGRhdGVkQmFzZUV2ZW50XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG5cbmludGVyZmFjZSBEZWxldGVSZWN1cnJpbmdFdmVudFByb3BzIHtcbiAgdGFyZ2V0RXZlbnQ6IENhbGVuZGFyRXZlbnRcbiAgY3VycmVudEV2ZW50czogQ2FsZW5kYXJFdmVudFtdXG4gIHNjb3BlOiAndGhpcycgfCAnZm9sbG93aW5nJyB8ICdhbGwnXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWN1cnJpbmdFdmVudCA9ICh7XG4gIHRhcmdldEV2ZW50LFxuICBjdXJyZW50RXZlbnRzLFxuICBzY29wZSxcbn06IERlbGV0ZVJlY3VycmluZ0V2ZW50UHJvcHMpOiBDYWxlbmRhckV2ZW50W10gPT4ge1xuICBjb25zdCB1cGRhdGVkRXZlbnRzID0gWy4uLmN1cnJlbnRFdmVudHNdXG5cbiAgLy8gRmluZCB0aGUgYmFzZSByZWN1cnJpbmcgZXZlbnRcbiAgY29uc3QgYmFzZUV2ZW50SW5kZXggPSB1cGRhdGVkRXZlbnRzLmZpbmRJbmRleCgoZSkgPT4ge1xuICAgIGNvbnN0IHBhcmVudFVpZCA9IGUudWlkIHx8IGAke2UuaWR9QGlsYW15LmNhbGVuZGFyYFxuICAgIHJldHVybiBwYXJlbnRVaWQgPT09IHRhcmdldEV2ZW50LnVpZCAmJiBlLnJydWxlICYmICFlLnJlY3VycmVuY2VJZFxuICB9KVxuXG4gIGlmIChiYXNlRXZlbnRJbmRleCA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhc2UgcmVjdXJyaW5nIGV2ZW50IG5vdCBmb3VuZCcpXG4gIH1cblxuICBjb25zdCBiYXNlRXZlbnQgPSB1cGRhdGVkRXZlbnRzW2Jhc2VFdmVudEluZGV4XVxuXG4gIHN3aXRjaCAoc2NvcGUpIHtcbiAgICBjYXNlICd0aGlzJzoge1xuICAgICAgLy8gXCJUaGlzIGV2ZW50IG9ubHlcIiAtIEFkZCBFWERBVEUgdG8gZXhjbHVkZSB0aGlzIG9jY3VycmVuY2VcbiAgICAgIGNvbnN0IHRhcmdldEV2ZW50U3RhcnRJU08gPSB0YXJnZXRFdmVudC5zdGFydC50b0lTT1N0cmluZygpXG4gICAgICBjb25zdCBleGlzdGluZ0V4ZGF0ZXMgPSBiYXNlRXZlbnQuZXhkYXRlcyB8fCBbXVxuICAgICAgY29uc3QgdXBkYXRlZEV4ZGF0ZXMgPSBbLi4uZXhpc3RpbmdFeGRhdGVzLCB0YXJnZXRFdmVudFN0YXJ0SVNPXVxuXG4gICAgICBjb25zdCB1cGRhdGVkQmFzZUV2ZW50ID0geyAuLi5iYXNlRXZlbnQsIGV4ZGF0ZXM6IHVwZGF0ZWRFeGRhdGVzIH1cbiAgICAgIHVwZGF0ZWRFdmVudHNbYmFzZUV2ZW50SW5kZXhdID0gdXBkYXRlZEJhc2VFdmVudFxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdmb2xsb3dpbmcnOiB7XG4gICAgICAvLyBcIlRoaXMgYW5kIGZvbGxvd2luZ1wiIC0gVGVybWluYXRlIHNlcmllcyB3aXRoIFVOVElMIGJlZm9yZSB0YXJnZXQgZGF0ZVxuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRlcm1pbmF0aW9uIGRhdGU6IGRheSBiZWZvcmUgdGFyZ2V0IHdpdGggZW5kIG9mIGRheSB0aW1lXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBiZWZvcmUgdGFyZ2V0IGlzIGluY2x1ZGVkIGluIHRoZSB0ZXJtaW5hdGVkIHNlcmllc1xuICAgICAgY29uc3QgZGF5QmVmb3JlVGFyZ2V0ID0gdGFyZ2V0RXZlbnQuc3RhcnQuc3VidHJhY3QoMSwgJ2RheScpXG4gICAgICBjb25zdCB0ZXJtaW5hdGlvbkRhdGUgPSBkYXlCZWZvcmVUYXJnZXQuZW5kT2YoJ2RheScpLnRvRGF0ZSgpXG5cbiAgICAgIGNvbnN0IHRlcm1pbmF0ZWRFdmVudCA9IHtcbiAgICAgICAgLi4uYmFzZUV2ZW50LFxuICAgICAgICBycnVsZToge1xuICAgICAgICAgIC4uLmJhc2VFdmVudC5ycnVsZSxcbiAgICAgICAgICB1bnRpbDogdGVybWluYXRpb25EYXRlLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgICAgdXBkYXRlZEV2ZW50c1tiYXNlRXZlbnRJbmRleF0gPSB0ZXJtaW5hdGVkRXZlbnRcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYWxsJzoge1xuICAgICAgLy8gXCJBbGwgZXZlbnRzXCIgLSBSZW1vdmUgdGhlIGVudGlyZSByZWN1cnJpbmcgc2VyaWVzXG4gICAgICBjb25zdCBldmVudHNXaXRob3V0VGFyZ2V0U2VyaWVzID0gdXBkYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgIChlKSA9PiBlLnVpZCAhPT0gdGFyZ2V0RXZlbnQudWlkXG4gICAgICApXG4gICAgICByZXR1cm4gZXZlbnRzV2l0aG91dFRhcmdldFNlcmllc1xuICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNjb3BlOiAke3Njb3BlfS4gTXVzdCBiZSAndGhpcycsICdmb2xsb3dpbmcnLCBvciAnYWxsJ2BcbiAgICAgIClcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkRXZlbnRzXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRUcmFuc2xhdGlvbnM6IFRyYW5zbGF0aW9ucyA9IHtcbiAgLy8gQ29tbW9uIGFjdGlvbnNcbiAgdG9kYXk6ICdUb2RheScsXG4gIGNyZWF0ZTogJ0NyZWF0ZScsXG4gIG5ldzogJ05ldycsXG4gIHVwZGF0ZTogJ1VwZGF0ZScsXG4gIGRlbGV0ZTogJ0RlbGV0ZScsXG4gIGNhbmNlbDogJ0NhbmNlbCcsXG4gIGV4cG9ydDogJ0V4cG9ydCcsXG5cbiAgLy8gRXZlbnQgcmVsYXRlZFxuICBldmVudDogJ0V2ZW50JyxcbiAgZXZlbnRzOiAnRXZlbnRzJyxcbiAgbmV3RXZlbnQ6ICdOZXcgRXZlbnQnLFxuICB0aXRsZTogJ1RpdGxlJyxcbiAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicsXG4gIGxvY2F0aW9uOiAnTG9jYXRpb24nLFxuICBhbGxEYXk6ICdBbGwgZGF5JyxcbiAgc3RhcnREYXRlOiAnU3RhcnQgRGF0ZScsXG4gIGVuZERhdGU6ICdFbmQgRGF0ZScsXG4gIHN0YXJ0VGltZTogJ1N0YXJ0IFRpbWUnLFxuICBlbmRUaW1lOiAnRW5kIFRpbWUnLFxuICBjb2xvcjogJ0NvbG9yJyxcblxuICAvLyBFdmVudCBmb3JtXG4gIGNyZWF0ZUV2ZW50OiAnQ3JlYXRlIEV2ZW50JyxcbiAgZWRpdEV2ZW50OiAnRWRpdCBFdmVudCcsXG4gIGFkZE5ld0V2ZW50OiAnQWRkIGEgbmV3IGV2ZW50IHRvIHlvdXIgY2FsZW5kYXInLFxuICBlZGl0RXZlbnREZXRhaWxzOiAnRWRpdCB5b3VyIGV2ZW50IGRldGFpbHMnLFxuICBldmVudFRpdGxlUGxhY2Vob2xkZXI6ICdFdmVudCB0aXRsZScsXG4gIGV2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcjogJ0V2ZW50IGRlc2NyaXB0aW9uIChvcHRpb25hbCknLFxuICBldmVudExvY2F0aW9uUGxhY2Vob2xkZXI6ICdFdmVudCBsb2NhdGlvbiAob3B0aW9uYWwpJyxcblxuICAvLyBSZWN1cnJlbmNlXG4gIHJlcGVhdDogJ1JlcGVhdCcsXG4gIHJlcGVhdHM6ICdSZXBlYXRzJyxcbiAgY3VzdG9tUmVjdXJyZW5jZTogJ0N1c3RvbSByZWN1cnJlbmNlJyxcbiAgZGFpbHk6ICdEYWlseScsXG4gIHdlZWtseTogJ1dlZWtseScsXG4gIG1vbnRobHk6ICdNb250aGx5JyxcbiAgeWVhcmx5OiAnWWVhcmx5JyxcbiAgaW50ZXJ2YWw6ICdJbnRlcnZhbCcsXG4gIHJlcGVhdE9uOiAnUmVwZWF0IG9uJyxcbiAgbmV2ZXI6ICdOZXZlcicsXG4gIGNvdW50OiAnQ291bnQnLFxuICBldmVyeTogJ0V2ZXJ5JyxcbiAgZW5kczogJ0VuZHMnLFxuICBhZnRlcjogJ0FmdGVyJyxcbiAgb2NjdXJyZW5jZXM6ICdvY2N1cnJlbmNlcycsXG4gIG9uOiAnT24nLFxuXG4gIC8vIFJlY3VycmVuY2UgZWRpdCBkaWFsb2dcbiAgZWRpdFJlY3VycmluZ0V2ZW50OiAnRWRpdCByZWN1cnJpbmcgZXZlbnQnLFxuICBkZWxldGVSZWN1cnJpbmdFdmVudDogJ0RlbGV0ZSByZWN1cnJpbmcgZXZlbnQnLFxuICBlZGl0UmVjdXJyaW5nRXZlbnRRdWVzdGlvbjpcbiAgICAnaXMgYSByZWN1cnJpbmcgZXZlbnQuIEhvdyB3b3VsZCB5b3UgbGlrZSB0byBlZGl0IGl0PycsXG4gIGRlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb246XG4gICAgJ2lzIGEgcmVjdXJyaW5nIGV2ZW50LiBIb3cgd291bGQgeW91IGxpa2UgdG8gZGVsZXRlIGl0PycsXG4gIHRoaXNFdmVudDogJ1RoaXMgZXZlbnQnLFxuICB0aGlzRXZlbnREZXNjcmlwdGlvbjogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIHRoaXNBbmRGb2xsb3dpbmdFdmVudHM6ICdUaGlzIGFuZCBmb2xsb3dpbmcgZXZlbnRzJyxcbiAgdGhpc0FuZEZvbGxvd2luZ0V2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGlzIGFuZCBhbGwgZnV0dXJlIG9jY3VycmVuY2VzJyxcbiAgYWxsRXZlbnRzOiAnQWxsIGV2ZW50cycsXG4gIGFsbEV2ZW50c0Rlc2NyaXB0aW9uOiAnRWRpdCB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5Q2hhbmdlVGhpczogJ09ubHkgY2hhbmdlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGNoYW5nZVRoaXNBbmRGdXR1cmU6ICdDaGFuZ2UgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGNoYW5nZUVudGlyZVNlcmllczogJ0NoYW5nZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuICBvbmx5RGVsZXRlVGhpczogJ09ubHkgZGVsZXRlIHRoaXMgc3BlY2lmaWMgb2NjdXJyZW5jZScsXG4gIGRlbGV0ZVRoaXNBbmRGdXR1cmU6ICdEZWxldGUgdGhpcyBhbmQgYWxsIGZ1dHVyZSBvY2N1cnJlbmNlcycsXG4gIGRlbGV0ZUVudGlyZVNlcmllczogJ0RlbGV0ZSB0aGUgZW50aXJlIHJlY3VycmluZyBzZXJpZXMnLFxuXG4gIC8vIFZpZXcgdHlwZXNcbiAgbW9udGg6ICdNb250aCcsXG4gIHdlZWs6ICdXZWVrJyxcbiAgZGF5OiAnRGF5JyxcbiAgeWVhcjogJ1llYXInLFxuICBtb3JlOiAnbW9yZScsXG5cbiAgLy8gUmVzb3VyY2UgY2FsZW5kYXJcbiAgcmVzb3VyY2VzOiAnUmVzb3VyY2VzJyxcbiAgcmVzb3VyY2U6ICdSZXNvdXJjZScsXG4gIHRpbWU6ICdUaW1lJyxcbiAgZGF0ZTogJ0RhdGUnLFxuICBub1Jlc291cmNlc1Zpc2libGU6ICdObyByZXNvdXJjZXMgdmlzaWJsZScsXG4gIGFkZFJlc291cmNlc09yU2hvd0V4aXN0aW5nOiAnQWRkIHJlc291cmNlcyBvciBzaG93IGV4aXN0aW5nIG9uZXMnLFxuXG4gIC8vIERheXMgb2Ygd2Vla1xuICBzdW5kYXk6ICdTdW5kYXknLFxuICBtb25kYXk6ICdNb25kYXknLFxuICB0dWVzZGF5OiAnVHVlc2RheScsXG4gIHdlZG5lc2RheTogJ1dlZG5lc2RheScsXG4gIHRodXJzZGF5OiAnVGh1cnNkYXknLFxuICBmcmlkYXk6ICdGcmlkYXknLFxuICBzYXR1cmRheTogJ1NhdHVyZGF5JyxcblxuICAvLyBEYXlzIHNob3J0XG4gIHN1bjogJ1N1bicsXG4gIG1vbjogJ01vbicsXG4gIHR1ZTogJ1R1ZScsXG4gIHdlZDogJ1dlZCcsXG4gIHRodTogJ1RodScsXG4gIGZyaTogJ0ZyaScsXG4gIHNhdDogJ1NhdCcsXG5cbiAgLy8gTW9udGhzXG4gIGphbnVhcnk6ICdKYW51YXJ5JyxcbiAgZmVicnVhcnk6ICdGZWJydWFyeScsXG4gIG1hcmNoOiAnTWFyY2gnLFxuICBhcHJpbDogJ0FwcmlsJyxcbiAgbWF5OiAnTWF5JyxcbiAganVuZTogJ0p1bmUnLFxuICBqdWx5OiAnSnVseScsXG4gIGF1Z3VzdDogJ0F1Z3VzdCcsXG4gIHNlcHRlbWJlcjogJ1NlcHRlbWJlcicsXG4gIG9jdG9iZXI6ICdPY3RvYmVyJyxcbiAgbm92ZW1iZXI6ICdOb3ZlbWJlcicsXG4gIGRlY2VtYmVyOiAnRGVjZW1iZXInLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IFdlZWtEYXlzIH0gZnJvbSAnQC9jb21wb25lbnRzJ1xuXG5leHBvcnQgY29uc3QgR0FQX0JFVFdFRU5fRUxFTUVOVFMgPSAxIC8vIHB4IChnYXAtMSlcbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX0hFSUdIVCA9IDI4IC8vIHB4IChoLTcpXG5leHBvcnQgY29uc3QgRVZFTlRfQkFSX0hFSUdIVCA9IDI0IC8vIHB4IChoLVsyNHB4XSlcbmV4cG9ydCBjb25zdCBEQVlfTUFYX0VWRU5UU19ERUZBVUxUID0gNCAvLyBEZWZhdWx0IG1heCBldmVudHMgcGVyIGRheVxuXG5leHBvcnQgY29uc3QgV0VFS19EQVlTX05VTUJFUl9NQVA6IFJlY29yZDxXZWVrRGF5cywgbnVtYmVyPiA9IHtcbiAgc3VuZGF5OiAwLFxuICBtb25kYXk6IDEsXG4gIHR1ZXNkYXk6IDIsXG4gIHdlZG5lc2RheTogMyxcbiAgdGh1cnNkYXk6IDQsXG4gIGZyaWRheTogNSxcbiAgc2F0dXJkYXk6IDYsXG59XG5cbmV4cG9ydCBjb25zdCBEQVlfTlVNQkVSX1RPX1dFRUtfREFZUzogUmVjb3JkPG51bWJlciwgV2Vla0RheXM+ID0ge1xuICAwOiAnc3VuZGF5JyxcbiAgMTogJ21vbmRheScsXG4gIDI6ICd0dWVzZGF5JyxcbiAgMzogJ3dlZG5lc2RheScsXG4gIDQ6ICd0aHVyc2RheScsXG4gIDU6ICdmcmlkYXknLFxuICA2OiAnc2F0dXJkYXknLFxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMnXG5pbXBvcnQge1xuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG59IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZERheUV2ZW50cyB7XG4gIGRheTogZGF5anMuRGF5anNcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbn1cblxuaW50ZXJmYWNlIEFsbEV2ZW50RGlhbG9nUHJvcHMge1xuICByZWY6IFJlYWN0LlJlZjx7XG4gICAgb3BlbjogKCkgPT4gdm9pZFxuICAgIGNsb3NlOiAoKSA9PiB2b2lkXG4gICAgc2V0U2VsZWN0ZWREYXlFdmVudHM6IChkYXlFdmVudHM6IFNlbGVjdGVkRGF5RXZlbnRzKSA9PiB2b2lkXG4gIH0+XG59XG5cbmV4cG9ydCBjb25zdCBBbGxFdmVudERpYWxvZzogUmVhY3QuRkM8QWxsRXZlbnREaWFsb2dQcm9wcz4gPSAoeyByZWYgfSkgPT4ge1xuICBjb25zdCBbZGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkRGF5RXZlbnRzLCBzZXRTZWxlY3RlZERheUV2ZW50c10gPVxuICAgIHVzZVN0YXRlPFNlbGVjdGVkRGF5RXZlbnRzIHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWsgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcbiAgICBjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuICB9KSlcblxuICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBvcGVuOiAoKSA9PiBzZXREaWFsb2dPcGVuKHRydWUpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKSxcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+XG4gICAgICBzZXRTZWxlY3RlZERheUV2ZW50cyhkYXlFdmVudHMpLFxuICB9KSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8RGlhbG9nIG9wZW49e2RpYWxvZ09wZW59IG9uT3BlbkNoYW5nZT17c2V0RGlhbG9nT3Blbn0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtaC1bODB2aF0gbWF4LXctbWQgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxEaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmIHNlbGVjdGVkRGF5RXZlbnRzLmRheS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTQgc3BhY2UteS0zXCI+XG4gICAgICAgICAge3NlbGVjdGVkRGF5RXZlbnRzICYmXG4gICAgICAgICAgICBzZWxlY3RlZERheUV2ZW50cy5ldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWV2ZW50cy1kaWFsb2ctZXZlbnQtJCR7ZXZlbnQuaWR9YH0gLy8gVXNlIGV2ZW50IElEIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuaWR9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBteS0xIGgtWzMwcHhdXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuXG5pbnRlcmZhY2UgTW9udGhIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgTW9udGhIZWFkZXI6IFJlYWN0LkZDPE1vbnRoSGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3Qge1xuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgc3RpY2t5Vmlld0hlYWRlcixcbiAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBSZW9yZGVyIHdlZWsgZGF5cyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCB3ZWVrRGF5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRheXMgPSBkYXlqcy53ZWVrZGF5c1Nob3J0KCkubWFwKChkYXkpID0+IGRheS50b0xvd2VyQ2FzZSgpKVxuXG4gICAgLy8gUm90YXRlIHRoZSBhcnJheSBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3REYXlPZldlZWs7IGkrKykge1xuICAgICAgY29uc3QgZGF5VG9Nb3ZlID0gZGF5cy5zaGlmdCgpXG4gICAgICBpZiAoZGF5VG9Nb3ZlKSB7XG4gICAgICAgIGRheXMucHVzaChkYXlUb01vdmUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZGF5cyB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbZmlyc3REYXlPZldlZWssIGN1cnJlbnRMb2NhbGVdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLTcgYm9yZGVyLWInLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwibW9udGgtaGVhZGVyXCJcbiAgICA+XG4gICAgICB7d2Vla0RheXMuZGF5cy5tYXAoKHdlZWtEYXksIGluZGV4KSA9PiAoXG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXt3ZWVrRGF5fSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3dlZWtEYXl9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwicHktMiB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBib3JkZXItciBmaXJzdDpib3JkZXItbFwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWtkYXktaGVhZGVyLSR7d2Vla0RheX1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtc20gY2FwaXRhbGl6ZVwiPnt3ZWVrRGF5fTwvc3Bhbj5cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHtcbiAgREFZX05VTUJFUl9IRUlHSFQsXG4gIEVWRU5UX0JBUl9IRUlHSFQsXG4gIEdBUF9CRVRXRUVOX0VMRU1FTlRTLFxufSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgcG9zaXRpb246IG51bWJlciAvLyBQb3NpdGlvbiBpbiB0aGUgcm93ICgwIGZvciBmaXJzdCwgMSBmb3Igc2Vjb25kLCBldGMuKVxuICBpc1RydW5jYXRlZFN0YXJ0OiBib29sZWFuIC8vIFdoZXRoZXIgdGhlIGV2ZW50IGlzIHRydW5jYXRlZCBhdCB0aGUgc3RhcnRcbiAgaXNUcnVuY2F0ZWRFbmQ6IGJvb2xlYW4gLy8gV2hldGhlciB0aGUgZXZlbnQgaXMgdHJ1bmNhdGVkIGF0IHRoZSBlbmRcbn1cblxuaW50ZXJmYWNlIEdldFBvc2l0aW9uZWRFdmVudHNQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W11cbiAgZGF5TWF4RXZlbnRzOiBudW1iZXJcbiAgZGF5TnVtYmVySGVpZ2h0PzogbnVtYmVyXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cicgLy8gRnV0dXJlIHVzZSBmb3IgZGlmZmVyZW50IGdyaWQgdHlwZXNcbn1cblxuZXhwb3J0IGNvbnN0IGdldFBvc2l0aW9uZWRFdmVudHMgPSAoe1xuICBkYXlzLFxuICBldmVudHMsXG4gIGRheU1heEV2ZW50cyxcbiAgZGF5TnVtYmVySGVpZ2h0ID0gREFZX05VTUJFUl9IRUlHSFQsXG4gIGdyaWRUeXBlID0gJ2RheScsXG59OiBHZXRQb3NpdGlvbmVkRXZlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgZmlyc3REYXkgPSBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpXG4gIGNvbnN0IGxhc3REYXkgPSBkYXlzLmF0KC0xKS5lbmRPZignZGF5JylcbiAgY29uc3QgZGF5Q291bnQgPSBkYXlzLmxlbmd0aFxuXG4gIC8vIFNlcGFyYXRlIG11bHRpLWRheSBhbmQgc2luZ2xlLWRheSBldmVudHNcbiAgY29uc3QgbXVsdGlEYXlFdmVudHMgPSBldmVudHMuZmlsdGVyKChlKSA9PiBlLmVuZC5kaWZmKGUuc3RhcnQsIGdyaWRUeXBlKSA+IDApXG4gIGNvbnN0IHNpbmdsZURheUV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgKGUpID0+IGUuZW5kLmRpZmYoZS5zdGFydCwgZ3JpZFR5cGUpID09PSAwXG4gIClcblxuICAvLyBTb3J0IG11bHRpLWRheSBldmVudHMgYnkgc3RhcnQgZGF0ZSwgdGhlbiBieSBkdXJhdGlvblxuICBjb25zdCBzb3J0ZWRNdWx0aURheSA9IFsuLi5tdWx0aURheUV2ZW50c10uc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGEuc3RhcnQuZGlmZihiLnN0YXJ0KVxuICAgIGlmIChzdGFydERpZmYgIT09IDApIHtcbiAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICB9XG4gICAgcmV0dXJuIGIuZW5kLmRpZmYoYi5zdGFydCkgLSBhLmVuZC5kaWZmKGEuc3RhcnQpIC8vIExvbmdlciBldmVudHMgZmlyc3RcbiAgfSlcblxuICAvLyBTb3J0IHNpbmdsZS1kYXkgZXZlbnRzIGJ5IHN0YXJ0IHRpbWVcbiAgY29uc3Qgc29ydGVkU2luZ2xlRGF5ID0gWy4uLnNpbmdsZURheUV2ZW50c10uc29ydCgoYSwgYikgPT5cbiAgICBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgKVxuXG4gIC8vIENyZWF0ZSBkYXlDb3VudCB4IGRheU1heEV2ZW50cyBncmlkIHdpdGggZmxhZ3NcbiAgY29uc3QgZ3JpZDogeyB0YWtlbjogYm9vbGVhbjsgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsIH1bXVtdID0gW11cbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgIGdyaWRbcm93XSA9IFtdXG4gICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgZGF5Q291bnQ7IGNvbCsrKSB7XG4gICAgICBncmlkW3Jvd11bY29sXSA9IHsgdGFrZW46IGZhbHNlLCBldmVudDogbnVsbCB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQb3NpdGlvbmVkRXZlbnRbXSA9IFtdXG5cbiAgLy8gU3RlcCAxOiBBc3NpZ24gcG9zaXRpb25zIHRvIG11bHRpLWRheSBldmVudHMgZmlyc3RcbiAgZm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRNdWx0aURheSkge1xuICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBkYXlqcy5tYXgoZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSksIGZpcnN0RGF5KVxuICAgIGNvbnN0IGFkanVzdGVkRW5kID1cbiAgICAgIGdyaWRUeXBlID09PSAnaG91cicgPyBldmVudC5lbmQuc3VidHJhY3QoMSwgJ21pbnV0ZScpIDogZXZlbnQuZW5kXG4gICAgY29uc3QgZXZlbnRFbmQgPSBkYXlqcy5taW4oYWRqdXN0ZWRFbmQuc3RhcnRPZihncmlkVHlwZSksIGxhc3REYXkpXG4gICAgY29uc3Qgc3RhcnRDb2wgPSBNYXRoLm1heCgwLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcbiAgICBjb25zdCBlbmRDb2wgPSBNYXRoLm1pbihkYXlDb3VudCAtIDEsIGV2ZW50RW5kLmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcblxuICAgIC8vIERldGVjdCBpZiBldmVudCBpcyB0cnVuY2F0ZWQgYXQgdGhlIGJvdW5kYXJpZXNcbiAgICBjb25zdCBpc1RydW5jYXRlZFN0YXJ0ID0gZXZlbnQuc3RhcnQuc3RhcnRPZihncmlkVHlwZSkuaXNCZWZvcmUoZmlyc3REYXkpXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBldmVudC5lbmQuc3RhcnRPZihncmlkVHlwZSkuaXNBZnRlcihsYXN0RGF5KVxuXG4gICAgLy8gVHJ5IHRvIHBsYWNlIHRoZSBldmVudCBzdGFydGluZyBmcm9tIGl0cyBvcmlnaW5hbCBzdGFydCBjb2x1bW5cbiAgICBsZXQgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gZmFsc2VcblxuICAgIC8vIEZpcnN0IHRyeTogcGxhY2UgZnJvbSBvcmlnaW5hbCBzdGFydCBwb3NpdGlvblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgbGV0IGNhblBsYWNlID0gdHJ1ZVxuICAgICAgZm9yIChsZXQgY29sID0gc3RhcnRDb2w7IGNvbCA8PSBlbmRDb2w7IGNvbCsrKSB7XG4gICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgIGNhblBsYWNlID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2FuUGxhY2UpIHtcbiAgICAgICAgYXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBmb3VuZCBhIHJvdywgYXNzaWduIHRoZSBldmVudCB0byBhbGwgaXRzIGNvbHVtbnNcbiAgICBpZiAoYXNzaWduZWRSb3cgIT09IC0xKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSBzdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgY29uc3Qgc3BhbkRheXMgPSBlbmRDb2wgLSBzdGFydENvbCArIDFcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgbGVmdDogKHN0YXJ0Q29sIC8gZGF5Q291bnQpICogMTAwLFxuICAgICAgICB3aWR0aDogKHNwYW5EYXlzIC8gZGF5Q291bnQpICogMTAwLFxuICAgICAgICB0b3A6XG4gICAgICAgICAgZGF5TnVtYmVySGVpZ2h0ICtcbiAgICAgICAgICBHQVBfQkVUV0VFTl9FTEVNRU5UUyArXG4gICAgICAgICAgYXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBwb3NpdGlvbjogYXNzaWduZWRSb3csXG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBpc1RydW5jYXRlZFN0YXJ0LFxuICAgICAgICBpc1RydW5jYXRlZEVuZCxcbiAgICAgIH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuICAgICAgcGxhY2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGNvdWxkbid0IHBsYWNlIGF0IG9yaWdpbmFsIHBvc2l0aW9uLCB0cnkgdHJ1bmNhdGVkIHZlcnNpb25zIHN0YXJ0aW5nIGZyb20gbGF0ZXIgZGF5c1xuICAgIGlmICghcGxhY2VkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICBmb3IgKFxuICAgICAgICBsZXQgdHJ5U3RhcnRDb2wgPSBzdGFydENvbCArIDE7XG4gICAgICAgIHRyeVN0YXJ0Q29sIDw9IGVuZENvbDtcbiAgICAgICAgdHJ5U3RhcnRDb2wrK1xuICAgICAgKSB7XG4gICAgICAgIC8vIFRyeSB0byBwbGFjZSB0aGUgdHJ1bmNhdGVkIGV2ZW50IHN0YXJ0aW5nIGZyb20gdGhpcyBjb2x1bW5cbiAgICAgICAgbGV0IHRydW5jYXRlZEFzc2lnbmVkUm93ID0gLTFcbiAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgICAgIGxldCBjYW5QbGFjZSA9IHRydWVcbiAgICAgICAgICBmb3IgKGxldCBjb2wgPSB0cnlTdGFydENvbDsgY29sIDw9IGVuZENvbDsgY29sKyspIHtcbiAgICAgICAgICAgIGlmIChncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICAgICAgICBjYW5QbGFjZSA9IGZhbHNlXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjYW5QbGFjZSkge1xuICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgPSByb3dcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgd2UgZm91bmQgYSByb3cgZm9yIHRoZSB0cnVuY2F0ZWQgdmVyc2lvbiwgcGxhY2UgaXRcbiAgICAgICAgaWYgKHRydW5jYXRlZEFzc2lnbmVkUm93ICE9PSAtMSkge1xuICAgICAgICAgIGZvciAobGV0IGNvbCA9IHRyeVN0YXJ0Q29sOyBjb2wgPD0gZW5kQ29sOyBjb2wrKykge1xuICAgICAgICAgICAgZ3JpZFt0cnVuY2F0ZWRBc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDcmVhdGUgcG9zaXRpb24gZGF0YSBmb3IgdGhlIHRydW5jYXRlZCByZW5kZXJpbmdcbiAgICAgICAgICBjb25zdCB0cnVuY2F0ZWRTcGFuRGF5cyA9IGVuZENvbCAtIHRyeVN0YXJ0Q29sICsgMVxuICAgICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgICAgIGxlZnQ6ICh0cnlTdGFydENvbCAvIGRheUNvdW50KSAqIDEwMCxcbiAgICAgICAgICAgIHdpZHRoOiAodHJ1bmNhdGVkU3BhbkRheXMgLyBkYXlDb3VudCkgKiAxMDAsXG4gICAgICAgICAgICB0b3A6XG4gICAgICAgICAgICAgIGRheU51bWJlckhlaWdodCArXG4gICAgICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICAgICAgdHJ1bmNhdGVkQXNzaWduZWRSb3cgKiAoRVZFTlRfQkFSX0hFSUdIVCArIEdBUF9CRVRXRUVOX0VMRU1FTlRTKSxcbiAgICAgICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB0cnVuY2F0ZWRBc3NpZ25lZFJvdyxcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgaXNUcnVuY2F0ZWRTdGFydDogdHJ1ZSwgLy8gQWx3YXlzIHRydW5jYXRlZCBhdCBzdGFydCB3aGVuIHVzaW5nIHRoaXMgZmFsbGJhY2sgbG9naWNcbiAgICAgICAgICAgIGlzVHJ1bmNhdGVkRW5kLFxuICAgICAgICAgIH0gYXMgUG9zaXRpb25lZEV2ZW50KVxuICAgICAgICAgIHBsYWNlZFN1Y2Nlc3NmdWxseSA9IHRydWVcbiAgICAgICAgICBicmVhayAvLyBTdWNjZXNzZnVsbHkgcGxhY2VkLCBzdG9wIHRyeWluZyBvdGhlciBzdGFydCBwb3NpdGlvbnNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0ZXAgMjogRmlsbCBnYXBzIHdpdGggc2luZ2xlLWRheSBldmVudHNcbiAgZm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRTaW5nbGVEYXkpIHtcbiAgICBjb25zdCBldmVudFN0YXJ0ID0gZGF5anMubWF4KGV2ZW50LnN0YXJ0LnN0YXJ0T2YoZ3JpZFR5cGUpLCBmaXJzdERheSlcbiAgICAvLyBDbGFtcCBjb2wgdG8gdmFsaWQgZ3JpZCBib3VuZHMgdG8gcHJldmVudCBhY2Nlc3NpbmcgdW5kZWZpbmVkIGdyaWQgcG9zaXRpb25zXG4gICAgY29uc3QgY29sID0gTWF0aC5tYXgoXG4gICAgICAwLFxuICAgICAgTWF0aC5taW4oZGF5Q291bnQgLSAxLCBldmVudFN0YXJ0LmRpZmYoZmlyc3REYXksIGdyaWRUeXBlKSlcbiAgICApXG5cbiAgICAvLyBTaW5nbGUtZGF5IGV2ZW50cyBhcmUgbm90IHRydW5jYXRlZCBieSBkZWZpbml0aW9uXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRTdGFydCA9IGZhbHNlXG4gICAgY29uc3QgaXNUcnVuY2F0ZWRFbmQgPSBmYWxzZVxuXG4gICAgLy8gRmluZCB0aGUgZmlyc3QgYXZhaWxhYmxlIHJvdyBpbiB0aGlzIGNvbHVtblxuICAgIGxldCBhc3NpZ25lZFJvdyA9IC0xXG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgZGF5TWF4RXZlbnRzOyByb3crKykge1xuICAgICAgaWYgKCFncmlkW3Jvd11bY29sXS50YWtlbikge1xuICAgICAgICBhc3NpZ25lZFJvdyA9IHJvd1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIHdlIGZvdW5kIGEgcm93LCBhc3NpZ24gdGhlIGV2ZW50XG4gICAgaWYgKGFzc2lnbmVkUm93ICE9PSAtMSkge1xuICAgICAgZ3JpZFthc3NpZ25lZFJvd11bY29sXSA9IHsgdGFrZW46IHRydWUsIGV2ZW50IH1cblxuICAgICAgLy8gQ3JlYXRlIHBvc2l0aW9uIGRhdGEgZm9yIHJlbmRlcmluZ1xuICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICBsZWZ0OiAoY29sIC8gZGF5Q291bnQpICogMTAwLFxuICAgICAgICB3aWR0aDogKDEgLyBkYXlDb3VudCkgKiAxMDAsXG4gICAgICAgIHRvcDpcbiAgICAgICAgICBkYXlOdW1iZXJIZWlnaHQgK1xuICAgICAgICAgIEdBUF9CRVRXRUVOX0VMRU1FTlRTICtcbiAgICAgICAgICBhc3NpZ25lZFJvdyAqIChFVkVOVF9CQVJfSEVJR0hUICsgR0FQX0JFVFdFRU5fRUxFTUVOVFMpLFxuICAgICAgICBoZWlnaHQ6IEVWRU5UX0JBUl9IRUlHSFQsXG4gICAgICAgIHBvc2l0aW9uOiBhc3NpZ25lZFJvdyxcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGlzVHJ1bmNhdGVkU3RhcnQsXG4gICAgICAgIGlzVHJ1bmNhdGVkRW5kLFxuICAgICAgfSBhcyBQb3NpdGlvbmVkRXZlbnQpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0UG9zaXRpb25lZEV2ZW50cyB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkV2Vla0V2ZW50c1Byb3BzIHtcbiAgZGF5czogZGF5anMuRGF5anNbXVxufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkV2Vla0V2ZW50cyA9ICh7XG4gIGRheXMsXG59OiBVc2VQcm9jZXNzZWRXZWVrRXZlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgeyBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIGRheU1heEV2ZW50cyB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpXG4gIGNvbnN0IHdlZWtFbmQgPSBkYXlzWzZdLmVuZE9mKCdkYXknKVxuXG4gIC8vIEdldCBhbGwgZXZlbnRzIHRoYXQgaW50ZXJzZWN0IHdpdGggdGhpcyB3ZWVrXG4gIGNvbnN0IGV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZSh3ZWVrU3RhcnQsIHdlZWtFbmQpXG5cbiAgcmV0dXJuIGdldFBvc2l0aW9uZWRFdmVudHMoe1xuICAgIGRheXMsXG4gICAgZXZlbnRzLFxuICAgIGRheU1heEV2ZW50cyxcbiAgfSlcbn1cbiIsCiAgICAiaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZFdlZWtFdmVudHMnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5cbmludGVyZmFjZSBXZWVrRXZlbnRzTGF5ZXJQcm9wcyB7XG4gIGRheXM6IGRheWpzLkRheWpzW11cbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtFdmVudHNMYXllcjogUmVhY3QuRkM8V2Vla0V2ZW50c0xheWVyUHJvcHM+ID0gKHsgZGF5cyB9KSA9PiB7XG4gIGNvbnN0IHdlZWtTdGFydCA9IGRheXNbMF1cbiAgY29uc3QgcHJvY2Vzc2VkV2Vla0V2ZW50cyA9IHVzZVByb2Nlc3NlZFdlZWtFdmVudHMoeyBkYXlzIH0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIHctZnVsbCBoLWZ1bGwgcG9pbnRlci1ldmVudHMtbm9uZSB6LTEwIG92ZXJmbG93LWNsaXBcIj5cbiAgICAgIHtwcm9jZXNzZWRXZWVrRXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRLZXkgPSBgJHtldmVudC5pZH0tJHtldmVudC5wb3NpdGlvbn0tJHt3ZWVrU3RhcnQudG9JU09TdHJpbmcoKX1gXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2Ake2V2ZW50S2V5fS13cmFwcGVyYH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHotMTAgcG9pbnRlci1ldmVudHMtYXV0byBvdmVyZmxvdy1jbGlwXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGBjYWxjKCR7ZXZlbnQubGVmdH0lICsgdmFyKC0tc3BhY2luZykgKiAwLjI1KWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDEpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke0VWRU5UX0JBUl9IRUlHSFR9cHhgLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1ldmVudC1sYXllci1ldmVudC0ke2V2ZW50LmlkfWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERyYWdnYWJsZUV2ZW50XG4gICAgICAgICAgICAgIGVsZW1lbnRJZD17ZXZlbnRLZXl9XG4gICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBzaGFkb3dcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IEFsbEV2ZW50RGlhbG9nIH0gZnJvbSAnQC9jb21wb25lbnRzL2FsbC1ldmVudHMtZGlhbG9nJ1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RlZERheUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmludGVyZmFjZSBEYXlDZWxsUHJvcHMge1xuICBpbmRleDogbnVtYmVyIC8vIEluZGV4IG9mIHRoZSBkYXkgaW4gdGhlIHdlZWsgKDAtNilcbiAgZGF5OiBkYXlqcy5EYXlqc1xuICBkYXlNYXhFdmVudHM/OiBudW1iZXJcbiAgY2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGNsYXNzTmFtZSBmb3IgY3VzdG9tIHN0eWxpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheUNlbGw6IFJlYWN0LkZDPERheUNlbGxQcm9wcz4gPSAoe1xuICBpbmRleCxcbiAgZGF5LFxuICBjbGFzc05hbWUgPSAnJyxcbn0pID0+IHtcbiAgY29uc3QgYWxsRXZlbnRzRGlhbG9nUmVmID0gUmVhY3QudXNlUmVmPHtcbiAgICBvcGVuOiAoKSA9PiB2b2lkXG4gICAgY2xvc2U6ICgpID0+IHZvaWRcbiAgICBzZXRTZWxlY3RlZERheUV2ZW50czogKGRheUV2ZW50czogU2VsZWN0ZWREYXlFdmVudHMpID0+IHZvaWRcbiAgfT4obnVsbClcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRMb2NhbGUsXG4gICAgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLFxuICAgIGN1cnJlbnREYXRlLFxuICAgIGZpcnN0RGF5T2ZXZWVrLFxuICAgIGRheU1heEV2ZW50cyA9IDAsXG4gICAgdCxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKFxuICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICBkYXkuZW5kT2YoJ2RheScpXG4gIClcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgLy8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG4gIGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuICAgICAgZGF5LFxuICAgICAgZXZlbnRzLFxuICAgIH0pXG4gICAgYWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuICB9XG5cbiAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gIGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IGN1cnJlbnREYXRlLm1vbnRoKClcbiAgY29uc3QgaXNMYXN0Q29sdW1uID0gaW5kZXggPT09IDYgLy8gU2F0dXJkYXkgaXMgdGhlIGxhc3QgY29sdW1uIGluIGEgd2Vla1xuXG4gIGNvbnN0IGhpZGRlbkV2ZW50c0NvdW50ID0gdG9kYXlFdmVudHMubGVuZ3RoIC0gZGF5TWF4RXZlbnRzXG4gIGNvbnN0IGhhc0hpZGRlbkV2ZW50cyA9IGhpZGRlbkV2ZW50c0NvdW50ID4gMFxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgIGlkPXtgZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgdHlwZT1cImRheS1jZWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9e2BkYXktY2VsbC0ke2RheS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICBkYXRlPXtkYXl9XG4gICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgJ2N1cnNvci1wb2ludGVyIG92ZXJmbG93LWNsaXAgcC0xIGhvdmVyOmJnLWFjY2VudCBtaW4taC1bNjBweF0nLFxuICAgICAgICAgICFpc0N1cnJlbnRNb250aCAmJiAnYmctc2Vjb25kYXJ5IHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgaXNMYXN0Q29sdW1uICYmICdib3JkZXItci0wJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgID5cbiAgICAgICAgey8qIEFic29sdXRlbHkgcG9zaXRpb25lZCBtdWx0aS1kYXkgYmFycyAoR29vZ2xlIENhbGVuZGFyIHN0eWxlKSAqL31cblxuICAgICAgICB7LyogU2luZ2xlLWRheSBldmVudHMgY29udGFpbmVyIHBvc2l0aW9uZWQgYmVsb3cgbXVsdGktZGF5IGV2ZW50cyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgey8qIERheSBudW1iZXIgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgJ2ZsZXggaC01IHctNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRleHQteHMgc206aC02IHNtOnctNicsXG4gICAgICAgICAgICAgIGlzVG9kYXkgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHsgZGF5OiAnbnVtZXJpYycgfSkuZm9ybWF0KFxuICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogUmVuZGVyIHBsYWNlaG9sZGVycyBmb3IgZXZlbnRzIHRoYXQgb2NjdXIgdG9kYXkgc28gdGhhdCB0aGUgY2VsbCBoZWlnaHQgaXMgYWNjb3JkaW5nIHRvIGRheU1heEV2ZW50cy4gKi99XG4gICAgICAgICAge3RvZGF5RXZlbnRzLnNsaWNlKDAsIGRheU1heEV2ZW50cykubWFwKChldmVudCwgcm93SW5kZXgpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAga2V5PXtgZW1wdHktJHtyb3dJbmRleH1gfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLVsyMHB4XSB3LWZ1bGxcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17ZXZlbnQ/LnRpdGxlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cblxuICAgICAgICAgIHsvKiBTaG93IG1vcmUgZXZlbnRzIGJ1dHRvbiB3aXRoIGFjY3VyYXRlIGNvdW50ICovfVxuICAgICAgICAgIHtoYXNIaWRkZW5FdmVudHMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGN1cnNvci1wb2ludGVyIHRleHQtWzEwcHhdIHdoaXRlc3BhY2Utbm93cmFwIHNtOnRleHQteHMgbXQtMVwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInIHx8IGUua2V5ID09PSAnICcpIHtcbiAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgc2hvd0FsbEV2ZW50cyhkYXksIHRvZGF5RXZlbnRzKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItdGFnLW92ZXItcm9sZVxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgK3toaWRkZW5FdmVudHNDb3VudH0ge3QoJ21vcmUnKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9Ecm9wcGFibGVDZWxsPlxuXG4gICAgICB7LyogRGlhbG9nIGZvciBzaG93aW5nIGFsbCBldmVudHMgKi99XG4gICAgICA8QWxsRXZlbnREaWFsb2cgcmVmPXthbGxFdmVudHNEaWFsb2dSZWZ9IC8+XG4gICAgPC8+XG4gIClcbn1cbiIsCiAgICAiLy8gb3hsaW50LWRpc2FibGUgbm8tbmVnYXRlZC1jb25kaXRpb25cbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IHVzZURyb3BwYWJsZSB9IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBEcm9wcGFibGVDZWxsUHJvcHMge1xuICBpZDogc3RyaW5nXG4gIHR5cGU6ICdkYXktY2VsbCcgfCAndGltZS1jZWxsJ1xuICBkYXRlOiBkYXlqcy5EYXlqc1xuICBob3VyPzogbnVtYmVyXG4gIG1pbnV0ZT86IG51bWJlclxuICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgJ2RhdGEtdGVzdGlkJz86IHN0cmluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcHBhYmxlQ2VsbCh7XG4gIGlkLFxuICB0eXBlLFxuICBkYXRlLFxuICBob3VyLFxuICBtaW51dGUsXG4gIHJlc291cmNlSWQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICAnZGF0YS10ZXN0aWQnOiBkYXRhVGVzdElkLFxufTogRHJvcHBhYmxlQ2VsbFByb3BzKSB7XG4gIGNvbnN0IHsgb25DZWxsQ2xpY2ssIGRpc2FibGVEcmFnQW5kRHJvcCwgZGlzYWJsZUNlbGxDbGljayB9ID1cbiAgICB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoc3RhdGUpID0+ICh7XG4gICAgICBvbkNlbGxDbGljazogc3RhdGUub25DZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A6IHN0YXRlLmRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2s6IHN0YXRlLmRpc2FibGVDZWxsQ2xpY2ssXG4gICAgfSkpXG5cbiAgY29uc3QgeyBpc092ZXIsIHNldE5vZGVSZWYgfSA9IHVzZURyb3BwYWJsZSh7XG4gICAgaWQsXG4gICAgZGF0YToge1xuICAgICAgdHlwZSxcbiAgICAgIGRhdGUsXG4gICAgICBob3VyLFxuICAgICAgbWludXRlLFxuICAgICAgcmVzb3VyY2VJZCxcbiAgICB9LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlQ2VsbENsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBpZiAoZGlzYWJsZUNlbGxDbGljaykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZS5ob3VyKGhvdXIgPz8gMCkubWludXRlKG1pbnV0ZSA/PyAwKVxuICAgIGxldCBlbmREYXRlID0gc3RhcnREYXRlLmNsb25lKClcbiAgICBpZiAoaG91ciAhPT0gdW5kZWZpbmVkICYmIG1pbnV0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmREYXRlID0gZW5kRGF0ZS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUgKyAxNSkgLy8gZGF5IHZpZXcgdGltZSBzbG90cyBhcmUgMTUgbWludXRlc1xuICAgIH0gZWxzZSBpZiAoaG91ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmREYXRlID0gZW5kRGF0ZS5ob3VyKGhvdXIgKyAxKS5taW51dGUoMCkgLy8gd2VlayB2aWV3IHRpbWUgc2xvdHMgYXJlIDEgaG91clxuICAgIH0gZWxzZSB7XG4gICAgICBlbmREYXRlID0gZW5kRGF0ZS5ob3VyKDIzKS5taW51dGUoNTkpIC8vIG1vbnRoIHZpZXcgZnVsbCBkYXlcbiAgICB9XG5cbiAgICBvbkNlbGxDbGljayhzdGFydERhdGUsIGVuZERhdGUpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBjbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzXG4gICAgPGRpdlxuICAgICAgcmVmPXtzZXROb2RlUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGlzT3ZlciAmJiAhZGlzYWJsZURyYWdBbmREcm9wICYmICdiZy1hY2NlbnQnLFxuICAgICAgICBkaXNhYmxlQ2VsbENsaWNrID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDZWxsQ2xpY2t9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgd2Vla09mWWVhciBmcm9tICdkYXlqcy9wbHVnaW4vd2Vla09mWWVhcidcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFdlZWtBbGxEYXlSb3cgfSBmcm9tICcuL3dlZWstYWxsLWRheS1yb3cnXG5pbXBvcnQgeyBXZWVrSGVhZGVyIH0gZnJvbSAnLi93ZWVrLWhlYWRlcidcbmltcG9ydCB7IFdlZWtUaW1lR3JpZCB9IGZyb20gJy4vd2Vlay10aW1lLWdyaWQnXG4vLyBBZGQgd2Vla09mWWVhciBwbHVnaW4gdG8gZGF5anNcbmRheWpzLmV4dGVuZCh3ZWVrT2ZZZWFyKVxuXG5jb25zdCBXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiIGRhdGEtdGVzdGlkPVwid2Vlay12aWV3XCI+XG4gICAgICB7LyogV2VlayBoZWFkZXIgcm93IC0gZml4ZWQgKi99XG4gICAgICA8V2Vla0hlYWRlciBjbGFzc05hbWU9XCJoLVs1cmVtXVwiIC8+XG5cbiAgICAgIHsvKiBTY3JvbGxhYmxlIHRpbWUgZ3JpZCAqL31cbiAgICAgIDxTY3JvbGxBcmVhXG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggb3ZlcmZsb3ctYXV0byBoLVtjYWxjKDEwMCUtNXJlbSldXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXNjcm9sbC1hcmVhXCJcbiAgICAgID5cbiAgICAgICAgey8qIEFsbC1kYXkgZXZlbnRzIHJvdyAtIGR5bmFtaWMgaGVpZ2h0IGJhc2VkIG9uIGNvbnRlbnQgKi99XG4gICAgICAgIDxXZWVrQWxsRGF5Um93IC8+XG4gICAgICAgIDxXZWVrVGltZUdyaWQgLz5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBXZWVrVmlld1xuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgeyBEcm9wcGFibGVDZWxsIH0gZnJvbSAnQC9jb21wb25lbnRzL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50LCBQcm9jZXNzZWRDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHsgRVZFTlRfQkFSX0hFSUdIVCwgR0FQX0JFVFdFRU5fRUxFTUVOVFMgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBXZWVrQWxsRGF5Um93OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBmaXJzdERheU9mV2VlaywgdCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHdlZWtEYXlzID0gZ2V0V2Vla0RheXMoY3VycmVudERhdGUsIGZpcnN0RGF5T2ZXZWVrKVxuICBjb25zdCBhZGp1c3RlZFN0YXJ0T2ZXZWVrID0gd2Vla0RheXNbMF1cbiAgY29uc3QgZW5kT2ZXZWVrID0gd2Vla0RheXNbNl1cblxuICAvLyBHZXQgZXZlbnRzIHRoYXQgbWlnaHQgb3ZlcmxhcCB3aXRoIHRoaXMgd2VlayAoZXhwYW5kIHNlYXJjaCByYW5nZSlcbiAgY29uc3QgZXhwYW5kZWRTdGFydERhdGUgPSBhZGp1c3RlZFN0YXJ0T2ZXZWVrLnN1YnRyYWN0KDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBiZWZvcmUgd2VlayBzdGFydFxuICBjb25zdCBleHBhbmRlZEVuZERhdGUgPSBlbmRPZldlZWsuYWRkKDYsICdkYXknKSAvLyBMb29rIDYgZGF5cyBhZnRlciB3ZWVrIGVuZFxuICBjb25zdCB3ZWVrRXZlbnRzID0gZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlKGV4cGFuZGVkU3RhcnREYXRlLCBleHBhbmRlZEVuZERhdGUpXG5cbiAgLy8gU2VwYXJhdGUgYWxsLWRheSBldmVudHMgZnJvbSByZWd1bGFyIGV2ZW50cyAoaW5jbHVkaW5nIG11bHRpLWRheSBldmVudHMpXG4gIGNvbnN0IGFsbERheUV2ZW50cyA9IHdlZWtFdmVudHMuZmlsdGVyKChldmVudCkgPT4gZXZlbnQuYWxsRGF5KVxuXG4gIC8vIFByb2Nlc3MgYW5kIGxheW91dCBhbGwtZGF5IGV2ZW50cyB0byBhdm9pZCBvdmVybGFwcGluZ1xuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyBieSBzdGFydCBkYXRlIGFuZCB0aGVuIGJ5IGR1cmF0aW9uIChsb25nZXIgZXZlbnRzIGZpcnN0KVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIC8vIEZpcnN0IGNvbXBhcmUgYnkgc3RhcnQgZGF0ZVxuICAgICAgY29uc3Qgc3RhcnREaWZmID0gYS5zdGFydC5kaWZmKGIuc3RhcnQpXG4gICAgICBpZiAoc3RhcnREaWZmICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzdGFydERpZmZcbiAgICAgIH1cblxuICAgICAgLy8gSWYgc3RhcnQgZGF0ZXMgYXJlIHRoZSBzYW1lLCBsb25nZXIgZXZlbnRzIGNvbWUgZmlyc3RcbiAgICAgIGNvbnN0IGFEdXJhdGlvbiA9IGEuZW5kLmRpZmYoYS5zdGFydClcbiAgICAgIGNvbnN0IGJEdXJhdGlvbiA9IGIuZW5kLmRpZmYoYi5zdGFydClcbiAgICAgIHJldHVybiBiRHVyYXRpb24gLSBhRHVyYXRpb25cbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3NcbiAgICBjb25zdCByb3dzOiB7IGVuZDogZGF5anMuRGF5anM7IGV2ZW50OiBDYWxlbmRhckV2ZW50IH1bXVtdID0gW11cbiAgICBjb25zdCBwcm9jZXNzZWRFdmVudHM6IFByb2Nlc3NlZENhbGVuZGFyRXZlbnRbXSA9IFtdXG5cbiAgICBzb3J0ZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgIC8vIENhbGN1bGF0ZSB3aGljaCBkYXlzIHRoaXMgZXZlbnQgc3BhbnNcbiAgICAgIGNvbnN0IGV2ZW50U3RhcnQgPSBldmVudC5zdGFydC5pc0JlZm9yZShhZGp1c3RlZFN0YXJ0T2ZXZWVrKVxuICAgICAgICA/IGFkanVzdGVkU3RhcnRPZldlZWtcbiAgICAgICAgOiBldmVudC5zdGFydFxuICAgICAgY29uc3QgZXZlbnRFbmQgPSBldmVudC5lbmQuaXNBZnRlcihlbmRPZldlZWspID8gZW5kT2ZXZWVrIDogZXZlbnQuZW5kXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBhcyBwZXJjZW50YWdlIG9mIHRoZSB3ZWVrIHdpZHRoXG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGV2ZW50U3RhcnQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JylcbiAgICAgIClcbiAgICAgIGNvbnN0IGVuZERheUluZGV4ID0gTWF0aC5taW4oNiwgZXZlbnRFbmQuZGlmZihhZGp1c3RlZFN0YXJ0T2ZXZWVrLCAnZGF5JykpXG5cbiAgICAgIGNvbnN0IGxlZnQgPSAoc3RhcnREYXlJbmRleCAvIDcpICogMTAwXG4gICAgICBjb25zdCB3aWR0aCA9ICgoZW5kRGF5SW5kZXggLSBzdGFydERheUluZGV4ICsgMSkgLyA3KSAqIDEwMFxuXG4gICAgICAvLyBGaW5kIGEgcm93IHdoZXJlIHRoaXMgZXZlbnQgY2FuIGZpdFxuICAgICAgbGV0IHJvd0luZGV4ID0gMFxuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGV2ZW50IGNhbiBmaXQgaW4gdGhlIGN1cnJlbnQgcm93XG4gICAgICAgICAgY29uc3Qgcm93ID0gcm93c1tyb3dJbmRleF1cbiAgICAgICAgICBjb25zdCBjYW5GaXQgPSByb3cuZXZlcnkoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIGV2ZW50U3RhcnQuaXNBZnRlcihpdGVtLmVuZCkgfHxcbiAgICAgICAgICAgICAgZXZlbnRFbmQuaXNCZWZvcmUoaXRlbS5ldmVudC5zdGFydClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKGNhbkZpdCkge1xuICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dJbmRleCsrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBldmVudCB0byB0aGUgcm93XG4gICAgICByb3dzW3Jvd0luZGV4XS5wdXNoKHsgZW5kOiBldmVudEVuZCwgZXZlbnQgfSlcblxuICAgICAgLy8gQWRkIHByb2Nlc3NlZCBldmVudCB3aXRoIGNvcnJlY3QgcG9zaXRpb25pbmdcbiAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogKEVWRU5UX0JBUl9IRUlHSFQgKyBHQVBfQkVUV0VFTl9FTEVNRU5UUyksXG4gICAgICAgIGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgYWxsRGF5OiB0cnVlLFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NlZEFsbERheUV2ZW50czogcHJvY2Vzc2VkRXZlbnRzLFxuICAgICAgYWxsRGF5Um93c0NvdW50OiBNYXRoLm1heCgxLCByb3dzLmxlbmd0aCksIC8vIEF0IGxlYXN0IDEgcm93LCBldmVuIGlmIGVtcHR5XG4gICAgfVxuICB9LCBbYWxsRGF5RXZlbnRzLCBhZGp1c3RlZFN0YXJ0T2ZXZWVrLCBlbmRPZldlZWtdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtW2F1dG9fMWZyXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXSBncmlkLXJvd3MtMSByZWxhdGl2ZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIndlZWstYWxsLWRheS1yb3dcIlxuICAgID5cbiAgICAgIHsvKiBMZWZ0IGxhYmVsIGZvciBhbGwtZGF5IGV2ZW50cyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy0xNiBmbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWVuZCBib3JkZXIteCBib3JkZXItYiBweC0xIG1pbi1oLTE2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCB0ZXh0LVsxMHB4XSB3aGl0ZXNwYWNlLW5vd3JhcCBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAge3QoJ2FsbERheScpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIERyb3BwYWJsZSBjZWxscyBmb3IgZWFjaCBkYXkgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgaWQ9e2BhbGwtZGF5LWNlbGwtJHtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1mdWxsIGZsZXgtMSBjdXJzb3ItcG9pbnRlciBib3JkZXItciBib3JkZXItYlwiXG4gICAgICAgIC8+XG4gICAgICApKX1cblxuICAgICAgey8qIEFsbC1kYXkgZXZlbnQgYmxvY2tzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcC0xIGNvbC1zcGFuLTcgY29sLXN0YXJ0LTJcIj5cbiAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YGFsbC1kYXktY29udGFpbmVyLSR7ZXZlbnQuaWR9YH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGxlZnQ6IGAke2V2ZW50LmxlZnR9JWAsXG4gICAgICAgICAgICAgIHdpZHRoOiBgY2FsYygke2V2ZW50LndpZHRofSUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCxcbiAgICAgICAgICAgICAgdG9wOiBgJHtldmVudC50b3B9cHhgLFxuICAgICAgICAgICAgICBoZWlnaHQ6IGAke2V2ZW50LmhlaWdodH1weGAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICBrZXk9e2BhbGwtZGF5LSR7ZXZlbnQuaWR9LSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1mdWxsIHctZnVsbCBvdmVyZmxvdy1jbGlwIHRleHQteHMgYWJzb2x1dGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBnZXRXZWVrRGF5cyB9IGZyb20gJ0AvbGliL3V0aWxzL2RhdGUtdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcblxuaW50ZXJmYWNlIFdlZWtIZWFkZXJQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgV2Vla0hlYWRlcjogUmVhY3QuRkM8V2Vla0hlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50RGF0ZSxcbiAgICBjdXJyZW50TG9jYWxlLFxuICAgIHNlbGVjdERhdGUsXG4gICAgb3BlbkV2ZW50Rm9ybSxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgdCxcbiAgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgY29uc3Qgd2Vla0RheXMgPSBnZXRXZWVrRGF5cyhjdXJyZW50RGF0ZSwgZmlyc3REYXlPZldlZWspXG5cbiAgcmV0dXJuIChcbiAgICAvLyBjc3MgZ3JpZCBoZWFkZXIgd2l0aCBsZWYgY29ybmVyIGNlbGwgc2hvcnRlciB0aGFuIHRoZSByZXN0XG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2dyaWQgZ3JpZC1jb2xzLVthdXRvXzFmcl8xZnJfMWZyXzFmcl8xZnJfMWZyXzFmcl0gZ3JpZC1yb3dzLTEnLFxuICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMCcsXG4gICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWUsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay1oZWFkZXJcIlxuICAgID5cbiAgICAgIHsvKiBDb3JuZXIgY2VsbCB3aXRoIHdlZWsgbnVtYmVyICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc3Bhbi0xIHctMTYgc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci14IGJvcmRlci1iIHAtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHRleHQteHNcIj57dCgnd2VlaycpfTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPntjdXJyZW50RGF0ZS53ZWVrKCl9PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGF5IGhlYWRlciBjZWxscyAqL31cbiAgICAgIHt3ZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGZsZXgtMSBjdXJzb3ItcG9pbnRlciBwLTEgdGV4dC1jZW50ZXIgc206cC0yIGJvcmRlci1yIGJvcmRlci1iJyxcbiAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1wcmltYXJ5LzEwIGZvbnQtYm9sZCdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdERhdGUoZGF5KVxuICAgICAgICAgICAgICAgIG9wZW5FdmVudEZvcm0oZGF5KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZGF5LWhlYWRlci0ke2RheS5mb3JtYXQoJ2RkZGQnKS50b0xvd2VyQ2FzZSgpfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2RheS5mb3JtYXQoJ2RkZCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdteC1hdXRvIG10LTEgZmxleCBoLTUgdy01IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdGV4dC14cyBzbTpoLTcgc206dy03IHNtOnRleHQtc20nLFxuICAgICAgICAgICAgICAgICAgaXNUb2RheSAmJiAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge0ludGwuRGF0ZVRpbWVGb3JtYXQoY3VycmVudExvY2FsZSwgeyBkYXk6ICdudW1lcmljJyB9KS5mb3JtYXQoXG4gICAgICAgICAgICAgICAgICBkYXkudG9EYXRlKClcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmludGVyZmFjZSBQb3NpdGlvbmVkRXZlbnQgZXh0ZW5kcyBDYWxlbmRhckV2ZW50IHtcbiAgbGVmdDogbnVtYmVyIC8vIExlZnQgcG9zaXRpb24gaW4gcGVyY2VudGFnZVxuICB3aWR0aDogbnVtYmVyIC8vIFdpZHRoIGluIHBlcmNlbnRhZ2VcbiAgdG9wOiBudW1iZXIgLy8gVG9wIHBvc2l0aW9uIGluIHBlcmNlbnRhZ2VcbiAgaGVpZ2h0OiBudW1iZXIgLy8gSGVpZ2h0IGluIHBlcmNlbnRhZ2VcbiAgekluZGV4PzogbnVtYmVyIC8vIFotaW5kZXggZm9yIGxheWVyaW5nIG92ZXJsYXBwaW5nIGV2ZW50c1xufVxuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkRGF5RXZlbnRzUHJvcHMge1xuICBkYXk6IGRheWpzLkRheWpzIC8vIFRoZSBzcGVjaWZpYyBkYXkgdGhpcyBjb2x1bW4gcmVwcmVzZW50c1xufVxuXG5leHBvcnQgY29uc3QgdXNlUHJvY2Vzc2VkRGF5RXZlbnRzID0gKHsgZGF5IH06IFVzZVByb2Nlc3NlZERheUV2ZW50c1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlTWVtbzxQb3NpdGlvbmVkRXZlbnRbXT4oKCkgPT4ge1xuICAgIGxldCBldmVudHNGb3JEYXkgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgICBkYXkuc3RhcnRPZignZGF5JyksXG4gICAgICBkYXkuZW5kT2YoJ2RheScpXG4gICAgKVxuXG4gICAgLy8gRmlsdGVyIG91dCBhbGwtZGF5IGV2ZW50cyBhbmQgc29ydCBieSBzdGFydCB0aW1lXG4gICAgZXZlbnRzRm9yRGF5ID0gZXZlbnRzRm9yRGF5XG4gICAgICAuZmlsdGVyKChlKSA9PiAhZS5hbGxEYXkpXG4gICAgICAudG9Tb3J0ZWQoKGEsIGIpID0+IGEuc3RhcnQuZGlmZihiLnN0YXJ0KSlcblxuICAgIGlmIChldmVudHNGb3JEYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG5cbiAgICAvLyBTdGVwIDE6IEdyb3VwIGV2ZW50cyBpbnRvIGNsdXN0ZXJzIG9mIG92ZXJsYXBwaW5nIGV2ZW50c1xuICAgIGNvbnN0IGNsdXN0ZXJzOiBDYWxlbmRhckV2ZW50W11bXSA9IFtdXG4gICAgbGV0IGN1cnJlbnRDbHVzdGVyOiBDYWxlbmRhckV2ZW50W10gPSBbXVxuICAgIGxldCBsYXN0RXZlbnRFbmQ6IGRheWpzLkRheWpzIHwgbnVsbCA9IG51bGxcbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGV2ZW50c0ZvckRheSkge1xuICAgICAgaWYgKGxhc3RFdmVudEVuZCAmJiBldmVudC5zdGFydC5pc1NhbWVPckFmdGVyKGxhc3RFdmVudEVuZCkpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRDbHVzdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRDbHVzdGVyID0gW11cbiAgICAgIH1cbiAgICAgIGN1cnJlbnRDbHVzdGVyLnB1c2goZXZlbnQpXG4gICAgICBsYXN0RXZlbnRFbmQgPSBsYXN0RXZlbnRFbmRcbiAgICAgICAgPyBkYXlqcy5tYXgobGFzdEV2ZW50RW5kLCBldmVudC5lbmQpXG4gICAgICAgIDogZXZlbnQuZW5kXG4gICAgfVxuICAgIGlmIChjdXJyZW50Q2x1c3Rlci5sZW5ndGggPiAwKSB7XG4gICAgICBjbHVzdGVycy5wdXNoKGN1cnJlbnRDbHVzdGVyKVxuICAgIH1cblxuICAgIC8vIFN0ZXAgMjogRm9yIGVhY2ggY2x1c3RlciwgdXNlIGEgbW9yZSBpbnRlbGxpZ2VudCBjb2x1bW4gYXNzaWdubWVudFxuICAgIGNvbnN0IHByb2Nlc3NlZEV2ZW50czogUG9zaXRpb25lZEV2ZW50W10gPSBbXVxuICAgIGZvciAoY29uc3QgY2x1c3RlciBvZiBjbHVzdGVycykge1xuICAgICAgaWYgKGNsdXN0ZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIFNpbmdsZSBldmVudCB0YWtlcyBmdWxsIHdpZHRoXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gY2x1c3RlclswXVxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBldmVudC5zdGFydC5ob3VyKCkgKyBldmVudC5zdGFydC5taW51dGUoKSAvIDYwXG4gICAgICAgIGxldCBlbmRUaW1lID0gZXZlbnQuZW5kLmhvdXIoKSArIGV2ZW50LmVuZC5taW51dGUoKSAvIDYwXG4gICAgICAgIGlmIChlbmRUaW1lIDwgc3RhcnRUaW1lKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGVuZHMgb24gdGhlIG5leHQgZGF5LCBzZXQgZW5kIHRpbWUgdG8gMjQgaG91cnNcbiAgICAgICAgICBlbmRUaW1lID0gMjRcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b3RhbER1cmF0aW9uID0gZW5kVGltZSAtIHN0YXJ0VGltZVxuICAgICAgICBjb25zdCB0b3AgPSAoc3RhcnRUaW1lIC8gMjQpICogMTAwXG4gICAgICAgIGNvbnN0IGhlaWdodCA9ICh0b3RhbER1cmF0aW9uIC8gMjQpICogMTAwXG4gICAgICAgIHByb2Nlc3NlZEV2ZW50cy5wdXNoKHsgLi4uZXZlbnQsIGxlZnQ6IDAsIHdpZHRoOiAxMDAsIHRvcCwgaGVpZ2h0IH0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIE11bHRpcGxlIGV2ZW50cyAtIHVzZSBsYXllcmVkIHBvc2l0aW9uaW5nIGFwcHJvYWNoXG4gICAgICAvLyBTb3J0IGJ5IGR1cmF0aW9uIChsb25nZXN0IGZpcnN0KSwgdGhlbiBieSBzdGFydCB0aW1lXG4gICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSBbLi4uY2x1c3Rlcl0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhRHVyYXRpb24gPSBhLmVuZC5kaWZmKGEuc3RhcnQsICdtaW51dGUnKVxuICAgICAgICBjb25zdCBiRHVyYXRpb24gPSBiLmVuZC5kaWZmKGIuc3RhcnQsICdtaW51dGUnKVxuXG4gICAgICAgIC8vIExvbmdlciBldmVudHMgZmlyc3RcbiAgICAgICAgaWYgKGFEdXJhdGlvbiAhPT0gYkR1cmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJEdXJhdGlvbiAtIGFEdXJhdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgc2FtZSBkdXJhdGlvbiwgZWFybGllciBzdGFydCB0aW1lIGZpcnN0XG4gICAgICAgIHJldHVybiBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICAgIH0pXG5cbiAgICAgIC8vIFByb2Nlc3MgZXZlbnRzIHdpdGggbGF5ZXJlZCBwb3NpdGlvbmluZ1xuICAgICAgY29uc3QgdG90YWxFdmVudHMgPSBzb3J0ZWRFdmVudHMubGVuZ3RoXG5cbiAgICAgIC8vIENhbGN1bGF0ZSBkeW5hbWljIG9mZnNldCBiYXNlZCBvbiBudW1iZXIgb2Ygb3ZlcmxhcHBpbmcgZXZlbnRzXG4gICAgICAvLyBGZXdlciBldmVudHMgPSBsYXJnZXIgaW5kaXZpZHVhbCBvZmZzZXRzLCBtb3JlIGV2ZW50cyA9IHNtYWxsZXIgb2Zmc2V0c1xuICAgICAgbGV0IG1heE9mZnNldDogbnVtYmVyXG4gICAgICBpZiAodG90YWxFdmVudHMgPT09IDIpIHtcbiAgICAgICAgbWF4T2Zmc2V0ID0gMjUgLy8gMjUlIG9mZnNldCBmb3IgMiBldmVudHNcbiAgICAgIH0gZWxzZSBpZiAodG90YWxFdmVudHMgPT09IDMpIHtcbiAgICAgICAgbWF4T2Zmc2V0ID0gNTAgLy8gNTAlIHRvdGFsIGZvciAzIGV2ZW50cyAoMjUlIGVhY2gpXG4gICAgICB9IGVsc2UgaWYgKHRvdGFsRXZlbnRzID09PSA0KSB7XG4gICAgICAgIG1heE9mZnNldCA9IDYwIC8vIDYwJSB0b3RhbCBmb3IgNCBldmVudHMgKDIwJSBlYWNoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF4T2Zmc2V0ID0gNzAgLy8gNzAlIHRvdGFsIGZvciA1KyBldmVudHNcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0UGVyRXZlbnQgPSB0b3RhbEV2ZW50cyA+IDEgPyBtYXhPZmZzZXQgLyAodG90YWxFdmVudHMgLSAxKSA6IDBcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRFdmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBzb3J0ZWRFdmVudHNbaV1cbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZXZlbnQuc3RhcnQuaG91cigpICsgZXZlbnQuc3RhcnQubWludXRlKCkgLyA2MFxuICAgICAgICBsZXQgZW5kVGltZSA9IGV2ZW50LmVuZC5ob3VyKCkgKyBldmVudC5lbmQubWludXRlKCkgLyA2MFxuXG4gICAgICAgIGlmIChlbmRUaW1lIDwgc3RhcnRUaW1lKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGVuZHMgb24gdGhlIG5leHQgZGF5LCBzZXQgZW5kIHRpbWUgdG8gMjQgaG91cnNcbiAgICAgICAgICBlbmRUaW1lID0gMjRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRvdGFsRHVyYXRpb24gPSBlbmRUaW1lIC0gc3RhcnRUaW1lXG4gICAgICAgIGNvbnN0IHRvcCA9IChzdGFydFRpbWUgLyAyNCkgKiAxMDBcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gKHRvdGFsRHVyYXRpb24gLyAyNCkgKiAxMDBcblxuICAgICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb25pbmcgYmFzZWQgb24gbGF5ZXIgYW5kIHRvdGFsIGV2ZW50c1xuICAgICAgICBsZXQgbGVmdDogbnVtYmVyXG4gICAgICAgIGxldCB3aWR0aDogbnVtYmVyXG4gICAgICAgIGxldCB6SW5kZXg6IG51bWJlclxuXG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgLy8gRmlyc3QgZXZlbnQgKGxvbmdlc3QpIHRha2VzIGZ1bGwgd2lkdGggYXQgYm90dG9tXG4gICAgICAgICAgbGVmdCA9IDBcbiAgICAgICAgICB3aWR0aCA9IDEwMFxuICAgICAgICAgIHpJbmRleCA9IDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTdWJzZXF1ZW50IGV2ZW50cyBhcmUgb2Zmc2V0IGR5bmFtaWNhbGx5IGJhc2VkIG9uIHRvdGFsIGV2ZW50IGNvdW50XG4gICAgICAgICAgbGVmdCA9IG9mZnNldFBlckV2ZW50ICogaVxuICAgICAgICAgIHdpZHRoID0gMTAwIC0gbGVmdCAvLyBSZW1haW5pbmcgd2lkdGhcbiAgICAgICAgICB6SW5kZXggPSBpICsgMSAvLyBIaWdoZXIgei1pbmRleCBmb3IgZXZlbnRzIG9uIHRvcFxuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzc2VkRXZlbnRzLnB1c2goe1xuICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgdG9wLFxuICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICB6SW5kZXgsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Nlc3NlZEV2ZW50c1xuICB9LCBbZGF5LCBnZXRFdmVudHNGb3JEYXRlUmFuZ2VdKVxuXG4gIHJldHVybiB0b2RheUV2ZW50c1xufVxuIiwKICAgICJpbXBvcnQgeyB1c2VQcm9jZXNzZWREYXlFdmVudHMgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2hvb2tzL3VzZVByb2Nlc3NlZERheUV2ZW50cydcbmltcG9ydCB7IERyYWdnYWJsZUV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWdnYWJsZS1ldmVudC9kcmFnZ2FibGUtZXZlbnQnXG5pbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5cbmludGVyZmFjZSBEYXlFdmVudHNMYXllclByb3BzIHtcbiAgZGF5OiBkYXlqcy5EYXlqcyAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgbGF5ZXIgcmVwcmVzZW50c1xuICAnZGF0YS10ZXN0aWQnPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEYXlFdmVudHNMYXllcjogUmVhY3QuRkM8RGF5RXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuICBkYXksXG4gICdkYXRhLXRlc3RpZCc6IGRhdGFUZXN0SWQsXG59KSA9PiB7XG4gIGNvbnN0IHRvZGF5RXZlbnRzID0gdXNlUHJvY2Vzc2VkRGF5RXZlbnRzKHsgZGF5IH0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD17ZGF0YVRlc3RJZH1cbiAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgaW5zZXQtMCB6LTEwXCJcbiAgICA+XG4gICAgICB7dG9kYXlFdmVudHMubWFwKChldmVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZXZlbnRLZXkgPSBgZXZlbnQtJHtldmVudC5pZH0tJHtpbmRleH0tJHtkYXkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgIGNvbnN0IGlzU2hvcnRFdmVudCA9IGV2ZW50LmVuZC5kaWZmKGV2ZW50LnN0YXJ0LCAnbWludXRlJykgPD0gMTVcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGtleT17YCR7ZXZlbnRLZXl9LXdyYXBwZXJgfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGVcIlxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgbGVmdDogYCR7ZXZlbnQubGVmdH0lYCxcbiAgICAgICAgICAgICAgd2lkdGg6IGBjYWxjKCR7ZXZlbnQud2lkdGh9JSAtIHZhcigtLXNwYWNpbmcpICogMilgLFxuICAgICAgICAgICAgICB0b3A6IGAke2V2ZW50LnRvcH0lYCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtldmVudC5oZWlnaHR9JWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2V2ZW50S2V5fVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oJ3BvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUnLCB7XG4gICAgICAgICAgICAgICAgJ1smX3BdOnRleHQtWzEwcHhdIFsmX3BdOm10LTAnOiBpc1Nob3J0RXZlbnQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IERheUV2ZW50c0xheWVyIH0gZnJvbSAnLi4vZGF5LXZpZXcvZGF5LWV2ZW50cy1sYXllcidcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwnXG5cbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT5cbiAgZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxuKVxuXG5pbnRlcmZhY2UgV2Vla0RheUNvbFByb3BzIHtcbiAgZGF5OiBkYXlqcy5EYXlqcyAvLyBUaGUgc3BlY2lmaWMgZGF5IHRoaXMgY29sdW1uIHJlcHJlc2VudHNcbn1cblxuZXhwb3J0IGNvbnN0IFdlZWtEYXlDb2w6IFJlYWN0LkZDPFdlZWtEYXlDb2xQcm9wcz4gPSAoeyBkYXkgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktY29sLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICBjbGFzc05hbWU9XCJjb2wtc3Bhbi0xIHJlbGF0aXZlIGdyaWQgZ3JpZC1yb3dzLTI0IGJvcmRlci1yXCJcbiAgICA+XG4gICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSB0aW1lLmhvdXIoKVxuICAgICAgICBjb25zdCBob3VyU3RyID0gdGltZS5mb3JtYXQoJ0hIJylcbiAgICAgICAgY29uc3QgZGF0ZVN0ciA9IGRheS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgIGtleT17YCR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG4gICAgICAgICAgICBpZD17YHdlZWstdGltZS1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG4gICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgIGRhdGU9e2RheX1cbiAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstdGltZS1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJlbGF0aXZlIHotMTAgaC1bNjBweF0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLWInXG4gICAgICAgICAgICApfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH0pfVxuXG4gICAgICB7LyogRXZlbnQgYmxvY2tzIGxheWVyICovfVxuICAgICAgPERheUV2ZW50c0xheWVyXG4gICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay1kYXktZXZlbnRzLSR7ZGF5LmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgIGRheT17ZGF5fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFdlZWtEYXlDb2wgfSBmcm9tICcuL3dlZWstZGF5LWNvbCdcblxuY29uc3QgaG91cnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNCB9LCAoXywgaSkgPT4gaSkubWFwKChob3VyKSA9PlxuICBkYXlqcygpLmhvdXIoaG91cikubWludXRlKDApXG4pXG5cbmV4cG9ydCBjb25zdCBXZWVrVGltZUdyaWQ6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaywgY3VycmVudExvY2FsZSB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB3ZWVrRGF5cyA9IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlaylcblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcblxuICAvLyBGaW5kIGlmIGN1cnJlbnQgZGF5IGlzIGluIHRoZSBkaXNwbGF5ZWQgd2Vla1xuICBjb25zdCB0b2RheUluZGV4ID0gd2Vla0RheXMuZmluZEluZGV4KChkYXkpID0+IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpKVxuICBjb25zdCBpc0N1cnJlbnRXZWVrID0gdG9kYXlJbmRleCAhPT0gLTFcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwid2Vlay10aW1lLWdyaWRcIlxuICAgICAgY2xhc3NOYW1lPVwicmVsYXRpdmUgaC1mdWxsIGdyaWQgZ3JpZC1jb2xzLVthdXRvX3JlcGVhdCg3LDFmcildIGdyaWQtcm93cy1bcmVwZWF0KDI0LG1pbm1heCg2MHB4LCAxZnIpKV1cIlxuICAgID5cbiAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gLSBmaXhlZCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLXRpbWUtbGFiZWxzXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiei0xMCBjb2wtc3Bhbi0xIHctMTYgZ3JpZCBncmlkLXJvd3MtMjQgYm9yZGVyLXhcIlxuICAgICAgPlxuICAgICAgICB7aG91cnMubWFwKCh0aW1lKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgd2Vlay10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC1bNjBweF0gYm9yZGVyLWIgdGV4dC1yaWdodFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB4LTEgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgIHtJbnRsLkRhdGVUaW1lRm9ybWF0KGN1cnJlbnRMb2NhbGUsIHtcbiAgICAgICAgICAgICAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgICAgaG91cjEyOiB0cnVlLFxuICAgICAgICAgICAgICB9KS5mb3JtYXQodGltZS50b0RhdGUoKSl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEYXkgY29sdW1ucyB3aXRoIHRpbWUgc2xvdHMgKi99XG4gICAgICB7d2Vla0RheXMubWFwKChkYXkpID0+IChcbiAgICAgICAgPFdlZWtEYXlDb2wga2V5PXtkYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9IGRheT17ZGF5fSAvPlxuICAgICAgKSl9XG5cbiAgICAgIHsvKiBDdXJyZW50IHRpbWUgaW5kaWNhdG9yICovfVxuICAgICAge2lzQ3VycmVudFdlZWsgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ3ZWVrLWN1cnJlbnQtdGltZS1pbmRpY2F0b3JcIlxuICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYWJzb2x1dGUgei00MFwiXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHRvcDogYCR7KGRheWpzKCkuaG91cigpICsgZGF5anMoKS5taW51dGUoKSAvIDYwKSAqIDYwfXB4YCxcbiAgICAgICAgICAgIGxlZnQ6IGBjYWxjKHZhcigtLXNwYWNpbmcpICogMTYgKyAke3RvZGF5SW5kZXh9ICogKDEwMCUgLSB2YXIoLS1zcGFjaW5nKSAqIDE2KSAvIDcpYCxcbiAgICAgICAgICAgIHdpZHRoOiBgY2FsYygoMTAwJSAtIHZhcigtLXNwYWNpbmcpICogMTYpIC8gNylgLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbCBib3JkZXItdCBib3JkZXItcmVkLTUwMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCItbXQtMSBtbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFNjcm9sbEFyZWEgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBGcmFnbWVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJvcHBhYmxlQ2VsbCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcm9wcGFibGUtY2VsbCdcbmltcG9ydCB7IERheUFsbERheVJvdyB9IGZyb20gJy4vZGF5LWFsbC1kYXktcm93J1xuaW1wb3J0IHsgRGF5RXZlbnRzTGF5ZXIgfSBmcm9tICcuL2RheS1ldmVudHMtbGF5ZXInXG5pbXBvcnQgeyBEYXlIZWFkZXIgfSBmcm9tICcuL2RheS1oZWFkZXInXG5pbXBvcnQgeyBEYXlUaW1lQ29sIH0gZnJvbSAnLi9kYXktdGltZS1jb2wnXG5cbi8vIEZvciBtb3JlIGdyYW51bGFyIHRpbWUgc2xvdHMsIHdlJ2xsIGRpdmlkZSBlYWNoIGhvdXIgaW50byAxNS1taW51dGUgc2VnbWVudHNcbmNvbnN0IHRpbWVTZWdtZW50cyA9IFswLCAxNSwgMzAsIDQ1XVxuXG4vLyBIb3VycyB0byBkaXNwbGF5IChhbGwgMjQgaG91cnMgb2YgdGhlIGRheSlcbmNvbnN0IGhvdXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGkpID0+IGkpLm1hcCgoaG91cikgPT4ge1xuICByZXR1cm4gZGF5anMoKS5ob3VyKGhvdXIpLm1pbnV0ZSgwKVxufSlcblxuY29uc3QgRGF5VmlldyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSB9ID0gdXNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCBpc1RvZGF5ID0gY3VycmVudERhdGUuaXNTYW1lKGRheWpzKCksICdkYXknKVxuICBjb25zdCBkYXRlU3RyID0gY3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJylcblxuICByZXR1cm4gKFxuICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJkYXktdmlld1wiIGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAgICB7LyogRGF5IGhlYWRlciAqL31cbiAgICAgIDxEYXlIZWFkZXIgY2xhc3NOYW1lPVwiaC1bM3JlbV1cIiAvPlxuXG4gICAgICB7LyogVGltZSBncmlkIHdpdGhvdXQgc2Nyb2xsYmFyICovfVxuICAgICAgPFNjcm9sbEFyZWFcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktc2Nyb2xsLWFyZWFcIlxuICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBvdmVyZmxvdy15LWF1dG8gaC1bY2FsYygxMDAlLTNyZW0pXVwiXG4gICAgICA+XG4gICAgICAgIHsvKiBBbGwtZGF5IGV2ZW50cyByb3cgKi99XG4gICAgICAgIDxEYXlBbGxEYXlSb3cgLz5cblxuICAgICAgICB7LyogU2V0IGEgZml4ZWQgaGVpZ2h0IGNvbnRhaW5lciB0aGF0IG1hdGNoZXMgZXhhY3RseSB0aGUgdG90YWwgaGVpZ2h0IG9mIGFsbCBob3VyIGJsb2NrcyAqL31cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LXRpbWUtZ3JpZFwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtOCBkaXZpZGUteCBib3JkZXIteFwiXG4gICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBgJHtob3Vycy5sZW5ndGggKiA2MH1weGAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBUaW1lIGxhYmVscyBjb2x1bW4gKi99XG4gICAgICAgICAgPERheVRpbWVDb2wgY2xhc3NOYW1lPVwiY29sLXNwYW4tMiBoLWZ1bGwgbWQ6Y29sLXNwYW4tMVwiIC8+XG5cbiAgICAgICAgICB7LyogRGF5IGNvbHVtbiB3aXRoIGV2ZW50cyAqL31cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1ldmVudHMtY29sdW1uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIGNvbC1zcGFuLTYgaC1mdWxsIG1kOmNvbC1zcGFuLTdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHsvKiBCYWNrZ3JvdW5kIGdyaWQgZm9yIHRpbWUgc2xvdHMgLSBsb3dlc3QgbGF5ZXIgKi99XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWJhY2tncm91bmQtZ3JpZFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIGluc2V0LTAgei0wXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2hvdXJzLm1hcCgoaG91ciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyU3RyID0gaG91ci5mb3JtYXQoJ0hIJylcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyID0gY3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJylcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17YGJnLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfWB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2BkYXktYmctaG91ci0ke2hvdXJTdHJ9YH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgey8qIDE1LW1pbnV0ZSBtYXJrZXIgbGluZXMgKi99XG4gICAgICAgICAgICAgICAgICAgIHt0aW1lU2VnbWVudHMuc2xpY2UoMSkubWFwKChtaW51dGVzKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgYmctJHtob3VyU3RyfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgZGF5LWJnLWhvdXItJHtob3VyU3RyfS0ke21pbnV0ZXN9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJvcmRlci1ib3JkZXIgYWJzb2x1dGUgdy1mdWxsIGJvcmRlci10IGJvcmRlci1kYXNoZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgdG9wOiBgJHtpbmRleCAqIDYwICsgbWludXRlc31weGAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogSW50ZXJhY3RpdmUgbGF5ZXIgZm9yIHRpbWUgc2xvdHMgLSBtaWRkbGUgbGF5ZXIgd2l0aCBubyBib3JkZXJzICovfVxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1pbnRlcmFjdGl2ZS1sYXllclwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG8gYWJzb2x1dGUgaW5zZXQtMCB6LTEwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSB0aW1lLmhvdXIoKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXJTdHIgPSB0aW1lLmZvcm1hdCgnSEgnKVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e2Ake2RhdGVTdHJ9LSR7aG91clN0cn1gfT5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS10aW1lLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LTAwYH1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWNlbGwtJHtob3VyU3RyfS0wMGB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbignaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyJyl9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxEcm9wcGFibGVDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9e2BkYXktdGltZS1jZWxsLSR7ZGF0ZVN0cn0tJHtob3VyU3RyfS0xNWB9XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2BkYXktdGltZS1jZWxsLSR7aG91clN0cn0tMTVgfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0aW1lLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e2N1cnJlbnREYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIGhvdXI9e2hvdXJ9XG4gICAgICAgICAgICAgICAgICAgICAgbWludXRlPXsxNX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgaC1bMTVweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgZGF5LXRpbWUtY2VsbC0ke2RhdGVTdHJ9LSR7aG91clN0cn0tMzBgfVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgZGF5LXRpbWUtY2VsbC0ke2hvdXJTdHJ9LTMwYH1cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBob3VyPXtob3VyfVxuICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZT17MzB9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaG92ZXI6YmctYWNjZW50IGgtWzE1cHhdIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YGRheS10aW1lLWNlbGwtJHtkYXRlU3RyfS0ke2hvdXJTdHJ9LTQ1YH1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWNlbGwtJHtob3VyU3RyfS00NWB9XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZT17Y3VycmVudERhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgaG91cj17aG91cn1cbiAgICAgICAgICAgICAgICAgICAgICBtaW51dGU9ezQ1fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImhvdmVyOmJnLWFjY2VudCBoLVsxNXB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIEV2ZW50cyBsYXllciAtIG1pZGRsZS10b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICA8RGF5RXZlbnRzTGF5ZXIgZGF5PXtjdXJyZW50RGF0ZX0gLz5cblxuICAgICAgICAgICAgey8qIEN1cnJlbnQgdGltZSBpbmRpY2F0b3IgLSB0b3AgbGF5ZXIgKi99XG4gICAgICAgICAgICB7aXNUb2RheSAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImRheS1jdXJyZW50LXRpbWUtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIGxlZnQtMCB6LTQwIGJvcmRlci10IGJvcmRlci1yZWQtNTAwXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgdG9wOiBgJHsoZGF5anMoKS5ob3VyKCkgKyBkYXlqcygpLm1pbnV0ZSgpIC8gNjApICogNjB9cHhgLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIi1tdC0xIC1tbC0xIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLXJlZC01MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvU2Nyb2xsQXJlYT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXlWaWV3XG4iLAogICAgImltcG9ydCB7IHVzZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29udGV4dHMvY2FsZW5kYXItY29udGV4dC9jb250ZXh0J1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgRHJhZ2dhYmxlRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZ2dhYmxlLWV2ZW50L2RyYWdnYWJsZS1ldmVudCdcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJvcHBhYmxlLWNlbGwnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQsIFByb2Nlc3NlZENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuXG5leHBvcnQgY29uc3QgRGF5QWxsRGF5Um93ID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsIHQgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2V0IGN1cnJlbnQgZGF5J3MgZXZlbnRzIC0gdGhpcyB3aWxsIHJlZnJlc2ggYXV0b21hdGljYWxseSB3aGVuIHN0b3JlIHVwZGF0ZXNcbiAgLy8gYmVjYXVzZSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UgaXMgYSBzZWxlY3RvciBmdW5jdGlvbiBmcm9tIHRoZSBzdG9yZSB0aGF0IHJ1bnMgd2hlbmV2ZXIgZXZlbnRzIGNoYW5nZVxuICBjb25zdCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgY3VycmVudERhdGUuc3RhcnRPZignZGF5JyksXG4gICAgY3VycmVudERhdGUuZW5kT2YoJ2RheScpXG4gIClcblxuICAvLyBTZXBhcmF0ZSBhbGwtZGF5IGV2ZW50cyBmcm9tIHJlZ3VsYXIgZXZlbnRzXG4gIGNvbnN0IHsgYWxsRGF5RXZlbnRzIH0gPSB1c2VNZW1vKCgpID0+IHtcbiAgICAvLyBPbmx5IGV2ZW50cyBleHBsaWNpdGx5IG1hcmtlZCBhcyBhbGxEYXkgc2hvdWxkIGJlIGluIHRoZSBhbGwtZGF5IHNlY3Rpb25cbiAgICBjb25zdCBhbGxEYXlFdnRzID0gZGF5RXZlbnRzLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmFsbERheSlcblxuICAgIC8vIFJlZ3VsYXIgZXZlbnRzIChpbmNsdWRpbmcgbXVsdGktZGF5IGV2ZW50cylcbiAgICBjb25zdCByZWd1bGFyRXZ0cyA9IGRheUV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiAhZXZlbnQuYWxsRGF5KVxuXG4gICAgcmV0dXJuIHsgYWxsRGF5RXZlbnRzOiBhbGxEYXlFdnRzLCByZWd1bGFyRXZlbnRzOiByZWd1bGFyRXZ0cyB9XG4gIH0sIFtkYXlFdmVudHNdKSAvLyBPbmx5IGRlcGVuZCBvbiB0aGUgZGF5RXZlbnRzIHdoaWNoIGlzIHJlZnJlc2hlZCBhdXRvbWF0aWNhbGx5XG5cbiAgLy8gUHJvY2VzcyBhbGwtZGF5IGV2ZW50cyBmb3IgZGlzcGxheVxuICBjb25zdCB7IHByb2Nlc3NlZEFsbERheUV2ZW50cyB9ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgLy8gU29ydCBhbGwtZGF5IGV2ZW50cyAoaWYgbmVlZGVkKVxuICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IFsuLi5hbGxEYXlFdmVudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhLnN0YXJ0LmRpZmYoYi5zdGFydClcbiAgICB9KVxuXG4gICAgLy8gVHJhY2sgcG9zaXRpb25zIGluIHJvd3MgZm9yIHN0YWNraW5nXG4gICAgY29uc3Qgcm93czogeyBldmVudDogQ2FsZW5kYXJFdmVudCB9W11bXSA9IFtdXG4gICAgY29uc3QgcHJvY2Vzc2VkRXZlbnRzOiBQcm9jZXNzZWRDYWxlbmRhckV2ZW50W10gPSBbXVxuXG4gICAgc29ydGVkRXZlbnRzLmZvckVhY2goKGV2ZW50LCByb3dJbmRleCkgPT4ge1xuICAgICAgbGV0IHBsYWNlZCA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghcGxhY2VkKSB7XG4gICAgICAgIGlmIChyb3dJbmRleCA+PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyByb3cgaWYgbmVlZGVkXG4gICAgICAgICAgcm93cy5wdXNoKFtdKVxuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJbiBkYXkgdmlldywgd2UgY2FuIHBsYWNlIG9uZSBldmVudCBwZXIgcm93IGFzIHRoZXkgZG9uJ3Qgb3ZlcmxhcCBob3Jpem9udGFsbHlcbiAgICAgICAgICAvLyBUaGlzIGlzIHNpbXBsZXIgdGhhbiB3ZWVrIHZpZXcgd2hlcmUgd2UgbmVlZGVkIHRvIGNoZWNrIGZvciBvdmVybGFwc1xuICAgICAgICAgIHBsYWNlZCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZXZlbnQgdG8gdGhlIHJvd1xuICAgICAgcm93c1tyb3dJbmRleF0ucHVzaCh7IGV2ZW50IH0pXG5cbiAgICAgIC8vIEFkZCBwcm9jZXNzZWQgZXZlbnQgd2l0aCBjb3JyZWN0IHBvc2l0aW9uaW5nXG4gICAgICBwcm9jZXNzZWRFdmVudHMucHVzaCh7XG4gICAgICAgIC4uLmV2ZW50LFxuICAgICAgICBsZWZ0OiAwLFxuICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICB0b3A6IHJvd0luZGV4ICogRVZFTlRfQkFSX0hFSUdIVCxcbiAgICAgICAgaGVpZ2h0OiBFVkVOVF9CQVJfSEVJR0hULFxuICAgICAgICBhbGxEYXk6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc2VkQWxsRGF5RXZlbnRzOiBwcm9jZXNzZWRFdmVudHMsXG4gICAgICBhbGxEYXlSb3dzQ291bnQ6IE1hdGgubWF4KDEsIHJvd3MubGVuZ3RoKSwgLy8gQXQgbGVhc3QgMSByb3csIGV2ZW4gaWYgZW1wdHlcbiAgICB9XG4gIH0sIFthbGxEYXlFdmVudHNdKVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgZGF0YS10ZXN0aWQ9XCJkYXktYWxsLWRheS1yb3dcIlxuICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtOCBib3JkZXItYiBib3JkZXIteFwiXG4gICAgPlxuICAgICAgey8qIExlZnQgbGFiZWwgZm9yIGFsbC1kYXkgZXZlbnRzICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc3Bhbi0yIGZsZXggc2hyaW5rLTAgaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGJvcmRlci1yIHByLTIgbWQ6Y29sLXNwYW4tMVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14c1wiPlxuICAgICAgICAgIHt0KCdhbGxEYXknKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBBbGwtZGF5IGV2ZW50cyBjb250YWluZXIgd2l0aCBkeW5hbWljIGhlaWdodCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgY29sLXNwYW4tNiBtZDpjb2wtc3Bhbi03IFwiPlxuICAgICAgICA8RHJvcHBhYmxlQ2VsbFxuICAgICAgICAgIGlkPXtgYWxsLWRheS0ke2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpfWB9XG4gICAgICAgICAgdHlwZT1cImRheS1jZWxsXCJcbiAgICAgICAgICBkYXRlPXtjdXJyZW50RGF0ZX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJob3ZlcjpiZy1hY2NlbnQgdy1mdWxsIGN1cnNvci1wb2ludGVyIG1pbi1oLTEwIGZsZXggZmxleC1jb2xcIlxuICAgICAgICA+XG4gICAgICAgICAge3Byb2Nlc3NlZEFsbERheUV2ZW50cy5tYXAoKGV2ZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGtleT17YGFsbC1kYXktJHtldmVudC5pZH0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogRVZFTlRfQkFSX0hFSUdIVCArICdweCcgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICAgICAgZWxlbWVudElkPXtgYWxsLWRheS0ke2V2ZW50LmlkfS0ke2luZGV4fWB9XG4gICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJvdmVyZmxvdy1jbGlwIHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IGBjYWxjKDEwMCUgLSB2YXIoLS1zcGFjaW5nKSAqIDIpYCB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pfVxuICAgICAgICA8L0Ryb3BwYWJsZUNlbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuaW50ZXJmYWNlIERheUhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBEYXlIZWFkZXI6IFJlYWN0LkZDPERheUhlYWRlclByb3BzPiA9ICh7IGNsYXNzTmFtZSB9KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9XG4gICAgdXNlQ2FsZW5kYXJDb250ZXh0KClcbiAgY29uc3QgaXNUb2RheSA9IGN1cnJlbnREYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGF5LWhlYWRlclwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLWIgcC0yIGJvcmRlci14JyxcbiAgICAgICAgc3RpY2t5Vmlld0hlYWRlciAmJiAnc3RpY2t5IHRvcC0wIHotMjAnLFxuICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgIGtleT17Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9XG4gICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciB0ZXh0LWJhc2UgZm9udC1zZW1pYm9sZCBzbTp0ZXh0LXhsJyxcbiAgICAgICAgICAgIGlzVG9kYXkgJiYgJ3RleHQtcHJpbWFyeSdcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwieHM6aW5saW5lIGhpZGRlblwiPlxuICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnZGRkZCwgJyl9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0gRCwgWVlZWScpfVxuICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgbWwtMiByb3VuZGVkLWZ1bGwgcHgtMSBweS0wLjUgdGV4dC14cyBzbTpweC0yIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgVG9kYXlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApfVxuICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcblxuLy8gSG91cnMgdG8gZGlzcGxheSAoYWxsIDI0IGhvdXJzIG9mIHRoZSBkYXkpXG5jb25zdCBob3VycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBpKSA9PiBpKS5tYXAoKGhvdXIpID0+IHtcbiAgcmV0dXJuIGRheWpzKCkuaG91cihob3VyKS5taW51dGUoMClcbn0pXG5cbmludGVyZmFjZSBEYXlUaW1lQ29sUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNvbnN0IERheVRpbWVDb2w6IFJlYWN0LkZDPERheVRpbWVDb2xQcm9wcz4gPSAoeyBjbGFzc05hbWUgfSkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnRMb2NhbGUgfSA9IHVzZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXRlc3RpZD1cImRheS10aW1lLWNvbFwiXG4gICAgICBjbGFzc05hbWU9e2Bjb2wtc3Bhbi0yIGgtZnVsbCBtZDpjb2wtc3Bhbi0xICR7Y2xhc3NOYW1lfWB9XG4gICAgPlxuICAgICAge2hvdXJzLm1hcCgodGltZSkgPT4gKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXt0aW1lLmZvcm1hdCgnSEg6bW0nKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD17YGRheS10aW1lLWhvdXItJHt0aW1lLmZvcm1hdCgnSEgnKX1gfVxuICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzYwcHhdIGJvcmRlci1iIHRleHQtcmlnaHRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHByLTIgdGV4dC1yaWdodCB0ZXh0LVsxMHB4XSBzbTp0ZXh0LXhzXCI+XG4gICAgICAgICAgICB7SW50bC5EYXRlVGltZUZvcm1hdChjdXJyZW50TG9jYWxlLCB7XG4gICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgIH0pLmZvcm1hdCh0aW1lLnRvRGF0ZSgpKX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDaGVja2JveCxcbiAgRGF0ZVBpY2tlcixcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dEZXNjcmlwdGlvbixcbiAgRGlhbG9nRm9vdGVyLFxuICBEaWFsb2dIZWFkZXIsXG4gIERpYWxvZ1RpdGxlLFxuICBJbnB1dCxcbiAgTGFiZWwsXG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBDb250ZW50LFxuICBUb29sdGlwUHJvdmlkZXIsXG4gIFRvb2x0aXBUcmlnZ2VyLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9jb21wb25lbnRzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBSUnVsZU9wdGlvbnMgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0b3IgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvY29tcG9uZW50cy9yZWN1cnJlbmNlLWVkaXRvci9yZWN1cnJlbmNlLWVkaXRvcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB7IHVzZVJlY3VycmluZ0V2ZW50QWN0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS9ob29rcy91c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmNvbnN0IGNvbG9yT3B0aW9ucyA9IFtcbiAgeyB2YWx1ZTogJ2JnLWJsdWUtMTAwIHRleHQtYmx1ZS04MDAnLCBsYWJlbDogJ0JsdWUnIH0sXG4gIHsgdmFsdWU6ICdiZy1ncmVlbi0xMDAgdGV4dC1ncmVlbi04MDAnLCBsYWJlbDogJ0dyZWVuJyB9LFxuICB7IHZhbHVlOiAnYmctcHVycGxlLTEwMCB0ZXh0LXB1cnBsZS04MDAnLCBsYWJlbDogJ1B1cnBsZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXJlZC0xMDAgdGV4dC1yZWQtODAwJywgbGFiZWw6ICdSZWQnIH0sXG4gIHsgdmFsdWU6ICdiZy15ZWxsb3ctMTAwIHRleHQteWVsbG93LTgwMCcsIGxhYmVsOiAnWWVsbG93JyB9LFxuICB7IHZhbHVlOiAnYmctcGluay0xMDAgdGV4dC1waW5rLTgwMCcsIGxhYmVsOiAnUGluaycgfSxcbiAgeyB2YWx1ZTogJ2JnLWluZGlnby0xMDAgdGV4dC1pbmRpZ28tODAwJywgbGFiZWw6ICdJbmRpZ28nIH0sXG4gIHsgdmFsdWU6ICdiZy1hbWJlci0xMDAgdGV4dC1hbWJlci04MDAnLCBsYWJlbDogJ0FtYmVyJyB9LFxuICB7IHZhbHVlOiAnYmctZW1lcmFsZC0xMDAgdGV4dC1lbWVyYWxkLTgwMCcsIGxhYmVsOiAnRW1lcmFsZCcgfSxcbiAgeyB2YWx1ZTogJ2JnLXNreS0xMDAgdGV4dC1za3ktODAwJywgbGFiZWw6ICdTa3knIH0sXG4gIHsgdmFsdWU6ICdiZy12aW9sZXQtMTAwIHRleHQtdmlvbGV0LTgwMCcsIGxhYmVsOiAnVmlvbGV0JyB9LFxuICB7IHZhbHVlOiAnYmctcm9zZS0xMDAgdGV4dC1yb3NlLTgwMCcsIGxhYmVsOiAnUm9zZScgfSxcbiAgeyB2YWx1ZTogJ2JnLXRlYWwtMTAwIHRleHQtdGVhbC04MDAnLCBsYWJlbDogJ1RlYWwnIH0sXG4gIHsgdmFsdWU6ICdiZy1vcmFuZ2UtMTAwIHRleHQtb3JhbmdlLTgwMCcsIGxhYmVsOiAnT3JhbmdlJyB9LFxuXVxuXG5pbnRlcmZhY2UgRXZlbnRGb3JtUHJvcHMge1xuICBzZWxlY3RlZEV2ZW50PzogQ2FsZW5kYXJFdmVudCB8IG51bGxcbiAgc2VsZWN0ZWREYXRlPzogZGF5anMuRGF5anMgfCBudWxsXG4gIG9uQWRkPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uVXBkYXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbn1cblxuZXhwb3J0IGNvbnN0IEV2ZW50Rm9ybTogUmVhY3QuRkM8RXZlbnRGb3JtUHJvcHM+ID0gKHtcbiAgc2VsZWN0ZWRFdmVudCxcbiAgc2VsZWN0ZWREYXRlLFxuICBvbkNsb3NlLFxuICBvblVwZGF0ZSxcbiAgb25EZWxldGUsXG4gIG9uQWRkLFxufSkgPT4ge1xuICBjb25zdCB7XG4gICAgZGlhbG9nU3RhdGUsXG4gICAgb3BlbkVkaXREaWFsb2csXG4gICAgb3BlbkRlbGV0ZURpYWxvZyxcbiAgICBjbG9zZURpYWxvZyxcbiAgICBoYW5kbGVDb25maXJtLFxuICB9ID0gdXNlUmVjdXJyaW5nRXZlbnRBY3Rpb25zKG9uQ2xvc2UpXG5cbiAgY29uc3QgeyBmaW5kUGFyZW50UmVjdXJyaW5nRXZlbnQsIHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KFxuICAgIChjb250ZXh0KSA9PiAoe1xuICAgICAgZmluZFBhcmVudFJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudCxcbiAgICAgIHQ6IGNvbnRleHQudCxcbiAgICB9KVxuICApXG5cbiAgY29uc3Qgc3RhcnQgPSBzZWxlY3RlZEV2ZW50Py5zdGFydFxuICBjb25zdCBlbmQgPSBzZWxlY3RlZEV2ZW50Py5lbmRcblxuICAvLyBGaW5kIHBhcmVudCBldmVudCBpZiB0aGlzIGlzIGEgcmVjdXJyaW5nIGV2ZW50IGluc3RhbmNlXG4gIGNvbnN0IHBhcmVudEV2ZW50ID0gc2VsZWN0ZWRFdmVudFxuICAgID8gZmluZFBhcmVudFJlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpXG4gICAgOiBudWxsXG5cbiAgLy8gRm9ybSBkZWZhdWx0IHZhbHVlc1xuICBjb25zdCBkZWZhdWx0U3RhcnREYXRlID0gc2VsZWN0ZWREYXRlPy50b0RhdGUoKSB8fCBuZXcgRGF0ZSgpXG4gIGNvbnN0IGRlZmF1bHRFbmREYXRlID1cbiAgICBzZWxlY3RlZERhdGU/LmFkZCgxLCAnaG91cicpLnRvRGF0ZSgpIHx8IGRheWpzKCkuYWRkKDEsICdob3VyJykudG9EYXRlKClcblxuICAvLyBGb3JtIHN0YXRlXG4gIGNvbnN0IFtzdGFydERhdGUsIHNldFN0YXJ0RGF0ZV0gPSB1c2VTdGF0ZShcbiAgICBzdGFydD8udG9EYXRlKCkgfHwgZGVmYXVsdFN0YXJ0RGF0ZVxuICApXG4gIGNvbnN0IFtlbmREYXRlLCBzZXRFbmREYXRlXSA9IHVzZVN0YXRlKGVuZD8udG9EYXRlKCkgfHwgZGVmYXVsdEVuZERhdGUpXG4gIGNvbnN0IFtpc0FsbERheSwgc2V0SXNBbGxEYXldID0gdXNlU3RhdGUoc2VsZWN0ZWRFdmVudD8uYWxsRGF5IHx8IGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRDb2xvciwgc2V0U2VsZWN0ZWRDb2xvcl0gPSB1c2VTdGF0ZShcbiAgICBzZWxlY3RlZEV2ZW50Py5jb2xvciB8fCBjb2xvck9wdGlvbnNbMF0udmFsdWVcbiAgKVxuXG4gIC8vIFRpbWUgc3RhdGVcbiAgY29uc3QgW3N0YXJ0VGltZSwgc2V0U3RhcnRUaW1lXSA9IHVzZVN0YXRlKFxuICAgIHN0YXJ0ID8gc3RhcnQuZm9ybWF0KCdISDptbScpIDogZGF5anMoZGVmYXVsdFN0YXJ0RGF0ZSkuZm9ybWF0KCdISDptbScpXG4gIClcbiAgY29uc3QgW2VuZFRpbWUsIHNldEVuZFRpbWVdID0gdXNlU3RhdGUoXG4gICAgZW5kID8gZW5kLmZvcm1hdCgnSEg6bW0nKSA6IGRheWpzKGRlZmF1bHRFbmREYXRlKS5mb3JtYXQoJ0hIOm1tJylcbiAgKVxuXG4gIC8vIEluaXRpYWxpemUgZm9ybSB2YWx1ZXMgZnJvbSBzZWxlY3RlZCBldmVudCBvciBkZWZhdWx0c1xuICBjb25zdCBbZm9ybVZhbHVlcywgc2V0Rm9ybVZhbHVlc10gPSB1c2VTdGF0ZSh7XG4gICAgdGl0bGU6IHNlbGVjdGVkRXZlbnQ/LnRpdGxlIHx8ICcnLFxuICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RlZEV2ZW50Py5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICBsb2NhdGlvbjogc2VsZWN0ZWRFdmVudD8ubG9jYXRpb24gfHwgJycsXG4gIH0pXG5cbiAgLy8gUmVjdXJyZW5jZSBzdGF0ZSAtIHB1bGwgUlJVTEUgZnJvbSBwYXJlbnQgaWYgdGhpcyBpcyBhbiBpbnN0YW5jZVxuICBjb25zdCBbcnJ1bGUsIHNldFJydWxlXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBldmVudFJydWxlID0gc2VsZWN0ZWRFdmVudD8ucnJ1bGUgfHwgcGFyZW50RXZlbnQ/LnJydWxlXG4gICAgcmV0dXJuIGV2ZW50UnJ1bGUgfHwgbnVsbFxuICB9KVxuXG4gIC8vIENyZWF0ZSB3cmFwcGVyIGZ1bmN0aW9ucyB0byBmaXggVHlwZVNjcmlwdCBlcnJvcnMgd2l0aCBEYXRlUGlja2VyXG4gIGNvbnN0IGhhbmRsZVN0YXJ0RGF0ZUNoYW5nZSA9IChkYXRlOiBEYXRlIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKGRhdGUpIHtcbiAgICAgIHNldFN0YXJ0RGF0ZShkYXRlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVuZERhdGVDaGFuZ2UgPSAoZGF0ZTogRGF0ZSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICBzZXRFbmREYXRlKGRhdGUpXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGZvcm0gdmFsdWVzIHdoZW4gaW5wdXQgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVJbnB1dENoYW5nZSA9IChcbiAgICBlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD5cbiAgKSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZSB9ID0gZS50YXJnZXRcbiAgICBzZXRGb3JtVmFsdWVzKChwcmV2KSA9PiAoeyAuLi5wcmV2LCBbbmFtZV06IHZhbHVlIH0pKVxuICB9XG5cbiAgLy8gSGFuZGxlIHRpbWUgY2hhbmdlc1xuICBjb25zdCBoYW5kbGVUaW1lQ2hhbmdlID0gKFxuICAgIGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+LFxuICAgIGlzU3RhcnQ6IGJvb2xlYW5cbiAgKSA9PiB7XG4gICAgY29uc3QgdGltZVZhbHVlID0gZS50YXJnZXQudmFsdWVcbiAgICBpZiAoaXNTdGFydCkge1xuICAgICAgc2V0U3RhcnRUaW1lKHRpbWVWYWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RW5kVGltZSh0aW1lVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBSZXNldCBlbmQgdGltZSB3aGVuIGFsbCBkYXkgaXMgdG9nZ2xlZCB0byBvblxuICAgIGlmIChpc0FsbERheSkge1xuICAgICAgc2V0RW5kVGltZSgnMjM6NTknKVxuICAgIH1cbiAgfSwgW2lzQWxsRGF5XSlcblxuICAvLyBIYW5kbGUgZm9ybSBzdWJtaXNzaW9uXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIC8vIENyZWF0ZSBmdWxsIGRhdGV0aW1lIG9iamVjdHMgYnkgY29tYmluaW5nIGRhdGUgYW5kIHRpbWVcbiAgICBjb25zdCBbc3RhcnRIb3Vycywgc3RhcnRNaW51dGVzXSA9IHN0YXJ0VGltZS5zcGxpdCgnOicpLm1hcChOdW1iZXIpXG4gICAgY29uc3QgW2VuZEhvdXJzLCBlbmRNaW51dGVzXSA9IGVuZFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuXG4gICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgIGxldCBlbmREYXRlVGltZSA9IGRheWpzKGVuZERhdGUpLmhvdXIoZW5kSG91cnMpLm1pbnV0ZShlbmRNaW51dGVzKVxuXG4gICAgLy8gRm9yIGFsbC1kYXkgZXZlbnRzLCBzZXQgYXBwcm9wcmlhdGUgdGltZXNcbiAgICBpZiAoaXNBbGxEYXkpIHtcbiAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICBlbmREYXRlVGltZSA9IGVuZERhdGVUaW1lLmhvdXIoMjMpLm1pbnV0ZSg1OSlcbiAgICB9XG5cbiAgICBjb25zdCBldmVudERhdGE6IENhbGVuZGFyRXZlbnQgPSB7XG4gICAgICBpZDogc2VsZWN0ZWRFdmVudD8uaWQgfHwgZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyksXG4gICAgICB0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcbiAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgZW5kOiBlbmREYXRlVGltZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWVzLmRlc2NyaXB0aW9uLFxuICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICBhbGxEYXk6IGlzQWxsRGF5LFxuICAgICAgY29sb3I6IHNlbGVjdGVkQ29sb3IsXG4gICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIGlmIChzZWxlY3RlZEV2ZW50Py5pZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHJlY3VycmluZyBldmVudFxuICAgICAgaWYgKGlzUmVjdXJyaW5nRXZlbnQoc2VsZWN0ZWRFdmVudCkpIHtcbiAgICAgICAgLy8gU2hvdyByZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2dcbiAgICAgICAgb3BlbkVkaXREaWFsb2coc2VsZWN0ZWRFdmVudCwge1xuICAgICAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgICAgIHN0YXJ0OiBzdGFydERhdGVUaW1lLFxuICAgICAgICAgIGVuZDogZW5kRGF0ZVRpbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgbG9jYXRpb246IGZvcm1WYWx1ZXMubG9jYXRpb24sXG4gICAgICAgICAgYWxsRGF5OiBpc0FsbERheSxcbiAgICAgICAgICBjb2xvcjogc2VsZWN0ZWRDb2xvcixcbiAgICAgICAgICBycnVsZTogcnJ1bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uVXBkYXRlPy4oZXZlbnREYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkFkZD8uKGV2ZW50RGF0YSlcbiAgICB9XG5cbiAgICBvbkNsb3NlKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZSA9ICgpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRFdmVudD8uaWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZWN1cnJpbmcgZXZlbnRcbiAgICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KHNlbGVjdGVkRXZlbnQpKSB7XG4gICAgICAgIC8vIFNob3cgcmVjdXJyaW5nIGV2ZW50IGRlbGV0ZSBkaWFsb2dcbiAgICAgICAgb3BlbkRlbGV0ZURpYWxvZyhzZWxlY3RlZEV2ZW50KVxuICAgICAgICByZXR1cm4gLy8gRG9uJ3QgY2xvc2UgdGhlIGZvcm0geWV0LCBsZXQgdGhlIGRpYWxvZyBoYW5kbGUgaXRcbiAgICAgIH1cbiAgICAgIG9uRGVsZXRlPy4oc2VsZWN0ZWRFdmVudClcbiAgICAgIG9uQ2xvc2UoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVJSdWxlQ2hhbmdlID0gKG5ld1JSdWxlOiBSUnVsZU9wdGlvbnMgfCBudWxsKSA9PiB7XG4gICAgaWYgKG5ld1JSdWxlKSB7XG4gICAgICAvLyBDcmVhdGUgZHRzdGFydCB3aXRoIHRoZSBzYW1lIGxvZ2ljIGFzIGluIGhhbmRsZVN1Ym1pdFxuICAgICAgY29uc3QgW3N0YXJ0SG91cnMsIHN0YXJ0TWludXRlc10gPSBzdGFydFRpbWUuc3BsaXQoJzonKS5tYXAoTnVtYmVyKVxuICAgICAgbGV0IHN0YXJ0RGF0ZVRpbWUgPSBkYXlqcyhzdGFydERhdGUpLmhvdXIoc3RhcnRIb3VycykubWludXRlKHN0YXJ0TWludXRlcylcblxuICAgICAgaWYgKGlzQWxsRGF5KSB7XG4gICAgICAgIHN0YXJ0RGF0ZVRpbWUgPSBzdGFydERhdGVUaW1lLmhvdXIoMCkubWludXRlKDApXG4gICAgICB9XG5cbiAgICAgIC8vIEVuc3VyZSBkdHN0YXJ0IGlzIGFsd2F5cyBpbmNsdWRlZCBpbiBSUnVsZU9wdGlvbnMgYXMgYSBEYXRlIG9iamVjdFxuICAgICAgY29uc3QgY29tcGxldGVScnVsZTogUlJ1bGVPcHRpb25zID0ge1xuICAgICAgICAuLi5uZXdSUnVsZSxcbiAgICAgICAgZHRzdGFydDogc3RhcnREYXRlVGltZS50b0RhdGUoKSwgLy8gQ29udmVydCBkYXlqcyB0byBEYXRlXG4gICAgICB9XG4gICAgICBzZXRScnVsZShjb21wbGV0ZVJydWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRScnVsZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGVuZCBkYXRlIGlzIG5vdCBiZWZvcmUgc3RhcnQgZGF0ZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkYXlqcyhzdGFydERhdGUpLmlzQWZ0ZXIoZGF5anMoZW5kRGF0ZSkpKSB7XG4gICAgICBzZXRFbmREYXRlKHN0YXJ0RGF0ZSlcbiAgICB9XG4gIH0sIFtzdGFydERhdGUsIGVuZERhdGVdKVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEaWFsb2cgb3Blbj17dHJ1ZX0gb25PcGVuQ2hhbmdlPXtvbkNsb3NlfT5cbiAgICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwidy1bOTB2d10gbWF4LXctWzUwMHB4XSBwLTQgc206cC02XCI+XG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0+XG4gICAgICAgICAgICA8RGlhbG9nSGVhZGVyIGNsYXNzTmFtZT1cIm1iLTIgc206bWItNFwiPlxuICAgICAgICAgICAgICA8RGlhbG9nVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1iYXNlIHNtOnRleHQtbGdcIj5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnQnKSA6IHQoJ2NyZWF0ZUV2ZW50Jyl9XG4gICAgICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgICAgICAgIDxEaWFsb2dEZXNjcmlwdGlvbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj5cbiAgICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgPyB0KCdlZGl0RXZlbnREZXRhaWxzJykgOiB0KCdhZGROZXdFdmVudCcpfVxuICAgICAgICAgICAgICA8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPC9EaWFsb2dIZWFkZXI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZ3JpZCBnYXAtMyBweS0yIHNtOmdhcC00IHNtOnB5LTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJ0aXRsZVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ3RpdGxlJyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLnRpdGxlfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2V2ZW50VGl0bGVQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXNtIHNtOmgtOVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJkZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ2Rlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtmb3JtVmFsdWVzLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ2V2ZW50RGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQtc20gc206aC05XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgaWQ9XCJhbGxEYXlcIlxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNBbGxEYXl9XG4gICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eyhjaGVja2VkKSA9PiBzZXRJc0FsbERheShjaGVja2VkID09PSB0cnVlKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwiYWxsRGF5XCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnYWxsRGF5Jyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdyaWQtY29scy0yIGdhcC0yIHNtOmdhcC00XCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHNtOnRleHQtc21cIj57dCgnc3RhcnREYXRlJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e3N0YXJ0RGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlU3RhcnREYXRlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0xXCJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VPblNlbGVjdFxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdlbmREYXRlJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU9e2VuZERhdGV9XG4gICAgICAgICAgICAgICAgICAgIHNldERhdGU9e2hhbmRsZUVuZERhdGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTFcIlxuICAgICAgICAgICAgICAgICAgICBjbG9zZU9uU2VsZWN0XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICB7IWlzQWxsRGF5ICYmIChcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTIgc206Z2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwic3RhcnQtdGltZVwiIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdzdGFydFRpbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJzdGFydC10aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3N0YXJ0VGltZX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRpbWVDaGFuZ2UoZSwgdHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImVuZC10aW1lXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ2VuZFRpbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlbmQtdGltZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlbmRUaW1lfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGltZUNoYW5nZShlLCBmYWxzZSl9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXQtMSBoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIGdhcC0xIHNtOmdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHMgc206dGV4dC1zbVwiPnt0KCdjb2xvcicpfTwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPFRvb2x0aXBQcm92aWRlcj5cbiAgICAgICAgICAgICAgICAgICAge2NvbG9yT3B0aW9ucy5tYXAoKGNvbG9yKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgPFRvb2x0aXAga2V5PXtjb2xvci52YWx1ZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtjb2xvci52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7Y29sb3IudmFsdWV9IGgtNiB3LTYgcm91bmRlZC1mdWxsIHNtOmgtOCBzbTp3LThgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDb2xvciA9PT0gY29sb3IudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JpbmctMiByaW5nLWJsYWNrIHJpbmctb2Zmc2V0LTEgc206cmluZy1vZmZzZXQtMidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkQ29sb3IoY29sb3IudmFsdWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2NvbG9yLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+e2NvbG9yLmxhYmVsfTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvVG9vbHRpcFByb3ZpZGVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ2FwLTEgc206Z2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImxvY2F0aW9uXCIgY2xhc3NOYW1lPVwidGV4dC14cyBzbTp0ZXh0LXNtXCI+XG4gICAgICAgICAgICAgICAgICB7dCgnbG9jYXRpb24nKX1cbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJsb2NhdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e2Zvcm1WYWx1ZXMubG9jYXRpb259XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW5wdXRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnZXZlbnRMb2NhdGlvblBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC1zbSBzbTpoLTlcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIHsvKiBSZWN1cnJlbmNlIFNlY3Rpb24gKi99XG4gICAgICAgICAgICAgIDxSZWN1cnJlbmNlRWRpdG9yIHZhbHVlPXtycnVsZX0gb25DaGFuZ2U9e2hhbmRsZVJSdWxlQ2hhbmdlfSAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxEaWFsb2dGb290ZXIgY2xhc3NOYW1lPVwibXQtMiBmbGV4IGZsZXgtY29sLXJldmVyc2UgZ2FwLTIgc206bXQtNCBzbTpmbGV4LXJvdyBzbTpnYXAtMFwiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRFdmVudD8uaWQgJiYgKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImRlc3RydWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBzbTptci1hdXRvIHNtOnctYXV0b1wiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KCdkZWxldGUnKX1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IHctZnVsbCBnYXAtMiBzbTp3LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgc206ZmxleC1ub25lXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzTmFtZT1cImZsZXgtMSBzbTpmbGV4LW5vbmVcIiBzaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICAgIHtzZWxlY3RlZEV2ZW50Py5pZCA/IHQoJ3VwZGF0ZScpIDogdCgnY3JlYXRlJyl9XG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0RpYWxvZz5cblxuICAgICAgey8qIFJlY3VycmluZyBFdmVudCBFZGl0IERpYWxvZyAqL31cbiAgICAgIDxSZWN1cnJlbmNlRWRpdERpYWxvZ1xuICAgICAgICBpc09wZW49e2RpYWxvZ1N0YXRlLmlzT3Blbn1cbiAgICAgICAgb25DbG9zZT17Y2xvc2VEaWFsb2d9XG4gICAgICAgIG9uQ29uZmlybT17aGFuZGxlQ29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT17ZGlhbG9nU3RhdGUub3BlcmF0aW9uVHlwZX1cbiAgICAgICAgZXZlbnRUaXRsZT17ZGlhbG9nU3RhdGUuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBDaGVja2JveCxcbiAgRGF0ZVBpY2tlcixcbiAgSW5wdXQsXG4gIExhYmVsLFxuICBTZWxlY3QsXG4gIFNlbGVjdENvbnRlbnQsXG4gIFNlbGVjdEl0ZW0sXG4gIFNlbGVjdFRyaWdnZXIsXG4gIFNlbGVjdFZhbHVlLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgdHlwZSB7IFJSdWxlT3B0aW9ucyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJSdWxlIH0gZnJvbSAncnJ1bGUnXG5pbXBvcnQgdHlwZSB7IFdlZWtkYXkgfSBmcm9tICdycnVsZSdcbmltcG9ydCB7IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9ob29rcy91c2Utc21hcnQtY2FsZW5kYXItY29udGV4dCdcblxuLy8gTmF0dXJhbCBsYW5ndWFnZSBkZXNjcmlwdGlvbiBmdW5jdGlvbiB1c2luZyBSUnVsZSdzIGJ1aWx0LWluIGhlbHBlciBtZXRob2RzXG5mdW5jdGlvbiBnZXRSUnVsZURlc2NyaXB0aW9uKFxuICBycnVsZU9wdGlvbnM6IFJSdWxlT3B0aW9ucyB8IG51bGwsXG4gIHQ6IChrZXk6IHN0cmluZykgPT4gc3RyaW5nXG4pOiBzdHJpbmcge1xuICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgIHJldHVybiB0KCdjdXN0b21SZWN1cnJlbmNlJylcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gQ3JlYXRlIFJSdWxlIGluc3RhbmNlIGRpcmVjdGx5IGZyb20gb3B0aW9uc1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUlJ1bGUocnJ1bGVPcHRpb25zKVxuXG4gICAgLy8gVXNlIFJSdWxlJ3MgYnVpbHQtaW4gbmF0dXJhbCBsYW5ndWFnZSBjb252ZXJzaW9uIHdpdGggdG9UZXh0KClcbiAgICBjb25zdCBuYXR1cmFsVGV4dCA9IHJ1bGUudG9UZXh0KClcblxuICAgIC8vIEhhbmRsZSBjYXNlcyB3aGVyZSBSUnVsZSBjYW4ndCBjb252ZXJ0IHRvIG5hdHVyYWwgbGFuZ3VhZ2VcbiAgICBpZiAoXG4gICAgICAhbmF0dXJhbFRleHQgfHxcbiAgICAgIG5hdHVyYWxUZXh0LmluY2x1ZGVzKCdSUnVsZSBlcnJvcicpIHx8XG4gICAgICBuYXR1cmFsVGV4dC5pbmNsdWRlcygnVW5hYmxlIHRvIGZ1bGx5IGNvbnZlcnQnKSB8fFxuICAgICAgbmF0dXJhbFRleHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZXJyb3InKVxuICAgICkge1xuICAgICAgcmV0dXJuIHQoJ2N1c3RvbVJlY3VycmVuY2UnKVxuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZmlyc3QgbGV0dGVyIGZvciBjb25zaXN0ZW50IGZvcm1hdHRpbmdcbiAgICByZXR1cm4gbmF0dXJhbFRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYXR1cmFsVGV4dC5zbGljZSgxKVxuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBwYXJzaW5nIGZhaWxzLCByZXR1cm4gZmFsbGJhY2tcbiAgICByZXR1cm4gdCgnY3VzdG9tUmVjdXJyZW5jZScpXG4gIH1cbn1cblxuaW50ZXJmYWNlIFJlY3VycmVuY2VFZGl0b3JQcm9wcyB7XG4gIHZhbHVlPzogUlJ1bGVPcHRpb25zIHwgbnVsbFxuICBvbkNoYW5nZTogKHJydWxlT3B0aW9uczogUlJ1bGVPcHRpb25zIHwgbnVsbCkgPT4gdm9pZFxufVxuXG5leHBvcnQgY29uc3QgUmVjdXJyZW5jZUVkaXRvcjogUmVhY3QuRkM8UmVjdXJyZW5jZUVkaXRvclByb3BzPiA9ICh7XG4gIHZhbHVlLFxuICBvbkNoYW5nZSxcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuICBjb25zdCBbc2hvd1JlY3VycmVuY2UsIHNldFNob3dSZWN1cnJlbmNlXSA9IHVzZVN0YXRlKCEhdmFsdWUpXG5cbiAgLy8gQ3JlYXRlIFdFRUtfREFZUyBhcnJheSB3aXRoIHRyYW5zbGF0aW9uc1xuICBjb25zdCBXRUVLX0RBWVMgPSB1c2VNZW1vKFxuICAgICgpID0+IFtcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlNVLCBsYWJlbDogdCgnc3VuZGF5JyksIHNob3J0OiB0KCdzdW4nKSB9LFxuICAgICAgeyB2YWx1ZTogUlJ1bGUuTU8sIGxhYmVsOiB0KCdtb25kYXknKSwgc2hvcnQ6IHQoJ21vbicpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5UVSwgbGFiZWw6IHQoJ3R1ZXNkYXknKSwgc2hvcnQ6IHQoJ3R1ZScpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5XRSwgbGFiZWw6IHQoJ3dlZG5lc2RheScpLCBzaG9ydDogdCgnd2VkJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlRILCBsYWJlbDogdCgndGh1cnNkYXknKSwgc2hvcnQ6IHQoJ3RodScpIH0sXG4gICAgICB7IHZhbHVlOiBSUnVsZS5GUiwgbGFiZWw6IHQoJ2ZyaWRheScpLCBzaG9ydDogdCgnZnJpJykgfSxcbiAgICAgIHsgdmFsdWU6IFJSdWxlLlNBLCBsYWJlbDogdCgnc2F0dXJkYXknKSwgc2hvcnQ6IHQoJ3NhdCcpIH0sXG4gICAgXSxcbiAgICBbdF1cbiAgKVxuXG4gIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjb252ZXJ0IFJSdWxlIGZyZXF1ZW5jeSB0byBzdHJpbmdcbiAgY29uc3QgZ2V0RnJlcXVlbmN5U3RyaW5nID0gKGZyZXE6IFJSdWxlT3B0aW9uc1snZnJlcSddKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBmcmVxTWFwOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmc+ID0ge1xuICAgICAgW1JSdWxlLkRBSUxZXTogJ0RBSUxZJyxcbiAgICAgIFtSUnVsZS5XRUVLTFldOiAnV0VFS0xZJyxcbiAgICAgIFtSUnVsZS5NT05USExZXTogJ01PTlRITFknLFxuICAgICAgW1JSdWxlLllFQVJMWV06ICdZRUFSTFknLFxuICAgIH1cbiAgICByZXR1cm4gZnJlcU1hcFtmcmVxXSB8fCAnREFJTFknXG4gIH1cblxuICAvLyBXb3JrIHdpdGggY29tcGxldGUgUlJ1bGVPcHRpb25zIC0gZHRzdGFydCBjb21lcyBmcm9tIHBhcmVudCBFdmVudEZvcm1cbiAgY29uc3QgW3JydWxlT3B0aW9ucywgc2V0UlJ1bGVPcHRpb25zXSA9IHVzZVN0YXRlPFJSdWxlT3B0aW9ucyB8IG51bGw+KFxuICAgICgpID0+IHZhbHVlIHx8IG51bGxcbiAgKVxuXG4gIC8vIFN5bmMgc3RhdGUgd2hlbiB2YWx1ZSBwcm9wIGNoYW5nZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTaG93UmVjdXJyZW5jZSghIXZhbHVlKVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgc2V0UlJ1bGVPcHRpb25zKHZhbHVlKVxuICAgIH1cbiAgfSwgW3ZhbHVlXSlcblxuICBjb25zdCB1cGRhdGVSUnVsZSA9ICh1cGRhdGVzOiBQYXJ0aWFsPFJSdWxlT3B0aW9ucz4pID0+IHtcbiAgICBpZiAoIXJydWxlT3B0aW9ucykge1xuICAgICAgcmV0dXJuIC8vIENhbid0IHVwZGF0ZSBpZiBubyBiYXNlIG9wdGlvbnMgZXhpc3RcbiAgICB9XG5cbiAgICBjb25zdCBuZXdPcHRpb25zOiBSUnVsZU9wdGlvbnMgPSB7IC4uLnJydWxlT3B0aW9ucywgLi4udXBkYXRlcyB9XG4gICAgc2V0UlJ1bGVPcHRpb25zKG5ld09wdGlvbnMpXG5cbiAgICBpZiAoc2hvd1JlY3VycmVuY2UpIHtcbiAgICAgIG9uQ2hhbmdlKG5ld09wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKG51bGwpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUmVjdXJyZW5jZVRvZ2dsZSA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgc2V0U2hvd1JlY3VycmVuY2UoY2hlY2tlZClcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgaWYgKHJydWxlT3B0aW9ucykge1xuICAgICAgICBvbkNoYW5nZShycnVsZU9wdGlvbnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBSUnVsZSB3aGVuIHRvZ2dsaW5nIG9uIGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAgICAvLyBOb3RlOiBkdHN0YXJ0IHdpbGwgYmUgc2V0IGJ5IHRoZSBwYXJlbnQgRXZlbnRGb3JtXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSUnVsZTogUGFydGlhbDxSUnVsZU9wdGlvbnM+ID0ge1xuICAgICAgICAgIGZyZXE6IFJSdWxlLkRBSUxZLFxuICAgICAgICAgIGludGVydmFsOiAxLFxuICAgICAgICB9XG4gICAgICAgIHNldFJSdWxlT3B0aW9ucyhkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgICBvbkNoYW5nZShkZWZhdWx0UlJ1bGUgYXMgUlJ1bGVPcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZShudWxsKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZyZXF1ZW5jeUNoYW5nZSA9IChmcmVxdWVuY3k6IHN0cmluZykgPT4ge1xuICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFJSdWxlIGZyZXF1ZW5jeSBjb25zdGFudFxuICAgIGNvbnN0IGZyZXFNYXA6IFJlY29yZDxzdHJpbmcsIFJSdWxlT3B0aW9uc1snZnJlcSddPiA9IHtcbiAgICAgIERBSUxZOiBSUnVsZS5EQUlMWSxcbiAgICAgIFdFRUtMWTogUlJ1bGUuV0VFS0xZLFxuICAgICAgTU9OVEhMWTogUlJ1bGUuTU9OVEhMWSxcbiAgICAgIFlFQVJMWTogUlJ1bGUuWUVBUkxZLFxuICAgIH1cbiAgICB1cGRhdGVSUnVsZSh7IGZyZXE6IGZyZXFNYXBbZnJlcXVlbmN5XSB8fCBSUnVsZS5EQUlMWSB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlSW50ZXJ2YWxDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBpbnRlcnZhbCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGludGVydmFsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmRUeXBlQ2hhbmdlID0gKGVuZFR5cGU6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJykgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZXM6IFBhcnRpYWw8UlJ1bGVPcHRpb25zPiA9IHt9XG5cbiAgICBpZiAoZW5kVHlwZSA9PT0gJ25ldmVyJykge1xuICAgICAgLy8gUmVtb3ZlIGNvdW50IGFuZCB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHVuZGVmaW5lZFxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ2NvdW50Jykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgY291bnQgaWYgbm9uZSBleGlzdHMsIHJlbW92ZSB1bnRpbFxuICAgICAgdXBkYXRlcy5jb3VudCA9IHJydWxlT3B0aW9ucz8uY291bnQgfHwgMVxuICAgICAgdXBkYXRlcy51bnRpbCA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSBpZiAoZW5kVHlwZSA9PT0gJ3VudGlsJykge1xuICAgICAgLy8gU2V0IGRlZmF1bHQgdW50aWwgZGF0ZSBpZiBub25lIGV4aXN0cywgcmVtb3ZlIGNvdW50XG4gICAgICB1cGRhdGVzLnVudGlsID1cbiAgICAgICAgcnJ1bGVPcHRpb25zPy51bnRpbCB8fCBkYXlqcygpLmFkZCgxLCAnbW9udGgnKS5lbmRPZignZGF5JykudG9EYXRlKClcbiAgICAgIHVwZGF0ZXMuY291bnQgPSB1bmRlZmluZWRcbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh1cGRhdGVzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ291bnRDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBjb3VudCA9IE1hdGgubWF4KDEsIE51bWJlci5wYXJzZUludChlLnRhcmdldC52YWx1ZSkgfHwgMSlcbiAgICB1cGRhdGVSUnVsZSh7IGNvdW50IH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVFbmREYXRlQ2hhbmdlID0gKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpID0+IHtcbiAgICBjb25zdCB1bnRpbCA9IGRhdGUgPyBkYXlqcyhkYXRlKS5lbmRPZignZGF5JykudG9EYXRlKCkgOiB1bmRlZmluZWRcbiAgICB1cGRhdGVSUnVsZSh7IHVudGlsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEYXlUb2dnbGUgPSAoZGF5SW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHdlZWtkYXlNYXAgPSBbXG4gICAgICBSUnVsZS5TVSxcbiAgICAgIFJSdWxlLk1PLFxuICAgICAgUlJ1bGUuVFUsXG4gICAgICBSUnVsZS5XRSxcbiAgICAgIFJSdWxlLlRILFxuICAgICAgUlJ1bGUuRlIsXG4gICAgICBSUnVsZS5TQSxcbiAgICBdXG4gICAgY29uc3QgY3VycmVudFdlZWtkYXlzID0gKHJydWxlT3B0aW9ucz8uYnl3ZWVrZGF5IGFzIFdlZWtkYXlbXSkgfHwgW11cbiAgICBjb25zdCB0YXJnZXRXZWVrZGF5ID0gd2Vla2RheU1hcFtkYXlJbmRleF1cblxuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBjdXJyZW50V2Vla2RheXMuaW5jbHVkZXModGFyZ2V0V2Vla2RheSlcbiAgICBsZXQgbmV3V2Vla2RheXM6IFdlZWtkYXlbXVxuXG4gICAgaWYgKGlzU2VsZWN0ZWQpIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gY3VycmVudFdlZWtkYXlzLmZpbHRlcigoZGF5KSA9PiBkYXkgIT09IHRhcmdldFdlZWtkYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1dlZWtkYXlzID0gWy4uLmN1cnJlbnRXZWVrZGF5cywgdGFyZ2V0V2Vla2RheV1cbiAgICB9XG5cbiAgICB1cGRhdGVSUnVsZSh7XG4gICAgICBieXdlZWtkYXk6IG5ld1dlZWtkYXlzLmxlbmd0aCA+IDAgPyBuZXdXZWVrZGF5cyA6IHVuZGVmaW5lZCxcbiAgICB9KVxuICB9XG5cbiAgLy8gSGVscGVyIHRvIGRldGVybWluZSBlbmQgdHlwZSBmcm9tIGN1cnJlbnQgb3B0aW9uc1xuICBjb25zdCBnZXRFbmRUeXBlID0gKCk6ICduZXZlcicgfCAnY291bnQnIHwgJ3VudGlsJyA9PiB7XG4gICAgaWYgKHJydWxlT3B0aW9ucz8udW50aWwpIHtcbiAgICAgIHJldHVybiAndW50aWwnXG4gICAgfVxuICAgIGlmIChycnVsZU9wdGlvbnM/LmNvdW50KSB7XG4gICAgICByZXR1cm4gJ2NvdW50J1xuICAgIH1cbiAgICByZXR1cm4gJ25ldmVyJ1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2FyZCBkYXRhLXRlc3RpZD1cInJlY3VycmVuY2UtZWRpdG9yXCI+XG4gICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJwYi0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBpZD1cInJlY3VycmluZ1wiXG4gICAgICAgICAgICBjaGVja2VkPXtzaG93UmVjdXJyZW5jZX1cbiAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17aGFuZGxlUmVjdXJyZW5jZVRvZ2dsZX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9nZ2xlLXJlY3VycmVuY2VcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtXCI+e3QoJ3JlcGVhdCcpfTwvQ2FyZFRpdGxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dSZWN1cnJlbmNlICYmIHZhbHVlICYmIChcbiAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAge2dldFJSdWxlRGVzY3JpcHRpb24odmFsdWUsIHQpfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgKX1cbiAgICAgIDwvQ2FyZEhlYWRlcj5cblxuICAgICAge3Nob3dSZWN1cnJlbmNlICYmIChcbiAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB0LTBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgey8qIEZyZXF1ZW5jeSBTZWxlY3Rpb24gKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImZyZXF1ZW5jeVwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdyZXBlYXRzJyl9XG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17Z2V0RnJlcXVlbmN5U3RyaW5nKHJydWxlT3B0aW9ucz8uZnJlcSA/PyBSUnVsZS5EQUlMWSl9XG4gICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtoYW5kbGVGcmVxdWVuY3lDaGFuZ2V9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFNlbGVjdFRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJmcmVxdWVuY3lcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZyZXF1ZW5jeS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0VmFsdWUgLz5cbiAgICAgICAgICAgICAgICAgIDwvU2VsZWN0VHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgIDxTZWxlY3RDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIkRBSUxZXCI+e3QoJ2RhaWx5Jyl9PC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIldFRUtMWVwiPnt0KCd3ZWVrbHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RJdGVtIHZhbHVlPVwiTU9OVEhMWVwiPnt0KCdtb250aGx5Jyl9PC9TZWxlY3RJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8U2VsZWN0SXRlbSB2YWx1ZT1cIllFQVJMWVwiPnt0KCd5ZWFybHknKX08L1NlbGVjdEl0ZW0+XG4gICAgICAgICAgICAgICAgICA8L1NlbGVjdENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9TZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJpbnRlcnZhbFwiIGNsYXNzTmFtZT1cInRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgIHt0KCdldmVyeScpfVxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICBpZD1cImludGVydmFsXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17cnJ1bGVPcHRpb25zPy5pbnRlcnZhbCB8fCAxfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUludGVydmFsQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogV2Vla2x5IERheSBTZWxlY3Rpb24gKi99XG4gICAgICAgICAgICB7cnJ1bGVPcHRpb25zPy5mcmVxID09PSBSUnVsZS5XRUVLTFkgJiYgKFxuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e3QoJ3JlcGVhdE9uJyl9PC9MYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGdhcC0xIG10LTFcIj5cbiAgICAgICAgICAgICAgICAgIHtXRUVLX0RBWVMubWFwKChkYXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5d2Vla2RheUFycmF5ID0gQXJyYXkuaXNBcnJheShcbiAgICAgICAgICAgICAgICAgICAgICBycnVsZU9wdGlvbnM/LmJ5d2Vla2RheVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgPyBycnVsZU9wdGlvbnMuYnl3ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgOiBycnVsZU9wdGlvbnM/LmJ5d2Vla2RheVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbcnJ1bGVPcHRpb25zLmJ5d2Vla2RheV1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogW11cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGJ5d2Vla2RheUFycmF5LmluY2x1ZGVzKGRheS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2BkYXktJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2BkYXktJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoZWNrZWRDaGFuZ2U9eygpID0+IGhhbmRsZURheVRvZ2dsZShpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxGb3I9e2BkYXktJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LXhzIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2RheS5zaG9ydH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHsvKiBFbmQgQ29uZGl0aW9uICovfVxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPExhYmVsIGNsYXNzTmFtZT1cInRleHQteHNcIj57dCgnZW5kcycpfTwvTGFiZWw+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yIG10LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICduZXZlcid9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgnbmV2ZXInKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cIm5ldmVyXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICB7dCgnbmV2ZXInKX1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtnZXRFbmRUeXBlKCkgPT09ICdjb3VudCd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KCkgPT4gaGFuZGxlRW5kVHlwZUNoYW5nZSgnY291bnQnKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TGFiZWwgaHRtbEZvcj1cImFmdGVyXCIgY2xhc3NOYW1lPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICB7dCgnYWZ0ZXInKX1cbiAgICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgICAgICB7Z2V0RW5kVHlwZSgpID09PSAnY291bnQnICYmIChcbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgbWluPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3JydWxlT3B0aW9ucz8uY291bnQgfHwgMX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ291bnRDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC02IHctMTYgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjb3VudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPnt0KCdvY2N1cnJlbmNlcycpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJvblwiXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2dldEVuZFR5cGUoKSA9PT0gJ3VudGlsJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlPXsoKSA9PiBoYW5kbGVFbmRUeXBlQ2hhbmdlKCd1bnRpbCcpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwib25cIiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdvbicpfVxuICAgICAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgICAgIHtnZXRFbmRUeXBlKCkgPT09ICd1bnRpbCcgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8RGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgIGRhdGU9e3JydWxlT3B0aW9ucz8udW50aWx9XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RGF0ZT17aGFuZGxlRW5kRGF0ZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTZcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9DYXJkQ29udGVudD5cbiAgICAgICl9XG4gICAgPC9DYXJkPlxuICApXG59XG4iLAogICAgImltcG9ydCB7XG4gIERpYWxvZyxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dUaXRsZSxcbiAgQnV0dG9uLFxufSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5cbmludGVyZmFjZSBSZWN1cnJlbmNlRWRpdERpYWxvZ1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWRcbiAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcbiAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnIHwgJ2RlbGV0ZSdcbiAgZXZlbnRUaXRsZTogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWN1cnJlbmNlRWRpdERpYWxvZyh7XG4gIGlzT3BlbixcbiAgb25DbG9zZSxcbiAgb25Db25maXJtLFxuICBvcGVyYXRpb25UeXBlLFxuICBldmVudFRpdGxlLFxufTogUmVjdXJyZW5jZUVkaXREaWFsb2dQcm9wcykge1xuICBjb25zdCB7IHQgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChjb250ZXh0KSA9PiAoeyB0OiBjb250ZXh0LnQgfSkpXG5cbiAgY29uc3QgaGFuZGxlU2NvcGVTZWxlY3QgPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICBvbkNvbmZpcm0oc2NvcGUpXG4gICAgb25DbG9zZSgpXG4gIH1cblxuICBjb25zdCBpc0VkaXQgPSBvcGVyYXRpb25UeXBlID09PSAnZWRpdCdcblxuICByZXR1cm4gKFxuICAgIDxEaWFsb2cgb3Blbj17aXNPcGVufSBvbk9wZW5DaGFuZ2U9e29uQ2xvc2V9PlxuICAgICAgPERpYWxvZ0NvbnRlbnQgY2xhc3NOYW1lPVwibWF4LXctbWRcIj5cbiAgICAgICAgPERpYWxvZ0hlYWRlcj5cbiAgICAgICAgICA8RGlhbG9nVGl0bGU+XG4gICAgICAgICAgICB7aXNFZGl0ID8gdCgnZWRpdFJlY3VycmluZ0V2ZW50JykgOiB0KCdkZWxldGVSZWN1cnJpbmdFdmVudCcpfVxuICAgICAgICAgIDwvRGlhbG9nVGl0bGU+XG4gICAgICAgICAgPERpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICAgICAgXCJ7ZXZlbnRUaXRsZX1cInsnICd9XG4gICAgICAgICAgICB7aXNFZGl0XG4gICAgICAgICAgICAgID8gdCgnZWRpdFJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKVxuICAgICAgICAgICAgICA6IHQoJ2RlbGV0ZVJlY3VycmluZ0V2ZW50UXVlc3Rpb24nKX1cbiAgICAgICAgICA8L0RpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICA8L0RpYWxvZ0hlYWRlcj5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktM1wiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cInctZnVsbCBqdXN0aWZ5LXN0YXJ0IGgtYXV0byBwLTRcIlxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2NvcGVTZWxlY3QoJ3RoaXMnKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+e3QoJ3RoaXNFdmVudCcpfTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAge2lzRWRpdCA/IHQoJ29ubHlDaGFuZ2VUaGlzJykgOiB0KCdvbmx5RGVsZXRlVGhpcycpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnZm9sbG93aW5nJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCd0aGlzQW5kRm9sbG93aW5nRXZlbnRzJyl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICB7aXNFZGl0ID8gdCgnY2hhbmdlVGhpc0FuZEZ1dHVyZScpIDogdCgnZGVsZXRlVGhpc0FuZEZ1dHVyZScpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGp1c3RpZnktc3RhcnQgaC1hdXRvIHAtNFwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTY29wZVNlbGVjdCgnYWxsJyl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPnt0KCdhbGxFdmVudHMnKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgIHtpc0VkaXQgPyB0KCdjaGFuZ2VFbnRpcmVTZXJpZXMnKSA6IHQoJ2RlbGV0ZUVudGlyZVNlcmllcycpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8RGlhbG9nRm9vdGVyPlxuICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cIm91dGxpbmVcIiBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgICAgICAgIHt0KCdjYW5jZWwnKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9EaWFsb2dGb290ZXI+XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VTbWFydENhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvaG9va3MvdXNlLXNtYXJ0LWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFJlY3VycmVuY2VFZGl0U2NvcGUgfSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdHlwZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZWN1cnJpbmdFdmVudEFjdGlvbnMob25Db21wbGV0ZT86ICgpID0+IHZvaWQpIHtcbiAgY29uc3QgeyB1cGRhdGVSZWN1cnJpbmdFdmVudCwgZGVsZXRlUmVjdXJyaW5nRXZlbnQgfSA9XG4gICAgdXNlU21hcnRDYWxlbmRhckNvbnRleHQoKGNvbnRleHQpID0+ICh7XG4gICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudDogY29udGV4dC51cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjb250ZXh0LmRlbGV0ZVJlY3VycmluZ0V2ZW50LFxuICAgIH0pKVxuXG4gIGNvbnN0IFtkaWFsb2dTdGF0ZSwgc2V0RGlhbG9nU3RhdGVdID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyB8ICdkZWxldGUnXG4gICAgZXZlbnQ6IENhbGVuZGFyRXZlbnQgfCBudWxsXG4gICAgdXBkYXRlcz86IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgICBvbkNvbmZpcm0/OiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHZvaWRcbiAgfT4oe1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgIGV2ZW50OiBudWxsLFxuICB9KVxuXG4gIGNvbnN0IG9wZW5FZGl0RGlhbG9nID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50LCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+KSA9PiB7XG4gICAgICBzZXREaWFsb2dTdGF0ZSh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogJ2VkaXQnLFxuICAgICAgICBldmVudCxcbiAgICAgICAgdXBkYXRlcyxcbiAgICAgICAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgICAgICB1cGRhdGVSZWN1cnJpbmdFdmVudChldmVudCwgdXBkYXRlcywge1xuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW3VwZGF0ZVJlY3VycmluZ0V2ZW50XVxuICApXG5cbiAgY29uc3Qgb3BlbkRlbGV0ZURpYWxvZyA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIG9wZXJhdGlvblR5cGU6ICdkZWxldGUnLFxuICAgICAgICBldmVudCxcbiAgICAgICAgb25Db25maXJtOiAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgICAgICBkZWxldGVSZWN1cnJpbmdFdmVudChldmVudCwge1xuICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICBldmVudERhdGU6IGV2ZW50LnN0YXJ0LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2RlbGV0ZVJlY3VycmluZ0V2ZW50XVxuICApXG5cbiAgY29uc3QgY2xvc2VEaWFsb2cgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RGlhbG9nU3RhdGUoe1xuICAgICAgaXNPcGVuOiBmYWxzZSxcbiAgICAgIG9wZXJhdGlvblR5cGU6ICdlZGl0JyxcbiAgICAgIGV2ZW50OiBudWxsLFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm0gPSB1c2VDYWxsYmFjayhcbiAgICAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICAgIGlmIChkaWFsb2dTdGF0ZS5vbkNvbmZpcm0pIHtcbiAgICAgICAgZGlhbG9nU3RhdGUub25Db25maXJtKHNjb3BlKVxuICAgICAgfVxuICAgICAgY2xvc2VEaWFsb2coKVxuICAgICAgLy8gQ2FsbCBvbkNvbXBsZXRlIHRvIGNsb3NlIHRoZSBwYXJlbnQgZm9ybVxuICAgICAgb25Db21wbGV0ZT8uKClcbiAgICB9LFxuICAgIFtkaWFsb2dTdGF0ZSwgY2xvc2VEaWFsb2csIG9uQ29tcGxldGVdXG4gIClcblxuICByZXR1cm4ge1xuICAgIGRpYWxvZ1N0YXRlLFxuICAgIG9wZW5FZGl0RGlhbG9nLFxuICAgIG9wZW5EZWxldGVEaWFsb2csXG4gICAgY2xvc2VEaWFsb2csXG4gICAgaGFuZGxlQ29uZmlybSxcbiAgfVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vKipcbiAqIEV4cG9ydCBjYWxlbmRhciBldmVudHMgdG8gaUNhbGVuZGFyICguaWNhbCkgZm9ybWF0XG4gKiBGdWxseSBSRkMgNTU0NSBjb21wbGlhbnQgaUNhbGVuZGFyIGdlbmVyYXRpb25cbiAqL1xuXG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaUNhbGVuZGFyIHRleHQgZmllbGRzXG4gKi9cbmNvbnN0IGVzY2FwZUlDYWxUZXh0ID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJ1xcXFwnLCAnXFxcXFxcXFwnKSAvLyBFc2NhcGUgYmFja3NsYXNoZXNcbiAgICAucmVwbGFjZUFsbCgnOycsICdcXFxcOycpIC8vIEVzY2FwZSBzZW1pY29sb25zXG4gICAgLnJlcGxhY2VBbGwoJywnLCAnXFxcXCwnKSAvLyBFc2NhcGUgY29tbWFzXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICdcXFxcbicpIC8vIEVzY2FwZSBuZXdsaW5lc1xuICAgIC5yZXBsYWNlQWxsKCdcXHInLCAnJykgLy8gUmVtb3ZlIGNhcnJpYWdlIHJldHVybnNcbn1cblxuLyoqXG4gKiBGb3JtYXQgZGF0ZSBmb3IgaUNhbGVuZGFyIGZvcm1hdCAoWVlZWU1NRERUSEhNTVNTWiBmb3IgVVRDKVxuICovXG5jb25zdCBmb3JtYXRJQ2FsRGF0ZSA9IChkYXRlOiBkYXlqcy5EYXlqcywgYWxsRGF5ID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xuICBpZiAoYWxsRGF5KSB7XG4gICAgcmV0dXJuIGRhdGUuZm9ybWF0KCdZWVlZTU1ERCcpXG4gIH1cbiAgcmV0dXJuIGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgVUlEIGZvciBhbiBldmVudCBpZiBub3QgYWxyZWFkeSBwcmVzZW50XG4gKi9cbmNvbnN0IGdlbmVyYXRlVUlEID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KTogc3RyaW5nID0+IHtcbiAgaWYgKGV2ZW50LnVpZCkge1xuICAgIHJldHVybiBldmVudC51aWRcbiAgfVxuICByZXR1cm4gYCR7ZXZlbnQuaWR9QGlsYW15LmNhbGVuZGFyYFxufVxuXG4vKipcbiAqIENvbnZlcnQgUlJ1bGVPcHRpb25zIHRvIGlDYWxlbmRhciBSUlVMRSBzdHJpbmdcbiAqL1xuY29uc3QgZm9ybWF0UlJ1bGUgPSAocnJ1bGVPcHRpb25zOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgdHJ5IHtcbiAgICAvLyBDcmVhdGUgUlJ1bGUgaW5zdGFuY2Ugd2l0aCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RpbmdcbiAgICBjb25zdCBydWxlID0gbmV3IFJSdWxlKFxuICAgICAgcnJ1bGVPcHRpb25zIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgUlJ1bGU+WzBdXG4gICAgKVxuICAgIGNvbnN0IHJydWxlU3RyaW5nID0gcnVsZS50b1N0cmluZygpXG4gICAgLy8gRXh0cmFjdCBqdXN0IHRoZSBSUlVMRSBwYXJ0IChyZW1vdmUgRFRTVEFSVCBpZiBwcmVzZW50KVxuICAgIGNvbnN0IHJydWxlUGFydCA9IHJydWxlU3RyaW5nXG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmluZCgobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKCdSUlVMRTonKSlcbiAgICByZXR1cm4gcnJ1bGVQYXJ0IHx8ICcnXG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBhIHNpbmdsZSBDYWxlbmRhckV2ZW50IHRvIGlDYWxlbmRhciBWRVZFTlQgc3RyaW5nXG4gKi9cbmNvbnN0IGV2ZW50VG9JQ2FsRXZlbnQgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXVxuXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZFVkVOVCcpXG5cbiAgLy8gVUlEIChyZXF1aXJlZClcbiAgbGluZXMucHVzaChgVUlEOiR7Z2VuZXJhdGVVSUQoZXZlbnQpfWApXG5cbiAgLy8gRFRTVEFSVCAocmVxdWlyZWQpXG4gIGNvbnN0IGR0c3RhcnQgPSBmb3JtYXRJQ2FsRGF0ZShldmVudC5zdGFydCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRTVEFSVDtWQUxVRT1EQVRFOiR7ZHRzdGFydH1gKVxuICB9IGVsc2Uge1xuICAgIGxpbmVzLnB1c2goYERUU1RBUlQ6JHtkdHN0YXJ0fWApXG4gIH1cblxuICAvLyBEVEVORCAocmVxdWlyZWQgZm9yIGV2ZW50cyB3aXRoIGR1cmF0aW9uKVxuICBjb25zdCBkdGVuZCA9IGZvcm1hdElDYWxEYXRlKGV2ZW50LmVuZCwgZXZlbnQuYWxsRGF5KVxuICBpZiAoZXZlbnQuYWxsRGF5KSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ7VkFMVUU9REFURToke2R0ZW5kfWApXG4gIH0gZWxzZSB7XG4gICAgbGluZXMucHVzaChgRFRFTkQ6JHtkdGVuZH1gKVxuICB9XG5cbiAgLy8gU1VNTUFSWSAodGl0bGUpXG4gIGxpbmVzLnB1c2goYFNVTU1BUlk6JHtlc2NhcGVJQ2FsVGV4dChldmVudC50aXRsZSl9YClcblxuICAvLyBERVNDUklQVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5kZXNjcmlwdGlvbikge1xuICAgIGxpbmVzLnB1c2goYERFU0NSSVBUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQuZGVzY3JpcHRpb24pfWApXG4gIH1cblxuICAvLyBMT0NBVElPTiAob3B0aW9uYWwpXG4gIGlmIChldmVudC5sb2NhdGlvbikge1xuICAgIGxpbmVzLnB1c2goYExPQ0FUSU9OOiR7ZXNjYXBlSUNhbFRleHQoZXZlbnQubG9jYXRpb24pfWApXG4gIH1cblxuICAvLyBSUlVMRSAocmVjdXJyZW5jZSBydWxlKVxuICBpZiAoZXZlbnQucnJ1bGUpIHtcbiAgICBjb25zdCBycnVsZVN0cmluZyA9IGZvcm1hdFJSdWxlKGV2ZW50LnJydWxlKVxuICAgIGlmIChycnVsZVN0cmluZykge1xuICAgICAgbGluZXMucHVzaChycnVsZVN0cmluZylcbiAgICB9XG4gIH1cblxuICAvLyBFWERBVEUgKGV4Y2VwdGlvbiBkYXRlcylcbiAgaWYgKGV2ZW50LmV4ZGF0ZXMgJiYgZXZlbnQuZXhkYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXhkYXRlcyA9IGV2ZW50LmV4ZGF0ZXNcbiAgICAgIC5tYXAoKGRhdGVTdHIpID0+IGZvcm1hdElDYWxEYXRlKGRheWpzKGRhdGVTdHIpLCBldmVudC5hbGxEYXkpKVxuICAgICAgLmpvaW4oJywnKVxuICAgIGxpbmVzLnB1c2goYEVYREFURToke2V4ZGF0ZXN9YClcbiAgfVxuXG4gIC8vIFJFQ1VSUkVOQ0UtSUQgKGZvciBtb2RpZmllZCBpbnN0YW5jZXMpXG4gIGlmIChldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICBjb25zdCByZWN1cnJlbmNlSWQgPSBmb3JtYXRJQ2FsRGF0ZShkYXlqcyhldmVudC5yZWN1cnJlbmNlSWQpLCBldmVudC5hbGxEYXkpXG4gICAgbGluZXMucHVzaChgUkVDVVJSRU5DRS1JRDoke3JlY3VycmVuY2VJZH1gKVxuICB9XG5cbiAgLy8gRFRTVEFNUCAocmVxdWlyZWQgLSB3aGVuIHRoaXMgd2FzIGNyZWF0ZWQvbW9kaWZpZWQpXG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjKCkuZm9ybWF0KCdZWVlZTU1ERFtUXUhIbW1zc1taXScpXG4gIGxpbmVzLnB1c2goYERUU1RBTVA6JHtub3d9YClcblxuICAvLyBDUkVBVEVEICh3aGVuIGV2ZW50IHdhcyBjcmVhdGVkKVxuICBsaW5lcy5wdXNoKGBDUkVBVEVEOiR7bm93fWApXG5cbiAgLy8gTEFTVC1NT0RJRklFRCAod2hlbiBldmVudCB3YXMgbGFzdCBtb2RpZmllZClcbiAgbGluZXMucHVzaChgTEFTVC1NT0RJRklFRDoke25vd31gKVxuXG4gIC8vIFNUQVRVUyAoZGVmYXVsdCB0byBDT05GSVJNRUQpXG4gIGxpbmVzLnB1c2goJ1NUQVRVUzpDT05GSVJNRUQnKVxuXG4gIC8vIFNFUVVFTkNFICh2ZXJzaW9uIG51bWJlciwgZGVmYXVsdCB0byAwKVxuICBsaW5lcy5wdXNoKCdTRVFVRU5DRTowJylcblxuICAvLyBUUkFOU1AgKHRyYW5zcGFyZW5jeSAtIE9QQVFVRSBmb3IgYnVzeSB0aW1lKVxuICBsaW5lcy5wdXNoKCdUUkFOU1A6T1BBUVVFJylcblxuICBsaW5lcy5wdXNoKCdFTkQ6VkVWRU5UJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICogLSBJbmNsdWRlIGJhc2UgcmVjdXJyaW5nIGV2ZW50cyAod2l0aCBSUlVMRSlcbiAqIC0gSW5jbHVkZSBtb2RpZmllZCBpbnN0YW5jZXMgKHdpdGggcmVjdXJyZW5jZUlkKVxuICogLSBJbmNsdWRlIG5vbi1yZWN1cnJpbmcgZXZlbnRzXG4gKiAtIEVYQ0xVREUgZ2VuZXJhdGVkIHJlY3VycmluZyBpbnN0YW5jZXMgKG5vIHJydWxlLCBubyByZWN1cnJlbmNlSWQpXG4gKi9cbmNvbnN0IGZpbHRlckV2ZW50c0ZvckV4cG9ydCA9IChldmVudHM6IENhbGVuZGFyRXZlbnRbXSk6IENhbGVuZGFyRXZlbnRbXSA9PiB7XG4gIGNvbnN0IGV4cG9ydEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW11cbiAgY29uc3QgcHJvY2Vzc2VkVUlEcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAvLyBHZXQgb3IgZ2VuZXJhdGUgVUlEIGZvciB0aGUgZXZlbnRcbiAgICBjb25zdCBldmVudFVJRCA9IGV2ZW50LnVpZCB8fCBgJHtldmVudC5pZH1AaWxhbXkuY2FsZW5kYXJgXG5cbiAgICAvLyBDYXNlIDE6IEJhc2UgcmVjdXJyaW5nIGV2ZW50IChoYXMgUlJVTEUsIG5vIHJlY3VycmVuY2VJZClcbiAgICBpZiAoZXZlbnQucnJ1bGUgJiYgIWV2ZW50LnJlY3VycmVuY2VJZCkge1xuICAgICAgZXhwb3J0RXZlbnRzLnB1c2goZXZlbnQpXG4gICAgICBwcm9jZXNzZWRVSURzLmFkZChldmVudFVJRClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAyOiBNb2RpZmllZCByZWN1cnJpbmcgaW5zdGFuY2UgKGhhcyByZWN1cnJlbmNlSWQsIG5vIFJSVUxFKVxuICAgIGlmIChldmVudC5yZWN1cnJlbmNlSWQgJiYgIWV2ZW50LnJydWxlKSB7XG4gICAgICBleHBvcnRFdmVudHMucHVzaChldmVudClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gQ2FzZSAzOiBOb24tcmVjdXJyaW5nIGV2ZW50IChubyBSUlVMRSwgbm8gcmVjdXJyZW5jZUlkLCBubyBVSUQgcGF0dGVybilcbiAgICBpZiAoIWV2ZW50LnJydWxlICYmICFldmVudC5yZWN1cnJlbmNlSWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBnZW5lcmF0ZWQgaW5zdGFuY2UgYnkgVUlEIHBhdHRlcm5cbiAgICAgIGNvbnN0IGlzR2VuZXJhdGVkSW5zdGFuY2UgPSBwcm9jZXNzZWRVSURzLmhhcyhldmVudFVJRClcblxuICAgICAgaWYgKCFpc0dlbmVyYXRlZEluc3RhbmNlKSB7XG4gICAgICAgIGV4cG9ydEV2ZW50cy5wdXNoKGV2ZW50KVxuICAgICAgfVxuICAgICAgLy8gU2tpcCBnZW5lcmF0ZWQgaW5zdGFuY2VzIC0gdGhleSdsbCBiZSByZWNyZWF0ZWQgYnkgUlJVTEVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwb3J0RXZlbnRzXG59XG5cbi8qKlxuICogRXhwb3J0IGV2ZW50cyB0byBpQ2FsZW5kYXIgZm9ybWF0XG4gKi9cbmV4cG9ydCBjb25zdCBleHBvcnRUb0lDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdXG5cbiAgLy8gQ2FsZW5kYXIgaGVhZGVyXG4gIGxpbmVzLnB1c2goJ0JFR0lOOlZDQUxFTkRBUicpXG4gIGxpbmVzLnB1c2goJ1ZFUlNJT046Mi4wJylcbiAgbGluZXMucHVzaCgnUFJPRElEOi0vL2lsYW15Ly9pbGFteSBDYWxlbmRhci8vRU4nKVxuICBsaW5lcy5wdXNoKCdDQUxTQ0FMRTpHUkVHT1JJQU4nKVxuICBsaW5lcy5wdXNoKCdNRVRIT0Q6UFVCTElTSCcpXG4gIGxpbmVzLnB1c2goYFgtV1ItQ0FMTkFNRToke2VzY2FwZUlDYWxUZXh0KGNhbGVuZGFyTmFtZSl9YClcbiAgbGluZXMucHVzaChgWC1XUi1DQUxERVNDOiR7ZXNjYXBlSUNhbFRleHQoYEV4cG9ydGVkIGZyb20gJHtjYWxlbmRhck5hbWV9YCl9YClcblxuICAvLyBBZGQgdGltZXpvbmUgaW5mb3JtYXRpb24gKFVUQylcbiAgbGluZXMucHVzaCgnQkVHSU46VlRJTUVaT05FJylcbiAgbGluZXMucHVzaCgnVFpJRDpVVEMnKVxuICBsaW5lcy5wdXNoKCdCRUdJTjpTVEFOREFSRCcpXG4gIGxpbmVzLnB1c2goJ0RUU1RBUlQ6MTk3MDAxMDFUMDAwMDAwJylcbiAgbGluZXMucHVzaCgnVFpOQU1FOlVUQycpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VURlJPTTorMDAwMCcpXG4gIGxpbmVzLnB1c2goJ1RaT0ZGU0VUVE86KzAwMDAnKVxuICBsaW5lcy5wdXNoKCdFTkQ6U1RBTkRBUkQnKVxuICBsaW5lcy5wdXNoKCdFTkQ6VlRJTUVaT05FJylcblxuICAvLyBGaWx0ZXIgZXZlbnRzIGZvciBwcm9wZXIgaUNhbGVuZGFyIGV4cG9ydFxuICBjb25zdCBmaWx0ZXJlZEV2ZW50cyA9IGZpbHRlckV2ZW50c0ZvckV4cG9ydChldmVudHMpXG5cbiAgLy8gQWRkIGVhY2ggZmlsdGVyZWQgZXZlbnRcbiAgZmlsdGVyZWRFdmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICBsaW5lcy5wdXNoKGV2ZW50VG9JQ2FsRXZlbnQoZXZlbnQpKVxuICB9KVxuXG4gIC8vIENhbGVuZGFyIGZvb3RlclxuICBsaW5lcy5wdXNoKCdFTkQ6VkNBTEVOREFSJylcblxuICByZXR1cm4gbGluZXMuam9pbignXFxyXFxuJylcbn1cblxuLyoqXG4gKiBEb3dubG9hZCBpQ2FsZW5kYXIgZmlsZSB0byB1c2VyJ3MgZGV2aWNlXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZElDYWxlbmRhciA9IChcbiAgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10sXG4gIGZpbGVuYW1lID0gJ2NhbGVuZGFyLmljcycsXG4gIGNhbGVuZGFyTmFtZSA9ICdpbGFteSBDYWxlbmRhcidcbik6IHZvaWQgPT4ge1xuICBjb25zdCBpY2FsQ29udGVudCA9IGV4cG9ydFRvSUNhbGVuZGFyKGV2ZW50cywgY2FsZW5kYXJOYW1lKVxuXG4gIC8vIENyZWF0ZSBibG9iIGFuZCBkb3dubG9hZFxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ljYWxDb250ZW50XSwge1xuICAgIHR5cGU6ICd0ZXh0L2NhbGVuZGFyO2NoYXJzZXQ9dXRmLTgnLFxuICB9KVxuXG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcbiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICBsaW5rLmhyZWYgPSB1cmxcbiAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lLmVuZHNXaXRoKCcuaWNzJykgPyBmaWxlbmFtZSA6IGAke2ZpbGVuYW1lfS5pY3NgXG5cbiAgLy8gVHJpZ2dlciBkb3dubG9hZFxuICBkb2N1bWVudC5ib2R5LmFwcGVuZChsaW5rKVxuICBsaW5rLmNsaWNrKClcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuXG4gIC8vIENsZWFuIHVwXG4gIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxufVxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgZG93bmxvYWRJQ2FsZW5kYXIgfSBmcm9tICdAL2xpYi91dGlscy9leHBvcnQtaWNhbCdcbmltcG9ydCB7IENhbGVuZGFyIGFzIENhbGVuZGFySWNvbiwgRG93bmxvYWQsIE1lbnUsIFBsdXMgfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgVGl0bGVDb250ZW50IGZyb20gJy4vdGl0bGUtY29udGVudCdcbmltcG9ydCBWaWV3Q29udHJvbHMgZnJvbSAnLi92aWV3LWNvbnRyb2xzJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYidcblxuaW50ZXJmYWNlIEhlYWRlclByb3BzIHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG59XG5cbmNvbnN0IEhlYWRlcjogUmVhY3QuRkM8SGVhZGVyUHJvcHM+ID0gKHsgY2xhc3NOYW1lID0gJycgfSkgPT4ge1xuICBjb25zdCB7XG4gICAgdmlldyxcbiAgICBzZXRWaWV3LFxuICAgIG5leHRQZXJpb2QsXG4gICAgcHJldlBlcmlvZCxcbiAgICB0b2RheSxcbiAgICBvcGVuRXZlbnRGb3JtLFxuICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICBoZWFkZXJDbGFzc05hbWUsXG4gICAgcmF3RXZlbnRzLFxuICAgIHQsXG4gIH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcbiAgICB2aWV3OiBjb250ZXh0LnZpZXcsXG4gICAgc2V0VmlldzogY29udGV4dC5zZXRWaWV3LFxuICAgIG5leHRQZXJpb2Q6IGNvbnRleHQubmV4dFBlcmlvZCxcbiAgICBwcmV2UGVyaW9kOiBjb250ZXh0LnByZXZQZXJpb2QsXG4gICAgdG9kYXk6IGNvbnRleHQudG9kYXksXG4gICAgb3BlbkV2ZW50Rm9ybTogY29udGV4dC5vcGVuRXZlbnRGb3JtLFxuICAgIGhlYWRlckNvbXBvbmVudDogY29udGV4dC5oZWFkZXJDb21wb25lbnQsXG4gICAgaGVhZGVyQ2xhc3NOYW1lOiBjb250ZXh0LmhlYWRlckNsYXNzTmFtZSxcbiAgICByYXdFdmVudHM6IGNvbnRleHQucmF3RXZlbnRzLFxuICAgIHQ6IGNvbnRleHQudCxcbiAgfSkpXG5cbiAgLy8gU3RhdGUgZm9yIG1vYmlsZSBtZW51IHBvcG92ZXJcbiAgY29uc3QgW21vYmlsZVBvcG92ZXJPcGVuLCBzZXRNb2JpbGVQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAvLyBIYW5kbGUgdmlldyBjaGFuZ2Ugd2l0aCBvcHRpb25hbCBwb3BvdmVyIGNsb3NpbmdcbiAgY29uc3QgaGFuZGxlVmlld0NoYW5nZSA9IChcbiAgICBuZXdWaWV3OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicsXG4gICAgY2xvc2VQb3BvdmVyID0gZmFsc2VcbiAgKSA9PiB7XG4gICAgc2V0VmlldyhuZXdWaWV3KVxuICAgIGlmIChjbG9zZVBvcG92ZXIpIHtcbiAgICAgIHNldE1vYmlsZVBvcG92ZXJPcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBpQ2FsZW5kYXIgZXhwb3J0XG4gIGNvbnN0IGhhbmRsZUV4cG9ydCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGBpbGFteS1jYWxlbmRhci0ke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdfS5pY3NgXG4gICAgZG93bmxvYWRJQ2FsZW5kYXIocmF3RXZlbnRzLCBmaWxlbmFtZSwgJ2lsYW15IENhbGVuZGFyJylcbiAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgfSwgW3Jhd0V2ZW50c10pXG5cbiAgLy8gQ2FsbGJhY2sgZm9yIG5hdmlnYXRpb24gdGhhdCBhbHNvIGNsb3NlcyB0aGUgbW9iaWxlIHBvcG92ZXJcbiAgY29uc3QgaGFuZGxlTmF2aWdhdGlvbiA9IHtcbiAgICB0b2RheTogKCkgPT4ge1xuICAgICAgdG9kYXkoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgcHJldlBlcmlvZCgpXG4gICAgICBzZXRNb2JpbGVQb3BvdmVyT3BlbihmYWxzZSlcbiAgICB9LFxuICAgIG5leHQ6ICgpID0+IHtcbiAgICAgIG5leHRQZXJpb2QoKVxuICAgICAgc2V0TW9iaWxlUG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IE5ld0V2ZW50QnV0dG9uID0gdXNlQ2FsbGJhY2soXG4gICAgKCkgPT4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb3BlbkV2ZW50Rm9ybSgpfVxuICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxQbHVzIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsOmlubGluZVwiPnt0KCduZXcnKX08L3NwYW4+XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgKSxcbiAgICBbb3BlbkV2ZW50Rm9ybSwgdF1cbiAgKVxuXG4gIGlmIChoZWFkZXJDb21wb25lbnQpIHtcbiAgICAvLyBSZW5kZXIgY3VzdG9tIGhlYWRlciBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgICByZXR1cm4gaGVhZGVyQ29tcG9uZW50XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7LyogQ2FsZW5kYXIgSGVhZGVyIHdpdGggZ3JpZCBsYXlvdXQgKi99XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIvYmFzZS1oZWFkZXIgdy1mdWxsXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYWxlbmRhci1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdmbGV4IGp1c3RpZnktY2VudGVyIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1iZXR3ZWVuIGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgYm9yZGVyLWInLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgaGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIHsvKiBUaXRsZSBhcmVhIC0gTGVmdCBzZWN0aW9uICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xIEAyeGwvYmFzZS1oZWFkZXI6anVzdGlmeS1zdGFydFwiPlxuICAgICAgICAgICAgPENhbGVuZGFySWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDxUaXRsZUNvbnRlbnQgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBOZXcgZXZlbnQgYnV0dG9uIC0gTW9iaWxlICYgRGVza3RvcCAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC13cmFwIGp1c3RpZnktc3RhcnQgQHhsL2Jhc2UtaGVhZGVyOmp1c3RpZnktY2VudGVyIGdhcC0xIEA0eGwvYmFzZS1oZWFkZXI6anVzdGlmeS1lbmQgb3ZlcmZsb3cteC1hdXRvXCI+XG4gICAgICAgICAgICB7LyogRGVza3RvcCBjb250cm9scyAtIGNlbnRyYWxpemVkICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gQG1kL2Jhc2UtaGVhZGVyOmZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRWaWV3fVxuICAgICAgICAgICAgICAgIG9uVG9kYXk9e3RvZGF5fVxuICAgICAgICAgICAgICAgIG9uTmV4dD17bmV4dFBlcmlvZH1cbiAgICAgICAgICAgICAgICBvblByZXZpb3VzPXtwcmV2UGVyaW9kfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJqdXN0aWZ5LWVuZFwiXG4gICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgey8qIE5ldyBldmVudCBidXR0b24gLSBEZXNrdG9wICovfVxuICAgICAgICAgICAgICA8TmV3RXZlbnRCdXR0b24gLz5cblxuICAgICAgICAgICAgICB7LyogRXhwb3J0IGJ1dHRvbiAtIERlc2t0b3AgKi99XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPERvd25sb2FkIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbiBANHhsL2Jhc2UtaGVhZGVyOmlubGluZVwiPlxuICAgICAgICAgICAgICAgICAge3QoJ2V4cG9ydCcpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgey8qIE1vYmlsZSBuYXZpZ2F0aW9uIG1lbnUgYnV0dG9uIC0gUmlnaHQgYWxpZ25lZCAqL31cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTEgQG1kL2Jhc2UtaGVhZGVyOmhpZGRlblwiPlxuICAgICAgICAgICAgICB7LyogTmV3IGV2ZW50IGJ1dHRvbiAtIE1vYmlsZSAqL31cbiAgICAgICAgICAgICAgPE5ld0V2ZW50QnV0dG9uIC8+XG5cbiAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICBvcGVuPXttb2JpbGVQb3BvdmVyT3Blbn1cbiAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldE1vYmlsZVBvcG92ZXJPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT1cInNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxNZW51IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgYWxpZ249XCJlbmRcIiBjbGFzc05hbWU9XCJ3LVsyNDBweF0gcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwibWItMSB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgVmlldyAmIE5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAgPFZpZXdDb250cm9sc1xuICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWaWV3PXt2aWV3fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsobmV3VmlldykgPT4gaGFuZGxlVmlld0NoYW5nZShuZXdWaWV3LCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZGF5PXtoYW5kbGVOYXZpZ2F0aW9uLnRvZGF5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uTmV4dD17aGFuZGxlTmF2aWdhdGlvbi5uZXh0fVxuICAgICAgICAgICAgICAgICAgICAgIG9uUHJldmlvdXM9e2hhbmRsZU5hdmlnYXRpb24ucHJldmlvdXN9XG4gICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIHsvKiBFeHBvcnQgYnV0dG9uIC0gTW9iaWxlICovfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB0LTIgYm9yZGVyLXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVFeHBvcnR9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93bmxvYWQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnZXhwb3J0Jyl9IENhbGVuZGFyICguaWNzKVxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRlclxuIiwKICAgICJpbXBvcnQge1xuICBCdXR0b24sXG4gIFBvcG92ZXIsXG4gIFBvcG92ZXJDb250ZW50LFxuICBQb3BvdmVyVHJpZ2dlcixcbn0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdsdWNpZGUtcmVhY3QnXG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG4vLyBNb250aHMgYXJyYXkgaXMgbm93IGNyZWF0ZWQgZHluYW1pY2FsbHkgaW4gdGhlIGNvbXBvbmVudCB1c2luZyB0cmFuc2xhdGlvbnNcblxuLy8gQW5pbWF0aW9uIHZhcmlhbnRzIGZvciBudW1iZXIgdHJhbnNpdGlvbnNcbmNvbnN0IGFuaW1hdGlvblZhcmlhbnRzID0ge1xuICBpbml0aWFsOiB7IG9wYWNpdHk6IDAsIHk6IDEwIH0sXG4gIGFuaW1hdGU6IHsgb3BhY2l0eTogMSwgeTogMCB9LFxuICBleGl0OiB7IG9wYWNpdHk6IDAsIHk6IC0xMCB9LFxufVxuXG5jb25zdCBUaXRsZUNvbnRlbnQgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHZpZXcsIHNldEN1cnJlbnREYXRlLCB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dChcbiAgICAoY29udGV4dCkgPT4gKHtcbiAgICAgIGN1cnJlbnREYXRlOiBjb250ZXh0LmN1cnJlbnREYXRlLFxuICAgICAgdmlldzogY29udGV4dC52aWV3LFxuICAgICAgc2V0Q3VycmVudERhdGU6IGNvbnRleHQuc2V0Q3VycmVudERhdGUsXG4gICAgICB0OiBjb250ZXh0LnQsXG4gICAgfSlcbiAgKVxuXG4gIC8vIENyZWF0ZSBtb250aHMgYXJyYXkgdXNpbmcgdHJhbnNsYXRpb25zXG4gIGNvbnN0IG1vbnRocyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gW1xuICAgICAgdCgnamFudWFyeScpLFxuICAgICAgdCgnZmVicnVhcnknKSxcbiAgICAgIHQoJ21hcmNoJyksXG4gICAgICB0KCdhcHJpbCcpLFxuICAgICAgdCgnbWF5JyksXG4gICAgICB0KCdqdW5lJyksXG4gICAgICB0KCdqdWx5JyksXG4gICAgICB0KCdhdWd1c3QnKSxcbiAgICAgIHQoJ3NlcHRlbWJlcicpLFxuICAgICAgdCgnb2N0b2JlcicpLFxuICAgICAgdCgnbm92ZW1iZXInKSxcbiAgICAgIHQoJ2RlY2VtYmVyJyksXG4gICAgXSxcbiAgICBbdF1cbiAgKVxuXG4gIC8vIFN0YXRlIGZvciBtb2JpbGUgbWVudSBhbmQgcG9wb3ZlcnNcbiAgY29uc3QgW21vbnRoUG9wb3Zlck9wZW4sIHNldE1vbnRoUG9wb3Zlck9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt5ZWFyUG9wb3Zlck9wZW4sIHNldFllYXJQb3BvdmVyT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3dlZWtQb3BvdmVyT3Blbiwgc2V0V2Vla1BvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZGF5UG9wb3Zlck9wZW4sIHNldERheVBvcG92ZXJPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGN1cnJlbnRZZWFyID0gY3VycmVudERhdGUueWVhcigpXG4gIGNvbnN0IHllYXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTEgfSwgKF8sIGkpID0+IGN1cnJlbnRZZWFyIC0gNSArIGkpXG5cbiAgLy8gSGFuZGxlIG1vbnRoIGFuZCB5ZWFyIHNlbGVjdGlvblxuICBjb25zdCBoYW5kbGVNb250aENoYW5nZSA9IChtb250aDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLm1vbnRoKG1vbnRoKVxuICAgIHNldEN1cnJlbnREYXRlKG5ld0RhdGUpXG4gICAgc2V0TW9udGhQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVllYXJDaGFuZ2UgPSAoeWVhcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IGN1cnJlbnREYXRlLnllYXIoeWVhcilcbiAgICBzZXRDdXJyZW50RGF0ZShuZXdEYXRlKVxuICAgIHNldFllYXJQb3BvdmVyT3BlbihmYWxzZSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHt2aWV3ICE9PSAneWVhcicgJiYgKFxuICAgICAgICA8UG9wb3ZlciBvcGVuPXttb250aFBvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldE1vbnRoUG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgbW9udGgtJHtjdXJyZW50RGF0ZS5tb250aCgpfWB9XG4gICAgICAgICAgICAgICAgICBpbml0aWFsPVwiaW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgICBleGl0PVwiZXhpdFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50cz17YW5pbWF0aW9uVmFyaWFudHN9XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50RGF0ZS5mb3JtYXQoJ01NTU0nKX1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPC9Qb3BvdmVyVHJpZ2dlcj5cbiAgICAgICAgICA8UG9wb3ZlckNvbnRlbnQgY2xhc3NOYW1lPVwidy00MCBwLTBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICAgIHttb250aHMubWFwKChtb250aCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICBrZXk9e21vbnRofVxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUubW9udGgoKSA9PT0gaW5kZXggJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlTW9udGhDaGFuZ2UoaW5kZXgpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHttb250aH1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuXG4gICAgICA8UG9wb3ZlciBvcGVuPXt5ZWFyUG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0WWVhclBvcG92ZXJPcGVufT5cbiAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAga2V5PXtgeWVhci0ke2N1cnJlbnREYXRlLnllYXIoKX1gfVxuICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICBhbmltYXRlPVwiYW5pbWF0ZVwiXG4gICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjI1LCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge2N1cnJlbnREYXRlLmZvcm1hdCgnWVlZWScpfVxuICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICA8Q2hldnJvbkRvd24gY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTI0IHAtMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtYXgtaC02MCBmbGV4LWNvbCBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgICAgICB7eWVhcnMubWFwKCh5ZWFyKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3llYXJ9XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgJ2p1c3RpZnktc3RhcnQgZm9udC1ub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgY3VycmVudERhdGUueWVhcigpID09PSB5ZWFyICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlWWVhckNoYW5nZSh5ZWFyKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt5ZWFyfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgPC9Qb3BvdmVyPlxuXG4gICAgICB7LyogRGlzcGxheSBhZGRpdGlvbmFsIHZpZXctc3BlY2lmaWMgaW5mb3JtYXRpb24gKi99XG4gICAgICB7dmlldyA9PT0gJ3dlZWsnICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17d2Vla1BvcG92ZXJPcGVufSBvbk9wZW5DaGFuZ2U9e3NldFdlZWtQb3BvdmVyT3Blbn0+XG4gICAgICAgICAgPFBvcG92ZXJUcmlnZ2VyIGFzQ2hpbGQ+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEhIGZvbnQtc2VtaWJvbGRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgPG1vdGlvbi5zcGFuXG4gICAgICAgICAgICAgICAgICBrZXk9e2B3ZWVrLXJhbmdlLSR7Y3VycmVudERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9XCJpbml0aWFsXCJcbiAgICAgICAgICAgICAgICAgIGFuaW1hdGU9XCJhbmltYXRlXCJcbiAgICAgICAgICAgICAgICAgIGV4aXQ9XCJleGl0XCJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXthbmltYXRpb25WYXJpYW50c31cbiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMjUsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2Ake2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCgnTU1NIEQnKX0gLSAke2N1cnJlbnREYXRlXG4gICAgICAgICAgICAgICAgICAgIC5lbmRPZignd2VlaycpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoJ01NTSBEJyl9YH1cbiAgICAgICAgICAgICAgICA8L21vdGlvbi5zcGFuPlxuICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgPENoZXZyb25Eb3duIGNsYXNzTmFtZT1cIm1sLTEgaC0zIHctMyBvcGFjaXR5LTcwXCIgLz5cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvUG9wb3ZlclRyaWdnZXI+XG4gICAgICAgICAgPFBvcG92ZXJDb250ZW50IGNsYXNzTmFtZT1cInctNTYgcC0wXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggbWF4LWgtNjAgZmxleC1jb2wgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgICAgICAgICB7LyogU2hvdyA3IHdlZWtzICgzIHBhc3QsIGN1cnJlbnQsIDMgZnV0dXJlKSAqL31cbiAgICAgICAgICAgICAge0FycmF5LmZyb20oeyBsZW5ndGg6IDcgfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB3ZWVrRGF0ZSA9IGN1cnJlbnREYXRlLnN1YnRyYWN0KDMsICd3ZWVrJykuYWRkKGksICd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydE9mV2VlayA9IHdlZWtEYXRlLnN0YXJ0T2YoJ3dlZWsnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZE9mV2VlayA9IHdlZWtEYXRlLmVuZE9mKCd3ZWVrJylcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRXZWVrID0gd2Vla0RhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnd2VlaycpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e3N0YXJ0T2ZXZWVrLmZvcm1hdCgnWVlZWS1NTS1ERCcpfVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXN0YXJ0IGZvbnQtbm9ybWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRXZWVrICYmICdiZy1wcmltYXJ5LzEwJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudERhdGUoc3RhcnRPZldlZWspXG4gICAgICAgICAgICAgICAgICAgICAgc2V0V2Vla1BvcG92ZXJPcGVuKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57YCR7c3RhcnRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ01NTSBEJ1xuICAgICAgICAgICAgICAgICAgICAgICl9IC0gJHtlbmRPZldlZWsuZm9ybWF0KCdEJyl9YH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAge3N0YXJ0T2ZXZWVrLm1vbnRoKCkgIT09IGVuZE9mV2Vlay5tb250aCgpICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgb3BhY2l0eS03MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7c3RhcnRPZldlZWsuZm9ybWF0KCdNTU0nKX0tJHtlbmRPZldlZWsuZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNTU0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICl9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L1BvcG92ZXJDb250ZW50PlxuICAgICAgICA8L1BvcG92ZXI+XG4gICAgICApfVxuICAgICAge3ZpZXcgPT09ICdkYXknICYmIChcbiAgICAgICAgPFBvcG92ZXIgb3Blbj17ZGF5UG9wb3Zlck9wZW59IG9uT3BlbkNoYW5nZT17c2V0RGF5UG9wb3Zlck9wZW59PlxuICAgICAgICAgIDxQb3BvdmVyVHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBweC0xISBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uc3BhblxuICAgICAgICAgICAgICAgICAga2V5PXtgZGF5LWluZm8tJHtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1gfVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD1cImluaXRpYWxcIlxuICAgICAgICAgICAgICAgICAgYW5pbWF0ZT1cImFuaW1hdGVcIlxuICAgICAgICAgICAgICAgICAgZXhpdD1cImV4aXRcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudHM9e2FuaW1hdGlvblZhcmlhbnRzfVxuICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yNSwgZWFzZTogJ2Vhc2VJbk91dCcgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7Y3VycmVudERhdGUuZm9ybWF0KCdkZGRkLCBEJyl9XG4gICAgICAgICAgICAgICAgPC9tb3Rpb24uc3Bhbj5cbiAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJtbC0xIGgtMyB3LTMgb3BhY2l0eS03MFwiIC8+XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1BvcG92ZXJUcmlnZ2VyPlxuICAgICAgICAgIDxQb3BvdmVyQ29udGVudCBjbGFzc05hbWU9XCJ3LTU2IHAtMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IG1heC1oLTYwIGZsZXgtY29sIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgey8qIFNob3cgYWxsIGRheXMgb2YgdGhlIGN1cnJlbnQgbW9udGggKi99XG4gICAgICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCBmaXJzdCBkYXkgb2YgbW9udGggYW5kIGxhc3QgZGF5IG9mIG1vbnRoXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gY3VycmVudERhdGUuc3RhcnRPZignbW9udGgnKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gY3VycmVudERhdGUuZGF5c0luTW9udGgoKVxuXG4gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYXJyYXkgb2YgZGF5cyBpbiB0aGUgbW9udGhcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRheURhdGUgPSBmaXJzdERheU9mTW9udGguZGF0ZShpICsgMSkgLy8gaSArIDEgYmVjYXVzZSBkYXlzIHN0YXJ0IGF0IDFcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ3VycmVudERheSA9IGRheURhdGUuaXNTYW1lKGN1cnJlbnREYXRlLCAnZGF5JylcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzVG9kYXkgPSBkYXlEYXRlLmlzU2FtZShkYXlqcygpLCAnZGF5JylcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17ZGF5RGF0ZS5mb3JtYXQoJ1lZWVktTU0tREQnKX1cbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1zdGFydCBmb250LW5vcm1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnREYXkgJiYgJ2JnLXByaW1hcnkvMTAnXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50RGF0ZShkYXlEYXRlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGF5UG9wb3Zlck9wZW4oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2RheURhdGUuZm9ybWF0KCdkZGRkLCBNTU0gRCcpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1RvZGF5ICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCByb3VuZGVkLXNtIHB4LTEhIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgndG9kYXknKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvUG9wb3ZlckNvbnRlbnQ+XG4gICAgICAgIDwvUG9wb3Zlcj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGl0bGVDb250ZW50XG4iLAogICAgImltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ0AvY29tcG9uZW50cy91aSdcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0IH0gZnJvbSAnbHVjaWRlLXJlYWN0J1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgVmlld0NvbnRyb2xzUHJvcHMge1xuICBjdXJyZW50VmlldzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInXG4gIG9uQ2hhbmdlOiAodmlldzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInKSA9PiB2b2lkXG4gIG9uVG9kYXk/OiAoKSA9PiB2b2lkXG4gIG9uTmV4dD86ICgpID0+IHZvaWRcbiAgb25QcmV2aW91cz86ICgpID0+IHZvaWRcbiAgdmFyaWFudD86ICdkZWZhdWx0JyB8ICdncmlkJ1xuICBzaXplPzogJ3NtJyB8ICdkZWZhdWx0J1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgVmlld0NvbnRyb2xzOiBSZWFjdC5GQzxWaWV3Q29udHJvbHNQcm9wcz4gPSAoe1xuICBjdXJyZW50VmlldyxcbiAgb25DaGFuZ2UsXG4gIHZhcmlhbnQgPSAnZGVmYXVsdCcsXG4gIHNpemUgPSAnc20nLFxuICBjbGFzc05hbWUsXG4gIG9uVG9kYXksXG4gIG9uTmV4dCxcbiAgb25QcmV2aW91cyxcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHsgdDogY29udGV4dC50IH0pKVxuICBjb25zdCBpc0dyaWQgPSB2YXJpYW50ID09PSAnZ3JpZCdcblxuICAvLyBFeHRyYWN0IGNvbW1vbiBidXR0b24gY2xhc3NOYW1lIGxvZ2ljIHRvIGEgZnVuY3Rpb25cbiAgY29uc3QgZ2V0QnV0dG9uQ2xhc3NOYW1lID0gKHZpZXdUeXBlOiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicpID0+IHtcbiAgICByZXR1cm4gY24oXG4gICAgICAvLyBCYXNlIHdpZHRoIGZvciBncmlkIGxheW91dFxuICAgICAgaXNHcmlkID8gJ3ctZnVsbCcgOiAnJyxcbiAgICAgIC8vIEFjdGl2ZSB2aWV3IHN0eWxpbmdcbiAgICAgIGN1cnJlbnRWaWV3ID09PSB2aWV3VHlwZSAmJiAnYmctcHJpbWFyeS84MCdcbiAgICApXG4gIH1cblxuICBjb25zdCBnZXRCdG5WYXJpYW50ID0gKHZpZXdUeXBlOiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcicpID0+IHtcbiAgICByZXR1cm4gY3VycmVudFZpZXcgPT09IHZpZXdUeXBlID8gJ2RlZmF1bHQnIDogJ291dGxpbmUnXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIGlzR3JpZCA/ICdncmlkIGdyaWQtY29scy0yIGdhcC0yJyA6ICdmbGV4IGdhcC0xJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgID5cbiAgICAgIDxCdXR0b24gb25DbGljaz17b25QcmV2aW91c30gdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPXtzaXplfT5cbiAgICAgICAgPENoZXZyb25MZWZ0IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uTmV4dH0gdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPXtzaXplfT5cbiAgICAgICAgPENoZXZyb25SaWdodCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgIDwvQnV0dG9uPlxuXG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCdkYXknKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnZGF5Jyl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGNsYXNzTmFtZT17Z2V0QnV0dG9uQ2xhc3NOYW1lKCdkYXknKX1cbiAgICAgID5cbiAgICAgICAge3QoJ2RheScpfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCd3ZWVrJyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ3dlZWsnKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ3dlZWsnKX1cbiAgICAgID5cbiAgICAgICAge3QoJ3dlZWsnKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNoYW5nZSgnbW9udGgnKX1cbiAgICAgICAgdmFyaWFudD17Z2V0QnRuVmFyaWFudCgnbW9udGgnKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ21vbnRoJyl9XG4gICAgICA+XG4gICAgICAgIHt0KCdtb250aCcpfVxuICAgICAgPC9CdXR0b24+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2hhbmdlKCd5ZWFyJyl9XG4gICAgICAgIHZhcmlhbnQ9e2dldEJ0blZhcmlhbnQoJ3llYXInKX1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgY2xhc3NOYW1lPXtnZXRCdXR0b25DbGFzc05hbWUoJ3llYXInKX1cbiAgICAgID5cbiAgICAgICAge3QoJ3llYXInKX1cbiAgICAgIDwvQnV0dG9uPlxuXG4gICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uVG9kYXl9IHZhcmlhbnQ9XCJvdXRsaW5lXCIgc2l6ZT17c2l6ZX0+XG4gICAgICAgIHt0KCd0b2RheScpfVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld0NvbnRyb2xzXG4iLAogICAgImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCB7IGNuIH0gZnJvbSAnQC9saWIvdXRpbHMnXG5pbXBvcnQgeyBTY3JvbGxBcmVhIH0gZnJvbSAnQC9jb21wb25lbnRzL3VpJ1xuaW1wb3J0IHsgdXNlQ2FsZW5kYXJDb250ZXh0IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcblxuY29uc3QgWWVhclZpZXc6IFJlYWN0LkZDID0gKCkgPT4ge1xuICBjb25zdCB7IGN1cnJlbnREYXRlLCBzZWxlY3REYXRlLCBldmVudHMsIHNldFZpZXcsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgdCB9ID1cbiAgICB1c2VDYWxlbmRhckNvbnRleHQoKVxuICBjb25zdCB5ZWFyID0gY3VycmVudERhdGUueWVhcigpXG5cbiAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgMTIgbW9udGhzIGZvciB0aGUgY3VycmVudCB5ZWFyXG4gIGNvbnN0IG1vbnRocyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiB7XG4gICAgY29uc3QgbW9udGhEYXRlID0gZGF5anMoKS55ZWFyKHllYXIpLm1vbnRoKGkpLnN0YXJ0T2YoJ21vbnRoJylcbiAgICByZXR1cm4ge1xuICAgICAgZGF0ZTogbW9udGhEYXRlLFxuICAgICAgbmFtZTogbW9udGhEYXRlLmZvcm1hdCgnTU1NTScpLFxuICAgICAgZGF5c0luTW9udGg6IG1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpLFxuICAgICAgZmlyc3REYXlPZk1vbnRoOiBtb250aERhdGUuc3RhcnRPZignbW9udGgnKS5kYXkoKSwgLy8gMC02LCAwIGlzIFN1bmRheVxuICAgIH1cbiAgfSlcblxuICAvLyBDYWxjdWxhdGUgZXZlbnRzIGZvciBlYWNoIG1vbnRoXG4gIGNvbnN0IG1vbnRoc1dpdGhFdmVudENvdW50ID0gbW9udGhzLm1hcCgobW9udGgpID0+IHtcbiAgICBjb25zdCBldmVudHNJbk1vbnRoID0gZXZlbnRzLmZpbHRlcihcbiAgICAgIChldmVudCkgPT5cbiAgICAgICAgZXZlbnQuc3RhcnQueWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgIGV2ZW50LnN0YXJ0Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgIClcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tb250aCxcbiAgICAgIGV2ZW50Q291bnQ6IGV2ZW50c0luTW9udGgubGVuZ3RoLFxuICAgIH1cbiAgfSlcblxuICAvLyBIYW5kbGUgbW9udGggY2xpY2sgdG8gbmF2aWdhdGUgdG8gbW9udGggdmlld1xuICBjb25zdCBoYW5kbGVNb250aENsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzKSA9PiB7XG4gICAgc2VsZWN0RGF0ZShkYXRlKVxuICAgIHNldFZpZXcoJ21vbnRoJylcbiAgfVxuXG4gIC8vIEhhbmRsZSBkYXkgY2xpY2sgd2l0aGluIHRoZSBtaW5pIGNhbGVuZGFyXG4gIGNvbnN0IGhhbmRsZURheUNsaWNrID0gKGRhdGU6IGRheWpzLkRheWpzLCBldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIC8vIFByZXZlbnQgdHJpZ2dlcmluZyB0aGUgbW9udGggY2xpY2tcbiAgICBzZWxlY3REYXRlKGRhdGUpXG4gICAgc2V0VmlldygnZGF5JykgLy8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gZGF5IHZpZXcgd2hlbiBjbGlja2luZyBvbiBhIHNwZWNpZmljIGRheVxuICB9XG5cbiAgLy8gR2VuZXJhdGUgZGF5cyBmb3IgbWluaSBjYWxlbmRhciBpbiBlYWNoIG1vbnRoXG4gIGNvbnN0IHJlbmRlck1pbmlDYWxlbmRhciA9IChtb250aDogKHR5cGVvZiBtb250aHNXaXRoRXZlbnRDb3VudClbMF0pID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGgncyBjYWxlbmRhciAod2hpY2ggY291bGQgYmUgaW4gdGhlIHByZXZpb3VzIG1vbnRoKVxuICAgIGNvbnN0IGZpcnN0RGF5T2ZDYWxlbmRhciA9IG1vbnRoLmRhdGUuc3RhcnRPZignbW9udGgnKS5zdGFydE9mKCd3ZWVrJylcblxuICAgIC8vIENyZWF0ZSA0MiBkYXlzICg2IHJvd3Mgb2YgNyBkYXlzKSBmb3IgY29uc2lzdGVuY3lcbiAgICBjb25zdCBkYXlzQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0MiB9LCAoXywgaSkgPT4ge1xuICAgICAgY29uc3QgZGF5ID0gZmlyc3REYXlPZkNhbGVuZGFyLmFkZChpLCAnZGF5JylcbiAgICAgIGNvbnN0IGlzQ3VycmVudE1vbnRoID0gZGF5Lm1vbnRoKCkgPT09IG1vbnRoLmRhdGUubW9udGgoKVxuICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gICAgICBjb25zdCBpc0N1cnJlbnREYXRlID0gZGF5LmlzU2FtZShjdXJyZW50RGF0ZSwgJ2RheScpXG5cbiAgICAgIC8vIEdldCBldmVudHMgZm9yIHRoaXMgZGF5XG4gICAgICBjb25zdCBkYXlFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2UoXG4gICAgICAgIGRheS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgZGF5LmVuZE9mKCdkYXknKVxuICAgICAgKVxuICAgICAgY29uc3QgaGFzRXZlbnRzID0gZGF5RXZlbnRzLmxlbmd0aCA+IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF5LFxuICAgICAgICBpc0N1cnJlbnRNb250aCxcbiAgICAgICAgaXNUb2RheSxcbiAgICAgICAgaXNDdXJyZW50RGF0ZSxcbiAgICAgICAgaGFzRXZlbnRzLFxuICAgICAgICBldmVudENvdW50OiBkYXlFdmVudHMubGVuZ3RoLFxuICAgICAgICAvLyBHcm91cCBldmVudHMgYnkgdGhlaXIgY2F0ZWdvcmllcyB0byBzaG93IGRpZmZlcmVudCBjb2xvcnNcbiAgICAgICAgZXZlbnRzOiBkYXlFdmVudHMsXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1taW5pLWNhbGVuZGFyLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtWzFweF0gdGV4dC1bMC42cmVtXVwiXG4gICAgICA+XG4gICAgICAgIHsvKiBEYXkgbmFtZXMgKi99XG4gICAgICAgIHtbJ1MnLCAnTScsICdUJywgJ1cnLCAnVCcsICdGJywgJ1MnXS5tYXAoKGRheU5hbWUsIGkpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBrZXk9e2BoZWFkZXItJHtpfWB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkLWZvcmVncm91bmQgaC0zIHRleHQtY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZGF5TmFtZX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG5cbiAgICAgICAgey8qIENhbGVuZGFyIGRheXMgKi99XG4gICAgICAgIHtkYXlzQXJyYXkubWFwKChkYXlJbmZvLCBpKSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgZGF5LSR7aX1gfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLWRheS0ke21vbnRoLmRhdGUuZm9ybWF0KCdZWVlZLU1NJyl9LSR7ZGF5SW5mby5kYXkuZm9ybWF0KCdZWVlZLU1NLUREJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PiBoYW5kbGVEYXlDbGljayhkYXlJbmZvLmRheSwgZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAncmVsYXRpdmUgZmxleCBhc3BlY3Qtc3F1YXJlIHctZnVsbCBjdXJzb3ItcG9pbnRlciBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IHJvdW5kZWQtc20gdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMjAwJyxcbiAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50TW9udGggJiYgJ3RleHQtbXV0ZWQtZm9yZWdyb3VuZCBvcGFjaXR5LTUwJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5pc0N1cnJlbnREYXRlICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNUb2RheSAmJlxuICAgICAgICAgICAgICAgICdiZy1tdXRlZCByb3VuZGVkLWZ1bGwgZm9udC1ib2xkJyxcbiAgICAgICAgICAgICAgZGF5SW5mby5oYXNFdmVudHMgJiZcbiAgICAgICAgICAgICAgICAhZGF5SW5mby5pc1RvZGF5ICYmXG4gICAgICAgICAgICAgICAgIWRheUluZm8uaXNDdXJyZW50RGF0ZSAmJlxuICAgICAgICAgICAgICAgICdmb250LW1lZGl1bSdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgIGRheUluZm8uaGFzRXZlbnRzXG4gICAgICAgICAgICAgICAgPyBgJHtkYXlJbmZvLmV2ZW50Q291bnR9IGV2ZW50JHtcbiAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5ldmVudENvdW50ID4gMSA/ICdzJyA6ICcnXG4gICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlciBsZWFkaW5nLW5vbmVcIj5cbiAgICAgICAgICAgICAge2RheUluZm8uZGF5LmRhdGUoKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgey8qIEVuaGFuY2VkIGV2ZW50IGluZGljYXRvciAtIHNob3cgbXVsdGlwbGUgY29sb3JlZCBkb3RzIGZvciBkaWZmZXJlbnQgZXZlbnQgdHlwZXMgKi99XG4gICAgICAgICAgICB7ZGF5SW5mby5oYXNFdmVudHMgJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZSBib3R0b20tMCBmbGV4IHctZnVsbCBqdXN0aWZ5LWNlbnRlciBzcGFjZS14LVsxcHhdJyxcbiAgICAgICAgICAgICAgICAgIGRheUluZm8uaXNUb2RheSA/ICdib3R0b20tWzFweF0nIDogJydcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgey8qIFNob3cgdXAgdG8gMyBldmVudCBkb3RzIHdpdGggZGlmZmVyZW50IGNvbG9ycyBpZiBhdmFpbGFibGUgKi99XG4gICAgICAgICAgICAgICAge2RheUluZm8uZXZlbnRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnaC1bM3B4XSB3LVszcHhdIHJvdW5kZWQtZnVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgZGF5SW5mby5pc1RvZGF5ID8gJ2JnLXByaW1hcnktZm9yZWdyb3VuZCcgOiAnYmctcHJpbWFyeSdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ibHVlLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICB7ZGF5SW5mby5ldmVudENvdW50ID4gMiAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICdoLVszcHhdIHctWzNweF0gcm91bmRlZC1mdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICBkYXlJbmZvLmlzVG9kYXkgPyAnYmctcHJpbWFyeS1mb3JlZ3JvdW5kJyA6ICdiZy1ncmVlbi01MDAnXG4gICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhIGRhdGEtdGVzdGlkPVwieWVhci12aWV3XCIgY2xhc3NOYW1lPVwiaC1mdWxsXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGRhdGEtdGVzdGlkPVwieWVhci1ncmlkXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZ3JpZCBhdXRvLXJvd3MtZnIgZ3JpZC1jb2xzLTEgZ2FwLTQgcC00IHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zXCJcbiAgICAgID5cbiAgICAgICAge21vbnRoc1dpdGhFdmVudENvdW50Lm1hcCgobW9udGgsIGluZGV4KSA9PiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXttb250aC5uYW1lfVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9e2B5ZWFyLW1vbnRoLSR7bW9udGguZGF0ZS5mb3JtYXQoJ01NJyl9YH1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU1vbnRoQ2xpY2sobW9udGguZGF0ZSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJob3Zlcjpib3JkZXItcHJpbWFyeSBmbGV4IGN1cnNvci1wb2ludGVyIGZsZXgtY29sIHJvdW5kZWQtbGcgYm9yZGVyIHAtMyB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgaG92ZXI6c2NhbGUtWzEuMDFdIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgIGtleT17YG1vbnRoLSR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aDNcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtgeWVhci1tb250aC10aXRsZS0ke21vbnRoLmRhdGUuZm9ybWF0KCdNTScpfWB9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7bW9udGgubmFtZX1cbiAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRlc3RpZD17YHllYXItbW9udGgtZXZlbnQtY291bnQtJHttb250aC5kYXRlLmZvcm1hdCgnTU0nKX1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIHJvdW5kZWQtZnVsbCBweC0yIHB5LTEgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50fXsnICd9XG4gICAgICAgICAgICAgICAgICAgIHttb250aC5ldmVudENvdW50ID09PSAxID8gdCgnZXZlbnQnKSA6IHQoJ2V2ZW50cycpfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuXG4gICAgICAgICAgICB7cmVuZGVyTWluaUNhbGVuZGFyKG1vbnRoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1Njcm9sbEFyZWE+XG4gIClcbn1cblxuZXhwb3J0IGRlZmF1bHQgWWVhclZpZXdcbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTW9udGhWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL21vbnRoLXZpZXcvbW9udGgtdmlldydcbmltcG9ydCBXZWVrVmlldyBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3L3dlZWstdmlldydcbmltcG9ydCBEYXlWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy9kYXktdmlldy9kYXktdmlldydcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IFllYXJWaWV3IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvY29tcG9uZW50cy95ZWFyLXZpZXcveWVhci12aWV3J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5pbXBvcnQgeyBDYWxlbmRhckRuZENvbnRleHQgfSBmcm9tICdAL2NvbXBvbmVudHMvZHJhZy1hbmQtZHJvcC9jYWxlbmRhci1kbmQtY29udGV4dCdcbmltcG9ydCB7IENhbGVuZGFyUHJvdmlkZXIgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvcHJvdmlkZXInXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbi8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBuby1kdXBsaWNhdGVzXG5pbXBvcnQgJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgREFZX01BWF9FVkVOVFNfREVGQVVMVCwgV0VFS19EQVlTX05VTUJFUl9NQVAgfSBmcm9tICdAL2xpYi9jb25zdGFudHMnXG5pbXBvcnQgeyBub3JtYWxpemVQdWJsaWNGYWNpbmdDYWxlbmRhckV2ZW50IH0gZnJvbSAnQC9saWInXG5pbXBvcnQgdHlwZSB7IElsYW15Q2FsZW5kYXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvY2FsZW5kYXIvdHlwZXMnXG5cbmNvbnN0IENhbGVuZGFyQ29udGVudDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZSxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgICBkYXlNYXhFdmVudHMsXG4gIH0gPSB1c2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHZpZXdNYXAgPSB7XG4gICAgbW9udGg6IDxNb250aFZpZXcga2V5PVwibW9udGhcIiBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c30gLz4sXG4gICAgd2VlazogPFdlZWtWaWV3IGtleT1cIndlZWtcIiAvPixcbiAgICBkYXk6IDxEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuICAgIHllYXI6IDxZZWFyVmlldyBrZXk9XCJ5ZWFyXCIgLz4sXG4gIH1cblxuICBjb25zdCBoYW5kbGVPblVwZGF0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCBldmVudClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9uRGVsZXRlID0gKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgZGVsZXRlRXZlbnQoZXZlbnQuaWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICA8SGVhZGVyIGNsYXNzTmFtZT1cInAtMVwiIC8+XG5cbiAgICAgIHsvKiBDYWxlbmRhciBCb2R5IHdpdGggQW5pbWF0ZVByZXNlbmNlIGZvciB2aWV3IHRyYW5zaXRpb25zICovfVxuICAgICAgPENhbGVuZGFyRG5kQ29udGV4dD5cbiAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICBrZXk9e3ZpZXd9XG4gICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHg6IDIwIH19XG4gICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHg6IDAgfX1cbiAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeDogLTIwIH19XG4gICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGR1cmF0aW9uOiAwLjEsIGVhc2U6ICdlYXNlSW5PdXQnIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1bY2FsYygxMDAlLTMuNXJlbSldXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dmlld01hcFt2aWV3XX1cbiAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgICAgPC9DYWxlbmRhckRuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBFdmVudCBGb3JtIERpYWxvZyAqL31cbiAgICAgIHtpc0V2ZW50Rm9ybU9wZW4gJiYgKFxuICAgICAgICA8RXZlbnRGb3JtXG4gICAgICAgICAgb25DbG9zZT17Y2xvc2VFdmVudEZvcm19XG4gICAgICAgICAgc2VsZWN0ZWRFdmVudD17c2VsZWN0ZWRFdmVudH1cbiAgICAgICAgICBzZWxlY3RlZERhdGU9e3NlbGVjdGVkRGF0ZX1cbiAgICAgICAgICBvbkFkZD17YWRkRXZlbnR9XG4gICAgICAgICAgb25VcGRhdGU9e2hhbmRsZU9uVXBkYXRlfVxuICAgICAgICAgIG9uRGVsZXRlPXtoYW5kbGVPbkRlbGV0ZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IElsYW15Q2FsZW5kYXI6IFJlYWN0LkZDPElsYW15Q2FsZW5kYXJQcm9wcz4gPSAoe1xuICBldmVudHMsXG4gIGZpcnN0RGF5T2ZXZWVrID0gJ3N1bmRheScsXG4gIGluaXRpYWxWaWV3ID0gJ21vbnRoJyxcbiAgcmVuZGVyRXZlbnQsXG4gIG9uRXZlbnRDbGljayxcbiAgb25DZWxsQ2xpY2ssXG4gIG9uVmlld0NoYW5nZSxcbiAgb25FdmVudEFkZCxcbiAgb25FdmVudFVwZGF0ZSxcbiAgb25FdmVudERlbGV0ZSxcbiAgb25EYXRlQ2hhbmdlLFxuICBsb2NhbGUsXG4gIHRyYW5zbGF0aW9ucyxcbiAgdHJhbnNsYXRvcixcbiAgdGltZXpvbmUsXG4gIGRpc2FibGVDZWxsQ2xpY2ssXG4gIGRpc2FibGVFdmVudENsaWNrLFxuICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gIGRheU1heEV2ZW50cyA9IERBWV9NQVhfRVZFTlRTX0RFRkFVTFQsXG4gIHN0aWNreVZpZXdIZWFkZXIgPSB0cnVlLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lID0gJycsXG4gIGhlYWRlckNvbXBvbmVudCxcbiAgaGVhZGVyQ2xhc3NOYW1lLFxufSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxDYWxlbmRhclByb3ZpZGVyXG4gICAgICBldmVudHM9e25vcm1hbGl6ZVB1YmxpY0ZhY2luZ0NhbGVuZGFyRXZlbnQoZXZlbnRzKX1cbiAgICAgIGZpcnN0RGF5T2ZXZWVrPXtXRUVLX0RBWVNfTlVNQkVSX01BUFtmaXJzdERheU9mV2Vla119XG4gICAgICBpbml0aWFsVmlldz17aW5pdGlhbFZpZXd9XG4gICAgICByZW5kZXJFdmVudD17cmVuZGVyRXZlbnR9XG4gICAgICBvbkV2ZW50Q2xpY2s9e29uRXZlbnRDbGlja31cbiAgICAgIG9uQ2VsbENsaWNrPXtvbkNlbGxDbGlja31cbiAgICAgIG9uVmlld0NoYW5nZT17b25WaWV3Q2hhbmdlfVxuICAgICAgb25FdmVudEFkZD17b25FdmVudEFkZH1cbiAgICAgIG9uRXZlbnRVcGRhdGU9e29uRXZlbnRVcGRhdGV9XG4gICAgICBvbkV2ZW50RGVsZXRlPXtvbkV2ZW50RGVsZXRlfVxuICAgICAgb25EYXRlQ2hhbmdlPXtvbkRhdGVDaGFuZ2V9XG4gICAgICBsb2NhbGU9e2xvY2FsZX1cbiAgICAgIHRyYW5zbGF0aW9ucz17dHJhbnNsYXRpb25zfVxuICAgICAgdHJhbnNsYXRvcj17dHJhbnNsYXRvcn1cbiAgICAgIHRpbWV6b25lPXt0aW1lem9uZX1cbiAgICAgIGRpc2FibGVDZWxsQ2xpY2s9e2Rpc2FibGVDZWxsQ2xpY2t9XG4gICAgICBkaXNhYmxlRXZlbnRDbGljaz17ZGlzYWJsZUV2ZW50Q2xpY2t9XG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A9e2Rpc2FibGVEcmFnQW5kRHJvcH1cbiAgICAgIGRheU1heEV2ZW50cz17ZGF5TWF4RXZlbnRzfVxuICAgICAgc3RpY2t5Vmlld0hlYWRlcj17c3RpY2t5Vmlld0hlYWRlcn1cbiAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWU9e3ZpZXdIZWFkZXJDbGFzc05hbWV9XG4gICAgICBoZWFkZXJDb21wb25lbnQ9e2hlYWRlckNvbXBvbmVudH1cbiAgICAgIGhlYWRlckNsYXNzTmFtZT17aGVhZGVyQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxDYWxlbmRhckNvbnRlbnQgLz5cbiAgICA8L0NhbGVuZGFyUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IHtcbiAgRG5kQ29udGV4dCxcbiAgRHJhZ092ZXJsYXksXG4gIE1vdXNlU2Vuc29yLFxuICBwb2ludGVyV2l0aGluLFxuICBUb3VjaFNlbnNvcixcbiAgdXNlU2Vuc29yLFxuICB1c2VTZW5zb3JzLFxufSBmcm9tICdAZG5kLWtpdC9jb3JlJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUge1xuICBEcmFnQ2FuY2VsRXZlbnQsXG4gIERyYWdFbmRFdmVudCxcbiAgRHJhZ1N0YXJ0RXZlbnQsXG59IGZyb20gJ0BkbmQta2l0L2NvcmUnXG5pbXBvcnQgeyBzbmFwQ2VudGVyVG9DdXJzb3IgfSBmcm9tICdAZG5kLWtpdC9tb2RpZmllcnMnXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5pbXBvcnQgeyBpc1JlY3VycmluZ0V2ZW50IH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3V0aWxzL3JlY3VycmVuY2UtaGFuZGxlcidcbmltcG9ydCB7IFJlY3VycmVuY2VFZGl0RGlhbG9nIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL2NvbXBvbmVudHMvcmVjdXJyZW5jZS1lZGl0LWRpYWxvZydcbmltcG9ydCB0eXBlIHsgUmVjdXJyZW5jZUVkaXRTY29wZSB9IGZyb20gJ0AvZmVhdHVyZXMvcmVjdXJyZW5jZS90eXBlcydcblxuaW50ZXJmYWNlIENhbGVuZGFyRG5kQ29udGV4dFByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJEbmRDb250ZXh0KHsgY2hpbGRyZW4gfTogQ2FsZW5kYXJEbmRDb250ZXh0UHJvcHMpIHtcbiAgY29uc3QgeyB1cGRhdGVFdmVudCwgdXBkYXRlUmVjdXJyaW5nRXZlbnQsIHZpZXcsIGRpc2FibGVEcmFnQW5kRHJvcCB9ID1cbiAgICB1c2VTbWFydENhbGVuZGFyQ29udGV4dCgoY29udGV4dCkgPT4gKHtcbiAgICAgIHVwZGF0ZUV2ZW50OiBjb250ZXh0LnVwZGF0ZUV2ZW50LFxuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQ6IGNvbnRleHQudXBkYXRlUmVjdXJyaW5nRXZlbnQsXG4gICAgICB2aWV3OiBjb250ZXh0LnZpZXcsXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3A6IGNvbnRleHQuZGlzYWJsZURyYWdBbmREcm9wLFxuICAgIH0pKVxuICBjb25zdCBbYWN0aXZlRXZlbnQsIHNldEFjdGl2ZUV2ZW50XSA9IFJlYWN0LnVzZVN0YXRlPENhbGVuZGFyRXZlbnQgfCBudWxsPihcbiAgICBudWxsXG4gIClcblxuICAvLyBTdGF0ZSBmb3IgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZ1xuICBjb25zdCBbcmVjdXJyaW5nRGlhbG9nLCBzZXRSZWN1cnJpbmdEaWFsb2ddID0gdXNlU3RhdGU8e1xuICAgIGlzT3BlbjogYm9vbGVhblxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50IHwgbnVsbFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gfCBudWxsXG4gIH0+KHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV2ZW50OiBudWxsLFxuICAgIHVwZGF0ZXM6IG51bGwsXG4gIH0pXG5cbiAgLy8gQ29uZmlndXJlIHNlbnNvcnMgd2l0aCByZWR1Y2VkIGFjdGl2YXRpb24gY29uc3RyYWludHMgZm9yIGVhc2llciBkcmFnZ2luZ1xuICBjb25zdCBtb3VzZVNlbnNvciA9IHVzZVNlbnNvcihNb3VzZVNlbnNvciwge1xuICAgIC8vIFJlcXVpcmUgbWluaW1hbCBtb3ZlbWVudCBiZWZvcmUgYWN0aXZhdGluZ1xuICAgIGFjdGl2YXRpb25Db25zdHJhaW50OiB7XG4gICAgICBkaXN0YW5jZTogMixcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0IHRvdWNoU2Vuc29yID0gdXNlU2Vuc29yKFRvdWNoU2Vuc29yLCB7XG4gICAgLy8gUmVkdWNlIGRlbGF5IGZvciB0b3VjaCBkZXZpY2VzXG4gICAgYWN0aXZhdGlvbkNvbnN0cmFpbnQ6IHtcbiAgICAgIGRlbGF5OiAxMDAsXG4gICAgICB0b2xlcmFuY2U6IDUsXG4gICAgfSxcbiAgfSlcblxuICBjb25zdCBzZW5zb3JzID0gdXNlU2Vuc29ycyhtb3VzZVNlbnNvciwgdG91Y2hTZW5zb3IpXG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBldmVudCB1cGRhdGVcbiAgY29uc3QgcGVyZm9ybUV2ZW50VXBkYXRlID0gKFxuICAgIGV2ZW50OiBDYWxlbmRhckV2ZW50LFxuICAgIHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD5cbiAgKSA9PiB7XG4gICAgLy8gVmFsaWRhdGUgaW5wdXRzXG4gICAgaWYgKCFldmVudCB8fCAhZXZlbnQuaWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdXBkYXRlcyB8fCBPYmplY3Qua2V5cyh1cGRhdGVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc1JlY3VycmluZ0V2ZW50KGV2ZW50KSkge1xuICAgICAgLy8gU2hvdyBkaWFsb2cgZm9yIHJlY3VycmluZyBldmVudHNcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7XG4gICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHVwZGF0ZXMsXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEaXJlY3RseSB1cGRhdGUgcmVndWxhciBldmVudHNcbiAgICAgIHVwZGF0ZUV2ZW50KGV2ZW50LmlkLCB1cGRhdGVzKVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSByZWN1cnJpbmcgZXZlbnQgZGlhbG9nIGNvbmZpcm1hdGlvblxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENvbmZpcm0gPSAoc2NvcGU6IFJlY3VycmVuY2VFZGl0U2NvcGUpID0+IHtcbiAgICBpZiAoIXJlY3VycmluZ0RpYWxvZy5ldmVudCB8fCAhcmVjdXJyaW5nRGlhbG9nLnVwZGF0ZXMpIHtcbiAgICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgdXBkYXRlUmVjdXJyaW5nRXZlbnQocmVjdXJyaW5nRGlhbG9nLmV2ZW50LCByZWN1cnJpbmdEaWFsb2cudXBkYXRlcywge1xuICAgICAgICBzY29wZSxcbiAgICAgICAgZXZlbnREYXRlOiByZWN1cnJpbmdEaWFsb2cuZXZlbnQuc3RhcnQsXG4gICAgICB9KVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGVycm9yIGFuZCByZXNldCBkaWFsb2cgc3RhdGVcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0UmVjdXJyaW5nRGlhbG9nKHsgaXNPcGVuOiBmYWxzZSwgZXZlbnQ6IG51bGwsIHVwZGF0ZXM6IG51bGwgfSlcbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgcmVjdXJyaW5nIGV2ZW50IGRpYWxvZyBjbG9zZVxuICBjb25zdCBoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlID0gKCkgPT4ge1xuICAgIHNldFJlY3VycmluZ0RpYWxvZyh7IGlzT3BlbjogZmFsc2UsIGV2ZW50OiBudWxsLCB1cGRhdGVzOiBudWxsIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSAoZXZlbnQ6IERyYWdTdGFydEV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmUgfSA9IGV2ZW50XG5cbiAgICAvLyBTZXQgdGhlIGFjdGl2ZSBldmVudCBiYXNlZCBvbiB0aGUgZXZlbnQgZGF0YVxuICAgIGlmIChhY3RpdmUuZGF0YS5jdXJyZW50Py50eXBlID09PSAnY2FsZW5kYXItZXZlbnQnKSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChhY3RpdmUuZGF0YS5jdXJyZW50LmV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSAoZXZlbnQ6IERyYWdFbmRFdmVudCkgPT4ge1xuICAgIGNvbnN0IHsgYWN0aXZlLCBvdmVyIH0gPSBldmVudFxuXG4gICAgaWYgKCFhY3RpdmUgfHwgIW92ZXIgfHwgIWFjdGl2ZUV2ZW50KSB7XG4gICAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAndGltZS1jZWxsJykge1xuICAgICAgY29uc3QgeyBkYXRlLCBob3VyID0gMCwgbWludXRlID0gMCwgcmVzb3VyY2VJZCB9ID0gb3Zlci5kYXRhLmN1cnJlbnRcblxuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBldmVudCBkdXJhdGlvbiBpbiBtaW51dGVzXG4gICAgICBjb25zdCBzdGFydCA9IGFjdGl2ZUV2ZW50LnN0YXJ0XG4gICAgICBjb25zdCBlbmQgPSBhY3RpdmVFdmVudC5lbmRcbiAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGVuZC5kaWZmKHN0YXJ0LCAnbWludXRlJylcblxuICAgICAgLy8gQ3JlYXRlIG5ldyBzdGFydCB0aW1lIGJhc2VkIG9uIHRoZSBkcm9wIHRhcmdldFxuICAgICAgY29uc3QgbmV3U3RhcnQgPSBkYXlqcyhkYXRlKVxuICAgICAgICAuaG91cihob3VyKVxuICAgICAgICAubWludXRlKG1pbnV0ZSB8fCAwKVxuXG4gICAgICAvLyBDcmVhdGUgbmV3IGVuZCB0aW1lIGJ5IGFkZGluZyB0aGUgb3JpZ2luYWwgZHVyYXRpb25cbiAgICAgIGxldCBuZXdFbmQgPSBuZXdTdGFydC5hZGQoZHVyYXRpb25NaW51dGVzLCAnbWludXRlJylcbiAgICAgIGlmIChuZXdFbmQuaXNTYW1lKG5ld0VuZC5zdGFydE9mKCdkYXknKSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIG5ldyBlbmQgdGltZSBpcyBhdCBtaWRuaWdodCwgc2V0IGl0IHRvIDI0IGhvdXJzIG9mIHBhcnRpYWwgZGF5XG4gICAgICAgIG5ld0VuZCA9IG5ld0VuZC5zdWJ0cmFjdCgxLCAnZGF5JykuZW5kT2YoJ2RheScpXG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZXZlbnQgd2l0aCBuZXcgdGltZXMgYW5kIHJlc291cmNlIGlmIGNoYW5nZWRcbiAgICAgIGNvbnN0IHVwZGF0ZXM6IFBhcnRpYWw8Q2FsZW5kYXJFdmVudD4gJiB7IHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgfSA9XG4gICAgICAgIHtcbiAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgZW5kOiBuZXdFbmQsXG4gICAgICAgIH1cblxuICAgICAgaWYgKHJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cGRhdGVzLnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICB9XG5cbiAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcbiAgICB9IGVsc2UgaWYgKG92ZXIuZGF0YS5jdXJyZW50Py50eXBlID09PSAnZGF5LWNlbGwnKSB7XG4gICAgICBjb25zdCB7IGRhdGUsIHJlc291cmNlSWQgfSA9IG92ZXIuZGF0YS5jdXJyZW50XG4gICAgICBjb25zdCBuZXdEYXRlID0gZGF5anMoZGF0ZSlcblxuICAgICAgLy8gRm9yIG11bHRpLWRheSBldmVudHMsIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIGR1cmF0aW9uIGluIGRheXNcbiAgICAgIGNvbnN0IGlzTXVsdGlEYXlFdmVudCA9ICFhY3RpdmVFdmVudC5zdGFydC5pc1NhbWUoYWN0aXZlRXZlbnQuZW5kLCAnZGF5JylcbiAgICAgIGNvbnN0IHN0YXJ0ID0gYWN0aXZlRXZlbnQuc3RhcnRcbiAgICAgIGNvbnN0IGVuZCA9IGFjdGl2ZUV2ZW50LmVuZFxuXG4gICAgICBpZiAoaXNNdWx0aURheUV2ZW50KSB7XG4gICAgICAgIGlmICh2aWV3ID09PSAnd2VlaycpIHtcbiAgICAgICAgICAvLyBHZXQgdGltZSBjb21wb25lbnRzIHRvIHByZXNlcnZlXG4gICAgICAgICAgY29uc3Qgc3RhcnRIb3VyID0gc3RhcnQuaG91cigpXG4gICAgICAgICAgY29uc3Qgc3RhcnRNaW51dGUgPSBzdGFydC5taW51dGUoKVxuICAgICAgICAgIGNvbnN0IGVuZEhvdXIgPSBlbmQuaG91cigpXG4gICAgICAgICAgY29uc3QgZW5kTWludXRlID0gZW5kLm1pbnV0ZSgpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgZHVyYXRpb24gaW4gZGF5cyB0byBwcmVzZXJ2ZVxuICAgICAgICAgIGNvbnN0IGR1cmF0aW9uRGF5cyA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5JylcblxuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgc3RhcnQgYW5kIGVuZCBkYXRlc1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXJ0ID0gbmV3RGF0ZVxuICAgICAgICAgICAgLnN0YXJ0T2YoJ2RheScpXG4gICAgICAgICAgICAuaG91cihzdGFydEhvdXIpXG4gICAgICAgICAgICAubWludXRlKHN0YXJ0TWludXRlKVxuICAgICAgICAgIGNvbnN0IG5ld0VuZCA9IG5ld1N0YXJ0XG4gICAgICAgICAgICAuYWRkKGR1cmF0aW9uRGF5cywgJ2RheScpXG4gICAgICAgICAgICAuaG91cihlbmRIb3VyKVxuICAgICAgICAgICAgLm1pbnV0ZShlbmRNaW51dGUpXG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+ICYge1xuICAgICAgICAgICAgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cGRhdGVzLnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvciBvdGhlciB2aWV3cyBsaWtlIG1vbnRoIHZpZXdcbiAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRhdGUgc2hpZnQgKGhvdyBtYW55IGRheXMgd2UncmUgbW92aW5nIHRoZSBldmVudClcbiAgICAgICAgICBjb25zdCBkYXlzRGlmZmVyZW5jZSA9IG5ld0RhdGUuZGlmZihzdGFydC5zdGFydE9mKCdkYXknKSwgJ2RheScpXG5cbiAgICAgICAgICAvLyBDYWxjdWxhdGUgbmV3IHN0YXJ0IGFuZCBlbmQgd2hpbGUgcHJlc2VydmluZyB0aW1lIGNvbXBvbmVudHNcbiAgICAgICAgICBjb25zdCBuZXdTdGFydCA9IHN0YXJ0LmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG4gICAgICAgICAgY29uc3QgbmV3RW5kID0gZW5kLmFkZChkYXlzRGlmZmVyZW5jZSwgJ2RheScpXG5cbiAgICAgICAgICBjb25zdCB1cGRhdGVzOiBQYXJ0aWFsPENhbGVuZGFyRXZlbnQ+ICYge1xuICAgICAgICAgICAgcmVzb3VyY2VJZD86IHN0cmluZyB8IG51bWJlclxuICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICBzdGFydDogbmV3U3RhcnQsXG4gICAgICAgICAgICBlbmQ6IG5ld0VuZCxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzb3VyY2VJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cGRhdGVzLnJlc291cmNlSWQgPSByZXNvdXJjZUlkXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVyZm9ybUV2ZW50VXBkYXRlKGFjdGl2ZUV2ZW50LCB1cGRhdGVzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igc2luZ2xlLWRheSBldmVudHMsIG1haW50YWluIHRoZSB0aW1lIGJ1dCBjaGFuZ2UgdGhlIGRhdGVcbiAgICAgICAgY29uc3QgbmV3U3RhcnQgPSBuZXdEYXRlXG4gICAgICAgICAgLmhvdXIoYWN0aXZlRXZlbnQuc3RhcnQuaG91cigpKVxuICAgICAgICAgIC5taW51dGUoYWN0aXZlRXZlbnQuc3RhcnQubWludXRlKCkpXG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIGV2ZW50IGR1cmF0aW9uIGFuZCBzZXQgbmV3IGVuZCB0aW1lXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uTWludXRlcyA9IGFjdGl2ZUV2ZW50LmVuZC5kaWZmKFxuICAgICAgICAgIGFjdGl2ZUV2ZW50LnN0YXJ0LFxuICAgICAgICAgICdtaW51dGUnXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnQuYWRkKGR1cmF0aW9uTWludXRlcywgJ21pbnV0ZScpXG5cbiAgICAgICAgY29uc3QgdXBkYXRlczogUGFydGlhbDxDYWxlbmRhckV2ZW50PiAmIHtcbiAgICAgICAgICByZXNvdXJjZUlkPzogc3RyaW5nIHwgbnVtYmVyXG4gICAgICAgIH0gPSB7XG4gICAgICAgICAgc3RhcnQ6IG5ld1N0YXJ0LFxuICAgICAgICAgIGVuZDogbmV3RW5kLFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc291cmNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwZGF0ZXMucmVzb3VyY2VJZCA9IHJlc291cmNlSWRcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcmZvcm1FdmVudFVwZGF0ZShhY3RpdmVFdmVudCwgdXBkYXRlcylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRBY3RpdmVFdmVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRHJhZ0NhbmNlbCA9IChfZXZlbnQ6IERyYWdDYW5jZWxFdmVudCkgPT4ge1xuICAgIHNldEFjdGl2ZUV2ZW50KG51bGwpXG4gIH1cblxuICAvLyBJZiBkcmFnIGFuZCBkcm9wIGlzIGRpc2FibGVkLCBqdXN0IHJldHVybiBjaGlsZHJlbiB3aXRob3V0IERuZENvbnRleHRcbiAgaWYgKGRpc2FibGVEcmFnQW5kRHJvcCkge1xuICAgIHJldHVybiBjaGlsZHJlbiBhcyBSZWFjdC5SZWFjdEVsZW1lbnRcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEbmRDb250ZXh0XG4gICAgICAgIHNlbnNvcnM9e3NlbnNvcnN9XG4gICAgICAgIG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG4gICAgICAgIG9uRHJhZ0VuZD17aGFuZGxlRHJhZ0VuZH1cbiAgICAgICAgb25EcmFnQ2FuY2VsPXtoYW5kbGVEcmFnQ2FuY2VsfVxuICAgICAgICBjb2xsaXNpb25EZXRlY3Rpb249e3BvaW50ZXJXaXRoaW59XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPERyYWdPdmVybGF5IG1vZGlmaWVycz17W3NuYXBDZW50ZXJUb0N1cnNvcl19PlxuICAgICAgICAgIHthY3RpdmVFdmVudCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgJ2N1cnNvci1ncmFiIHRydW5jYXRlIHJvdW5kZWQgYmctYW1iZXItMjAwIHAtMiB0ZXh0LVsxMHB4XSBzaGFkb3ctbGcgc206dGV4dC14cyB3LTIwJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJsdWUtNTAwJyxcbiAgICAgICAgICAgICAgICBhY3RpdmVFdmVudC5jb2xvciB8fCAndGV4dC13aGl0ZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2FjdGl2ZUV2ZW50Py50aXRsZX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRHJhZ092ZXJsYXk+XG4gICAgICA8L0RuZENvbnRleHQ+XG5cbiAgICAgIHsvKiBSZWN1cnJpbmcgZXZlbnQgZWRpdCBkaWFsb2cgKi99XG4gICAgICA8UmVjdXJyZW5jZUVkaXREaWFsb2dcbiAgICAgICAgaXNPcGVuPXtyZWN1cnJpbmdEaWFsb2cuaXNPcGVufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVSZWN1cnJpbmdFdmVudENsb3NlfVxuICAgICAgICBvbkNvbmZpcm09e2hhbmRsZVJlY3VycmluZ0V2ZW50Q29uZmlybX1cbiAgICAgICAgb3BlcmF0aW9uVHlwZT1cImVkaXRcIlxuICAgICAgICBldmVudFRpdGxlPXtyZWN1cnJpbmdEaWFsb2cuZXZlbnQ/LnRpdGxlIHx8ICcnfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSBkYXlqcyBmcm9tICdAL2xpYi9jb25maWdzL2RheWpzLWNvbmZpZydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENhbGVuZGFyQ29udGV4dCB9IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zLCBUcmFuc2xhdG9yRnVuY3Rpb24gfSBmcm9tICdAL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5pbXBvcnQgeyB1c2VDYWxlbmRhckVuZ2luZSB9IGZyb20gJ0AvaG9va3MvdXNlLWNhbGVuZGFyLWVuZ2luZSdcblxuZXhwb3J0IGludGVyZmFjZSBDYWxlbmRhclByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gIGV2ZW50cz86IENhbGVuZGFyRXZlbnRbXVxuICBmaXJzdERheU9mV2Vlaz86IG51bWJlciAvLyAwIGZvciBTdW5kYXksIDEgZm9yIE1vbmRheSwgZXRjLlxuICBpbml0aWFsVmlldz86ICdtb250aCcgfCAnd2VlaycgfCAnZGF5JyB8ICd5ZWFyJ1xuICByZW5kZXJFdmVudD86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gUmVhY3ROb2RlXG4gIG9uRXZlbnRDbGljaz86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkNlbGxDbGljaz86IChzdGFydERhdGU6IGRheWpzLkRheWpzLCBlbmREYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBvblZpZXdDaGFuZ2U/OiAodmlldzogJ21vbnRoJyB8ICd3ZWVrJyB8ICdkYXknIHwgJ3llYXInKSA9PiB2b2lkXG4gIG9uRXZlbnRBZGQ/OiAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHZvaWRcbiAgb25FdmVudFVwZGF0ZT86IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4gdm9pZFxuICBvbkV2ZW50RGVsZXRlPzogKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB2b2lkXG4gIG9uRGF0ZUNoYW5nZT86IChkYXRlOiBkYXlqcy5EYXlqcykgPT4gdm9pZFxuICBsb2NhbGU/OiBzdHJpbmdcbiAgdGltZXpvbmU/OiBzdHJpbmdcbiAgZGlzYWJsZUNlbGxDbGljaz86IGJvb2xlYW5cbiAgZGlzYWJsZUV2ZW50Q2xpY2s/OiBib29sZWFuXG4gIGRpc2FibGVEcmFnQW5kRHJvcD86IGJvb2xlYW5cbiAgZGF5TWF4RXZlbnRzOiBudW1iZXJcbiAgc3RpY2t5Vmlld0hlYWRlcj86IGJvb2xlYW5cbiAgdmlld0hlYWRlckNsYXNzTmFtZT86IHN0cmluZ1xuICBoZWFkZXJDb21wb25lbnQ/OiBSZWFjdE5vZGUgLy8gT3B0aW9uYWwgY3VzdG9tIGhlYWRlciBjb21wb25lbnRcbiAgaGVhZGVyQ2xhc3NOYW1lPzogc3RyaW5nIC8vIE9wdGlvbmFsIGN1c3RvbSBoZWFkZXIgY2xhc3NcbiAgLy8gVHJhbnNsYXRpb24gb3B0aW9ucyAtIHByb3ZpZGUgZWl0aGVyIHRyYW5zbGF0aW9ucyBvYmplY3QgT1IgdHJhbnNsYXRvciBmdW5jdGlvblxuICB0cmFuc2xhdGlvbnM/OiBUcmFuc2xhdGlvbnNcbiAgdHJhbnNsYXRvcj86IFRyYW5zbGF0b3JGdW5jdGlvblxufVxuXG5leHBvcnQgY29uc3QgQ2FsZW5kYXJQcm92aWRlcjogUmVhY3QuRkM8Q2FsZW5kYXJQcm92aWRlclByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBldmVudHMgPSBbXSxcbiAgZmlyc3REYXlPZldlZWsgPSAwLFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgZGF5TWF4RXZlbnRzLFxuICBzdGlja3lWaWV3SGVhZGVyID0gdHJ1ZSxcbiAgdmlld0hlYWRlckNsYXNzTmFtZSA9ICcnLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxufSkgPT4ge1xuICAvLyBVc2UgdGhlIGNhbGVuZGFyIGVuZ2luZVxuICBjb25zdCBjYWxlbmRhckVuZ2luZSA9IHVzZUNhbGVuZGFyRW5naW5lKHtcbiAgICBldmVudHMsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgaW5pdGlhbFZpZXcsXG4gICAgb25FdmVudEFkZCxcbiAgICBvbkV2ZW50VXBkYXRlLFxuICAgIG9uRXZlbnREZWxldGUsXG4gICAgb25EYXRlQ2hhbmdlLFxuICAgIG9uVmlld0NoYW5nZSxcbiAgICBsb2NhbGUsXG4gICAgdGltZXpvbmUsXG4gICAgdHJhbnNsYXRpb25zLFxuICAgIHRyYW5zbGF0b3IsXG4gIH0pXG5cbiAgY29uc3QgZWRpdEV2ZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBjYWxlbmRhckVuZ2luZS5zZXRTZWxlY3RlZEV2ZW50KGV2ZW50KVxuICAgICAgY2FsZW5kYXJFbmdpbmUuc2V0SXNFdmVudEZvcm1PcGVuKHRydWUpXG4gICAgfSxcbiAgICBbY2FsZW5kYXJFbmdpbmVdXG4gIClcblxuICAvLyBDdXN0b20gaGFuZGxlcnMgdGhhdCBjYWxsIGV4dGVybmFsIGNhbGxiYWNrc1xuICBjb25zdCBoYW5kbGVFdmVudENsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBDYWxlbmRhckV2ZW50KSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUV2ZW50Q2xpY2spIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAob25FdmVudENsaWNrKSB7XG4gICAgICAgIG9uRXZlbnRDbGljayhldmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRFdmVudChldmVudClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtkaXNhYmxlRXZlbnRDbGljaywgb25FdmVudENsaWNrLCBlZGl0RXZlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVEYXRlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhcnREYXRlOiBkYXlqcy5EYXlqcywgZW5kRGF0ZTogZGF5anMuRGF5anMpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlQ2VsbENsaWNrKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAob25DZWxsQ2xpY2spIHtcbiAgICAgICAgb25DZWxsQ2xpY2soc3RhcnREYXRlLCBlbmREYXRlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsZW5kYXJFbmdpbmUub3BlbkV2ZW50Rm9ybShzdGFydERhdGUpXG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DZWxsQ2xpY2ssIGRpc2FibGVDZWxsQ2xpY2ssIGNhbGVuZGFyRW5naW5lXVxuICApXG5cbiAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IHZhbHVlXG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGN1cnJlbnREYXRlOiBjYWxlbmRhckVuZ2luZS5jdXJyZW50RGF0ZSxcbiAgICAgIHZpZXc6IGNhbGVuZGFyRW5naW5lLnZpZXcsXG4gICAgICBldmVudHM6IGNhbGVuZGFyRW5naW5lLmV2ZW50cyxcbiAgICAgIHJhd0V2ZW50czogY2FsZW5kYXJFbmdpbmUucmF3RXZlbnRzLFxuICAgICAgY3VycmVudExvY2FsZTogY2FsZW5kYXJFbmdpbmUuY3VycmVudExvY2FsZSxcbiAgICAgIGlzRXZlbnRGb3JtT3BlbjogY2FsZW5kYXJFbmdpbmUuaXNFdmVudEZvcm1PcGVuLFxuICAgICAgc2VsZWN0ZWRFdmVudDogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWRFdmVudCxcbiAgICAgIHNlbGVjdGVkRGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0ZWREYXRlLFxuICAgICAgZmlyc3REYXlPZldlZWs6IGNhbGVuZGFyRW5naW5lLmZpcnN0RGF5T2ZXZWVrLFxuICAgICAgc2V0Q3VycmVudERhdGU6IGNhbGVuZGFyRW5naW5lLnNldEN1cnJlbnREYXRlLFxuICAgICAgc2VsZWN0RGF0ZTogY2FsZW5kYXJFbmdpbmUuc2VsZWN0RGF0ZSxcbiAgICAgIHNldFZpZXc6IGNhbGVuZGFyRW5naW5lLnNldFZpZXcsXG4gICAgICBuZXh0UGVyaW9kOiBjYWxlbmRhckVuZ2luZS5uZXh0UGVyaW9kLFxuICAgICAgcHJldlBlcmlvZDogY2FsZW5kYXJFbmdpbmUucHJldlBlcmlvZCxcbiAgICAgIHRvZGF5OiBjYWxlbmRhckVuZ2luZS50b2RheSxcbiAgICAgIGFkZEV2ZW50OiBjYWxlbmRhckVuZ2luZS5hZGRFdmVudCxcbiAgICAgIHVwZGF0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVFdmVudCxcbiAgICAgIHVwZGF0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS51cGRhdGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIGRlbGV0ZUV2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVFdmVudCxcbiAgICAgIGRlbGV0ZVJlY3VycmluZ0V2ZW50OiBjYWxlbmRhckVuZ2luZS5kZWxldGVSZWN1cnJpbmdFdmVudCxcbiAgICAgIG9wZW5FdmVudEZvcm06IGNhbGVuZGFyRW5naW5lLm9wZW5FdmVudEZvcm0sXG4gICAgICBjbG9zZUV2ZW50Rm9ybTogY2FsZW5kYXJFbmdpbmUuY2xvc2VFdmVudEZvcm0sXG4gICAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IGNhbGVuZGFyRW5naW5lLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcbiAgICAgIGZpbmRQYXJlbnRSZWN1cnJpbmdFdmVudDogY2FsZW5kYXJFbmdpbmUuZmluZFBhcmVudFJlY3VycmluZ0V2ZW50LFxuICAgICAgcmVuZGVyRXZlbnQsXG4gICAgICBvbkV2ZW50Q2xpY2s6IGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBvbkNlbGxDbGljazogaGFuZGxlRGF0ZUNsaWNrLFxuICAgICAgbG9jYWxlLFxuICAgICAgdGltZXpvbmUsXG4gICAgICBkaXNhYmxlQ2VsbENsaWNrLFxuICAgICAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gICAgICBkaXNhYmxlRHJhZ0FuZERyb3AsXG4gICAgICBkYXlNYXhFdmVudHMsXG4gICAgICBzdGlja3lWaWV3SGVhZGVyLFxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgICAgIGhlYWRlckNvbXBvbmVudCxcbiAgICAgIGhlYWRlckNsYXNzTmFtZSxcbiAgICAgIHQ6IGNhbGVuZGFyRW5naW5lLnQsXG4gICAgfSksXG4gICAgW1xuICAgICAgY2FsZW5kYXJFbmdpbmUsXG4gICAgICByZW5kZXJFdmVudCxcbiAgICAgIGhhbmRsZUV2ZW50Q2xpY2ssXG4gICAgICBoYW5kbGVEYXRlQ2xpY2ssXG4gICAgICBsb2NhbGUsXG4gICAgICB0aW1lem9uZSxcbiAgICAgIGRpc2FibGVDZWxsQ2xpY2ssXG4gICAgICBkaXNhYmxlRXZlbnRDbGljayxcbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcCxcbiAgICAgIGRheU1heEV2ZW50cyxcbiAgICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICAgICAgaGVhZGVyQ29tcG9uZW50LFxuICAgICAgaGVhZGVyQ2xhc3NOYW1lLFxuICAgIF1cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPENhbGVuZGFyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NhbGVuZGFyQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlRXZlbnRHcmlkIH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL3Jlc291cmNlLWV2ZW50LWdyaWQnXG5pbXBvcnQgeyBjbiB9IGZyb20gJ0AvbGliL3V0aWxzJ1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlLCBtb3Rpb24gfSBmcm9tICdtb3Rpb24vcmVhY3QnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIHQsIHN0aWNreVZpZXdIZWFkZXIsIHZpZXdIZWFkZXJDbGFzc05hbWUgfSA9XG4gICAgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIC8vIEdlbmVyYXRlIGNhbGVuZGFyIGdyaWQgLSBkYXlzIG9mIHRoZSBtb250aFxuICBjb25zdCBtb250aERheXMgPSB1c2VNZW1vPGRheWpzLkRheWpzW10+KCgpID0+IHtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IGN1cnJlbnREYXRlLmRheXNJbk1vbnRoKClcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogZGF5c0luTW9udGggfSwgKF8sIGkpID0+XG4gICAgICBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpLmFkZChpLCAnZGF5JylcbiAgICApXG4gIH0sIFtjdXJyZW50RGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgaC1mdWxsIGJvcmRlclwiPlxuICAgICAgPFJlc291cmNlRXZlbnRHcmlkIGRheXM9e21vbnRoRGF5c30+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaC0xMiB3LWZpdCcsXG4gICAgICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG4gICAgICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBmbGV4LXNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7bW9udGhEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYHJlc291cmNlLW1vbnRoLWhlYWRlci0ke2RheS50b0lTT1N0cmluZygpfWBcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2tleX0tbW90aW9uYH1cbiAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTIwIGJvcmRlci1iIGJvcmRlci1yIGZsZXgtc2hyaW5rLTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZmxleC1jb2xcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC14cyBmb250LW1lZGl1bVwiPntkYXkuZm9ybWF0KCdEJyl9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIHtkYXkuZm9ybWF0KCdkZGQnKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICApXG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZXNvdXJjZUV2ZW50R3JpZD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgZ2V0UG9zaXRpb25lZEV2ZW50cyB9IGZyb20gJ0AvbGliL3V0aWxzL3Bvc2l0aW9uLXdlZWstZXZlbnRzJ1xuXG5pbnRlcmZhY2UgVXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbiAgcmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCB1c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMgPSAoe1xuICBkYXlzLFxuICBncmlkVHlwZSA9ICdkYXknLFxuICByZXNvdXJjZUlkLFxufTogVXNlUHJvY2Vzc2VkUmVzb3VyY2VXZWVrRXZlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgeyBnZXRFdmVudHNGb3JSZXNvdXJjZSwgZ2V0RXZlbnRzRm9yRGF0ZVJhbmdlLCBkYXlNYXhFdmVudHMgfSA9XG4gICAgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IGRheXNbMF0uc3RhcnRPZignZGF5JylcbiAgY29uc3QgZW5kRGF0ZSA9IGRheXMuYXQoLTEpLmVuZE9mKCdkYXknKVxuICBjb25zdCByZXNvdXJjZUV2ZW50cyA9IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpXG4gIGNvbnN0IHZpc2libGVFdmVudHMgPSBnZXRFdmVudHNGb3JEYXRlUmFuZ2Uoc3RhcnREYXRlLCBlbmREYXRlKVxuXG4gIHJldHVybiBnZXRQb3NpdGlvbmVkRXZlbnRzKHtcbiAgICBkYXlzLFxuICAgIGV2ZW50czogcmVzb3VyY2VFdmVudHMuZmlsdGVyKChldmVudCkgPT5cbiAgICAgIHZpc2libGVFdmVudHMuc29tZSgoZSkgPT4gZS5pZCA9PT0gZXZlbnQuaWQpXG4gICAgKSxcbiAgICBkYXlNYXhFdmVudHMsXG4gICAgZGF5TnVtYmVySGVpZ2h0OiAwLFxuICAgIGdyaWRUeXBlLFxuICB9KVxufVxuIiwKICAgICJpbXBvcnQgeyBFVkVOVF9CQVJfSEVJR0hUIH0gZnJvbSAnQC9saWIvY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZGF5anMgZnJvbSAnQC9saWIvY29uZmlncy9kYXlqcy1jb25maWcnXG5pbXBvcnQgeyB1c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMgfSBmcm9tICcuLi9ob29rcy91c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMnXG5pbXBvcnQgeyBEcmFnZ2FibGVFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy9kcmFnZ2FibGUtZXZlbnQvZHJhZ2dhYmxlLWV2ZW50J1xuXG5pbnRlcmZhY2UgV2Vla0V2ZW50c0xheWVyUHJvcHMge1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG4gIGdyaWRUeXBlPzogJ2RheScgfCAnaG91cidcbiAgcmVzb3VyY2VJZDogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUV2ZW50c0xheWVyOiBSZWFjdC5GQzxXZWVrRXZlbnRzTGF5ZXJQcm9wcz4gPSAoe1xuICBkYXlzLFxuICBncmlkVHlwZSA9ICdkYXknLFxuICByZXNvdXJjZUlkLFxufSkgPT4ge1xuICBjb25zdCB3ZWVrU3RhcnQgPSBkYXlzWzBdLnN0YXJ0T2YoJ2RheScpXG4gIGNvbnN0IHByb2Nlc3NlZFdlZWtFdmVudHMgPSB1c2VQcm9jZXNzZWRSZXNvdXJjZVdlZWtFdmVudHMoe1xuICAgIGRheXMsXG4gICAgZ3JpZFR5cGUsXG4gICAgcmVzb3VyY2VJZCxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdy1mdWxsIGgtZnVsbCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTAgb3ZlcmZsb3ctY2xpcFwiPlxuICAgICAge3Byb2Nlc3NlZFdlZWtFdmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBldmVudEtleSA9IGAke3Jlc291cmNlSWR9LWV2ZW50LSR7ZXZlbnQuaWR9LSR7ZXZlbnQucG9zaXRpb259LSR7d2Vla1N0YXJ0LnRvSVNPU3RyaW5nKCl9YFxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAga2V5PXtgJHtldmVudEtleX0td3JhcHBlcmB9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB6LTEwIHBvaW50ZXItZXZlbnRzLWF1dG8gb3ZlcmZsb3ctY2xpcFwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBsZWZ0OiBgY2FsYygke2V2ZW50LmxlZnR9JSArIHZhcigtLXNwYWNpbmcpICogMC4yNSlgLFxuICAgICAgICAgICAgICB3aWR0aDogYGNhbGMoJHtldmVudC53aWR0aH0lIC0gdmFyKC0tc3BhY2luZykgKiAxKWAsXG4gICAgICAgICAgICAgIHRvcDogYCR7ZXZlbnQudG9wfXB4YCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBgJHtFVkVOVF9CQVJfSEVJR0hUfXB4YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBkYXRhLXRlc3RpZD17YHdlZWstZXZlbnQtbGF5ZXItZXZlbnQtJHtldmVudC5pZH1gfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmFnZ2FibGVFdmVudFxuICAgICAgICAgICAgICBlbGVtZW50SWQ9e2V2ZW50S2V5fVxuICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtZnVsbCB3LWZ1bGwgc2hhZG93XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJ0AvY29tcG9uZW50cy90eXBlcydcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBbGxFdmVudERpYWxvZyB9IGZyb20gJy4vYWxsLWV2ZW50cy1kaWFsb2cnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGVkRGF5RXZlbnRzIH0gZnJvbSAnLi9hbGwtZXZlbnRzLWRpYWxvZydcbmltcG9ydCB7IERyb3BwYWJsZUNlbGwgfSBmcm9tICcuL2Ryb3BwYWJsZS1jZWxsJ1xuaW1wb3J0IHsgdXNlU21hcnRDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2hvb2tzL3VzZS1zbWFydC1jYWxlbmRhci1jb250ZXh0J1xuXG5pbnRlcmZhY2UgR3JpZFByb3BzIHtcbiAgaW5kZXg6IG51bWJlciAvLyBJbmRleCBvZiB0aGUgZGF5IGluIHRoZSB3ZWVrICgwLTYpXG4gIGRheTogZGF5anMuRGF5anNcbiAgZGF5TWF4RXZlbnRzPzogbnVtYmVyXG4gIGNsYXNzTmFtZT86IHN0cmluZyAvLyBPcHRpb25hbCBjbGFzc05hbWUgZm9yIGN1c3RvbSBzdHlsaW5nXG4gIHJlc291cmNlSWQ/OiBzdHJpbmcgfCBudW1iZXIgLy8gT3B0aW9uYWwgcmVzb3VyY2UgSUQgZm9yIHJlc291cmNlLXNwZWNpZmljIGRheSBjZWxsc1xuICBncmlkVHlwZT86ICdkYXknIHwgJ2hvdXInIC8vIEZ1dHVyZSB1c2UgZm9yIGRpZmZlcmVudCBncmlkIHR5cGVzXG59XG5cbmV4cG9ydCBjb25zdCBHcmlkQ2VsbDogUmVhY3QuRkM8R3JpZFByb3BzPiA9ICh7XG4gIGluZGV4LFxuICBkYXksXG4gIGNsYXNzTmFtZSA9ICcnLFxuICByZXNvdXJjZUlkLFxuICBncmlkVHlwZSA9ICdkYXknLFxufSkgPT4ge1xuICBjb25zdCBhbGxFdmVudHNEaWFsb2dSZWYgPSBSZWFjdC51c2VSZWY8e1xuICAgIG9wZW46ICgpID0+IHZvaWRcbiAgICBjbG9zZTogKCkgPT4gdm9pZFxuICAgIHNldFNlbGVjdGVkRGF5RXZlbnRzOiAoZGF5RXZlbnRzOiBTZWxlY3RlZERheUV2ZW50cykgPT4gdm9pZFxuICB9PihudWxsKVxuICBjb25zdCB7XG4gICAgZGF5TWF4RXZlbnRzID0gMCxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2UsXG4gICAgY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWssXG4gICAgdCxcbiAgICBnZXRFdmVudHNGb3JSZXNvdXJjZSxcbiAgfSA9IHVzZVNtYXJ0Q2FsZW5kYXJDb250ZXh0KChzdGF0ZSkgPT4gKHtcbiAgICBkYXlNYXhFdmVudHM6IHN0YXRlLmRheU1heEV2ZW50cyxcbiAgICBnZXRFdmVudHNGb3JEYXRlUmFuZ2U6IHN0YXRlLmdldEV2ZW50c0ZvckRhdGVSYW5nZSxcbiAgICBjdXJyZW50RGF0ZTogc3RhdGUuY3VycmVudERhdGUsXG4gICAgZmlyc3REYXlPZldlZWs6IHN0YXRlLmZpcnN0RGF5T2ZXZWVrLFxuICAgIHQ6IHN0YXRlLnQsXG4gICAgZ2V0RXZlbnRzRm9yUmVzb3VyY2U6IHN0YXRlLmdldEV2ZW50c0ZvclJlc291cmNlLFxuICB9KSlcblxuICBjb25zdCB0b2RheUV2ZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlc291cmNlRXZlbnRzID0gcmVzb3VyY2VJZCA/IGdldEV2ZW50c0ZvclJlc291cmNlKHJlc291cmNlSWQpIDogW11cbiAgICBjb25zdCB0b2RheUV2ZW50cyA9IGdldEV2ZW50c0ZvckRhdGVSYW5nZShcbiAgICAgIGRheS5zdGFydE9mKGdyaWRUeXBlKSxcbiAgICAgIGRheS5lbmRPZihncmlkVHlwZSlcbiAgICApXG5cbiAgICBpZiAocmVzb3VyY2VFdmVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdG9kYXlFdmVudHMuZmlsdGVyKChldmVudCkgPT5cbiAgICAgICAgcmVzb3VyY2VFdmVudHMuc29tZSgocmUpID0+IFN0cmluZyhyZS5pZCkgPT09IFN0cmluZyhldmVudC5pZCkpXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRvZGF5RXZlbnRzXG4gIH0sIFtkYXksIHJlc291cmNlSWQsIGdldEV2ZW50c0ZvckRhdGVSYW5nZSwgZ2V0RXZlbnRzRm9yUmVzb3VyY2UsIGdyaWRUeXBlXSlcblxuICAvLyBHZXQgc3RhcnQgZGF0ZSBmb3IgdGhlIGN1cnJlbnQgbW9udGggdmlldyBiYXNlZCBvbiBmaXJzdERheU9mV2Vla1xuICBjb25zdCBmaXJzdERheU9mTW9udGggPSBjdXJyZW50RGF0ZS5zdGFydE9mKCdtb250aCcpXG5cbiAgLy8gQ2FsY3VsYXRlIHRoZSBmaXJzdCBkYXkgb2YgdGhlIGNhbGVuZGFyIGdyaWQgY29ycmVjdGx5XG4gIC8vIEZpbmQgdGhlIGZpcnN0IGRheSBvZiB3ZWVrIChlLmcuIFN1bmRheSBvciBNb25kYXkpIHRoYXQgY29tZXMgYmVmb3JlIG9yIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXG4gIGxldCBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGZpcnN0RGF5T2ZNb250aC5jbG9uZSgpXG4gIHdoaWxlIChhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhci5kYXkoKSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICBhZGp1c3RlZEZpcnN0RGF5T2ZDYWxlbmRhciA9IGFkanVzdGVkRmlyc3REYXlPZkNhbGVuZGFyLnN1YnRyYWN0KDEsICdkYXknKVxuICB9XG5cbiAgLy8gSGFuZGxlciBmb3Igc2hvd2luZyBhbGwgZXZlbnRzIGluIGEgZGlhbG9nXG4gIGNvbnN0IHNob3dBbGxFdmVudHMgPSAoZGF5OiBkYXlqcy5EYXlqcywgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10pID0+IHtcbiAgICBhbGxFdmVudHNEaWFsb2dSZWYuY3VycmVudD8uc2V0U2VsZWN0ZWREYXlFdmVudHMoe1xuICAgICAgZGF5LFxuICAgICAgZXZlbnRzLFxuICAgIH0pXG4gICAgYWxsRXZlbnRzRGlhbG9nUmVmLmN1cnJlbnQ/Lm9wZW4oKVxuICB9XG5cbiAgY29uc3QgaXNDdXJyZW50TW9udGggPSBkYXkubW9udGgoKSA9PT0gY3VycmVudERhdGUubW9udGgoKVxuICBjb25zdCBpc0xhc3RDb2x1bW4gPSBpbmRleCA9PT0gNiAvLyBTYXR1cmRheSBpcyB0aGUgbGFzdCBjb2x1bW4gaW4gYSB3ZWVrXG5cbiAgY29uc3QgaGlkZGVuRXZlbnRzQ291bnQgPSB0b2RheUV2ZW50cy5sZW5ndGggLSBkYXlNYXhFdmVudHNcbiAgY29uc3QgaGFzSGlkZGVuRXZlbnRzID0gaGlkZGVuRXZlbnRzQ291bnQgPiAwXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyb3BwYWJsZUNlbGxcbiAgICAgICAgaWQ9e2BkYXktY2VsbC0ke2RheS50b0lTT1N0cmluZygpfSR7cmVzb3VyY2VJZCA/IGAtcmVzb3VyY2UtJHtyZXNvdXJjZUlkfWAgOiAnJ31gfVxuICAgICAgICB0eXBlPVwiZGF5LWNlbGxcIlxuICAgICAgICBkYXRhLXRlc3RpZD17YGRheS1jZWxsLSR7ZGF5LnRvSVNPU3RyaW5nKCl9YH1cbiAgICAgICAgZGF0ZT17ZGF5fVxuICAgICAgICByZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdjdXJzb3ItcG9pbnRlciBvdmVyZmxvdy1jbGlwIHAtMSBob3ZlcjpiZy1hY2NlbnQgbWluLWgtWzYwcHhdJyxcbiAgICAgICAgICAhaXNDdXJyZW50TW9udGggJiYgJ2JnLXNlY29uZGFyeSB0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgIGlzTGFzdENvbHVtbiAmJiAnYm9yZGVyLXItMCcsXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHsvKiBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQgbXVsdGktZGF5IGJhcnMgKEdvb2dsZSBDYWxlbmRhciBzdHlsZSkgKi99XG5cbiAgICAgICAgey8qIFNpbmdsZS1kYXkgZXZlbnRzIGNvbnRhaW5lciBwb3NpdGlvbmVkIGJlbG93IG11bHRpLWRheSBldmVudHMgKi99XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgIHsvKiBSZW5kZXIgcGxhY2Vob2xkZXJzIGZvciBldmVudHMgdGhhdCBvY2N1ciB0b2RheSBzbyB0aGF0IHRoZSBjZWxsIGhlaWdodCBpcyBhY2NvcmRpbmcgdG8gZGF5TWF4RXZlbnRzLiAqL31cbiAgICAgICAgICB7dG9kYXlFdmVudHMuc2xpY2UoMCwgZGF5TWF4RXZlbnRzKS5tYXAoKGV2ZW50LCByb3dJbmRleCkgPT4gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBrZXk9e2BlbXB0eS0ke3Jvd0luZGV4fWB9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtWzIwcHhdIHctZnVsbFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPXtldmVudD8udGl0bGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuXG4gICAgICAgICAgey8qIFNob3cgbW9yZSBldmVudHMgYnV0dG9uIHdpdGggYWNjdXJhdGUgY291bnQgKi99XG4gICAgICAgICAge2hhc0hpZGRlbkV2ZW50cyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cInRleHQtbXV0ZWQtZm9yZWdyb3VuZCBob3Zlcjp0ZXh0LWZvcmVncm91bmQgY3Vyc29yLXBvaW50ZXIgdGV4dC1bMTBweF0gd2hpdGVzcGFjZS1ub3dyYXAgc206dGV4dC14cyBtdC0xXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgfHwgZS5rZXkgPT09ICcgJykge1xuICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICBzaG93QWxsRXZlbnRzKGRheSwgdG9kYXlFdmVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgICAgICAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10YWctb3Zlci1yb2xlXG4gICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAre2hpZGRlbkV2ZW50c0NvdW50fSB7dCgnbW9yZScpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0Ryb3BwYWJsZUNlbGw+XG5cbiAgICAgIHsvKiBEaWFsb2cgZm9yIHNob3dpbmcgYWxsIGV2ZW50cyAqL31cbiAgICAgIDxBbGxFdmVudERpYWxvZyByZWY9e2FsbEV2ZW50c0RpYWxvZ1JlZn0gLz5cbiAgICA8Lz5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgeyBTY3JvbGxBcmVhLCBTY3JvbGxCYXIgfSBmcm9tICdAL2NvbXBvbmVudHMvdWknXG5pbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCB0eXBlIGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgUmVzb3VyY2VFdmVudHNMYXllciB9IGZyb20gJy4vcmVzb3VyY2UtZXZlbnRzLWxheWVyJ1xuaW1wb3J0IHsgR3JpZENlbGwgfSBmcm9tICdAL2NvbXBvbmVudHMvZ3JpZC1jZWxsJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYidcblxuaW50ZXJmYWNlIFJlc291cmNlRXZlbnRHcmlkUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgZGF5cyB0byBkaXNwbGF5IGluIHRoZSBncmlkXG4gICAqL1xuICBkYXlzOiBkYXlqcy5EYXlqc1tdXG4gIC8qKiBUaGUgdHlwZSBvZiBncmlkIHRvIGRpc3BsYXkgLSAnZGF5JyBmb3IgZGF5IHZpZXcsICdob3VyJyBmb3Igd2VlayB2aWV3XG4gICAqIChhZmZlY3RzIGV2ZW50IHBvc2l0aW9uaW5nIGxvZ2ljKVxuICAgKi9cbiAgZ3JpZFR5cGU/OiAnZGF5JyB8ICdob3VyJ1xuICAvKipcbiAgICogQ2hpbGRyZW4gd2lsbCBiZSByZW5kZXJlZCBhcyBoZWFkZXJzIGFib3ZlIHRoZSBncmlkXG4gICAqIChlLmcuLCBmb3IgZGF5IG5hbWVzIGluIG1vbnRoIHZpZXcpXG4gICAqL1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxufVxuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VFdmVudEdyaWQ6IFJlYWN0LkZDPFJlc291cmNlRXZlbnRHcmlkUHJvcHM+ID0gKHtcbiAgZGF5cyxcbiAgZ3JpZFR5cGUgPSAnZGF5JyxcbiAgY2hpbGRyZW4sXG59KSA9PiB7XG4gIGNvbnN0IHsgY3VycmVudERhdGUsIGdldFZpc2libGVSZXNvdXJjZXMsIGRheU1heEV2ZW50cywgcmVuZGVyUmVzb3VyY2UgfSA9XG4gICAgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQoKVxuXG4gIGNvbnN0IHZpc2libGVSZXNvdXJjZXMgPSBnZXRWaXNpYmxlUmVzb3VyY2VzKClcblxuICBjb25zdCByb3dzID0gdmlzaWJsZVJlc291cmNlcy5tYXAoKHJlc291cmNlKSA9PiAoe1xuICAgIGlkOiByZXNvdXJjZS5pZCxcbiAgICB0aXRsZTogcmVzb3VyY2UudGl0bGUsXG4gICAgcmVzb3VyY2U6IHJlc291cmNlLFxuICAgIGNlbGxzOiBkYXlzLm1hcCgoZGF5KSA9PiAoe1xuICAgICAgbGFiZWw6IGRheS5mb3JtYXQoJ0QnKSxcbiAgICAgIHZhbHVlOiBkYXksXG4gICAgICBpZDogZGF5LnRvSVNPU3RyaW5nKCksXG4gICAgfSkpLFxuICB9KSlcblxuICByZXR1cm4gKFxuICAgIDxTY3JvbGxBcmVhXG4gICAgICBjbGFzc05hbWU9XCJoLWZ1bGxcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb250aC1zY3JvbGwtYXJlYVwiXG4gICAgICB2aWV3UG9ydFByb3BzPXt7IGNsYXNzTmFtZTogJyo6ZmxleCEgKjpmbGV4LWNvbCEgKjptaW4taC1mdWxsJyB9fVxuICAgID5cbiAgICAgIHsvKiBoZWFkZXIgcm93ICovfVxuICAgICAge2NoaWxkcmVufVxuXG4gICAgICB7LyogQ2FsZW5kYXIgYXJlYSB3aXRoIHNjcm9sbCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgaC1bY2FsYygxMDAlLTNyZW0pXSB3LWZpdFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAga2V5PXtjdXJyZW50RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSB3LWZ1bGwgZmxleCBmbGV4LWNvbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7cm93cy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgPGRpdiBrZXk9e3Jvdy5pZH0gY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgcmVsYXRpdmUgbWluLWgtWzYwcHhdIFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICd3LTQwIGJvcmRlci1iIGJvcmRlci1yIHAtMiBmbGV4IGZsZXgtc2hyaW5rLTAgc3RpY2t5IGxlZnQtMCB6LTIwJyxcbiAgICAgICAgICAgICAgICAgIHJvdy5yZXNvdXJjZS5jb2xvciB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIHJvdy5yZXNvdXJjZS5iYWNrZ3JvdW5kQ29sb3IgfHwgJ2JnLWJhY2tncm91bmQnXG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6IHJvdy5yZXNvdXJjZS5jb2xvcixcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogcm93LnJlc291cmNlLmJhY2tncm91bmRDb2xvcixcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3JlbmRlclJlc291cmNlID8gKFxuICAgICAgICAgICAgICAgICAgcmVuZGVyUmVzb3VyY2Uocm93LnJlc291cmNlKVxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJyZWFrLXdvcmRzIHRleHQtc21cIj57cm93LnRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIGZsZXhcIj5cbiAgICAgICAgICAgICAgICB7cm93LmNlbGxzLm1hcCgoY2VsbCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEdyaWRDZWxsXG4gICAgICAgICAgICAgICAgICAgIGtleT17Y2VsbC5pZH1cbiAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2NlbGwudmFsdWUuZGF5KCl9XG4gICAgICAgICAgICAgICAgICAgIGRheT17Y2VsbC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJZD17cm93LmlkfVxuICAgICAgICAgICAgICAgICAgICBkYXlNYXhFdmVudHM9e2RheU1heEV2ZW50c31cbiAgICAgICAgICAgICAgICAgICAgZ3JpZFR5cGU9e2dyaWRUeXBlfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJib3JkZXItciBib3JkZXItYiB3LTIwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG5cbiAgICAgICAgICAgICAgICB7LyogRXZlbnRzIGxheWVyIHBvc2l0aW9uZWQgYWJzb2x1dGVseSBvdmVyIHRoZSByZXNvdXJjZSByb3cgKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC0wIHotMTAgcG9pbnRlci1ldmVudHMtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgPFJlc291cmNlRXZlbnRzTGF5ZXJcbiAgICAgICAgICAgICAgICAgICAgZGF5cz17ZGF5c31cbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VJZD17cm93LmlkfVxuICAgICAgICAgICAgICAgICAgICBncmlkVHlwZT17Z3JpZFR5cGV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPFNjcm9sbEJhciBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIiAvPlxuICAgIDwvU2Nyb2xsQXJlYT5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2UtbW9udGgtaG9yaXpvbnRhbCdcblxuZXhwb3J0IGNvbnN0IFJlc291cmNlTW9udGhWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIDxSZXNvdXJjZU1vbnRoSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IGdldFdlZWtEYXlzIH0gZnJvbSAnQC9saWIvdXRpbHMvZGF0ZS11dGlscydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbDogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjdXJyZW50RGF0ZSxcbiAgICBmaXJzdERheU9mV2VlayxcbiAgICB0LFxuICAgIHN0aWNreVZpZXdIZWFkZXIsXG4gICAgdmlld0hlYWRlckNsYXNzTmFtZSxcbiAgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuICAvLyBHZW5lcmF0ZSB3ZWVrIGRheXNcbiAgY29uc3Qgd2Vla0RheXMgPSB1c2VNZW1vKFxuICAgICgpID0+IGdldFdlZWtEYXlzKGN1cnJlbnREYXRlLCBmaXJzdERheU9mV2VlayksXG4gICAgW2N1cnJlbnREYXRlLCBmaXJzdERheU9mV2Vla11cbiAgKVxuXG4gIC8vIEdlbmVyYXRlIHRpbWUgY29sdW1ucyAoaG91cmx5IHNsb3RzKVxuICBjb25zdCB3ZWVrSG91cnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gd2Vla0RheXMuZmxhdE1hcCgoZGF5KSA9PlxuICAgICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogMjQgfSwgKF8sIGhvdXIpID0+IGRheS5ob3VyKGhvdXIpLm1pbnV0ZSgwKSlcbiAgICApXG4gIH0sIFt3ZWVrRGF5c10pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sIGJvcmRlclwiPlxuICAgICAgPFJlc291cmNlRXZlbnRHcmlkIGRheXM9e3dlZWtIb3Vyc30gZ3JpZFR5cGU9XCJob3VyXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgJ2ZsZXggaC0yNCB3LWZpdCcsXG4gICAgICAgICAgICBzdGlja3lWaWV3SGVhZGVyICYmICdzdGlja3kgdG9wLTAgei0yMSBiZy1iYWNrZ3JvdW5kJywgLy8gWi1pbmRleCBhYm92ZSB0aGUgbGVmdCBzdGlja3kgcmVzb3VyY2UgY29sdW1uXG4gICAgICAgICAgICB2aWV3SGVhZGVyQ2xhc3NOYW1lXG4gICAgICAgICAgKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy00MCBib3JkZXItYiBib3JkZXItciBmbGV4LXNocmluay0wIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIHN0aWNreSB0b3AtMCBsZWZ0LTAgYmctYmFja2dyb3VuZCB6LTIwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57dCgncmVzb3VyY2VzJyl9PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBib3JkZXItYiBib3JkZXItciBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICB7LyogRGF5IGhlYWRlciByb3cgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuICAgICAgICAgICAgICB7d2Vla0RheXMubWFwKChkYXksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNUb2RheSA9IGRheS5pc1NhbWUoZGF5anMoKSwgJ2RheScpXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYHJlc291cmNlLXdlZWstaGVhZGVyLSR7ZGF5LnRvSVNPU3RyaW5nKCl9LWRheWBcblxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8QW5pbWF0ZVByZXNlbmNlIGtleT17YCR7a2V5fS1wcmVzZW5jZWB9IG1vZGU9XCJ3YWl0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgJHtrZXl9LW1vdGlvbmB9XG4gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjI1LFxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzZTogJ2Vhc2VJbk91dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheTogaW5kZXggKiAwLjA1LFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdmbGV4LXNocmluay0wIGJvcmRlci1yIGZsZXggaXRlbXMtY2VudGVyIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIHctW2NhbGMoMjQqdmFyKC0tc3BhY2luZykqMjApXScsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1RvZGF5ICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAnXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3RpY2t5IGxlZnQtMS8yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc21cIj57ZGF5LmZvcm1hdCgnZGRkJyl9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtkYXkuZm9ybWF0KCdNL0QnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuICAgICAgICAgICAgICB7d2Vla0hvdXJzLm1hcCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTm93SG91ciA9IGNvbC5pc1NhbWUoZGF5anMoKSwgJ2hvdXInKVxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGByZXNvdXJjZS13ZWVrLWhlYWRlci0ke2NvbC50b0lTT1N0cmluZygpfS1ob3VyYFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2Uga2V5PXtgJHtrZXl9LXByZXNlbmNlYH0gbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2Ake2tleX0tbW90aW9uYH1cbiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IC0xMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMjUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlYXNlOiAnZWFzZUluT3V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5OiBpbmRleCAqIDAuMDUsXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ctMjAgYm9yZGVyLXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC14cyBmbGV4LXNocmluay0wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTm93SG91ciAmJiAnYmctYmx1ZS01MCB0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtJ1xuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7Y29sLmZvcm1hdCgnaGEnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgICAgICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUmVzb3VyY2VFdmVudEdyaWQ+XG4gICAgPC9kaXY+XG4gIClcbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgUmVzb3VyY2VXZWVrSG9yaXpvbnRhbCB9IGZyb20gJy4vcmVzb3VyY2Utd2Vlay1ob3Jpem9udGFsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VXZWVrVmlldzogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIHJldHVybiA8UmVzb3VyY2VXZWVrSG9yaXpvbnRhbCAvPlxufVxuIiwKICAgICJpbXBvcnQgeyB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZUV2ZW50R3JpZCB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9yZXNvdXJjZS1ldmVudC1ncmlkJ1xuaW1wb3J0IGRheWpzIGZyb20gJ0AvbGliL2NvbmZpZ3MvZGF5anMtY29uZmlnJ1xuaW1wb3J0IHsgY24gfSBmcm9tICdAL2xpYi91dGlscydcbmltcG9ydCB7IEFuaW1hdGVQcmVzZW5jZSwgbW90aW9uIH0gZnJvbSAnbW90aW9uL3JlYWN0J1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlIb3Jpem9udGFsOiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgY29uc3QgeyBjdXJyZW50RGF0ZSwgdCwgc3RpY2t5Vmlld0hlYWRlciwgdmlld0hlYWRlckNsYXNzTmFtZSB9ID1cbiAgICB1c2VSZXNvdXJjZUNhbGVuZGFyQ29udGV4dCgpXG5cbiAgLy8gR2VuZXJhdGUgdGltZSBjb2x1bW5zIChob3VybHkgc2xvdHMpXG4gIGNvbnN0IGRheUhvdXJzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDI0IH0sIChfLCBob3VyKSA9PlxuICAgICAgY3VycmVudERhdGUuaG91cihob3VyKS5taW51dGUoMClcbiAgICApXG4gIH0sIFtjdXJyZW50RGF0ZV0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sIGJvcmRlclwiPlxuICAgICAgPFJlc291cmNlRXZlbnRHcmlkIGRheXM9e2RheUhvdXJzfSBncmlkVHlwZT1cImhvdXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZmxleCBoLTEyIHctZml0JyxcbiAgICAgICAgICAgIHN0aWNreVZpZXdIZWFkZXIgJiYgJ3N0aWNreSB0b3AtMCB6LTIxIGJnLWJhY2tncm91bmQnLCAvLyBaLWluZGV4IGFib3ZlIHRoZSBsZWZ0IHN0aWNreSByZXNvdXJjZSBjb2x1bW5cbiAgICAgICAgICAgIHZpZXdIZWFkZXJDbGFzc05hbWVcbiAgICAgICAgICApfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LTQwIGJvcmRlci1iIGJvcmRlci1yIGZsZXgtc2hyaW5rLTAgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIgc3RpY2t5IHRvcC0wIGxlZnQtMCBiZy1iYWNrZ3JvdW5kIHotMjBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGV4dC1zbVwiPnt0KCdyZXNvdXJjZXMnKX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIGJvcmRlci1iIGJvcmRlci1yIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgIHsvKiBUaW1lIGhlYWRlciByb3cgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMiBib3JkZXItYlwiPlxuICAgICAgICAgICAgICB7ZGF5SG91cnMubWFwKChjb2wsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNOb3dIb3VyID0gY29sLmlzU2FtZShkYXlqcygpLCAnaG91cicpXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYHJlc291cmNlLWRheS1oZWFkZXItJHtjb2wudG9JU09TdHJpbmcoKX1gXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBrZXk9e2Ake2tleX0tcHJlc2VuY2VgfSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7a2V5fS1tb3Rpb25gfVxuICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWw9e3sgb3BhY2l0eTogMCwgeTogLTEwIH19XG4gICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgZXhpdD17eyBvcGFjaXR5OiAwLCB5OiAtMTAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6ICdlYXNlSW5PdXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk6IGluZGV4ICogMC4wNSxcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAndy0yMCBib3JkZXItciBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXhzIGZsZXgtc2hyaW5rLTAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNOb3dIb3VyICYmICdiZy1ibHVlLTUwIHRleHQtYmx1ZS02MDAgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtjb2wuZm9ybWF0KCdoYScpfVxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9SZXNvdXJjZUV2ZW50R3JpZD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIiwKICAgICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBSZXNvdXJjZURheUhvcml6b250YWwgfSBmcm9tICcuL3Jlc291cmNlLWRheS1ob3Jpem9udGFsJ1xuXG5leHBvcnQgY29uc3QgUmVzb3VyY2VEYXlWaWV3OiBSZWFjdC5GQyA9ICgpID0+IHtcbiAgcmV0dXJuIDxSZXNvdXJjZURheUhvcml6b250YWwgLz5cbn1cbiIsCiAgICAiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQnXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICdAL2NvbXBvbmVudHMvaGVhZGVyJ1xuaW1wb3J0IHsgUmVzb3VyY2VNb250aFZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvbW9udGgtdmlldydcbmltcG9ydCB7IFJlc291cmNlV2Vla1ZpZXcgfSBmcm9tICdAL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbXBvbmVudHMvd2Vlay12aWV3J1xuaW1wb3J0IHsgUmVzb3VyY2VEYXlWaWV3IH0gZnJvbSAnQC9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2RheS12aWV3J1xuaW1wb3J0IHsgQ2FsZW5kYXJEbmRDb250ZXh0IH0gZnJvbSAnQC9jb21wb25lbnRzL2RyYWctYW5kLWRyb3AvY2FsZW5kYXItZG5kLWNvbnRleHQnXG5pbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIG1vdGlvbiB9IGZyb20gJ21vdGlvbi9yZWFjdCdcbmltcG9ydCB7IEV2ZW50Rm9ybSB9IGZyb20gJ0AvY29tcG9uZW50cy9ldmVudC1mb3JtL2V2ZW50LWZvcm0nXG5pbXBvcnQgdHlwZSB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICdAL2NvbXBvbmVudHMvdHlwZXMnXG5cbmV4cG9ydCBjb25zdCBSZXNvdXJjZUNhbGVuZGFyQm9keTogUmVhY3QuRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHtcbiAgICB2aWV3LFxuICAgIGlzRXZlbnRGb3JtT3BlbixcbiAgICBjbG9zZUV2ZW50Rm9ybSxcbiAgICBzZWxlY3RlZEV2ZW50LFxuICAgIHNlbGVjdGVkRGF0ZSxcbiAgICBhZGRFdmVudCxcbiAgICB1cGRhdGVFdmVudCxcbiAgICBkZWxldGVFdmVudCxcbiAgfSA9IHVzZVJlc291cmNlQ2FsZW5kYXJDb250ZXh0KClcblxuICBjb25zdCB2aWV3TWFwID0ge1xuICAgIG1vbnRoOiA8UmVzb3VyY2VNb250aFZpZXcga2V5PVwibW9udGhcIiAvPixcbiAgICB3ZWVrOiA8UmVzb3VyY2VXZWVrVmlldyBrZXk9XCJ3ZWVrXCIgLz4sXG4gICAgZGF5OiA8UmVzb3VyY2VEYXlWaWV3IGtleT1cImRheVwiIC8+LFxuICB9XG5cbiAgY29uc3QgaGFuZGxlT25VcGRhdGUgPSAoZXZlbnQ6IENhbGVuZGFyRXZlbnQpID0+IHtcbiAgICB1cGRhdGVFdmVudChldmVudC5pZCwgZXZlbnQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPbkRlbGV0ZSA9IChldmVudDogQ2FsZW5kYXJFdmVudCkgPT4ge1xuICAgIGRlbGV0ZUV2ZW50KGV2ZW50LmlkKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICAgICAgPEhlYWRlciBjbGFzc05hbWU9XCJwLTFcIiAvPlxuXG4gICAgICB7LyogQ2FsZW5kYXIgQm9keSB3aXRoIEFuaW1hdGVQcmVzZW5jZSBmb3IgdmlldyB0cmFuc2l0aW9ucyAqL31cbiAgICAgIDxDYWxlbmRhckRuZENvbnRleHQ+XG4gICAgICAgIDxBbmltYXRlUHJlc2VuY2UgbW9kZT1cIndhaXRcIj5cbiAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAga2V5PXt2aWV3fVxuICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB4OiAyMCB9fVxuICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB4OiAwIH19XG4gICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAsIHg6IC0yMCB9fVxuICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4xLCBlYXNlOiAnZWFzZUluT3V0JyB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsIGgtW2NhbGMoMTAwJS0zLjVyZW0pXVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3ZpZXdNYXBbdmlld119XG4gICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgIDwvQ2FsZW5kYXJEbmRDb250ZXh0PlxuXG4gICAgICB7LyogRXZlbnQgRm9ybSBEaWFsb2cgKi99XG4gICAgICB7aXNFdmVudEZvcm1PcGVuICYmIChcbiAgICAgICAgPEV2ZW50Rm9ybVxuICAgICAgICAgIG9uQ2xvc2U9e2Nsb3NlRXZlbnRGb3JtfVxuICAgICAgICAgIHNlbGVjdGVkRXZlbnQ9e3NlbGVjdGVkRXZlbnR9XG4gICAgICAgICAgc2VsZWN0ZWREYXRlPXtzZWxlY3RlZERhdGV9XG4gICAgICAgICAgb25BZGQ9e2FkZEV2ZW50fVxuICAgICAgICAgIG9uVXBkYXRlPXtoYW5kbGVPblVwZGF0ZX1cbiAgICAgICAgICBvbkRlbGV0ZT17aGFuZGxlT25EZWxldGV9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iLAogICAgImltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJQcm92aWRlciB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29udGV4dHMvcmVzb3VyY2UtY2FsZW5kYXItY29udGV4dCdcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFJlc291cmNlQ2FsZW5kYXJCb2R5IH0gZnJvbSAnLi9yZXNvdXJjZS1jYWxlbmRhci1ib2R5J1xuaW1wb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJ0AvZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvdHlwZXMnXG5pbXBvcnQgeyBEQVlfTUFYX0VWRU5UU19ERUZBVUxULCBXRUVLX0RBWVNfTlVNQkVSX01BUCB9IGZyb20gJ0AvbGliL2NvbnN0YW50cydcblxuZXhwb3J0IGNvbnN0IElsYW15UmVzb3VyY2VDYWxlbmRhcjogUmVhY3QuRkM8SWxhbXlSZXNvdXJjZUNhbGVuZGFyUHJvcHM+ID0gKHtcbiAgZXZlbnRzID0gW10sXG4gIHJlc291cmNlcyA9IFtdLFxuICBmaXJzdERheU9mV2VlayA9ICdzdW5kYXknLFxuICBpbml0aWFsVmlldyA9ICdtb250aCcsXG4gIHJlbmRlckV2ZW50LFxuICBvbkV2ZW50Q2xpY2ssXG4gIG9uQ2VsbENsaWNrLFxuICBvblZpZXdDaGFuZ2UsXG4gIG9uRXZlbnRBZGQsXG4gIG9uRXZlbnRVcGRhdGUsXG4gIG9uRXZlbnREZWxldGUsXG4gIG9uRGF0ZUNoYW5nZSxcbiAgbG9jYWxlLFxuICB0aW1lem9uZSxcbiAgZGlzYWJsZUNlbGxDbGljayxcbiAgZGlzYWJsZUV2ZW50Q2xpY2ssXG4gIGRpc2FibGVEcmFnQW5kRHJvcCA9IGZhbHNlLFxuICBkYXlNYXhFdmVudHMgPSBEQVlfTUFYX0VWRU5UU19ERUZBVUxULFxuICBzdGlja3lWaWV3SGVhZGVyLFxuICB2aWV3SGVhZGVyQ2xhc3NOYW1lLFxuICBoZWFkZXJDb21wb25lbnQsXG4gIGhlYWRlckNsYXNzTmFtZSxcbiAgdHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdG9yLFxuICByZW5kZXJSZXNvdXJjZSxcbn0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8UmVzb3VyY2VDYWxlbmRhclByb3ZpZGVyXG4gICAgICBldmVudHM9e2V2ZW50c31cbiAgICAgIHJlc291cmNlcz17cmVzb3VyY2VzfVxuICAgICAgZmlyc3REYXlPZldlZWs9e1dFRUtfREFZU19OVU1CRVJfTUFQW2ZpcnN0RGF5T2ZXZWVrXX1cbiAgICAgIGluaXRpYWxWaWV3PXtpbml0aWFsVmlld31cbiAgICAgIHJlbmRlckV2ZW50PXtyZW5kZXJFdmVudH1cbiAgICAgIHJlbmRlclJlc291cmNlPXtyZW5kZXJSZXNvdXJjZX1cbiAgICAgIG9uRXZlbnRDbGljaz17b25FdmVudENsaWNrfVxuICAgICAgb25DZWxsQ2xpY2s9e29uQ2VsbENsaWNrfVxuICAgICAgb25WaWV3Q2hhbmdlPXtvblZpZXdDaGFuZ2V9XG4gICAgICBvbkV2ZW50QWRkPXtvbkV2ZW50QWRkfVxuICAgICAgb25FdmVudFVwZGF0ZT17b25FdmVudFVwZGF0ZX1cbiAgICAgIG9uRXZlbnREZWxldGU9e29uRXZlbnREZWxldGV9XG4gICAgICBvbkRhdGVDaGFuZ2U9e29uRGF0ZUNoYW5nZX1cbiAgICAgIGxvY2FsZT17bG9jYWxlfVxuICAgICAgdGltZXpvbmU9e3RpbWV6b25lfVxuICAgICAgZGlzYWJsZUNlbGxDbGljaz17ZGlzYWJsZUNlbGxDbGlja31cbiAgICAgIGRpc2FibGVFdmVudENsaWNrPXtkaXNhYmxlRXZlbnRDbGlja31cbiAgICAgIGRpc2FibGVEcmFnQW5kRHJvcD17ZGlzYWJsZURyYWdBbmREcm9wfVxuICAgICAgZGF5TWF4RXZlbnRzPXtkYXlNYXhFdmVudHN9XG4gICAgICBzdGlja3lWaWV3SGVhZGVyPXtzdGlja3lWaWV3SGVhZGVyfVxuICAgICAgdmlld0hlYWRlckNsYXNzTmFtZT17dmlld0hlYWRlckNsYXNzTmFtZX1cbiAgICAgIGhlYWRlckNvbXBvbmVudD17aGVhZGVyQ29tcG9uZW50fVxuICAgICAgaGVhZGVyQ2xhc3NOYW1lPXtoZWFkZXJDbGFzc05hbWV9XG4gICAgICB0cmFuc2xhdGlvbnM9e3RyYW5zbGF0aW9uc31cbiAgICAgIHRyYW5zbGF0b3I9e3RyYW5zbGF0b3J9XG4gICAgPlxuICAgICAgPFJlc291cmNlQ2FsZW5kYXJCb2R5IC8+XG4gICAgPC9SZXNvdXJjZUNhbGVuZGFyUHJvdmlkZXI+XG4gIClcbn1cbiIsCiAgICAiLy8gTWFpbiBjYWxlbmRhciBjb21wb25lbnRzXG5leHBvcnQgeyBJbGFteUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LWNhbGVuZGFyJ1xuZXhwb3J0IHsgSWxhbXlSZXNvdXJjZUNhbGVuZGFyIH0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci9jb21wb25lbnRzL2lsYW15LXJlc291cmNlLWNhbGVuZGFyL2lsYW15LXJlc291cmNlLWNhbGVuZGFyJ1xuXG4vLyBQdWJsaWMgY2FsZW5kYXIgY29udGV4dCBob29rc1xuZXhwb3J0IHsgdXNlSWxhbXlDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL2NvbnRleHRzL2NhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcbmV4cG9ydCB7IHVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHQgfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuLy8gUlJVTEUtYmFzZWQgcmVjdXJyZW5jZSBzeXN0ZW1cbmV4cG9ydCB7XG4gIGdlbmVyYXRlUmVjdXJyaW5nRXZlbnRzLFxuICBpc1JlY3VycmluZ0V2ZW50LFxufSBmcm9tICdAL2ZlYXR1cmVzL3JlY3VycmVuY2UvdXRpbHMvcmVjdXJyZW5jZS1oYW5kbGVyJ1xuXG4vLyBFeHBvcnQgdHlwZXNcbmV4cG9ydCB0eXBlIHsgUlJ1bGVPcHRpb25zIH0gZnJvbSAnQC9mZWF0dXJlcy9yZWN1cnJlbmNlL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteUNhbGVuZGFyUHJvcHMgfSBmcm9tICcuL2ZlYXR1cmVzL2NhbGVuZGFyL3R5cGVzJ1xuZXhwb3J0IHR5cGUgeyBJbGFteVJlc291cmNlQ2FsZW5kYXJQcm9wcyB9IGZyb20gJy4vZmVhdHVyZXMvcmVzb3VyY2UtY2FsZW5kYXIvY29tcG9uZW50cy9pbGFteS1yZXNvdXJjZS1jYWxlbmRhcidcbmV4cG9ydCB0eXBlIHsgV2Vla0RheXMgfSBmcm9tICcuL2NvbXBvbmVudHMvdHlwZXMnXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15Q2FsZW5kYXJDb250ZXh0UmV0dXJuIH0gZnJvbSAnLi9mZWF0dXJlcy9jYWxlbmRhci9jb250ZXh0cy9jYWxlbmRhci1jb250ZXh0L2NvbnRleHQnXG5leHBvcnQgdHlwZSB7IFVzZUlsYW15UmVzb3VyY2VDYWxlbmRhckNvbnRleHRSZXR1cm4gfSBmcm9tICcuL2ZlYXR1cmVzL3Jlc291cmNlLWNhbGVuZGFyL2NvbnRleHRzL3Jlc291cmNlLWNhbGVuZGFyLWNvbnRleHQvY29udGV4dCdcblxuLy8gUmVzb3VyY2UgY2FsZW5kYXIgdHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgUmVzb3VyY2UsXG4gIFJlc291cmNlQ2FsZW5kYXJFdmVudCxcbn0gZnJvbSAnLi9mZWF0dXJlcy9yZXNvdXJjZS1jYWxlbmRhci90eXBlcydcbi8vIFJlLWV4cG9ydCBycnVsZS5qcyB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRnJlcXVlbmN5LCBXZWVrZGF5IH0gZnJvbSAncnJ1bGUnXG5leHBvcnQgeyBSUnVsZSB9IGZyb20gJ3JydWxlJ1xuXG4vLyBUcmFuc2xhdGlvbiBzeXN0ZW1cbmV4cG9ydCB0eXBlIHtcbiAgVHJhbnNsYXRpb25zLFxuICBUcmFuc2xhdGlvbktleSxcbiAgVHJhbnNsYXRvckZ1bmN0aW9uLFxufSBmcm9tICcuL2xpYi90cmFuc2xhdGlvbnMvdHlwZXMnXG5leHBvcnQgeyBkZWZhdWx0VHJhbnNsYXRpb25zIH0gZnJvbSAnLi9saWIvdHJhbnNsYXRpb25zL2RlZmF1bHQnXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiQUFDQSwwQkFBUyxhQUFpQixzQkFDMUIsc0JBQWdCLGVDRWhCLHdCQUFTLGlCQUFlLGVBb0RqQixJQUFNLEdBQ1gsR0FBK0MsTUFBUyxFQUU3QyxFQUFxQixJQUEyQixDQUMzRCxJQUFNLEVBQVUsR0FBVyxFQUFlLEVBQzFDLEdBQUksSUFBWSxPQUNkLE1BQVUsTUFBTSwyREFBMkQsRUFFN0UsT0FBTyxHQStCSSxHQUEwQixJQUFxQyxDQUMxRSxJQUFNLEVBQVUsR0FBVyxFQUFlLEVBQzFDLEdBQUksSUFBWSxPQUNkLE1BQVUsTUFDUixnRUFDRixFQUVGLE1BQU8sQ0FDTCxZQUFhLEVBQVEsWUFDckIsS0FBTSxFQUFRLEtBQ2QsT0FBUSxFQUFRLE9BQ2hCLGdCQUFpQixFQUFRLGdCQUN6QixjQUFlLEVBQVEsY0FDdkIsYUFBYyxFQUFRLGFBQ3RCLGVBQWdCLEVBQVEsZUFDeEIsZUFBZ0IsRUFBUSxlQUN4QixXQUFZLEVBQVEsV0FDcEIsUUFBUyxFQUFRLFFBQ2pCLFdBQVksRUFBUSxXQUNwQixXQUFZLEVBQVEsV0FDcEIsTUFBTyxFQUFRLE1BQ2YsU0FBVSxFQUFRLFNBQ2xCLFlBQWEsRUFBUSxZQUNyQixZQUFhLEVBQVEsWUFDckIsY0FBZSxFQUFRLGNBQ3ZCLGVBQWdCLEVBQVEsY0FDMUIsR0N2SEYsZUFBUyxjQ0ZULHNCQUNBLHdDQUNBLDJDQUNBLDhDQUNBLCtDQUNBLDBDQUNBLHVDQUNBLHlDQUNBLG9DQUNBLDJDQWVBLDJCQUNBLDJCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLGlDQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLCtCQUNBLDhCQUNBLDJCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLGdDQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDRCQUNBLDJCQUNBLDJCQUNBLDJCQUNBLDhCQUNBLDRCQUNBLDJCQUNBLDRCQUNBLGlDQUNBLDRCQUNBLDhCQUNBLDJCQUNBLDJCQUNBLGdDQUNBLDJCQUNBLDJCQUNBLGlDQUNBLDJCQUNBLDhCQUNBLDhCQUNBLDhCQUNBLDJCQTFKQSxHQUFNLE9BQU8sRUFBTyxFQUNwQixHQUFNLE9BQU8sRUFBVSxFQUN2QixHQUFNLE9BQU8sRUFBYSxFQUMxQixHQUFNLE9BQU8sRUFBYyxFQUMzQixHQUFNLE9BQU8sRUFBUyxFQUN0QixHQUFNLE9BQU8sRUFBTSxFQUNuQixHQUFN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LG1CQUNBLG9CQUNBLHFCQUFxQixHQUNyQixlQUFlLEdBQ2YsbUJBQ0Esc0JBQ0Esa0JBQ0Esa0JBQ0EsZUFDQSxhQUNBLG9CQUNJLENBQ0osT0FDRSxHQTRCRSxHQTVCRixDQUNFLE9BQVEsRUFDUixVQUFXLEVBQ1gsZUFBZ0IsR0FBcUIsR0FDckMsWUFBYSxFQUNiLFlBQWEsRUFDYixlQUFnQixFQUNoQixhQUFjLEVBQ2QsWUFBYSxFQUNiLGFBQWMsRUFDZCxXQUFZLEVBQ1osY0FBZSxFQUNmLGNBQWUsRUFDZixhQUFjLEVBQ2QsT0FBUSxFQUNSLFNBQVUsRUFDVixpQkFBa0IsRUFDbEIsa0JBQW1CLEVBQ25CLG1CQUFvQixFQUNwQixhQUFjLEVBQ2QsaUJBQWtCLEVBQ2xCLG9CQUFxQixFQUNyQixnQkFBaUIsRUFDakIsZ0JBQWlCLEVBQ2pCLGFBQWMsRUFDZCxXQUFZLEVBekJkLFNBMkJFLEdBQUMsR0FBRCxFQUFzQixFQUN0QixHQ2hDTixnQkFBUyIsCiAgImRlYnVnSWQiOiAiNzdGNEM4MTQzNDhFNDI1MDY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=